我正在使用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连接,并在一台服务器上运行两个从站实例。
发布于 2019-02-03 06:26:46
您必须创建线程安全读/写。如果你读或写,你不能用不受控制的线程来做。当你读或写的时候,你需要锁定线程。我不能解释为什么,但上次我使用modbus时,我遇到了类似的问题。Modbus根本不能很好地处理线程。锁起了很大的作用,但最安全的做法是不使用线程。
理念:
import threading
lock = threading.Lock()
def read():
with lock:
read....
def write():
with lock:
write....https://stackoverflow.com/questions/54460053
复制相似问题