注意事項

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


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

概要

PCはEthernet経由でネットワーク上のPLCなどのデバイスに対してCIP(Common Industrial Protocol)コマンドを送信することでメモリの値を読み書きすることができます
ここではCIPメッセージ通信のCLASS3とUCMM通信のうちUCMMを使ってPLCのメモリの値を読み出します
CIPメッセージ通信にはConnected Messaging(Class3)とUnconnected Messaging(UCMM)があります。 本ページではUCMMを使用してPLC変数へアクセスする方法を解説します。


ここでは下記の構成で変数の値を読み出す手順を説明します
PCからOMRON NJ/NX PLCへCIP UCMM通信する構成図

UCMMのメッセージの流れ

UCMM通信のシーケンス図 TCP-IPで接続した後に
IPのコネクションを開始する準備をするためにListServiceコマンドを送信します(カッコ内はコマンドコード)
次にRegisterSessionコマンドを送ってハンドル(Session Handle)を取得します
このハンドルを次からのSendRRDataで使います
SendRRDataの中のServiceに変数の読出しコマンドや書込みコマンドをセットして送信します
UnRegisterSessionを送って終了します
  1. TCP接続
  2. ListService
  3. RegisterSession
  4. SendRRData
  5. 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
Protocol Version2 1
Option Flags20x0000
受信データ例
名称バイト数データ
Encapsulation Header
Command20x0065
Length24
SessionHandle40x0001016d
ハンドルが入ります
Status40x00000000
Sender Context80x0000000000000000
Options40x0000000000
Command Specific Data
Protocol 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
Response Service Data
Data Type10xc3
AddInfoLength10x00
Data20x3412

UnregisterSession

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

受信データはありません

関連ページ

よくある質問

UCMMとは何ですか?

UCMM(Unconnected Messaging)はEtherNet/IPで使用される非接続型のCIPメッセージ通信です。事前にコネクションを確立するConnected Messaging(Class3)と異なり、必要なときだけメッセージを送信してPLC変数へアクセスできます。

CIPメッセージ通信の基本手順は?

TCP接続後、ListService、RegisterSession、SendRRData、UnRegisterSessionの順にメッセージを送信します。RegisterSessionで取得したSession HandleをSendRRDataで使用します。

SendRRDataの役割は何ですか?

SendRRDataはUCMM通信で実際のCIPサービスを送信するためのコマンドです。Read Tag ServiceやWrite Tag ServiceなどのCIPコマンドを格納してPLCへ送信します。

Session Handleとは何ですか?

Session HandleはRegisterSessionの応答で取得する識別子です。以降のSendRRDataやUnRegisterSessionで使用し、通信セッションを識別します。

アプリケーション

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

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


この記事へのコメント