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.