Python Modbus lib для чтения файловой записи

1

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

  • 0
    Это реализовано в pymodbus, Вы дали попытку и каков был ответ? См. Pymodbus.readthedocs.io/en/latest/source/library/…
  • 0
    @Sanju Если я понял это правильно, я создаю клиент синхронизации, а затем создаю запрос, создавая экземпляр ReadFileRecordRequest (тем не менее, я не уверен, что все же правильно понял аргументы). Затем я использую объект client для .execute () запроса, но все, что я получаю, - это исключительный ответ (148, 20, IllegalFunction)
Показать ещё 3 комментария
Теги:
modbus

1 ответ

1
Лучший ответ

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню