Ethernet/IP#少し話しよ_06

Ethernet/IPについての第6話です。今回はClass/Instance/Attributeのついて話したいとおもいます。ではその前にまずExplicit messagingとImplicit (I/O data)のMessageをもう一度説明しましょう。

EtherNet/IPは2種類のメッセージがありそれは低優先度・頻度低い・通信確率用のexplicit messages(Unconnected messaging)と頻度高い・優先度高い・IO Data用のImplicit   Message(Connected messaging)です。

Explicit messagingとImplicit (I/O data)のMessage Connectionは最初にも紹介しましたが、今回はまずもう一度復習していきたいと思います。Explicit messaging(TCP)はPoint-to-Pointの関係で2つのNodeをRequest・Responseの形でやり取りします。そのようなConnectionはNetworkデバイスの検索などで使われています。Implicit (I/O data・UDP)はPoint-to-PointやmulticastのConnectionもあるアプリケーションベースのIO Dataです。

Configuration

Class Code

ここで少し先みせたClass Codeの役割を説明します。

CIP Objectに各ClassありClassごとに違うデータが入っています。下図のように、Message RounterはClass 0x02、IdnetityはClass 0x01、TCP/InterfaceはClass 0xF5、AssemblyはClass 0x04、Connection ManagerはClass 0x06です。すべてのClass Codeは16進数の数値でOPDVA協会がそれらのClasss Codeを管理します。ですが、一部のClass Code範囲はメーカー定義できるので詳細は各メーカーの取説をやCIPの仕様書を参考にしてください。


Identity Object:01Hex

このObjectではVendor IDやVersionなどデバイスの情報を提供するとServicesをリセットする機能を持っています。

Message Router Object:02Hex

このObjectではMessagesの接続点を提供します。Client(Explicit messagingやImplicit Messageing)はこのMessageのServicesを通じて他のObjectにアクセスします。

Assembly Object:04 Hex

このObjectはIO Dataを構築します。みなさんが使ってるInput Only などはこのObjectのことです。

Connection Manager Object:06 Hex

デバイスと接続するときのFW_OpenやFW_Closeを管理しています。ConnectとUnconnectionもSupportします。

TCPIP Object:F5 Hex

IP・デバイス名・DHCP設定などを管理するObjectです。

Ethernet Link Object:F6 Hex

Ethernet水準の設定を管理するObjectです。(Speed・Port…)

Attribute

ClassだけではConnectionを成り立たないので、次は2つ目のAttributeについて説明しますね。AttributesはClass AttributeとInstance Attributeの2種類があります。

Class Attribute

Class AttributeはGlobalなScopeで該当するClassの属性を取得できます。CIPではそのClass Instanceが”0”という指定値があります。

Example

では、実際AdapterにUnconnectionメッセージを送って、Class 0x01 Identity ObjectのClass Attributeを取得してみます。

(次の記事ではCodesysからメッセージを送るプログラムを紹介しますので、心配しないでください。)

Serviceは次の文章で説明します。いますべてのAttributeをとり、InstanceとAttributeも0という特殊値を入れます。

ResponseのPacktes見ると、正常Codeと4つのAttributesが戻りましたね。

それはRevision・Max Instnace・Maximum ID Number Class Attributes・Maximum ID Number Instance Attributesです。

Instance Attributes

Instance Attributeは各Objectの各Instanceが独自もってるものです。各Instance番号はSupportするAttributeが違いますので、SupportしてないAttributeが要求されたらNot Supported (General Status code 0x14) が戻ります。

それでもInstanceってなに?ってピンと来ないかもしれませんね。以下の図をみてください。IOConnectionでは直接AssemblyののAttribute#3をアクセスすることができ、他のAttribute#1,2はAssmebly0x04を経由してアクセスしています。もちろん単一のConnectionで複数のAttributeにもアクセス可能です。

ここで、Classが一つだけでInstanceは複数ありますね。つまり、ClassはObjectの設計図で、InstanceたちはそのObjectの設計図に沿って生成されたもので(もしFunction BlockやOOPのプログラムなどができる人ならわかると思います。)、ConnectionがアクセスするのはそのClassから生成されたInstance番号です。

なんかどこかで聞いた話があると思いませんか?Connectionを構築するとき、Class ID・Instance ID・Attribute IDを入力するところがあるとおぼえていますか。

ClassID=16#4,Instance ID=16#64,Attribute ID=16#3。

つまりClass 4のInstance 16#64のAttribute#3にアクセスするってことです。

つい先、Class ID 16#4 にはAttribute#3は直接アクセスできると言いましたので、Connection Pathもそのまま20 04 2C 64 2C 65になりますね。

O->TのAttribute IDを16#4に変えますと、Connection Pathも20 04 2C 64 30 04 2C 65になります。30=Attribute ID指定で、04はそのAttribute#4のことです。

Example-1 Get all Attribute From Object 01Hex

01HexのClassをGet all Attributeします。

返事のPackets見ますと、Attribute,2,3,4,5,6,7,8,9,10が含まれてる返事が来ましたね、

すべてのAttributeを説明するのは面倒なので、Atrribute1,2,3を取り出してAdapterの情報と比較します。

Example-2

次のExampleではClass4 Instance 101 Attribute 3のデータをGet all Attributeで取ります。

つまりAdapterのIO Outputデータを取得してみます。

Packetsからみますと、同じIO DataなのにConnected MessageではないのでTCPを使用していますね。

でもConnection Pathは20 04 24 65 30 03=Class 4 Instance 101 Attribute3ですね。

Packetsの返事を見るとデータも返って来ましたね。

CodesysのUser Programでは0番目と31番目のデータをずっと加算と減算します。

Services

つまりコマンドですね。ここでいくつか使えそうなコマンドを紹介します。

0x01 Get Attributes all

該当するClassのInstanceのAttributesをすべて取得します。

0x02 Set Attributes all

該当するClassのInstanceのAttributesをすべて上書きします。

0x0E Get Attributes Single

該当するClassのInstanceの指定Attributesを取得します。

0x10 Set Attributes Single

該当するClassのInstanceの指定Attributesを上書きします。

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

シェアする

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

フォローする

コメント

  1. なすび より:

    いままさにCodesysでExplicit通信の実装をしていたため、このシリーズの記事にすごく助けられています。次回の記事も楽しみにしています。ちなみに、Get/Set Attributes SingleではAssembly単位の書き込みに限定されていますが、Assembly内のパラメータ単位で読み書きできたりってしないのでしょうか?

    • gomamenotes より:

      Blogをお読みいただいき、ありがとうございます!
      その言葉聞くだけでやりがいがありました。
      多分できると思いますので、少しお待ち下さい。
      次はCodesysやBeckhoffからのその機能の関数紹介しようと
      考えています。
      そのあとはEDS Fileの紹介の予定です。
      どうぞよろしくお願いしますね。

      • なすび より:

        返信いただきありがとうございます。
        パラメータ単位の読み書きができる可能性があるならすごい楽しみです!
        記事の更新、楽しみに待っています!

        • gomamenotes より:

          いいえ、こちらこそ貴重なFeedbackがありがとうございます。
          自分もまだEthernet/ipが勉強中なので、もし具体的になり実装したいとかを教えていただければ、(EIPにかぎらず)
          そのあたりも深く掘ります。
          100%できるとまだ言えないが 汗。
          もしTwitterやメールなどConnectしてくれれば、また詳しい話い色々できると思います。
          あとすいません、パラメタを書き込むのは01、02、0E、10以外のServiceの認識だとあっていますか?

          よろしくお願いします。

          • なすび より:

            gomamenotesさんがよければぜひTwitterやメールなどでお話できれば幸いです。(当方ネットワーク関係は初心者なのでgomamenotesさんに有益な話ができるかは怪しいですが・・・)
            記事主さんには私のメールアドレスはわかるのでしょうか?もしわかるようでしたらお手数ですがメールいただけますとTwitterのアカウントを共有できます。

            パラメータを書き込むのは上記以外のServiceだとは思っていますが、いかんせんその4つがメジャーなのか、調べても他のServiceはヒットしませんでした・・・

          • gomamenotes より:

            こちらのメールから声かけてみますね。
            ありがとうございます!
            自分も経験浅いなので、ぜひよろしくおねがいします。
            確かにそれ以外Supportするメーカがいますが、まだ出会ったことありません。。。