※2019/02/10 IntToBin, IntToBinRev を変更
三共電子の音声再生ボード WAV-5F2 の 255CH 入力のテスト用に 「USB接続デジタル入出力モジュール」 USB-IO2.0(AKI) を使ってみました。2019/02/06
USB-IO の入出力数は 12 点で、設定により入力、出力が変更できます。(出力数の最大は、10点まで)
USB-IO の信号は DC5V レベルなので、DC24V/12V の WAV-5F2 に接続するには、フォトカプラ等が必要になります。
USB-IO との通信は、「バケさんの電子工作」さんの vbausbio.dll Ver.0.70 を使用させて頂きました。
入力設定については、良く分からなかったので、製品に同梱されている Km2Net Inc. のサンプルアプリを使用させて頂きました。Vector でも DL 可能です。

unit Unit4;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;
type
TForm4 = class(TForm)
Button1: TButton;
Edit1: TEdit;
UpDown1: TUpDown;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form4: TForm4;
{
・「バケさんの電子工作」
http://bake-san.blogspot.com/2013/01/vbausbiodllusbio20windows7.html
vbausbio.dll Ver.0.70 を Delphi で使うサンプルです。
EXE と同じフォルダに dll を置くだけで動きます。
入出力の設定は、製品に同梱のサンプルアプリで行えます。
Vector から DL 可能です。
https://www.vector.co.jp/soft/winnt/prog/se491872.html
・「秋月電子通商」
USB接続デジタル入出力モジュール USB-IO2.0(AKI)
http://akizukidenshi.com/catalog/g/gM-05131/
}
{
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'VBA用の専用DLL(vbausbio.dll)用定義部
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'使用方法
' uio_findでUSB-IOを検索・初期化して,その後に
' uio_inp/outで読み書きしてください.
' uio_seldevで複数のUSB-IOを切り替えて使うことが出来ます.
' (uio_findを実行しなくても初めてuio_inp/outを実行するときには自動的に
' uio_findが呼ばれます.ただし,最初だけなのでUSB-IOが一度外されて,
' もう一度挿された場合などは無視されます.)
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'------------------------------------------------------------------------------
'USB-IOにPortを指定してデータを出力する
'p3に1を指定すると,ポート1のp1にパルスを送りポート0を書き換えます
' Port : Portを指定する(0,1)、パルス出力の場合はビット(0~3)
' OutDat : データ(0~255)
' p3 : パルス出力有無(0:なし、1:あり)
' 戻り値 : 0:正常、1:異常
'------------------------------------------------------------------------------
Declare Function uio_out Lib "vbausbio.dll" (ByVal Port As Long, _
ByVal OutDat As Long, ByVal p3 As Long) As Long
}
function uio_out(Port: integer; OutDat: integer; p3: integer): integer;
stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IOからPortを指定してデータを取得する
'p3に1を指定すると,ポート1のp1にパルスを送りポート0から読み込みます
' InpDat : 取得データ(取得したい変数を指定する)
' Port : Portを指定する(0,1)、パルス出力の場合はビット(0~3)
' p3 : パルス出力有無(0:なし、1:あり)
' 戻り値 : 0:正常、1:命令が書けなかった、2:データを取得できなかった
'------------------------------------------------------------------------------
Declare Function uio_inp Lib "vbausbio.dll" (ByRef InpDat As Byte, _
ByVal Port As Long, ByVal p3 As Long) As Long
}
function uio_inp(var InpDat: Byte; Port: integer; p3: integer): integer;
stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IOを検索・初期化する
' 戻り値 : 0:正常、1:必要なドライバが無い、2:USB-IOが繋がってない
'------------------------------------------------------------------------------
Declare Function uio_find Lib "vbausbio.dll" () As Long
}
function uio_find: integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IO用の資源を解放する
' 戻り値 : 0
'------------------------------------------------------------------------------
Declare Function uio_free Lib "vbausbio.dll" () As Long
}
function uio_free: integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'繋がれているUSB-IOの数が戻り値に帰ります
' 戻り値 : 個数
'------------------------------------------------------------------------------
Declare Function uio_getDevs Lib "vbausbio.dll" () As Long
}
function uio_getDevs: integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IOを番号で指定する
' p1 : 番号(0~uio_getdevsで得た個数-1) ただし0から
' 戻り値 : 0
'------------------------------------------------------------------------------
Declare Function uio_selDev Lib "vbausbio.dll" (ByVal p1 As Long) As Long
}
function uio_selDev(p1: integer): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'番号を指定してVenderIDを取得する
' p1 : 番号(0~uio_getdevsで得た個数-1) ただし0から
' 戻り値 : VenderID
'------------------------------------------------------------------------------
Declare Function uio_getVid Lib "vbausbio.dll" (ByVal p1 As Long) As Long
}
// 0x1352: Km2Net
function uio_getVid(p1: integer): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'番号を指定してProductIDを取得する
' p1 : 番号(0~uio_getdevsで得た個数-1) ただし0から
' 戻り値 : ProductID
'------------------------------------------------------------------------------
Declare Function uio_getPid Lib "vbausbio.dll" (ByVal p1 As Long) As Long
}
// 0x0120: USB-IO2.0、0x0121: USB-IO2.0(AKI)
function uio_getPid(p1: integer): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IOにコマンドデータをセットし、USB-IOからデータを取得する
' Dat(0) : 常に0
' Dat(1) : コマンド
' Dat(2) : 以降データ
' Dat(3) : :
' :
' Dat(64)
' 戻り値 : 0:正常、1:命令が書けなかった、2:データを取得できなかった
'------------------------------------------------------------------------------
Declare Function uio_cmd Lib "vbausbio.dll" (ByRef Dat As Byte) As Long
}
function uio_cmd(var Dat: Byte): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IO2.0にPortを指定してデータを出力する
' OutDat(0): Portを指定する(1~2)
' OutDat(1): データ(0~255)
' OutDat(2): Portを指定する(1~2)
' OutDat(3): データ(0~255)
' :
' OutDat(7)
' 戻り値 : 0:正常、1:異常
'------------------------------------------------------------------------------
Declare Function uio2_out Lib "vbausbio.dll" _
(ByRef OutDat As Byte) As Long
}
function uio2_out(var OutDat: Byte): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IO2.0からデータを取得する
' inDat(0): 取得データ(Port1)
' inDat(1): 取得データ(Port2)
' :
' inDat(7): 取得データ(Port8)予備
' 戻り値 : 0:正常、1:命令が書けなかった、2:データを取得できなかった
'------------------------------------------------------------------------------
Declare Function uio2_inp Lib "vbausbio.dll" _
(ByRef inDat As Byte) As Long
}
function uio2_inp(var InDat: Byte): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IO2.0にデータをセットし、USB-IOからデータを取得する
' Dat(0) : Portを指定する(1~2)
' Dat(1) : データ(0~255)
' Dat(2) : Portを指定する(1~2)
' Dat(3) : データ(0~255)
' :
' Dat(7) :
'
' Dat(0) : 取得データ(Port1)
' Dat(1) : 取得データ(Port2)
' :
' Dat(7) :
'
' 戻り値 : 0:正常、1:命令が書けなかった、2:データを取得できなかった
'------------------------------------------------------------------------------
Declare Function uio2_inOut Lib "vbausbio.dll" (ByRef Dat As Byte) As Long
}
function uio2_inOut(var Dat: Byte): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IO2.0にデータをセットし、USB-IOからデータを取得する
' Dat(0) : Portを指定する(1~2)
' Dat(1) : データ(0~255)
' Dat(2) : Portを指定する(1~2)
' Dat(3) : データ(0~255)
' :
' Dat(7) :
'
' Dat(0) : 取得データ(Port1)
' Dat(1) : 取得データ(Port2)
' :
' Dat(7) :
'
' 戻り値 : 0:正常、1:命令が書けなかった、2:データを取得できなかった
'------------------------------------------------------------------------------
Declare Function uio2_outIn Lib "vbausbio.dll" (ByRef Dat As Byte) As Long
}
function uio2_outIn(var Dat: Byte): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IOにシステム設定データを設定する。
' Dat(0) :
' Dat(1) :
' :
' Dat(15) :
'
' 戻り値 : 0:正常、1:命令が書けなかった、2:データを取得できなかった
'------------------------------------------------------------------------------
Declare Function uio2_setSys Lib "vbausbio.dll" (ByRef Dat As Byte) As Long
}
function uio2_setSys(var Dat: Byte): integer; stdcall; external 'vbausbio.dll';
{
'------------------------------------------------------------------------------
'USB-IOからシステム設定データを取得する。
' Dat(0) :
' Dat(1) :
' :
' Dat(15) :
'
' 戻り値 : 0:正常、1:命令が書けなかった、2:データを取得できなかった
'------------------------------------------------------------------------------
Declare Function uio2_getSys Lib "vbausbio.dll" (ByRef Dat As Byte) As Long
}
function uio2_getSys(var getDat: Byte): integer; stdcall; external 'vbausbio.dll';
implementation
{$R *.dfm}
function IntToBin(x : Integer; bits : integer) : String;
var
i, k : integer;
begin
result := '';
k := x;
for i := 0 to bits -1 do begin
result := IntToStr(k and 1) + result;
k := k shr 1;
end;
end;
function IntToBinRev(x : Integer; bits : integer) : String;
var
i, k : Integer;
begin
result := '';
k := x;
for i := 0 to bits - 1 do begin
result := result + IntToStr(k and 1);
k := k shr 1;
end;
end;
procedure TForm4.Button1Click(Sender: TObject);
var
outDat : array [0..7] of Byte;
begin
// 出力: Port1
outDat[0] := 1; // Port1
// 出力Data : 255 ですべてON
outDat[1] := UpDown1.Position;
uio2_out(outDat[0]);
Sleep(100);
// 出力: Port2
outDat[0] := 2; // Port2
outDat[1] := 4; // bit3 STB ON
uio2_out(outDat[0]);
Sleep(100);
OutDat[0] := 2; // Port2
OutDat[1] := 0; // bit3 STB OFF
uio2_out(outDat[0]);
Sleep(100);
outDat[0] := 1; // Port1
outDat[1] := 0; // bit0~7 すべてOFF
uio2_out(outDat[0]);
end;
procedure TForm4.Button2Click(Sender: TObject);
var
outDat : array [0..7] of Byte;
begin
// 出力: Port2
outDat[0] := 2; // Port2
outDat[1] := 8; // bit4 STOP ON
uio2_out(outDat[0]);
Sleep(100);
outDat[0] := 2; // Port2
outDat[1] := 0; // bit4 STOP OFF
uio2_out(outDat[0]);
end;
procedure TForm4.Button3Click(Sender: TObject);
begin
uio_find;
Memo1.Lines.Clear;
// $1352
Memo1.Lines.Add('VenderID = ' + uio_getVid(0).ToHexString(8));
// $121
Memo1.Lines.Add('ProductID = ' + uio_getPid(0).ToHexString(8));
end;
procedure TForm4.Button4Click(Sender: TObject);
var
inDat : array[0..7] of Byte;
i : integer;
begin
// 入力
uio2_inp(inDat[0]);
Memo1.Lines.Clear;
// inDat[0]: Port1、inDat[1]: Port2 ....の順
// Port2 はプルアップされているので、開放で H
for i := 0 to 7 do
Memo1.Lines.Add(i.ToString + ':' + inDat[i].ToHexString);
end;
end.