Ethernet/IP#少し話しよ_02

EthernetIPの話第2回です。今回はRegisterSession()とForward_open()について話ししたいと思います。

こちらは第1話です。

Ethernet/IP#少し話しよ_01 | (soup01.com)

RegisterSession()

OriginatorがRegisterSession()コマンドをTargetに送ってSessionを初期化します。そのコマンドはSend側にはなにSession番号いりません。

Request

Encapsulation Headerは前の記事にも説明しましたのでここで書きません。

こちらはWireshakeからとってたCaptureですね。


Reply

そしてTargetはRegisterSession()のReplyをOriginatorに送信する必要がありますね。

Formatも大したわかりませんので。

こちらはWireshakeのCaptureですね。

StatusがSuccessが帰ってきましたし、Session番号も戻りました。

Session Management

TCP Encapsulation Sessionには主に3つの部分に分けられています。

ーSession確立

ーSessoionを保持する

ーSession閉じる

まずOriginator からTCP OPEN Connectionを開きます。

そしてRegisterSession()コマンドをTargetに送信します。

次はTargetがOriginatorのVersion Supportしてるか、あとOptionsがSupportするか。

そしてTargetから独自のSession番号を振り付け、RegisterSession()のReplyを返します。

そしてOriginatorやTargetにもConnectionを切断することができ、切断するときにUnRegisterSession() Commandを送信します。

以下の原因でSessionがなくなる可能性があります:

-Originator・TargetがTCP Connectionを閉じました

-Originator・TargetがUnRegisterSession() Commandを送信

-TCP Connectionが障害発生した

TCP ConnectionはConnectionベースのProtocolで片方がConnectionをなくしたら、反対側にも同じくConnectionをCloseする必要があります。

もしMessageは時間内届けたの返事来なければエラーだと認識しConnectionを閉じます。なので、TCP ConnectionではMessageの送受信から通信状態を検知しますね。

そしてTCPにはKeep-alive processをSuppportします。アプリケーションでそのKeep-alive processを有効することによって、アプリケーション内で一定時間にMessage交換なくてもTCPがKeep-alive Messageを送信し、Replyの状態を判断します。


Forward open()

Forward Open リクエストはアプリケーションのConnecitonセットアップを実装できます。そのリクエストにはNetwork Connection とRequested packaget intervals(RPI)の2部分になり、O->TとT->Oの二方向があり、O->TはOriginator to Targetで、T->OはTarget to Originatorです。

そのForward open()はCIP Common Industrial ProtocolとCIP Connection Manager二つに分けられます。

CIP Connection ManagerにはServiesとCommand Specific Data2つにさらに分けます。

Services はServices CodeといまRequestか、Responseどっちかを振り分けます。

Services Code=0x54はForward Open です。

そしてWireshakeのところに値=0なので、Requestになります。


Command Specific Data

そしてこっちらはCIP Connection Managerの構造ですね。


Priority Time_Tick

Priority Fieldsは必ず0にしてください。Time TickはTime out の値になります。

下図だけTime_Tickは0x11で、実際CIPの仕様書ではTime per Tick=8になります。

そしてTimeout値の計算は2**Time Out Value x Time_out_Ticksになります。

Time-out Ticks

こちらはTime-outのベース時間です。

下図だとTime-out Ticksは250msです。

なので2**8 x 250の計算になります。

O->T ConnectionID/ T->O ConnectionID

Connection IDですが、Codesysのどこかを参照してるか少しわかりませんね~

Connection Serial Number

すいません、そのConnection Serial Numberも見つかりません…

Originator VendorID

Identity Object Instance #1,attribute #1に参照します。

下図だと0x0505です。

その0505はCodesysの1285に対象します。

Originator Serial Number

Identity Object Instance #1,attribute #6に参照します。

Connection Timeout Multiplier

0=x4、1=x8、2=x16のような与えを設定します。なのでCodesysでRPIのTimeout MultiplierIを設定するときは4,8,16のように設定できます。

Codesysだと以下の設定項目に対応します。

O->T RPI/T->O RPI

Originator>TargetのTimeout です。

O->T Connection Parameters/T->O Connection Parameter

Trigger Typeなどのパラメタの設定エリアです。

Codesysだと以下の場所に参照します。

Network Connection Parameters

Mappingはこのようになります。

Connection Size(Bytes)

T->OやO->Tのデータ交換するときに最大のBufferサイズです。

Fixed/Variables

0=Fixed、1=Variablesです。

Fixedが設定した場合、データ交換のSizeはConnection Size Parameter値に固定されています。

Variablesが設定した場合、毎回データ交換のサイズも可変で、でもConnection Sizeに超えないようになっています。

Priority

00=Low

01=High

10=Scheduled

11=Urgent

Connection Type

00=Null

01=Multicast

10=Point To Point

11=Reserved

Null

Network ConnectionをOpenしない。

Multicast

Network ConnectionがMultiple ConnectionをOpenし、、マルチConsumersからデータ受信できるようになIPアドレスを使用します」。

Point To Point

いわゆる1:1のConnectionです。

Redundant Owner

1=1つ以上のOwnerで同期接続できるようになる

0=Exclusive Owner・Input Only・Listen Onlyだけ


Transport class and Trigger

データ交換のTigger・通信Classを定義するエリアですね。

Connection Path Size/Connection Path

最後はConnection Pathです。

Connection Path Sizeは何WordのデータがそのConnection Path入ってるかを示しています。Connection Pathの内容はWireshakeでみてくださいー

最後

はーい、お疲れ様です。ここまで書いちゃったら疲れました。

もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!

Twitterのご相談:@3threes2

メールのご相談:soup01threes*gmail.com (*を@に)

Youtube Channel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

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

フォローする