上位リンクのコマンドとレスポンスの書式(RD・RDS・WR・WRS)
キーエンス KV シリーズの上位リンクで、コマンドとレスポンスをどう書くのかを実例で読み解きます。区切りの空白、デバイスの書き方、データ形式 .U/.S/.D/.L/.H の桁数、タイマ・カウンタの読出し、32 ビット値の扱いを扱います。
更新
上位リンクのコマンドは、コマンド名、デバイス、個数、データを空白で区切って並べた 1 行の文字列です。この記事では、マニュアルに載っている「DM200 から 3 ワードを符号あり 16 ビットで読み書きする」例を使って、書式を順に見ていきます。
書式の基本ルール
- 各項目は空白 1 文字(0x20)で区切る
- デバイス種別と番号は続けて書く(
DM200) - データ形式は番号のすぐ後ろに付ける(
DM200.S) - リレーの
Rは省略できる(RDS 100 4はRDS R100 4と同じ) - デバイス番号・個数・書込みデータは、先頭の 0 を省略できる。正の書込み値の
+も省略できる
連続読出し RDS
DM200〜DM202 の 3 ワードを、符号あり 16 ビットで読み出すコマンドです。
RDS コマンド 連続読出しDM デバイス種別 200 番号 .S データ形式 符号あり 16 ビット3 個数 CR 終端 RD は 1 点、RDS は個数を指定して連続した点を読み出します。レスポンスには、値が空白区切りで並びます。
+15025 DM200 -25400 DM201 +00000 DM202 CR LF 終端 データ形式と桁数
データ形式を付けると、値をどう読み書きするかを指定できます。レスポンスの桁数は形式ごとに決まっています。
| 形式 | 意味 | レスポンスの桁数 | 範囲 |
|---|---|---|---|
| なし | ビット | 1 | 0 / 1 |
.U | 10 進 16 ビット符号なし | 5(0 埋め) | 00000〜65535 |
.S | 10 進 16 ビット符号あり | 6(符号付き) | -32768〜+32767 |
.D | 10 進 32 ビット符号なし | 10 | 0000000000〜4294967295 |
.L | 10 進 32 ビット符号あり | 11(符号付き) | -2147483648〜+2147483647 |
.H | 16 進 16 ビット | 4 | 0000〜FFFF |
.S と .L では 0 も +00000 のように符号付きで返ります。
形式を省略したときの既定はデバイスごとに決まっています。
- ビット:R、B、MR、LR、CR、VB
.U:DM、EM、FM、ZF、W、TM、Z、CM、VM.D:T、TC、TS、C、CC、CS、CTH、CTC、AT
ビットデバイス(R、B、MR、LR、CR、VB)に .U などの形式を付けると、16 ビットや 32 ビットをまとめて読み書きできます。チャンネルの先頭以外(R002 など)から指定すると、次のチャンネルにまたがって読みます。
連続書込み WRS
書込みでは、個数の後ろにデータを空白区切りで並べます。
WRS コマンド 連続書込みDM200.S 先頭デバイス 3 個数 +15025 データ 1 -05400 データ 2 200 データ 3 CR 終端 書込みが成功すると OK が返ります。
OK 正常終了 CR LF 終端 1 点だけ書くときは WR DM200.S -100 のように個数を付けずに書きます。T と C に WR で書くと現在値に、WS/WSS で書くと設定値に書き込まれます。
タイマ・カウンタは 3 つの値を返す
T、C、CTC、CTH を読むと、1 点ごとに「接点、現在値、設定値」の 3 つの値が返ります。接点は 0/1、現在値と設定値は指定した形式(既定は .D)です。
RD T0
0,0000000010,0000000010マニュアルの図ではカンマと空白の表記が混在していますが、KV-7500 の実機ではカンマ区切りで返ってきました。現在値だけ、設定値だけを読みたいときは、TC/TS(カウンタは CC/CS)を指定します。
32 ビットの値は 2 ワードを使う
.D と .L は 2 ワードを 1 つの値として扱います。指定した番号が下位ワード、次の番号が上位ワードです。たとえば RD DM100.L は DM100(下位)と DM101(上位)を読みます。
リレーの番号は「チャンネル+2 桁のビット番号」
R、MR、LR、CR の番号は、10 進のチャンネル番号の後ろに 2 桁のビット番号(00〜15)を付けて書きます。
R100:チャンネル 1 のビット 00MR1015:チャンネル 10 のビット 15R199915:チャンネル 1999 のビット 15
ビット番号は 15 までなので、MR1016 という番号はありません。
一方、B、VB、W の番号は 16 進で書きます(B7FF、W1A0 など)。そのほかのデバイスは 10 進です。
KcpX ではどう書くか
KcpX では、デバイス種別を Prefix、番号を文字列で指定します。データ形式は型から決まり、short は .S、ushort は .U、int は .L、uint は .D になります。
// RDS DM200.S 3 と同じ
short[] values = kcpx.BatchRead<short>(Prefix.DM, "200", 3);
// WRS DM200.S 3 +15025 -05400 200 と同じ
kcpx.BatchWrite<short>(Prefix.DM, "200", [15025, -5400, 200]);
// T0 の接点・現在値・設定値
TimerCounterValue t0 = kcpx.ReadTimerCounter(Prefix.T, "0");次の記事では、エラーのときに返るレスポンスを見ていきます。
出典
- キーエンス KV-EP21V/KV-8000(A)/KV-7500/KV-5500/KV-NC1EP ユーザーズマニュアル EtherNet/IP 機能 8章 p.8-17〜8-26, 8-37