Python Modbus-TK Modbus Server объединяет два запроса и, следовательно, получает ошибку CRC
Я использую библиотеку 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 ответ
Вы должны создать потокобезопасное чтение / запись. Если вы читаете или пишете, вы не можете сделать это с неконтролируемыми потоками. Вам нужно заблокировать темы, когда вы читаете или пишете. Я не могу объяснить, почему, но в прошлый раз, когда я работал с Modbus, у меня была похожая проблема. Modbus просто не может справиться с потоками очень хорошо. Локк очень помог, но все же наиболее безопасно это сделать без потоков.
Идея:
import threading
lock = threading.Lock()
def read():
with lock:
read....
def write():
with lock:
write....