7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Arduino OptaとArduino PLC IDEでMODBUS/TCP通信をやってみよう

Last updated at Posted at 2023-03-25

あらすじ

Arduino Optaを買ったのだがUSERボタンでLEDやリレーをチカチカするだけではつまらんので通信でリモートI/Oが使えるか試してみました。

Arduino Optaは入力8点(デジタルorアナログ)出力4点の貧弱な構成なので拡張しないとだめですね。
逆にこのI/O点数で面白いものできればそれはそれですごいと思う。

現状リモートI/Oとして使えるネットワークはMODBUS/RTUかMODBUS/TCPになります。
ライセンス料いらないですからね。

ということでAliExpressでMODBUS/TCPのI/Oモジュールを買ってきました。
AMSAMOTIONのETH-MODBUS-IO8R-A 入力8点,出力8点,アナログ入力6点,アナログ出力1点がついて購入価格8200円です。
image.png
image.png

ちなみにArduino PLC IDEの使い方の説明はここではしません。(めんどくさいから)
こんなもの買うような変わり者はチュートリアル見てなんとなくいじれると思うので。

1.まずはチュートリアルを読む

チュートリアルにMODBUS設定方法があるからこの通りにすればできるやんけと思ったのですがそうではなかった…
そうこのチュートリアルは完全ではないのです。使えるまで8時間かかりました。
この記事はチュートリアルを補完する内容となっています。

2.Generic Modbus deviceを追加する

Modbus TCP Masterにチェックを入れます。
image.png

Generic Modbus deviceを追加します。
ETH-MODBUS-IO8R-AのデフォルトIPアドレスは192.168.1.12なのでこれを使用します。
Parametrizationは何も設定入れてません。

image.png

3.Modbus Devices Functionsを追加する。

Modbus Devices Functionsを追加します
image.png

MODBUSで通信するにはFunction Codeを使います。
Function Codeのところにラベル定義を追加すると定周期で勝手に通信してくれます。
定義したラベルをラダー上でON/OFFすればよいので簡単ですね。

Function Codeについては下記のModbusプロトコル概説書(日本語)が勉強になります。

あとは各項目で+Addを押してLabel名をつけるだけですね。

FC 02:デジタル入力8点,開始アドレス1

image.png
image.png

FC 04:アナログ入力6点,開始アドレス1

image.png
image.png

FC 15:デジタル出力8点,開始アドレス1

image.png
image.png

FC 16:アナログ出力1点,開始アドレス7

この項目だけ7から開始なのはETH-MODBUS-IO8R-Aの仕様です
image.png
image.png

4.OptaのIP設定

OptaのIP設定があります。さてどこにあるのでしょうか…
一番下のSketchを押すとArduinoのスケッチが出てきます。
ラダーで書けないものはこれを使えという配慮なんでしょう。

IPの欄は初期ではコメント化されてるのでここで入力します。こんなんわかるかよ

Optaはここでは192.168.1.1とします。MODBUS/TCPと同一セグメントになるように。
※IPAddress gateway(192, 168, 1, 1);のように最後を0以外にした方がよいかもしれません

image.png

5.ラダーを書く

図のようなラダーを書きます。さっきラベル定義したやつはModbus_Varsに出てきます。
sysButtonInputs[0]はUSERボタンを意味します。
デフォルトで用意されてるラベルです
USERボタンを押すとMODBUSのリレーがONになります。

image.png

6.コンパイルして転送するが動かない

これで動くはずですがなんと…動きません>< なぜでしょうか。

これはETH-MODBUS-IO8R-Aの仕様でUnit identification(局番)は0x01~0xFEである必要があります。
Optaはデフォルトで0xFFになります。動かないからOptaとPCをつないでModRSsim2で伝文のログを見てこれに気づきました。

これを変更する方法ですが設定画面が隠れてるのでまずModbus TCP MasterをOFFにします。(赤枠のチェックを外す)

image.png

するとGeneric Modbus deviceの設定項目が変化します。ここで局番設定が出てきます。
設定のデフォルト値は255=0xFFです。
これを1に変更して、今度はModbus TCP MasterをONにします。

image.png

ちなみに通信ステータスはsysMbTcpMState,sysMbTcpSlaveStateでモニタできます。
あと通信関係の設定をいじると再起動しないとなんかおかしい。
image.png

7.モドチカ(モドバスでチカチカするの意味)

ボタンを押すとリレーがON/OFFします。
これで念願のモドチカが完成しました。

まとめ

Arduino PLC IDEの使い方がわからなすぎてArduinoの公式フォーラム漁りをしていたら、Axel softwareのLogicLabがベースであることがわかりました。
たしかにRuntimeにSTM32もあります、このIDEツールのソースが非公開なのもなるほどね。

Arduino Optaの登場で今までの化石のようなPLCが無くなる、ゲームチェンジャーやみたいなのをたまに見るけどまだ先は長そうです。
三菱やキーエンスのほうが使い勝手良いので。
あと不安定すぎる…
結局はSTM32にLogicLabでコンパイルしたプログラムをのせて動くだけなので、RUN中書き込みのようなこともできない。
プログラムの吸出しもできない。RUNしてるのかSTOPしてるかもわからない。エラーコードもわからない。
CODESYSくらいまで使い勝手よくならないと厳しいのではないのでしょうか。

この商品が売れるかはAxel softwareの頑張りに左右されそうな気がします。

その他

無反応でどうにもならないときは RESET 2回押しでBootloaderモードになります

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?