こちらは今回の構成になります。
RaspberryがModbus TCP/IPのMasterになり、S71200_Station1とS7_Station2がサーバー立てれアクセスされます。S71200は使うのはMB_SERVER(FB1085)になります。
Raspberry側
まずCodesysで新規プロジェクト作り、Deviceを右クリック>Add Device
Ethernet Adapter>Add Deviceします。
Ethernet>Add Device
Modbus>Modbus TCP Master>Modbus TCP Masterを選んで、Add Deviceします。
次は追加されたModbusTCP Masterのところに右クリックし、Add Deviceします。
まずS71200_Station1を作成します。
Modbus>Modbus TCP Slave>Modbus TCP Slaveを選び、Add Devicesします。
もちろん、自分自身のEthernetのInterface設定忘れずに。
次はS71200_Station1を設定します。Generalをクリックし、Modbus TCPでS7-1200(Slave)側のIPと使用するPortを入力。
次はModbus Slave ChannelのTabをクリックします。Add Channelを。
Name:Channelの名前なので適当でOKです。
Access TypeはS71200_Station1は読むだけなのでFunction Code3にします。
Offset は0x0000で、OKを。
そしてS71200_Station2も同じく設定します。
S71200_Station2は読み書き両方もやりますのでFunction Code 23します。
注意するのはOFFSETは16進数です。16進数です。16進数です。
大事なことなので三回言います。
なのでOffsetは10なら0x000Aを入れないとだめです。
TIA
詳細はここに書いています。
S712002つを追加します。
それぞれのCPUの中にdbConfigを追加します。
dbMB_HOLD_REGも入れます。
Modbusアドレスの分け方
そしてそれぞれのOB1の中に以下のプログラムを追加します。
最後はS7-1200とCodesys両方もダウンロードしてください。
テスト
Raspberryが2つのModbus TCP Slaveが認識できる場合、Modbus_TCP_Master>ModbusTCP Master IEC Objects>uiConnectedSlavesは接続してるSlaveが見えています。2なら2つのS7-1200も接続してる状態になります。
それぞれのSlave>StatusでRequest CounterとError Counterがあります。もしエラー発生してる場合はこのError Counterが加算されいます。
結果はこうになります:
はい、お疲れ様ですー
こちらはSample Codeです。
https://github.com/chwAmu/Codesys/tree/master/ModbusTCPIP/Master
コメント
CODESYS IN Raspberrypi1とPYTHON IN Raspberrypi2でCODESYSとpythonでデータのやり取りをしたいと思って
いた所にこの記事を発見して大変役立ちそうに感じました。
記事ではクライアントがシーメンスPLCですが私はラズパイ上のパイソンです。
(わたしは計量器をPLC(キーエンス)で製造していますがRaspbeerypiでのPLC化に興味を持っています。
なによりの魅力は価格が安いという事です。)
月曜日から実際に実機で試したたいと考えています。その時にいろいろ質問が出てくると思うのですがまたメールしてもいいでしょうか。
お世話になっております。
どうぞ、いろんなことを一緒に考えましょう。
返事をお待ちしております。