※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.