Delphi で USB I/O (Y2 Corporation) を使う 2018/08/04
株式会社ワイツー様(リンクは、こちら)の USB I/O を Delphi から使ってみました。
非絶縁タイプであれば、I/O 1点当たりのコストパフォーマンスが非常に良いです。
最新のドライバでは、Windows 10 にも対応しています。
最新の Ydu.dll では、YduOpen に接続モードが追加されています。
サンプルコード(関連部分のみ)
//*********************************** USB I/O *********************************** const YDU_RESULT_SUCCESS = 0; // 正常終了 const YDU_RESULT_ERROR = $CE000001; // エラー const YDU_RESULT_NOT_OPEN = $CE000002; // オープンされていない const YDU_RESULT_ALREADY_OPEN = $CE000003; // オープン済み const YDU_RESULT_INVALID_UNIT_ID = $CE000004; // ユニットIDが不正 const YDU_RESULT_INVALID_EPNO = $CE000005; // EP指定が不正(内部エラー) const YDU_RESULT_CANNOT_OPEN = $CE000006; // デバイスがオープンできなかった const YDU_RESULT_EXT_BOARD_OVER = $CE000007; // 拡張ボード数上限オーバー const YDU_RESULT_PARAMETER_ERROR = $CE000008; // 引数不正 const YDU_RESULT_MEM_ALLOC_ERROR = $CE000009; // メモリ確保エラー const YDU_RESULT_MODELNAME_ERROR = $CE00000A; // 型名指定が不正 const YDU_RESULT_FATAL_ERROR = $CEFFFFFF; // 致命的エラー const DEVICE_CLOSED = 0; const DEVICE_OPENED = 1; // Ydu.dll プロトタイプ // 新バージョン(接続モードが追加されてる) function YduOpen (wUnitID: WORD; lpszModelName: AnsiString; wMode: WORD):longint; stdcall;external 'Ydu.dll'; // 旧バージョン(WinXP + Delphi 2007あたり) // function YduOpen (wUnitID: WORD; lpszModelName:LPCTSTR; wMode : WORD): longint; stdcall; external 'Ydu.dll'; function YduClose(wUnitID: WORD):boolean; stdcall; external 'Ydu.dll'; function YduDioOutput(wUnitID: WORD; var byData: BYTE; wStart: WORD; wCount: WORD): longint; stdcall; external 'Ydu.dll'; function YduDioInput (wUnitID: WORD; var byData: BYTE; wStart: WORD; wCount: WORD): longint; stdcall; external 'Ydu.dll'; //******************************************************************************* // 読込部分 var InputAry : array [0..191] of BYTE; YduResult : LongInt; intOpenFlag : integer; begin // オープン(ユニットID, 型番, モード) YduResult := YduOpen(0, 'DIO-N192/00A-U', 0); if YduResult = YDU_RESULT_SUCCESS then intOpenFlag := DEVICE_OPENED; // 読込 if intOpenFlag = DEVICE_OPENED then begin YduResult := YduDioInput(0, InputAry[0], 0, 192); // クローズ YduClose(0); end; end;