У меня есть настройка отображения Modbus в моем ПЛК AB Micro820. У меня есть массив в 40001 для записи и один в 42001 для чтения. Оба имеют 200 элементов и тип REAL (32-битное число с плавающей запятой). Я могу писать и читать в настоящее время, поэтому я знаю, что код работает, просто неправильно. Значения считываются/записываются как очень маленькие значения (например, 4,58577478E-19). Может кто-то указать мне верное направление?
#!/usr/bin/env python
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.payload import BinaryPayloadBuilder
from pymodbus.client.sync import ModbusTcpClient
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.INFO)
ip_address = "192.168.2.101"
client = ModbusTcpClient(ip_address)
if client.connect(): # connection is OK
# write float
builder = BinaryPayloadBuilder(endian=Endian.Little)
builder.add_32bit_float(77.77)
payload = builder.build()
result = client.write_registers(1, payload, skip_encode=True)
# read floats
result = client.read_holding_registers(2001, 4)
decoder = BinaryPayloadDecoder.fromRegisters(result.registers, endian=Endian.Little)
print "read_holding_registers: " + str(decoder.decode_32bit_float())
client.close()