Dynamixel X及びPROシリーズ共通の通信プロトコルです。また、Dynamixel MXシリーズのファームウェアをV2対応版に書き換えた際にも適用されます。

Page Top

ID anchor.png

Dynamixelでは複数のデバイスを同じネットワークに接続して運用する事を前提としているため、各々のデバイスを区別するためにユニークなID番号を用いる事としています。
また、ホストは任意のIDを持ったデバイスを指定して命令し、指定されたIDに一致したデバイスがそれに応答するといったマスタースレーブ方式を採用しています。

RS485_X_DifferentID.png

なお、複数のデバイスに同じID値が付けられている事は前提としていないため、1つのネットワークに同一IDを持つデバイスが複数存在してはなりません。

Page Top

コントロールテーブル anchor.png

デバイスの情報はメモリマップでとして提供されており、それをコントロールテーブルと称します。
複数の情報はコントロールテーブル上の異なるアドレスに割り当てられており、必要に応じてホストから任意のIDを持ったデバイスの任意のアドレスへアクセスします。

Page Top

パケット通信 anchor.png

ホストとデバイス間は一般的なシリアル通信を行うハードウェアで接続され、パケット単位で処理される共通の通信プロトコルを用いて相互に情報をやりとりします。
ここではホストからデバイスへ送信されるパケットを「インストラクションパケット」、デバイスからホストへ送信されるパケットを「ステータスパケット」と称します。

DxProt1.png

ホストから送信するインストラクションパケットの主な機能はIDの指定とコントロールテーブルの任意のアドレスへのデータの読み書きとなります。そのパケットに対して応答すべきデバイスから返信されるステータスパケットには、ホストから読み出し要求されたコントロールテーブル内のデータや、書き込み要求に対する整合性の結果などが含まれます。

Page Top

パケット詳細 anchor.png

以後16bit幅のパラメータはリトルエンディアン(データの下位バイトから順に格納)で指定するものとし、「0x」が付与された英数字は16進数、そうでないものは10進数とみなします。
また、デバイスのコントロールテーブル上のStatus Return Levelによってパケットの有無が異なります。

Page Top

インストラクションパケット anchor.png

インストラクションパケットはホストからデバイスへ命令するためのパケットです。
パケット構造は以下の通りで、囲み1つが1byteを意味します。例外についてはこちらを参照します。

inst.png
  • Header,Reserved
    先頭4バイトは0xFF,0xFF,0xFD,0x00の固定値。
  • ID
    送信先のデバイスのID。0~252(0x00~0xFC)の範囲及び254(0xFE)。
    254のIDは1回のインストラクションパケットで複数のデバイスに対して命令を発効する際に使用。
  • Length
    Instruction以後の全てのバイト数(16bit幅)。
  • Instruction
    以下のいずれかのインストラクション。
    InstructionFunctionValueNumber of Parameter
    PINGデバイスの死活確認0x010
    READコントロールテーブルからの読み込み0x024
    WRITEコントロールテーブルへの書き込み(即時反映)0x033~
    REG WRITEコントロールテーブルへの書き込み(保留)0x043~
    ACTIONREG WRITEで保留された値を反映0x050
    FACTORY RESETデバイスのコントロールテーブルの値を出荷時デフォルト化0x061
    REBOOTデバイスの再起動0x080
    SYNC READ複数デバイスの同一コントロールテーブルから読み込み0x825~
    SYNC WRITE複数デバイスの同一コントロールテーブルへ書き込み0x836~
    BULK READ複数デバイスの異なるコントロールテーブルから読み込み0x926~
    BULK WRITE複数デバイスの異なるコントロールテーブルへ書き込み0x936~

  • Parameter
    Instructionで要求される追加情報(可変長)。
  • Checksum
    HeaderからParameterまでのチェックサム値(CRC-16-IBM)。
    (X^16+X^15+X^2+1) Polynomial 0x8005
Page Top

ステータスパケット anchor.png

ステータスパケットはホストから送信されるインストラクションパケットをデバイスが受信した後、その応答としてデバイスからホストへ返信されるパケットです。
パケット構造は以下の通りで、囲み1つが1byteを意味します。例外についてはこちらを参照します。

stat.png
  • Header,Reserved
    先頭4バイトは0xFF,0xFF,0xFD,0x00の固定値。
  • ID
    デバイスのID。
  • Length
    Instruction以後の全てのバイト数(16bit幅)。
  • Instruction
    Statusを意味する0x55の固定値。
  • Error
    パケット処理中に検出されたデバイスの動作状況等。
    BitNameDescription
    7Alert-
    6~0Error No.1:Result Failパケット処理失敗
    2:Instruction Error未定義のインストラクションセット, RegWriteなしでAction
    3:CRC ErrorCRC不一致
    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
Page Top

例外 anchor.png

Header部と一致するデータ列がInstruction~Parameter間に現れる場合は、Header部と一致する全てのデータ列の末尾に0xFDを1byte付与するものとします。
例えば例外処理前のParameterが「0x01 0x02 0xFF 0xFF 0xFD 0x03」の場合、Header部と一致するデータ列を含んでいますので、「0x01 0x02 0xFF 0xFF 0xFD 0xFD 0x03」の様に追加します。データ長が増えるため、実際のパケットも増えた分だけLengthを増やし、最終的に追加したデータを含むパケットのChecksumを計算します。

例1)

INST:ID=1のアドレス634に10バイトのデータ(0xFF,0xFF,0xFD,0xFF,0xFF,0xFD,0xFF,0xFF​,0xFD,0xFF)を書き込む。
0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x12 0x00 ...Length
0x03 ...Instruction
0x7A 0x02 0xFF 0xFF 0xFD 0xFD 0xFF 0xFF 0xFD 0xFD 0xFF 0xFF 0xFD 0xFD 0xFF ...Parameter
0xA3 0xE2 ...Checksum

STAT:正常応答
0xFF 0xFF 0xFD 0x00 0x01 0x04 0x00 0x55 0x00 0xA1 0x0C

例2)

INST:ID=1のアドレス634から例1で書き込んだ10バイトのデータを読み出す。
0xFF 0xFF 0xFD 0x00 0x01 0x07 0x00 0x02 0x7A 0x02 0x0A 0x00 0x1E 0xA9

STAT:正常応答
0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x11 0x00 ...Length
0x55 ...Instruction
0x00 ...Error
0xFF 0xFF 0xFD 0xFD 0xFF 0xFF 0xFD 0xFD 0xFF 0xFF 0xFD 0xFD 0xFF ...Parameter
0x18 0x99 ...Checksum

Page Top

インストラクション詳細 anchor.png

Page Top

PING anchor.png

特定のIDを持ったDynamixelの存在を確認します。ステータスパケットのパラメータには応答したDynamixelのModel No.とVersion of Firmwareが含まれます。
IDに254を指定してPINGインストラクションを送信すると、ネットワークに存在する全てのDynamixelが順次ステータスパケットを返します。

  • インストラクションパケットのParameter
    なし
  • ステータスパケットのParameter
    Param byte No.Description
    1Model No.
    2
    3Version of Firmware

例)
INST:ID=1にPINGを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x03 0x00 ...Length
0x01 ...Instruction
0x19 0x4E ...Checksum

STAT:ID=1のXM430-W210-R(Model No.:0x0406, FW Ver.:0x26)が応答。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x07 0x00 ...Length
0x55 ...Instruction
0x00 ...Error
0x06 0x04 ...Model No.
0x26 ...Version of Firmware
0x65 0x5D ...Checksum

Page Top

READ anchor.png

特定IDのデバイスへアドレス(16bit幅)・バイトサイズ(16bit幅)を指定してコントロールテーブルのデータを読み出します。IDは0~252の範囲が指定できます。

  • インストラクションパケットのParameter
    Param byte No.Description
    1開始アドレス
    2
    3バイトサイズ(N)
    4

  • ステータスパケットのParameter
    Param byte No.Description
    1DATA[0]
    2DATA[1]
    3DATA[2]
    ......
    NDATA[N-1]

例)
INST:XM430-W210想定。ID=1に対しパラメータにAddress=132(0x0084 PresentPosition), Length=4(0x0004)を指定してREADを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x07 0x00 ...Length
0x02 ...Instruction
0x84 0x00 ...開始アドレス
0x04 0x00 ...バイトサイズ
0x1D 0x15 ...Checksum

STAT:32bit幅で現在のPresentPosition=3677(0x00000E5D)の値を返信。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x08 0x00 ...Length
0x55 ...Instruction
0x00 ...Error
0x5D 0x0E 0x00 0x00 ...DATAs
0x7C 0x9C ...Checksum

Page Top

WRITE anchor.png

特定IDのデバイスへアドレス(16bit幅)・データ(任意バイト数)を指定してコントロールテーブルへ書き込みます。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。

  • インストラクションパケットのParameter
    Param byte No.Description
    1開始アドレス
    2
    3DATA[0]
    4DATA[1]
    5DATA[2]
    ......
    N+2DATA[N-1]

  • ステータスパケットのParameter
    なし

例)
INST:XM430-W210想定。ID=1に対しパラメータにAddress=116(0x0074 GoalPosition), Data=999(0x000003E7 32bit幅)を指定してWRITEを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x09 0x00 ...Length
0x03 ...Instruction
0x74 0x00 ...開始アドレス
0xE7 0x03 0x00 0x00 ...DATAs
0xF0 0x65 ...Checksum

STAT:正常時の返信。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x04 0x00 ...Length
0x55 ...Instruction
0x00 ...Error
0xA1 0x0C...Checksum

Page Top

REG WRITE anchor.png

特定IDのデバイスへアドレス(16bit幅)・データ(任意バイト数)を指定してコントロールテーブルへ書き込む点ではWRITEインストラクションと同じですが、その後ACTIONインストラクションが実行されない限りコントロールテーブルへ反映されません。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。
なお、REG WRITEを受信したデバイスは、コントロールテーブル上のアイテムRegistered Instructionを1にし、ACTIONインストラクションを待機中である事を示します。

  • インストラクションパケットのParameter
    Param byte No.Description
    1開始アドレス
    2
    3DATA[0]
    4DATA[1]
    5DATA[2]
    ......
    N+2DATA[N-1]

  • ステータスパケットのParameter
    なし

例)
INST:XM430-W210想定。ID=1に対しパラメータにAddress=104(0x0068 GoalVelocity), Data=200(0x000000C8 32bit幅)を指定してREG WRITEを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x09 0x00 ...Length
0x04 ...Instruction
0x68 0x00 ...開始アドレス
0xC8 0x00 0x00 0x00 ...DATAs
0xAE 0x8E ...Checksum

STAT:正常時の返信。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x04 0x00 ...Length
0x55 ...Instruction
0x00 ...Error
0xA1 0x0C...Checksum

Page Top

ACTION anchor.png

REG WRITEインストラクションで待機中のデバイスのコントロールテーブルを更新します。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。
ACTIONを受け取ったデバイスはRegistered Instructionが1であれば0になりますが、0であったデバイスはエラーを返します。

  • インストラクションパケットのParameter
    なし
  • ステータスパケットのParameter
    なし

例)
INST:ID=1に対しACTIONを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x03 0x00 ...Length
0x05 ...Instruction
0x02 0xCE ...Checksum

STAT:Registered Instructionが1であった場合の正常時の返信。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x04 0x00 ...Length
0x55 ...Instruction
0x00 ...Error
0xA1 0x0C...Checksum

Page Top

FACTORY RESET anchor.png

特定IDのデバイスを出荷時の状態にします。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。

  • インストラクションパケットのParameter
    Param byte No.Description
    10x01:IDのみ対象外とする
    0x02:IDとBaudrateのみ対象外とする
    0xFF:全てを対象とする

  • ステータスパケットのParameter
    なし

例)
INST:ID=1に完全なFACTORY RESETを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x04 0x00 ...Length
0x06 ...Instruction
0xFF ...Parameter
0xA6 0x64 ...Checksum

STAT:正常時の返信

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x04 0x00 ...Length
0x55 ...Instruction
0x00 ...Error
0xA1 0x0C

Page Top

REBOOT anchor.png

特定IDのデバイスを再起動します。IDは0~252が指定できます。

  • インストラクションパケットのParameter
    なし
  • ステータスパケットのParameter
    なし

例)
INST:XM430-W210想定。ID=1へREBOOTを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x03 0x00 ...Length
0x08 ...Instruction
0x2F 0x4E ...CheckSum

STAT:正常時の返信

0xFF 0xFF 0xFD 0x00 ...Header
0x01 ...ID
0x04 0x00 ...Length
0x55 ...Instruction
0x00 ...Error
0xA1 0x0C...Checksum

Page Top

SYNC READ anchor.png

Parameterにアドレス(16bit幅)・バイトサイズ(16bit幅)・複数のID指定した1回のインストラクションパケットで、指定されたIDのデバイスのコントロールテーブルからデータを順次読み出します。
インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~252の範囲をとります。
個々のデバイスはインストラクションパケットのパラメータで指定されたIDの順にREADと同様のステータスパケットで順次応答しますが、何らかの理由により応答しないデバイスがあった場合は、それ以後に指定された全てのデバイスは応答を中止します。

  • インストラクションパケットのParameter
    Param byte No.Description
    1開始アドレス
    2
    3バイトサイズ(N) (1以上)
    4
    51stデバイスのID (0~252)
    62ndデバイスのID (0~252)
    73rdデバイスのID (0~252)
    ......

  • ステータスパケットのParameter
    Param byte No.Description
    1DATA[0]
    2DATA[1]
    3DATA[2]
    ......
    NDATA[N-1]

例)
INST:XM430-W210想定。パラメータにアドレス=132(0x0084 PresentPosition), サイズ=4, ID=1,2を指定してSYNC READを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0xFE ...ID(254固定)
0x09 0x00 ...Length
0x82 ...Instruction
0x84 0x00 ...開始アドレス
0x04 0x00 ...バイトサイズ
0x01 0x02 ...IDs
0xCE 0xFA ...CheckSum

STAT:正常時の返信

ID=1が現在のPresentPosition=3677(0x00000E5D 32bit幅)の値を返信。
0xFF 0xFF 0xFD 0x00 0x01 0x08 0x00 0x55 0x00 0x5D 0x0E 0x00 0x00 0x7C 0x9C
ID=2が現在のPresentPosition=1538(0x00000602 32bit幅)の値を返信。
0xFF 0xFF 0xFD 0x00 0x02 0x08 0x00 0x55 0x00 0x02 0x06 0x00 0x00 0x64 0x1A

Page Top

SYNC WRITE anchor.png

Parameterに共通のアドレス(16bit幅)・共通のバイトサイズ(16bit幅)・複数のIDと各データを指定した1回のインストラクションパケットで、複数のデバイスのコントロールテーブルへ書き込みます。
インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~252の範囲をとります。

  • インストラクションパケットのParameter
    Param byte No.Description
    1開始アドレス
    2
    3バイトサイズ(N) (1以上)
    4
    51stデバイスID (0~252)
    6DATAa[0]
    7DATAa[1]
    ......
    N+5DATAa[N-1]
    N+62ndデバイスID (0~252)
    N+7DATAb[0]
    N+8DATAb[1]
    ......
    2*N+6DATAb[N-1]
    2*N+73rdデバイスID (0~252)
    2*N+8DATAc[0]
    2*N+9DATAc[1]
    ......
    3*N+5DATAc[N-1]
    .........

    例)

    0xFF 0xFF 0xFD 0x00 ...Header
    0xFE ...ID(254固定)
    0x11 0x00 ...Length
    0x83 ...Instruction
    0x74 0x00 ...開始アドレス
    0x04 0x00 ...バイトサイズ
    0x01 0xD2 0x04 0x00 0x00 ...1st ID, DATAs
    0x02 0x80 0x0D 0x00 0x00 ...2nd ID, DATAs
    0xF4 0x4E ...Checksum

Page Top

BULK READ anchor.png

ParameterにID・アドレス(16bit幅)・バイトサイズ(16bit幅)を複数指定した1回のインストラクションパケットで、指定されたIDのデバイスのコントロールテーブルからデータを順次読み出します。
インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~252の範囲をとります。
個々のデバイスはインストラクションパケットのパラメータで指定されたIDの順にREADと同様のステータスパケットで順次応答しますが、何らかの理由により応答しないデバイスがあった場合は、それ以後に指定された全てのデバイスは応答を中止します。

  • インストラクションパケットのParameter
    Param byte No.Description
    11stデバイスID (0~252)
    2開始アドレス
    3
    4バイトサイズ (1以上)
    5
    62ndデバイスID (0~252)
    7開始アドレス
    8
    9バイトサイズ (1以上)
    10
    113rdデバイスID (0~252)
    12開始アドレス
    13
    14バイトサイズ (1以上)
    15
    .........

  • ステータスパケットのParameter
    Param byte No.Description
    1DATA[0]
    2DATA[1]
    3DATA[2]
    ......
    NDATA[N-1]

例)
INST:XM430-W210想定。パラメータに、ID=1,アドレス=144(0x0090 PresentInputVoltage),サイズ=2と、ID=2,アドレス=132(0x0084 PresentPosition),サイズ=4を指定してBULK READを発行。

0xFF 0xFF 0xFD 0x00 ...Header
0xFE ...ID(254固定)
0x0D 0x00 ...Length
0x92 ...Instruction
0x01 0x90 0x00 0x02 0x00 ...1st ID, アドレス, サイズ
0x02 0x84 0x00 0x04 0x00 ...2bd ID, アドレス, サイズ
0x1C 0x23 ...CheckSum

STAT:正常時の返信

ID=1が現在のPresentVoltage=151(0x0097 16bit幅)の値を返信。
0xFF 0xFF 0xFD 0x00 0x01 0x06 0x00 0x55 0x00 0x97 0x00 0xCF 0x29
ID=2が現在のPresentPosition=1538(0x00000602 32bit幅)の値を返信。
0xFF 0xFF 0xFD 0x00 0x02 0x08 0x00 0x55 0x00 0x02 0x06 0x00 0x00 0x64 0x1A

Page Top

BULK WRITE anchor.png

ParameterにID・アドレス(16bit幅)・バイトサイズ(16bit幅)・データを複数指定した1回のインストラクションパケットで、指定されたIDのデバイスのコントロールテーブルへ書き込みます。
インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~252の範囲をとります。

  • インストラクションパケットのParameter
    Param byte No.Description
    11stデバイス aID (0~252)
    2開始アドレス
    3
    4バイトサイズ(Na) (1以上)
    5
    6DATAa[0]
    7DATAa[1]
    8DATAa[2]
    ......
    Na+5DATAa[Na-1]
    Na+62ndデバイス bID (0~252)
    Na+7開始アドレス
    Na+8
    Na+9バイトサイズ(Nb) (1以上)
    Na+10
    Na+11DATAb[0]
    Na+12DATAb[1]
    Na+13DATAb[2]
    ......
    Na+Nb+10DATAb[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を発行。

0xFF 0xFF 0xFD 0x00 ...Header
0xFE ...ID(254固定)
0x1B 0x00 ...Length
0x93 ...Instruction
0x01 0x70 0x00 0x08 0x00 0x0A 0x00 0x00 0x00 0x00 0x08 0x00 0x00 ...1st ID,アドレス,サイズ,DATAs
0x02 0x50 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x20 0x03 ...2nd ID,アドレス,サイズ,DATAs
0x63 0xE8 ...CheckSum


Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Last-modified: 2017-08-17 (Thu) 22:58:28 (JST) (699d)