39: 2016-12-04 (Sun) 21:50:40 takaboo source Cur: 2019-11-16 (Sat) 18:38:51 takaboo source
Line 4: Line 4:
シリアル通信に関するAPI、タイミングやエラー処理、プロトコルの整合性チェック等を本ライブラリ内で行っているため、シリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができます。 シリアル通信に関するAPI、タイミングやエラー処理、プロトコルの整合性チェック等を本ライブラリ内で行っているため、シリアル通信である事をほとんど意識すること無くアプリケーションの作りこみに専念することができます。
-なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE082]]・[[BTE083]]・[[BTE074]]・[[BTE079]]・[[BTE080]]のいずれかがUSBポートに接続され、PCのOSに仮想COMポートが増設された状態で使用するものとします。+なお、PCと[[BTE061D]]・[[BTE061E]]・[[BTE068]]・[[BTE068B]]・[[BTE068C]]・[[BTE082]]・[[BTE083]]・[[BTE074]]・[[BTE079]]・[[BTE080]]・[[BTE079B]]・[[BTE080B]]・[[BTX229>http://emanual.robotis.com/docs​/en/parts/interface/u2d2/]]のいずれかがUSBポートに接続され、PCのOSに仮想COMポートが増設された状態で使用するものとします。
**ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f]
以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。
--''2016/07/13 Ver.3.3''~+-''2019/11/15 Ver.4.3''~ 
 +#ref(http://www.besttechnology.co.jp/dow​nload/DXLIB_V4.3.zip) 
 +内容 
 +--Visual Studio上での動作検証を行いヘッダを一部修正 
 +--ライブラリソースのエンコードをUTF-8のBOM付きに統一 
 +--新しく追加されたDynamixelの定義を追加 
 +-2019/03/27 Ver.4.2~ 
 +#ref(http://www.besttechnology.co.jp/dow​nload/DXLIB_V4.2.zip) 
 +内容 
 +--追加APIの正式リリース 
 +--C言語による追加APIのサンプルプログラムを拡充 
 +--Pythonによるサンプルプログラムを拡充 
 +-2016/07/13 Ver.3.3~
#ref(http://www.besttechnology.co.jp/dow​nload/DXLIB_V3.3.zip) #ref(http://www.besttechnology.co.jp/dow​nload/DXLIB_V3.3.zip)
内容 内容
Line 113: Line 125:
|~|dxlib.h|<|ライブラリヘッダ | |~|dxlib.h|<|ライブラリヘッダ |
|~|dxlib_matlab.h|<|matlab用ヘッダ | |~|dxlib_matlab.h|<|matlab用ヘッダ |
 +|~|dxlib.py|<|python用API定義 |
|~|dxmemmap.h|<|DX/AX/RX/EX/MXシリーズ用コントロールテーブル定義ヘッダ | |~|dxmemmap.h|<|DX/AX/RX/EX/MXシリーズ用コントロールテーブル定義ヘッダ |
|~|makelib.bat|<|ライブラリ再構築用バッチ | |~|makelib.bat|<|ライブラリ再構築用バッチ |
|~|83.bat|<|~| |~|83.bat|<|~|
-|SampleCode|GCCDeveloperLite|smpl1(template).c |サンプル +|SampleCode|GCCDeveloperLite|smpl*.c |サンプル |
-|~|~|smpl2(ping).c |~| +
-|~|~|smpl3(byte_rw).c |~| +
-|~|~|smpl4(word_rw).c |~| +
-|~|~|smpl5(multithread).c |~| +
-|~|~|smpl6(sync).c |~| +
-|~|~|smpl7(rawpacket).c |~| +
-|~|~|smpl8(dualport).c |~| +
-|~|~|smpl9(DynamicLoad).c |~| +
-|~|~|smpl10(USS3).c |~|+
|~|~|dxlib.h |DXLIBフォルダに収録されるものと同一 | |~|~|dxlib.h |DXLIBフォルダに収録されるものと同一 |
|~|~|dxmemmap.h |~| |~|~|dxmemmap.h |~|
Line 136: Line 140:
|~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 | |~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 |
|~|~|dxlib_x64.dll |~| |~|~|dxlib_x64.dll |~|
-|~|LabVIEW2011|sample1.vi |サンプル +|~|LabVIEW2011|sample*.vi |サンプル |
-|~|~|sample2.vi |~| +
-|~|~|sample3.vi |~| +
-|~|~|sample4.vi |~| +
-|~|~|sample5.vi |~| +
-|~|~|sample6.vi |~| +
-|~|~|WaveForm.vi |サブvi |+
|~|~|DXLIB.llb |dllの呼び出しをvi化 | |~|~|DXLIB.llb |dllの呼び出しをvi化 |
 +|~|~|DXLIB_DXL.llb |dllの呼び出しをvi化 |
|~|~|DXLIB_Wrapper.llb |アクチュエータに特化したvi | |~|~|DXLIB_Wrapper.llb |アクチュエータに特化したvi |
|~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 | |~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 |
Line 149: Line 148:
|~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 | |~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 |
|~|~|dxlib_x64.dll |~| |~|~|dxlib_x64.dll |~|
-|~|Linux|smpl2.c |サンプル | +|~|Linux|smpl*.c |サンプル | 
-|~|~|smpl4.c |~+|~|Ruby|smpl*.rb |サンプル
-|~|Ruby|SMPL1.c |サンプル | +|~|Python|smpl*.py |サンプル | 
-|~|~|SMPL3.c |~+|~|~|dxlib.py |DXLIBフォルダに収録されるものと同一
-|~|Python|SMPL1.py |サンプル +|~|~|dxlib_x32.dll |~
-|~|~|SMPL3.py |~|+|~|~|dxlib_x64.dll |~|
**開発環境毎の設定 [#u3ff03d9] **開発環境毎の設定 [#u3ff03d9]
Line 258: Line 257:
***Python [#mc6a5a49] ***Python [#mc6a5a49]
-'SampleCode\Ruby'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。~ +'SampleCode\Python'フォルダにサンプルが同梱されます。ポート・ボーレート・ID等は使用する環境に合わせて適宜修正して使用します。~ 
-[[Python:http://www.python.jp/Zope]]はオープンソースの動的なプログラミング言語で、外部のDLLへ簡易にアクセスすることが出来ます。~ +[[Python:http://www.python.jp/]]はオープンソースの動的なプログラミング言語で、外部のDLLへ簡易にアクセスすることが出来ます。~ 
-LinuxでLoadLibraryを呼び出す際はcdllインスタンスを使用します。 +各APIのPython用の宣言を定義したdxlib.pyをimportするだけで済みます。 
-  dxlib = windll.LoadLibrary( "dxlib_x32.dll" )  # for window + from dxlib import *   # dxlibをインポート
-  dxlib = cdll.LoadLibrary( "./dxlib.so" )   # for linux+
***Java [#ceff395d] ***Java [#ceff395d]
Line 290: Line 288:
+コンパイル準備~ +コンパイル準備~
ダウンロードファイルを解凍~ ダウンロードファイルを解凍~
-+オブジェクトファイルの作成++ライブラリファイルの生成
-  gcc dxlib.cpp -o dxlib.o+ $ gcc -c -D__MAKE_LIB__ dxlib_intuitive.cpp dxlib.cpp 
 + $ ar -rcsv libdxlib.a dxlib_intuitive.o dxlib.o
+共有ライブラリの作成~ +共有ライブラリの作成~
-RubyやPython等で使用する場合のみ。+RubyやPython等で使用する場合等
-  gcc -fPIC -shared dxlib.cpp -o dxlib.so + $ gcc -fPIC -shared -D__MAKE_LIB__ dxlib_intuitive.cpp dxlib.cpp -o dxlib.so.4.2 
-+コンパイル++ユーザプログラムとのリンク
-dxlibのオブジェクトファイルとC言語ソースを合わせてコンパイルする。~+生成したライブラリファイルと自身のソースをリンクする。~
ポート・ボーレート等は使用する環境に合わせて適宜追加・修正する。~ ポート・ボーレート等は使用する環境に合わせて適宜追加・修正する。~
ライブラリは必要に合わせて追加する。~ ライブラリは必要に合わせて追加する。~
-  gcc sample.c dxlib.o -o sample+ $ gcc sample.c -ldxlib -o sample
なお、コンパイルや実行にあたってI/Fやカーネル・ディストリビューションに依存するのがLinuxですので、そのまま使用できない場合は適宜ソースを修正下さい。 なお、コンパイルや実行にあたってI/Fやカーネル・ディストリビューションに依存するのがLinuxですので、そのまま使用できない場合は適宜ソースを修正下さい。
Line 598: Line 597:
   // 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_ReadLongData [#w341e7a5]
 +対象IDのコントロールテーブルから2ワード(4バイト)のデータを読み出す。
 + bool DX_ReadLongData(TDeviceID dvid, uint8_t id, uint16_t adr, uint32_t *rdata, TErrorCode *err);
 +-パラメータ
 +--[[TDeviceID>#TDeviceID]] '''dvid'''
 +~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。
 +--uint8_t '''id'''
 +~対象とするID (0~253)。
 +--uint16_t '''adr'''
 +~コントロールテーブルのアドレス。
 +--uint32_t '''*rdata'''
 +~読み出した値の保存先。
 +--[[TErrorCode>#TErrorCode]] '''*err'''
 +~エラーコード。
 +-戻り値
 +--bool
 +~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
 +-使用例
 + TDeviceID  dev;
 + TErrorCode err;
 + uint32_t  dat;
 + // オープン
 + dev = DX_OpenPort ("\\\\.\\COM10", 1000000);
 + if (dev) {
 +   // ID=1のXM430から現在位置を取得
 +   if (DX_ReadLongData (dev, 1, 132, &dat, &err)) {
 +     printf ("PRESENT POS=%d\n", dat);
 +   }
 +   DX_ClosePort (dev);
 + }
 +
 +***DX_WriteLongData [#k42e5e5f]
 +対象IDのコントロールテーブルへ2ワード(4バイト)のデータを書き込む。
 + bool DX_WriteLongData(TDeviceID dvid, uint8_t id, uint16_t adr, uint32_t dat, TErrorCode *err);
 +-パラメータ
 +--[[TDeviceID>#TDeviceID]] '''dvid'''
 +~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。
 +--uint8_t '''id'''
 +~対象とするID (0~253, 254)。
 +--uint16_t '''adr'''
 +~コントロールテーブルのアドレス。
 +--uint32_t '''dat'''
 +~書き込む値。
 +--[[TErrorCode>#TErrorCode]] '''*errcode'''
 +~エラーコード。
 +-戻り値
 +--bool
 +~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
 +BROADCASTING IDを指定した場合は応答待ちを行わない。
 +-使用例
 + TDeviceID  dev;
 + TErrorCode err;
 + // オープン
 + dev = DX_OpenPort ("\\\\.\\COM10", 1000000);
 + if (dev) {
 +   // ID=1のXM430へ位置(1024)を指令
 +   DX_WriteLongData (dev, 1, 30, 1024, &err);
   DX_ClosePort (dev);    DX_ClosePort (dev);
 }  }
Line 715: Line 774:
 #define _POS1 (400)  #define _POS1 (400)
 #define _POS2 (511)  #define _POS2 (511)
 + 
 TDeviceID  dev;  TDeviceID  dev;
 TErrorCode err;  TErrorCode err;
Line 730: Line 789:
   _POS2 >> 8    _POS2 >> 8
 };  };
 + 
 dev = DX_OpenPort ("\\\\.\\COM10", 1000000);  dev = DX_OpenPort ("\\\\.\\COM10", 1000000);
 if (dev) {  if (dev) {
Line 800: Line 859:
   1,    // サイズ    1,    // サイズ
 };  };
 + 
 dev = DX_OpenPort ("\\\\.\\COM10", 1000000);  dev = DX_OpenPort ("\\\\.\\COM10", 1000000);
 if (dev) {  if (dev) {
Line 855: Line 914:
|1|ERR_DX_ANGLE|Angle Limitの範囲外にGoal Positionが指定された| |1|ERR_DX_ANGLE|Angle Limitの範囲外にGoal Positionが指定された|
|0|ERR_DX_OVERVOLTAGE|電源電圧が指定動作電圧の範囲を超えた| |0|ERR_DX_OVERVOLTAGE|電源電圧が指定動作電圧の範囲を超えた|
 +
 +**追加API [#i7e58b8f]
 +#include(DXL_intuitive,notitle)


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)