Modbus/TCPでFactory IOとMELSECを接続しよう(自動応答機能)

# Factory IOとは
最近FA界隈で噂のFactory IOです。
これは何かというと自分で機械を組み合わせて工場の設備を作る海外のゲームです。

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


メーカが用意してるサンプル設備の動画もあるのでこれがわかりやすいです。

https://docs.factoryio.com/manual/scenes/

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



Factory IOは3threesさんがブログで丁寧に解説されてるので使い方はこちらが勉強になります。

http://soup01.com/ja/category/%e5%8b%89%e5%bc%b7/factoryio/

# Factory IO使用可能な通信方法
以下がVer2.5.1で選べる選択肢です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/e22b7427-a064-b4cb-5fb8-a6c46cb4a52f.png)

やはり海外製のソフトなのでMCプロトコルやSLMPには非対応です。
ということでMELSECで通信をするには以下の3択となってしまいます。

## OPC Client DA/UA
- たけびし DeviceXPlorer OPC Server
- MELSOFT MX OPC Server UA (SW3DND-OPCUAS-E)
- OPC UAサーバユニット(RD81OPC96,FX5-OPC)
    
OPCは別途サーバのアプリが必要です。
たけびし DeviceXPlorer OPC Serverの32bit版(64bit版はEZSocket非対応)を使うとEZSocket接続でGX Works2/3のSimulatorと通信が可能です。実機が不要です。
Youtubeで[MELSEC FactoryIO]で検索するとMELSOFT MX OPC Server UAの接続例が見れますがこのソフトは日本語版がない（たぶん）ので国内で入手可能か謎です。

## Modbus TCP server
Factory IOを[Modbus TCP/IP Server]に設定した場合
Function CodeはPLCから送ります。(ServerはSlaveと同じ役目)

- MODBUS自動交信機能
- 通信プロトコル支援機能
- シンプルCPU通信[MODBUS/TCP]

## Modbus TCP client
Factory IOを[Modbus TCP/IP Client]に設定した場合
Function CodeはFactory IOから送ります。(ClientはMasterと同じ役目)

- MODBUS自動応答機能
- シンプルCPU通信[MODBUS/TCP]

# 自動応答機能での設定例(MELSEC iQ-F FX5U)
今回は自動応答機能での説明をします。設定が一番楽な方法です。
通信プロトコル支援機能が一番対応機種が多いのでサンプルプログラムを作ってたのですが半日かかってもうまく通信ができなかったので今回はあきらめました。
(もしかしたらファイアウォールの設定も必要なのかも)
MODBUS自動応答機能を使うには以下のユニットを装着またはCPUを使用している必要があります。

| シリーズ            | 型式             |
| ------------------- | ---------------- |
| MELSEC iQ-Rシリーズ | RJ71EN71         |
| MELSEC iQ-Rシリーズ | RnENCPU          |
| MELSEC iQ-Fシリーズ | FX5U,FX5UC,FX5UJ |
| MELSEC Qシリーズ    | QJ71MT91         |

こう考えるとiQ-Fシリーズは低価格だけど標準装備の通信機能が充実してるのでIoTとかに向いてるように思います。
デバイス点数は少ないですが。

MELSEC iQ-F FX5Uでの設定例となります。家にあるのがコレので。

https://qiita.com/fa_yoshinobu/items/7a096b93353aa61b4458

参考マニュアル JY997D55001 MELSEC iQ-F FX5ユーザーズマニュアル(MODBUS通信編)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/b479479b-dd9a-0d7c-e061-fdcb7f6411ae.png)

1.PLCのIP設定です。Factory IOを実行するPCと同一セグメント内で重複しないIPを割り当ててください。
2.相手機器接続構成設定でMODBUS/TCP接続機器を下の画面のようにドラッグ＆ドロップしてください。ポート番号は502。設定を反映をして閉じる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/f1238906-9697-da81-4c7c-109956545c6a.png)

3.2の操作にて[使用]が勝手に選択されます。
4.デバイス割り付けの設定です。

デフォルトは状態では勝手に割り付けがされます。
使用しない箇所は消してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/ba98f810-b56b-4141-222a-123ceebd7f7b.png)

割付1は以下にします。

|コイル|入力|入力レジスタ|保持レジスタ|
| ---- | ---- | ---- | ---- |
| M0   | M32  | D0   | D32  |
| 0    | 0    | 0    | 0    |
| 32   | 32   | 32   | 32   |


割付2以降はデバイスは空欄,先頭MODBUSデバイス番号は0,割付点数も0にしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/2963a724-c2fb-d995-f7a6-5afd3e8ed5ef.png)

これで完了です。PLCに書き込んでください。

# Factory IO設定
今回の設定例ではOpen-Scenes で Assembler を選びます。
下のICみたいなアイコンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/cf1d5459-8304-2a04-1030-405d11c1740f.png)

Modbus TCP/IP Clientを選択します。
この時点でデフォルトで勝手に割り付けがされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/01a28430-2739-8647-0b03-3a0cfe395b97.png)

PLCのアドレスを設定します。
←で閉じます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/f49b55b2-48dc-c8d1-d3a4-e32f026d1c78.png)

CONNECTを押すと通信開始をします。
通信開始でDISCONNECTに表記が変わりチェックマークのアイコンが点灯します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/c15b2696-c474-881f-39e0-98eb3939e3b9.png)

通信開始するとM12とM13が点灯します。
M12はCoil 12とリンクしています。
M13はCoil 13とリンクしています。
Factory IOの状態と一致しますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/c26ca248-84b0-495c-7a3e-434570b09d7d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/3ac7ebb8-4a42-1d12-acd4-57a02509671d.png)

つまり以下のようにリンクします。
入力と出力の表記は入れ替わるのはFactory IO側から見た入出力だからです。

DI:Factory I/OのDI(ボタン等)はColi(コイル)に出力されます。

| PLCアドレス | MODBUSアドレス |
| ----------- | -------------- |
| M0          | Coil 0         |
| M1          | Coil 1         |
| M2          | Coil 2         |
| 省略        | 省略           |
| M29         | Coil 29        |
| M30         | Coil 30        |
| M31         | Coil 31        |

DO:Factory I/OのDO(ランプ等)はInput(入力)から読み出します。

| PLCアドレス | MODBUSアドレス |
| ----------- | -------------- |
| M32         | Input 0        |
| M33         | Input 1        |
| M34         | Input 2        |
| 省略        | 省略           |
| M61         | Input 29       |
| M62         | Input 30       |
| M63         | Input 31       |

AO:Factory I/OのAO(7セグの数値表示等)はInput Reg(入力レジスタ)から読み出します。

| PLCアドレス | MODBUSアドレス |
| ----------- | -------------- |
| D0          | Input Reg 0  |
| D1          | Input Reg 1  |
| D2          | Input Reg 2  |
| 省略        | 省略           |
| D29         | Input Reg 29 |
| D30         | Input Reg 30 |
| D31         | Input Reg 31 |

AI:Factory I/OのAI(流量計等)はHolding Reg(保持レジスタ)に出力されます。

| PLCアドレス | MODBUSアドレス |
| ----------- | -------------- |
| D32         | Holding Reg 0    |
| D33         | Holding Reg 1    |
| D34         | Holding Reg 2    |
| 省略        | 省略           |
| D61         | Holding Reg 29   |
| D62         | Holding Reg 30   |
| D63         | Holding Reg 31   |


三角ボタン(再生マーク)を押してStartボタンを押すとM10(Coil 10)がONします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/69e2646b-b013-cde7-ca9c-9c8eac56a281.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/4145473b-96cf-d68f-f059-3066fedd8243.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/741587b6-612a-cb2c-2af4-59b995f7e03d.png)

これでなんか動きそうですね。
次回は動かしてみます。