44: 2021-10-05 (火) 21:28:30 takaboo | 現: 2021-10-08 (金) 21:38:39 takaboo | ||
---|---|---|---|
Line 4: | Line 4: | ||
シリアル通信に関する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) | ||
Line 147: | Line 154: | ||
|~|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 |サンプル | | ||
Line 154: | Line 160: | ||
|~|~|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 |~| | ||
Line 188: | Line 193: | ||
***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] | ||
Line 234: | Line 241: | ||
****サンプルフォルダ内の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> | ||
}} | }} | ||
Line 356: | Line 363: | ||
#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> | ||
}} | }} | ||
Line 365: | Line 372: | ||
#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> | ||
Line 532: | Line 539: | ||
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 | ||
Line 553: | Line 560: | ||
--[[TDxAlarmStatus>#TDxAlarmStatus]] '''*AlarmStatus''' | --[[TDxAlarmStatus>#TDxAlarmStatus]] '''*AlarmStatus''' | ||
~検索で見つかったデバイス情報の保存先。~ | ~検索で見つかったデバイス情報の保存先。~ | ||
- | 少なくともnumで指定したサイズを確保しておく必要がある。 | + | 少なくともnumで指定したサイズ分の領域を確保しておく必要がある。 |
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
~エラーコード。 | ~エラーコード。 | ||
Line 572: | Line 579: | ||
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); | ||
Line 609: | Line 616: | ||
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); | ||
} | } | ||
Line 645: | Line 652: | ||
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); | ||
Line 682: | Line 689: | ||
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); | ||
} | } | ||
Line 717: | Line 724: | ||
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); | ||
} | } | ||
Line 750: | Line 757: | ||
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); | ||
} | } | ||
Line 785: | Line 792: | ||
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); | ||
} | } | ||
Line 819: | Line 826: | ||
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", | ||
Line 859: | Line 866: | ||
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); | ||
} | } | ||
Line 923: | Line 930: | ||
// 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 | ||
}; | }; | ||
Line 934: | Line 941: | ||
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); | ||
} | } | ||
Line 970: | Line 977: | ||
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); | ||
} | } | ||
Line 1012: | Line 1019: | ||
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]); |