CIPメッセージ通信 UCMM

注意事項

ここで説明する内容とサンプルは「NJ/NXシリーズ CPUユニット内蔵 EtherNet/IPポート」(SBCD-377?)のユーザーズマニュアルとCX-Compoletで実際に通信した伝文を解析した内容を元に作成しています
EthernetIPのユーザーズマニュアルに記載のない内容も含まれており伝文の一部が不明な箇所があるため、ここでの説明はCIPメッセージ通信のプロトコルのイメージを掴む程度の内容になります
ここでダウンロードできるアプリは変数の読出し書込みは出来ますがテスト程度で使用してください

正式にCIPメッセージ通信をするときはCX-Compoletを使用してください
OMRON CX-Compolet
CX-Compoletの解説ページ

概略

PCはEthernet経由でネットワーク上のPLCなどのデバイスに対してCIP(Common Industrial Protocol)コマンドを送信することでメモリの値を読み書きすることができます
ここではCIPメッセージ通信のCLASS3とUCMM通信のうちUCMMを使ってPLCのメモリの値を読み出します
ちなみにCLASS3とUCMMはどちらもコネクション型のTCP/IPでの接続の上で、CIPコネクション型がCLASS3でCIP非コネクション型がUCMMというように区別されます

ここでは下記の構成で変数の値を読み出す手順を説明します
Com


関連ページ

UCMMのメッセージの流れ

sequence TCP-IPで接続した後に
IPのコネクションを開始する準備をするためにListServiceコマンドを送信します(カッコ内はコマンドコード)
次にResisterSessionコマンドを送ってハンドル(Session Handle)を取得します
このハンドルを次からのSendRRDataで使います
SendRRDataの中のServiceに変数の読出しコマンドや書込みコマンドをセットして送信します
UnRegisterSessionを送って終了します

メッセージのフォーマット

基本のフォーマット
名称 バイト数
Encapsulation Header
Command 2
Length 2
SessionHandle 4
Status 4
Sender 8
Options 4
Command Specific Data
コマンド 可変長
Encapsulation HeaderのCommandにListservice,RegisterSession,SendRRData,UnRegisterSessionをセットして送信します

NOTE
データはリトルエンディアンでセットします

各コマンドの送受信データ

ListService
送信データ
名称 バイト数 データ
Encapsulation Header
Command 2 0x0004 (ListService)
Length 2 0
SessionHandle 4 0x00000000
Status 4 0x00000000
Sender Context 8 0x0000000000000000
Options 4 0x00000000
Command Specific Dataは不要です

受信データ例
名称 バイト数 データ
Encapsulation Header
Command 2 0x0004
Length 2 26
SessionHandle 4 0x00000000
Status 4 0x00000000
Sender Context 8 0x0000000000000000
Options 4 0x00000000
Command Specific Data
Item Count 2 1
Item1 Type ID 2 0x0100 = List Service Response
length 2 20
Capability Flags 2 0x0120
5bit=Support CIP Encapsulation
8bit=Supports CIP Class 0 or 1
Name of Service 16 "Communications",0x0000

RegisterSession
送信データ
名称 バイト数 データ
Encapsulation Header
Command 2 0x0065 (RegisterSession)
Length 2 4
SessionHandle 4 0x00000000
Status 4 0x00000000
Sender Context 8 0x0000000000000000
Options 4 0x0000000000
Command Specific Data
Protcol Version 2 1
Option Flags 2 0x0000

受信データ例
名称 バイト数 データ
Encapsulation Header
Command 2 0x0065
Length 2 4
SessionHandle 4 0x0001016d
ハンドルが入ります
Status 4 0x00000000
Sender Context 8 0x0000000000000000
Options 4 0x0000000000
Command Specific Data
Protcol Version 2 1
Option Flags 2 0x0000

SendRRData
送信データ 変数testIntの値を読み出す例
名称 バイト数 データ
Encapsulation Header
Command 2 0x006f (SendRRData)
Length 2 30
SessionHandle 4 0x0001016d
Status 4 0x00000000
Sender Context 8 0x0100000000000000
Options 4 0x0000000000
Command Specific Data
Interface Handle 4 0x00000000
Timeout 2 0x0000
Item Count 2 2
Item1 Type ID 2 0x0000 (Null Address Item)
length 2 0
Item2 Type ID 2 0x00b2 (Unconnected Data Item)
length 2 14
Common Industrial Protocol
Service Code 1 0x4c
Request Path Length 1 5 (word)
Request Path 10 0x9107+"testInt"+0x00
(奇数byteのときは0パディング)
CIP Class Generic
Request Service Data 2 0x0100

受信データ例
名称 バイト数 データ
Encapsulation Header
Command 2 0x006f (SendRRData)
Length 2 24
SessionHandle 4 0x0001016d
Status 4 0x00000000
Sender Context 8 0x0100000000000000
Options 4 0x0000000000
Command Specific Data
Interface Handle 4 0x00000000
Timeout 2 0
Item Count 2 2
Item1 Type ID 2 0x0000 (Null Address Item)
length 2 0
Item2 Type ID 2 0x00b2 (Unconnected Data Item)
length 2 8
Common Industrial Protocol
Service 1 0xcc (最上位ビットON + 0x4c)
(Fixed) 1 0x00
Status General Status 1 0x00
Additional Status 1 0x00
CIP Class Generic
Responce Service Data
Data Type 1 0xc3
AddInfoLength 1 0x00
Data 2 0x3412

UnregisterSession
送信データ
名称 バイト数 データ
Encapsulation Header
Command 2 0x0066 (UnregisterSession)
Length 2 0
SessionHandle 4 0x0001016d
切断するハンドルをセットします
Status 4 0x00000000
Sender Context 8 0x0000000000000000
Options 4 0x0000000000
Command Specific Dataは不要です

受信データはありません


アプリケーション

comcom
comcom EtherntのSocket通信を使ってメッセージを送信するアプリケーションです
CipMes
CipMes CIPコマンドの作成支援と対応機器にメッセージを送信するアプリケーションです