Ethernet/IP#少し話しよ_10_Large Forward Open

Ethernet/IPについての第10話です。今回はLarge Forward Openについて話します。検証デバイスはCodesys(Scanner)とキーエンス(KV8000)になります。

さ、FAを楽しもう!

Reference Link

http://soup01.com/ja/?s=Ethernet%2FIP+%E8%A9%B1%E3%81%97%E3%82%88

Large Forward Open?

Connection Manager クラスは、I/O 接続および明示的メッセージング接続に関連する内部リソースを割り当て、管理します。Connection Manager クラスによって生成される具体的なインスタンスは、接続インスタンスまたは接続オブジェクトと呼ばれます。

→今回KV8000で構築したTagは1448 Byteなので、Large_Forward_Openを使用する必要があります。

サービスコード

実装要否:Class

実装要否:Instance

サービス名

説明

0x4E

該当なし

条件付き

Forward_Close

コネクションを切断する

0x54

該当なし

条件付き

Forward_Open

コネクションを確立する。最大データサイズ 511 byte

0x5B

該当なし

任意

Large_Forward_Open

コネクションを確立する。最大データサイズ 65,535 byte

注意1 Large Forward Open本当の意味

Large Forward Openの Large は、Ethernetの1パケットを64 KBにするという意味ではなく、CIP Connectionとして指定できるConnection Sizeを大きくするという意味です。

構造上の大きな違いはここです。

Forward Openの場合:

O→T Network Connection Parameters : 16 bit
T→O Network Connection Parameters : 16 bit

Large Forward Openの場合:

O→T Network Connection Parameters : 32 bit
T→O Network Connection Parameters : 32 bit

Forward_Open および Large_Forward_Open には、2 組のネットワーク接続パラメータがあります。1 つは OT ネットワーク接続用、もう 1 つは TO ネットワーク接続用です。

Forward_Open 内の各ネットワーク接続パラメータセットは、次の図に示すフィールドを含む単一の 16 ビットワードとして提供する必要があります。もう一回Forward Openを見てみますと:

ビット

パラメータ

意味

15

Redundant Owner

冗長オーナー

14–13

Connection Type

コネクションタイプ

12–10

Reserved

予約領域

9

Priority

優先度

8

Fixed / Variable

固定長 / 可変長

7–0

Connection Size (in bytes)

コネクションサイズ(バイト単位)

Large_Forward_Open 内の各ネットワーク接続パラメータセットは、次の図に示すフィールドを含む単一の 32 ビットワードとして提供する必要があります。

ビット

パラメータ

和訳

31

Redundant Owner

冗長オーナー

30–29

Connection Type

コネクションタイプ

28

Reserved

予約領域

27–26

Priority

優先度

25

Fixed / Variable

固定長 / 可変長

24–16

Reserved

予約領域

15–0

Connection Size (in bytes)

コネクションサイズ(バイト単位)

注意2 Large Forward OpenはImplicit I/O専用ではない

Class 1 I/OでもClass 3 Connected Explicit Messagingでも使えます。ちなみに、「Large Forward Openなら必ず64 KB近く使える」わけではありません。 プロトコル上の表現能力とは別に、実際の最大のConnection SizeはScanner/Adapter側の実装・バッファ・製品仕様に制限されます。

Implementation

ここから検証プロジェクトを作成しましょう。

今回の記事で選定したEthernet/IP AdapterがKV8000であり、キーエンスの通信仕様からみると1444 Byteまで対応できるということなので。

Ethernet/IP ScannerをCodesysに選定するには、Codesys のCODESYS EtherNet/IP Scanner SLデータシートからLarge Forward Openが確認できたからです。

EDS File Download

下図のLinkからKV8000のEDS FILEをDownloadしてください。

https://marketplace.odva.org/products/2096-kv-8000

KV Studio

最初にキーエンスのKV8000から構築します。

Ethernet/IP 設定

KV Studioを起動し、KV8000右クリックし→Ethernet/IP Settingクリックします。

KV-8000を選び→右クリックしTag Settingをクリックします。

Instance通信の場合

Instance通信の場合はTag Nameを適当に設定し、Instance IDのCheckboxを入れ、最後はInstance IDを入力すればOKです。また、InstanceのサイズはSize(word)から設定しましょう。

Tag通信の場合

次はTag通信の設定です。Tag Nameを入力し、Size(word)を最大724ワードにします。それを設定すればKV8000が自動的にLarge Forward Openに切り替わります。

Codesys

次はCodesys側を構築します。

EDSインポート

Tools→Device Repositoryをクリックします。

Installをクリックします。

先程DownloadしたEDS FILEをインストールしましょう。

Done!

Ethernet インタフェース追加

Deviceを右クリック→Add Deviceします。

Etherent Adapter→EthernetをクリックしEthernet インタフェースを追加します。

Ethernet/IP Scanner追加

次はEthernet インタフェースを右クリック→Add Deviceします。

Ethernet/IP Scannerを選び→Add Deviceします。

Add Ethernet Adapter

KV8000をEthernet/IP ネットワークに追加します。

IP設定

KV8000のIPアドレスを設定します。

Connection追加

次はConnection Tabを開き、Add Connectionをクリックします。

接続の追加画面が表示されます。

Tag通信接続追加

Tag通信を追加したい場合は、Predefined connectionをInput Only(Tag Type)を選択し、Symoblic nameをKV Stuidoに設定したTag名を入力し→サイズを1448 Bytesにします。

Done!Tag通信の接続が追加されました。

次は先程Tag通信の変数を追加するためにAssemblesをクリックします。

T–>OにあるAddボタンをクリックします。

Input Dataを選び→Nameに変数名を設定し、最後はCount欄を1448に設定すれば1448個のBYTE変数が宣言されます。

Done!

Ethernet/IP I/O Mappingにて先程の操作の結果を確認できます。

Instance接続変更

次は既存のInstance接続設定を変更しましょう。Input Only(ID type)を選び→Edit Connectionをクリックします。

ここでデータサイズなどを実際のKV8000接続設定に合わせましょう。

Instance接続追加

次はInstance接続を追加しましょう。下図のAdd connectonボタンをクリックします。

Predefined connectionをInput Only(ID Type)を選択し、データサイズを設定し→OKします。

最後はProduced Assembly IDを変更しましょう。先程追加したInstance接続を選び→Configuration DataにあるProduced Assembly IDをKV8000に合わせて設定しましょう。

Generic接続追加

次はCodesysでGeneric接続を追加し、KV8000とEthernet/IPを接続します。先程と同じく”Add Connection”をクリックします。

接続設定画面からGeneric connectionを選び→User-defined pathを選択します。最後はConnection PathにKV8000と接続するEIP Pathを入力します。

今回の例では20 04 24 01 2C FE 2C 66 を設定します。最後の66はInstance番号102になります。

Done!

ダウンロード

最後はプロジェクトをCPUにダウンロードしましょう。

結果

WiresharkからTag通信のLarge Forward Openリクエストとリスポンスを確認できました。

Ethernet/IP接続がたくさん存在してる場合、T->OのNetwork Connection IDからPackageをFilterすればよいんです。

WiresharもCIPIOメッセージも確認できました。

コラボ1 Connection IDでFilterする

最初に監視したいEthernet/IP 接続IDをFilterしてきます。

先程確認したNetwork IDを使用し、下記のコマンドでCapatureをFilterしましょう。

cip.connid == 0x029ce0f6

コラボ2 パケット間の時間?

次はEthernet/IPのCIP IO メッセージの2つの時間差を確認しましょう。

Frame 461 : 1.817412270
Frame 507 : 1.827122400

差 = 0.009710130 sec ≒ 9.71 ms

また、

507 → 554

1.837111800 – 1.827122400

= 9.9894 ms

554 → 600

1.847082100 – 1.837111800

= 9.9703 ms

600 → 646

1.857114300 – 1.847082100

= 10.0322 ms

646 → 692

1.867058700 – 1.857114300

= 9.9444 ms

なので、この Connection ID = 0x029CE0F6 の T→O CIP I/Oはほぼ10 ms周期です。

つまりこのConnectionのT→O RPI ≒ 10,000 µs(10 ms)になっています。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする