1. TOP
  2. OMRON
  3. 上位アプリケーション
  4. 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
Command2
Length2
SessionHandle4
Status4
Sender8
Options4
Command Specific Data
コマンド可変長
Encapsulation HeaderのCommandにListservice,RegisterSession,SendRRData,UnRegisterSessionをセットして送信します

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

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

ListService

送信データ

名称バイト数データ
Encapsulation Header
Command20x0004 (ListService)
Length20
SessionHandle40x00000000
Status40x00000000
Sender Context80x0000000000000000
Options40x00000000
Command Specific Dataは不要です

受信データ例

名称バイト数データ
Encapsulation Header
Command20x0004
Length226
SessionHandle40x00000000
Status40x00000000
Sender Context80x0000000000000000
Options40x00000000
Command Specific Data
Item Count21
Item1Type ID20x0100 = List Service Response
length220
Capability Flags20x0120
5bit=Support CIP Encapsulation
8bit=Supports CIP Class 0 or 1
Name of Service16"Communications",0x0000

RegisterSession

送信データ

名称バイト数データ
Encapsulation Header
Command20x0065 (RegisterSession)
Length24
SessionHandle40x00000000
Status40x00000000
Sender Context80x0000000000000000
Options40x0000000000
Command Specific Data
Protcol Version2 1
Option Flags20x0000

受信データ例

名称バイト数データ
Encapsulation Header
Command20x0065
Length24
SessionHandle40x0001016d
ハンドルが入ります
Status40x00000000
Sender Context80x0000000000000000
Options40x0000000000
Command Specific Data
Protcol Version21
Option Flags20x0000

SendRRData

送信データ

名称バイト数データ
Encapsulation Header
Command20x006f (SendRRData)
Length230
SessionHandle40x0001016d
Status40x00000000
Sender Context80x0100000000000000
Options40x0000000000
Command Specific Data
Interface Handle40x00000000
Timeout20x0000
Item Count22
Item1Type ID20x0000 (Null Address Item)
length20
Item2Type ID20x00b2 (Unconnected Data Item)
length214
Common Industrial Protocol
Service Code10x4c
Request Path Length15 (word)
Request Path100x9107+"testInt"+0x00
(奇数byteのときは0パディング)
CIP Class Generic
Request Service Data20x0100

受信データ例

名称バイト数データ
Encapsulation Header
Command20x006f (SendRRData)
Length224
SessionHandle40x0001016d
Status40x00000000
Sender Context80x0100000000000000
Options40x0000000000
Command Specific Data
Interface Handle40x00000000
Timeout20
Item Count22
Item1Type ID2 0x0000 (Null Address Item)
length20
Item2 Type ID20x00b2 (Unconnected Data Item)
length28
Common Industrial Protocol
Service10xcc (最上位ビットON + 0x4c)
(Fixed)10x00
StatusGeneral Status10x00
Additional Status10x00
CIP Class Generic
Responce Service Data
Data Type10xc3
AddInfoLength10x00
Data20x3412

UnregisterSession

送信データ

名称バイト数データ
Encapsulation Header
Command20x0066 (UnregisterSession)
Length20
SessionHandle40x0001016d
切断するハンドルをセットします
Status40x00000000
Sender Context80x0000000000000000
Options40x0000000000
ommand Specific Dataは不要です<br>

受信データはありません

アプリケーション

comcom
comcom EtherntのSocket通信を使ってメッセージを送信するアプリケーションです

CipMes
cipmes EtherntのSocket通信を使ってメッセージを送信するアプリケーションです

この記事へのコメント