はじめに
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に書き込まれるので回路を削除する。
IPも同様:
テスト
Factory IO
こんな中華のPLC通信テストしてどうするねんという事なのですが、まあそれには目的があります。
これを8000円の中華PLCで動かすのはおもしろそうなので。