我正在将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连接,并在单个服务器上运行两个从站实例。
答案 0 :(得分:0)
您必须创建线程安全的读/写。如果你读或写,你不能有失控的线程做到这一点。读写时需要锁定线程。我无法解释为什么,但是上一次我使用Modbus时,我遇到了类似的问题。 Modbus不能很好地处理线程。锁定帮了不少忙,但还是最安全是做它螺纹。
想法:
import threading
lock = threading.Lock()
def read():
with lock:
read....
def write():
with lock:
write....