Pymodbus Зарегистрируйте пользовательский формат в последовательном клиенте

У меня есть последовательный клиент, который использует пользовательский формат поверх протокола Modbus, поэтому я должен соответствующим образом декодировать ответы. Однако, похоже, я не могу зарегистрировать свою функцию в последовательном клиенте, так как получаю сообщение об ошибке:

AttributeError: 'ModbusSerialClient' object has no attribute 'register'

Изучение исходного кода показывает, что функция .register() реализована только для TcpClient. Это по дизайну? И если да, то как мне работать с пользовательским форматом для SerialClient?


person TheKaltur    schedule 11.12.2019    source источник
comment
Как насчет множественного числа; registers?   -  person Bosz    schedule 12.12.2019
comment
Функция называется .register()   -  person TheKaltur    schedule 13.12.2019
comment
Оба клиента tcp и serial не имеют атрибута register . Я полагаю, вы путаете ответ регистрации, который имеет атрибут registers. Например, см. github.com/riptideio/pymodbus/blob /мастер/примеры/общие/   -  person Sanju    schedule 13.12.2019
comment
Имейте в виду, что клиентский запрос Modbus не имеет .register, поэтому он должен быть .registers, и проверьте .isError(), прежде чем пытаться достичь .registers. Проверьте этот пост.   -  person Benyamin Jafari    schedule 09.01.2020
comment
Хорошо, спасибо за ответ. Я очень плохо сформулировал этот вопрос, поэтому думаю, что просто удалю этот и задам новый. На самом деле речь шла о примере сообщения CustomModbus здесь, где функция .register() использовалась для регистрации пользовательского класса ответов, предположительно, в таблицах функций в factory.py. Я не мог заставить это работать с ModbusSerialClient, отсюда и вопрос. Я хотел использовать это, потому что не хотел редактировать библиотеки, а вставлять свои пользовательские классы во время выполнения, если это возможно.   -  person TheKaltur    schedule 10.01.2020