我使用的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连接并正在运行单个服务器上两个从实例。
你必须创建线程安全的读/写。如果你读或写,你不能有失控的线程做到这一点。当你读或写你需要锁的线程。我无法解释为什么,但我最后一次与MODBUS的工作,我有类似的问题。 MODBUS只是不能处理的线程非常好。锁定帮了不少忙,但还是最安全是做它Threadless的。
理念:
import threading
lock = threading.Lock()
def read():
with lock:
read....
def write():
with lock:
write....