18: 2013-03-28 (木) 20:38:24 takaboo |
19: 2013-03-29 (金) 02:09:00 takaboo |
| --受信スレッドを完全に廃止し処理をブロッキング化し可読性を向上。 | | --受信スレッドを完全に廃止し処理をブロッキング化し可読性を向上。 |
| --パケットの整合性チェックを厳密化。 | | --パケットの整合性チェックを厳密化。 |
- | -''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) |
| 内容 | | 内容 |
| |~|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 |~| |
| | | |
| ****DLLの静的リンク [#la562acf] | | ****DLLの静的リンク [#la562acf] |
- | 静的にDLLを使用する場合は以下の手順でライブラリをリンクする指定を行った上でコンパイルします。なお、コンパイル後のファイルを実行する際にdxlib2.dllが同一のフォルダに存在しないと、プログラムは起動直後に異常終了してしまいます。 | + | 静的にDLLを使用する場合は以下の手順でDLLをリンクする指定を行った上でコンパイルします。なお、コンパイル後のファイルを実行する際にDLLが同一のフォルダに存在しないと、プログラムは起動直後に異常終了してしまいます。 |
| +ファイルの準備~ | | +ファイルの準備~ |
| ~ダウンロードファイルを解凍後、コンパイルするソースファイルと同一フォルダに以下のファイルをコピー~ | | ~ダウンロードファイルを解凍後、コンパイルするソースファイルと同一フォルダに以下のファイルをコピー~ |
| +コンパイルオプションの選択 | | +コンパイルオプションの選択 |
| ~ツールメニュー→コンパイラオプションをクリックし、表示されるダイアログボックスの設定リストから'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を押して設定を反映 |
| |=ファイル |=ファイル名 |=備考 | | | |=ファイル |=ファイル名 |=備考 | |
| |<ヘッダ |<dxlib.h |<必要な宣言を集約 | | | |<ヘッダ |<dxlib.h |<必要な宣言を集約 | |
- | |<DLL |<dxlib_x32.dll |<DLL本体(実行時に必要) | | + | |<DLL |<dxlib_x32.dll |<実行時に必要 | |
| |<ライブラリ |<dxlib_x32.lib |<リンク時に必要 | | | |<ライブラリ |<dxlib_x32.lib |<リンク時に必要 | |
| +プロジェクトのプロパティを変更~ | | +プロジェクトのプロパティを変更~ |
| | | |
| ***Linux [#w5c096b8] | | ***Linux [#w5c096b8] |
- | Linux上でのdxlib2のコンパイル方法を紹介します。~ | + | Linux上でのdxlibのコンパイル方法を紹介します。~ |
| +コンパイル準備~ | | +コンパイル準備~ |
| ダウンロードファイルを解凍~ | | ダウンロードファイルを解凍~ |
| ライブラリの内部情報を初期化すると同時に指定された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]。 |
| -戻り値 | | -戻り値 |
| 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; |
| 既にオープンされている[[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; |
| | | |
| ***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; |
| ***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; |
| // オープン | | // オープン |
| | | |
| ***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); |
| ***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); |
| ***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); |
| ***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); |
| ***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''' |
| ~エラーコード。 | | ~エラーコード。 |
| -戻り値 | | -戻り値 |
- | --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); |
| ***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", |
| ***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); |
| } | | } |
| 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) |
| 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); |
| }; | | }; |
| ***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, // データ |
| ステータスパケットを受信する。~ | | ステータスパケットを受信する。~ |
| 基本的に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, // サイズ |
| 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]); |
| 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にてインストラクションパケットを送信する場合に使用される。~ |
| 使用可能なマクロは以下の通り。~ | | 使用可能なマクロは以下の通り。~ |
| 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 |