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....
Другие вопросы по тегам