23: 2013-04-25 (木) 01:34:20 takaboo |
24: 2013-09-12 (木) 18:23:23 takaboo |
| **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] | | **ライブラリおよびサンプルプログラムのダウンロード [#j8bd290f] |
| 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 | | 以下のリンクよりライブラリ及びサンプルプログラムをアーカイブしたファイルがダウンロードできます。 |
- | -''2013/03/28 Ver.2.8.1''~ | + | -''2013/09/ Ver.2.9''~ |
| + | #ref(http://www.besttechnology.co.jp/download/DXLIBforWin2.9.zip) |
| + | 内容 |
| + | --タイムアウトの値を見定めるのが困難という事から基本的に引数から排除し、内部で理論値を算出する様に変更。 |
| + | --タイムアウト以外にタイムラグが必要ということでDX_SetTimeOutOffsetを新設。 |
| + | --USB搭載のマイコンのファームにおいてポートオープンの状態検出の仕様を変更したため、DTRの制御をイネーブルに変更。 |
| + | --DX_ChangeBaudrateをDX_SetBaudrateに改名。 |
| + | --サイズを指定する引数はuint32_tに統一。 |
| + | --Linux対応をさらに進め、USB搭載のマイコン等でioctlによるボーレートの変更が使えないケースに一部対応。 |
| + | -2013/03/28 Ver.2.8.1~ |
| #ref(http://www.besttechnology.co.jp/download/DXLIBforWin2.8.1.zip) | | #ref(http://www.besttechnology.co.jp/download/DXLIBforWin2.8.1.zip) |
| 内容 | | 内容 |
| ライブラリの内部情報を初期化すると同時に指定された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 *name, long baud); | + | TDeviceID DX_OpenPort (char *name, uint32_t baud); |
| -パラメータ | | -パラメータ |
| --char '''*name''' | | --char '''*name''' |
| } | | } |
| | | |
- | ***DX_ChangeBaudrate [#ba9f52b8] | + | ***DX_SetBaudrate [#ba9f52b8] |
| 既にオープンされている[[TDeviceID>#TDeviceID]]の通信速度の変更を行う。~ | | 既にオープンされている[[TDeviceID>#TDeviceID]]の通信速度の変更を行う。~ |
| 実行すると強制的に受信バッファがクリアされる。 | | 実行すると強制的に受信バッファがクリアされる。 |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| } | | } |
| + | |
| + | ***DX_SetTimeOutOffset [#h4a1b54e] |
| + | I/FやOSの都合で生じるであろうタイムラグを予め設定する。~ |
| + | 内部で算出している受信タイムアウト時間とタイムアウトオフセット時間を加算した時間を超えた場合に、タイムアウトエラーとして処理する。~ |
| + | デフォルトは0。 |
| + | void DX_SetTimeOutOffset (TDeviceID dvid, uint32_t offsettime); |
| + | -パラメータ |
| + | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| + | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 |
| + | --uint32_t '''offsettime''' |
| + | ~タイムアウトオフセット時間[ms] |
| + | -戻り値 |
| + | --bool |
| + | ~指定されたdvidが使用可能な場合はtrue、使用不可の場合はfalseを返す。 |
| | | |
| ***DX_Ping [#v393b505] | | ***DX_Ping [#v393b505] |
| PINGインストラクションを使用して対象IDからの応答を確認する。 | | PINGインストラクションを使用して対象IDからの応答を確認する。 |
- | bool DX_Ping (TDeviceID dvid, uint8_t id, int timeout, TErrorCode *err); | + | bool DX_Ping (TDeviceID dvid, uint8_t id, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint8_t '''id''' | | --uint8_t '''id''' |
| ~対象とするID (0~253)。 | | ~対象とするID (0~253)。 |
- | --int '''timeout''' | |
- | ~受信タイムアウト[ms]。 | |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ~エラーコード。 | | ~エラーコード。 |
| if (dev) { | | if (dev) { |
| // ID=1にPINGを発行 | | // ID=1にPINGを発行 |
- | if (DX_Ping (dev, 1, 100, &err)) | + | if (DX_Ping (dev, 1, &err)) |
| printf ("Found [%08X]\n", err); | | printf ("Found [%08X]\n", err); |
| else | | else |
| PINGインストラクションでBROADCASTING IDを指定して不特定の対象の応答を確認する。~ | | PINGインストラクションでBROADCASTING IDを指定して不特定の対象の応答を確認する。~ |
| BROADCASTING IDを指定した場合の応答がデバイスのシリーズによって差が生じるため、正確な情報を取得できない場合がある。 | | BROADCASTING IDを指定した場合の応答がデバイスのシリーズによって差が生じるため、正確な情報を取得できない場合がある。 |
- | bool DX_Ping2 (TDeviceID dvid, int *num, TDxAlarmStatus *AlarmStatus, TErrorCode *err); | + | bool DX_Ping2 (TDeviceID dvid, uint32_t *num, TDxAlarmStatus *AlarmStatus, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 | | ~DX_OpenPortで開いた際の[[TDeviceID>#TDeviceID]]。 |
- | --int '''*num''' | + | --uint32_t '''*num''' |
| ~検索する最大数及び検索で見つかったデバイス数の保存先。 | | ~検索する最大数及び検索で見つかったデバイス数の保存先。 |
| --[[TDxAlarmStatus>#TDxAlarmStatus]] '''*AlarmStatus''' | | --[[TDxAlarmStatus>#TDxAlarmStatus]] '''*AlarmStatus''' |
| uint8_t id; | | uint8_t id; |
| TDxAlarmStatus stat[253]; | | TDxAlarmStatus stat[253]; |
- | int i, num = 100; | + | int i; |
| + | uint32_t num = 100; |
| // オープン | | // オープン |
| dev = DX_OpenPort ("\\\\.\\COM10", 57143); | | dev = DX_OpenPort ("\\\\.\\COM10", 57143); |
| ***DX_ReadByteData [#u7d86432] | | ***DX_ReadByteData [#u7d86432] |
| 対象IDのコントロールテーブルから1バイトのデータを読み出す。 | | 対象IDのコントロールテーブルから1バイトのデータを読み出す。 |
- | bool DX_ReadByteData(TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t *rdata, int timeout, TErrorCode *err); | + | bool DX_ReadByteData(TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t *rdata, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint8_t '''*rdata''' | | --uint8_t '''*rdata''' |
| ~読み出した値の保存先。 | | ~読み出した値の保存先。 |
- | --int '''timeout''' | |
- | ~受信タイムアウト[ms]。 | |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ~エラーコード。 | | ~エラーコード。 |
| 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, &err)) { |
| printf ("LED STAT=%d\n", dat); | | printf ("LED STAT=%d\n", dat); |
| } | | } |
| ***DX_WriteByteData [#ma2205f0] | | ***DX_WriteByteData [#ma2205f0] |
| 対象IDのコントロールテーブルへ1バイトのデータを書き込む。 | | 対象IDのコントロールテーブルへ1バイトのデータを書き込む。 |
- | bool DXAPIDLL DX_WriteByteData(TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t dat, int timeout, TErrorCode *err); | + | bool DXAPIDLL DX_WriteByteData(TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t dat, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint8_t '''dat'''~ | | --uint8_t '''dat'''~ |
| ~書き込む値。 | | ~書き込む値。 |
- | --int '''timeout''' | |
- | ~受信タイムアウト[ms]。 | |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ~エラーコード。 | | ~エラーコード。 |
| 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, &err)) { |
| dat ^= 1; // ビット反転 | | dat ^= 1; // ビット反転 |
| // ID=1のAX-12へLEDの状態を設定 | | // ID=1のAX-12へLEDの状態を設定 |
- | DX_WriteByteData (dev, 1, 25, dat, 100, &err); | + | DX_WriteByteData (dev, 1, 25, dat, &err); |
| } | | } |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| ***DX_ReadWordData [#x202d573] | | ***DX_ReadWordData [#x202d573] |
| 対象IDのコントロールテーブルから1ワード(2バイト)のデータを読み出す。 | | 対象IDのコントロールテーブルから1ワード(2バイト)のデータを読み出す。 |
- | bool DX_ReadWordData(TDeviceID dvid, uint8_t id, uint8_t adr, uint16_t *rdata, int timeout, TErrorCode *err); | + | bool DX_ReadWordData(TDeviceID dvid, uint8_t id, uint8_t adr, uint16_t *rdata, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint16_t '''*rdata''' | | --uint16_t '''*rdata''' |
| ~読み出した値の保存先。 | | ~読み出した値の保存先。 |
- | --int '''timeout''' | |
- | ~受信タイムアウト[ms]。 | |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ~エラーコード。 | | ~エラーコード。 |
| 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, &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, uint8_t id, uint8_t adr, uint16_t dat, int timeout, TErrorCode *err); | + | bool DX_WriteWordData(TDeviceID dvid, uint8_t id, uint8_t adr, uint16_t dat, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint16_t '''dat''' | | --uint16_t '''dat''' |
| ~書き込む値。 | | ~書き込む値。 |
- | --int '''timeout''' | |
- | ~受信タイムアウト[ms]。 | |
| --[[TErrorCode>#TErrorCode]] '''*errcode''' | | --[[TErrorCode>#TErrorCode]] '''*errcode''' |
| ~エラーコード。 | | ~エラーコード。 |
| 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, &err); |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| } | | } |
| ***DX_ReadBlockData [#b8a1ae1e] | | ***DX_ReadBlockData [#b8a1ae1e] |
| 対象IDのコントロールテーブルから指定サイズのデータを読み出す。 | | 対象IDのコントロールテーブルから指定サイズのデータを読み出す。 |
- | bool DX_ReadBlockData (TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t *rdata, int len, int timeout, TErrorCode *err); | + | bool DX_ReadBlockData (TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t *rdata, uint32_t len, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint8_t '''*rdata''' | | --uint8_t '''*rdata''' |
| ~読み出したデータの保存先。 | | ~読み出したデータの保存先。 |
- | --int '''len''' | + | --uint32_t '''len''' |
| ~読み出すデータのサイズ。 | | ~読み出すデータのサイズ。 |
- | --int '''timeout''' | |
- | ~受信タイムアウト[ms]。 | |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ~エラーコード。 | | ~エラーコード。 |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12+からコンプライアンスのデータを取得 | | // ID=1のAX-12+からコンプライアンスのデータを取得 |
- | if (DX_ReadBlockData (dev, 1, 26, comp, 4, 100, &err) { | + | if (DX_ReadBlockData (dev, 1, 26, comp, 4, &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, uint8_t id, uint8_t adr, uint8_t *dat, int len, int timeout, TErrorCode *err); | + | bool DX_WriteBlockData(TDeviceID dvid, uint8_t id, uint8_t adr, uint8_t *dat, uint32_t len, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint8_t '''*dat''' | | --uint8_t '''*dat''' |
| ~書き込むデータの保存先。 | | ~書き込むデータの保存先。 |
- | --int '''len''' | + | --uint32_t '''len''' |
| ~書き込むデータのサイズ。 | | ~書き込むデータのサイズ。 |
- | --int '''timeout''' | |
- | ~受信タイムアウト[ms]。 | |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ~エラーコード。 | | ~エラーコード。 |
| if (dev) { | | if (dev) { |
| // ID=1のAX-12+のコンプライアンスを変更 | | // ID=1のAX-12+のコンプライアンスを変更 |
- | DX_WriteBlockData (dev, 1, 26, comp, 4, 100, &err); | + | DX_WriteBlockData (dev, 1, 26, comp, 4, &err); |
| DX_ClosePort (dev); | | DX_ClosePort (dev); |
| } | | } |
| SYNCインストラクションを使用して複数IDへブロック書き込みを行う。~ | | SYNCインストラクションを使用して複数IDへブロック書き込みを行う。~ |
| 書き込まれるデータの構成はユーザに委ねられる。 | | 書き込まれるデータの構成はユーザに委ねられる。 |
- | bool DX_WriteSyncData (TDeviceID dvid, uint8_t *dat, int size, TErrorCode *err); | + | bool DX_WriteSyncData (TDeviceID dvid, uint8_t *dat, uint32_t size, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint8_t '''*dat''' | | --uint8_t '''*dat''' |
| ~書き込むパラメータの保存先。 | | ~書き込むパラメータの保存先。 |
- | --int '''size''' | + | --uint32_t '''size''' |
| ~パラメータのサイズ。 | | ~パラメータのサイズ。 |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ***DX_TxPacket [#r051327a] | | ***DX_TxPacket [#r051327a] |
| 任意のインストラクションパケットを送信する。 | | 任意のインストラクションパケットを送信する。 |
- | bool DX_TxPacket (TDeviceID dvid, uint8_t id, TInstruction inst, uint8_t *param, int len, TErrorCode *err); | + | bool DX_TxPacket (TDeviceID dvid, uint8_t id, TInstruction inst, uint8_t *param, uint32_t len, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| --uint8_t '''*param''' | | --uint8_t '''*param''' |
| ~送信するパラメータの保存先。 | | ~送信するパラメータの保存先。 |
- | --int '''len'''~ | + | --uint32_t '''len'''~ |
| ~送信するパラメータのサイズ。 | | ~送信するパラメータのサイズ。 |
| --[[TErrorCode>#TErrorCode]] '''*err''' | | --[[TErrorCode>#TErrorCode]] '''*err''' |
| ステータスパケットを受信する。~ | | ステータスパケットを受信する。~ |
| 基本的にDX_TxPacketとペアで使用する。ステータスパケットが得られない状況で使用するとタイムアウトするまで返らない。 | | 基本的にDX_TxPacketとペアで使用する。ステータスパケットが得られない状況で使用するとタイムアウトするまで返らない。 |
- | bool DXAPIDLL DX_RxPacket (TDeviceID dvid, uint8_t *rdata, int rdatasize, int *rlen, int timeout, TErrorCode *err); | + | bool DX_RxPacket (TDeviceID dvid, uint8_t *rdata, uint32_t rdatasize, uint32_t *rlen, uint32_t timeout, TErrorCode *err); |
| -パラメータ | | -パラメータ |
| --[[TDeviceID>#TDeviceID]] '''dvid''' | | --[[TDeviceID>#TDeviceID]] '''dvid''' |
| ~受信バッファ。~ | | ~受信バッファ。~ |
| ステータスパケットを受信するのに十分なサイズを確保しておく必要がある。 | | ステータスパケットを受信するのに十分なサイズを確保しておく必要がある。 |
- | --int '''readsize''' | + | --uint32_t '''readsize''' |
| ~rdataのサイズ。~ | | ~rdataのサイズ。~ |
- | --int '''*rlen''' | + | --uint32_t '''*rlen''' |
| ~実際に受信されたステータスパケットのサイズ。 | | ~実際に受信されたステータスパケットのサイズ。 |
| --int '''timeout''' | | --int '''timeout''' |
| ~受信成功時はtrue、それ以外はfalseを返す。 | | ~受信成功時はtrue、それ以外はfalseを返す。 |
| -使用例 | | -使用例 |
- | int i, len; | + | int i; |
| + | uint32_t len; |
| TDeviceID dev; | | TDeviceID dev; |
| TErrorCode err; | | TErrorCode err; |