AliExpressで買った8000円のPLCでMODBUS/TCP通信をしてみようの記事です。
設定内容はAMX-FX3U-26MT-E用なので純正のFX3Uでは役に立たない内容です。
LAN内蔵のMELSECだと通信プロトコル支援機能で同じ事が出来るはずです。
MODBUSとは
要するにModicon社PLC(Schneider Electric)の産業用ネットワークで仕様が開示されてるから色々な機器に実装されてるプロトコルです。
Githubを漁るとマイコン用のライブラリもたくさんあります。
MODBUS RTUはシリアル通信ですがMODBUS TCPはLANで通信するやつですね。
資料番号:NM-5650 資料名称:Modbusプロトコル概説書 が日本語でわかりやすいです
AMSAMOTIONのHPにマニュアルがあるので読んでみる…
😇😕🤮
試した結果こんな割り付け仕様っぽいです
デフォルトのデバイス割り付け
D8476-D8479が設定範囲外 or 0設定時は下記のようになります。デフォルト
- | Type | Data Address | PLC Address |
---|---|---|---|
DO | コイル(Coil) | 1-32 | Y000-Y037 |
DI | 入力ステータス(Input Status) | 10001-10032 | X000-X037 |
AI | 入力レジスタ(Input Register) | 30001-30032 | D8030-D8061 |
AO | 保持レジスタ(Holding Register) | 40001-40064 | D7100-D7163 |
任意のアドレス設定例
制約はりますがある程度は任意のアドレスに割り当てられます。
マニュアル読んだがわかりづらい
PLC Addressの範囲に設定するにはSettingのDデバイスにParameterの16進数を設定します
- | Type | Data Address | PLC Address | Setting | Parameter | Max Length |
---|---|---|---|---|---|---|
DO | コイル(Coil) | 1-32 | M0000-M0031 | D8476 | 0x8080 | 32bit |
DI | 入力ステータス(Input Status) | 10001-10032 | M0032-M0063 | D8477 | 0x8082 | 32bit |
AI | 入力レジスタ(Input Register) | 30001-30032 | D1000-D1031 | D8478 | 0x43E8 | 32Word |
AO | 保持レジスタ(Holding Register) | 40001-40064 | D1032-D1095 | D8479 | 0x8408 | 64Word |
上位3bitの設定
ビットデバイス
001= 8bit
010=16bit
100=32bit
ワードデバイス
001=16Word
010=32Word
100=64Word(AOのみ可)
下位の設定(MかDのアドレスをよくわからないHexで設定)
M開始 0x0080=M0000-M0015
M終了 0x00BF=M1008-M1023
D開始 0x0014=D0500
D終了 0x1F3F=D7999
うまく説明できない🤮
下記のように割り付けてMAXの点数を割り当てた場合
DO:M0000-M0031:0x080->0x8080
DI:M0032-M0063:0x082->0x8082
AI:D1000-D1031:0x3E8->0x43E8
AO:D1032-D1095:0x408->0x8408
*M8411を使わないといけないらしい。設定終了後はFLASHに書き込まれるので回路を削除する。
テスト
Factory IO
こんな中華のPLC通信テストしてどうするねんという事なのですがまあそれには目的があります。