44: 2021-10-05 (火) 21:28:30 takaboo |
現: 2021-10-08 (金) 21:38:39 takaboo |
| シリアル通信に関するAPI、タイミングやエラー処理、プロトコルの整合性チェック等を本ライブラリ内で行っているため、シリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができます。 | | シリアル通信に関するAPI、タイミングやエラー処理、プロトコルの整合性チェック等を本ライブラリ内で行っているため、シリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができます。 |
| | | |
- | なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE068C]]・[[BTE082]]・[[BTE083]]・[[BTE074]]・[[BTE079]]・[[BTE080]]・[[BTE079B]]・[[BTE080B]]・[[BTE079C]]・[[BTE080C]]・[[BTE096]]・[[BTX229>http://emanual.robotis.com/docs/en/parts/interface/u2d2/]]のいずれかがUSBポートに接続され、PCのOSに仮想COMポートが増設された状態で使用するものとします。[[BTE100]]の場合はRaspberry Piに依存します。 | + | なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE068C]]・[[BTE082]]・[[BTE083]]・[[BTE074]]・[[BTE079]]・[[BTE080]]・[[BTE079B]]・[[BTE080B]]・[[BTE079C]]・[[BTE080C]]・[[BTE096]]・[[BTE101]]・[[BTX229>http://emanual.robotis.com/docs/en/parts/interface/u2d2/]]のいずれかがUSBポートに接続され、PCのOSに仮想COMポートが増設された状態で使用するものとします。[[BTE100]]の場合はRaspberry Piに依存します。 |
| | | |
| **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] | | **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] |
| 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 | | 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 |
- | -''2021/10/8 Ver.4.5''~ | + | -''2022/3/1 Ver.4.6''~ |
| + | #ref(https://www.besttechnology.co.jp/download/DXLIB_V4.6.zip) |
| + | 更新内容 |
| + | --最新GCC Developer Liteの更新に伴うコンパイル環境の調整 |
| + | --新しく追加されたDynamixelの定義を追加 |
| + | --コンパイル用バッチファイルの名称を変更 |
| + | --バッチファイル中のパスの指定はジャンクションを使用する事で空白を含むファイル名によるコンパイル時の問題を回避 |
| + | -2021/10/8 Ver.4.5~ |
| 更新内容 | | 更新内容 |
| #ref(https://www.besttechnology.co.jp/download/DXLIB_V4.5.zip) | | #ref(https://www.besttechnology.co.jp/download/DXLIB_V4.5.zip) |
| |~|dxlib.py|<|python用API定義 | | | |~|dxlib.py|<|python用API定義 | |
| |~|dxmemmap.h|<|DX/AX/RX/EX/MXシリーズ用コントロールテーブル定義ヘッダ | | | |~|dxmemmap.h|<|DX/AX/RX/EX/MXシリーズ用コントロールテーブル定義ヘッダ | |
- | |~|makelib.bat|<|ライブラリ再構築用バッチ | | + | |~|makelib.cmd|<|ライブラリ再構築用バッチ | |
- | |~|83.bat|<|~| | + | |
| |~|build_dxlib.sh|<|Linux向けライブラリ再構築用スクリプト | | | |~|build_dxlib.sh|<|Linux向けライブラリ再構築用スクリプト | |
| |SampleCode|C|smpl??.c |サンプル | | | |SampleCode|C|smpl??.c |サンプル | |
| |~|~|kbhit.h |kbhitエミュレーション | | | |~|~|kbhit.h |kbhitエミュレーション | |
| |~|~|makefile |サンプルコンパイル用makefile | | | |~|~|makefile |サンプルコンパイル用makefile | |
- | |~|~|makewin.bat|Windows向け再構築用バッチ | | + | |~|~|makeexe.cmd|Windows向け再構築用バッチ | |
- | |~|~|83.bat|~| | + | |
| |~|~|dxlib.h |DXLIBフォルダに収録されるものと同一 | | | |~|~|dxlib.h |DXLIBフォルダに収録されるものと同一 | |
| |~|~|dxmemmap.h |~| | | |~|~|dxmemmap.h |~| |
| ***GCC Developer Lite [#e1d4017c] | | ***GCC Developer Lite [#e1d4017c] |
| GCC Developer Liteの詳細については[[こちら>GCC Developer Lite]]。~ | | GCC Developer Liteの詳細については[[こちら>GCC Developer Lite]]。~ |
- | 'SampleCode\GCCDeveloperLite'フォルダにはAPIの基本的な使い方を紹介したサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。 | + | 「基本パック」と「WINパック」を[[ダウンロード>GCC Developer Lite#DOWNLOAD]]してインストールしてください。 |
| + | |
| + | 'SampleCode\C'フォルダにはAPIの基本的な使い方を紹介したサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。 |
| | | |
| ****DLLの静的リンク [#la562acf] | | ****DLLの静的リンク [#la562acf] |
| | | |
| ****サンプルフォルダ内のmakefileを使用 [#h09786e4] | | ****サンプルフォルダ内のmakefileを使用 [#h09786e4] |
- | サンプルをコンパイルするだけならばGCC Developer Liteを起動する必要は無く、サンプルフォルダ内に同梱される「makewin.bat」を実行すればmakefileを読み込んでGCC Developer Liteに同梱されるmakeを使用してコンパイルします。~ | + | サンプルをコンパイルするだけならばGCC Developer Liteを起動する必要は無く、サンプルフォルダ内に同梱される「makeexe.cmd」を実行すればmakefileを読み込んでGCC Developer Liteに同梱されるmakeを使用してコンパイルします。~ |
| 引数にソース名をしていするとそのソースだけコンパイル、何も付けなければフォルダ内の拡張子がCのソースファイル全てがコンパイル対象となります。 | | 引数にソース名をしていするとそのソースだけコンパイル、何も付けなければフォルダ内の拡張子がCのソースファイル全てがコンパイル対象となります。 |
| #html{{ | | #html{{ |
| <pre class="brush: bash;"> | | <pre class="brush: bash;"> |
- | makewin smpl4_byte_rw (特定のソースのみコンパイル) | + | makeexe smpl4_byte_rw (特定のソースのみコンパイル) |
- | makewin (カレントの全ソースをコンパイル) | + | makeexe (カレントの全ソースをコンパイル) |
| </pre> | | </pre> |
| }} | | }} |
| #html{{ | | #html{{ |
| <pre class="brush: bash;"> | | <pre class="brush: bash;"> |
- | wget https://www.besttechnology.co.jp/download/DXLIB_V4.5.zip | + | wget https://www.besttechnology.co.jp/download/DXLIB_V4.6.zip |
- | unzip DXLIB_V4.5.zip | + | unzip DXLIB_V4.6.zip |
| </pre> | | </pre> |
| }} | | }} |
| #html{{ | | #html{{ |
| <pre class="brush: bash;"> | | <pre class="brush: bash;"> |
- | cd DXLIB_v4.5/DXLIB | + | cd DXLIB_v4.6/DXLIB |
| bash ./build_dxlib.sh | | bash ./build_dxlib.sh |
| </pre> | | </pre> |
| if (dev) { | | if (dev) { |
| // ID=1にPINGを発行 | | // ID=1にPINGを発行 |
- | if (DX_Ping (dev, 1, &err)) | + | if (DX_Ping (dev, 1, &err)) |
| printf ("Found [%08X]\n", err); | | printf ("Found [%08X]\n", err); |
| else | | else |
| --[[TDxAlarmStatus>#TDxAlarmStatus]] '''*AlarmStatus''' | | --[[TDxAlarmStatus>#TDxAlarmStatus]] '''*AlarmStatus''' |
| ~検索で見つかったデバイス情報の保存先。~ | | ~検索で見つかったデバイス情報の保存先。~ |
- | 少なくともnumで指定したサイズを確保しておく必要がある。 | + | 少なくともnumで指定したサイズ分の領域を確保しておく必要がある。 |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ~エラーコード。 | | ~エラーコード。 |
| if (dev) { | | if (dev) { |
| // 不明な対象に対してPINGを発行 | | // 不明な対象に対してPINGを発行 |
- | if (DX_Ping2 (dev, &num, stat, &err)) { | + | if (DX_Ping2 (dev, &num, stat, &err)) { |
| for (i = 0; i < num; i++) | | for (i = 0; i < num; i++) |
| printf ("Found ID=%d %02X\n", stat[i].id, stat[i].Status); | | printf ("Found ID=%d %02X\n", stat[i].id, stat[i].Status); |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12からLEDの状態を取得 | | // ID=1のAX-12からLEDの状態を取得 |
- | if (DX_ReadByteData (dev, 1, 25, &dat, &err)) { | + | if (DX_ReadByteData (dev, 1, 25, &dat, &err)) { |
| printf ("LED STAT=%d\n", dat); | | printf ("LED STAT=%d\n", dat); |
| } | | } |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12からLEDの状態を取得 | | // ID=1のAX-12からLEDの状態を取得 |
- | if (DX_ReadByteData (dev, 1, 25, &dat, &err)) { | + | if (DX_ReadByteData (dev, 1, 25, &dat, &err)) { |
| dat ^= 1; // ビット反転 | | dat ^= 1; // ビット反転 |
| // ID=1のAX-12へLEDの状態を設定 | | // ID=1のAX-12へLEDの状態を設定 |
- | DX_WriteByteData (dev, 1, 25, dat, &err); | + | DX_WriteByteData (dev, 1, 25, dat, &err); |
| } | | } |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12から現在位置を取得 | | // ID=1のAX-12から現在位置を取得 |
- | if (DX_ReadWordData (dev, 1, 36, &dat, &err)) { | + | if (DX_ReadWordData (dev, 1, 36, &dat, &err)) { |
| printf ("PRESENT POS=%d\n", dat); | | printf ("PRESENT POS=%d\n", dat); |
| } | | } |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12へ位置(511)を指令 | | // ID=1のAX-12へ位置(511)を指令 |
- | DX_WriteWordData (dev, 1, 30, 511, &err); | + | DX_WriteWordData (dev, 1, 30, 511, &err); |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| } | | } |
| if (dev) { | | if (dev) { |
| // ID=1のXM430から現在位置を取得 | | // ID=1のXM430から現在位置を取得 |
- | if (DX_ReadLongData (dev, 1, 132, &dat, &err)) { | + | if (DX_ReadLongData (dev, 1, 132, &dat, &err)) { |
| printf ("PRESENT POS=%d\n", dat); | | printf ("PRESENT POS=%d\n", dat); |
| } | | } |
| if (dev) { | | if (dev) { |
| // ID=1のXM430へ位置(1024)を指令 | | // ID=1のXM430へ位置(1024)を指令 |
- | DX_WriteLongData (dev, 1, 30, 1024, &err); | + | DX_WriteLongData (dev, 1, 30, 1024, &err); |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| } | | } |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12+からコンプライアンスのデータを取得 | | // ID=1のAX-12+からコンプライアンスのデータを取得 |
- | if (DX_ReadBlockData (dev, 1, 26, comp, 4, &err) { | + | if (DX_ReadBlockData (dev, 1, 26, comp, 4, &err) { |
| printf ( | | printf ( |
| "CWM=%d CCWM=%d CWS=%d CCWS=%d\n", | | "CWM=%d CCWM=%d CWS=%d CCWS=%d\n", |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12+のコンプライアンスを変更 | | // ID=1のAX-12+のコンプライアンスを変更 |
- | DX_WriteBlockData (dev, 1, 26, comp, 4, &err); | + | DX_WriteBlockData (dev, 1, 26, comp, 4, &err); |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| } | | } |
| // ID=1用データ | | // ID=1用データ |
| 1, | | 1, |
- | _POS1 & 0xff, | + | _POS1 & 0xff, |
| _POS1 >> 8, | | _POS1 >> 8, |
| // ID=2用データ | | // ID=2用データ |
| 2, | | 2, |
- | _POS2 & 0xff, | + | _POS2 & 0xff, |
| _POS2 >> 8 | | _POS2 >> 8 |
| }; | | }; |
| if (dev) { | | if (dev) { |
| // 2つのAX-12へ同時に位置を指令 | | // 2つのAX-12へ同時に位置を指令 |
- | DX_WriteSyncData (dev, param, 8, &err); | + | DX_WriteSyncData (dev, param, 8, &err); |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| } | | } |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12+のLEDを消灯 | | // ID=1のAX-12+のLEDを消灯 |
- | DX_TxPacket (dev, 1, INST_WRITE, param, 2, &err); | + | DX_TxPacket (dev, 1, INST_WRITE, param, 2, &err); |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| } | | } |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12+からLEDの状態を読み出す要求 | | // ID=1のAX-12+からLEDの状態を読み出す要求 |
- | if (DX_TxPacket (dev, 1, INST_READ, param, 2, &err)) { | + | if (DX_TxPacket (dev, 1, INST_READ, param, 2, &err)) { |
| // ステータスパケットを受信 | | // ステータスパケットを受信 |
- | DX_RxPacket (dev, dat, sizeof (dat), &len, 100, &err); | + | DX_RxPacket (dev, dat, sizeof (dat), &len, 100, &err); |
| for (i = 0; i < len; i++) { | | for (i = 0; i < len; i++) { |
| printf ("[%02X]", dat[i]); | | printf ("[%02X]", dat[i]); |