4: 2017-12-21 (木) 00:34:44 takaboo ソース 5: 2017-12-22 (金) 00:34:28 takaboo ソース
Line 3: Line 3:
***DXL_ScanDevices [#o2bbf83a] ***DXL_ScanDevices [#o2bbf83a]
-全IDのレンジでデバイスをスキャンし、成功したIDのみライブラリ内のテーブルにその情報が反映され、以後プレフィクスにDXL_SetないしDXL_Getが付与されるAPIが使用できるようになる。~+全IDのレンジでデバイスをスキャンし、成功したIDのみライブラリ内のテーブルにその情報が反映され、以後プレフィクスに「DXL_Set」ないし「DXL_Get」が付与されるAPIが使用できるようになる。~
ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。~ ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。~
また全IDをスキャンし終えるまでには時間がかかるため、IDが明確にわかっている場合はDXL_GetModelInfoの使用を推奨する。 また全IDをスキャンし終えるまでには時間がかかるため、IDが明確にわかっている場合はDXL_GetModelInfoの使用を推奨する。
 int DXL_ScanDevices(TDeviceID dvid);  int DXL_ScanDevices(TDeviceID dvid);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +-戻り値
 +--bool~
 +~検出されたデバイスの数を返す。~
 +-使用例
 + TDeviceID dev;
 + // COM10を57600bpsでオープン
 + dev = DX_OpenPort ("\\\\.\\COM10", 9600);
 + // デバイスをスキャン
 + DXL_ScanDevices (dev);
***DXL_GetModelInfo [#j50f584f] ***DXL_GetModelInfo [#j50f584f]
-指定IDのデバイス情報の読み出しに成功するとライブラリ内のテーブルにその情報が反映され、以後プレフィクスにDXL_SetないしDXL_Getが付与されるAPIが使用できるようになる。~+指定IDのデバイス情報の読み出しに成功するとライブラリ内のテーブルにその情報が反映され、以後プレフィクスに「DXL_Set」ないし「DXL_Get」が付与されるAPIが使用できるようになる。~
ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。 ライブラリ内のテーブルが更新されないまま存在しているIDに対してDXL_Set~やDXL_Get~のAPIを使用すると、何の処理も行わずに即時復帰する。
- PDXL_ModelInfo DXL_GetModelInfo(TDeviceID dvid, uint8_t id);+ TDXL_ModelInfo *DXL_GetModelInfo(TDeviceID dvid, uint8_t id); 
 + 
 +-パラメータ 
 +--TDeviceID '''dvid''' 
 +~オープン済のDeviceIDを指定。~ 
 +--uint8_t '''id''' 
 +~検索対象のIDを指定。~ 
 +-戻り値 
 +--[[TDXL_ModelInfo>#TDXL_ModelInfo]] *~ 
 +~内部のDynamixelの情報と一致するテーブルのポインタを返す。~ 
 +-使用例 
 + TDeviceID dev; 
 + // COM10を57600bpsでオープン 
 + dev = DX_OpenPort ("\\\\.\\COM10", 57600); 
 + // ID=1のデバイス情報を取得 
 + DXL_GetModelInfo (dev, 1);
***DXL_PrintDevicesList [#s3fd9115] ***DXL_PrintDevicesList [#s3fd9115]
Line 20: Line 47:
Xシリーズなどのコントロールテーブル上にハードウェアエラーの情報がある場合に限りその値を取得する。 Xシリーズなどのコントロールテーブル上にハードウェアエラーの情報がある場合に限りその値を取得する。
 TErrorCode DXL_GetErrorCode(TDeviceID dvid, uint8_t id);  TErrorCode DXL_GetErrorCode(TDeviceID dvid, uint8_t id);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
 +
 +***DXL_SetOperatingMode [#r5844545]
 +動作モードを指定IDへ指令する。~
 +設定時にトルクがディスエーブルされる。また、デバイスがサポートしないモードを指定した場合はエラーとなるため、必ず戻り値を取得して可否を判断すること。
 + bool DXL_SetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t mode);
 +
 +|CENTER:|LEFT:|LEFT:|c
 +|Value|CENTER:Mode|CENTER:Description|h
 +|0|Current Control Mode|電流制御。位置及び速度制御は行わない。|
 +|1|Velocity Control Mode|速度制御。位置及び電流制御は行わない。|
 +|3|Position Control Mode|位置制御。|
 +|4|Extended Position Control Mode|拡張位置制御。マルチターンを許容。|
 +|5|Current-Base Position Control Mode|電流制限付き位置制御。マルチターンを許容。|
 +|16|PWM Control Mode|PWMのデューティー比を制御。|
 +
 +***DXL_GetOperatingMode [#x7567d67]
 +指定IDの動作モードを取得する。~
 + bool DXL_GetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t *mode);
***DXL_SetTorqueEnable [#qcf1eee1] ***DXL_SetTorqueEnable [#qcf1eee1]
-トルクイネーブルを指令する。~+トルクイネーブルを指定IDへ指令する。~
なおプロトコルV1搭載モデルに角度や回転数を指令すると、本APIに関わらず自動的にトルクイネーブルが1になる。 なおプロトコルV1搭載モデルに角度や回転数を指令すると、本APIに関わらず自動的にトルクイネーブルが1になる。
 bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en);  bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool en);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
 +
 +***DXL_GetTorqueEnable [#x3459343]
 +指定IDのトルクイネーブルを取得する。~
 + bool DXL_SetTorqueEnable(TDeviceID dvid, uint8_t id, bool *en);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_SetLED [#kfc7a7c3] ***DXL_SetLED [#kfc7a7c3]
-LEDの明滅を指令する。輝度や色の制御は対象外。+LEDの明滅を指定IDへ指令する。輝度や色の制御は対象外。
 bool DXL_SetLED(TDeviceID dvid, uint8_t id, bool en);  bool DXL_SetLED(TDeviceID dvid, uint8_t id, bool en);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_SetGoalAngle [#zde96bae] ***DXL_SetGoalAngle [#zde96bae]
Line 34: Line 119:
0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。 0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。
 bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle);  bool DXL_SetGoalAngle(TDeviceID dvid, uint8_t id, double angle);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_SetGoalAngles [#h7eadf0c] ***DXL_SetGoalAngles [#h7eadf0c]
Line 39: Line 133:
ライブラリ内ではSYNCやBULKインストラクションを使用しているため、実際のデバイスに指令が到達しているかの判断は行わない。 ライブラリ内ではSYNCやBULKインストラクションを使用しているため、実際のデバイスに指令が到達しているかの判断は行わない。
 bool DXL_SetGoalAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num);  bool DXL_SetGoalAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_GetPresentAngle [#o12b1958] ***DXL_GetPresentAngle [#o12b1958]
Line 44: Line 147:
0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。また、制御モードやモデルによって取得される数値範囲に差がある。 0degは動作範囲の中央とし、実際の精度は対象のデバイスに依存する。また、制御モードやモデルによって取得される数値範囲に差がある。
 bool DXL_GetPresentAngle(TDeviceID dvid, uint8_t id, double *angle);  bool DXL_GetPresentAngle(TDeviceID dvid, uint8_t id, double *angle);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_GetPresentAngles [#b48cfc6a] ***DXL_GetPresentAngles [#b48cfc6a]
複数軸の現在の角度(deg)を取得する。 複数軸の現在の角度(deg)を取得する。
 bool DXL_GetPresentAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num);  bool DXL_GetPresentAngles(TDeviceID dvid, const uint8_t *ids, double *angles, int num);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_SetGoalRPM [#xe33092b] ***DXL_SetGoalRPM [#xe33092b]
Line 53: Line 174:
モデルによっては位置決め制御時と速度制御時のアイテが同じなため、動作モードを切り替えながら運用すると、以前指令された回転速度値を引き継いで動作してしまう場合がある。 モデルによっては位置決め制御時と速度制御時のアイテが同じなため、動作モードを切り替えながら運用すると、以前指令された回転速度値を引き継いで動作してしまう場合がある。
 bool DXL_SetGoalRPM(TDeviceID dvid, uint8_t id, double rpm);  bool DXL_SetGoalRPM(TDeviceID dvid, uint8_t id, double rpm);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_SetGoalRPMs [#td88fd42] ***DXL_SetGoalRPMs [#td88fd42]
複数軸に対して速度制御時の回転速度(rpm)を指令する。 複数軸に対して速度制御時の回転速度(rpm)を指令する。
 bool DXL_SetGoalRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num);  bool DXL_SetGoalRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_GetPresentRPM [#ibd89474] ***DXL_GetPresentRPM [#ibd89474]
指定IDの現在の回転速度(rpm)を取得する。 指定IDの現在の回転速度(rpm)を取得する。
 bool DXL_GetPresentRPM(TDeviceID dvid, uint8_t id, double *rpm);  bool DXL_GetPresentRPM(TDeviceID dvid, uint8_t id, double *rpm);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_GetPresentRPMs [#ge163793] ***DXL_GetPresentRPMs [#ge163793]
 bool DXL_GetPresentRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num);  bool DXL_GetPresentRPMs(TDeviceID dvid, const uint8_t *ids, double *rpms, int num);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
 +
***DXL_SetGoalCurrent [#q16b45cf] ***DXL_SetGoalCurrent [#q16b45cf]
電流制御時の電流(mA)を指定IDへ指令する。 電流制御時の電流(mA)を指定IDへ指令する。
 bool DXL_SetGoalCurrent(TDeviceID dvid, uint8_t id, double current);  bool DXL_SetGoalCurrent(TDeviceID dvid, uint8_t id, double current);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_SetGoalCurrents [#w2e089b0] ***DXL_SetGoalCurrents [#w2e089b0]
 bool DXL_SetGoalCurrents(TDeviceID dvid, const uint8_t *ids, double *currents, int num);  bool DXL_SetGoalCurrents(TDeviceID dvid, const uint8_t *ids, double *currents, int num);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
 +
***DXL_GetPresentCurrent [#g697b4d6] ***DXL_GetPresentCurrent [#g697b4d6]
現在の電流(mA)を取得する。~ 現在の電流(mA)を取得する。~
電流計測をサポートしないデバイスの場合は負荷を取得し、仕様上のストール電流を乗じたものとなる。 電流計測をサポートしないデバイスの場合は負荷を取得し、仕様上のストール電流を乗じたものとなる。
 bool DXL_GetPresentCurrent(TDeviceID dvid, uint8_t id, double *current);  bool DXL_GetPresentCurrent(TDeviceID dvid, uint8_t id, double *current);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_GetPresentCurrents [#z78b8dd7] ***DXL_GetPresentCurrents [#z78b8dd7]
 bool DXL_GetPresentCurrents(TDeviceID dvid, const uint8_t *ids, double *current, int num);  bool DXL_GetPresentCurrents(TDeviceID dvid, const uint8_t *ids, double *current, int num);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
 +
***DXL_SetGoalAngleAndRPM [#g075e425] ***DXL_SetGoalAngleAndRPM [#g075e425]
位置制御時の角度(deg)と回転速度(rpm)を指定IDへ指令する。 位置制御時の角度(deg)と回転速度(rpm)を指定IDへ指令する。
 bool DXL_SetGoalAngleAndRPM(TDeviceID dvid, uint8_t id, double angle, double rpm);  bool DXL_SetGoalAngleAndRPM(TDeviceID dvid, uint8_t id, double angle, double rpm);
 +-パラメータ
 +--TDeviceID '''dvid'''
 +~オープン済のDeviceIDを指定。~
 +--uint8_t '''id'''
 +~検索対象のIDを指定。~
 +-戻り値
 +--bool~
 +~成功するとTure、失敗するとFalseを返す。~
 +-使用例
***DXL_SetGoalAngleAndRPMs [#qd594eb3] ***DXL_SetGoalAngleAndRPMs [#qd594eb3]
 bool DXL_SetGoalAngleAndRPMs(TDeviceID dvid, PAngleRPM anglerpm, int num);  bool DXL_SetGoalAngleAndRPMs(TDeviceID dvid, PAngleRPM anglerpm, int num);
-***DXL_SetOperatingMode [#r5844545] +-パラメータ 
-動作モードを設定する。設定時にトルクがディスエーブルされる。また、デバイスがサポートしないモードを指定した場合はエラーとなるため、必ず戻り値を取得して可否を判断すること。 +--TDeviceID '''dvid''' 
- bool DXL_SetOperatingMode(TDeviceID dvid, uint8_t id, uint8_t mode); +~オープン済のDeviceIDを指定。~ 
- +--uint8_t '''id''' 
-|CENTER:|LEFT:|LEFT:|c +~検索対象のIDを指定。~ 
-|Value|CENTER:Mode|CENTER:Description|h ​+-戻り値 
-|0|Current Control Mode|電流制御。位置及び速度制御は行わない。| +--bool~ 
-|1|Velocity Control Mode|速度制御。位置及び電流制御は行わない。| +~成功するとTure、失敗するとFalseを返す。~ 
-|3|Position Control Mode|位置制御。| +-使用例 
-|4|Extended Position Control Mode|拡張位置制御。マルチターンを許容。| +***オリジナルな定義 [#x4875c27
-|5|Current-Base Position Control Mode|電流制限付き位置制御。マルチターンを許容。| +&aname(TDXL_ModelInfo); 
-|16|PWM Control Mode|PWMのデューティー比を制御。|+:TDXL_ModelInfo | struct {&br;  uint16_t modelno;      /​/ デバイス固有のモデル番号&br;  char name[15];&br;  TDXL_DevType devtype​;  // デバイスのグループ&br;  struct {               // 位置の範囲&br;    int32_t max;&br;    int32_t min;&br;  } p​ositionlimit;&br;  struct {               /​/ 速度の範囲&br;    int32_t max;&br;    int32_t min;&br;  } v​elocitylimit;&br;  double offsetangle;    /​/ 中点 0[deg]&br;  double angleratio;     // 角度変換係数 [deg]&br;  double rpmratio;       // 速度変換係数 [rpm]&br;  double currentratio;   // 電流変換係数 [mA]&br;}


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom