サーボSCS通信プロトコル
1 通信プロトコル概要
通信レベルは高速通信に対応するTTLレベル方式と、耐干渉性の強いRS485方式を採用しています。通信は非同期全二重で、送信と受信信号は非同期処理されます。
コントローラとサーボ間は問い合わせ方式で通信します。コントローラが指令フレームを送信し、サーボが応答フレームを返します。
1つのバス制御ネットワークには複数のサーボが接続できるため、各サーボにはネットワーク内で一意のID番号が割り当てられています。コントローラが送信する制御指令にはID情報が含まれており、ID番号が一致したサーボだけがこの指令を完全に受信し、応答情報を返します。
通信方式はシリアル非同期方式で、1フレームは1スタートビット、8データビット、1ストップビット、パリティビットなしの計10ビットです。
メモリテーブルの一部パラメータが2バイトの値域を使用する場合、2バイトの順序はサーボの型番によって異なります。ポテンショメータタイプはビッグエンディアン形式(高バイトが先、低バイトが後)、磁気エンコーダタイプはリトルエンディアン形式(低バイトが先、高バイトが後)です。各サーボは機能が若干異なるため、実際の制御時は具体的な型番のメモリテーブルを参照してください。
2 指令フレーム
ヘッダ: 0xFF を連続で2回受信すると、データパケットが到着したことを示します。 ID番号: 各サーボにはID番号があります。ID番号の範囲は0~253で、16進数では0x00~0xFDです。
ブロードキャストID: ID番号254がブロードキャストIDです。コントローラが送信するID番号が254(0xFE)の場合、全てのサーボが指令を受信しますが、PING指令を除く他の指令は応答情報を返しません(複数のサーボがバスに接続されている場合、ブロードキャストPING指令は使用できません)。
データ長: 送信するパラメータNに2を加えた値、つまり「N+2」です。
指令: データパケットの機能コードです。詳細は1.3指令タイプを参照してください。
パラメータ: 指令以外に補足が必要な制御情報です。パラメータは最大で2バイトで1つのメモリ値を表します。バイト順序はサーボの取扱説明書のメモリ制御テーブルを参照してください(型番によりバイト順序が異なります)。
チェックサム: チェックサム(Check Sum)の計算方法は以下の通りです Check Sum = ~ (ID + Length + Instruction + Parameter1 + … Parameter N) 括弧内の合計が255を超える場合は最下位バイトを取ります。「~」はビット反転を表します。
3 応答フレーム
返される応答フレームにはサーボの現在ステータスERRORが含まれます。サーボの現在の動作状態が正常でない場合、このバイトに反映されます(各ステータスの意味は取扱説明書のメモリ制御テーブルを参照)。ERRORが0の場合、サーボにエラー情報はありません。
4 指令タイプ
4.1 ステータス照会指令PING
機能: サーボの動作ステータスを読み取る
長さ: 0x02
指令: 0x01
パラメータ: なし
PING指令をブロードキャストアドレスで使用しても、サーボは応答情報を返します。
例1: ID番号1のサーボの動作ステータスを読み取る。
指令フレーム: FF FF 01 02 01 FB(16進数で送信)
ヘッダ: FF FF
ID: 01
長さ: 02
指令: 01
チェックサム: FB応答フレーム: FF FF 01 02 00 FC(16進数表示)
ヘッダ: FF FF
ID: 01
長さ: 02
ステータス: 00
チェックサム: FC4.2 読み取り指令READ DATA
機能: サーボのメモリ制御テーブルからデータを読み出す
長さ: 0x04
指令: 0x02
パラメータ1: データ読み出しセグメントの先頭アドレス
パラメータ2: 読み出すデータの長さ
例2: ID1のサーボの現在位置を読み取る(低位バイトが先、高位バイトが後)。位置パラメータのメモリテーブルアドレスは0X38で、連続する2バイトです。
指令フレーム: FF FF 01 04 02 38 02 BE(16進数で送信)
ヘッダ: FF FF
ID: 01
長さ: 04
指令: 02
パラメータ: 38 02(現在位置アドレス 読み取りデータ長)
チェックサム: BE応答フレーム: FF FF 01 04 00 18 05 DD(16進数表示)
ヘッダ: FF FF
ID: 01
長さ: 04
ステータス: 00
パラメータ: 18 05
チェックサム: DD読み出した2バイトのデータは(リトルエンディアン構造): 低位バイトL 0x18、高位バイトH 0x05。2バイトを合成した16ビットデータは0X0518で、10進数で表すと現在位置は1304です。
4.3 書き込み指令WRITE DATA
機能: サーボのメモリ制御テーブルにデータを書き込む
長さ: N+2(Nはパラメータ長)
指令: 0x03
パラメータ1: データ書き込みセグメントの先頭アドレス
パラメータ2: 書き込む1つ目のデータ
パラメータ3: 書き込む2つ目のデータ …
パラメータN: 書き込むn番目のデータ、N=n+1
例3: ブロードキャストID (0xFE)を使用して、任意の番号のサーボのIDを1に設定します。メモリテーブルでID番号を保存するアドレスは5です。
指令フレーム: FF FF FE 04 03 05 01 F4 (16進数で送信)
ヘッダ: FF FF
ID: 01
長さ: 04
指令: 03
パラメータ: 05 01(IDアドレス 新しいID値)
チェックサム: F4ブロードキャストIDで指令を送信するため、データは返ってきません。また、メモリテーブルのEPROMには保護ロックスイッチがあり、IDを変更する前にオフ(0)にする必要があります。オフにしないと例のID番号は電源断時に保存されません。詳細な操作は具体的なサーボ型番のメモリテーブルまたは操作マニュアルを参照してください。
例4: ID1のサーボを毎秒1000歩の速度で2048の位置まで回転させる。メモリテーブルの目標位置の先頭アドレスは0x2Aなので、アドレス0x2Aから連続する6バイトのデータを書き込みます。
位置データ0x0800(2048)
予約データ0x0000(0)
速度データ0x03E8(1000)
指令フレーム: FF FF 01 09 03 2A 00 08 00 00 E8 03 D5(16進数で送信)
ヘッダ: FF FF
ID: 01
長さ: 09
指令: 03
パラメータ:
2A(先頭アドレス)
00 08(位置)
00 00(予約)
E8 03(速度)
チェックサム: D5応答フレーム: FF FF 01 02 00 FC(16進数表示)
ヘッダ: FF FF
ID: 01
長さ: 02
ステータス: 00
チェックサム: FC動作ステータスが0を返し、サーボが正常にエラーなく指令を受信し、実行を開始したことを示します。送信した指令パケットのIDは非ブロードキャストID (0xFE)を使用しているため、指令受信完了後にサーボはステータスパケットを返します。
4.4 非同期書き込み指令REG WRITE
REG WRITE指令はWRITE DATAに似ていますが、実行タイミングが異なります。REG WRITE指令フレームを受信すると、受信したデータをバッファに保存し、非同期書き込みフラグレジスタを1に設定します。ACTION指令を受信すると、保存された指令が最終的に実行されます。
長さ: N+2(Nはパラメータ長)
指令: 0x04
パラメータ1: データを書き込む領域の先頭アドレス
パラメータ2: 書き込む1つ目のデータ
パラメータ3: 書き込む2つ目のデータ
パラメータN: 書き込むn番目のデータ、N=n+1
例5: ID1からID10のサーボを毎秒1000の速度で2048の位置まで回転させる。
ID 1: 非同期書き込み指令フレーム: FF FF 01 09 04 2A 00 08 00 00 E8 03 D4
ID 1: 応答フレーム: FF FF 01 02 00 FC
ID 2: 非同期書き込み指令フレーム: FF FF 02 09 04 2A 00 08 00 00 E8 03 D3
ID 2: 応答フレーム: FF FF 02 02 00 FB
ID 3: 非同期書き込み指令フレーム: FF FF 03 09 04 2A 00 08 00 00 E8 03 D2
ID 3: 応答フレーム: FF FF 03 02 00 FA
ID 4: 非同期書き込み指令フレーム: FF FF 04 09 04 2A 00 08 00 00 E8 03 D1
ID 4: 応答フレーム: FF FF 04 02 00 F9
ID 5: 非同期書き込み指令フレーム: FF FF 05 09 04 2A 00 08 00 00 E8 03 D0
ID 5: 応答フレーム: FF FF 05 02 00 F8
ID 6: 非同期書き込み指令フレーム: FF FF 06 09 04 2A 00 08 00 00 E8 03 CF
ID 6: 応答フレーム: FF FF 06 02 00 F7
ID 7: 非同期書き込み指令フレーム: FF FF 07 09 04 2A 00 08 00 00 E8 03 CE
ID 7: 応答フレーム: FF FF 07 02 00 F6
ID 8: 非同期書き込み指令フレーム: FF FF 08 09 04 2A 00 08 00 00 E8 03 CD
ID 8: 応答フレーム: FF FF 08 02 00 F5
ID 9: 非同期書き込み指令フレーム: FF FF 09 09 04 2A 00 08 00 00 E8 03 CC
ID 9: 応答フレーム: FF FF 09 02 00 F4
ID10: 非同期書き込み指令フレーム: FF FF 0A 09 04 2A 00 08 00 00 E8 03 CB
ID10: 応答フレーム: FF FF 0A 02 00 F34.5 非同期書き込み指令の実行ACTION
機能: REG WRITE指令をトリガーする
長さ: 0x02
指令: 0x05
パラメータ: なし
1、ACTION指令は複数のサーボを同時に制御する場合に非常に便利です。
2、複数のサーボを制御する場合、ACTION指令を使用すると、最初と最後のサーボがそれぞれの動作を同時に実行でき、中間に遅延がありません。
3、複数のサーボにACTION指令を送信する場合はブロードキャストID(0xFE)を使用するため、この指令にはデータフレームの返信はありません。
例6: ID1からID10のサーボを毎秒1000の速度で2048の位置まで回転させる非同期書き込み指令を送信した後、非同期書き込み指令の実行が必要です。
指令フレーム: FF FF FE 02 05 FA
応答フレーム: なし4.6 同期書き込み指令SYNC WRITE
機能: 複数のサーボを同時に制御するために使用。
ID: 0xFE
長さ: (L+1)*n+4(L: 各サーボに送るデータ長、n: サーボの数)
指令: 0x83
パラメータ1: データ書き込みの先頭アドレス
パラメータ2: 書き込むデータの長さ(L)
パラメータ3: 1つ目のサーボのID番号
パラメータ4: 1つ目のサーボに書き込む1つ目のデータ
パラメータ5: 1つ目のサーボに書き込む2つ目のデータ …
パラメータL+3: 1つ目のサーボに書き込むL番目のデータ
パラメータL+4: 2つ目のサーボのID番号
パラメータL+5: 2つ目のサーボに書き込む1つ目のデータ
パラメータL+6: 2つ目のサーボに書き込む2つ目のデータ …
パラメータ2L+4: 2つ目のサーボに書き込むL番目のデータ …
REG WRITE+ACTION指令と異なり、リアルタイム性が高く、1つのSYNC WRITE指令で複数のサーボの制御テーブルを一度に変更できます。REG WRITE+ACTION指令はステップ方式で実現します。それでも、SYNC WRITE指令を使用する場合、書き込むデータ長とデータを保存する先頭アドレスは同一である必要があります。
例7: ID1-ID4の計4つのサーボの先頭アドレス0x2Aに位置0x0800、時間0X0000、速度0x03E8を書き込む(低位バイトが先、高位バイトが後)。
指令フレーム: FF FF FE 20 83 2A 06 01 00 08 00 00 E8 03 02 00 08 00 00 E8 03 03 00 08 00 00 E8 03 04 00 08 00 00 E8 03 58(16進数で送信)
ヘッダ: FF FF
ID: FE
実効データ長: 20
指令: 83
パラメータ:
2A 06(先頭アドレス データ長)
01 00 08 00 00 E8 03(ID1サーボ指令)
02 00 08 00 00 E8 03(ID2サーボ指令)
03 00 08 00 00 E8 03(ID3サーボ指令)
04 00 08 00 00 E8 03(ID4サーボ指令)
チェックサム: 584.7 同期読み取り指令SYNC READ
機能: 複数のサーボを同時に照会するために使用。
ID: 0xFE
長さ: n+4(nはサーボの数)
指令: 0x82
パラメータ1: データ読み取りの先頭アドレス
パラメータ2: 読み取りデータの長さ
パラメータ3: 1つ目のサーボのID番号
パラメータ4: 2つ目のサーボのID番号 …
パラメータN: n番目のサーボのID番号、N=n+2
1つのSYNC READ指令で複数のサーボの制御テーブルを一度に照会できます。同期読み取り指令では照会するサーボのIDを指定し、サーボは指令パケットのID順に応答パケットを返します。SYNC READ指令を使用する場合、照会する全データの長さとデータの先頭アドレスは同一である必要があります(この指令は一部のシリアルバスサーボでのみ利用可能です)。
例8: ID1-ID2の計2つのサーボの現在位置、現在速度、現在負荷、現在電圧、現在温度を照会する(先頭アドレス0x38、計8ワードデータ、低位バイトが先、高位バイトが後)。
指令フレーム: FF FF FE 06 82 38 08 01 02 36
ヘッダ: FF FF
ID: FE
長さ: 06
指令: 82
パラメータ:
38 08(データ先頭アドレス データ長)
01 02(ID01 ID02)
チェックサム: 36応答フレーム:
ID01サーボ: FF FF 01 0A 00 00 08 00 00 00 00 79 1E 55
ID02サーボ: FF FF 02 0A 00 FF 07 00 00 00 00 77 23 53応答フレームは読み取り指令に従ってデコードできます
4.8 ステータスリセット指令RESET
機能: サーボステータスをリセット(サーボの回転数をリセット)
長さ: 0x02
指令: 0x0A
パラメータ: なし
例9: サーボをリセット。ID番号は01。
指令フレーム: FF FF 01 02 0A F2(16進数で送信)
応答フレーム: FF FF 01 02 00 FC(16進数表示)4.9 位置キャリブレーション指令
機能: 現在位置を設定値に再キャリブレーション
長さ: 0x02または0x04
指令: 0x0B
パラメータ: なしまたは設定値
備考: 位置キャリブレーション指令にパラメータがない場合、現在位置を中央位置にキャリブレーションします。この指令は一部の型番のサーボのみ対応しています。対応状況は下の表を参照してください。
例10: 現在位置を中央位置に再キャリブレーション。
指令フレーム: FF FF 01 02 0B F1(16進数で送信)
応答フレーム: FF FF 01 02 00 FC(16進数表示)例11: 現在位置を1024に再キャリブレーション。
指令フレーム: FF FF 01 04 0B 00 04 EB(16進数で送信)
ヘッダ: FF FF
ID: 01
長さ: 04
指令: 0B
設定値: 00 04(1024)
チェックサム: EB応答フレーム: FF FF 01 02 00 FC(16進数表示)
ヘッダ: FF FF
ID: 01
長さ: 02
ステータス: 00
チェックサム: FC4.10 パラメータ復元指令
機能: ID番号以外のサーボパラメータを復元する
長さ: 0x02
指令: 0x06
パラメータ: なし
例11: サーボパラメータを復元。
指令フレーム: FF FF 01 02 06 F6(16進数で送信)
応答フレーム: FF FF 01 02 00 FC(16進数表示)備考: サーボパラメータを復元する前にepromパラメータをアンロックする
4.11 パラメータバックアップ指令
機能: パラメータバックアップ(パラメータ復元指令で使用)
長さ: 0x02
指令: 0x09
パラメータ: なし
例12: サーボパラメータをバックアップ。
指令フレーム: FF FF 01 02 09 F3(16進数で送信)
応答フレーム: FF FF 01 02 00 FC(16進数表示)備考: サーボパラメータをバックアップする前にepromパラメータをアンロックする
4.12 再起動指令
機能: 再起動指令(サーボを再起動)
長さ: 0x02
指令: 0x08
パラメータ: なし
例13: サーボを再起動。
指令フレーム: FF FF 01 02 08 F4(16進数で送信)
応答フレーム: なし(再起動時間は約800ms)備考: サーボを再起動する前にトルクスイッチをオフにする

