web-dev-qa-db-ja.com

pymodbusでレジスタを読み取る

私はModbusとPyModBusに非常に慣れていませんが、それを読んで実験するのにかなりの時間を費やしました。誰かが私を正しい方向に向けることができれば、私はそれをいただければ幸いです...


レジスタ40001、40003、40005、および40007にそれぞれ距離、速度、加速、および減速のドライブがあります。最初は、client.write_register(0000、n)を使用して、距離レジスタに書き込むことができました。速度を書き込もうとした後、ドライブはヘイワイヤーになり、障害が発生し始め、本来の10倍の速度で回転しました。ただし、実際の優先順位はレジスタの読み取りです。私はこれらのレジスタからデータを読み取ろうとしていますが、運がありません。使ってみました

request = client.read_holding_registers(0000,4)
response = client.execute(request)
print response


しかし、返されるのは「ReadRegisterResponse(0)」だけです。

繰り返しになりますが、私の最優先事項は、これらのレジスタから値を読み取ろうとすることです...何かアドバイスはありますか? (これで終わりですTCPちなみに)

7
5T4TiC

次のことを試してください。

 response = client.read_holding_registers(0x00,4,unit=1)

ここで、ユニット値はスレーブのデバイスIDです。

すべてを印刷するには:

print response.registers

1つの値(たとえば、3番目のレジスタ)を直接取得することもできます。

print response.getRegister(2)

または

print response.registers[2]  
10
Azat

自分で応答を解析できます。以下は私のコードスニペットです。

    result = client.read_input_registers(0x01,1, unit=0x01)
    #print result
    t = result.registers[0]
    print "current temperature:", t, "  ", float(t/100.0)
5
Jak