5: 2016-10-23 (日) 17:27:03 takaboo |
6: 2016-12-04 (日) 21:50:48 takaboo |
- | TITLE:Dynamixel2 Library | + | TITLE:Dynamixel Protocol 2 Library |
| **概要 [#va21cbfb] | | **概要 [#va21cbfb] |
- | Dynamixel2 LibraryはDynamixel2の通信プロトコルをサポートした製品をWindows等のOSから操作するためのライブラリ集です。~ | + | Dynamixel Protocol 2 Libraryは[[DYNAMIXEL Communiation Protocol 2.0]]に対応した製品をWindows等のOSから操作するためのライブラリ集です。~ |
- | 従来はユーザ自らシリアル通信に関するAPIを使用してタイミングやエラー処理を加えて利用するものでしたが、本APIを介する事でシリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができるはずです。 | + | シリアル通信に関するAPI、タイミングやエラー処理、プロトコルの整合性チェック等をライブラリ内で行うため、シリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができます。 |
| | | |
- | なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE082]]・[[BTE083]]のいずれかがUSBケーブルで接続され、PC上にWindowsのデバイスとして仮想COMポートが増設された状態で使用するものとします。 | + | なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE082]]・[[BTE083]]・[[BTE074]]・[[BTE079]]・[[BTE080]]のいずれかがUSBポートに接続され、PCのOSに仮想COMポートが増設された状態で使用するものとします。 |
| | | |
- | |CENTER:BGCOLOR(red): :idea:|Dynamixel2プロトコルと[[旧来のDynamixelプロトコル>DXLIB]]を装備した装置は同一ノードでの運用はできない。| | + | |CENTER:BGCOLOR(red): :idea:|[[DYNAMIXEL Communiation Protocol 1.0]]と[[DYNAMIXEL Communiation Protocol 2.0]]を装備した装置を同一ネットワーク上で同時に運用する事は推奨できない。| |
| | | |
| **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] | | **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] |
| 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 | | 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 |
- | -''2016/09/xx Ver.1.3''~ | + | -''2016/12/05 Ver.1.3beta''~ |
- | #ref(http://www.besttechnology.co.jp/download/DX2LIB_V1.0.zip) | + | #ref(http://www.besttechnology.co.jp/download/DX2LIB_V1.3beta.zip) |
| 内容 | | 内容 |
- | --初期リリース~ | + | --ベータリリース~ |
| | | |
- | アーカイブファイルには以下のファイルが同梱されます。必要に応じて解凍してください。 | + | アーカイブファイルには以下のファイルが同梱されます。必要に応じて解凍してください(ベータ版では一部欠損)。 |
| |DX2LIB|dx2lib_x32.dll|<|ライブラリ本体 | | | |DX2LIB|dx2lib_x32.dll|<|ライブラリ本体 | |
| |~|dx2lib_x64.dll|<|~| | | |~|dx2lib_x64.dll|<|~| |
| } | | } |
| } | | } |
- | DX2_ClosePort (dev); | |
- | }; | |
- | | |
- | ***DX2_TxPacket [#r051327a] | |
- | 任意のインストラクションパケットを送信する。 | |
- | bool DX2_TxPacket (TDeviceID dvid, uint8_t id, TInstruction inst, uint8_t *param, uint32_t len, TErrorCode *err); | |
- | -パラメータ | |
- | --[[TDeviceID>#TDeviceID]] '''dvid''' | |
- | ~DX2_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | |
- | --uint8_t '''id''' | |
- | ~対象とするID (0~254)。 | |
- | --[[TInstruction>#TInstruction]] '''inst''' | |
- | ~使用するインストラクション。 | |
- | --uint8_t '''*param''' | |
- | ~送信するパラメータの保存先。 | |
- | --uint32_t '''len'''~ | |
- | ~送信するパラメータのサイズ。 | |
- | --[[TErrorCode>#TErrorCode]] '''*err''' | |
- | ~エラーコード。 | |
- | -戻り値 | |
- | ~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。 | |
- | -使用例 | |
- | TDeviceID dev; | |
- | TErrorCode err; | |
- | uint8_t param[2] = { | |
- | 25, // アドレス (LED) | |
- | 0, // データ | |
- | }; | |
- | dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); | |
- | if (dev) { | |
- | // ID=1のAX-12+のLEDを消灯 | |
- | DX2_TxPacket (dev, 1, INST_WRITE, param, 2, &err); | |
| DX2_ClosePort (dev); | | DX2_ClosePort (dev); |
| }; | | }; |
| // 3台のXM430へ個別の情報を書き込み | | // 3台のXM430へ個別の情報を書き込み |
| DX2_WriteBulkData (dev, (uint8_t *)&BW, sizeof(BW), &err); | | DX2_WriteBulkData (dev, (uint8_t *)&BW, sizeof(BW), &err); |
| + | DX2_ClosePort (dev); |
| + | }; |
| + | |
| + | ***DX2_TxPacket [#r051327a] |
| + | 任意のインストラクションパケットを送信する。 |
| + | bool DX2_TxPacket (TDeviceID dvid, uint8_t id, TInstruction inst, uint8_t *param, uint32_t len, TErrorCode *err); |
| + | -パラメータ |
| + | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| + | ~DX2_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 |
| + | --uint8_t '''id''' |
| + | ~対象とするID (0~254)。 |
| + | --[[TInstruction>#TInstruction]] '''inst''' |
| + | ~使用するインストラクション。 |
| + | --uint8_t '''*param''' |
| + | ~送信するパラメータの保存先。 |
| + | --uint32_t '''len'''~ |
| + | ~送信するパラメータのサイズ。 |
| + | --[[TErrorCode>#TErrorCode]] '''*err''' |
| + | ~エラーコード。 |
| + | -戻り値 |
| + | ~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。 |
| + | -使用例 |
| + | TDeviceID dev; |
| + | TErrorCode err; |
| + | uint8_t param[2] = { |
| + | 25, // アドレス (LED) |
| + | 0, // データ |
| + | }; |
| + | dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); |
| + | if (dev) { |
| + | // ID=1のAX-12+のLEDを消灯 |
| + | DX2_TxPacket (dev, 1, INST_WRITE, param, 2, &err); |
| DX2_ClosePort (dev); | | DX2_ClosePort (dev); |
| }; | | }; |
| INST_BULK_WRITE | | INST_BULK_WRITE |
| &aname(TDxAlarmStatus); | | &aname(TDxAlarmStatus); |
- | :TDx2AlarmStatus | struct {&br; uint8_t id;&br; TErrorCode Status;&br; | + | :TDx2AlarmStatus | struct {&br; uint8_t id;&br; TErrorCode Status;&br; |
| }~ | | }~ |
| idとTErrorCodeを対にした構造体でアライメントは1バイト。[[DX2_Ping2>#g16504b3]]で使用される。 | | idとTErrorCodeを対にした構造体でアライメントは1バイト。[[DX2_Ping2>#g16504b3]]で使用される。 |
| &aname(TSyncReadParam); | | &aname(TSyncReadParam); |
- | :TSyncReadParam | struct {&br; uint16_t addr;&br; uint16_t length;&br; uint8_t ids[254];&br;}~ | + | :TSyncReadParam | struct {&br; uint16_t addr;&br; uint16_t length;&br; uint8_t ids[256];&br;}~ |
| addr, length, idsをまとめた構造体でアライメントは1バイト。[[DX2_ReadSyncData>#iac9751e]]で使用される。 | | addr, length, idsをまとめた構造体でアライメントは1バイト。[[DX2_ReadSyncData>#iac9751e]]で使用される。 |
| &aname(TBulkReadParam); | | &aname(TBulkReadParam); |
- | :TBulkReadParam | struct {&br; uint8_t id;&br; uint16_t addr;&br; uint16_t length;&br;}~ | + | :TBulkReadParam | struct {&br; uint8_t id;&br; uint16_t addr;&br; uint16_t length;&br;}~ |
| id, addr, lengthをまとめた構造体でアライメントは1バイト。[[DX2_ReadBulkData>#wf7d9427]]で使用される。 | | id, addr, lengthをまとめた構造体でアライメントは1バイト。[[DX2_ReadBulkData>#wf7d9427]]で使用される。 |
| &aname(TBulkReadResult); | | &aname(TBulkReadResult); |
- | :TBulkReadResult| struct {&br; uint16_t size;&br; uint8_t id;&br; TErrorCode err;&br; uint8_t dat[];&br;}~ | + | :TBulkReadResult| struct {&br; uint16_t size;&br; uint8_t id;&br; TErrorCode err;&br; uint8_t dat[];&br;}~ |
| size, id, err, datをまとめた構造体でアライメントは1バイト。[[DX2_ReadBulkData>#wf7d9427]]で読み出されたデータのアクセスに使用される。 | | size, id, err, datをまとめた構造体でアライメントは1バイト。[[DX2_ReadBulkData>#wf7d9427]]で読み出されたデータのアクセスに使用される。 |
| &aname(TErrorCode); | | &aname(TErrorCode); |
| |8|ERR_TIMEOUT|受信タイムアウト | | | |8|ERR_TIMEOUT|受信タイムアウト | |
| |7|ERR_DX2_ALERT|ハード的な異常検出 | | | |7|ERR_DX2_ALERT|ハード的な異常検出 | |
- | |6|ERR_DX2_LENGTHLONG=6&br;ERR_DX2_LENGTHSHORT=5&br;ERR_DX2_OVERRANGE=4&br;ERR_DX2_CRCERROR=3&br;ERR_DX2_UNDEFINST=2&br;ERR_DX2_INSTERROR=1|パケットの処理や数値範囲に関するエラー | | + | |6|ERR_DX2_ACCESS=7&br;ERR_DX2_DATALIMIT=6&br;ERR_DX2_DATALENGTH=5&br;ERR_DX2_DATARANGE=4&br;ERR_DX2_CRC=3&br;ERR_DX2_INSTRUCTION=2&br;ERR_DX2_RESULT=1|パケットの処理や数値範囲に関するエラー | |
| |5|~|~| | | |5|~|~| |
| |4|~|~| | | |4|~|~| |