23: 2013-04-25 (木) 01:34:20 takaboo[6] [7] | 24: 2013-09-12 (木) 18:23:23 takaboo[6] [8] | ||
---|---|---|---|
Line 8: | Line 8: | ||
**ライブラリおよびサンプルプログラムのダウンロード [#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) | ||
内容 | 内容 | ||
Line 255: | Line 264: | ||
ライブラリの内部情報を初期化すると同時に指定された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''' | ||
Line 290: | Line 299: | ||
} | } | ||
- | ***DX_ChangeBaudrate [#ba9f52b8] | + | ***DX_SetBaudrate [#ba9f52b8] |
既にオープンされている[[TDeviceID>#TDeviceID]]の通信速度の変更を行う。~ | 既にオープンされている[[TDeviceID>#TDeviceID]]の通信速度の変更を行う。~ | ||
実行すると強制的に受信バッファがクリアされる。 | 実行すると強制的に受信バッファがクリアされる。 | ||
Line 335: | Line 344: | ||
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''' | ||
Line 344: | Line 367: | ||
--uint8_t '''id''' | --uint8_t '''id''' | ||
~対象とするID (0~253)。 | ~対象とするID (0~253)。 | ||
- | --int '''timeout''' | ||
- | ~受信タイムアウト[ms]。 | ||
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
~エラーコード。 | ~エラーコード。 | ||
Line 358: | Line 379: | ||
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 | ||
Line 369: | Line 390: | ||
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''' | ||
Line 388: | Line 409: | ||
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); | ||
Line 403: | Line 425: | ||
***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''' | ||
Line 413: | Line 435: | ||
--uint8_t '''*rdata''' | --uint8_t '''*rdata''' | ||
~読み出した値の保存先。 | ~読み出した値の保存先。 | ||
- | --int '''timeout''' | ||
- | ~受信タイムアウト[ms]。 | ||
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
~エラーコード。 | ~エラーコード。 | ||
Line 428: | Line 448: | ||
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); | ||
} | } | ||
Line 436: | Line 456: | ||
***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''' | ||
Line 446: | Line 466: | ||
--uint8_t '''dat'''~ | --uint8_t '''dat'''~ | ||
~書き込む値。 | ~書き込む値。 | ||
- | --int '''timeout''' | ||
- | ~受信タイムアウト[ms]。 | ||
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
~エラーコード。 | ~エラーコード。 | ||
Line 462: | Line 480: | ||
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); | ||
Line 472: | Line 490: | ||
***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''' | ||
Line 482: | Line 500: | ||
--uint16_t '''*rdata''' | --uint16_t '''*rdata''' | ||
~読み出した値の保存先。 | ~読み出した値の保存先。 | ||
- | --int '''timeout''' | ||
- | ~受信タイムアウト[ms]。 | ||
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
~エラーコード。 | ~エラーコード。 | ||
Line 497: | Line 513: | ||
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); | ||
} | } | ||
Line 505: | Line 521: | ||
***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''' | ||
Line 515: | Line 531: | ||
--uint16_t '''dat''' | --uint16_t '''dat''' | ||
~書き込む値。 | ~書き込む値。 | ||
- | --int '''timeout''' | ||
- | ~受信タイムアウト[ms]。 | ||
--[[TErrorCode>#TErrorCode]] '''*errcode''' | --[[TErrorCode>#TErrorCode]] '''*errcode''' | ||
~エラーコード。 | ~エラーコード。 | ||
Line 530: | Line 544: | ||
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); | ||
} | } | ||
Line 536: | Line 550: | ||
***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''' | ||
Line 546: | Line 560: | ||
--uint8_t '''*rdata''' | --uint8_t '''*rdata''' | ||
~読み出したデータの保存先。 | ~読み出したデータの保存先。 | ||
- | --int '''len''' | + | --uint32_t '''len''' |
~読み出すデータのサイズ。 | ~読み出すデータのサイズ。 | ||
- | --int '''timeout''' | ||
- | ~受信タイムアウト[ms]。 | ||
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
~エラーコード。 | ~エラーコード。 | ||
Line 562: | Line 574: | ||
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", | ||
Line 573: | Line 585: | ||
***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''' | ||
Line 583: | Line 595: | ||
--uint8_t '''*dat''' | --uint8_t '''*dat''' | ||
~書き込むデータの保存先。 | ~書き込むデータの保存先。 | ||
- | --int '''len''' | + | --uint32_t '''len''' |
~書き込むデータのサイズ。 | ~書き込むデータのサイズ。 | ||
- | --int '''timeout''' | ||
- | ~受信タイムアウト[ms]。 | ||
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
~エラーコード。 | ~エラーコード。 | ||
Line 600: | Line 610: | ||
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); | ||
} | } | ||
Line 607: | Line 617: | ||
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''' | ||
Line 613: | Line 623: | ||
--uint8_t '''*dat''' | --uint8_t '''*dat''' | ||
~書き込むパラメータの保存先。 | ~書き込むパラメータの保存先。 | ||
- | --int '''size''' | + | --uint32_t '''size''' |
~パラメータのサイズ。 | ~パラメータのサイズ。 | ||
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
Line 648: | Line 658: | ||
***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''' | ||
Line 658: | Line 668: | ||
--uint8_t '''*param''' | --uint8_t '''*param''' | ||
~送信するパラメータの保存先。 | ~送信するパラメータの保存先。 | ||
- | --int '''len'''~ | + | --uint32_t '''len'''~ |
~送信するパラメータのサイズ。 | ~送信するパラメータのサイズ。 | ||
--[[TErrorCode>#TErrorCode]] '''*err''' | --[[TErrorCode>#TErrorCode]] '''*err''' | ||
Line 681: | Line 691: | ||
ステータスパケットを受信する。~ | ステータスパケットを受信する。~ | ||
基本的に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''' | ||
Line 688: | Line 698: | ||
~受信バッファ。~ | ~受信バッファ。~ | ||
ステータスパケットを受信するのに十分なサイズを確保しておく必要がある。 | ステータスパケットを受信するのに十分なサイズを確保しておく必要がある。 | ||
- | --int '''readsize''' | + | --uint32_t '''readsize''' |
~rdataのサイズ。~ | ~rdataのサイズ。~ | ||
- | --int '''*rlen''' | + | --uint32_t '''*rlen''' |
~実際に受信されたステータスパケットのサイズ。 | ~実際に受信されたステータスパケットのサイズ。 | ||
--int '''timeout''' | --int '''timeout''' | ||
Line 699: | Line 709: | ||
~受信成功時はtrue、それ以外はfalseを返す。 | ~受信成功時はtrue、それ以外はfalseを返す。 | ||
-使用例 | -使用例 | ||
- | int i, len; | + | int i; |
+ | uint32_t len; | ||
TDeviceID dev; | TDeviceID dev; | ||
TErrorCode err; | TErrorCode err; |
(This host) = http://www.besttechnology.co.jp