こちらは新しいシリーズの記事で、StratonというSoftware PLCを使って様々なテストを展開します。今回はStraton RuntimeにEthernet/IP Scannerを立ち上げ、Pilz社のIndustrialPIのCodesys RuntimeのEthernet/IP Adapterと接続する構築手順を1から説明します。
さ、FAを楽しもう。

Reference Link
http://soup01.com/ja/category/pilz/industrialpi/
http://soup01.com/ja/category/straton/
前書き
いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。
現在、私達の活動はほぼ無償で続けており、より多くのコンテンツを提供するためには、皆様の温かいご支援が大変重要です。もし可能であれば、以下のリンクから応援していただけると大変嬉しく思います。
高橋クリスのメンバーシップ
こちらはFullさん(full@桜 八重 (@fulhause) / X)と共にやっているラジオにメンバーシップを登録いただけます。
https://note.com/fulhause/membership/join
AMAZON ギフトリスト
こちらは自分のブログのコンテンツ制作や設備の充実に大いに役立てさせていただきます。
https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share
Patreon
こちらは自分のブログのコンテンツ制作や設備の充実に対する小さな応援の気持ちのPatreonです。
https://www.patreon.com/user?u=84249391
皆様のサポートが、私たちの活動をより充実させる力となります。
どうぞよろしくお願いします。
メールアドレス(*=@)
X
Function Block
今回の記事ではプロジェクト内に使用したFBのみを説明します。
eipReadAttr
このファンクション・ブロックは、1 つの CIP 属性を読み取るために、Explict Message(UCMM)をEthernet/IP アダプタに送信します。.
注意するのは、CIPインスタンス番号は16ビット[1 … 65535]までになります。
VAR_INPUT
変数名 | タイプ | 説明 |
Snd | BOOL | この入力の立ち上がりエッジで交換が始まる。 DONE 出力は交換の終了を知らせます。 |
SrvIP | STRING | Ethernet/IPアダプターのIPアドレスになります。 |
Class | UINT | CIPオブジェクトのクラス識別子になります。 |
Inst | UINT | CIPオブジェクトのインスタンス識別子になります。 |
Attr | UINT | CIP属性の識別子になります。 |
Data | array of USINT | 受信データを格納するバッファ。 実際の属性の長さがこの配列のサイズより大きい場合、値は読み込み時に切り捨てられます。 |
VAR_OUPUT
変数名 | タイプ | 説明 |
Done | BOOL | この出力は、交換が成功したか失敗したかにかかわらず、交換が終了する1サイクルの間、TRUEになります。 |
RevSize | UINT | サーバーが回答したCIP属性の実際のサイズになります。 このサイズがDATA入力配列のサイズより大きい場合、値が切り詰められたことを示します。 |
Err | UINT | 主なエラー報告。 以下の値のいずれかを指定します:0 = エラーなし1 = 入力引数が無効2 = システムがビジー状態3 = 回答待ちのタイムアウト (タイムアウト値は3秒)4 = UCMMエラーがサーバーから返された。その他 = 内部エラー |
EmErr | UINT | UCMMエラーの場合、これはCIPの一般的なステータスエラーコードです。 |
EmErrExt | UINT | UCMMエラーの場合、これはCIP拡張ステータスエラーコードであります。 |
Implementation
それでは実際にプロジェクトを構築しましょう。
Codesys Side
最初にPizl社のIndustrialPIから構築します。
Add Pilz RevPI
Codesysに新しいプロジェクトを追加し、Pilz PIデバイスを追加するために右クリック>Add Deviceします。
CODESYS Control for Linux ARM64 SLを追加してください。
Add Etherent Adapter
次はEthernet Adapterを追加するため、右クリック>Add Deviceします。
Ethernet/IP > Ethernet Adapter>Ethernetを追加します。
Add Ethernet/IP Adapter
次はEthernet/IP Adapterを追加するためにEthernet/IP>EtherNet/IP Local Adapter>Ethernet/IP Adapterを追加します。
Add Etherent/IP Module
最後にEthernet/IP Moduleを追加します。
それでOKです。
Configure Ethernet IP Address
Codesys Runtimeに使用するEthernet Adapterを設定します。
General>Network Interface>Browseします。
今回eth0を使用します。

Add Assembly
Ethernet/IPのAssemblyを設定します。
Consuming Assembly
Consumingは入力データになります。+Addで新しいAssemblyを追加します。
今回は通信テストが目的なので、Data TypeをWORDに設定し、OKで設定を適用します。
Done!それでConsuming Assemblyを追加しました。
Producting Assembly
次はProducting Assembly(出力データ)を追加するため、+Addをクリックします。
先ほどと同じ操作でWORDタイプの変数を追加し、Okで進みます。
Done!それでProducting Assemblyを追加しました。
Add GVL
次はGlobal Variables Listを追加するために、Applicationに右クリック>Add Object>Global Variable Listをクリックします。
GVL名を設定します。
GVL内に2つのWORD変数を宣言します。
Mapping
次はプロジェクトに定義した変数をMappingするためにEthenret IP Moduleをクリックします。
Ethernet/IP Module I/O Mappingを開きます。
Input変数にある…ボタンをクリックします。
先ほど定義したwInput変数を選択します。
次はEthernet/IP Adapterの出力変数をMappingするために…ボタンをクリックします。
先ほど定義したwOutput変数を選択します。
Program
こちらはEthernet/IP Scannerから受信したデータをそのまま出力します。
GVL_EIP.wOutput:=GVL_EIP.wInput; |
Download
最後はプログラムをDownloadしましょう。
Straton Side
次はStraton Runtime側を構築します。
Fieldbus Configuration
Straton RuntimeにEthernet/IP Scannerを構築するには、Fieldbus Configurationをクリックします。
次はInsert>Insert Configurationをクリックします。
こちらはStratonのFieldbus追加画面になります。
Ethernet/IP(ODVA)>Ethernet/IP IO Scanner(Client)をクリックし、Okで進みます。
Ethernet/IP Scannerとして稼働するIPアドレスを設定します。
今回はMini PCのIPアドレスに設定し、OKで進みます。
Done!それでEthenret/IP Scannerが追加されました。
Insert Ethernet/IP Adapter
次はCodesysのEthernet/IP Adapter接続を追加するため、Insert>Insert Master/Portします。
こちらはEthernet/IP Adpaterの接続設定画面になります。
Address
Address欄はPilz社のIndustrialPIのIP設定アドレスになります。
Configuration Instance
ConfigurationのInstance欄はEthernet/IP接続するときに使用するAssemblyで、今回は使いません。
Configure T→O
Ethernet/IPの入力データ(T→O)を設定します。
こちらはEthernet/IPのIO Object設定画面になります。
InstanceはCodesysの16#65に合わせて101を設定し、サイズは2Bytesにします。
Configure O→T
次はEthernet/IPの出力データ(O→T)を設定します。
InstanceはCodesysの16#64に合わせて100を設定し、サイズは2Bytesにします。
Done!
Define Global Variables
次はGlobal変数を定義するため、Global Variables>右クリック>Add Variableします。
Done!新しいGlobal変数が追加されました。
変数名を変更し、TypeをWORDに設定しましょう。
それでEthernet/IP経由でCodesysとデータ交換する変数を宣言しました。
- EIPInputWord:Codesysから受信したデータ
- EIPOutputWord:Codeysに送信するデータ
Mapping
今度はプロジェクトの変数と通信するデータをMappingします。先程のI/O Driversの画面を開き、Connectionを右クリック>Insert Variableをクリックします。
こちらは変数のMapping画面になります。
Symbol欄にある…ボタンをクリックします。
先程Global変数に定義した変数を選択します。
Done!
次はData ExchnageにOffset ・Bitなどの設定を行います。
今回のEthernet/IP接続にある変数はWORD1だけなので、Offsetは0のままに、Formatを変更します。
Drop-Listから16Bit – Signedを設定します。
それでOKです。
Done!Straton Runtime→Codesysに送信するデータをMappingしました。
Result
先ほどと同じ操作でTarget→Originatorの変数もMappingしましょう。
Insert Diagnostic Variables
次はEthernet/IPの診断用変数を追加するため、Variables>Diagnostic/Control>Server OKなどの変数を追加してください。
Done!
Insert ST Program
今度はSTプログラムを追加するため、Programs>Insert New Programします。
Programs>ST Programを選択し、Nextで進みます。
Execution ModeをMain Programに選択し、OKで進みます。
Program
こちらは現在RuntimeのCycle 数を取得し、またxSndをTrueにすると、Pilz社のIndustrialPIのCodesys RuntimeにExplictメッセージを送信します。
myCounter:=myCounter+1; info:=_SYSINFO_CYCLECOUNT ; ReturnData:= GetSysInfo(info); EIPOutputWord:=EIPOutputWord+1; if xSnd then SrvIP:=’192.168.250.200′; Class:=16#1; Inst:=16#1; Attr:=16#1; if Inst_eipReadAttr.Done then xSnd:=False; end_if; end_if; Inst_eipReadAttr( xSnd(*Snd: BOOL*) , SrvIP(*SrvIP: STRING*) , Class(*Class: UINT*) , Inst(*Inst: UINT*) , Attr(*Attr: UINT*) , Data(*Data[]: USINT*) ); |
Download
最後はProject>OnlineでプロジェクトをRuntimeに転送しましょう。
Result
Ethernet/IPの通信が確立できるまで、Server OKとI/O ConnectionOKもFALSEです。
Ethernet/IPが通信確立したいServerOKとI/O Connection OKにもTrueになります!