Python Modbus lib для чтения файловой записи - PullRequest
0 голосов
/ 25 сентября 2018

Существует ли библиотека Python Modbus, которая реализует функции для чтения и записи файловых записей (коды функций: 20, 21).Популярные библиотеки Python Modbus (pymodbus, pymodbusTCP) предоставляют эти функции, но не реализуют их.Спасибо.

1 Ответ

0 голосов
/ 26 сентября 2018

Pymodbus поддерживает ReadFileRecordRequest (0x14), его немного сложно использовать, запрос ожидает, что список записей будет запрошен как часть его полезной нагрузки.Каждая запись представляет собой подзапрос со следующими атрибутами.

Тип ссылки: 1 байт (необходимо указать как 6)

Номер файла: 2 байта

Номер начальной записи в файле: 2 байта

Длина считываемой записи: 2 байта.

Чтобы упростить создание этих подзапросов, pymodbus предлагает класс FileRecord, который можно использовать для представлениякаждый подзапрос.Обратите внимание, что также существует ограничение на объем данных, которые нужно прочитать (253 байта), поэтому вам необходимо убедиться, что общая длина ваших записей меньше этой.

Вот пример кода.

import logging

logging.basicConfig()

log = logging.getLogger()
log.setLevel(logging.DEBUG)

from pymodbus.file_message import FileRecord, ReadFileRecordRequest

from pymodbus.client.sync import ModbusSerialClient


client = ModbusSerialClient(method="rtu", port="/dev/ptyp0", baudrate=9600, timeout=2)

records = []
# Create records to be read and append to records
record1 = FileRecord(reference_type=0x06, file_number=0x01, record_number=0x01, record_length=0x01)
records.append(record1)

request = ReadFileRecordRequest(records=records, unit=1)
response = client.execute(request)
if not response.isError():
    # List of Records could be accessed with response.records
    print(response.records)
else:
    # Handle Error
    print(response)

Примечание.Эта функция вряд ли протестирована. Если вы столкнулись с какими-либо проблемами при использовании этой функции, пожалуйста, не стесняйтесь поднимать проблему с github.

...