Dynamixel DX/EX/AX/MXシリーズ共通の通信プロトコルです。また、Dynamixel XシリーズでプロトコルをV1に切り替えた際にも適用されます。

Page Top

ID anchor.png

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

RS485_MX_DifferentID.png

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

Page Top

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

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

Page Top

パケット通信 anchor.png

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

DxProt1.png

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

Page Top

パケット詳細 anchor.png

以後「0x」が付与された英数字は16進数、そうでないものは10進数とみなします。
また、デバイスのコントロールテーブル上のStatus Return Levelによってパケットの有無が異なります。

Page Top

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

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

inst.png
  • Header
    先頭2バイトは0xFF,0xFFの固定値。
  • ID
    送信先のデバイスのID。0~253(0x00~0xFD)の範囲及び254(0xFE)。
    254のIDは1回のインストラクションパケットで複数のデバイスに対して命令を発効する際に使用。
  • Length
    Instruction以後の全てのバイト数。
  • Instruction
    以下のいずれかのインストラクション。
    InstructionFunctionValueNumber of Parameter
    PINGデバイスの死活確認0x010
    READコントロールテーブルから読み出し0x022
    WRITEコントロールテーブルへ書き込み(即時反映)0x032~
    REG WRITEコントロールテーブルへ書き込み(保留)0x042~
    ACTIONREG_WRITEで保留された値を反映0x050
    RESETデバイスのコントロールテーブルを出荷時の値に初期化0x060
    SYNC WRITE複数デバイスの同一コントロールテーブルへの一括書き込み(即時反映)0x834~
  • Parameter
    Instructionで要求される追加情報(可変長)。
  • Checksum
    計算方法は次の通りです。
    SUM = ~(id + LEN + INS + Param1 + … + ParamN)
    計算された値が255を超えた場合は下位8ビットをSUMとします。
Page Top

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

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

stat.png
  • Header
    先頭2バイトは0xFF,0xFFの固定値。
  • ID
    デバイスのID。
  • Length
    Error以後の全てのバイト数。
  • Error
    パケット処理中に検出されたデバイスの動作状況等。
    BitNameDescription
    7--
    6Instruction Error未定義のインストラクションが指定された、もしくはREG WRITEなしでACTIONが指定された
    5Overload Error指定された最大トルクで現在の負荷を制御できない
    4Checksum Errorインストラクションパケットのチェックサムが正しく無い
    3Range Errorパラメータの設定範囲を超えた
    2Overheating Error内部温度が設定温度を超えた
    1Angle Limit ErrorAngle Limitの範囲外にGoal Positionが指定された
    0Input Voltage Error電源電圧が指定動作電圧の範囲を超えた
  • Parameter
    インストラクションパケットに従った追加情報(可変長)。
  • Checksum
    計算方法は次の通りです。
    SUM = ~(id + LEN + INS + Param1 + … + ParamN)
    計算された値が255を超えた場合は下位8ビットをSUMとします。
Page Top

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

Page Top

PING anchor.png

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

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

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

0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x01 ...Instruction
0xFB ...Checksum

STAT:ID=1のDynamixelが応答。

0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x00 ...Error
0xFC ...Checksum

Page Top

READ anchor.png

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

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

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

例)
INST:AX-12A想定。ID=1に対しパラメータにAddress=43(0x2B PresentTemperature), Length=2(0x02)を指定してREADを発行。

0xFF 0xFF ...Header
0x01 ...ID
0x04 ...Length
0x02 ...Instruction
0x2B ...開始アドレス
0x01 ...バイトサイズ
0xCC ...Checksum

STAT:8bit幅で現在のPresentTemperature=32(0x20)の値を返信。

0xFF 0xFF ...Header
0x01 ...ID
0x03 ...Length
0x00 ...Error
0x20 ...DATAs
0xDB ...Checksum

Page Top

WRITE anchor.png

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

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

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

例)
INST:AX-12A想定。ID=1(0x01)に対しパラメータにAddress=30(0x1E GoalPosition), Data=512(0x0200 16bit幅)を指定してWRITEを発行。

0xFF 0xFF ...Header
0x01 ...ID
0x05 ...Length
0x03 ...Instruction
0x03 ...開始アドレス
0x00 02 ...DATAs
0xF1 ...Checksum

STAT:ID=1のDynamixelが応答。

0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x00 ...Error
0xFC ...Checksum

Page Top

REG WRITE anchor.png

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

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

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

例)
INST:AX-12A想定。ID=1に対しパラメータにAddress=30(0x1E GoalPosition), Data=200(0x00C8 16bit幅)を指定してREG WRITEを発行。

0xFF 0xFF ...Header
0x01 ...ID
0x05 ...Length
0x04 ...Instruction
0x1E ...開始アドレス
0xC8 0x00 ...DATAs
0x0F ...Checksum

STAT:ID=1のDynamixelが応答。

0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x00 ...Error
0xFC ...Checksum

Page Top

ACTION anchor.png

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

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

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

0xFF 0xFF ...Header
0x01 ...ID
0x03 ...Length
0x05 ...Instruction
0xF6 ...Checksum

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

0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x00 ...Error
0xFC...Checksum

Page Top

RESET anchor.png

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

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

例)
INST:ID=0にRESETを発行。

0xFF 0xFF ...Header
0x00 ...ID
0x02 ...Length
0x06 ...Instruction
0xF7 ...Checksum

STAT:正常時の返信

0xFF 0xFF ...Header
0x00 ...ID
0x02 ...Length
0x00 ...Error
0xFD

Page Top

SYNC WRITE anchor.png

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

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

    例)
    INST:AX-12A想定。ID=0へGoalPositionを16(0x0010),GoalSpeedを336(0x0150)、ID=1へGoalPositionを544(0x0220),GoalSpeedを864(0x0360)、ID=2へGoalPositionを48(0x0030),GoalSpeedを368(0x0170)、ID=3へGoalPositionを544(0x0220),GoalSpeedを896(0x0380)を指定してSYNC WRITEを発行。

    0xFF 0xFF ...Header
    0xFE ...ID(254固定)
    0x18 ...Length
    0x83 ...Instruction
    0x1E ...開始アドレス
    0x04 ...バイトサイズ
    0x00 0x10 0x00 0x50 0x01 ...1st ID, DATAs
    0x01 0x20 0x02 0x60 0x03 ...2nd ID, DATAs
    0x02 0x30 0x00 0x70 0x01 ...3rd ID, DATAs
    0x03 0x20 0x02 0x80 0x03 ...4th ID, DATAs
    0x12 ...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-20 (Sun) 00:32:26 (JST) (763d)