Python modbus-tk modbus服务器正在合并两个请求,因此得到CRC错误

时间:2019-01-31 11:55:31

标签: modbus modbus-tk

我正在将modbus-tk库用于modbus串行服务器。所有的通信都已建立并且正在工作。在某些情况下,主机正在写入一个寄存器,但读取了下一个请求,但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连接,并在单个服务器上运行两个从站实例。

1 个答案:

答案 0 :(得分:0)

您必须创建线程安全的读/写。如果你读或写,你不能有失控的线程做到这一点。读写时需要锁定线程。我无法解释为什么,但是上一次我使用Modbus时,我遇到了类似的问题。 Modbus不能很好地处理线程。锁定帮了不少忙,但还是最安全是做它螺纹。

想法:

import threading

lock = threading.Lock()

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

def write():
    with lock:
        write....