2

我正在为 modbus 串行服务器使用 modbus-tk 库。所有的通信都已启动并正常工作。有一种情况,主机正在写入一个寄存器并读取下一个请求,但 modbus-tk 正在合并这两个请求,因此出现 CRC 错误

2019-01-31 17:19:59,881 DEBUG   modbus._handle  Thread-2    -->2-16-0-11-0-1-2-0-128-178-123-2-3-0-4-0-1-197-248
2019-01-31 17:19:59,881 ERROR   modbus.handle_request   Thread-2    invalid request: Invalid CRC in request

实际请求应为 2-16-0-11-0-1-2-0-128-178-123,其他请求应为 2-3-0-4-0-1-197-248

任何想法为什么我有这些问题

对于设置,Modbus 从站通过串行 232 连接并在单个服务器上运行两个从站实例。

4

1 回答 1

0

您必须创建线程安全的读/写。如果你读或写,你不能用不受控制的线程来做。您需要在读取或写入时锁定线程。我无法解释原因,但上次我使用 modbus 时,我遇到了类似的问题。Modbus 根本无法很好地处理线程。Lock 帮了很多忙,但最安全的是无线程。

主意:

import threading

lock = threading.Lock()

def read():
    with lock:
        read....

def write():
    with lock:
        write....
于 2019-02-02T22:26:46.337 回答