リクエストパスとは

CIPメッセージ通信では、読み書きしたい対象を指定するために Request Path(リクエストパス)を使用します。

リクエストパスは複数のセグメントを連結して構成され、PLC変数、構造体メンバ、配列要素、CIPオブジェクトなどを指定できます。

例えば変数 testInt を指定する場合や、構造体 testStruct.int16、配列 aryInt[1] を指定する場合でも、最終的にはリクエストパスとしてバイト列に変換して送信します。

Request Pathの基本構造

Request Pathは「どのオブジェクトに対して」「どのメンバを対象に」アクセスするかを表現するための情報です。

各セグメントはType、Format、Dataから構成され、対象に応じて複数のセグメントを連結して使用します。

変数名を指定するときのリクエストパスの書き方

リクエストパスは複数のセグメントを繋げて書きます

Request Path
Length
Segment1 Segment2Segment3 ...
TypeFormatData TypeFormatData TypeFormatData
76543210 76543210 76543210
セグメントの種類
Type説明
765
000Port Segment
001Logical Segment
010Network Segment
011Symbolic Segment
100Data Segment
101Data Type
110Data Type
111Reserved
セグメントのFormatはTypeによって異なります

Data Segmentとは

Data SegmentはPLCの変数名を指定するためのセグメントです。NJ/NXシリーズでは一般的に「ANSI Extended Symbol Segment (0x91)」を使用します。

変数名の長さと変数名本体を指定することで、PLC内のグローバル変数や構造体メンバへアクセスできます。

ここではData Segment(変数へのアクセス)とLogical Segment(CIPオブジェクトへのアクセス)を使って変数へアクセスします

Formatの種類は以下の種類のうち"ANSI Extended Symbol Segment"を使います
Data Segmentのフォーマット
TypeSub TypeHEX表記説明
76543210
100000000x80Simple Data Segment
100010x91ANSI Extended Symbol Segment

Logical Segmentとは

Logical SegmentはCIPオブジェクトを指定するためのセグメントです。Class ID、Instance ID、Attribute IDなどを指定してCIPオブジェクトへアクセスします。

IdentityオブジェクトやTCP/IP Interfaceオブジェクトなどの標準CIPオブジェクトへアクセスする場合に使用します。

Formatの種類は以下の種類のうち"ANSI Extended Symbol Segment"を使います
Data Logical Segmentのフォーマット
TypeLogical
Type
Logical
Format
HEX表記説明
76543210
001000000x20Class ID
001000x24Instance ID
010000x28Member ID
011000x2CConnection Point
100000x30Attribute ID
Formatの種類は以下の種類のうち"ANSI Extended Symbol Segment"を使います
Logical Formatの内容 (後に続くデータのビット数)
Logical Format説明
10
008bit logical address
0116bit logical address
1032bit logical address

変数の指定の仕方

単純な変数の指定

対象の変数名testInt

単純な変数の場合はANSI Extended Symbol Segmentを使用して 変数名をそのまま指定できます。

Data Segmentを使って変数名のバイト数と名称を指定します
Request Path
Length(word)
Segment
TypeSub TypeData
Data SegmentANSI Extended Symbol SegmentVariable LengthVariable Name(pad)
100100 01
0x050x910x07"testInt"0x00

構造体のメンバの指定

対象の変数名testStruct.int16

構造体のメンバは、セグメントを分割して指定する方法と、ドット記法で1つの文字列として指定する方法があります。

Data Segmentを使ってSegment1に構造体とSegment2にメンバをそれぞれバイト数と名称を指定します
Request
Path
Length
(word)
Segment1Segment2
TypeSub TypeData TypeSub TypeData
Data SegmentANSI Extended Symbol SegmentVariable Length Variable NameData SegmentANSI Extended Symbol SegmentVariable Length Variable Name(pad)
10010 001 10010 001
0x0a0x910x0a"testStruct"0x910x05"int16"0x00
または
Request
Path
Length
(word)
Segment1
TypeSub TypeData
Data SegmentANSI Extended Symbol SegmentVariable LengthVariable Name
1001 0001
0x090x910x10"testStruct.int16"

配列の要素の指定

対象の変数名aryInt[1]

配列要素はMember IDセグメントを使用する方法と、 添字を含めた文字列として指定する方法があります。

Request
Path
Length
(word)
Segment1Segment2
TypeSub TypeDataType Logical TypeLogical FormatData
Data SegmentANSI Extended Symbol SegmentVariable LengthVariable Name Logical SegmentMember ID8bit addressIndex
100100 010 010100 0
0x0a0x910x06"aryInt"0x280x01
または
Request
Path
Length
(word)
Segment1
TypeSub TypeData
Data SegmentANSI Extended Symbol Segment Variable LengthVariable Name
10010 001pad
0x060x910x09"aryInt[1]"0x00

この記事へのコメント