11: 2019-11-16 (土) 18:40:20 takaboo ソース 12: 2020-07-11 (土) 12:06:40 takaboo ソース
Line 10: Line 10:
**ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f]
以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。
--''2019/11/16 Ver.2.4''~+-''2020/08/04 Ver.2.5''~ 
 +#ref(http://www.besttechnology.co.jp/dow​nload/DX2LIB_V2.5.zip) 
 +更新内容 
 +--新しく追加されたDynamixelの定義を追加 
 +--WriteBlockDataの変数定義を変更 
 +-2019/11/16 Ver.2.4~
#ref(http://www.besttechnology.co.jp/dow​nload/DX2LIB_V2.4.zip) #ref(http://www.besttechnology.co.jp/dow​nload/DX2LIB_V2.4.zip)
-内容+更新内容
--Visual Studio上での動作検証を行いヘッダを一部修正 --Visual Studio上での動作検証を行いヘッダを一部修正
--ライブラリソースのエンコードをUTF-8のBOM付きに統一 --ライブラリソースのエンコードをUTF-8のBOM付きに統一
Line 96: Line 101:
****DLLの動的リンク [#y15bf22f] ****DLLの動的リンク [#y15bf22f]
-動的にDLLを使用する場合はDLL自体をコンパイラオプションへ追記する必要はありません。その代わりにソース中でdx2lib.hをインクルードする前に_DYNAMICLOADマクロを定義しておきます。+動的にDLLを使用する場合はDLL自体をコンパイラオプションへ追記する必要はありません。その代わりソース中でdx2lib.hをインクルードする前に_DYNAMICLOADマクロを定義しておきます。
#html{{ #html{{
<pre class="brush: c;"> <pre class="brush: c;">
Line 103: Line 108:
</pre> </pre>
}} }}
-これによりヘッダファイル内の諸定義が切り替わり、DLLのロード及びアンロードを行うLoadDLLとUnloadDLLが利用できるようになります。+これによりヘッダファイル内の諸定義が切り替わり、LoadDLLとUnloadDLLで動的なDLL読み込みと破棄ができます。
#html{{ #html{{
<pre class="brush: c;"> <pre class="brush: c;">
  TDeviceID  dev;   TDeviceID  dev;
-  // DLLをロード+  // DLLを読み込み
  if (LoadDLL ()) {   if (LoadDLL ()) {
   if ((dev = DX2_OpenPort (COMPORT, BAUDRATE))) {    if ((dev = DX2_OpenPort (COMPORT, BAUDRATE))) {
Line 113: Line 118:
     DX2_ClosePort (dev);      DX2_ClosePort (dev);
   }    }
-   // DLLをアンロード+   // DLLを破棄
   UnloadDLL ();    UnloadDLL ();
  }   }
</pre> </pre>
}} }}
 +LoadDLLが成功していない状態で各APIを呼び出してはいけません。またDLL自体は実行プログラムと同じフォルダかOSがDLLを検索できる場所に配置しておく必要があります。
***Microsoft Visual C++ [#j5a74d33] ***Microsoft Visual C++ [#j5a74d33]
Line 247: Line 253:
~クローズに成功した場合はtrue、失敗した場合はfalseを返す。 ~クローズに成功した場合はtrue、失敗した場合はfalseを返す。
-使用例 -使用例
-&nbsp;TDeviceID dev; +#html{{ 
- // オープン +&lt;pre class="brush: c;"> 
- dev = DX2_OpenPort ("\\\\.\\COM10", 9600); +TDeviceID dev; 
- if (dev) { +// オープン 
-  ... (中略) +dev = DX2_OpenPort ("\\\\.\\COM10", 9600); 
-  // クローズ +if (dev) { 
-  DX2_ClosePort (dev); +  ... (中略) 
-&nbsp;}+  // クローズ 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_SetBaudrate [#ba9f52b8] ***DX2_SetBaudrate [#ba9f52b8]
Line 270: Line 280:
~通信速度の変更が成功するとtrue、失敗するとfalseを返す。~ ~通信速度の変更が成功するとtrue、失敗するとfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID dev; +#html{{ 
- // オープン +&lt;pre class="brush: c;"> 
- dev = DX2_OpenPort ("\\\\.\\COM10", 9600); +TDeviceID dev; 
- if (dev) { +// オープン 
-  // 通信速度を1M[bps]に変更 +dev = DX2_OpenPort ("\\\\.\\COM10", 9600); 
-  DX2_SetBaudrate (dev, 1000000); +if (dev) { 
-  ... (中略) +  // 通信速度を1M[bps]に変更 
-  // クローズ +  DX2_SetBaudrate (dev, 1000000); 
-  DX2_ClosePort (dev); +  ... (中略) 
-&nbsp;}+  // クローズ 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_Active [#ie20e4a7] ***DX2_Active [#ie20e4a7]
Line 292: Line 306:
~指定されたdvidが使用可能な場合はtrue、使用不可の場合はfalseを返す。 ~指定されたdvidが使用可能な場合はtrue、使用不可の場合はfalseを返す。
-使用例 -使用例
-&nbsp;TDeviceID dev; +#html{{ 
- // オープン +&lt;pre class="brush: c;"> 
- dev = DX2_OpenPort ("\\\\.\\COM10", 9600); +TDeviceID dev; 
- if (dev) { +// オープン 
-  while (DX2_Active (dev)) { +dev = DX2_OpenPort ("\\\\.\\COM10", 9600); 
-    ... (中略) +if (dev) { 
-  +  while (DX2_Active (dev)) { 
-  // クローズ +    ... (中略) 
-  DX2_ClosePort (dev); +  } 
-&nbsp;}+  // クローズ 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_SetTimeOutOffset [#h4a1b54e] ***DX2_SetTimeOutOffset [#h4a1b54e]
Line 331: Line 349:
~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- // オープン +TDeviceID  dev; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 57143); +TErrorCode err; 
- if (dev) { +// オープン 
-  // ID=1にPINGを発行 +dev = DX2_OpenPort ("\\\\.\\COM10", 57143); 
-  if (DX2_Ping (dev, 1, &err)) +if (dev) { 
-    printf ("Found [%08X]\n", err); +  // ID=1にPINGを発行 
-  else +  if (DX2_Ping (dev, 1, &err)) 
-    printf ("Not found [%08X]\n", err); +    printf ("Found [%08X]\n", err); 
-  // クローズ +  else 
-  DX2_ClosePort (dev); +    printf ("Not found [%08X]\n", err); 
-&nbsp;}+  // クローズ 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_Ping2 [#g16504b3] ***DX2_Ping2 [#g16504b3]
Line 363: Line 385:
~1台以上のデバイスからの応答が得られた場合はtrue、それ以外はfalseを返す。~ ~1台以上のデバイスからの応答が得られた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode  err; +&lt;pre class="brush: c;"> 
- uint8_t    id; +TDeviceID  dev; 
- TDxAlarmStatus stat[254]; +TErrorCode  err; 
- int        i; +uint8_t    id; 
- uint32_t    num = 252; +TDxAlarmStatus stat[254]; 
- // オープン +int        i; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 57143); +uint32_t    num = 252; 
- if (dev) { +// オープン 
-  // 不明な対象に対してPINGを発行 +dev = DX2_OpenPort ("\\\\.\\COM10", 57143); 
-  if (DX2_Ping2 (dev, &num, stat, &err)) { +if (dev) { 
-    for (i = 0; i < num; i++) +  // 不明な対象に対してPINGを発行 
-      printf ("Found ID=%d %02X\n", stat[i].id, stat[i].Status); +  if (DX2_Ping2 (dev, &num, stat, &err)) { 
-  +    for (i = 0; i < num; i++) 
-  // クローズ +      printf ("Found ID=%d %02X\n", stat[i].id, stat[i].Status); 
-  DX2_ClosePort (dev); +  } 
-&nbsp;}+  // クローズ 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_Reset [#fd640394] ***DX2_Reset [#fd640394]
Line 395: Line 421:
~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- // オープン +TDeviceID  dev; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 57143); +TErrorCode err; 
- if (dev) { +// オープン 
-  // ID=1にRESETを発行 +dev = DX2_OpenPort ("\\\\.\\COM10", 57143); 
-  if (DX2_Reset (dev, 1, &err)) +if (dev) { 
-    printf ("Success [%08X]\n", err); +  // ID=1にRESETを発行 
-  else +  if (DX2_Reset (dev, 1, &err)) 
-    printf ("Fail [%08X]\n", err); +    printf ("Success [%08X]\n", err); 
-  // クローズ +  else 
-  DX2_ClosePort (dev); +    printf ("Fail [%08X]\n", err); 
-&nbsp;}+  // クローズ 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_Reboot [#becb91ef] ***DX2_Reboot [#becb91ef]
Line 423: Line 453:
~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- // オープン +TDeviceID  dev; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 57143); +TErrorCode err; 
- if (dev) { +// オープン 
-  // ID=1にREBOOTを発行 +dev = DX2_OpenPort ("\\\\.\\COM10", 57143); 
-  if (DX2_Reboot (dev, 1, &err)) +if (dev) { 
-    printf ("Success [%08X]\n", err); +  // ID=1にREBOOTを発行 
-  else +  if (DX2_Reboot (dev, 1, &err)) 
-    printf ("Fail [%08X]\n", err); +    printf ("Success [%08X]\n", err); 
-  // クローズ +  else 
-  DX2_ClosePort (dev); +    printf ("Fail [%08X]\n", err); 
-&nbsp;}+  // クローズ 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_ReadByteData [#u7d86432] ***DX2_ReadByteData [#u7d86432]
Line 455: Line 489:
~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- uint8_t    dat; +TDeviceID  dev; 
- // オープン +TErrorCode err; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +uint8_t    dat; 
- if (dev) { +// オープン 
-  // ID=1のXL-320からLEDの状態を取得 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  if (DX2_ReadByteData (dev, 1, 25, &dat, &err)) { +if (dev) { 
-    printf ("LED STAT=%d\n", dat); +  // ID=1のXL-320からLEDの状態を取得 
-  +  if (DX2_ReadByteData (dev, 1, 25, &dat, &err)) { 
-  DX2_ClosePort (dev); +    printf ("LED STAT=%d\n", dat); 
-&nbsp;}+  } 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_WriteByteData [#ma2205f0] ***DX2_WriteByteData [#ma2205f0]
Line 487: Line 525:
BROADCASTING IDを指定した場合は応答待ちを行わない。 BROADCASTING IDを指定した場合は応答待ちを行わない。
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- uint8_t    dat; +TDeviceID  dev; 
- // オープン +TErrorCode err; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +uint8_t    dat; 
- if (dev) { +// オープン 
-  // ID=1のXL-320からLEDの状態を取得 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  if (DX2_ReadByteData (dev, 1, 25, &dat, &err)) { +if (dev) { 
-    dat = (dat + 1) & 7; +  // ID=1のXL-320からLEDの状態を取得 
-    // ID=1のXL-320へLEDの状態を設定 +  if (DX2_ReadByteData (dev, 1, 25, &dat, &err)) { 
-    DX2_WriteByteData (dev, 1, 25, dat, &err); +    dat = (dat + 1) & 7; 
-  +    // ID=1のXL-320へLEDの状態を設定 
-  DX2_ClosePort (dev); +    DX2_WriteByteData (dev, 1, 25, dat, &err); 
-&nbsp;}+  } 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_ReadWordData [#x202d573] ***DX2_ReadWordData [#x202d573]
Line 520: Line 562:
~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- uint16_t  dat; +TDeviceID  dev; 
- // オープン +TErrorCode err; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +uint16_t  dat; 
- if (dev) { +// オープン 
-  // ID=1のXL-320から現在位置を取得 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  if (DX2_ReadWordData (dev, 1, 30, &dat, &err)) { +if (dev) { 
-    printf ("PRESENT POS=%d\n", dat); +  // ID=1のXL-320から現在位置を取得 
-  +  if (DX2_ReadWordData (dev, 1, 30, &dat, &err)) { 
-  DX2_ClosePort (dev); +    printf ("PRESENT POS=%d\n", dat); 
-&nbsp;}+  } 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_WriteWordData [#pcc1b3ce] ***DX2_WriteWordData [#pcc1b3ce]
Line 552: Line 598:
BROADCASTING IDを指定した場合は応答待ちを行わない。 BROADCASTING IDを指定した場合は応答待ちを行わない。
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- // オープン +TDeviceID  dev; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +TErrorCode err; 
- if (dev) { +// オープン 
-  // ID=1のXL-320へ位置(511)を指令 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  DX2_WriteWordData (dev, 1, 30, 511, &err); +if (dev) { 
-  DX2_ClosePort (dev); +  // ID=1のXL-320へ位置(511)を指令 
-&nbsp;}+  DX2_WriteWordData (dev, 1, 30, 511, &err); 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_ReadLongData [#d27bfdc2] ***DX2_ReadLongData [#d27bfdc2]
Line 580: Line 630:
~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- uint32_t  dat; +TDeviceID  dev; 
- // オープン +TErrorCode err; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +uint32_t  dat; 
- if (dev) { +// オープン 
-  // ID=1のXM430から現在位置を取得 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  if (DX2_ReadWordData (dev, 1, 132, &dat, &err)) { +if (dev) { 
-    printf ("PRESENT POS=%d\n", dat); +  // ID=1のXM430から現在位置を取得 
-  +  if (DX2_ReadWordData (dev, 1, 132, &dat, &err)) { 
-  DX2_ClosePort (dev); +    printf ("PRESENT POS=%d\n", dat); 
-&nbsp;}+  } 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_WriteLongData [#c3bc7240] ***DX2_WriteLongData [#c3bc7240]
Line 612: Line 666:
BROADCASTING IDを指定した場合は応答待ちを行わない。 BROADCASTING IDを指定した場合は応答待ちを行わない。
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- // オープン +TDeviceID  dev; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +TErrorCode err; 
- if (dev) { +// オープン 
-  // ID=1のXM430へ位置(2047)を指令 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  DX2_WriteWordData (dev, 1, 116, 2047, &err); +if (dev) { 
-  DX2_ClosePort (dev); +  // ID=1のXM430へ位置(2047)を指令 
-&nbsp;}+  DX2_WriteWordData (dev, 1, 116, 2047, &err); 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_ReadBlockData [#b8a1ae1e] ***DX2_ReadBlockData [#b8a1ae1e]
Line 642: Line 700:
~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- uint8_t    gain[3]; +TDeviceID  dev; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +TErrorCode err; 
- if (dev) { +uint8_t    gain[3]; 
-  // ID=1のXL-320からPIDゲインのデータを取得 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  if (DX2_ReadBlockData (dev, 1, 26, gain, 3, &err) { +if (dev) { 
-    printf ( +  // ID=1のXL-320からPIDゲインのデータを取得 
-      "D=%d I=%d P=%d\n", +  if (DX2_ReadBlockData (dev, 1, 26, gain, 3, &err) { 
-      gain[0], gain[1], gain[2] +    printf ( 
-    ); +    "D=%d I=%d P=%d\n", 
-  +    gain[0], gain[1], gain[2] 
-  DX2_ClosePort (dev); +    ); 
-&nbsp;}+  } 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_WriteBlockData [#fcf55aa0] ***DX2_WriteBlockData [#fcf55aa0]
Line 678: Line 740:
BROADCASTING IDを指定した場合は応答待ちを行わない。 BROADCASTING IDを指定した場合は応答待ちを行わない。
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- uint8_t    gain[3] = { 1, 1, 1 }; +TDeviceID  dev; 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +TErrorCode err; 
- if (dev) { +uint8_t    gain[3] = { 1, 1, 1 }; 
-  // ID=1のXL-320のPIDゲインを変更 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  DX2_WriteBlockData (dev, 1, 26, gain, 3, &err); +if (dev) { 
-  DX2_ClosePort (dev); +  // ID=1のXL-320のPIDゲインを変更 
-&nbsp;}+  DX2_WriteBlockData (dev, 1, 26, gain, 3, &err); 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre> 
 +}}
***DX2_ReadSyncData [#iac9751e] ***DX2_ReadSyncData [#iac9751e]
Line 707: Line 773:
~指定したデバイス数が応答したらtrue、それ以外はfalseを返す。~ ~指定したデバイス数が応答したらtrue、それ以外はfalseを返す。~
-使用例 -使用例
 +#html{{
 +<pre class="brush: c;">
 +// XM430の120番地から2バイト分のデータをid=1,2,3より読み出すパラメータ
 +const TSyncReadParam param = {
 +  addr:120,
 +  length:2,
 +  ids:{1,2,3},
 +};
- // XM430の120番地から2バイト分のデータをid=1,2,3より読み出すパラメータ +// 読み出しすデータの構造体 
- const TSyncReadParam param = +typedef struct
-  addr:120, +  uint8_t    id; 
-   length:2, +  TErrorCode err; 
-  ids:{1,2,3}, +  uint16_t    RTTick; 
- };+} __attribute__ ((gcc_struct, __packed__)) TSyncR[3];
- // 読み出しすデータの構造体 +TSyncR     rdat; 
- typedef struct { +TDeviceID  dev; 
-   uint8_t    id; +TErrorCode  err; 
-   TErrorCode  err; +if ((dev = DX2_OpenPort ("\\\\.\\COM5", 1000000))) { 
-   uint16_t    RTTick; +  uint32_t num = 3; // 3軸 
- } __attribute__ ((gcc_struct, __packed__)) TSyncR[3]; +  DX2_ReadSyncData (dev, ¶m, &num, (uint8_t *)&rdat, &err); 
- TSyncR     rdat; +  printf("resul num=%d\n", num); 
- +  for (int i = 0; i < num; i++) { 
- TDeviceID  dev; +    printf("ID:%d ERR:%04X tick=%d\n", rdat[i].id, rdat[i].err, rdat[i].RTTick); 
- TErrorCode  err; +  } 
- if ((dev = DX2_OpenPort ("\\\\.\\COM5", 1000000))) { +  DX2_ClosePort (dev); 
-  uint32_t num = 3; // 3軸 +} 
-  DX2_ReadSyncData (dev, ¶m, &num, (uint8_t *)&rdat, &err); +&lt;/pre>; 
-  printf("resul num=%d\n", num); +}}
-  for (int i = 0; i < num; i++) { +
-    printf("ID:%d ERR:%04X tick=%d\n", rdat[i].id, rdat[i].err, rdat[i].RTTick); +
-  +
-  DX2_ClosePort (dev); +
-&nbsp;};+
***DX2_WriteSyncData [#v566e16b] ***DX2_WriteSyncData [#v566e16b]
Line 752: Line 821:
~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。~ ~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
 +#html{{
 +<pre class="brush: c;">
 +// 2台のXM430へ位置を指令する想定の構造体
 +typedef struct {
 +  uint16_t    addr;
 +  uint16_t    length;
 +  struct {
 +   uint8_t  id;
 +   uint32_t  goalpos;
 +  } __attribute__ ((gcc_struct, __packed__)) data[2];
 +} __attribute__ ((gcc_struct, __packed__)) TSyncW;
- // 2台のXM430へ位置を指令する想定の構造体 +TSyncW syncw =
- typedef struct +  116, // アドレス (Goal Position) 
-   uint16_t    addr; +  4,   // データ長 (4 byte) 
-  uint16_t   length; +  {{ 1, 3072 }, // 1軸目 ID=1, GoalPosition=3072 
-  struct { +   { 2, 1024 }}  // 2軸目 ID=2, GoalPosition=1024 
-     uint8_t  id; +};
-     uint32_t goalpos; +
-   } __attribute__ ((gcc_struct, __packed__)) data[2]; +
- } __attribute__ ((gcc_struct, __packed__)) TSyncW;+
- TSyncW syncw = { +TDeviceID dev
-  116,  // アドレス (Goal Position) +TErrorCode err;
- ; 4,    // データ長 (4 byte) +
-   {{ 1, 3072 },  // 1軸目 ID=1, GoalPosition=3072 +
-   { 2, 1024 }}  // 2軸目 ID=2, GoalPosition=1024 +
- };+
- TDeviceID  dev; +dev = DX2_OpenPort ("\\\\.\\COM5", 1000000); 
- TErrorCode err; +if (dev) { 
- +  // 2台のXM430へ個別の位置を指令 
- dev = DX2_OpenPort ("\\\\.\\COM5", 1000000); +  DX2_WriteSyncData (dev, (uint8_t *)&syncw, sizeof(syncw), &err); 
- if (dev) { +  DX2_ClosePort (dev); 
-  // 2台のXM430へ個別の位置を指令 +} 
-  DX2_WriteSyncData (dev, (uint8_t *)&syncw, sizeof(syncw), &err); +&lt;/pre>; 
-  DX2_ClosePort (dev); +}}
-&nbsp;};+
***DX2_ReadBulkData [#wf7d9427] ***DX2_ReadBulkData [#wf7d9427]
Line 800: Line 872:
~指定したデバイス数が応答したらtrue、それ以外はfalseを返す。~ ~指定したデバイス数が応答したらtrue、それ以外はfalseを返す。~
-使用例 -使用例
 +#html{{
 +<pre class="brush: c;">
 +TDeviceID  dev;
 +TErrorCode err;
 +uint8_t    rdat[1000]; // 読み出したデータの保存先
- TDeviceID  dev; +const TBulkReadParam param[3] = { 
- TErrorCode err; +  {1,100,20}, // ID=1の124番地から20バイト分 
- uint8_t    rdat[1000]; // 読み出したデータの保存先+  {2,124,12}, // ID=2の124番地から12バイト分 
 +  {3,  0, 7}  // ID=3の0番地から7バイト分 
 +};
- const TBulkReadParam param[3] = { +dev = DX2_OpenPort ("\\\\.\\COM5", 1000000); 
-   {1,100,20}, // ID=1の124番地から20バイト分 +if (dev) { 
-   {2,124,12}, // ID=2の124番地から12バイト分 +  uint32_t num = 3; // 3軸 
-   {3,  0, 7}  // ID=3の0番地から7バイト分 +  PBulkReadResult pr = (void *)rdat; 
- }; +  DX2_ReadBulkData (dev, ¶m[0], &num, (uint8_t *)&rdat, &err); 
- +  printf("resul num=%d err=$%04x\n", num, err); 
- dev = DX2_OpenPort ("\\\\.\\COM5", 1000000); +  for (int i = 0; i < num; i++) { 
- if (dev) { +    if (pr->size > 0) { 
-  uint32_t num = 3; // 3軸 +      printf("\nID:%d err:$%04X ",pr->id, pr->err); 
-  PBulkReadResult pr = (void *)rdat; +      for (int j = 0; j < pr->size - 5; j++) printf("%02X ", pr->dat[j]); 
-  DX2_ReadBulkData (dev, ¶m[0], &num, (uint8_t *)&rdat, &err); +      pr = (void *)pr + pr->size; // 次のデータ用にポインタを更新 
-  printf("resul num=%d err=$%04x\n", num, err); +   
-  for (int i = 0; i < num; i++) { +  } 
-    if (pr->size > 0) { +  DX2_ClosePort (dev); 
-      printf("\nID:%d err:$%04X ",pr->id, pr->err); +} 
-      for (int j = 0; j < pr->size - 5; j++) printf("%02X ", pr->dat[j]); +&lt;/pre>; 
-      pr = (void *)pr + pr->size; // 次のデータ用にポインタを更新 +}}
-    +
-  +
-  DX2_ClosePort (dev); +
-&nbsp;};+
***DX2_WriteBulkData [#r6a06745] ***DX2_WriteBulkData [#r6a06745]
Line 843: Line 918:
~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。~ ~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。~
-使用例 -使用例
 +#html{{
 +<pre class="brush: c;">
 +// 3台のXM430へ位置を指令する想定の構造体
 +typedef struct {
 +  uint8_t  id;
 +  uint16_t addr;
 +  uint16_t len;
 +  int32_t  pos;
 +} __attribute__ ((gcc_struct, __packed__)) TBW[3];
 +TBW BW = {
 +  {1, 116, 4, 0},    // 1軸目 ID=1, アドレス=116, サイズ=4, GPos=0
 +  {2, 116, 4, 2047}, // 2軸目 ID=1, アドレス=116, サイズ=4, GPos=2047
 +  {3, 116, 4, 4095}  // 3軸目 ID=1, アドレス=116, サイズ=4, GPos=4095
 +};
- // 3台のXM430へ位置を指令する想定の構造体 +TDeviceID dev
- typedef struct { +TErrorCode err;
-  uint8_t  id+
-   uint16_t addr; +
-   uint16_t len; +
-   int32_t  pos; +
- } __attribute__ ((gcc_struct, __packed__)) TBW[3]; +
- TBW BW = { +
-   {1, 116, 4, 0},    // 1軸目 ID=1, アドレス=116, サイズ=4, GPos=0 +
-   {2, 116, 4, 2047}, // 2軸目 ID=1, アドレス=116, サイズ=4, GPos=2047 +
-   {3, 116, 4, 4095}  // 3軸目 ID=1, アドレス=116, サイズ=4, GPos=4095 +
- };+
- TDeviceID  dev; +dev = DX2_OpenPort ("\\\\.\\COM5", 1000000); 
- TErrorCode err; +if (dev) { 
- +  // 3台のXM430へ個別の情報を書き込み 
- dev = DX2_OpenPort ("\\\\.\\COM5", 1000000); +  DX2_WriteBulkData (dev, (uint8_t *)&BW, sizeof(BW), &err); 
- if (dev) { +  DX2_ClosePort (dev); 
-  // 3台のXM430へ個別の情報を書き込み +} 
-  DX2_WriteBulkData (dev, (uint8_t *)&BW, sizeof(BW), &err); +&lt;/pre>; 
-  DX2_ClosePort (dev); +}}
-&nbsp;};+
***DX2_TxPacket [#r051327a] ***DX2_TxPacket [#r051327a]
Line 886: Line 964:
~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。 ~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。
-使用例 -使用例
-&nbsp;TDeviceID  dev; +#html{{ 
- TErrorCode err; +&lt;pre class="brush: c;"> 
- uint8_t    param[2] = { +TDeviceID  dev; 
-  25,    // アドレス (LED) +TErrorCode err; 
-  0,    // データ +uint8_t    param[2] = { 
- }; +  25,    // アドレス (LED) 
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +  0,    // データ 
- if (dev) { +}; 
-  // ID=1のAX-12+のLEDを消灯 +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
-  DX2_TxPacket (dev, 1, INST_WRITE, param, 2, &err); +if (dev) { 
-  DX2_ClosePort (dev); +  // ID=1のAX-12+のLEDを消灯 
-&nbsp;};+  DX2_TxPacket (dev, 1, INST_WRITE, param, 2, &err); 
 +  DX2_ClosePort (dev); 
 +} 
 +&lt;/pre>; 
 +}}
***DX2_RxPacket [#r280cda8] ***DX2_RxPacket [#r280cda8]
Line 921: Line 1003:
~受信成功時はtrue、それ以外はfalseを返す。 ~受信成功時はtrue、それ以外はfalseを返す。
-使用例 -使用例
-&nbsp;int        i; +#html{{ 
- uint32_t  len; +&lt;pre class="brush: c;"> 
- TDeviceID  dev; +int        i; 
- TErrorCode err; +uint32_t  len; 
- uint8_t    param[2] = { +TDeviceID  dev; 
-  25,    // アドレス (LED) +TErrorCode err; 
-  1,    // サイズ +uint8_t    param[2] = { 
- };+  25,    // アドレス (LED) 
 +  1,    // サイズ 
 +};
- dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); +dev = DX2_OpenPort ("\\\\.\\COM10", 1000000); 
- if (dev) { +if (dev) { 
-  // ID=1のAX-12+からLEDの状態を読み出す要求 +  // ID=1のAX-12+からLEDの状態を読み出す要求 
-  if (DX2_TxPacket (dev, 1, INST_READ, param, 2, &err)) { +  if (DX2_TxPacket (dev, 1, INST_READ, param, 2, &err)) { 
-    // ステータスパケットを受信 +    // ステータスパケットを受信 
-    DX2_RxPacket (dev, dat, sizeof (dat), &len, 100, &err); +    DX2_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]); 
-    +   
-  +  } 
-  DX2_ClosePort (dev); +  DX2_ClosePort (dev); 
-&nbsp;};+} 
 +&lt;/pre>; 
 +}}
***DX2LIBのオリジナルな定義 [#af9ca340] ***DX2LIBのオリジナルな定義 [#af9ca340]


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