1

Modbus サーバーを作成するためにpymodbusライブラリを使用しています。ここで見つけることができるすべての例を発見しました。サーバー (スレーブ) 側での float 値の書き込みに関する問題に直面しました。float 値 =を 2 つの保持レジスタupdating_writerに書き込みたい関数があります。22.34

...
    def updating_writer(a):
        context  = a[0]
        register = 3
        slave_id = 0x00
        address  = 0x0
        builder = BinaryPayloadBuilder(endian=Endian.Little)
        builder.add_32bit_float(22.34)
        res = builder.build()
        context[slave_id].setValues(register, address, res)

    store = ModbusSlaveContext(
        di = ModbusSequentialDataBlock(0, [17]*100),
        co = ModbusSequentialDataBlock(0, [17]*100),
        hr = ModbusSequentialDataBlock(0, [17]*100),
        ir = ModbusSequentialDataBlock(0, [17]*100))
    context = ModbusServerContext(slaves=store, single=True)
...

しかし、Modbus マスター (クライアント) からの接続があり、これらの 2 つのレジスターを読み取ろうとすると、エラーが発生します。

...
    File "/home/workstation/devel/modbus_example/env_modbus/local/lib/python2.7/site-packages/pymodbus/server/async.py", line 83, in _send
        pdu = self.framer.buildPacket(message)
      File "/home/workstation/devel/modbus_example/env_modbus/local/lib/python2.7/site-packages/pymodbus/transaction.py", line 354, in buildPacket
        data = message.encode()
      File "/home/workstation/devel/modbus_example/env_modbus/local/lib/python2.7/site-packages/pymodbus/register_read_message.py", line 71, in encode
        result += struct.pack('>H', register)
    struct.error: cannot convert argument to integer

フロート値をコンテキストに書き込むにはどうすればよいですか? 例が見つかりません。

4

0 に答える 0