18: 2013-03-28 (木) 20:38:24 takaboo | 19: 2013-03-29 (金) 02:09:00 takaboo | ||
---|---|---|---|
Line 19: | Line 19: | ||
--受信スレッドを完全に廃止し処理をブロッキング化し可読性を向上。 | --受信スレッドを完全に廃止し処理をブロッキング化し可読性を向上。 | ||
--パケットの整合性チェックを厳密化。 | --パケットの整合性チェックを厳密化。 | ||
- | -''2011/07/20 Ver.2.6''~ | + | --デバイスからのアラームステータスがAPIの応答に反映されないケースを修正。 |
+ | -2011/07/20 Ver.2.6~ | ||
#ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.6.zip) | #ref(http://www.besttechnology.co.jp/download/DXLIB2forWin2.6.zip) | ||
内容 | 内容 | ||
Line 91: | Line 92: | ||
|~|DELPHI|Project1.dpr |サンプル | | |~|DELPHI|Project1.dpr |サンプル | | ||
|~|~|Unit1.dfm |~| | |~|~|Unit1.dfm |~| | ||
+ | |~|~|Unit1.pas |~| | ||
|~|~|DXLIB.pas |~| | |~|~|DXLIB.pas |~| | ||
- | |~|~|Unit1.dfm |~| | ||
- | |~|~|Unit1.pas |~| | ||
|~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 | | |~|~|dxlib_x32.dll |DXLIBフォルダに収録されるものと同一 | | ||
|~|~|dxlib_x64.dll |~| | |~|~|dxlib_x64.dll |~| | ||
Line 122: | Line 122: | ||
****DLLの静的リンク [#la562acf] | ****DLLの静的リンク [#la562acf] | ||
- | 静的にDLLを使用する場合は以下の手順でライブラリをリンクする指定を行った上でコンパイルします。なお、コンパイル後のファイルを実行する際にdxlib2.dllが同一のフォルダに存在しないと、プログラムは起動直後に異常終了してしまいます。 | + | 静的にDLLを使用する場合は以下の手順でDLLをリンクする指定を行った上でコンパイルします。なお、コンパイル後のファイルを実行する際にDLLが同一のフォルダに存在しないと、プログラムは起動直後に異常終了してしまいます。 |
+ファイルの準備~ | +ファイルの準備~ | ||
~ダウンロードファイルを解凍後、コンパイルするソースファイルと同一フォルダに以下のファイルをコピー~ | ~ダウンロードファイルを解凍後、コンパイルするソースファイルと同一フォルダに以下のファイルをコピー~ | ||
Line 130: | Line 130: | ||
+コンパイルオプションの選択 | +コンパイルオプションの選択 | ||
~ツールメニュー→コンパイラオプションをクリックし、表示されるダイアログボックスの設定リストから'x86 (Console)'を選択~ | ~ツールメニュー→コンパイラオプションをクリックし、表示されるダイアログボックスの設定リストから'x86 (Console)'を選択~ | ||
- | #ref(GCC_CompileOption_dxlib2.png)~ | + | #ref(GCC_CompileOption_sel.png)~ |
+ライブラリの追加 | +ライブラリの追加 | ||
- | ~リンクタブ内の追加ボタンを押し、新規に行を追加~ | + | ~etc...タブ内の追加ボタンを押し、新規に行を追加~ |
- | #ref(GCC_CompileOption_Link_add_btn.png)~ | + | #ref(GCC_CompileOption_AddEtc.png)~ |
- | ~新規に追加された空の行をクリックし'dxlib_x32'と入力~ | + | ~新規に追加された空の行をクリックし'dxlib_x32.dll'と入力~ |
- | #ref(GCC_ComplileOption_Link_add_dxlib2.png)~ | + | #ref(GCC_CompileOption_AddDxlib2.png)~ |
~OKを押して設定を反映 | ~OKを押して設定を反映 | ||
Line 151: | Line 151: | ||
|=ファイル |=ファイル名 |=備考 | | |=ファイル |=ファイル名 |=備考 | | ||
|<ヘッダ |<dxlib.h |<必要な宣言を集約 | | |<ヘッダ |<dxlib.h |<必要な宣言を集約 | | ||
- | |<DLL |<dxlib_x32.dll |<DLL本体(実行時に必要) | | + | |<DLL |<dxlib_x32.dll |<実行時に必要 | |
|<ライブラリ |<dxlib_x32.lib |<リンク時に必要 | | |<ライブラリ |<dxlib_x32.lib |<リンク時に必要 | | ||
+プロジェクトのプロパティを変更~ | +プロジェクトのプロパティを変更~ | ||
Line 214: | Line 214: | ||
***Linux [#w5c096b8] | ***Linux [#w5c096b8] | ||
- | Linux上でのdxlib2のコンパイル方法を紹介します。~ | + | Linux上でのdxlibのコンパイル方法を紹介します。~ |
+コンパイル準備~ | +コンパイル準備~ | ||
ダウンロードファイルを解凍~ | ダウンロードファイルを解凍~ | ||
Line 235: | Line 235: | ||
ライブラリの内部情報を初期化すると同時に指定されたCOMポートをオープンし、ユニークな[[TDeviceID>#TDeviceID]]を返す。以後はこの[[TDeviceID>#TDeviceID]]を使用して各APIを使用する。~ | ライブラリの内部情報を初期化すると同時に指定されたCOMポートをオープンし、ユニークな[[TDeviceID>#TDeviceID]]を返す。以後はこの[[TDeviceID>#TDeviceID]]を使用して各APIを使用する。~ | ||
複数のCOMポートを使用する場合は、使用するポート毎にDX_OpenPortを行い[[TDeviceID>#TDeviceID]]を取得しなくてはならない。 | 複数のCOMポートを使用する場合は、使用するポート毎にDX_OpenPortを行い[[TDeviceID>#TDeviceID]]を取得しなくてはならない。 | ||
- | TDeviceID DX_OpenPort (char *pcom, long br); | + | TDeviceID DX_OpenPort (char *name, long baud); |
-パラメータ | -パラメータ | ||
- | --char '''*pcom''' | + | --char '''*name''' |
~インターフェースが提供するCOMポート名。~ | ~インターフェースが提供するCOMポート名。~ | ||
記述方法は[[こちら:http://support.microsoft.com/default.aspx?scid=kb;ja;JP115831]]の情報に従う。 | 記述方法は[[こちら:http://support.microsoft.com/default.aspx?scid=kb;ja;JP115831]]の情報に従う。 | ||
- | --long '''br''' | + | --long '''baud''' |
~インターフェースとデバイス間の通信速度[bps]。 | ~インターフェースとデバイス間の通信速度[bps]。 | ||
-戻り値 | -戻り値 | ||
Line 253: | Line 253: | ||
DX_OpenPortで開いたCOMポートを閉じる。~ | DX_OpenPortで開いたCOMポートを閉じる。~ | ||
DX_ClosePortが実行された以後は指定された[[TDeviceID>#TDeviceID]]での通信が行えなくなる。 | DX_ClosePortが実行された以後は指定された[[TDeviceID>#TDeviceID]]での通信が行えなくなる。 | ||
- | BOOL DX_ClosePort (TDeviceID dvid); | + | bool DX_ClosePort (TDeviceID dvid); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~クローズに成功した場合はTRUE、失敗した場合はFALSEを返す。 | + | ~クローズに成功した場合はtrue、失敗した場合はfalseを返す。 |
-使用例 | -使用例 | ||
TDeviceID dev; | TDeviceID dev; | ||
Line 273: | Line 273: | ||
既にオープンされている[[TDeviceID>#TDeviceID]]の通信速度の変更を行う。~ | 既にオープンされている[[TDeviceID>#TDeviceID]]の通信速度の変更を行う。~ | ||
実行すると強制的に受信バッファがクリアされる。 | 実行すると強制的に受信バッファがクリアされる。 | ||
- | BOOL DX_ChangeBaudrate (TDeviceID dvid, long br); | + | bool DX_ChangeBaudrate (TDeviceID dvid, long baud); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --long '''br'''~ | + | --long '''baud'''~ |
~新しい通信速度[bps]。 | ~新しい通信速度[bps]。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~通信速度の変更が成功するとTRUE、失敗するとFALSE。~ | + | ~通信速度の変更が成功するとtrue、失敗するとfalseを返す。~ |
-使用例 | -使用例 | ||
TDeviceID dev; | TDeviceID dev; | ||
Line 295: | Line 295: | ||
***DX_Active [#ie20e4a7] | ***DX_Active [#ie20e4a7] | ||
- | 指定された[[TDeviceID>#TDeviceID]]のポートが使用可能であるかを確認する。~ | + | 指定された[[TDeviceID>#TDeviceID]]のポートが開かれており、使用可能であるかを確認する。~ |
- | USB接続等によりインターフェースが取り外し可能な場合に、実際に使用可能であるかを判断するために使用するが、状況によっては正確に判断できない場合もある。 | + | USB接続等によりインターフェース自体が取り外し可能な場合に、実際に使用可能であるかを判断するために使用するが、状況によっては正確に判断できない場合もある。 |
- | BOOL DX_Active (TDeviceID dvid); | + | bool DX_Active (TDeviceID dvid); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~指定されたdvidが使用可能な場合はTRUE、使用不可の場合はFALSE。 | + | ~指定されたdvidが使用可能な場合はtrue、使用不可の場合はfalseを返す。 |
-使用例 | -使用例 | ||
TDeviceID dev; | TDeviceID dev; | ||
Line 318: | Line 318: | ||
***DX_Ping [#v393b505] | ***DX_Ping [#v393b505] | ||
PINGインストラクションを使用して対象IDからの応答を確認する。 | PINGインストラクションを使用して対象IDからの応答を確認する。 | ||
- | BOOL DX_Ping (TDeviceID dvid, UCHAR id, int timeout, TErrorCode *errcode); | + | bool DX_Ping (TDeviceID dvid, uint8_t id, int timeout, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''id''' | + | --uint8_t '''id''' |
- | ~対象とするID (0~253, 254)。 | + | ~対象とするID (0~253)。 |
--int '''timeout''' | --int '''timeout''' | ||
~受信タイムアウト[ms]。 | ~受信タイムアウト[ms]。 | ||
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~正常な応答が得られた場合はTRUE、それ以外はFALSE。~ | + | ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ |
-使用例 | -使用例 | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
// オープン | // オープン | ||
Line 347: | Line 347: | ||
***DX_Ping2 [#g16504b3] | ***DX_Ping2 [#g16504b3] | ||
- | PINGインストラクションを使用して不特定の対象の応答を確認する。 | + | PINGインストラクションでBROADCASTING IDを指定して不特定の対象の応答を確認する。~ |
- | BOOL DX_Ping (TDeviceID dvid, UCHAR *id, int timeout, TErrorCode *errcode); | + | BROADCASTING IDを指定した場合の応答がデバイスのシリーズによって差が生じるため、正確な情報を取得できない場合がある。 |
+ | bool DX_Ping2 (TDeviceID dvid, int *num, TDxAlarmStatus *AlarmStatus, TErrorCode *err); | ||
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''*id''' | + | --int '''*num''' |
- | ~検索で見つかったIDの保存先。 | + | ~検索する最大数及び検索で見つかったデバイス数の保存先。 |
- | --int '''timeout''' | + | --[[TDxAlarmStatus>#TDxAlarmStatus]] '''*AlarmStatus''' |
- | ~受信タイムアウト[ms]。 | + | ~検索で見つかったデバイス情報の保存先。~ |
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | 少なくともnumで指定したサイズを確保しておく必要がある。 |
+ | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~正常な応答が得られた場合はTRUE、それ以外はFALSE。~ | + | ~1台以上のデバイスからの応答が得られた場合はtrue、それ以外はfalseを返す。~ |
-使用例 | -使用例 | ||
TDeviceID dev; | TDeviceID dev; | ||
- | TErrorCode err; | + | TErrorCode err; |
- | UCHAR id; | + | uint8_t id; |
+ | TDxAlarmStatus stat[253]; | ||
+ | int i, num = 100; | ||
// オープン | // オープン | ||
dev = DX_OpenPort ("\\\\.\\COM10", 57143); | dev = DX_OpenPort ("\\\\.\\COM10", 57143); | ||
if (dev) { | if (dev) { | ||
// 不明な対象に対してPINGを発行 | // 不明な対象に対してPINGを発行 | ||
- | if (DX_Ping (dev, &id, 100, &err)) | + | if (DX_Ping2 (dev, &num, stat, &err)) { |
- | printf ("Found ID=%d [%08X]\n", id, err); | + | for (i = 0; i < num; i++) |
- | else | + | printf ("Found ID=%d %02X\n", stat[i].id, stat[i].Status); |
- | printf ("Not found [%08X]\n", err); | + | } |
// クローズ | // クローズ | ||
DX_ClosePort (dev); | DX_ClosePort (dev); | ||
Line 379: | Line 383: | ||
***DX_ReadByteData [#u7d86432] | ***DX_ReadByteData [#u7d86432] | ||
対象IDのコントロールテーブルから1バイトのデータを読み出す。 | 対象IDのコントロールテーブルから1バイトのデータを読み出す。 | ||
- | BOOL DX_ReadByteData (TDeviceID dvid, UCHAR id, UCHAR adr, UCHAR *result, int timeout, TErrorCode *errcode); | + | bool DX_ReadByteData(TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t *rdata, int timeout, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''id''' | + | --uint8_t '''id''' |
~対象とするID (0~253)。 | ~対象とするID (0~253)。 | ||
- | --UCHAR '''adr''' | + | --uint8_t '''adr''' |
~コントロールテーブルのアドレス。 | ~コントロールテーブルのアドレス。 | ||
- | --UCHAR '''*result''' | + | --uint8_t '''*rdata''' |
~読み出した値の保存先。 | ~読み出した値の保存先。 | ||
--int '''timeout''' | --int '''timeout''' | ||
~受信タイムアウト[ms]。 | ~受信タイムアウト[ms]。 | ||
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~正常な応答が得られた場合はTRUE、それ以外はFALSE。~ | + | ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ |
-使用例 | -使用例 | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
- | UCHAR dat; | + | uint8_t dat; |
// オープン | // オープン | ||
dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | ||
if (dev) { | if (dev) { | ||
- | // ID=1のAX-12+からLEDの状態を取得 | + | // ID=1のAX-12からLEDの状態を取得 |
if (DX_ReadByteData (dev, 1, 25, &dat, 100, &err)) { | if (DX_ReadByteData (dev, 1, 25, &dat, 100, &err)) { | ||
printf ("LED STAT=%d\n", dat); | printf ("LED STAT=%d\n", dat); | ||
Line 412: | Line 416: | ||
***DX_WriteByteData [#ma2205f0] | ***DX_WriteByteData [#ma2205f0] | ||
対象IDのコントロールテーブルへ1バイトのデータを書き込む。 | 対象IDのコントロールテーブルへ1バイトのデータを書き込む。 | ||
- | BOOL DX_WriteByteData (TDeviceID dvid, UCHAR id, UCHAR adr, UCHAR dat, int timeout, TErrorCode *errcode); | + | bool DXAPIDLL DX_WriteByteData(TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t dat, int timeout, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''id''' | + | --uint8_t '''id''' |
~対象とするID (0~253, 254)。 | ~対象とするID (0~253, 254)。 | ||
- | --UCHAR '''adr''' | + | --uint8_t '''adr''' |
~コントロールテーブルのアドレス。 | ~コントロールテーブルのアドレス。 | ||
- | --UCHAR '''dat'''~ | + | --uint8_t '''dat'''~ |
~書き込む値。 | ~書き込む値。 | ||
--int '''timeout''' | --int '''timeout''' | ||
~受信タイムアウト[ms]。 | ~受信タイムアウト[ms]。 | ||
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~正常な応答が得られた場合はTRUE、それ以外はFALSE。~ | + | ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ |
BROADCASTING IDを指定した場合は応答待ちを行わない。 | BROADCASTING IDを指定した場合は応答待ちを行わない。 | ||
-使用例 | -使用例 | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
- | UCHAR dat; | + | uint8_t dat; |
// オープン | // オープン | ||
dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | ||
if (dev) { | if (dev) { | ||
- | // ID=1のAX-12+からLEDの状態を取得 | + | // ID=1のAX-12からLEDの状態を取得 |
if (DX_ReadByteData (dev, 1, 25, &dat, 100, &err)) { | if (DX_ReadByteData (dev, 1, 25, &dat, 100, &err)) { | ||
- | dat ~= 1; // ビット反転 | + | dat ^= 1; // ビット反転 |
- | // ID=1のAX-12+へLEDの状態を設定 | + | // ID=1のAX-12へLEDの状態を設定 |
- | DX_WriteByteData (dev, 1, 25, 1, 100, &err); | + | DX_WriteByteData (dev, 1, 25, dat, 100, &err); |
} | } | ||
DX_ClosePort (dev); | DX_ClosePort (dev); | ||
Line 448: | Line 452: | ||
***DX_ReadWordData [#x202d573] | ***DX_ReadWordData [#x202d573] | ||
対象IDのコントロールテーブルから1ワード(2バイト)のデータを読み出す。 | 対象IDのコントロールテーブルから1ワード(2バイト)のデータを読み出す。 | ||
- | BOOL DX_ReadWordData (TDeviceID dvid, UCHAR id, UCHAR adr, USHORT *result, int timeout, TErrorCode *errcode); | + | bool DX_ReadWordData(TDeviceID dvid, uint8_t id, uint8_t adr, uint16_t *rdata, int timeout, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''id''' | + | --uint8_t '''id''' |
~対象とするID (0~253)。 | ~対象とするID (0~253)。 | ||
- | --UCHAR '''adr''' | + | --uint8_t '''adr''' |
~コントロールテーブルのアドレス。 | ~コントロールテーブルのアドレス。 | ||
- | --USHORT '''*result''' | + | --uint16_t '''*rdata''' |
~読み出した値の保存先。 | ~読み出した値の保存先。 | ||
--int '''timeout''' | --int '''timeout''' | ||
~受信タイムアウト[ms]。 | ~受信タイムアウト[ms]。 | ||
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~正常な応答が得られた場合はTRUE、それ以外はFALSE。~ | + | ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ |
-使用例 | -使用例 | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
- | USHORT dat; | + | uint16_t dat; |
// オープン | // オープン | ||
dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | ||
if (dev) { | if (dev) { | ||
- | // ID=1のAX-12+から現在位置を取得 | + | // ID=1のAX-12から現在位置を取得 |
if (DX_ReadWordData (dev, 1, 36, &dat, 100, &err)) { | if (DX_ReadWordData (dev, 1, 36, &dat, 100, &err)) { | ||
printf ("PRESENT POS=%d\n", dat); | printf ("PRESENT POS=%d\n", dat); | ||
Line 481: | Line 485: | ||
***DX_WriteWordData [#pcc1b3ce] | ***DX_WriteWordData [#pcc1b3ce] | ||
対象IDのコントロールテーブルへ1ワード(2バイト)のデータを書き込む。 | 対象IDのコントロールテーブルへ1ワード(2バイト)のデータを書き込む。 | ||
- | BOOL DX_WriteWordData (TDeviceID dvid, UCHAR id, UCHAR adr, USHORT dat, int timeout, TErrorCode *errcode); | + | bool DX_WriteWordData(TDeviceID dvid, uint8_t id, uint8_t adr, uint16_t dat, int timeout, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''id''' | + | --uint8_t '''id''' |
~対象とするID (0~253, 254)。 | ~対象とするID (0~253, 254)。 | ||
- | --UCHAR '''adr''' | + | --uint8_t '''adr''' |
~コントロールテーブルのアドレス。 | ~コントロールテーブルのアドレス。 | ||
- | --USHORT '''dat''' | + | --uint16_t '''dat''' |
~書き込む値。 | ~書き込む値。 | ||
--int '''timeout''' | --int '''timeout''' | ||
Line 496: | Line 500: | ||
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~正常な応答が得られた場合はTRUE、それ以外はFALSE。~ | + | ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ |
BROADCASTING IDを指定した場合は応答待ちを行わない。 | BROADCASTING IDを指定した場合は応答待ちを行わない。 | ||
-使用例 | -使用例 | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
// オープン | // オープン | ||
dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | ||
if (dev) { | if (dev) { | ||
- | // ID=1のAX-12+へ位置(511)を指令 | + | // ID=1のAX-12へ位置(511)を指令 |
DX_WriteWordData (dev, 1, 30, 511, 100, &err); | DX_WriteWordData (dev, 1, 30, 511, 100, &err); | ||
DX_ClosePort (dev); | DX_ClosePort (dev); | ||
Line 512: | Line 516: | ||
***DX_ReadBlockData [#b8a1ae1e] | ***DX_ReadBlockData [#b8a1ae1e] | ||
対象IDのコントロールテーブルから指定サイズのデータを読み出す。 | 対象IDのコントロールテーブルから指定サイズのデータを読み出す。 | ||
- | BOOL DX_ReadBlockData (TDeviceID dvid, UCHAR id, UCHAR adr, UCHAR size, UCHAR *result, int timeout, TErrorCode *errcode); | + | bool DX_ReadBlockData (TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t *rdata, int len, int timeout, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''id''' | + | --uint8_t '''id''' |
~対象とするID (0~253)。 | ~対象とするID (0~253)。 | ||
- | --UCHAR '''adr''' | + | --uint8_t '''adr''' |
~コントロールテーブルのアドレス。 | ~コントロールテーブルのアドレス。 | ||
- | --UCHAR '''size''' | + | --uint8_t '''*rdata''' |
+ | ~読み出したデータの保存先。 | ||
+ | --int '''len''' | ||
~読み出すデータのサイズ。 | ~読み出すデータのサイズ。 | ||
- | --UCHAR '''*result''' | ||
- | ~読み出したデータの保存先。 | ||
--int '''timeout''' | --int '''timeout''' | ||
~受信タイムアウト[ms]。 | ~受信タイムアウト[ms]。 | ||
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~正常な応答が得られた場合はTRUE、それ以外はFALSE。~ | + | ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ |
-使用例 | -使用例 | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
- | UCHAR comp[4]; | + | uint8_t comp[4]; |
dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | ||
if (dev) { | if (dev) { | ||
// ID=1のAX-12+からコンプライアンスのデータを取得 | // ID=1のAX-12+からコンプライアンスのデータを取得 | ||
- | if (DX_ReadBlockData (dev, 1, 26, 4, comp, 100, &err) { | + | if (DX_ReadBlockData (dev, 1, 26, comp, 4, 100, &err) { |
printf ( | printf ( | ||
"CWM=%d CCWM=%d CWS=%d CCWS=%d\n", | "CWM=%d CCWM=%d CWS=%d CCWS=%d\n", | ||
Line 549: | Line 553: | ||
***DX_WriteBlockData [#fcf55aa0] | ***DX_WriteBlockData [#fcf55aa0] | ||
対象IDのコントロールテーブルへ指定サイズのデータを書き込む。 | 対象IDのコントロールテーブルへ指定サイズのデータを書き込む。 | ||
- | BOOL DX_WriteBlockData (TDeviceID dvid, UCHAR id, UCHAR adr, UCHAR size, UCHAR *dat, int timeout, TErrorCode *errcode); | + | bool DX_WriteBlockData(TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t *dat, int len, int timeout, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''id''' | + | --uint8_t '''id''' |
~対象とするID (0~253, 254)。 | ~対象とするID (0~253, 254)。 | ||
- | --UCHAR '''adr''' | + | --uint8_t '''adr''' |
~コントロールテーブルのアドレス。 | ~コントロールテーブルのアドレス。 | ||
- | --UCHAR '''size''' | + | --uint8_t '''*dat''' |
- | ~書き込むデータのサイズ。 | + | |
- | --UCHAR '''*dat''' | + | |
~書き込むデータの保存先。 | ~書き込むデータの保存先。 | ||
+ | --int '''len''' | ||
+ | ~書き込むデータのサイズ。 | ||
--int '''timeout''' | --int '''timeout''' | ||
~受信タイムアウト[ms]。 | ~受信タイムアウト[ms]。 | ||
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~正常な応答が得られた場合はTRUE、それ以外はFALSE。~ | + | ~正常な応答が得られた場合はtrue、それ以外はfalseを返す。~ |
BROADCASTING IDを指定した場合は応答待ちを行わない。 | BROADCASTING IDを指定した場合は応答待ちを行わない。 | ||
-使用例 | -使用例 | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
- | UCHAR comp[4] = { 0, 1, 200, 200 }; | + | uint8_t comp[4] = { 0, 1, 200, 200 }; |
dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | ||
if (dev) { | if (dev) { | ||
// ID=1のAX-12+のコンプライアンスを変更 | // ID=1のAX-12+のコンプライアンスを変更 | ||
- | DX_WriteBlockData (dev, 1, 26, 4, comp, 100, &err); | + | DX_WriteBlockData (dev, 1, 26, comp, 4, 100, &err); |
DX_ClosePort (dev); | DX_ClosePort (dev); | ||
} | } | ||
Line 583: | Line 587: | ||
SYNCインストラクションを使用して複数IDへブロック書き込みを行う。~ | SYNCインストラクションを使用して複数IDへブロック書き込みを行う。~ | ||
書き込まれるデータの構成はユーザに委ねられる。 | 書き込まれるデータの構成はユーザに委ねられる。 | ||
- | BOOL DX_WriteSyncData (TDeviceID dvid, UCHAR size, UCHAR *dat, TErrorCode *errcode); | + | bool DX_WriteSyncData (TDeviceID dvid, uint8_t *dat, int size, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''size''' | + | --uint8_t '''*dat''' |
+ | ~書き込むパラメータの保存先。 | ||
+ | --int '''size''' | ||
~パラメータのサイズ。 | ~パラメータのサイズ。 | ||
- | --UCHAR '''*dat''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
- | ~書き込むパラメータの保存先。 | + | |
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | --BOOL | + | --bool |
- | ~インターフェースより送信が行われた場合はTRUE、それ以外はFALSE。~ | + | ~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。~ |
-使用例 | -使用例 | ||
#define _POS1 (400) | #define _POS1 (400) | ||
#define _POS2 (511) | #define _POS2 (511) | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
- | UCHAR param[8] = { | + | uint8_t param[8] = { |
30, // アドレス (Goal Position) | 30, // アドレス (Goal Position) | ||
2, // データ長 (2 byte) | 2, // データ長 (2 byte) | ||
Line 617: | Line 621: | ||
dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | dev = DX_OpenPort ("\\\\.\\COM10", 1000000); | ||
if (dev) { | if (dev) { | ||
- | // 2つのAX-12+へ同時に位置を指令 | + | // 2つのAX-12へ同時に位置を指令 |
- | DX_WriteSyncData (dev, 8, param, &err); | + | DX_WriteSyncData (dev, param, 8, &err); |
DX_ClosePort (dev); | DX_ClosePort (dev); | ||
}; | }; | ||
Line 624: | Line 628: | ||
***DX_TxPacket [#r051327a] | ***DX_TxPacket [#r051327a] | ||
任意のインストラクションパケットを送信する。 | 任意のインストラクションパケットを送信する。 | ||
- | int DX_TxPacket (TDeviceID dvid, UCHAR cID, TInstruction cInst, UCHAR *pParam, int iLength, TErrorCode *errcode); | + | bool DX_TxPacket (TDeviceID dvid, uint8_t id, TInstruction inst, uint8_t *param, int len, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''cID''' | + | --uint8_t '''id''' |
~対象とするID (0~254)。 | ~対象とするID (0~254)。 | ||
- | --[[TInstruction>#TInstruction]] '''cInst''' | + | --[[TInstruction>#TInstruction]] '''inst''' |
- | ~使用するインストラクションの種類。 | + | ~使用するインストラクション。 |
- | --UCHAR '''*pParam''' | + | --uint8_t '''*param''' |
~送信するパラメータの保存先。 | ~送信するパラメータの保存先。 | ||
- | --int '''iLength'''~ | + | --int '''len'''~ |
~送信するパラメータのサイズ。 | ~送信するパラメータのサイズ。 | ||
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | ~インターフェースより送信が行われた場合は送信バイト数、それ以外は0。 | + | ~インターフェースより送信が行われた場合はtrue、それ以外はfalseを返す。 |
-使用例 | -使用例 | ||
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
- | UCHAR param[2] = { | + | uint8_t param[2] = { |
25, // アドレス (LED) | 25, // アドレス (LED) | ||
0, // データ | 0, // データ | ||
Line 657: | Line 661: | ||
ステータスパケットを受信する。~ | ステータスパケットを受信する。~ | ||
基本的にDX_TxPacketとペアで使用する。ステータスパケットが得られない状況で使用するとタイムアウトするまで返らない。 | 基本的にDX_TxPacketとペアで使用する。ステータスパケットが得られない状況で使用するとタイムアウトするまで返らない。 | ||
- | int DX_RxPacket (TDeviceID dvid, UCHAR *pRcv, int sz, int readsize, int *pLength, int timeout, TErrorCode *errcode); | + | bool DXAPIDLL DX_RxPacket (TDeviceID dvid, uint8_t *rdata, int rdatasize, int *rlen, int timeout, TErrorCode *err); |
-パラメータ | -パラメータ | ||
--[[TDeviceID>#TDeviceID]] '''dvid''' | --[[TDeviceID>#TDeviceID]] '''dvid''' | ||
~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | ||
- | --UCHAR '''*pRcv''' | + | --uint8_t '''*rdata''' |
~受信バッファ。~ | ~受信バッファ。~ | ||
ステータスパケットを受信するのに十分なサイズを確保しておく必要がある。 | ステータスパケットを受信するのに十分なサイズを確保しておく必要がある。 | ||
- | --int '''sz''' | ||
- | ~受信バッファのサイズ。~ | ||
--int '''readsize''' | --int '''readsize''' | ||
- | ~予定されるステータスパケットのサイズ。 | + | ~rdataのサイズ。~ |
- | --int '''*pLength''' | + | --int '''*rlen''' |
~実際に受信されたステータスパケットのサイズ。 | ~実際に受信されたステータスパケットのサイズ。 | ||
--int '''timeout''' | --int '''timeout''' | ||
~受信タイムアウト[ms]。 | ~受信タイムアウト[ms]。 | ||
- | --[[TErrorCode>#TErrorCode]] '''*errcode''' | + | --[[TErrorCode>#TErrorCode]] '''*err''' |
~エラーコード。 | ~エラーコード。 | ||
-戻り値 | -戻り値 | ||
- | ~受信成功時は受信データ長、失敗時は0。 | + | ~受信成功時はtrue、それ以外はfalseを返す。 |
-使用例 | -使用例 | ||
- | int i, len; | + | int i, len; |
- | TDeviceID dev; | + | TDeviceID dev; |
TErrorCode err; | TErrorCode err; | ||
- | UCHAR param[2] = { | + | uint8_t param[2] = { |
25, // アドレス (LED) | 25, // アドレス (LED) | ||
1, // サイズ | 1, // サイズ | ||
Line 690: | Line 692: | ||
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), 7, &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]); | ||
Line 697: | Line 699: | ||
DX_ClosePort (dev); | DX_ClosePort (dev); | ||
}; | }; | ||
- | ***DXLIB2のオリジナルな定義 [#af9ca340] | + | |
+ | ***DXLIBのオリジナルな定義 [#af9ca340] | ||
&aname(TDeviceID); | &aname(TDeviceID); | ||
- | :TDeviceID | ''(unsigned int|unsigned long long)''~ | + | :TDeviceID | ''(uint32_t|uint64_t)''~ |
インターフェース毎に割り当てられるユニークな値。DX_OpenPortにて自動的に生成される。 | インターフェース毎に割り当てられるユニークな値。DX_OpenPortにて自動的に生成される。 | ||
&aname(TInstruction);~ | &aname(TInstruction);~ | ||
- | :TInstruction | ''(UCHAR)''~ | + | :TInstruction | ''(uint8_t)''~ |
DX_TxPacketにてインストラクションパケットを送信する場合に使用される。~ | DX_TxPacketにてインストラクションパケットを送信する場合に使用される。~ | ||
使用可能なマクロは以下の通り。~ | 使用可能なマクロは以下の通り。~ | ||
Line 713: | Line 716: | ||
INST_SYNC_WRITE~ | INST_SYNC_WRITE~ | ||
INST_SYNG_REG_WRITE | INST_SYNG_REG_WRITE | ||
+ | &aname(TDxAlarmStatus); | ||
+ | :TDxAlarmStatus | struct {&br; uint8_t id;&br; TErrorCode Status;&br; | ||
+ | }~ | ||
+ | idとTErrorCodeを対にした構造体。 | ||
&aname(TErrorCode); | &aname(TErrorCode); | ||
- | :TErrorCode | ''(USHORT)''~ | + | :TErrorCode | ''(uint16_t)''~ |
APIの内部処理とステータスパケットに含まれる16ビットのエラーコード。上位8ビットはAPI内部で検出したエラー、下位8ビットはステータスパケットに含まれるエラーフラグが割り当てられている。~ | APIの内部処理とステータスパケットに含まれる16ビットのエラーコード。上位8ビットはAPI内部で検出したエラー、下位8ビットはステータスパケットに含まれるエラーフラグが割り当てられている。~ | ||
|CENTER:|LEFT:|LEFT:|c | |CENTER:|LEFT:|LEFT:|c |