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;