Есть ли python modbus lib, который реализует функции для чтения и записи файлов (коды функций: 20, 21). Популярные библиотеки modbus Python (pymodbus, pymodbusTCP) предоставляют эти функции, но не реализуют их. Спасибо.
Pymodbus поддерживает ReadFileRecordRequest (0x14)
, его немного сложно использовать, запрос ожидает, что список записей будет запрошен как часть его полезной нагрузки. Каждая запись представляет собой дополнительный запрос со следующими атрибутами.
Тип ссылки: 1 байт (должен быть указан как 6)
Номер файла: 2 байта
Начальный номер записи в файле: 2 байта
Длина записываемой записи: 2 байта.
Чтобы облегчить создание этих подзадач, pymodbus предлагает класс FileRecord
который может использоваться для представления каждого 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.