DPC-0224
汎用入出力モジュール用
Windows ライブラリ
目 次
第 1 章 はじめに
3
1.1 概要 ...3第 2 章 導入方法
4
2.1 インストール手順 ...4 2.2 使用方法 ...4 2.3 実行手順 ...7第 3 章 リファレンス
9
3.1 関数一覧 ...9 3.2 未サポート関数 ...10 3.3 関数個別説明 ...11 3.4 戻り値一覧 ...62第 4 章 サンプルプログラム
64
4.1 実行手順 ...64 4.2 サンプルプログラム一覧 ...64第 5 章 重要な情報
65
第1章 はじめに
1.1 概要
DPC-0224 は、弊社汎用入出力の I/O 付き Classembly Devices®を制御する為のライブラリ製品 です。
弊社システム監視ライブラリ(DPC-02xx)シリーズでサポートしている汎用入出力機能を、 GPC-2000(デジタル入出力インタフェースモジュール用 Windows 用ドライバ)の API 関数で制御す る事ができます。
第2章 導入方法
2.1 インストール手順
README.HTM のインストール方法を参照してください。2.2 使用方法
2.2.1 ライブラリについて DPC-0224 が提供するライブラリ名は、「DPC0224.dll」です。ファイルをインポートしてご使用 ください。 ファイルは、インストール後以下のディレクトリにコピーされます。 ■32bitOS の場合 %SystemRoot%\system32\DPC0224.dll ■64bitOS の場合 %SystemRoot%\system32\DPC0224.dll x64 用 DLL %SystemRoot%\SysWow64\DPC0224.dll x86 用 DLL VC++用のスタティックライブラリ、ヘッダファイルも提供しています。 以下のディレクトリにあるファイルをリンクしてご使用ください。 例)インストール先ドライブを C とした場合 ■Lib ファイル(x86 用) C:\Program Files\Interface\DPC0224lib\DPC0224.lib ■Lib ファイル(x64 用) C:\Program Files\Interface\DPC0224lib\x64\DPC0224.lib ■ヘッダファイル C:\Program Files\Interface\DPC0224lib\include\FbiDio.h.NET において専用のクラスライブラリを用意しています。まず下のように参照の設定を行います。 (クラスライブラリのソースファイルも用意しています。DLL 関数の呼び出しをカスタマイズした い場合は、クラスライブラリのソースを参照してください。) IFCDIO クラスは x86 専用の定義です。以前のバージョンとの互換性のために残されています。 新たにアプリケーションを作成される場合には、IFCDIO_ANY クラス(x86、x64 共用)の定義をご使 用下さい。 1. クラスライブラリの作成方法 .NET において DLL 関数を呼び出すには、まずクラスライブラリを用意する必要があります。 Visual C# .NET の場合 Visual Studio を起動し、以下のプロジェクトファイルを開きます。 <インストール先>\interface\DPC0224\samples\CS_NET\IFCDIO\IFCDIO.csproj このプロジェクトをビルドすると、bin フォルダにクラスライブラリ IFCDIO.dll が作成されます。 Visual Basic .NET の場合
Visual Studio を起動し、以下のプロジェクトファイルを開きます。
<インストール先>\interface\DPC0224\samples\VB_NET\IFCDIO\IFCDIO.vbproj
このプロジェクトをビルドすると、bin フォルダにクラスライブラリ IFCDIO.dll が作成されます。 2. クラスライブラリの参照
Visual C# .NET, Visual Basic .NET の場合
Visual Studio のメニューの「プロジェクト」の「参照の追加」を選択してください。 「参照」ボタンをクリックして参照したいクラスライブラリ DLL を指定します。 例) <インストール先>\interface\DPC0224\samples\CS_NET\IFCDIO\bin\Release\IFCDIO.dll <インストール先>\interface\DPC0224\samples\VB_NET\IFCDIO\bin\Relaase\IFCDIO.dll 「選択されたコンポーネント」に指定した DLL が表示されます。 「OK」ボタンをクリックすると設定は完了です。
次にソースのヘッダで各言語毎に下記のように InterfaceCorpDllWrap の名前空間を追加すれば DLL 関数を次章の「使用例」の方法で呼び出すことができるようになります。
・Visual C# .NET の場合
using InterfaceCorpDllWrap; ・Visual Basic .NET の場合
Imports InterfaceCorpDllWrap
2.2.2 GPC-2000 について
2.3 実行手順
基本的な制御の手順は GPC-2000 と同様です(記述例は C 言語です)。 1. 初期化 インタフェースモジュールを DioOpen関数で初期化します。 DeviceHandle = DioOpen("FBIDIO512", 0 ); デバイス名(FBIDIO512)を指定します。 初期化が正常終了すると上記の記述例では DeviceHandle にデバイスハンドルが返されます。デバ イスハンドルとは、汎用入出力デバイスを一意に識別するもので、下記以降の関数コールの際に 指定します。 別々のプロセスからの汎用入出力デバイスを使用することが可能です。これにより別々のプロセ ス間で汎用入出力デバイスを共有することが可能です。 複数アプリケーションで同時に一つの汎用入出力デバイスを制御する場合、出力データ及び、汎 用入出力デバイスの設定は整合性を保てるようにアプリケーション間で調整を行ってください。 初期化した汎用入出力デバイスはアプリケーション終了の際には必ず終了処理(DioClose関数) を行ってください。 DioClose 関数を実行すると、出力値は 0 クリアされます。2. 出力
DioOutputByte関数, DioOutputWord関数を使用して汎用入出力デバイスの指定した接点の出力を 8 点、16 点単位で制御します。
DioOutputByte( DeviceHandle, FBIDIO_IN1_8, 0x12 ); DioOutputWord( DeviceHandle, FBIDIO_IN1_16, 0x1234 );
DioOutputPoint関数では任意の接点から任意の点数の接点をINT型配列で設定したデータで制御 を行うことが可能です。
DioOutputPoint( DeviceHandle, &Buffer[0], 16, 8 ); 3. 入力
DioInputByte関数, DioInputWord関数を使用して汎用入出力デバイスの指定した接点のデータを 8 点、16 点単位で取り出します。
DioInputByte( DeviceHandle, FBIDIO_IN1_8, &ByteValue ); DioInputWord( DeviceHandle, FBIDIO_IN1_16, &WordValue );
DioInputPoint関数では任意の接点から任意の点数のデータをINT型配列に格納することができま す。
DioInputPoint( DeviceHandle, &Buffer[0], 16, 8 ); 4. 終了処理
DioClose関数で汎用入出力デバイスの終了処理を行います。 DioClose( DeviceHandle );
第3章 リファレンス
3.1 関数一覧
No 関数名 機能 ●初期化関数 1 DioOpen 汎用入出力デバイスのオープンを行い、以後の汎用入出力デ バイスへのアクセスを行えるようにします。 2 DioClose 汎用入出力デバイスのクローズを行い、汎用入出力デバイス アクセスのために使用されていた各種リソースの解放を行 い、以後の汎用入出力デバイスへのアクセスを禁止します。 ●入出力関数 3 DioInputPoint 任意の点数の入力接点の状態を読み込みます。 4 DioInputByte 指定した 8 点の入力接点の状態を読み込みます。 (BYTE アクセス) 5 DioInputWord 指定した 16 点の入力接点の状態を読み込みます。 (WORD アクセス) 6 DioOutputPoint 任意の点数の出力接点の出力を制御します。 7 DioOutputByte 指定した 8 点の出力接点を制御します。 (BYTE アクセス) 8 DioOutputWord 指定した 16 点の出力接点を制御します。 (WORD アクセス) 9 DioEintSetIrqMask エッジ検出割り込みマスク状態を設定します。 10 DioEintGetIrqMask エッジ検出割り込みマスク状態を取得します。 11 DioEventRequestPendingEx 汎用入出力デバイスの割り込みイベント要求を待ちます。 12 DioEintSetEdgeConfig エッジ検出機能を設定します。 13 DioEintGetEdgeConfig 現在のエッジ検出設定を取得します。3.2 未サポート関数
以下の関数は未サポートです。 関数を実行すると、FBIDIO_ERROR_NOT_SUPPORTED が返ります。 関数名 関数名 DioGetDeviceConfig DioStopInputHandShake DioGetDeviceConfigEx DioStopOutputHandShake DioCommonGetPciDeviceInfo DioGetHandShakeStatus DioInputDword DioGetOverlappedResult DioOutputDword DioSetTimeOut DioGetAckStatus DioGetTimeOut DioSetAckPulseCommand DioSetIrqMask DioGetStbStatus DioGetIrqMask DioSetStbPulseCommand DioSetIrqConfig DioInputUniversalPoint DioGetIrqConfig DioOutputUniversalPoint DioEventRequestPending DioSetLatchStatus DioEintSetIrqMaskEx DioGetLatchStatus DioEintGetIrqMaskEx DioSetRstinMask DioSetTimerConfig DioGetRstinMask DioGetTimerConfig DioGetResetInStatus DioGetTimerCount DioGetBackGroundUseTimer DioEintSetEdgeConfigEx DioSetBackGroundUseTimer DioEintGetEdgeConfigEx DioSetBackGround DioEintInputPoint DioFreeBackGround DioEintInputByte DioStopBackGround DioEintInputWord DioGetBackGroundStatus DioEintInputDword DioInputPointBack DioEintSetFilterConfig DioOutputPointBack DioEintGetFilterConfig DioWatchPointBack DioSetEventRequestMode DioGetInputHandShakeConfig DioOutputSync DioSetInputHandShakeConfig DioGetOutputHandShakeConfig DioSetOutputHandShakeConfig DioInputHandShake DioInputHandShakeEx DioOutputHandShake3.3 関数個別説明
1. DioOpen
【機能】 汎用入出力デバイスのオープンを行い、以後の汎用入出力デバイスへのアクセスを行えるよう にします。 【書式】 ●C 言語(x86 専用) HANDLE DioOpen( LPCTSTR Name, DWORD Flag ); ●C 言語(x64 専用) HANDLE DioOpen( LPCSTR Name, DWORD Flag ); ●Visual BasicDeclare Function DioOpen Lib "dpc0224.DLL"( _ ByVal Name As String, _
ByVal Flag As Long _ )As Long
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern IntPtr DioOpen( string lpszName,
uint fdwFlags );
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioOpen( string lpszName,
uint fdwFlags );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioOpen Lib "dpc0224.dll" ( ByVal lpszName As String,
ByVal fdwFlags As Integer )As IntPtr
●Visual Basic .NET(x86 専用)
Declare Function DioOpen Lib "dpc0224.dll"( ByVal lpszName As String,
ByVal fdwFlags As Integer )As Integer 【パラメータ】 Name オープンするデバイス名を指定します。「FBIDIO512」で指定してください。 Flag オープンフラグを指定します。 指定可能な識別子は下記のものから選択できますが、本製品では FBIDIO_FLAG_SHARE の状 態になります。 識別子 意味 FBIDIO_FLAG_NORMAL 指定可能ですが、設定はできません。 通常のオープン時に使用するフラグです。これを指定す ると重複してオープンすることはできません。 FBIDIO_FLAG_SHARE 1 つのデバイスを複数のプロセス(アプリケーション)か ら重複(共有)して制御することを許可するフラグです。 【戻り値】 DioOpen関数が正常に終了した場合には、有効なハンドルが返されます。 他の関数は、本関数により取得したハンドルを使用してデバイスの制御を行います。 オープンに失敗した場合には、INVALID_HANDLE_VALUE(FFFFFFFFh)が返されます。 【備考】 ・同じデバイスを 2 つ以上のアプリケーションで共有することが可能となります。 ・同一アプリケーションで共有してオープンする事はできません。
【使用例】
●C 言語(32bit 用コンパイラ) HANDLE DeviceHandle;
DeviceHandle = DioOpen(“FBIDIO512”, FBIDIO_FLAG_SHARE); ●C 言語(32bit 用コンパイラで UNICODE を定義している場合) HANDLE DeviceHandle;
DeviceHandle = DioOpen((LPCTSTR)“FBIDIO512”, FBIDIO_FLAG_SHARE); HANDLE DeviceHandle;
char* lpszName = “FBIDIO512”;
DeviceHandle = DioOpen((LPCTSTR)lpszName, FBIDIO_FLAG_SHARE); HANDLE DeviceHandle;
LPCWSTR UnicodeName = L"FBIDIO512"; char DeviceName[256];
int len;
len = WideCharToMultiByte(CP_ACP, 0, UnicodeName, -1, NULL, 0, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, UnicodeName, -1, DeviceName, len, NULL, NULL); DeviceHandle = DioOpen((LPCTSTR)DeviceName, FBIDIO_FLAG_SHARE);
●C 言語(64bit 用コンパイラ) HANDLE DeviceHandle;
●Visual Basic Dim Name As String Dim DeviceHandle As Long Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_SHARE) ●Visual C# .NET(x86、x64 共用)
IntPtr hDeviceHandle; string lpszName;
lpszName = "FBIDIO512";
hDeviceHandle = IFCDIO_ANY.DioOpen(lpszName, IFCDIO_ANY.FBIDIO_FLAG_SHARE ); ●Visual Basic .NET(x86、x64 共用)
Dim hDeviceHandle As IntPtr Dim lpszName As String
lpszName = "FBIDIO512" & Chr(0)
hDeviceHandle = IFCDIO_ANY.DioOpen(lpszName, IFCDIO_ANY.FBIDIO_FLAG_SHARE ) デバイス名「FBIDIO512」のデバイスを重複オープン許可でオープンします。
2. DioClose
【機能】 汎用入出力デバイスをクローズします。 汎用入出力デバイスアクセスのために使用されていた各種リソースの解放を行い、以後の汎用 入出力デバイスへのアクセスを禁止します。 【書式】 ●C 言語 INT DioClose( HANDLE DeviceHandle ); ●Visual BasicDeclare Function DioClose Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long _
)As Long
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioClose( IntPtr hDeviceHandle
);
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioClose( uint hDeviceHandle
);
●Visual Basic .NET(x86、x64 共用)
Declare Function DioClose Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr
)As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioClose Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer )As Integer
【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。 【備考】 再度、汎用入出力デバイスへのアクセスを行う場合にはオープン処理(DioOpen関数)を呼び出し てください。 汎用入出力デバイスクローズ後の各種設定はクリアされます。 Windows NT/2000 以降ではデバッガの制御下でアプリケーションを実行しているときに無効な ハンドルを閉じると、例外が発生します。たとえば、ハンドルを 2 回閉じるなどを行うと発生 します。 DioClose 関数を実行すると、出力値は 0 クリアされます。 【使用例】 ●C 言語 INT Ret; HANDLE DeviceHandle;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); : : Ret = DioClose(DeviceHandle); ●Visual C# .NET(x86、x64 共用) uint nRet; IntPtr hDeviceHandle; string lpszName; lpszName = ”FBIDIO512”;
hDeviceHandle = IFCDIO_ANY.DioOpenAny(lpszName, IFCDIO_ANY.DIO_FLAG_SHARE); :
:
●Visual Basic Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) : : Ret = DioClose(DeviceHandle) ●Visual C# .NET(x86、x64 共用) uint nRet; IntPtr hDeviceHandle; string lpszName; lpszName = ”FBIDIO512”;
hDeviceHandle = IFCDIO_ANY.DioOpenAny(lpszName, IFCDIO_ANY.DIO_FLAG_SHARE); :
:
nRet = IFCDIO_ANY.DioClose(hDeviceHandle); ●Visual Basic .NET(x86、x64 共用) Dim nRet As Integer
Dim lpszName As String Dim hDeviceHandle As IntPtr lpszName = "FBIDIO512"
hDeviceHandle = IFCDIO_ANY.DioOpenAny(lpszName, IFCDIO_ANY.DIO_FLAG_SHARE ) :
:
nRet = IFCDIO_ANY.DioClose(hDeviceHandle)
3. DioInputPoint
【機能】 任意の点数の入力接点の状態を読み込みます。 指定した開始接点番号から 1 接点ずつ INT 型の変数にデータが格納されます。 【書式】 ●C 言語 INT DioInputPoint ( HANDLE DeviceHandle, PINT Buffer, DWORD StartNum, DWORD Num ); ●Visual BasicDeclare Function DioInputPoint Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByRef Buffer As Long, _ ByVal StartNum As Long, _ ByVal Num As Long _ )As Long
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioInputPoint( IntPtr hDeviceHandle,
out int pBuffer, uint dwStartNum, uint dwNum );
[DllImport("dpc0224.dll")]
public static extern uint DioInputPoint( IntPtr hDeviceHandle,
int[] pBuffer, uint dwStartNum, uint dwNum );
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioInputPoint( uint hDeviceHandle,
out int pBuffer, uint dwStartNum, uint dwNum );
[DllImport("dpc0224.dll")]
public static extern uint DioInputPoint( uint hDeviceHandle,
int[] pBuffer, uint dwStartNum, uint dwNum );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioInputPoint Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr,
ByRef pBuffer As Integer, ByVal dwStartNum As Integer, ByVal dwNum As Integer )As Integer
Declare Function DioInputPoint Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr,
ByVal pBuffer() As Integer, ByVal dwStartNum As Integer, ByVal dwNum As Integer )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioInputPoint Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer,
ByRef pBuffer As Integer, ByVal dwStartNum As Integer, ByVal dwNum As Integer )As Integer
Declare Function DioInputPoint Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer,
ByVal pBuffer() As Integer, ByVal dwStartNum As Integer, ByVal dwNum As Integer )As Integer 【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 Buffer デバイスから読み取ったデータを受け取るバッファを指すポインタ(参照渡し)です。 StartNum 入力開始接点番号 1~16(汎用入出力デバイスがもつ接点数の最大値)を指定します。DI デバイスの場合はピン IN1 が 1 に対応します。DIO デバイス(双方向)の場合ピン I/O1 が 1 に対応します。 Num 入力接点数を指定します。 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。
【使用例】 ●C 言語 INT Ret;
HANDLE DeviceHandle; INT Buffer[8];
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
Ret = DioInputPoint( DeviceHandle, &Buffer[0], 1, 8 ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Dim Buffer(8) As Long
Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
Ret = DioInputPoint( DeviceHandle, Buffer(0), 1, 8 ) ●Visual C# .NET(x86、x64 共用)
IntPtr hDeviceHandle; int nBuffer;
uint nRet;
nRet = IFCDIO_ANY.DioInputPoint( hDeviceHandle, out nBuffer, 1, 8); ●Visual Basic .NET(x86、x64 共用)
Dim hDeviceHandle As IntPtr Dim nBuffer As Integer Dim nRet As Integer
nRet = IFCDIO_ANY.DioInputPoint( hDeviceHandle, nBuffer, 1, 8)
デバイスハンドル hDeviceHandle の汎用入出力デバイスの接点 1 番から接点 8 番までの接点状 態を読み込みます。
4. DioInputByte
【機能】 汎用入出力デバイスの接点 8 点分のデータを読み込み、1 バイト(8 ビット)の変数に格納しま す。 【書式】 ●C 言語 INT DioInputByte ( HANDLE DeviceHandle, INT No, PBYTE Value ); ●Visual BasicDeclare Function DioInputByte Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByVal No As Long, _ ByRef Value As Byte _ )As Long
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioInputByte( IntPtr hDeviceHandle,
int nNo, out byte pbValue );
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioInputByte( uint hDeviceHandle,
int nNo, out byte pbValue );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioInputByte Lib "dpc0224.dll”( ByVal hDeviceHandle As IntPtr,
ByVal nNo As Integer, ByRef pbValue As Byte )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioInputByte Lib "dpc0224.dll”( ByVal hDeviceHandle As Integer,
ByVal nNo As Integer, ByRef pbValue As Byte )As Integer 【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 No 読み込む接点を下記の識別子で指定します。 FBIDIO_IN1_8 IN1~IN8 の 8 点分のデータを読み込みます。 FBIDIO_IN9_16 IN9~IN16 の 8 点分のデータを読み込みます。 Value 読み込まれたデータを格納する変数へのポインタ(参照渡し)を指定します。 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。
【備考】
データフォーマット
取得したデータは下記のようにビット毎に接点と対応しています。
ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 FBIDIO_IN1_8 IN8 IN7 IN6 IN5 IN4 IN3 IN2 IN1 FBIDIO_IN9_16 IN16 IN15 IN14 IN13 IN12 IN11 IN10 IN9 【使用例】
●C 言語 INT Ret;
HANDLE DeviceHandle; BYTE Value;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
Ret = DioInputByte( DeviceHandle, FBIDIO_IN1_8, &Value ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Dim Value As Byte
Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
Ret = DioInputByte( DeviceHandle, FBIDIO_IN1_8, Value ) ●Visual C# .NET(x86、x64 共用) IntPtr hDeviceHandle; byte nBuffer; uint nRet; nRet = IFCDIO_ANY.DioInputByte( hDeviceHandle,
●Visual Basic .NET(x86、x64 共用) Dim hDeviceHandle As IntPtr
Dim nBuffer As Byte Dim nRet As Integer
nRet = IFCDIO_ANY.DioInputByte( hDeviceHandle, IFCDIO_ANY.FBIDIO_IN1_8, nBuffer) デバイス名「FBIDIO512」のデバイスの IN1~IN8 の 1 バイトデータを変数 Value に取得します。
5. DioInputWord
【機能】 汎用入出力デバイスの接点 16 点分のデータを読み込み、1 ワード(16 ビット)の変数に格納し ます。 【書式】 ●C 言語 INT DioInputWord ( HANDLE DeviceHandle, INT No, PWORD Value ); ●Visual BasicDeclare Function DioInputWord Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByVal No As Long, _ ByRef Value As Integer _ )As Long
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioInputWord( IntPtr hDeviceHandle,
int nNo,
out ushort pwValue );
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioInputWord( int hDeviceHandle,
int nNo,
out ushort pwValue );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioInputWord Lib "dpc0224.dll”( ByVal hDeviceHandle As IntPtr,
ByVal nNo As Integer, ByRef pwValue As Short )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioInputWord Lib "dpc0224.dll”( ByVal hDeviceHandle As Integer,
ByVal nNo As Integer, ByRef pwValue As Short )As Integer 【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 No 読み込む接点を下記の識別子で指定します。 FBIDIO_IN1_16 IN1~IN16 の 16 点分のデータを読み込みます。 Value 読み込まれたデータを格納する変数へのポインタ(参照渡し)を指定します。 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。 【備考】 データフォーマット 取得したデータは下記のようにビット毎に接点と対応しています。
ビット bit15 bit14 bit13 ・・・ bit2 bit1 bit0 FBIDIO_IN1_16 IN16 IN15 IN14 ・・・ IN3 IN2 IN1
【使用例】 ●C 言語 INT Ret;
HANDLE DeviceHandle; WORD Value;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
Ret = DioInputWord( DeviceHandle, FBIDIO_IN1_16, &Value ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Dim Value As Integer
Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
Ret = DioInputWord( DeviceHandle, FBIDIO_IN1_16, Value ) ●Visual C# .NET(x86、x64 共用) IntPtr hDeviceHandle; ushort nBuffer; uint nRet; nRet = IFCDIO_ANY.DioInputWord( hDeviceHandle,
IFCDIO_ANY.FBIDIO_IN1_16, out nBuffer); ●Visual Basic .NET(x86、x64 共用)
Dim hDeviceHandle As IntPtr Dim nBuffer As Short
Dim nRet As Integer
6. DioOutputPoint
【機能】 任意の点数の出力接点の出力を制御します。 指定した開始接点番号から 1 接点づつ INT 型の変数に格納されたデータで接点を制御します。 【書式】 ●C 言語 INT DioOutputPoint ( HANDLE DeviceHandle, PINT Buffer, DWORD StartNum, DWORD Num ); ●Visual BasicDeclare Function DioOutputPoint Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByRef Buffer As Long, _ ByVal StartNum As Long, _ ByVal Num As Long _ )As Long
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioOutputPoint( IntPtr hDeviceHandle,
ref int pBuffer, uint dwStartNum, uint dwNum );
[DllImport("dpc0224.dll")]
public static extern uint DioOutputPoint( IntPtr hDeviceHandle,
int[] pBuffer, uint dwStartNum, uint dwNum );
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioOutputPoint( uint hDeviceHandle,
ref int pBuffer, uint dwStartNum, uint dwNum );
[DllImport("dpc0224.dll")]
public static extern uint DioOutputPoint( uint hDeviceHandle,
int[] pBuffer, uint dwStartNum, uint dwNum );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioOutputPoint Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr,
ByRef pBuffer As Integer, ByVal dwStartNum As Integer, ByVal dwNum As Integer )As Integer
Declare Function DioOutputPoint Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr,
ByVal pBuffer() As Integer, ByVal dwStartNum As Integer, ByVal dwNum As Integer )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioOutputPoint Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer,
ByRef pBuffer As Integer, ByVal dwStartNum As Integer, ByVal dwNum As Integer )As Integer
Declare Function DioOutputPoint Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer,
ByVal pBuffer() As Integer, ByVal dwStartNum As Integer, ByVal dwNum As Integer )As Integer 【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 Buffer デバイスへ出力するデータのバッファを指すポインタ(参照渡し)です。 StartNum 出力開始接点番号 1~16(汎用入出力デバイスがもつ接点数の最大値)を指定します。DO デバイスの場合はピン OUT1 が 1 に対応します。DIO デバイス(双方向)の場合ピン I/O1 が 1 に対応します。 Num 出力接点数を指定します。 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。
【使用例】 ●C 言語 INT Ret;
HANDLE DeviceHandle; INT Buffer[8];
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); : : Buffer[0] = 1; Buffer[1] = 0; Buffer[2] = 0; Buffer[3] = 1; Buffer[4] = 0; Buffer[5] = 1; Buffer[6] = 1; Buffer[7] = 0;
Ret = DioOutputPoint( DeviceHandle, &Buffer[0], 1, 8 ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Dim Buffer(8) As Long
Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) : : Buffer(0) = 1 Buffer(1) = 0 Buffer(2) = 0 Buffer(3) = 1 Buffer(4) = 0 Buffer(5) = 1 Buffer(6) = 1 Buffer(7) = 0
●Visual C# .NET(x86、x64 共用) IntPtr hDeviceHandle;
uint nRet;
int [] nBuffer = new int[8]; nBuffer[0] = 1; nBuffer[1] = 0; nBuffer[2] = 0; nBuffer[3] = 1; nBuffer[4] = 0; nBuffer[5] = 1; nBuffer[6] = 1; nBuffer[7] = 0;
nRet = IFCDIO_ANY.DioOutputPoint( hDeviceHandle, nBuffer, 1, 8);
●Visual Basic .NET(x86、x64 共用) Dim hDeviceHandle As IntPtr
Dim nRet As Integer Dim nBuffer(8) As Integer nBuffer(0) = 1 nBuffer(1) = 0 nBuffer(2) = 0 nBuffer(3) = 1 nBuffer(4) = 0 nBuffer(5) = 1 nBuffer(6) = 1 nBuffer(7) = 0
nRet = IFCDIO_ANY.DioOutputPoint( hDeviceHandle, nBuffer, 1, 8 )
デバイス名「FBIDIO1」のデバイスの接点 1 番に 1、接点 2 番に 0、接点 3 番に 0、接点 4 番に 1、 接点 5 番に 0、接点 6 番に 1、接点 7 番に 1、接点 8 番に 0 を出力します。
7. DioOutputByte
【機能】 汎用入出力デバイスの接点 8 点分を制御します。 【書式】 ●C 言語 INT DioOutputByte ( HANDLE DeviceHandle, INT No, BYTE Value ); ●Visual BasicDeclare Function DioOutputByte Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByVal No As Long, _ ByVal Value As Byte _ )As Long
●Visual C# .NET(x86、x64 共用) [DllImport("fbidio.dll")]
public static extern uint DioOutputByte( IntPtr hDeviceHandle, int nNo, byte bValue ); ●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioOutputByte( uint hDeviceHandle,
int nNo, byte bValue );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioOutputByte Lib "dpc0224.dll”( ByVal hDeviceHandle As IntPtr,
ByVal nNo As Integer, ByVal bValue As Byte )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioOutputByte Lib "dpc0224.dll”( ByVal hDeviceHandle As Integer,
ByVal nNo As Integer, ByVal bValue As Byte )As Integer 【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 No データを出力する接点を下記の識別子で指定します。 FBIDIO_OUT1_8 OUT1~OUT8 の 8 点分のデータを出力します。 FBIDIO_OUT9_16 OUT9~OUT16 の 8 点分のデータを出力します。 Value 指定した接点へ出力するデータを指定します。 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。
【備考】
データフォーマット
指定したデータは下記のようにビット毎に接点と対応しています。
ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 FBIDIO_OUT1_8 OUT8 OUT7 OUT6 OUT5 OUT4 OUT3 OUT2 OUT1 FBIDIO_OUT9_16 OUT16 OUT15 OUT14 OUT13 OUT12 OUT11 OUT10 OUT9 【使用例】
●C 言語 INT Ret;
HANDLE DeviceHandle;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
Ret = DioOutputByte( DeviceHandle, FBIDIO_OUT1_8, 0x12 ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
Ret = DioOutputByte( DeviceHandle, FBIDIO_OUT1_8, &H12 ) ●Visual C# .NET(x86、x64 共用)
IntPtr hDeviceHandle; uint nRet;
nRet = IFCDIO_ANY.DioOutputByte( hDeviceHandle, IFCDIO_ANY.FBIDIO_OUT1_8, 0x12); ●Visual Basic .NET(x86、x64 共用)
Dim hDeviceHandle As IntPtr Dim nRet As Integer
8. DioOutputWord
【機能】 汎用入出力デバイスの接点 16 点分を制御します。 【書式】 ●C 言語 INT DioOutputWord ( HANDLE DeviceHandle, INT No, WORD Value ); ●Visual BasicDeclare Function DioOutputWord Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByVal No As Long, _ ByVal Value As Integer _ )As Long
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioOutputWord( IntPtr hDeviceHandle, int nNo, ushort wValue ); ●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioOutputWord( uint hDeviceHandle,
int nNo,
ushort wValue );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioOutputWord Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr,
ByVal nNo As Integer, ByVal wValue As Short )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioOutputWord Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer,
ByVal nNo As Integer, ByVal wValue As Short )As Integer 【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 No データを出力する接点を下記の識別子で指定します。 FBIDIO_OUT1_16 OUT1~OUT16 の 16 点分のデータを出力します。 Value 指定した接点へ出力するデータを指定します。 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。
【備考】
データフォーマット
指定したデータは下記のようにビット毎に接点と対応しています。
ビット bit15 bit14 bit13 ・・・ bit2 bit1 bit0 FBIDIO_OUT1_16 OUT16 OUT15 OUT14 ・・・ OUT3 OUT2 OUT1 【使用例】
●C 言語 INT Ret;
HANDLE DeviceHandle;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
Ret = DioOutputWord( DeviceHandle, FBIDIO_OUT1_16, 0x1234 ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
Ret = DioOutputWord( DeviceHandle, FBIDIO_OUT1_16, &H1234 ) ●Visual C# .NET(x86、x64 共用)
IntPtr hDeviceHandle; uint nRet;
nRet = IFCDIO_ANY.DioOutputDword( hDeviceHandle,
IFCDIO_ANY.FBIDIO_OUT1_16, 0x1234); ●Visual Basic .NET(x86、x64 共用)
Dim hDeviceHandle As IntPtr Dim nRet As Integer
nRet = IFCDIO_ANY.DioOutputDword( hDeviceHandle, _
9. DioEintSetIrqMask
【機能】 エッジ検出割り込みマスク状態を設定します。 【書式】 ●C 言語 INT DioEintSetIrqMask ( HANDLE DeviceHandle, DWORD IrqMask ); ●Visual BasicDeclare Function DioEintSetIrqMask Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByVal IrqMask As Long _ )As Integer
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioEintSetIrqMask ( IntPtr hDeviceHandle,
uint dwSetIrqMask, );
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioEintSetIrqMask ( uint hDeviceHandle,
uint dwSetIrqMask, );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioEintSetIrqMask Lib "dpc0224.dll" ( ByVal hDeviceHandle As IntPtr,
ByVal dwSetIrqMask As Integer )As Integer
【パラメータ】 DeviceHandle
DioOpen関数で取得したデバイスハンドルを指定します。 IrqMask
IR1~IR8 のエッジ検出割り込みのマスク/アンマスクを設定するデータを指定します。
bit31 ・・・ bit8 bit7 ・・・ bit0
予約 IR8 ・・・ IR1 電源投入時はすべてマスク状態(0)です。 0:マスク 1:アンマスク 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。 【備考】 DioEintSetEdgeConfig関数実行後は、本関数を必ず実行してください。
【使用例】 ●C 言語 INT Ret;
HANDLE DeviceHandle;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
Ret = DioEintSetIrqMask( DeviceHandle, 0x0000000f ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
Ret = DioEintSetIrqMask( DeviceHandle, &HF ) ●Visual C# .NET(x86、x64 共用)
IntPtr hDeviceHandle; uint nRet;
nRet = IFCDIO_ANY.DioEintSetIrqMask( hDeviceHandle, 0x0000000f ); ●Visual Basic .NET(x86、x64 共用)
Dim hDeviceHandle As IntPtr Dim nRet As Integer
nRet = IFCDIO_ANY.DioEintSetIrqMask( hDeviceHandle, &H0000000f )
10. DioEintGetIrqMask
【機能】 エッジ検出割り込みマスク状態を取得します。 【書式】 ●C 言語 INT DioEintGetIrqMask ( HANDLE DeviceHandle, PDWORD IrqMask ); ●Visual BasicDeclare Function DioEintGetIrqMask Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByRef IrqMask As Long _ )As Integer
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioEintGetIrqMask ( IntPtr hDeviceHandle,
out uint pdwSetIrqMask );
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioEintGetIrqMask ( uint hDeviceHandle,
out uint pdwSetIrqMask );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioEintGetIrqMask Lib "dpc0224.dll" ( ByVal hDeviceHandle As Integer,
ByRef pdwSetIrqMask As Integer )As Integer
●Visual Basic .NET(x86 専用)
【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 IrqMask IR1~IR8 のエッジ検出割り込みのマスク/アンマスクを取得する変数へのポインタ(参照 渡し)を指定します。 IrqMask の形式は、次のようになっています。
bit31 ・・・ bit8 bit7 ・・・ bit0
予約 IR8 ・・・ IR1 0:マスク 1:アンマスク 【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。
【使用例】 ●C 言語 INT Ret;
HANDLE DeviceHandle; DWORD IrqMask;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
Ret = DioEintGetIrqMask( DeviceHandle, &IrqMask ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Dim IrqMask As Long
Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
Ret = DioEintGetIrqMask( DeviceHandle, IrqMask) ●Visual C# .NET(x86、x64 共用)
uint dwGetIrqMask; IntPtr hDeviceHandle; uint nRet;
nRet = IFCDIO_ANY.DioEintGetIrqMask( hDeviceHandle, out dwGetIrqMask ); ●Visual Basic .NET(x86、x64 共用)
Dim dwGetIrqMask As Integer Dim hDeviceHandle As IntPtr Dim nRet As Integer
nRet = IFCDIO_ANY.DioEintGetIrqMask( hDeviceHandle, dwGetIrqMask)
11. DioEventRequestPendingEx
【機能】 汎用入出力デバイスの割り込みイベント要求を待ちます。 【書式】 ●C 言語 INT DioEventRequestPendingEx ( HANDLE DeviceHandle, PDWORD EventEnableMask, PDWORD EventBuf, LPOVERLAPPED Overlapped, ); ●Visual BasicDeclare Function DioEventRequestPendingEx Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByRef EventEnableMask As Long, _ ByRef EventBuf As Long, _ ByRef Overlapped As OVERLAPPED _ )As Long
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioEventRequestPendingEx ( IntPtr hDeviceHandle, uint[] pdwEventEnableMask, IntPtr pEventBuf, IntPtr lpOverlapped ); ●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioEventRequestPendingEx ( uint hDeviceHandle,
uint[] pdwEventEnableMask, IntPtr pEventBuf,
IntPtr lpOverlapped );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioEventRequestPendingEx Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr,
ByVal dwEventEnableMask() As Integer, ByVal pEventBuf As IntPtr, BaVal lpOverlapped As IntPtr )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioEventRequestPendingEx Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer,
ByVal dwEventEnableMask() As Integer, ByVal pEventBuf As IntPtr, ByVal lpOverlapped As IntPtr )As Integer
【パラメータ】 DeviceHandle
EventEnableMask 許可するイベントのマスク設定を格納しているバッファへのポインタ(参照渡し)を指定 します。 各要素の内容は次のようになっています。 EventEnableMask + 0 予約 EventEnableMask + 1 IR1~IR8 立下りエッジ検出イベント EventEnableMask + 2 IR1~IR8 立上りエッジ検出イベント EventEnableMask + 3 予約 EventEnableMask + 4 予約 イベント内容(該当ビットが”1”で有効) ・IR1~IR8 立下りエッジ検出イベント bit0 : IR1 に立下りエッジが検出されたときのイベント : : bit7 : IR8 に立下りエッジが検出されたときのイベント bit8 : 予約 : : bit31: 予約 ・IR1~IR8 立上りエッジ検出イベント bit0 : IR1 に立上りエッジが検出されたときのイベント : : bit7 : IR8 に立上りエッジが検出されたときのイベント bit8 : 予約 : : bit31: 予約 EventBuf 通知されたイベント内容を格納するバッファへのポインタ(参照渡し)です。 各要素の内容は次のようになっています。 EventBuf+ 0 予約 EventBuf + 1 IR1~IR8 立下りエッジ検出イベント EventBuf + 2 IR1~IR8 立上りエッジ検出イベント EventBuf + 3 予約 EventBuf + 4 予約 通知イベント内容(該当ビットが”1”で有効)
・IR1~IR8 立下りエッジ検出イベント bit0 : IR1 に立下りエッジが検出されたときのイベント : : bit7 : IR8 に立下りエッジが検出されたときのイベント bit8 : 予約 : : bit31: 予約 ・IR1~IR8 立上りエッジ検出イベント bit0 : IR1 に立上りエッジが検出されたときのイベント : : bit7 : IR8 に立上りエッジが検出されたときのイベント bit8 : 予約 : : bit31: 予約 Overlapped イベント待ちに使用する Overlapped 構造体へのポインタ(参照渡し)を指定します。(非同 期処理) また、NULL(0)を指定すると、イベントが発生するまで、DioEventRequestPendingEx関数は、 処理を戻しません。(同期処理) 【戻り値】
DioEventRequestPendingEx 関 数 は 、 Overlapped に NULL(0) 以 外 が 指 定 さ れ た 場 合 、 FBIDIO_ERROR_IO_PENDINGを返します。その後、Win32APIのWaitForSingleObject関数等を呼び 出して、イベント待ちを行ってください。 OverlappedにNULL(0)が指定された場合、DioEventRequestPendingEx関数は、イベント待ち状態 になり、イベントが発生したときに、FBIDIO_ERROR_SUCCESSを返します。 いずれの場合も、イベント発生後、EventBuf が指す位置へ、発生したイベントの情報が返され ます。 FBIDIO_ERROR_IO_PENDING・FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照ください。 【備考】 ・DioEintSetIrqMask関数で、イベントを有効にしていなければイベントは発生しません。 ・イベント待ち処理を連続して実行する場合、Overlapped 構造体に指定するイベントハンドル
【使用例】 ●C 言語 非同期処理 INT Ret; HANDLE DeviceHandle; DWORD EventEnableMask[5]; DWORD EventBuff[5]; OVERLAPPED Overlapped;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); : : EventEnableMask[0] = 0; EventEnableMask[1] = 0x0000000F; EventEnableMask[2] = 0; EventEnableMask[3] = 0; EventEnableMask[4] = 0; Overlapped.Offset = 0; Overlapped.OffsetHigh = 0;
Overlapped.hEvent = CreateEvent(0, FALSE, FALSE, NULL);
Ret = DioEventRequestPendingEx( DeviceHandle, EventEnableMask, EventBuf, &Overlapped ); if (Ret == FBIDIO_ERROR_IO_PENDING) { // 非同期処理では、WaitFirSingleObject を使ってイベントを待つので、 // DioEventRequestPendingEx 実行後、他の処理を行った後でイベント待ちを // 行うことが可能。 WaitForSingleObject(Overlapped.hEvent, INFINITE); } 同期処理 INT Ret; HANDLE DeviceHandle; DWORD EventEnableMask[5]; DWORD EventBuff[5];
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
●Visual Basic 非同期処理 Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Dim EventEnableMask(5) As Long Dim EventBuf(5) As Long
Dim Overlapped As OVERLAPPED Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) : : EventEnableMask(0) = 0; EventEnableMask(1) = &HF; EventEnableMask(2) = 0; EventEnableMask(3) = 0; EventEnableMask(4) = 0; Overlapped.Offset = 0 Overlapped.OffsetHigh = 0
Overlapped.hEvent = CreateEvent(0, False, False, 0)
Ret = DioEventRequestPendingEx( DeviceHandle, EventEnableMask(0), EventBuf(0), _ Overlapped )
If Ret = FBIDIO_ERROR_IO_PENDING Then
Ret = WaitForSingleObject(Overlapped.hEvent, INFINITE) End If
同期処理
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Dim EventEnableMask(5) As Long Dim EventBuf(5) As Long
Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
●Visual C# .NET(x86、x64 共用) 非同期処理
uint[] dwEventEnableMask = new uint[5]; uint[] dwEventBuff = new uint[5];
IFCDIO_ANY.OVERLAPPED lpOverlapped = new IFCDIO_ANY.OVERLAPPED(); IntPtr hDeviceHandle;
uint nRet;
GCHandle Pinnedovl; GCHandle PinnedEvent;
Pinnedovl = GCHandle.Alloc(lpOverlapped, GCHandleType.Pinned); PinnedEvent = GCHandle.Alloc(dwEventBuff, GCHandleType.Pinned); dwEventEnableMask[0] = 0; dwEventEnableMask[1] = 0x0000000F; dwEventEnableMask[2] = 0; dwEventEnableMask[3] = 0; dwEventEnableMask[4] = 0; nRet = IFCDIO_ANY.DioEventRequestPendingEx( hDeviceHandle, EventEnableMask, PinnedEvent.AddrOfPinnedObject(), Pinnedovl.AddrOfPinnedObject()); // 割り込み終了後、解放する。 Pinnedovl.Free(); PinnedEvent.Free();
●Visual C# .NET(x86、x64 共用) 同期処理
uint[] dwEventEnableMask = new uint[5]; uint[] dwEventBuff = new uint[5]; IntPtr hDeviceHandle;
uint nRet;
GCHandle PinnedEvent;
PinnedEvent = GCHandle.Alloc(dwEventBuff, GCHandleType.Pinned); dwEventEnableMask[0] = 0; dwEventEnableMask[1] = 0x0000000F; dwEventEnableMask[2] = 0; dwEventEnableMask[3] = 0; dwEventEnableMask[4] = 0; nRet = IFCDIO_ANY.DioEventRequestPendingEx( hDeviceHandle, EventEnableMask, PinnedEvent.AddrOfPinnedObject(), IntPtr.Zero); // 割り込み終了後、解放する。 PinnedEvent.Free();
●Visual Basic .NET(x86、x64 共用) 非同期処理
Dim dwEventEnableMask(5) As Integer Dim dwEventBuf(5) As Integer
Dim lpOverlapped As IFCDIO_ANY.OVERLAPPED = New IFCDIO_ANY.OVERLAPPED Dim hDeviceHandle As IntPtr
Dim nRet As Integer Dim Pinnedovl As GCHandle Dim PinnedEvent As GCHandle
Pinnedovl = GCHandle.Alloc(lpOverlapped, GCHandleType.Pinned) PinnedEvent = GCHandle.Alloc(dwEventBuf, GCHandleType.Pinned) dwEventEnableMask(0) = 0 dwEventEnableMask(1) = &H0000000F dwEventEnableMask(2) = 0 dwEventEnableMask(3) = 0 dwEventEnableMask(4) = 0 nRet = IFCDIO_ANY.DioEventRequestPendingEx( hDeviceHandle, _ dwEventEnableMask, _ PinnedEvent.AddrOfPinnedObject() _, Pinnedovl.AddrOfPinnedObject()) ' 割り込み処理終了後、解放する。 Pinnedovl.Free() PinnedEvent.Free()
●Visual Basic .NET(x86、x64 共用) 同期処理
Dim dwEventEnableMask(5) As Integer Dim dwEventBuf(5) As Integer
Dim hDeviceHandle As IntPtr Dim nRet As Integer
Dim PinnedEvent As GCHandle
PinnedEvent = GCHandle.Alloc(dwEventBuf, GCHandleType.Pinned) dwEventEnableMask(0) = 0 dwEventEnableMask(1) = &H0000000F dwEventEnableMask(2) = 0 dwEventEnableMask(3) = 0 dwEventEnableMask(4) = 0 nRet = IFCDIO_ANY.DioEventRequestPendingEx( hDeviceHandle, _ dwEventEnableMask, _ PinnedEvent.AddrOfPinnedObject() _, IntPtr.Zero) ' 割り込み処理終了後、解放する。 PinnedEvent.Free() デバイス名「FBIDIO512」のデバイスから「IR1 から IR4 立ち下がりエッジ検出」のイベント要 求を待ちます。
12. DioEintSetEdgeConfig
【機能】 エッジ検出機能を設定します。 【書式】 ●C 言語 INT DioEintSetEdgeConfig ( HANDLE DeviceHandle, DWORD FallEdgeConfig, DWORD RiseEdgeConfig ); ●Visual BasicDeclare Function DioEintSetEdgeConfig Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByVal FallEdgeConfig As Long, _ ByVal RiseEdgeConfig As Long _ )As Integer
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioEintSetEdgeConfig ( IntPtr hDeviceHandle, uint dwSetFallEdgeConfig, uint dwSetRiseEdgeConfig, ); ●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioEintSetEdgeConfig ( uint hDeviceHandle,
uint dwSetFallEdgeConfig, uint dwSetRiseEdgeConfig, );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioEintSetEdgeConfig Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr,
ByVal dwSetFallEdgeConfig As Integer, ByVal dwSetRiseEdgeConfig As Integer )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioEintSetEdgeConfig Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer,
ByVal dwSetFallEdgeConfig As Integer, ByVal dwSetRiseEdgeConfig As Integer )As Integer 【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 FallEdgeConfig IR1~IR8 の立下りエッジ検出を有効にするか、無効にするかを指定します。
bit31 ・・・ bit8 bit7 ・・・ bit0
予約 IR8 ・・・ IR1 電源投入時はすべて無効(0)です。 0:無効 1:有効 RiseEdgeConfig IR1~IR8 の立上りエッジ検出を有効にするか、無効にするかを指定します。
bit31 ・・・ bit8 bit7 ・・・ bit0
予約 IR8 ・・・ IR1
電源投入時はすべて無効(0)です。 0:無効
【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。 【備考】 ・本関数実行後は、DioEintSetIrqMask関数を必ず実行してください。 ・本関数は同じ IRx に対して立下り/立ち上がりの両エッジを指定することは出来ません。 両エッジを指定した場合、立ち上がりエッジが優先されます。 【使用例】 ●C 言語 INT Ret; HANDLE DeviceHandle;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
Ret = DioEintSetEdgeConfig( DeviceHandle, 0x0000000f, 0x000000f0 ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
Ret = DioEintSetEdgeConfig( DeviceHandle, &HF, &HF0 ) ●Visual C# .NET(x86、x64 共用)
IntPtr hDeviceHandle; uint nRet;
nRet = IFCDIO_ANY.DioEintSetEdgeConfig( hDeviceHandle, 0x0000000f, 0x000000f0 ); ●Visual Basic .NET(x86、x64 共用)
13. DioEintGetEdgeConfig
【機能】 現在のエッジ検出設定を取得します。 【書式】 ●C 言語 INT DioEintGetEdgeConfig ( HANDLE DeviceHandle, PDWORD FallEdgeConfig, PDWORD RiseEdgeConfig ); ●Visual BasicDeclare Function DioEintGetEdgeConfig Lib "dpc0224.DLL"( _ ByVal DeviceHandle As Long, _
ByRef FallEdgeConfig As Long, _ ByRef RiseEdgeConfig As Long _ )As Integer
●Visual C# .NET(x86、x64 共用) [DllImport("dpc0224.dll")]
public static extern uint DioEintGetEdgeConfig ( IntPtr hDeviceHandle,
out uint pdwGetFallEdgeConfig, out uint pdwGetRiseEdgeConfig );
●Visual C# .NET(x86 専用) [DllImport("dpc0224.dll")]
public static extern uint DioEintGetEdgeConfig ( uint hDeviceHandle,
out uint pdwGetFallEdgeConfig, out uint pdwGetRiseEdgeConfig );
●Visual Basic .NET(x86、x64 共用)
Declare Function DioEintGetEdgeConfig Lib "dpc0224.dll"( ByVal hDeviceHandle As IntPtr,
ByRef pdwSetFallEdgeConfig As Integer, ByRef pdwSetRiseEdgeConfig As Integer )As Integer
●Visual Basic .NET(x86 専用)
Declare Function DioEintGetEdgeConfig Lib "dpc0224.dll"( ByVal hDeviceHandle As Integer,
ByRef pdwSetFallEdgeConfig As Integer, ByRef pdwSetRiseEdgeConfig As Integer )As Integer 【パラメータ】 DeviceHandle DioOpen関数で取得したデバイスハンドルを指定します。 FallEdgeConfig IR1~IR8 の立下りエッジ検出設定状態を返す変数へのポインタ(参照渡し)を指定します。 FallEdgeConfig には、次の形式で立下りエッジ検出設定が返されます。
bit31 ・・・ bit8 bit7 ・・・ bit0
予約 IR8 ・・・ IR1 電源投入時はすべて無効(0)です。 0:無効 1:有効 RiseEdgeConfig IR1~IR8 の立上りエッジ検出設定状態を返す変数へのポインタ(参照渡し)を指定します。 RiseEdgeConfig には、次の形式で立上りエッジ検出設定が返されます。
bit31 ・・・ bit8 bit7 ・・・ bit0
予約 IR8 ・・・ IR1
電源投入時はすべて無効(0)です。 0:無効
【戻り値】 正常終了した場合は、FBIDIO_ERROR_SUCCESSが返されます。 FBIDIO_ERROR_SUCCESS以外の値が返された場合については、『3.4 戻り値一覧』をご参照くださ い。 【使用例】 ●C 言語 INT Ret; HANDLE DeviceHandle;
DWORD FallEdgeConfig, RiseEdgeConfig;
DeviceHandle = DioOpen("FBIDIO512", FBIDIO_FLAG_NORMAL); :
:
Ret = DioEintGetEdgeConfig( DeviceHandle, &FallEdgeConfig, &RiseEdgeConfig ); ●Visual Basic
Dim Ret As Long Dim Name As String Dim DeviceHandle As Long
Dim FallEdgeConfig As Long, RiseEdgeConfig As Long Name = "FBIDIO512" & Chr( 0 )
DeviceHandle = DioOpen(Name, FBIDIO_FLAG_NORMAL) :
:
Ret = DioEintGetEdgeConfig( DeviceHandle, FallEdgeConfig, RiseEdgeConfig) ●Visual C# .NET(x86、x64 共用)
uint dwGetFallEdgeConfig, dwGetRiseEdgeConfig; IntPtr hDeviceHandle;
uint nRet;
nRet = IFCDIO_ANY.DioEintGetEdgeConfig( hDeviceHandle, out dwGetFallEdgeConfig, out dwGetRiseEdgeConfig ); ●Visual Basic .NET(x86、x64 共用)
Dim dwGetFallEdgeConfig As Long, dwGetRiseEdgeConfig As Long Dim hDeviceHandle As IntPtr
3.4 戻り値一覧
エラー識別子 値 意味 対処方法 FBIDIO_ERROR_SUCCESS 0 正常終了 - FBIDIO_ERROR_NOT_DEVICE C0000001h ドライバを呼び出せま せん。 指定したデバイスが見つかりま せんでした。 指定したデバイス番号が存在す るかどうかを確認してください。 FBIDIO_ERROR_NOT_OPEN C0000002h ドライバを OPEN できま せん。 デバイスのオープン時、何らかの エラーが発生しました。 ドライバ内部のメモリ確保に失 敗したなど。 FBIDIO_ERROR_INVALID_HANDLE C0000003h デバイスハンドルが正 しくありません。 不正なデバイスハンドルで呼び 出しを行おうとしました。 OPEN 関数で返されたデバイスハ ンドルを使用してください。 FBIDIO_ERROR_ALREADY_OPEN C0000004h すでに OPEN しているデ バイスを OPEN しようと しました 既に OPEN されているデバイスで す。共有させる場合には、フラグ’ FLAG_SHARE’の指定をして OPEN し てください。 FBIDIO_INSUFFICIENT_BUFFER C0000007h システムコールに渡さ れたデータ領域が小さ すぎます ドライバの内部エラーです。どの ような状況でエラーが発生した かをご連絡ください FBIDIO_ERROR_IO_PENDING C0000008h 非同期 I/O 操作が進行 中です Win32API の WaitForSingleObject 関数等でイ ベントの完了を待つことができ ます。 FBIDIO_ERROR_NOT_SUPPORTED C0000009h サポートされていない 機能です ご使用になるインタフェースモ ジュールがサポートしていない 機能を制御する関数をコールし た 場 合 に エ ラ ー コ ー ド FBIDIO_ERROR_NOT_SUPPORTED が 返されます。DioOutputByte関数 にDIデバイスのデバイスハンド ルを指定してコールした場合な どが当てはまります FBIDIO_ERROR_MEMORY_NOTALLOC ATED C0001000h 作業用メモリの確保に 失敗しました 利用可能なメモリが足りなくな っています。不要なアプリケーシ ョンなどを終了させ、利用可能な メモリを増やすようにしてくだエラー識別子 値 意味 対処方法 FBIDIO_ERROR_INVALID_CALL C0001002h 不正な呼び出しです インタフェースモジュールの動 作状況によりコールが禁止され るている関数をコールした場合 に返されるエラーです。 FBIDIO_ERROR_DRVCAL C0001003h ドライバをコールでき ません ドライバファイルがインストー ルされていない場合等に発生し ます。ドライバのインストールを 行ってください FBIDIO_ERROR_NULL_POINTER C0001004h DLL、ドライバ間で NULL ポインタ(又は 0)が渡 されました システムに障害が発生している 可能性がございます。どのような 状況でエラーが発生したかをご 連絡ください。 FBIDIO_ERROR_IO_INCOMPLETE C0001005h 非同期 I/O イベントが、 シグナル状態になって いません 非同期 I/O 操作が進行中です。 Win32API の WaitForSingleObject 関数等でイベント完了を待った 後に実行して下さい。 FBIDIO_ERROR_USB_TIMEOUT C0001006h USB デバイスとの通信が タイムアウトしました 再 起 動 を 行 な う か 、 DPC-0401 の 「IfUsbDevicePowerCtl」関数を使用 し、USB デバイスの電源を OFF→ON し て下さい。 「IfUsbDevicePowerCtl」関数の使用 方法は、DPC-0401 の Help を参照して ください。 FBIDIO_ERROR_USBIO_FAILED C0001007h USB デバイスの実行に失 敗しました 再 起 動 を 行 な う か 、 DPC-0401 の 「IfUsbDevicePowerCtl」関数を使用 し、USB デバイスの電源を OFF→ON し て下さい。 「IfUsbDevicePowerCtl」関数の使用 方法は、DPC-0401 の Help を参照して ください。
第4章 サンプルプログラム
各言語用に用意したサンプルプログラムの概要を説明します。4.1 実行手順
サンプルプログラムには実行形式のファイルが付属していません。 ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。 ●Visual C++の場合Visual C++(Visual Studio)を起動し、「ファイル」メニューから「ワークスペースを開く」を 選び、メイクファイル「*.dsp」を開き、ビルドしてください。 ●Visual Basic の場合 Visual Basic を起動し、プロジェクトファイル「*.vbp」を開き、ビルドしてください。 ●Visual C++ .NET の場合 Visual Studio を起動し、「ファイル」メニューから「開く」→「プロジェクト」を選び、プロジ ェクトファイル「*.vcproj」を開き、ビルドしてください。 ●Visual C# .NET の場合 Visual Studio を起動し、「ファイル」メニューから「開く」→「プロジェクト」を選び、プロジ ェクトファイル「*.csproj」※1を開き、ビルドしてください。
●Visual Basic .NET の場合
Visual Studio を起動し、「ファイル」メニューから「開く」→「プロジェクト」を選び、プロジ ェクトファイル「*.vbproj」※1を開き、ビルドしてください。 ※1 クラスライブラリもビルドされます