シリアル ポートと RTU Modbus を使用してデバイスに接続しようとしています。デバイスは可変周波数コントローラーです。
次のRS485からUSBへのコンバーターを介してラップトップに接続されています。
https://www.amazon.co.uk/gp/product/B01E8JRL6O/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1
以下に示すように、Modbus を使用してデータを読み取るための使用例を提供するために、接続しているデバイスの手順を示します。
上記を使用して、以下のコードで読み取り要求を実行しようとしました。
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
modbus = ModbusClient(method='rtu', port='/dev/tty.usbserial-AQ00BYCR', baudrate=9600, timeout=1)
modbus.connect()
test = modbus.read_holding_registers(1, 1, unit=1)
print (test)
上記の行は次のようになります。
test = modbus.read_holding_registers(1, 1, unit=1)
は、レジスタ アドレス 1 が、1 つの読み取りフレームに対して、デバイス ID 1 に対して読み取られることを意味します。私の理解では、この要求は上記の命令例に対応します。残念ながら、しかし、私は一貫してエラーメッセージを受け取ります:
Modbus エラー: [入力/出力] Modbus エラー: [無効なメッセージ] 不完全なメッセージを受信しました。少なくとも 2 バイトが必要です (1 受信)
このエラーが発生する理由を知っている人はいますか? 次に、CRC は pymodbus によってオンザフライで計算されますか? または、これをどのように計算して含めることになっていますか?
どんな助けでも大歓迎です!