1

Raspberry Pi 3 Model B を使用して Allen Bradly PLC から値を読み取ろうとしています。それらの間の通信に Pymodbus Modbus TCP プロトコルを使用しています。

テスト クライアントを実行すると、次のエラーが表示されます。

pi@raspberrypi:/var $ python test1.py
Got here 1
Traceback (most recent call last):
File "test1.py", line 12, in <module>
request = client.read_holding_registers(0,1)
File "build/bdist.linux-armv7l/egg/pymodbus/client/common.py", line 109, in read_holding_registers
File "build/bdist.linux-armv7l/egg/pymodbus/client/sync.py", line 82, in execute
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] Failed to connect[10.0.0.237:502]

テスト クライアントのコードは次のとおりです。

from pymodbus.client.sync import ModbusTcpClient

#modbus connection 
client = ModbusTcpClient(host='10.0.0.237')
connection = client.connect()

#test print
print "Got here 1"

#read register
request = client.read_holding_registers(0,1)

print request

client.close()

PLC のイーサネット カード (10.0.0.237) の IP アドレスに問題なく ping を実行できます。(PLC はオンで、RSLinx と RSLogix5000 に表示されます。)しかし、コマンドでポート 502 (Modbus が使用する) をチェックしようとすると:

telnet 10.0.0.237 502

エラーが発生します:

Trying 10.0.0.237...
telnet: Unable to connect to remote host: Connection refused

私が行った調査では、そのポートが開いているかどうかを確認するように言われましたが、それは PC の場合です。PLC のポートを確認/構成する方法がわかりません。

さらに、Modbus を使用して Raspbery Pi と PLC の間を移動しようとしていることが問題なのかどうか疑問に思っています。インターフェイスを行うプロソフト ゲートウェイを見つけました。しかし、それらが単なる別のオプションなのか、必要なのかについての情報は見つかりませんでした。

私はPLCとネットワークに慣れていないので、助けていただければ幸いです。

4

1 に答える 1

0

私自身は Allen Bradley を使用したことはありませんが、他の多くの PLC を使用していますが、それらはすべて多かれ少なかれ同じように動作します。

ルーターのようにポートを開くのではなく、PLC で modbus 接続を有効にします。ほとんどの場合は設定ですが、Allen Bradley が独自のバス システム (Saia S-Bus など) を使用している場合、modbus を有効にするために特定の機能ブロックが必要になることがあります。

たとえば、Googleで簡単に検索すると、micrologix 1400には、チャネル設定でmodbus tcpを有効にするチェックボックスがあることがわかりました。

modbus マスター/クライアントを有効にする設定があるかどうかを PLC で確認します (マスター = シリアルまたは RTU、クライアント = TCP ですが、メーカーはそれらを区別しない場合があります)。

Raspberry Pi をテストするには、modbus サーバー シミュレーターをダウンロードしてポーリングします。

Pi 以外のもので PLC をテストするには、modbus クライアント/マスターをダウンロードできます。私は個人的に無料でテスト目的に適したQmodMasterを使用しています(Googleを検索)。

また、正しい関数コードを使用してポーリングしていることを確認してください。保持レジスタ (4xxxx のアドレス) は機能コード 03 を使用するため、混乱を招く可能性があります。入力レジスタ (3xxxx のアドレス) は機能コード 04 を使用します。

modbus ゲートウェイは、シリアル modbus (RTU または ASCII) が TCP 経由で通信できるようにするために使用されます。

両方のデバイスに modbus tcp がある場合、ゲートウェイは必要ありません。たとえば、有線 modbus (RS232/485/422) のみを備えたデバイスがある場合は、それをゲートウェイに接続し、ゲートウェイを TCP に接続できます。

于 2016-08-26T19:52:40.593 に答える