今回は三菱のRJ71EIP91モジュールからEIPのAdapterからデータを読み込むするにはどう設定するか、などを説明します。
よろしくおねがいします。
構成
こっちらは今回の構成になります。R00CPUのとなりはRJ71EIP91があり、Molex製のTCDEI-8D0P-G02とEtherNet/IP で接続します。
RJ71EIP91はScannerでTCDEI-8D0P-G02がAdapterになります。
同時に、Rockwell PLCにもScannerでありTCDEI-8D0P-G02と接続します。
三菱側はTCDEI-8D0P-G02のデータを読むだけの役割になります。
Adapter側
別のMolexデバイスじゃなく、CodesysとRaspberry からでもAdapterでもOKです。
以下の記事参考してください:
Configuration Tools
RJ71EIP91には専用の設定ツールがあるみたいです。EtherNet/IP Configuration Tool for RJ71EIP91という名前らしいです。
ダウンロード
下記のリングからソフトをDownloadしてください。
Member登録が必要らいしいです。
このようなZip Fileがダウンロードできます。
インストール
次はToolsのインストールですね。
Fileを解凍したらsetupをタブルクリックします。
再起動必要になりますが、はいです。
Next>します。
英語にしますー
インストール場所を設定し、Next>します。
Installします。
しばらく待ちます…
よし、これでOKです。
プロジェクト作成
これからはRJ71EIP91を実際使用し構成からプログラミングまでの流れを説明しますね。
Hardware Configuration
まずProject>Newで新規プロジェクトを作成します。
私はR00を使っていますので、R00を選び、OKします。
Module ConfigurationにCPUなどを入れます。もちろん今回の主役、RJ71EIP91を忘れないでくださいね。
コンパイルしエラーあるかどうかをCheck。
問題なければDownloadします。
念の為、Diagnostics>System MonitorでCPUの状態を見てみましょう。
CPUはエラーなしですね。
さらにRJ71EIP91をクリックします。
うん、このモジュールもOKです。
パラメタ設定
モジュール追加したところ、次はパラメータ設定ですね。
GXWorks3上ではIPのみです。
Parameter>Module Information>0000:RJ71EIP91をクリックします。
IPのところをクリックします。
今回は192.168.1.47/24を設定します。
Checkでエラーあるかどうかをみます。
よし、これもOKです。
パラメータをダウンロードします。
モジュールリセットし、Pingが通すかどうかをまずCheckします。
このリセットしないと、Pingができなかった…
Configuration Tools
GXWorks3でIP設定したあと、次はConfiguration Tool でネットワーク設定などをします。
以下のInstall PathでEIPCT_Consoleを起動します。
こちらは私インストール下バージョンです。
Add New ElementのPop UPが出てきます。IPを先設定したものをいれてください。
こちらは起動したのConfiguration Tool画面ですね。
EDS 追加
EthernetIPで通信するにはEDS Fileが必要です。
Library>Addします。
次へ>します。
Browseします。
EDS FILEを選び、開くをクリックします。
次へで進みます。
緑のMarkがついたら、インストール成功です!
次へ>をクリックします。
これでOKです。
完了で閉じます。
Device追加
前も書いてたおり、今回RJ71EIP91がIP Scannerになります。このモジュールと接続するAdapterを設定します。
Device Library>EtherNet/IP Devices>メーカ名>Communications Aapter>モジュール名で展開します。
該当するAdapterを右クリックし、Insert in Configurationします。
このような画面が出てきますね。
Device名など設定できる場所です。
まずConnections Tab>Addします。
Input Onlyします。
そしてDefault入れたExclusive Ownerを消します。Exclusive Owner選び>Removeします。
これでOKです。
次はGeneralのTabに戻り、Network PropertiesでIPを変更します。
モジュールのIPは192.168.1.101です。
Configuration Download
最後はConfigurationをダウンロードします。
File>Go Onlineします。
下のCommunication おでがOnlineに変わります。
File>Downloadします。
このようなPopupが出てきます。
Configuration.apaの隣のCheckboxも入れてDownloadします。
Download成功したPopupが出ればOKです!
念の為、Pingもしてみましょう。
モジュールIO設定
自分の習慣に過ぎませんが、どんなPLCメーカでもIO Dataは必ず構造体にします。
まずRJ71EIP91の先頭IOを確認します。
モジュールを右クリックし>Open System Parameterします。
I/O Assignment Settings>StartXYは0000から32Pointsですね。
つまり0000-001Fになりますね。
構造体追加−Input
Label>Global Label>Structured Data Types>AddNew Dataします。
構造体の名前を設定します。
このように中身を作ります。
構造体追加−Output
Label>Global Label>Structured Data Types>AddNew Dataします。
OutputデータもManual参照し作ってください。
Global Label定義
そして定義された構造体をGlobal Labelで変数を宣言します。
ライブラリ追加
FROM/TOでやるのは私あまり好きではないので、Manual調べたら通信用のFunction Blockがあるらしくて、こちらを使用します。Project>Library Opeartion>Register to Library List>Addします。
Module Label追加
Module Label>0000:RJ71EIP91を選び>Add Module Labelします。
Globalラベルが追加されましたね!
Module FB追加
Function Blockも同様に追加します。
Module FBでDisplay TargetをRJ71EIP91に選択します。
2つのFBを選び、右クリックしAdd to Projectします。
FBにも追加されましたね!
一回コンパイルしましょう。
プログラム実装
構成やパラメータ設定全部終わったら次はいよいよプログラム始まりますね!
ちなみに自分のSample Codeは全部STなのでご了承ください。
Input Mapping
こちらは最初にもみせたのRemote IOですね。まずInputがどんなものが入ってるのかを知る必要があります。
Manual調べるとInputなら8Byteのデータありますね。今回必要なのはINPUTの信号だけなので…Offset 0x02ですね。
M+RJ71EIP91_Class1GetInputData
こちらは今回使用するFunction Blockになります。なれない方もいると思いますが、慣れてください。このFBを使用すればClass 1のCommunication Input Dataを収集することができます。i_bEN=TRUEなら通信はじまり、Falseなら通信しないです。
Inputパラメタ
i_bEN | Bit | True=FB実行 |
i_stModule | Structure | モジュールラベル |
i_uConnectionNo | Word | 独自の接続番号 |
Outputパラメタ
o_bENO | Bit | True=実行中 |
o_bOK | Bit | True=エラーなし完了 |
o_bErr | Bit | True=エラーあり |
o_uErrId | WORD | エラーID |
o_uStatusId | WORD | StatusID |
o_uInputData | WORD | Input DataのアドレスOffset |
Error Code
DUT_RJ71EIP91_ReadIN_FBStatus
この構造体はFBの出力Statusを定義します。
DUT_Station_Connection2
次は接続するAdapterデバイスの構造体を作成します。
MAIN
Local変数追加
FC追加
D0からZ0を数え、Bit順にデータを振り分けます。
Z0:=zBase+1; FC_GetStation1PortData.bP1A:=D0Z0.0; FC_GetStation1PortData.bP1B:=D0Z0.1; FC_GetStation1PortData.bP2A:=D0Z0.2; FC_GetStation1PortData.bP2B:=D0Z0.3; FC_GetStation1PortData.bP3A:=D0Z0.4; FC_GetStation1PortData.bP3B:=D0Z0.5; FC_GetStation1PortData.bP4A:=D0Z0.6; FC_GetStation1PortData.bP4B:=D0Z0.7; FC_GetStation1PortData.bP5A:=D0Z0.8; FC_GetStation1PortData.bP5B:=D0Z0.9; FC_GetStation1PortData.bP6A:=D0Z0.A; FC_GetStation1PortData.bP6B:=D0Z0.B; FC_GetStation1PortData.bP7A:=D0Z0.C; FC_GetStation1PortData.bP7B:=D0Z0.D; FC_GetStation1PortData.bP8A:=D0Z0.E; FC_GetStation1PortData.bP8B:=D0Z0.F; ; |
プログラム
IF EIPModule1_IN.b00_ModuleReady
AND EIPModule1_IN.b1F_CommReady
AND NOT bStop2Comm
THEN
bStart2Comm:=TRUE;
ELSE
bStart2Comm:=FALSE;
END_IF;
fb_RJ71EIP91_GetInputData(
i_bEN:=bStart2Comm
,i_stModule:=EIP91_1
,i_uConnectionNo:=2
,o_bENO=>st_fb_RJ71EIP91_GetInputData.o_bENO
,o_bOK=>st_fb_RJ71EIP91_GetInputData.o_bOK
,o_bErr=>st_fb_RJ71EIP91_GetInputData.o_bErr
,o_uErrid=>st_fb_RJ71EIP91_GetInputData.o_uErrid
,o_uStatusId=>st_fb_RJ71EIP91_GetInputData.o_uStatusId
,o_uInputData=>D10
);
;
fb_R_Trig1(CLK:=st_fb_RJ71EIP91_GetInputData.o_bErr);
IF fb_R_Trig1.Q THEN
bStop2Comm:=TRUE;
END_IF;
IF bReset THEN
bStop2Comm:=FALSE;
END_IF;
Station1_PortData:= FC_GetStation1PortData(10);
結果
実行が無事に終わります。
そしてAdapterからにもデータが入っていますね。
最後
はーい、お疲れ様です。
もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!
Twitterのご相談:@3threes2
メールのご相談:soup01threes*gmail.com (*を@に)