OVDA?
OVDAは1995年立ち上げされたCommunityでメンバーは世界中のFAメーカ(Omron、Rockwellなど)でありOPEN・双方向的な工業Protocolを開発・推奨しています。
OVDAはCIP(Common Industrial Protocol)の標準や派生されたEthernet/IP ・Device NET・Control NETなどのCore技術持っています。
Basic
Ethernet/IPはOSIモデルの元に設定されたもので、物理層は同じくRJ45のケーブルを使用し、Data Link層はMac アドレス、そしてLayer3はIP、Layer4はTCP/UDP。違うのはLayer5以上はCIP標準になっています。ですが、結局これはソフトウェアの話で、Dataをカプセル化し下の層に渡しておくのイメージになります。
UDP Default Port:44818
TCP Default Port:2222
以下の図だともう少しわかりやすくいただければと思います。Data Linkと物理層は同じなで、Layer3が使えることによって、IGMP・ルーティングなどの機能も実現できます。そしてLayer4がTCPやUDPも応用でき、つまりCIPだけではなく、IT・OPC・WEBのProtocolと共存できます。
さらに詳しく見ていきますと、General I/O・SensorなどのデバイスのDataがCIP Application Layerに載せられ、その使いみちによりExplicit MessageやIO Messagesに分けて、TCP・UDPどっちの接続で間とやり取りします。
CPF=Common Packet Formatです。
送受信方式
Ethernet/IP はCaseによってTCP/IP・UDP/IP通信に分けてています。
TCP/IP
- Point to Pointのデータやり取り
- デバイスのConfiguration設定
- デバイスの診断
- CIP Explicit Message
- Server/Client
UDP/IP
- IP-Producer/Consumer
- Multicast
- Timeoutで通信エラー検知
- TimeStampで制御
- IO Data通信用
Encapsulation
先から何回もEncapsulationの言葉が出て来ますが、そのEncapsulationはCIP Explicitのときに使われてたFormatだと思ってください。
まずEncapsulation Packageには標準のTCP/IP HeaderとEncapsulationデータから組み合わせています。
TCP/IP Header入ってるのは送信元・送信先のIPやMac、制御データが入って標準のFormatです。ここでは詳しく説明しません。
そしてEncapsulationには24BytesのHeaderとコマンドによって変わるの可変データと組み合わせています。
そしてEncapsulation HeaderにコマンドやStatusなどのCIPに決められたデータが入っています。コマンドの種類によって値が変わります。同じくEncapsulationにもコマンドの種類によって可変データがあると先にも書いていますね。
Encapsulation Header
次はEncapsulationのHeader部分について説明します。
Command
機能定義です。例えば、ListService(UDP/TCP,0x63)・RegisiterSession・UnRegisiterSession(TCP,0x65,0x66)。
Length
Dataの長さを定義します。(Byte単位)もしDataがない場合は0にします。
Session Handle
その部分はTargetから生成されOriginatorに返信するときに返す必要があります。(一部のコマンド、例えばNOPなどはいらないものもあります。)
Status
その部分はReceiverがコマンド実行できるかどうかを示します。もし実行成功なら0になります。
SenderContext
Sender側はそのFieldでCommandによって値を入れる必要があります。
Options
それもコマンドによって割り当てることができます。
Command Specific Data Field
Receiverに送信するData構造の塊です。コマンドによってデータの中身が変わりますが、一般的には固定な構造やCommon Packet formatによって構成されたデータを入れるか、ですね。
Encapsulation Data
今度はEncapsulationData部分について説明します。
おおまけに3つの部分にわかれ、Interface Handle・Timeout・Encapsulated Packetsです。
Interface Handle
リクエスト処理するCommunication interfaceを定義します。Encapsulating CIP Packetの場合は0にします。
Timeout
1-65535で単位は秒です。0にするとTimeout検知しません。
Encapsulated Packets(CPF)
CPF=Common Packet FormatでEncapsulation protocolの中に標準的なFormatをデータやり取りします。CPFで以下の要素含まれています。Item CountとそのItem Count分にある構造データです。
更に、各Itemにも決められたFormatがあります。
TypeID:EncapsulatedのItem IDです。
Length:Data領域の長さ
Data:そのデータ。(もしLength>0)
Explicit Message
EIPは2種類のMessageがあり、ExplicitとImplicitです。
Explicitはリクエストのアドレスとコマンドはちゃんとあり、最初にの通信確立用、P2P(Point to Point)などのためによく使われています。
Implicit Message
Implicit MessageはExplicitと違ってRequestなどは特になく、Connect IDで通信確立します。あとはEncapsulation HeaderなしでConsumerとProducerのコンセプトで通信します。IODataやP2PやMulticastなど様々な場合で使われています。
Client And Server Connection Endpoints
EIPを使うことによってClientやServerの言葉が耳に入りますが、ここで簡単に説明しますとClientはリクエストを送信し返信待ち、Serverはリクエストを待ちで、そしてそのリクエストによって返信するのイメージです。
Producer/Originator・Consumer/Target
次によく聞くのはProducer/Originator・Consumer/Targetの4つの言葉ですね。
簡単にいいますと、Producer/Originatorは生産者(Sender)そしてConsumer/Targetは消費者(Receiver)。Profinetにも似てる言葉ありますね。
Scanner/Adapter
いまの段階でScannerはMasterでAdapterはAdapterだと思ってください。
本来ならまだClassのわけなどの細かいの説明がありますが、私もここまで書いてちょっと疲れました…
最後に
はーい、お疲れ様です。
以下のLinkでCodesysやBeckhoffでEthernet/IP を立ち上げる方法書いていますので、興味ある方には実際やってみてくださいね。
http://soup01.com/ja/category/work_jp/protocol/ethernet-ip/
もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!
Twitterのご相談:@3threes2
メールのご相談:soup01threes*gmail.com (*を@に)