第4章 リファレンス
データ 0 → OFF データ 1 → ON
41. DioOutputHandShakeEx
© 2000, 2014 Interface Corporation. All rights reserved.
【パラメータ】
DeviceHandle
DioOpen関数で取得したデバイスハンドルを指定します。
Buffer
デバイスに出力するデータのバッファを指すポインタ(参照渡し)を指定します。
NumOfBytesToWrite
デバイスに出力するバイト数を指定します。
Overlapped
OVERLAPPED構造体へのポインタ(参照渡し)を指定します。
CompletionRoutine
完了ルーチンへのポインタ(参照渡し)を指定します。
【戻り値】
正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。
FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『4.5 戻り値一覧』をご参照くださ い。
© 2000, 2014 Interface Corporation. All rights reserved.
【備考】
本 API 関数は Windows 2000/NT 以降において有効です。Windows Me/98/95 で本関数を呼び出し た場合には、FBIDIO_ERROR_NOT_SUPPORTED が返されます。
DioOutputHandShakeEx関数はデバイスからデータを非同期的に入力します。
DioOutputHandShake関数が同期的および非同期的操作の両方を行えるようになっているのに対 して、DioOutputHandShakeEx関数は、非同期の操作用だけに使用できます。
DioOutputHandShakeEx関数によって、アプリケーションはデータの入力操作の間、他の処理を 実行できます。DioOutputHandShakeEx関数は、データ出力が完了し、呼び出しスレッドがアラ ート可能な待機状態にあるときに、指定された完了ルーチンを呼び出して操作の完了状態を非 同期に報告します。
・データフォーマット
出力データは下記のように接点と対応しています。
オフセット データ
bit7 bit6 ・・・ bit0 出力回数
+ 0 OUT8 OUT7 ・・・ OUT1 1 回目
+ 1 OUT16 OUT15 ・・・ OUT9 1 回目
: : :
ポート数 - 1 : :
ポート数 OUT8 OUT7 ・・・ OUT1 2 回目
ポート数 + 1 OUT16 OUT15 ・・・ OUT9 2 回目
: : :
入力バイト数 OUTxx OUTxx ・・・ OUTxx :
上記のようにバッファの先頭から 1 回目の出力データを格納し、次に 2 回目の出力データを格 納しておく必要があります。
ひとつのバイトデータの中に 8 点分の出力データを下位のビットから昇順で格納します。
接点数が 32 点のインタフェースモジュールの場合は以下のようになります。
オフセット データ
bit7 bit6 ・・・ bit0 出力回数
+ 0 OUT8 OUT7 ・・・ OUT1
+ 1 OUT16 OUT15 ・・・ OUT9 + 2 OUT24 OUT23 ・・・ OUT17 + 3 OUT32 OUT31 ・・・ OUT25
1 回目
+ 4 OUT8 OUT7 ・・・ OUT1
+ 5 OUT16 OUT15 ・・・ OUT9 + 6 OUT24 OUT23 ・・・ OUT17 + 7 OUT32 OUT31 ・・・ OUT25
2 回目
データ 0 → OFF データ 1 → ON
【使用例】
●C 言語 INT Ret;
HANDLE DeviceHandle;
BYTE Buffer[8];
INT NumOfBytesToWrite;
OVERLAPPED Overlapped;
DeviceHandle = DioOpen("FBIDIO1", FBIDIO_FLAG_NORMAL);
: :
NumOfBytesToWrite = 8;
Buffer[0] = 0x01;
Buffer[1] = 0x02;
Buffer[2] = 0x04;
Buffer[3] = 0x08;
Buffer[4] = 0x10;
Buffer[5] = 0x20;
Buffer[6] = 0x40;
Buffer[7] = 0x80;
Overlapped.Offset = 0;
Overlapped.OffsetHigh = 0;
Overlapped.hEvent = CreateEvent(0, FALSE, FALSE, NULL);
Ret = DioOutputHandShakeEx( DeviceHandle, &Buffer[0], NumOfBytesToWrite, &Overlapped, &CompletionRoutine );
© 2000, 2014 Interface Corporation. All rights reserved.
●Visual Basic Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Dim Buffer(8) As Byte
Dim NumOfBytesToWrite As Long Dim Overlapped As OVERLAPPED Name = "FBIDIO1" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
NumOfBytesToWrite = 8 Buffer(0) = &H1 Buffer(1) = &H2 Buffer(2) = &H4 Buffer(3) = &H8 Buffer(4) = &H10 Buffer(5) = &H20 Buffer(6) = &H40 Buffer(7) = &H80 Overlapped.Offset = 0 Overlapped.OffsetHigh = 0
Overlapped.hEvent = CreateEvent(0, False, False, 0)
Ret = DioOutputHandShakeEx( DeviceHandle, Buffer(0), NumOfBytesToWrite, _ Overlapped, CompletionRoutine )
●Delphi var
Ret: Integer;
Name: String;
DeviceHandle: THandle;
Buffer: Array[0..7] of Byte;
NumOfBytesToWrite: Integer;
Overlapped: TOVERLAPPED;
begin
Name := 'FBIDIO1';
DeviceHandle := DioOpen(Name, FBIDIO_FLAG_NORMAL);
: :
NumOfBytesToWrite := 8;
Buffer[0] := $01;
Buffer[1] := $02;
Buffer[2] := $04;
Buffer[3] := $08;
Buffer[4] := $10;
Buffer[5] := $20;
Buffer[6] := $40;
Buffer[7] := $80;
Overlapped.Offset := 0;
Overlapped.OffsetHigh := 0;
Overlapped.hEvent := CreateEvent(nil, False, False, nil);
Ret := DioOutputHandShakeEx( DeviceHandle, @Buffer[0], NumOfBytesToWrite, @Overlapped, @CompletionRoutine );
end;
デバイス名「FBIDIO1」のデバイスでハンドシェーク出力します。CompletionRoutine で指定さ れた完了ルーチンを実行します。
© 2000, 2014 Interface Corporation. All rights reserved.