TITLE:Dynamixel通信プロトコルV2マニュアル Dynamixel X及びPROシリーズ共通の通信プロトコルです。また、Dynamixel MXシリーズのファームウェアをV2対応版に書き換えた際にも適用されます。 **基本的な情報 [#v622f8df] ***ID [#i70fa31a] Dynamixelでは複数のデバイスを同じネットワークに接続して運用する事を前提としているため、各々のデバイスを区別するためにユニークなID番号を用いる事としています。~ また、ホストは任意のIDを持ったデバイスを指定して命令し、指定されたIDに一致したデバイスがそれに応答するといったマスタースレーブ方式を採用しています。 #ref(DXLSHARE/RS485_X_DifferentID.png) なお、複数のデバイスに同じID値が付けられている事は前提としていないため、1つのネットワークに同一IDを持つデバイスが複数存在してはなりません。 ***コントロールテーブル [#xbe6b522] デバイスの情報はメモリマップでとして提供されており、それをコントロールテーブルと称します。~ 複数の情報はコントロールテーブル上の異なるアドレスに割り当てられており、必要に応じてホストから任意のIDを持ったデバイスの任意のアドレスへアクセスします。 ***パケット通信 [#y962006c] ホストとデバイス間は一般的なシリアル通信を行うハードウェアで接続され、パケット単位で処理される共通の通信プロトコルを用いて相互に情報をやりとりします。~ ここではホストからデバイスへ送信されるパケットを「インストラクションパケット」、デバイスからホストへ送信されるパケットを「ステータスパケット」と称します。 #ref(DxProt1.png) ホストから送信するインストラクションパケットの主な機能はIDの指定とコントロールテーブルの任意のアドレスへのデータの読み書きとなります。そのパケットに対して応答すべきデバイスから返信されるステータスパケットには、ホストから読み出し要求されたコントロールテーブル内のデータや、書き込み要求に対する整合性の結果などが含まれます。 **パケット詳細 [#j4dde86d] 以後16bit幅のパラメータはリトルエンディアン(データの下位バイトから順に格納)で指定するものとし、「0x」が付与された英数字は16進数、そうでないものは10進数とみなします。~ また、デバイスのコントロールテーブル上のStatus Return Levelによってパケットの有無が異なります。 ***インストラクションパケット [#f7c5cc11] インストラクションパケットはホストからデバイスへ命令するためのパケットです。~ パケット構造は以下の通りで、囲み1つが1byteを意味します。例外については[[こちら>#ue49b221]]を参照します。 #ref(inst.png,75%) -Header,Reserved~ 先頭4バイトは0xFF,0xFF,0xFD,0x00の固定値。 -ID~ 送信先のデバイスのID。0~252(0x00~0xFC)の範囲及び254(0xFE)。~ 254のIDは1回のインストラクションパケットで複数のデバイスに対して命令を発効する際に使用。 -Length~ Instruction以後の全てのバイト数(16bit幅)。 -Instruction~ 以下のいずれかのインストラクション。~ |CENTER:|CENTER:|CENTER:|CENTER|c |Instruction|Function|Value|Number of Parameter|h |[[PING>#na918de9]]|デバイスの死活確認 |0x01|0| |[[READ>#g72689f1]]|コントロールテーブルからの読み込み |0x02|4| |[[WRITE>#zfeca76b]]|コントロールテーブルへの書き込み(即時反映) |0x03|3~| |[[REG WRITE>#aa3a862b]]|コントロールテーブルへの書き込み(保留) |0x04|3~| |[[ACTION>#h4c1d8d8]]|REG WRITEで保留された値を反映 |0x05|0| |[[FACTORY RESET>#j50c0104]]|デバイスのコントロールテーブルの値を出荷時デフォルト化 |0x06|1| |[[REBOOT>#t6f3bb05]]|デバイスの再起動 |0x08|0| |[[SYNC READ>#s52de3b7]]|複数デバイスの同一コントロールテーブルから読み込み |0x82|5~| |[[SYNC WRITE>#pf4086e3]]|複数デバイスの同一コントロールテーブルへ書き込み |0x83|6~| |[[BULK READ>#d89abc16]]|複数デバイスの異なるコントロールテーブルから読み込み |0x92|6~| |[[BULK WRITE>#j5add499]]|複数デバイスの異なるコントロールテーブルへ書き込み |0x93|6~| -Parameter~ Instructionで要求される追加情報(可変長)。~ -Checksum~ HeaderからParameterまでのチェックサム値(CRC-16-IBM)。 (X^16+X^15+X^2+1) Polynomial 0x8005 ***ステータスパケット [#a1058504] ステータスパケットはホストから送信されるインストラクションパケットをデバイスが受信した後、その応答としてデバイスからホストへ返信されるパケットです。~ パケット構造は以下の通りで、囲み1つが1byteを意味します。例外については[[こちら>#ue49b221]]を参照します。 #ref(stat.png,75%) -Header,Reserved~ 先頭4バイトは0xFF,0xFF,0xFD,0x00の固定値。 -ID~ デバイスのID。~ -Length~ Instruction以後の全てのバイト数(16bit幅)。 -Instruction~ Statusを意味する0x55の固定値。 -Error~ パケット処理中に検出されたデバイスの動作状況等。 |CENTER:|CENTER:|LEFT:|LEFT:|c |Bit|Name| Description |<|h |7|Alert| - |<| |6~0|Error No.|1:Result Fail|パケット処理失敗| |~|~|2:Instruction Error|未定義のインストラクションセット, RegWriteなしでAction| |~|~|3:CRC Error|CRC不一致| |~|~|4:Data Range Error|データの最大・最小値外| |~|~|5:Data Length Error|データ幅の不一致| |~|~|6:Data Limit Error|データのLimit値外| |~|~|7:Accrss Error|読出専用・書込専用・ロック中のアドレスへのアクセス| -Parameter~ インストラクションパケットに従った追加情報(可変長)。~ -Checksum~ HeaderからParameterまでのチェックサム値(CRC-16-IBM)。~ (X^16+X^15+X^2+1) Polynomial 0x8005 ***例外 [#ue49b221] Header部と一致するデータ列がInstruction~Parameter間に現れる場合は、Header部と一致する全てのデータ列の末尾に&color(#000,lightgreen){0xFD};を1byte付与するものとします。~ 例えば例外処理前のParameterが「''0x01 0x02 &color(#000,wheat){0xFF 0xFF 0xFD}; 0x03''」の場合、Header部と一致するデータ列を含んでいますので、「''0x01 0x02 &color(#000,wheat){0xFF 0xFF 0xFD}; &color(#000,lightgreen){0xFD}; 0x03''」の様に追加します。データ長が増えるため、実際のパケットも増えた分だけLengthを増やし、最終的に追加したデータを含むパケットのChecksumを計算します。 例1)~ >INST:ID=1のアドレス634に10バイトのデータ(0xFF,0xFF,0xFD,0xFF,0xFF,0xFD,0xFF,0xFF,0xFD,0xFF)を書き込む。~ &color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x12 0x00}; ...'''Length'''~ &color(#000,peru){0x03}; ...'''Instruction'''~ &color(#000,peachpuff){0x7A 0x02}; &color(#000,peachpuff){0xFF 0xFF 0xFD 0xFD 0xFF 0xFF 0xFD 0xFD 0xFF 0xFF 0xFD 0xFD 0xFF}; ...'''Parameter'''~ &color(#000,cornflowerblue){0xA3 0xE2}; ...'''Checksum'''~ ~ STAT:正常応答~ &color(#000,silver){0xFF 0xFF 0xFD 0x00}; &color(#000,aquamarine){0x01}; &color(#000,lemonchiffon){0x04 0x00}; &color(#000,peru){0x55}; 0x00 &color(#000,cornflowerblue){0xA1 0x0C}; < 例2)~ >INST:ID=1のアドレス634から例1で書き込んだ10バイトのデータを読み出す。~ &color(#000,silver){0xFF 0xFF 0xFD 0x00}; &color(#000,aquamarine){0x01}; &color(#000,lemonchiffon){0x07 0x00}; &color(#000,peru){0x02}; &color(#000,peachpuff){0x7A 0x02}; &color(#000,peachpuff){0x0A 0x00}; &color(#000,cornflowerblue){0x1E 0xA9};~ ~ STAT:正常応答~ &color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x11 0x00}; ...'''Length'''~ &color(#000,peru){0x55}; ...'''Instruction'''~ 0x00 ...'''Error'''~ &color(#000,peachpuff){0xFF 0xFF 0xFD 0xFD 0xFF 0xFF 0xFD 0xFD 0xFF 0xFF 0xFD 0xFD 0xFF}; ...'''Parameter'''~ &color(#000,cornflowerblue){0x18 0x99}; ...'''Checksum'''~ < **インストラクション詳細 [#x0eafb6e] ***PING [#na918de9] 特定のIDを持ったDynamixelの存在を確認します。ステータスパケットのパラメータには応答したDynamixelのModel No.とVersion of Firmwareが含まれます。~ IDに254を指定してPINGインストラクションを送信すると、ネットワークに存在する全てのDynamixelが順次ステータスパケットを返します。 -インストラクションパケットのParameter~ なし -ステータスパケットのParameter |CENTER:|LEFT:|c |Param byte No.|=Description|h |1|Model No.| |2|~| |3|Version of Firmware| 例)~ INST:ID=1にPINGを発行。 >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; '''...Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x03 0x00}; ...'''Length'''~ &color(#000,peru){0x01}; ...'''Instruction'''~ &color(#000,cornflowerblue){0x19 0x4E}; ...'''Checksum'''~ < STAT:ID=1のXM430-W210-R(Model No.:0x0406, FW Ver.:0x26)が応答。 >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x07 0x00}; ...'''Length'''~ &color(#000,peru){0x55}; ...'''Instruction'''~ 0x00 ...'''Error'''~ &color(#000,peachpuff){0x06 0x04}; ...'''Model No.'''~ &color(#000,peachpuff){0x26}; ...'''Version of Firmware'''~ &color(#000,cornflowerblue){0x65 0x5D}; ...'''Checksum'''~ < ***READ [#g72689f1] 特定IDのデバイスへアドレス(16bit幅)・バイトサイズ(16bit幅)を指定してコントロールテーブルのデータを読み出します。IDは0~252の範囲が指定できます。 -インストラクションパケットのParameter~ |CENTER:|LEFT:|c |Param byte No.|=Description|h |1|開始アドレス| |2|~| |3|バイトサイズ(N)| |4|~| -ステータスパケットのParameter |CENTER:|LEFT:|c |Param byte No.|=Description|h |1|DATA[0]| |2|DATA[1]| |3|DATA[2]| |...|...| |N|DATA[N-1]| 例)~ INST:XM430-W210想定。ID=1に対しパラメータにAddress=132(0x0084 PresentPosition), Length=4(0x0004)を指定してREADを発行。 >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x07 0x00}; ...'''Length'''~ &color(#000,peru){0x02}; ...'''Instruction'''~ &color(#000,peachpuff){0x84 0x00}; ...'''開始アドレス'''~ &color(#000,peachpuff){0x04 0x00}; ...'''バイトサイズ'''~ &color(#000,cornflowerblue){0x1D 0x15}; ...'''Checksum'''~ < STAT:32bit幅で現在のPresentPosition=3677(0x00000E5D)の値を返信。~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x08 0x00}; ...'''Length'''~ &color(#000,peru){0x55}; ...'''Instruction'''~ 0x00 ...'''Error'''~ &color(#000,peachpuff){0x5D 0x0E 0x00 0x00}; ...'''DATAs'''~ &color(#000,cornflowerblue){0x7C 0x9C}; ...'''Checksum'''~ < ***WRITE [#zfeca76b] 特定IDのデバイスへアドレス(16bit幅)・データ(任意バイト数)を指定してコントロールテーブルへ書き込みます。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。 -インストラクションパケットのParameter~ |CENTER:|LEFT:|c |Param byte No.|=Description|h |1|開始アドレス| |2|~| |3|DATA[0]| |4|DATA[1]| |5|DATA[2]| |...|...| |N+2|DATA[N-1]| -ステータスパケットのParameter~ なし 例)~ INST:XM430-W210想定。ID=1に対しパラメータにAddress=116(0x0074 GoalPosition), Data=999(0x000003E7 32bit幅)を指定してWRITEを発行。 >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x09 0x00}; ...'''Length'''~ &color(#000,peru){0x03}; ...'''Instruction'''~ &color(#000,peachpuff){0x74 0x00}; ...'''開始アドレス'''~ &color(#000,peachpuff){0xE7 0x03 0x00 0x00}; ...'''DATAs'''~ &color(#000,cornflowerblue){0xF0 0x65}; ...'''Checksum'''~ < STAT:正常時の返信。~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x04 0x00}; ...'''Length'''~ &color(#000,peru){0x55}; ...'''Instruction'''~ 0x00 ...'''Error'''~ &color(#000,cornflowerblue){0xA1 0x0C};...'''Checksum'''~ < ***REG WRITE [#aa3a862b] 特定IDのデバイスへアドレス(16bit幅)・データ(任意バイト数)を指定してコントロールテーブルへ書き込む点ではWRITEインストラクションと同じですが、その後ACTIONインストラクションが実行されない限りコントロールテーブルへ反映されません。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。~ なお、REG WRITEを受信したデバイスは、コントロールテーブル上のアイテムRegistered Instructionを1にし、ACTIONインストラクションを待機中である事を示します。 -インストラクションパケットのParameter~ |CENTER:|LEFT:|c |Param byte No.|=Description|h |1|開始アドレス| |2|~| |3|DATA[0]| |4|DATA[1]| |5|DATA[2]| |...|...| |N+2|DATA[N-1]| -ステータスパケットのParameter~ なし 例)~ INST:XM430-W210想定。ID=1に対しパラメータにAddress=104(0x0068 GoalVelocity), Data=200(0x000000C8 32bit幅)を指定してREG WRITEを発行。 >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x09 0x00}; ...'''Length'''~ &color(#000,peru){0x04}; ...'''Instruction'''~ &color(#000,peachpuff){0x68 0x00}; ...'''開始アドレス'''~ &color(#000,peachpuff){0xC8 0x00 0x00 0x00}; ...'''DATAs'''~ &color(#000,cornflowerblue){0xAE 0x8E}; ...'''Checksum'''~ < STAT:正常時の返信。~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x04 0x00}; ...'''Length'''~ &color(#000,peru){0x55}; ...'''Instruction'''~ 0x00 ...'''Error'''~ &color(#000,cornflowerblue){0xA1 0x0C};...'''Checksum'''~ < ***ACTION [#h4c1d8d8] REG WRITEインストラクションで待機中のデバイスのコントロールテーブルを更新します。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。~ ACTIONを受け取ったデバイスはRegistered Instructionが1であれば0になりますが、0であったデバイスはエラーを返します。 -インストラクションパケットのParameter~ なし -ステータスパケットのParameter~ なし 例)~ INST:ID=1に対しACTIONを発行。 >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x03 0x00}; ...'''Length'''~ &color(#000,peru){0x05}; ...'''Instruction'''~ &color(#000,cornflowerblue){0x02 0xCE}; ...'''Checksum'''~ < STAT:Registered Instructionが1であった場合の正常時の返信。~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x04 0x00}; ...'''Length'''~ &color(#000,peru){0x55}; ...'''Instruction'''~ 0x00 ...'''Error'''~ &color(#000,cornflowerblue){0xA1 0x0C};...'''Checksum'''~ < ***FACTORY RESET [#j50c0104] 特定IDのデバイスを出荷時の状態にします。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。 -インストラクションパケットのParameter~ |CENTER:|LEFT:|c |Param byte No.|=Description|h |1|0x01:IDのみ対象外とする&br;0x02:IDとBaudrateのみ対象外とする&br;0xFF:全てを対象とする| -ステータスパケットのParameter~ なし 例)~ INST:ID=1に完全なFACTORY RESETを発行。 > >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; '''...Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x04 0x00}; ...'''Length'''~ &color(#000,peru){0x06}; ...'''Instruction'''~ &color(#000,peachpuff){0xFF}; ...'''Parameter'''~ &color(#000,cornflowerblue){0xA6 0x64}; ...'''Checksum'''~ < STAT:正常時の返信 >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; '''...Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x04 0x00}; ...'''Length'''~ &color(#000,peru){0x55}; ...'''Instruction'''~ 0x00 ...'''Error'''~ &color(#000,cornflowerblue){0xA1 0x0C};~ < ***REBOOT [#t6f3bb05] 特定IDのデバイスを再起動します。IDは0~252が指定できます。~ -インストラクションパケットのParameter~ なし -ステータスパケットのParameter~ なし 例)~ INST:XM430-W210想定。ID=1へREBOOTを発行。~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...Header~ &color(#000,aquamarine){0x01}; ...ID~ &color(#000,lemonchiffon){0x03 0x00}; ...Length~ &color(#000,peru){0x08}; ...Instruction~ &color(#000,cornflowerblue){0x2F 0x4E}; ...CheckSum < STAT:正常時の返信~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0x01}; ...'''ID'''~ &color(#000,lemonchiffon){0x04 0x00}; ...'''Length'''~ &color(#000,peru){0x55}; ...'''Instruction'''~ 0x00 ...'''Error'''~ &color(#000,cornflowerblue){0xA1 0x0C};...'''Checksum''' ~ < ***SYNC READ [#s52de3b7] Parameterにアドレス(16bit幅)・バイトサイズ(16bit幅)・複数のID指定した1回のインストラクションパケットで、指定されたIDのデバイスのコントロールテーブルからデータを順次読み出します。~ インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~252の範囲をとります。~ 個々のデバイスはインストラクションパケットのパラメータで指定されたIDの順にREADと同様のステータスパケットで順次応答しますが、何らかの理由により応答しないデバイスがあった場合は、それ以後に指定された全てのデバイスは応答を中止します。 -インストラクションパケットのParameter~ |CENTER:|LEFT:|<|c |Param byte No.|=Description|<|h |1|開始アドレス|<| |2|~|<| |3|バイトサイズ(N) (1以上)|<| |4|~|<| |5|1stデバイスのID (0~252)|<| |6|2ndデバイスのID (0~252)|<| |7|3rdデバイスのID (0~252)|<| |...|...|<| -ステータスパケットのParameter |CENTER:|LEFT:|c |Param byte No.|=Description|h |1|DATA[0]| |2|DATA[1]| |3|DATA[2]| |...|...| |N|DATA[N-1]| 例)~ INST:XM430-W210想定。パラメータにアドレス=132(0x0084 PresentPosition), サイズ=4, ID=1,2を指定してSYNC READを発行。~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0xFE}; ...'''ID(254固定)'''~ &color(#000,lemonchiffon){0x09 0x00}; ...'''Length'''~ &color(#000,peru){0x82}; ...'''Instruction'''~ &color(#000,peachpuff){0x84 0x00}; ...'''開始アドレス'''~ &color(#000,peachpuff){0x04 0x00}; ...'''バイトサイズ'''~ &color(#000,peachpuff){0x01 0x02}; ...'''IDs'''~ &color(#000,cornflowerblue){0xCE 0xFA}; ...'''CheckSum''' < STAT:正常時の返信~ >ID=1が現在のPresentPosition=3677(0x00000E5D 32bit幅)の値を返信。~ &color(#000,silver){0xFF 0xFF 0xFD 0x00}; &color(#000,aquamarine){0x01}; &color(#000,lemonchiffon){0x08 0x00}; &color(#000,peru){0x55}; 0x00 &color(#000,peachpuff){0x5D 0x0E 0x00 0x00}; &color(#000,cornflowerblue){0x7C 0x9C};~ ID=2が現在のPresentPosition=1538(0x00000602 32bit幅)の値を返信。~ &color(#000,silver){0xFF 0xFF 0xFD 0x00}; &color(#000,aquamarine){0x02}; &color(#000,lemonchiffon){0x08 0x00}; &color(#000,peru){0x55}; 0x00 &color(#000,peachpuff){0x02 0x06 0x00 0x00}; &color(#000,cornflowerblue){0x64 0x1A}; < ***SYNC WRITE [#pf4086e3] Parameterに共通のアドレス(16bit幅)・共通のバイトサイズ(16bit幅)・複数のIDと各データを指定した1回のインストラクションパケットで、複数のデバイスのコントロールテーブルへ書き込みます。~ インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~252の範囲をとります。 -インストラクションパケットのParameter~ |CENTER:|LEFT:|<|c |Param byte No.|=Description|<|h |1|開始アドレス|<| |2|~|<| |3|バイトサイズ(N) (1以上)|<| |4|~|<| |5|1stデバイス|ID (0~252)| |6|~|DATAa[0]| |7|~|DATAa[1]| |...|~|...| |N+5|~|DATAa[N-1]| |N+6|2ndデバイス|ID (0~252)| |N+7|~|DATAb[0]| |N+8|~|DATAb[1]| |...|~|...| |2*N+6|~|DATAb[N-1]| |2*N+7|3rdデバイス|ID (0~252)| |2*N+8|~|DATAc[0]| |2*N+9|~|DATAc[1]| |...|~|...| |3*N+5|~|DATAc[N-1]| |...|...|...| 例)~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0xFE}; ...'''ID(254固定)'''~ &color(#000,lemonchiffon){0x11 0x00}; ...'''Length'''~ &color(#000,peru){0x83}; ...'''Instruction'''~ &color(#000,peachpuff){0x74 0x00}; ...'''開始アドレス'''~ &color(#000,peachpuff){0x04 0x00}; ...'''バイトサイズ'''~ &color(#000,peachpuff){0x01}; &color(#000,peachpuff){0xD2 0x04 0x00 0x00}; ...'''1st ID, DATAs'''~ &color(#000,peachpuff){0x02}; &color(#000,peachpuff){0x80 0x0D 0x00 0x00}; ...'''2nd ID, DATAs'''~ &color(#000,cornflowerblue){0xF4 0x4E}; ...'''Checksum'''~ < ***BULK READ [#d89abc16] ParameterにID・アドレス(16bit幅)・バイトサイズ(16bit幅)を複数指定した1回のインストラクションパケットで、指定されたIDのデバイスのコントロールテーブルからデータを順次読み出します。~ インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~252の範囲をとります。~ 個々のデバイスはインストラクションパケットのパラメータで指定されたIDの順にREADと同様のステータスパケットで順次応答しますが、何らかの理由により応答しないデバイスがあった場合は、それ以後に指定された全てのデバイスは応答を中止します。 -インストラクションパケットのParameter~ |CENTER:|LEFT:|<|c |Param byte No.|=Description|<|h |1|1stデバイス|ID (0~252)| |2|~|開始アドレス| |3|~|~| |4|~|バイトサイズ (1以上)| |5|~|~| |6|2ndデバイス|ID (0~252)| |7|~|開始アドレス| |8|~|~| |9|~|バイトサイズ (1以上)| |10|~|~| |11|3rdデバイス|ID (0~252)| |12|~|開始アドレス| |13|~|~| |14|~|バイトサイズ (1以上)| |15|~|~| |...|...|...| -ステータスパケットのParameter |CENTER:|LEFT:|c |Param byte No.|=Description|h |1|DATA[0]| |2|DATA[1]| |3|DATA[2]| |...|...| |N|DATA[N-1]| 例)~ INST:XM430-W210想定。パラメータに、ID=1,アドレス=144(0x0090 PresentInputVoltage),サイズ=2と、ID=2,アドレス=132(0x0084 PresentPosition),サイズ=4を指定してBULK READを発行。~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0xFE}; ...'''ID(254固定)'''~ &color(#000,lemonchiffon){0x0D 0x00}; ...'''Length'''~ &color(#000,peru){0x92}; ...'''Instruction'''~ &color(#000,peachpuff){0x01}; &color(#000,peachpuff){0x90 0x00}; &color(#000,peachpuff){0x02 0x00}; ...'''1st ID, アドレス, サイズ'''~ &color(#000,peachpuff){0x02}; &color(#000,peachpuff){0x84 0x00}; &color(#000,peachpuff){0x04 0x00}; ...'''2bd ID, アドレス, サイズ'''~ &color(#000,cornflowerblue){0x1C 0x23}; ...'''CheckSum''' < STAT:正常時の返信~ >ID=1が現在のPresentVoltage=151(0x0097 16bit幅)の値を返信。~ &color(#000,silver){0xFF 0xFF 0xFD 0x00}; &color(#000,aquamarine){0x01}; &color(#000,lemonchiffon){0x06 0x00}; &color(#000,peru){0x55}; 0x00 &color(#000,peachpuff){0x97 0x00}; &color(#000,cornflowerblue){0xCF 0x29};~ ID=2が現在のPresentPosition=1538(0x00000602 32bit幅)の値を返信。~ &color(#000,silver){0xFF 0xFF 0xFD 0x00}; &color(#000,aquamarine){0x02}; &color(#000,lemonchiffon){0x08 0x00}; &color(#000,peru){0x55}; 0x00 &color(#000,peachpuff){0x02 0x06 0x00 0x00}; &color(#000,cornflowerblue){0x64 0x1A};~ < ***BULK WRITE [#j5add499] ParameterにID・アドレス(16bit幅)・バイトサイズ(16bit幅)・データを複数指定した1回のインストラクションパケットで、指定されたIDのデバイスのコントロールテーブルへ書き込みます。~ インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~252の範囲をとります。 -インストラクションパケットのParameter~ |CENTER:|CENTER:|LEFT:|c |Param byte No.|=Description|<|h |1|1stデバイス a|ID (0~252)| |2|~|開始アドレス| |3|~|~| |4|~|バイトサイズ(Na) (1以上)| |5|~|~| |6|~|DATAa[0]| |7|~|DATAa[1]| |8|~|DATAa[2]| |...|~|...| |Na+5|~|DATAa[Na-1]| |Na+6|2ndデバイス b|ID (0~252)| |Na+7|~|開始アドレス| |Na+8|~|~| |Na+9|~|バイトサイズ(Nb) (1以上)| |Na+10|~|~| |Na+11|~|DATAb[0]| |Na+12|~|DATAb[1]| |Na+13|~|DATAb[2]| |...|~|...| |Na+Nb+10|~|DATAb[Nb-1]| |...|...|...| 例)~ INST:XM430-W210想定。パラメータに、ID=1・アドレス=112(0x0070 ProfileVelocity~)・サイズ=8・ProfileVelocity=10(32bit幅)・GoalPosition=2048(32bit幅)と、ID=2・アドレス=80(0x0050 PositionDGain)・サイズ=6・PositionDGain=0(16bit幅),PositionIGain=0(16bit幅)・PositionPGain=800(16bit幅)を指定してBULK WRITEを発行。~ >&color(#000,silver){0xFF 0xFF 0xFD 0x00}; ...'''Header'''~ &color(#000,aquamarine){0xFE}; ...'''ID(254固定)'''~ &color(#000,lemonchiffon){0x1B 0x00}; ...'''Length'''~ &color(#000,peru){0x93}; ...'''Instruction'''~ &color(#000,peachpuff){0x01}; &color(#000,peachpuff){0x70 0x00}; &color(#000,peachpuff){0x08 0x00}; &color(#000,peachpuff){0x0A 0x00 0x00 0x00}; &color(#000,peachpuff){0x00 0x08 0x00 0x00}; ...'''1st ID,アドレス,サイズ,DATAs'''~ &color(#000,peachpuff){0x02}; &color(#000,peachpuff){0x50 0x00}; &color(#000,peachpuff){0x06 0x00}; &color(#000,peachpuff){0x00 0x00}; &color(#000,peachpuff){0x00 0x00}; &color(#000,peachpuff){0x20 0x03}; ...'''2nd ID,アドレス,サイズ,DATAs'''~ &color(#000,cornflowerblue){0x63 0xE8}; ...'''CheckSum''' <