AMSAMOTIONの8000円 中華PLCでMODBUS/TCP通信をする


AliExpressで買った8000円のPLCでMODBUS/TCP通信をしてみようの記事です。
設定内容はAMX-FX3U-26MT-E用なので純正のFX3Uでは役に立たない内容です。
LAN内蔵のMELSECだと通信プロトコル支援機能で同じ事が出来るはずです。

https://qiita.com/fa_yoshinobu/items/27babd3cdb0bb303b01a

http://www.amsamotion.com/product_view_1011_515.html

# MODBUSとは

https://ja.wikipedia.org/wiki/Modbus

要するにModicon社PLC(Schneider Electric)の産業用ネットワークで仕様が開示されてるから色々な機器に実装されてるプロトコルです。
Githubを漁るとマイコン用のライブラリもたくさんあります。
MODBUS RTUはシリアル通信ですがMODBUS TCPはLANで通信するやつですね。

資料番号:NM-5650 資料名称:Modbusプロトコル概説書 が日本語でわかりやすいです

https://www.m-system.co.jp/kaisetu/dl_manualJ.html

AMSAMOTIONのHPにマニュアルがあるので読んでみる…
😇😕🤮

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/fb5da557-99a2-f6ac-a681-9da25ea9de57.png)

試した結果こんな割り付け仕様っぽいです



# デフォルトのデバイス割り付け
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に書き込まれるので回路を削除する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/4dcf062c-038e-3eeb-687f-166afb7447c3.png)

IPも同様
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/38811e3b-e578-d677-8d66-1b3c7bef77c6.png)

# テスト

https://github.com/ClassicDIY/ModbusTool

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/5b937058-4db5-b09a-3c64-0762d46bddde.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/2af78b77-ad56-b6ad-88b7-5b7790c9b66d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/2897723f-8f9f-9aff-7a8e-efb543611412.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/66d703af-d3ea-7ee6-8a01-0a1182a97a17.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/68087c88-93ec-24bd-d73c-ba5f183699eb.png)

# Factory IO

こんな中華のPLC通信テストしてどうするねんという事なのですがまあそれには目的があります。

https://factoryio.com/

<iframe width="560" height="315" src="https://www.youtube.com/embed/LArdLLPjLpI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


これを8000円の中華PLCで動かすのはおもしろそうなので。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/39619ba5-a423-f952-f685-6fe1276a8e57.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/93a1de8d-2a13-c966-73d2-0015d80309d1.png)