Python Modbus-TK Modbus Server объединяет два запроса и, следовательно, получает ошибку CRC - PullRequest
0 голосов
/ 31 января 2019

Я использую библиотеку 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 Ответ

0 голосов
/ 03 февраля 2019

Вы должны создать потокобезопасное чтение / запись.Если вы читаете или пишете, вы не можете сделать это с неконтролируемыми потоками.Вам нужно заблокировать темы, когда вы читаете или пишете.Я не могу объяснить, почему, но в прошлый раз, когда я работал с Modbus, у меня была похожая проблема.Modbus просто не может справиться с потоками очень хорошо.Локк очень помог, но все же наиболее безопасно это сделать без потоков.

Идея:

import threading

lock = threading.Lock()

def read():
    with lock:
        read....

def write():
    with lock:
        write....
...