CIPメッセージ通信では、読み書きしたい対象を指定するために Request Path(リクエストパス)を使用します。
リクエストパスは複数のセグメントを連結して構成され、PLC変数、構造体メンバ、配列要素、CIPオブジェクトなどを指定できます。
例えば変数 testInt を指定する場合や、構造体 testStruct.int16、配列 aryInt[1] を指定する場合でも、最終的にはリクエストパスとしてバイト列に変換して送信します。
Request Pathは「どのオブジェクトに対して」「どのメンバを対象に」アクセスするかを表現するための情報です。
各セグメントはType、Format、Dataから構成され、対象に応じて複数のセグメントを連結して使用します。
リクエストパスは複数のセグメントを繋げて書きます
| Request Path Length | Segment1 | Segment2 | Segment3 | ... | |||||||||||||||||||||||||
| Type | Format | Data | Type | Format | Data | Type | Format | Data | |||||||||||||||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||||
| Type | 説明 | ||
|---|---|---|---|
| 7 | 6 | 5 | |
| 0 | 0 | 0 | Port Segment |
| 0 | 0 | 1 | Logical Segment |
| 0 | 1 | 0 | Network Segment |
| 0 | 1 | 1 | Symbolic Segment |
| 1 | 0 | 0 | Data Segment |
| 1 | 0 | 1 | Data Type |
| 1 | 1 | 0 | Data Type |
| 1 | 1 | 1 | Reserved |
Data SegmentはPLCの変数名を指定するためのセグメントです。NJ/NXシリーズでは一般的に「ANSI Extended Symbol Segment (0x91)」を使用します。
変数名の長さと変数名本体を指定することで、PLC内のグローバル変数や構造体メンバへアクセスできます。
ここではData Segment(変数へのアクセス)とLogical Segment(CIPオブジェクトへのアクセス)を使って変数へアクセスします
| Type | Sub Type | HEX表記 | 説明 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x80 | Simple Data Segment |
| 1 | 0 | 0 | 0 | 1 | 0x91 | ANSI Extended Symbol Segment | |||
Logical SegmentはCIPオブジェクトを指定するためのセグメントです。Class ID、Instance ID、Attribute IDなどを指定してCIPオブジェクトへアクセスします。
IdentityオブジェクトやTCP/IP Interfaceオブジェクトなどの標準CIPオブジェクトへアクセスする場合に使用します。
| Type | Logical Type | Logical Format | HEX表記 | 説明 | |||||
|---|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0x20 | Class ID |
| 0 | 0 | 1 | 0 | 0 | 0x24 | Instance ID | |||
| 0 | 1 | 0 | 0 | 0 | 0x28 | Member ID | |||
| 0 | 1 | 1 | 0 | 0 | 0x2C | Connection Point | |||
| 1 | 0 | 0 | 0 | 0 | 0x30 | Attribute ID | |||
| Logical Format | 説明 | |
|---|---|---|
| 1 | 0 | |
| 0 | 0 | 8bit logical address |
| 0 | 1 | 16bit logical address |
| 1 | 0 | 32bit logical address |
| 対象の変数名 | testInt |
|---|
単純な変数の場合はANSI Extended Symbol Segmentを使用して 変数名をそのまま指定できます。
| Request Path Length(word) | Segment | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | Sub Type | Data | |||||||||
| Data Segment | ANSI Extended Symbol Segment | Variable Length | Variable Name | (pad) | |||||||
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | ||||
| 0x05 | 0x91 | 0x07 | "testInt" | 0x00 | |||||||
| 対象の変数名 | testStruct.int16 |
|---|
構造体のメンバは、セグメントを分割して指定する方法と、ドット記法で1つの文字列として指定する方法があります。
| Request Path Length (word) | Segment1 | Segment2 | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | Sub Type | Data | Type | Sub Type | Data | ||||||||||||||||
| Data Segment | ANSI Extended Symbol Segment | Variable Length | Variable Name | Data Segment | ANSI Extended Symbol Segment | Variable Length | Variable Name | (pad) | |||||||||||||
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | ||||||
| 0x0a | 0x91 | 0x0a | "testStruct" | 0x91 | 0x05 | "int16" | 0x00 | ||||||||||||||
| Request Path Length (word) | Segment1 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Type | Sub Type | Data | ||||||||
| Data Segment | ANSI Extended Symbol Segment | Variable Length | Variable Name | |||||||
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | |||
| 0x09 | 0x91 | 0x10 | "testStruct.int16" | |||||||
| 対象の変数名 | aryInt[1] |
|---|
配列要素はMember IDセグメントを使用する方法と、 添字を含めた文字列として指定する方法があります。
| Request Path Length (word) | Segment1 | Segment2 | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | Sub Type | Data | Type | Logical Type | Logical Format | Data | |||||||||||||||
| Data Segment | ANSI Extended Symbol Segment | Variable Length | Variable Name | Logical Segment | Member ID | 8bit address | Index | ||||||||||||||
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | ||||||
| 0x0a | 0x91 | 0x06 | "aryInt" | 0x28 | 0x01 | ||||||||||||||||
| Request Path Length (word) | Segment1 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | Sub Type | Data | |||||||||
| Data Segment | ANSI Extended Symbol Segment | Variable Length | Variable Name | ||||||||
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | pad | |||
| 0x06 | 0x91 | 0x09 | "aryInt[1]" | 0x00 | |||||||