Python Modbus RTU через TCP
Я пытаюсь читать и записывать данные через Modbus TCP с помощью python. Когда я использую ModbusPoll со следующей настройкой, все работает.
Сейчас я пытаюсь прочитать данные с помощью python, и для этого я использую библиотеку pymodbus .Мой код выглядит так:
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.transaction import ModbusRtuFramer as ModbusFramer
client = ModbusTcpClient("192.168.0.7", port=502, framer=ModbusFramer)
success = client.connect()
read = client.read_holding_registers(address=4000)
read.registers
Но я всегда получаю следующую ошибку:
ModbusIOException(InvalidMessageReceivedException('Ответ не получен, ожидается не менее 2 байтов (получено 0)'), 1)
2 ответа
Для чтения регистра временного хранения требуется устройство для правильного чтения сообщения.
read = client.read_holding_registers(address=4000, unit=1)
Это то, что помогло мне.
Проверьте slave_ID вашего устройства (unit=slave_ID). Необязательно 1 или 0. В моем случае - 240, например.
result = client.read_holding_registers(address=0x0010, count = 2, **unit=240**)
В документации говорится:
def write_register(self, address, value, **kwargs):
'''
:param address: The starting address to write to
:param value: The value to write to the specified address
**:param unit: The slave unit this request is targeting**
:returns: A deferred response handle
'''
И:
def read_holding_registers(self, address, count=1, **kwargs):
'''
:param address: The starting address to read from
:param count: The number of registers to read
**:param unit: The slave unit this request is targeting**
:returns: A deferred response handle
'''
Посмотрите файл "common.py" или нажмите Ctrl+B, пока курсор находится на функции.