Android スマホ で 三菱 PLC (シーケンサー)と Wi-fi 通信
公開日:2020/4/28: 更新日:2020/7/23
前回は、Android Studio で、ネイティブ言語使用したアプリの使い方を紹介しました。
今回は、今や誰もが持っているであろう スマートフォン (スマホ) を使って簡単なアプリを作成し、
三菱 MELSEC-Q シリーズ PLCとの通信方法を紹介しよう思います。
Androidのアプリが欲しい人は、
PLCと無線通信するアプリ And2PLC にジャンプして下さい。
筆者は、Mac、IPhoneを持っていないので、今回は、Andoroid スマホ を、中心に紹介しますが、
EtherNet通信を行う部分は Android_NDK を駆使し、Linuxe で使われる<sys/socket.h> を使った
ソケット通信プログラムをベースに紹介しますので、IPhone のアプリ作成においてもでも参考になると思います。
ただし、前提として、AndroidStudioの、基本的な使い方と、
本ホームページの他ページで紹介しております、
■Android NDK の使い方
■MCプロトコル
■PLCのWi-Fi接続
で記載の知識が必要となりますので、まだ御覧になられてないようでしたら事前にご覧下さいませ。
もし、AndroidStudio自体、触った事がないという方でありましたら、
■Android Studio入門
にて導入までの手順を記載致しましたのでそちらも合せて参考にしてみて下さい。
基となるソケット通信は "sys/socket.h" を使う
今回のサンプルでも、NDK を利用した、C/C++ プログラムを駆使して通信までの流れを紹介解説します。
また、Androidにおいて最も一般的なソケット通信を実現させるために、Linux の通信でも使われる、 sys/socket.h
を使用して通信用のプログラムを作っていきます。
※javaの、ソケット通信のプログラムでも出来ない事はないのですが、■MCプロトコル
の説明で紹介で公開しているプロトコルコードが、C++でコーディングしているので、今回は NDK を使ったサンプルで紹介します。
では、さっそく、『新規プロジェクト』 から作成したい所なのですが、NDKとJNIを使うまでの準備が割と面倒なので、
■Android NDK の使い方で作成した、サンプルプロジェクトを
ベースに紹介します。
はじめに準備すること
まずはじめに、PLC側の Wi-Fi を使用する為のPCパラメータの設定と、Androidスマホの、Wi-Fi の設定を行います。
Wi-Fiを利用する、PCパラメータの設定については、■PLCのWi-Fi接続
似て詳しく紹介しているので、そちらを参考にしてください。
次に、Androidスマホの設定です。 機種によって、若干異なると思いますが、基本的に設定する内容は、同じなので
参考にして下さい。
・"端末設定" から "無線とネットワーク" にすすみ、Wi-Fi 設定項目から、使用する無線ルーターの項目を、長押しして、
詳細設定項目に進みます。(この項目は機種によって若干異なると思います。)
・項目が表示されたら、"詳細オプションを表示" にチェックをいれて "IP設定" を "DHCP" から "静的" にして、
端末のIPアドレス設定が出来る様にします。
PLC機器のネットワークに合わせて、IPアドレスを設定してください。 その他の設定は特に必要ありません。
ただし、端末によって "インターネット非接続時も有効" のチェックボックスがある場合は、チェックを入れて有効にしておいてください。
AndroidManifest にパーミッションを追加する
AndroidManifest.xml の パーミッションに、インターネットを使うための呪文を一行書き込みます。
(もうこれは、こういうものだと割り切ってコピペして貼り付けてください)
記述するところは、下記写真を参考にして下さい。
ユーザーインターフェース用のデザインを配置する
次に、画面上のデザインを配置します。今回も例にもれず、記述するプログラムをシンプルにするために、
通信と確認を行うための最低限のリソースのみを配置します。配置する部品は以下です。
・IPアドレス入力EditTxt
・ポート番号入力EditTxt
・先頭アドレス設定用EditTxt
・書き込みデータ設定用EditTxt
・接続開始ボタン
・データ送信ボタン
を配置して準備します。
※デザインの大きさや配置は適当です
前に作った TextView と BUTTON は必要ないのですが、消すと面倒なので下の方へずらして下さい。
(後で再利用します)
JniTestクラスに Jni関数の宣言を追加
JniTest.javaに、Jni関数に、接続用の関数、"startSocketFromJNI" 関数と、
"SocketSendFromJNI" 関数の宣言を追加します。 コードの詳細は写真を参考にして下さい。
現時点では関数定義がないので、赤文字表示ですが後に記述するので大丈夫です。
C_lib.cpp ファイルに必要なヘッダーファイルを記述する
GUIとJni関数の準備が出来たら、ソケット通信に必要なプログラムを、C/C++ にてコーディングしていきます。
はじめに、C_lib.cpp ソースに必要なヘッダファイルを全部追記ます。
次に、C_lib.cpp プログラムに、にソケット接続用の関数を書きます。
※コード量が多いので、下記写真を参考にして記述してください。 また各コードの意味は、右横に記述されているコメントを参考にして下さい。
特に問題がなければ、これでPLCとの接続までは出来るはずです。 では次に、MainActivity側で、 接続を行うボタンの関数を書いていきます。 下記赤枠で囲った部分の、コードを書いていきます。
コードが書けたら一度ビルドして、接続を試してみましょう。
"textViwe" の文字が "接続OK" に変わったら、TCP接続成功です。
データ送信関数を作る
PLCの接続が完了したら、次はデータを送信してみましょう。 C_lib.cpp 側に MCプロトコルの伝聞を含めた、
ソケットsend関数を作成して、javaの MainActivity側で、送信するデータと、送信先アドレスを取得して、Jni
関数に引き渡して実行させます。
まずは、C_lib.cpp に、下記写真のコードを全て追記してください。
次に、MainActivity 側のプログラムを記述します。 基本的には、ボタンを押したときに画面で設定した値を 取得して、PLCに送信するデータを送ります。 追記するコードの記述は下記写真を参考にして下さい。 記述箇所は、接続ボタンイベント関数の直ぐ下らへんで良いでしょう。
コードが書けたら、早速プログラムを実行してみましょう。 接続を開始して、送信データ、送信アドレスを指定して、データを送信してみましょう。
送信が出来たら、GXデベロッパー、もしくは GXWorks のデバイス一括モニタ機能を使用して、実際にデータが送れたか 確認してみましょう。
画面で設定した先頭アドレス104(D104)に、無事データが書き込まれたのが確認できたました。
今回も、send関数実行後、recv を実行していないので、PLCより受信した応答伝聞(11byte)を
受信バッファから取得していないので、データが溜まっていく一方なので、ちゃんとしたシステムを構築する場合は、
受信用の関数も考慮して、プログラミングをする必要があります。
いかがだったでしょうか? 貴方のAndroidとPLCはうまく繋がったでしょうか?
スマホで、入出力のI/Oのモニタが出来たらノートPCの持ち運びが不便な狭い場所でも、手軽にI/Oチェックが出来ると思い、本通信を利用した
Android向けアプリ、"And2PLC" を用意しました。
本アプリでは、"デバイス一括モニタ" 風の画面と、簡易ボタンを用意した、手軽にI/Oチェックができるアプリになっています。
現在 Google Play にて無料公開中なので、興味のある方は是非使ってみてください。
PLCと無線通信するアプリ And2PLC
Android用スマホアプリ And2PLC
Google Play で公開中の "And2PLC" では簡易デバイスモニタを持っております。
アプリはWi-Fi経由で、PLCに接続し、接続後は指定デバイスをモニタし続けます。
使用する前に、PLCとスマホのWi-Fi設定、の準備しておく必要があります。
PLC側の設定は、 『 PLCのWi-Fi接続 』 にて紹介しているので
そちらを参考にして下さい。
スマホのWi-Fiの設定は、 『 はじめに準備すること 』 参考にして下さい。
PLCの通信設定及び、IPアドレス、ポート番号の設定に問題なければ、"CONNECT" ボタンにて接続を開始します。
モニタが出来るデバイスは、"D","X","Y" の3種類からで "Select Device" の スピナ(コンボボックス)から選択します。 デバイスのアドレスは、"Device No." に 設定した数値(10進数)を先頭アドレスとして、10ワード分表示します。
役に立つかはわかりませんが、一応、Dデバイスには、データも書き込めます。
最大400ワードまで一括でデータの書き込みが出来ます。※400個以上は送らないでね
(デバイスデータを、一括で "0" にクリアしたいときには役に立つかもしれません)
あと、簡易入力スイッチを4個(上2個モーメンタリ式、下2個オルタネイト式)配置してます。
ハードスイッチや、タッチパネルとかで、ボタンの準備が面倒な時に使ってください。
Xの横にあるテキストを入力する事で、アドレスを任意に変更できます。
アプリを終了させる場合は、戻るボタンにて、終了させて下さい。 ホームボタンでは終了しないので、 接続中はバックグラウンドで通信し続けるので注意してください。
無料アプリなので興味のある方は是非使ってみ下さい。 また、『こんな機能入れて!』 、『ここを改善して欲しい!』
という内容がありましたしたら、プライバシーポリシーページに問い合わせフォームを用意しましたので、メッセージ下さい!
可能な限り更新、アップデートします。
それでは、皆さんの快適なFAライフに貢献できたら幸いです。