チュートリアル - interfacetut-0025 - 1 - interface corporation 改訂履歴 ver. 年 月 改...

115
www.interface.co.jp チュートリアル Visual BasicによるDIO入門書 (Digital Input Output)

Upload: others

Post on 13-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

www.interface.co.jp

チュートリアル

Visual BasicによるDIO入門書

(Digital Input Output)

Page 2: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

www.interface.co.jp

商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。 保障の内容と制限 弊社はドキュメント内の情報の正確さに万全を期しています。万一、誤記または誤植等があった

場合、弊社は予告なく改訂する場合があります。ドキュメントまたはドキュメント内の情報に起

因するいかなる損害に対しても弊社は責任を負いません。 製品に含まれるバグ、あるいは製品の供給(納期遅延),性能、もしくは使用に起因する付帯的損害もしくは間接的損害に対して、弊社に全面的に責がある場合でも、弊社はその製品に対する改良

(正常に動作する)、代品交換までとし、金銭面での賠償の責任は一切負わないものとしますので、予めご了承ください。 ドキュメント内の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があり

ます。 著作権,知的所有権 弊社は本製品に含まれるおよび本製品に対する権利や知的所有権を保持しています。 本製品はコンピュータ ソフトウェア(プログラム),図,文章,写真等を含んでいます。 複製の禁止 弊社の許可なく、本製品(ドキュメント含む)の全て、または一部に関わらず、複製,改変等を行うことはできません。 責任の制限 弊社は、弊社または再販売者の予見の有無に関わらず、発生したいかなる特別損害,偶発的損害,間接的な損害,重大な損害について、責任を負いません。 補償の内容 本ドキュメントで使用している弊社製品の補償については、各製品のマニュアルを参照してくだ

さい。

本書の内容の一部または全部を、無断で転載することを禁止します。 本書の内容は、将来予告なく変更することがありますので、あらかじめご了承ください。 © 2000, 2006 Interface Corporation. All rights reserved.

Page 3: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 1 - Interface Corporation

改訂履歴

Ver. 年 月 改 訂 内 容 1.9 2006年6月 ●対応型式追加

●インストール説明にXP Embeddedを追加 ●技術資料一覧更新

1.8 2005年9月 ●対応型式追加 ●技術資料一覧更新

1.7 2004年9月 ●対応型式追加 ●インストール説明 Windows XP/2000へ変更 ●技術資料一覧更新

1.6 2003年10月 ●対応型式追加 ●誤記修正

1.5 2003年7月 ●対応型式追加 ●関数追加

1.4 2002年2月 ●CompactPCIボードに対応 ●誤記修正

1.3 2001年6月 ●『4.チュートリアル 図4-2』訂正 1.2 2000年11月 ●誤記修正

●対応型式追加 ●DLL関数追加 ●Windows Millennium Edition対応 ●インストール時の「FD」を「CD-ROM」に変更 ●サンプルプログラム(デジタル出力)の設定値の入力方法の変更(10進数 → 16進数)

1.1 2000年5月 ●誤記修正 1.0 2000年3月 新規作成

本チュートリアルをご使用の際は、必ず各製品型式の最新のドキュメント(ユーザーズマニュアル,ヘルプ)をあわせて参照してください。また、最新のドライバソフトウェアをご使用ください。ユーザーズマニュアル,ドライバソフトウェアは弊社Web site(www.interface.co.jp)からダウンロードできます。(ヘルプはドライバソフトウェアに含まれています)

Page 4: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 2 -

目 次

第 1章 デジタル入出力概要 8

第 2章 デジタル入出力ボードのインストール 9

2.1 コンピュータへの設置方法......................................................................................................... 9 2.1.1 デバイスドライバのインストール.............................................................................. 10 ■Windows XP Embedded,Windows XP,Windows Server 2003をご使用の場合............ 10 ■Windows 2000をご使用の場合 ....................................................................................... 12

2.2 サンプルプログラム,ヘルプ,ヘッダファイル,インポートライブラリ,最新情報ドキュメントファイルのインストール............................................................................................................ 14

第 3章 Visual Basicによるデジタル入出力 15

3.1 ピンアサインメント................................................................................................................... 16 3.2 DLLプロシージャ呼び出しによるプログラミング(概要).................................................... 18 3.3 デジタル入出力ボード制御概略............................................................................................... 19

第 4章 チュートリアル 20

4.1 デジタル入力 ............................................................................................................................... 21 Step1. 基本フォーム作成 ............................................................................................................ 25 Step2. DLLプロシージャ宣言 ..................................................................................................... 28 Step3. 初期化処理と終了処理 .................................................................................................... 32 Step4. 単点入力/バイト入力/ワード入力/ダブルワード入力 ................................................ 34

4.2 デジタル出力 ............................................................................................................................... 42 Step1. 基本フォーム作成 ............................................................................................................ 48 Step2. 単点出力/バイト出力/ワード出力/ダブルワード出力 ................................................ 48

4.3 バックグランド処理................................................................................................................... 57 Step1. 基本フォーム作成 ............................................................................................................ 57 Step2. フォアグラウンド処理の作成........................................................................................ 58 Step3. バックグランド処理の作成............................................................................................ 59

4.4 割り込み処理 ............................................................................................................................... 66 Step1. 基本フォーム作成 ............................................................................................................ 67 Step2. フォアグラウンド処理の作成........................................................................................ 67 Step3. 割り込み検知処理の作成................................................................................................ 67

第 5章 FbiDio.DLLリファレンス 73

DioOpen.......................................................................................................................................... 73 DioClose ......................................................................................................................................... 73 DioInputPoint ................................................................................................................................. 73 DioOutputPoint............................................................................................................................... 74 DioGetBackGroundUseTimer........................................................................................................ 74 DioSetBackGroundUseTimer ........................................................................................................ 74 DioSetBackGround......................................................................................................................... 75 DioFreeBackGround....................................................................................................................... 75

Page 5: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 3 - Interface Corporation

DioStopBackGround ...................................................................................................................... 75 DioGetBackGroundStatus .............................................................................................................. 76 DioInputPointBack ......................................................................................................................... 76 DioOutputPointBack ...................................................................................................................... 77 DioWatchPointBack ....................................................................................................................... 77 DioGetInputHandShakeConfig ...................................................................................................... 78 DioSetInputHandShakeConfig....................................................................................................... 78 DioGetOutputHandShakeConfig ................................................................................................... 79 DioSetOutputHandShakeConfig .................................................................................................... 79 DioInputHandShake ....................................................................................................................... 80 DioInputHandShakeEx................................................................................................................... 80 DioOutputHandShake..................................................................................................................... 81 DioOutputHandShakeEx ................................................................................................................ 81 DioStopInputHandShake................................................................................................................ 81 DioStopOutputHandShake ............................................................................................................. 82 DioGetHandShakeStatus ................................................................................................................ 82 DioGetOverlappedResult ............................................................................................................... 82 DioInputByte .................................................................................................................................. 83 DioInputWord................................................................................................................................. 83 DioInputDword............................................................................................................................... 84 DioOutputByte................................................................................................................................ 84 DioOutputWord .............................................................................................................................. 85 DioOutputDword ............................................................................................................................ 85 DioGetAckStatus ............................................................................................................................ 86 DioSetAckPulseCommand ............................................................................................................. 86 DioGetStbStatus ............................................................................................................................. 87 DioSetStbPulseCommand .............................................................................................................. 87 DioInputUniversalPoint.................................................................................................................. 88 DioOutputUniversalPoint ............................................................................................................... 88 DioSetTimeOut............................................................................................................................... 88 DioGetTimeOut .............................................................................................................................. 89 DioSetIrqMask................................................................................................................................ 89 DioGetIrqMask............................................................................................................................... 89 DioSetIrqConfig ............................................................................................................................. 90 DioGetIrqConfig............................................................................................................................. 91 DioGetDeviceConfig...................................................................................................................... 92 DioSetTimerConfig ........................................................................................................................ 93 DioGetTimerConfig ....................................................................................................................... 94 DioGetTimerCount......................................................................................................................... 95 DioSetLatchStatus .......................................................................................................................... 95 DioGetLatchStatus ......................................................................................................................... 96 DioGetResetInStatus ...................................................................................................................... 96 DioEventRequestPending............................................................................................................... 97 DioCommonGetPciDeviceInfo ...................................................................................................... 98 DioEintSetIrqMask......................................................................................................................... 99 DioEintGetIrqMask ........................................................................................................................ 99 DioEintSetEdgeConfig ................................................................................................................... 99

Page 6: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 4 -

DioEintGetEdgeConfig ................................................................................................................ 100 DioEintSetEdgeConfigEx ............................................................................................................ 100 DioEintGetEdgeConfigEx............................................................................................................ 101 DioEintInputPoint......................................................................................................................... 101 DioEintInputByte ......................................................................................................................... 102 DioEintInputWord........................................................................................................................ 102 DioEintInputDword ...................................................................................................................... 103 DioEintSetFilterConfig ................................................................................................................ 103 DioEintGetFilterConfig................................................................................................................ 104 DioEventRequestPendingEx ........................................................................................................ 105 DioGetDeviceConfigEx ............................................................................................................... 106 DioSetRstinMask.......................................................................................................................... 106 DioGetRstinMask ......................................................................................................................... 107 DioEintSetIrqMaskEx .................................................................................................................. 107 DioEintGetIrqMaskEx.................................................................................................................. 108 エラーコード一覧 ...................................................................................................................... 108

技術資料紹介 109

Page 7: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 5 - Interface Corporation

はじめに

平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力ボ

ードを利用しVisual Basicにて制御プログラムの作成を行われる方を対象に、製品の導入からプログラム作成までに関し説明したものです。プログラム初心者の方が弊社製品をご利用頂き、また

Visual Basicにてプログラムの開発を行われる際の手助けになればと考えております。 記述する内容に関しましては、基本的なことにとどまっております。また、弊社 Web site(www.interface.co.jp)ではFAQ,製品マニュアル,および本チュートリアル記載のサンプルプログラムのソース(BPC-0809)の公開を行っておりますので、こちらもあわせてご覧頂けますと、より一層ご理解を深めて頂けるものと思います。

注意事項

本冊子では、使用する環境をWindows XP/XP Embedded/Server 2003/2000+Visual BasicVer. 5.0(SP3)またはVer. 6.0(SP5)を想定し記載しております。 Windows NT/Me/98/95をご利用の場合、ボードのインストール方法が本冊子に記載した内容とは異なりますのでご注意ください。こちらに関しましては、弊社製品マニュアルをご確認ください。 Visual Studio .NETでご利用の方は、チュートリアル「Visual Studio .NET移行ガイド」を別途用意しております。こちらを参照してください。 対応OSはボード型式によって異なりますので、対応ソフトウェアのReadmeもしくはヘルプでご確認ください。

Page 8: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 6 -

対象環境 本チュートリアルは以下の制約事項があります。 対象型式 (PCI)

PCI-2104C PCI-2130C PCI-2131 PCI-2131AM PCI-2135 PCI-2152C PCI-2230C PCI-2402C PCI-2426C PCI-2430C PCI-2464C PCI-2503 PCI-2702C PCI-2722 PCI-2724CL PCI-2725A PCI-2725L PCI-2726CL PCI-2727A PCI-2727L PCI-2753 PCI-2756AM PCI-2758AM PCI-2762CM PCI-2793 PCI-2826C PCI-287244 PCI-2994CV

PCI-2105A PCI-2130CL PCI-2131A PCI-2131L PCI-2135L PCI-2154C PCI-2230CV PCI-2403A PCI-2427 PCI-2431 PCI-2466C PCI-2512C PCI-2703 PCI-2723C PCI-2724CM PCI-2725AL PCI-2725M PCI-2726CM PCI-2727AL PCI-2727M PCI-2756A PCI-2758A PCI-2760C PCI-2768C PCI-2796C PCI-2826CV PCI-292388

PCI-2128 PCI-2130CM PCI-2131AL PCI-2131M PCI-2135M PCI-2162 PCI-2330CV PCI-2424 PCI-2427A PCI-2431A PCI-2470 PCI-2513 PCI-2703A PCI-2724C PCI-2725 PCI-2725AM PCI-2726C PCI-2727 PCI-2727AM PCI-2752C PCI-2756AL PCI-2758AL PCI-2762C PCI-2790C PCI-2798C PCI-287144 PCI-2994C

対象型式 (CPZ)

CPZ-2104 CPZ-2130M CPZ-2230 CPZ-2402 CPZ-2466 CPZ-2515 CPZ-2702 CPZ-2724 CPZ-2726 CPZ-2752 CPZ-2762M CPZ-2790 CPZ-2826 CPZ-286122 CPZ-292388 CPZ-2995V

CPZ-2130 CPZ-2152 CPZ-2230V CPZ-2430 CPZ-2505 CPZ-2516 CPZ-2703 CPZ-2724L CPZ-2726L CPZ-2760 CPZ-2768 CPZ-2798 CPZ-2826V CPZ-287144 CPZ-2994

CPZ-2130L CPZ-2154 CPZ-2330V CPZ-2464 CPZ-2506 CPZ-2517 CPZ-2723 CPZ-2724M CPZ-2726M CPZ-2762 CPZ-2769 CPZ-2799 CPZ-2827V CPZ-287244 CPZ-2994V

Page 9: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 7 - Interface Corporation

対象型式 (CTP)

CTP-2104 CTP-2130L CTP-2131L CTP-2135L CTP-2154 CTP-2230V CTP-2424 CTP-2464 CTP-2506 CTP-2517 CTP-2703 CTP-2724 CTP-2725 CTP-2726 CTP-2727 CTP-2752 CTP-2762 CTP-2769 CTP-2799 CTP-2827V CTP-2994

CTP-2128 CTP-2130M CTP-2131M CTP-2135M CTP-2162 CTP-2330V CTP-2430 CTP-2466 CTP-2515 CTP-2609 CTP-2722 CTP-2724L CTP-2725L CTP-2726L CTP-2727L CTP-2753 CTP-2762M CTP-2790 CTP-2826 CTP-286122 CTP-2994V

CTP-2130 CTP-2131 CTP-2135 CTP-2152 CTP-2230 CTP-2402 CTP-2431 CTP-2505 CTP-2516 CTP-2702 CTP-2723 CTP-2724M CTP-2725M CTP-2726M CTP-2727M CTP-2760 CTP-2768 CTP-2798 CTP-2826V CTP-294188 CTP-2995V

対象型式 (CSI)

CSI-292366 CSI-293166

対象型式 (PEX)

PEX-224140 PEX-251101 PEX-292366

PEX-234104 PEX-284122 PEX-293166

PEX-251100 PEX-285122

対象型式 (LPC)

LPC-224140 LPC-251101 LPC-292366

LPC-234104 LPC-284122 LPC-293166

LPC-251100 LPC-285122

対象ユーザ 制御用電子機器および、パソコン等に関して基本的な知識を有している方。

※本冊子は上記の弊社製品型式のみに対応しています。 製品の詳細は弊社Web siteを参照してください。

Page 10: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 8 -

第1章 デジタル入出力概要

コンピュータはデジタル信号で動作しています。コンピュータに入力される情報、コンピュータ

から出力する情報は全てデジタルで処理されます。 また、世の中には様々なスイッチ,センサといったものが数多くありますが、電気的にON/OFFでその状態を示すことが可能な情報は、コンピュータに入力することが可能です。これとは逆に、

その状態をコンピュータから作り出す(出力する)ことも可能です。 身近な例でいえば、よくテレビ番組で「お手元のスイッチでYESかNOかお答えください」という司会者の問いかけに観客が答え、その集計結果が電光パネルに表示されるといったものをご覧に

なったことがあると思います。 これはスイッチの情報、つまりは「YES」か「NO」かといったデジタル情報がコンピュータに入力され、その集計結果の情報が電光パネルに出力され表示されるといった、デジタル入出力シス

テムの一例です。 集計結果を電光パネルに表示する際、コンピュータは電光パネルに対し「特定の箇所を光らせる」

といったことを行っています。言いかえれば、発光部品への「ON」,「OFF」のデジタル情報を電光パネルに送っているわけです。

ONON

ON OFF

OFF ON

ON

Yesの入力信号をカウント

‘5’と光らせる

Yes

Yes

Yes

Page 11: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 9 - Interface Corporation

第2章 デジタル入出力ボードのインストール

作成するアプリケーションからデジタル入出力を行う場合、当然のことながらアプリケーション

を実行するコンピュータにデジタル入出力ボードが組み込まれていなければなりません。 ここではWindowsXP/XP Embedded/Server 2000/2000環境における、弊社デジタル入出力ボードのインストール方法を記載します。Windows NT/Me/98/95ではインストール方法がここに記載する内容とは異なります。こちらに関しては、製品マニュアルまたはオンラインドキュメントをご確認く

ださい。

2.1 コンピュータへの設置方法

※ 写真は実物と異なる場合があります。

①コンピュータ本体の電源が“OFF”であることを確認し、電源ケーブルをACコンセントから外します。その後、外装カバー,スロットカバーを外します。

②拡張用スロットへボードを差し込みます。

<例>

基板の左右の端に力を入れ、カツンとショックがあるまで押し込む。

ボード

コンピュータ

PCIコネクタ

金メッキ端子がコネクタに隠れていることを確認する。

ビス止め

注意!

製品は正しい向きに実装してください。間違った向きに実装した場合、コンピュータ,ボードを

破損する恐れがあります。

③ボードパネルをコンピュータ本体とビス止めしてください。

④本体へ外装カバーを元通り取り付け、電源ケーブルをACコンセントに接続します。その後、コンピュータを起動します。

以上でボードの設置は完了です。次にドライバのインストールを行います。

Page 12: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 10 -

2.1.1 デバイスドライバのインストール

■Windows XP Embedded,Windows XP,Windows Server 2003をご使用の場合 Administratorsのグループに所属しているユーザが、インストールを行ってください。 ※ Windows XP Embeddedは、Windows XPと同様の手順で、ドライバのインストールができます。

(ただし、OSイメージにデバイスの検出に必要なコンポーネントが含まれている必要があります。)

①Windows XP Embedded,Windows XP,Windows Server 2003が起動すると、「新しいハードウェアの検出ウィザード」が表示されます。

②「一覧または特定の場所からインストールする(詳細)」が選択されていることを確認し、「次へ」をクリックします。

③「次の場所で最適のドライバを検索する」を選択し、「次の場所を含める」にチェックをつけ、

ドライバ保存先の「¥Win2000」フォルダを指定し、「次へ」をクリックします。

ドライバ保存先の「¥Win2000」フォルダを指定します。

④ファイルのコピーが始まります。

Page 13: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 11 - Interface Corporation

⑤インストールが完了した旨のダイアログボックスが表示されるので、「完了」ボタンをクリッ

クします。

以上で、Windows XP Embedded,Windows XP,Windows Server 2003用のデバイスドライバのインストールは完了です。デバイスドライバのインストール完了後以降は、システム起動時に上記②のよ

うに「新しいハードウェアの検索ウィザード」が起動することはありません。

• Windows XP Embedded 用ハードウェア情報ファイルのインポートをする場合 ・ドライバダウンロード方法 ①弊社Web siteよりGPC-2000のDriver Disk [Windows XPe,XP,2003,2000]をダウンロードします。

②ダウンロードしたプログラムを実行すると、「Win2000」フォルダが作成されます。

・ドライバインストール方法 ①Windows XP Embedded 開発環境の Component Database Manager を起動します。

②弊社製品のハードウェア情報ファイルをインポートします。作成した「Win2000」フォルダ内の拡張子がSLDのファイルを、画面の指示に従ってインポートしてください。

③以上で、ハードウェア情報のインポートは完了です。

Page 14: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 12 -

■Windows 2000をご使用の場合

Administratorsのグループに所属しているユーザが、インストールを行ってください。 ①Windows 2000が起動すると、「新しいハードウェアの検出ウィザード」が表示されるので、「次へ」ボタンをクリックします。

②「デバイスドライバに最適なドライバを検索する(推奨)」を選択し、「次へ」ボタンをクリックします。

③「検索場所のオプション」で「場所を指定」を選択し、「次へ」ボタンをクリックします。

④「参照」ボタンをクリックし、「製造元のファイルのコピー元」にドライバ保存先の「¥Win2000」フォルダを指定します。その後、「OK」ボタンをクリックします。

Page 15: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 13 - Interface Corporation

⑤デバイスドライバが見つかった旨のダイアログボックスが表示されるので、「次へ」ボタンを

クリックします。 ⑥ファイルのコピーが始まります。 ⑦インストールが完了した旨のダイアログボックスが表示されるので、「完了」ボタンをクリッ

クします。

以上で、Windows 2000用のデバイスドライバのインストールは完了です。 デバイスドライバのインストール完了後以降は、システム起動時に上記②のように「新しいハー

ドウェアの検索ウィザード」が起動することはありません。 インストールを完了したら、リソース(I/Oアドレス,割り込みレベル)の設定,競合の有無の確認を行ってください。 ドライバのインストールが正常に行われると、システムプロパティのデバイスマネージャに表示

されます。

ここにボードが追加されます

Page 16: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 14 -

2.2 サンプルプログラム,ヘルプ,ヘッダファイル,インポートライブラリ,最新情報ドキュメントファイ

ルのインストール

1. 弊社Web siteよりGPC-2000のUtility Diskをダウンロードします。 2. ダウンロードしたプログラムを実行すると、「SETUP」フォルダが作成されます。 3.「SETUP」フォルダ内のSETUP.EXEを実行して下さい。プログラムが起動しインストールが開始されます。

インストールが完了すると、「スタート」メニューの「プログラム」に、「Interface GPC-2000」 が追加されます。

Page 17: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 15 - Interface Corporation

第3章 Visual Basicによるデジタル入出力

Visual Basicより、デジタル入出力ボードを制御するには、DLL(Dynamic Link Library)を利用します。Windowsアプリケーションプログラミングでは、直接I/Oやメモリにアクセスすることが禁止されています。したがって、デジタル入出力ボードに対して直接的に信号を送ることができません。

そこで、ボードに対して直接的に信号を送るプログラム(DLL)から必要なプロシージャ(関数)を呼び出し、このDLLを介してボートの制御を行います。

DIOボード

( )

出力

(FBIDIO.DLL)

Visual Basicアプリケーション

ダイナミックリンクライブラリ

Win32 API

仮想デバイスドライバ(CP2000.sys)

入力

Page 18: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 16 -

3.1 ピンアサインメント

デジタル入出力ボードへの信号入力、またはデジタル入出力ボードからの信号出力はボードのコ

ネクタ部分より行われますが、使用する製品型式によって各ピンに割り当てられた役割が異なり

ます。配線時には、これらピンアサインメントをよく確認の上、配線してください。 以下、弊社PCI-2726Cのピンアサインメントを一例として記載します。

495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596

1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748

-COM1-COM1

IN1IN2IN3IN4IN5IN6IN7IN8IN9IN10IN11IN12IN13IN14IN15IN16+COM1+COM1-FCOM

STB1IR.IN1ACK1

PULS.OUT1+FCOM-RCOM

RSTOUT/P.OUT-COM2-COM2

IN17IN18IN19IN20IN21IN22IN23IN24IN25IN26IN27IN28IN29IN30IN31IN32+COM2+COM2

-COM3-COM3

OUT1OUT2OUT3OUT4OUT5OUT6OUT7OUT8OUT9OUT10OUT11OUT12OUT13OUT14OUT15OUT16+COM3+COM3-FCOM

STB2PULS.OUT2

ACK2IR.IN2+FCOM+RCOMRSTIN-COM4-COM4OUT17OUT18OUT19OUT20OUT21OUT22OUT23OUT24OUT25OUT26OUT27OUT28OUT29OUT30OUT31OUT32+COM4+COM4

Page 19: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 17 - Interface Corporation

信号名 内 容

IN1~IN32 汎用の入力ピンです。16ビット単位でひとつのコモンに対応しています。また、IN1~IN4は割り込み信号として使用できます。

OUT1~OUT32 汎用の出力ピンです。16ビット単位でひとつのコモンに対応しています。STB1

IN1~IN32に接続された入力信号の状態を、ボード内のラッチ回路部に取り込むための外部タイミング信号です(アクティブLow)。 また、この信号はコンピュータへの割り込み信号として使用することができます。

IR.IN1 IR.IN2

汎用入力です。 この信号はコンピュータへの割り込み信号として使用することができます。

ACK1

STB1に対する応答信号です(アクティブLow)。ボード内のラッチ回路データの読み込み完了を外部回路に知らせるために使用できます。

PULS.OUT1 PULS.OUT2

汎用出力です。ソフトウェアにより、出力値の設定(LowまたはHighまたはLowパルス“ ”100μs±20μs)を行うことができます。外部回路に対しての割り込み要求信号などに使用することができます。

STB2 外部回路部に対してのタイミング信号です(アクティブLow)。OUT1~OUT32に対して出力データの書き込み完了を、外部回路に知らせるために使用できます。

ACK2 STB2に対する応答信号です(アクティブLow)。外部回路からの新データ書き込み要求として使用します。 また、この信号はコンピュータへの割り込み信号として使用することができます。

RSTOUT リセット信号の出力です。本ボードに対してかけられたリセット信号(PCI BUSリセット,パワーオンリセット,外部リセット)をOR論理にて出力しています。

P.OUT ボードの電源状態出力信号です。 RSTIN リセット信号入力です。このリセット信号を入力することにより、出力

ラッチ回路などをクリアすることができます。また、コンピュータへ割り込みを要求することができます。

COMの対応表 信 号 COM

IN1~IN16 -COM1,+COM1 IN17~IN32 -COM2,+COM2 OUT1~OUT16 -COM3,+COM3 OUT17~OUT32 -COM4,+COM4 IR.IN1,IR.IN2 STB1,ACK2 -FCOM,+FCOM

PULS.OUT1,PULS.OUT2 ACK1,STB2

-FCOM

RSTOUT/P.OUT -RCOM RSTIN +RCOM

他製品型式に関しましては、弊社Web siteをご参照ください。

Page 20: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 18 -

3.2 DLLプロシージャ呼び出しによるプログラミング(概要)

Visual BasicよりDLLプロシージャ呼び出しプログラミングを行うには、弊社、デジタル入出力用ソフトウェア(FBIDIO.DLL)をダイナミックリンクし使用します。DLLとはダイナミックリンクライブラリ(Dynamic Link Library)の略でアプリケーションの実行時に動的にリンクして利用できるプロシージャのライブラリです。プロシージャとは実行時に1つの単位として処理されるコードの集まりを意味します。 Visual BasicにてDLLプロシージャを利用するには、Declareステートメントを使ってプロシージャの位置を指定します。

外部プロシージャ宣言記述例

Declare Function DioOpen Lib "FbiDio.DLL" (ByVal lpszName As String, ByVal fdwAttrs As Long) As Long

Declare Function DioClose Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long) As Long Declare Function DioInputPoint Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pBuffer As Long, ByVal

dwStartNum As Long, ByVal dwNum As Long) As Long

Declare Function DioOutputPoint Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pBuffer As Long, ByVal dwStartNum As Long, ByVal dwNum As Long) As Long

Declare Function DioGetBackGroundUseTimer Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pnUse As

Long) As Long

プログラム記述例 lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE)

外部プロシージャ

Page 21: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 19 - Interface Corporation

3.3 デジタル入出力ボード制御概略

デジタル入出力ボードへの制御を行う場合、基本的に下記の制御シーケンス(順番)で行います。 (1) ボード初期化 プログラム起動 ↓ (2) 各種処理 ↓ (3) 終了処理 プログラム終了

1. ボードの初期化 Visual Basicで作成されたアプリケーションがデジタル入出力ボードへの操作を行う場合、まずアプリケーションは、デジタル入出力ボードを利用可能な状態にする必要があります。 この処理がボードの初期化です。ボードの初期化を行うと、プログラムはデジタル入出力ボー

ドへのアクセスが可能となります。本処理が行われないとデジタル入出力ボードへのアクセス

は行えません。

2. 各種処理 ボードの入力ポートまたは出力ポートより信号の入力または出力を行います。

3. 終了 ボードの使用終了を行うための手続きです。プログラム終了時には必ず必要です。

Page 22: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 20 -

第4章 チュートリアル ここでは、実際に弊社デジタル入出力ボードを用い、ボードへのデジタル信号入力およびボードからのデジタル信号出力を行います。 コンピュータにデジタル入出力ボード(PCI-2726C)が1枚実装され、信号確認用に、弊社「64点スイッチ64点LEDテストボ-ド(CHK-2101)」を使用しています。 PCI-2726CとCHK-2101は弊社「96芯ハ-フピッチコネクタ両端コネクタケ-ブル(CAB-66xx)」で接続されます。

PCI-2726C

CHK-2101

CAB-66xx

CHK-2101は入出力64点、制御信号10点の擬似入力スイッチと信号モニタ用LEDを装備していますので、信号ラインの状態を容易に確認することができるテストツールです。 CHK-2101は以下のよう設定します。

c DC+12V

Page 23: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 21 - Interface Corporation

4.1 デジタル入力

ここでは、CHK-2101に設定された情報(スイッチのON/OFF)をコンピュータに取り込むプログラムの作成を行います。PCI-2726C以外では、対応するテストボ-ドおよび接続用ケーブルの製品型式が異なる場合がありますのでご注意ください。 ここで記載するソースコードは、以下の製品型式において利用可能です。 デジタル入力 デジタル入出力 PCI-2104C PCI-2105A PCI-2128 PCI-2130C PCI-2130CL PCI-2130CM PCI-2131 PCI-2131A PCI-2131AL PCI-2131AM PCI-2131L PCI-2131M PCI-2135 PCI-2135L PCI-2135M PCI-2152C PCI-2154C PCI-2162 PCI-2230C PCI-2230CV

CTP-2104 CTP-2128 CTP-2130 CTP-2130L CTP-2130M CTP-2131 CTP-2131L CTP-2131M CTP-2135 CTP-2135L CTP-2135M CTP-2152 CTP-2154 CTP-2162 CTP-2230 CTP-2230V CPZ-2104 CPZ-2130 CPZ-2130L CPZ-2130M CPZ-2152 CPZ-2154 CPZ-2230 CPZ-2230V LPC-224140 PEX-224140

PCI-2702C PCI-2703 PCI-2703A PCI-2722 PCI-2723C PCI-2724C PCI-2724CL PCI-2724CM PCI-2725 PCI-2725A PCI-2725AL PCI-2725AM PCI-2725L PCI-2725M PCI-2726C PCI-2726CL PCI-2726CM PCI-2727 PCI-2727A PCI-2727AL PCI-2727AM PCI-2727L PCI-2727M PCI-2752C PCI-2753 PCI-2756A PCI-2756AL PCI-2756AM PCI-2758A PCI-2758AL PCI-2758AM PCI-2760C PCI-2762C PCI-2762CM PCI-2768C PCI-2790C

PCI-2793 PCI-2796C PCI-2798C PCI-2826C PCI-2826CV PCI-2994C PCI-2994CV PCI-287144 PCI-287244 PCI-292388 CSI-292366 CSI-293166 LPC-284122 LPC-285122 LPC-292366 LPC-293166 PEX-284122 PEX-285122 PEX-292366 PEX-293166

CTP-2702 CTP-2703 CTP-2722 CTP-2723 CTP-2724 CTP-2724L CTP-2724M CTP-2725 CTP-2725L CTP-2725M CTP-2726 CTP-2726L CTP-2726M CTP-2727 CTP-2727L CTP-2727M CTP-2752 CTP-2753 CTP-2760 CTP-2762 CTP-2762M CTP-2768 CTP-2769 CTP-2790 CTP-2798 CTP-2799 CTP-2826 CTP-2826V CTP-2827V CTP-2994 CTP-2994V CTP-2995V CTP-286122 CTP-287144 CTP-287244 CTP-292388 CTP-294188

CPZ-2702 CPZ-2703 CPZ-2723 CPZ-2724 CPZ-2724L CPZ-2724M CPZ-2726 CPZ-2726L CPZ-2726M CPZ-2727L CPZ-2752 CPZ-2760 CPZ-2762 CPZ-2762M CPZ-2768 CPZ-2769 CPZ-2790 CPZ-2798 CPZ-2799 CPZ-2826 CPZ-2826V CPZ-2827V CPZ-2994 CPZ-2994V CPZ-2995V CPZ-286122 CPZ-287144 CPZ-287244 CPZ-292388 CPZ-294188

注意!

テストボードのない型式もあります。詳細は弊社Web site(www.interface.co.jp)にて確認してく

ださい。

各製品型式においては、入力点数が異なりますので、ご使用になる製品型式により一部実

行できない処理が含まれます。

Page 24: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 22 -

弊社テストボ-ドをご用意できない場合は、各製品仕様に応じ、以下の配線を行ってください。

配線には弊社端子台(TRM-xxxx)等をご利用ください。 PCI-○○○○LやPCI-○○○○MやPCI-○○○○V等の最後に“L”や“M”や“V”がある型式は、“L”や“M”や“V”がない場合の型式と同じ配線を行ってください。また同様に“TK”や“TL”がある型式も“TK”や“TL”がない場合の型式と同じ配線を行ってください。 下表に示されていない型式の配線は、各型式のUSER’S MANUALを参照してください。

配線1 配線2 配線3 配線4 配線5 配線6

PCI-2130C PCI-2131 PCI-2131A PCI-2724C PCI-2725 PCI-2725A PCI-2726C PCI-2727 PCI-2727A PCI-2756A PCI-2758A PCI-2762C CTP-2130 CTP-2131 CTP-2724 CTP-2725 CTP-2726 CTP-2727 CTP-2762 CPZ-2130 CPZ-2724 CPZ-2726 CPZ-2762

LPC-285122 PEX-285122

PCI-2104C PCI-2105A PCI-2128 PCI-2152C PCI-2154C PCI-2162 PCI-2230C PCI-2702C PCI-2703 PCI-2703A PCI-2723C PCI-2752C PCI-2753 PCI-2760C PCI-2768C PCI-2790C PCI-2796C PCI-2798C PCI-2826C PCI-2994C PCI-292388 PCI-2793 PCI-2722 CTP-2104 CTP-2128 CTP-2152 CTP-2154 CTP-2162 CTP-2230 CTP-2702 CTP-2703 CTP-2722 CTP-2723 CTP-2752 CTP-2753 CTP-2760 CTP-2768 CTP-2769 CTP-2790 CTP-2798 CTP-2799 CTP-2826 CTP-2827 CTP-2994 CTP-2995 CTP-292388 CTP-294188

CPZ-2104 CPZ-2152 CPZ-2154 CPZ-2230 CPZ-2702 CPZ-2703 CPZ-2723 CPZ-2752 CPZ-2760 CPZ-2768 CPZ-2769 CPZ-2790 CPZ-2798 CPZ-2799 CPZ-2826 CPZ-2827 CPZ-2994 CPZ-2995 CPZ-292366 CPZ-294188 CSI-292388 CSI-293166 LPC-224140 LPC-284122 PEX-224140 PEX-284122

PCI-2135 CTP-2135 CTP-286122 CPZ-286122 LPC-251100 PEX-251100

PCI-287144 CTP-287144 CPZ-287144

PCI-287244 CTP-287244 CPZ-287244

Page 25: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 23 - Interface Corporation

外部電源

+極

-極

IN1IN2IN3

+COM*

+極-極

•••

•••

外部電源

配線 1 配線 2

IN1IN2IN3

-COM*

•••

•••

-COM*

デジタル入力配線1 デジタル入力配線2 使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。

12V 12V~24V 24V PCI-2130C PCI-2130CL PCI-2130CM PCI-2131 PCI-2731AL PCI-2131AM PCI-2131A PCI-2131L PCI-2131M PCI-2724C PCI-2724CL PCI-2724CM PCI-2725 PCI-2725AL PCI-2725AM PCI-2725A PCI-2725L PCI-2725M PCI-2726C PCI-2726CL PCI-2726CM PCI-2727 PCI-2727AL PCI-2727AM PCI-2727A PCI-2727L PCI-2727M PCI-2756A PCI-2756AL PCI-2756AM PCI-2758A PCI-2758AL PCI-2758AM PCI-2762C CTP-2130L PCI-2762CM CTP-2130 CTP-2131L CTP-2130M CTP-2131 CTP-2724L CTP-2131M CTP-2724 CTP-2725L CTP-2724M CTP-2725 CTP-2726L CTP-2725M CTP-2726 CTP-2727L CTP-2726M CTP-2727 CPZ-2130L CTP-2727M CTP-2762 CPZ-2724L CTP-2762M CPZ-2130 CPZ-2726L CPZ-2130M CPZ-2724 CPZ-2727L CPZ-2724M CPZ-2726 CPZ-2726M CPZ-2762 CPZ-2762M

Page 26: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 24 -

IN1 IN2 IN3

-COM*

• • •

+極 -極

-極

外部電源

IN1IN2IN3• • •

IN1IN2IN3• • •

+極

配線 3 配線 4

1点ごとに異なる外部電源を繋げることができます。

• • •

• • •

• • •

デジタル入力配線3 デジタル入力配線4 使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。

12V 12V~24V 24V PCI-2135 PCI-2135L PCI-2135M CTP-2135 CTP-2135L CTP-2135M CTP-286122 CPZ-286122 LPC-251100 PEX-251100

外部電源

+極

-極

配線 5

IN1IN2IN3

-COM*

•••

•••

COM*IN1IN2

配線 6

IN3•••

•••

デジタル入力配線5 デジタル入力配線6

Page 27: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 25 - Interface Corporation

Step1. 基本フォーム作成

ここでは、これから作成するプログラムの画面作成を行います。

1. Visual Basicを起動し新しい標準EXEプロジェクトを作成します。 新規作成タグより「標準EXE」を選択した後「開く」ボタンをクリックします。

標準 EXEを選択します。

2. プロジェクト名を“DioInput”に変更します。 画面上にプロジェクトが表示されているので、そのプロジェクトを選択し、プロパティウィン

ドウに値を設定します。オブジェクト名を「DioInput」に変更します。

オブジェクト名を変更します

プロジェクトを選択します

Page 28: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 26 -

3. 既定のフォームの名前を“frmDiTest”に変更し、フォームのタイトルを"デジタル入力"に変更します。 画面上にフォームが1つ表示されているので、そのフォームを選択し、プロパティウィンドウに値を設定します。(オブジェクト名)を“frmDioInput”にCaptionを“デジタル入力”にそれぞれ変更します。

フォームを選択します

オブジェクト名を変更します

Captionを変更します

Page 29: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 27 - Interface Corporation

4. プロジェクトに標準モジュールを追加します。

標準モジュールを選択します

追加を選択します

右クリックします

ここまでで、基本フォームの作成は完了です。

Page 30: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 28 -

Step2. DLLプロシージャ宣言

DLLプロシージャを利用するには、Declareステートメントを使ってプロシージャの位置を指定し、プロシージャの呼び出しに使う引数の識別を行わなければなりません。 DLLとはダイナミックリンクライブラリ(Dynamic Link Library)の略でアプリケーションの実行時に動的にリンクして利用できるプロシージャのライブラリです。そもそも、Windowsアプリケーションプログラミングでは直接I/Oやメモリにアクセスすことが禁止されています。言い換えれば、デジタル入出力ボードに対して直接的に信号を送ることができません。そこで、ボードに対して

直接的に信号を送るプログラム(DLL)から必要なプロシージャを呼び出し、このDLLを介してボードの制御を行います。 ここで一度宣言したDLLプロシージャは、Visual Basicのプロシージャと同じようにコードで呼び出すことが可能となります。

1. 標準モジュールに下記コードを追加します。

(標準モジュールのプロシージャ宣言のコード) ' FbiDio .BAS ' ' FbiDio.DLLからexportされている関数のプロトタイプ宣言、構造体宣言、識別子定義 ' ' Copyright (C) 1998-2000 Interface Corpration ' ----------------------------------------------------------------------- ' 識別子 ' ----------------------------------------------------------------------- Public Const FBIDIO_FLAG_SHARE = &H2 'デバイスの重複オープンを許可します Public Const FBIDIO_IN1_8 = 0 'IN1~IN8の8点分のデータを読み込みます Public Const FBIDIO_IN9_16 = 1 'IN9~IN16の8点分のデータを読み込みます Public Const FBIDIO_IN17_24 = 2 'IN17~IN24の8点分のデータを読み込みます Public Const FBIDIO_IN25_32 = 3 'IN25~IN32の8点分のデータを読み込みます Public Const FBIDIO_IN33_40 = 4 'IN33~IN40の8点分のデータを読み込みます Public Const FBIDIO_IN41_48 = 5 'IN41~IN48の8点分のデータを読み込みます Public Const FBIDIO_IN49_56 = 6 'IN49~IN56の8点分のデータを読み込みます Public Const FBIDIO_IN57_64 = 7 'IN57~IN64の8点分のデータを読み込みます Public Const FBIDIO_IN1_16 = 0 'IN1~IN16の16点分のデータを読み込みます Public Const FBIDIO_IN17_32 = 2 'IN17~IN32の16点分のデータを読み込みます Public Const FBIDIO_IN33_48 = 4 'IN33~IN48の16点分のデータを読み込みます Public Const FBIDIO_IN49_64 = 6 'IN49~IN64の16点分のデータを読み込みます Public Const FBIDIO_IN1_32 = 0 'IN1~IN32の16点分のデータを読み込みます Public Const FBIDIO_IN33_64 = 4 'IN33~IN64の16点分のデータを読み込みます Public Const FBIDIO_OUT1_8 = 0 'OUT1~OUT8の8点分のデータを出力します Public Const FBIDIO_OUT9_16 = 1 'OUT9~OUT16の8点分のデータを出力します Public Const FBIDIO_OUT17_24 = 2 'OUT17~OUT24の8点分のデータを出力します

Page 31: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 29 - Interface Corporation

Public Const FBIDIO_OUT25_32 = 3 'OUT25~OUT32の8点分のデータを出力します Public Const FBIDIO_OUT33_40 = 4 'OUT33~OUT40の8点分のデータを出力します Public Const FBIDIO_OUT41_48 = 5 'OUT41~OUT48の8点分のデータを出力します Public Const FBIDIO_OUT49_56 = 6 'OUT49~OUT56の8点分のデータを出力します Public Const FBIDIO_OUT57_64 = 7 'OUT57~OUT64の8点分のデータを出力します Public Const FBIDIO_OUT1_16 = 0 'OUT1~OUT16の16点分のデータを出力します Public Const FBIDIO_OUT17_32 = 2 'OUT17~OUT32の16点分のデータを出力します Public Const FBIDIO_OUT33_48 = 4 'OUT33~OUT48の16点分のデータを出力します Public Const FBIDIO_OUT49_64 = 6 'OUT49~OUT64の16点分のデータを出力します Public Const FBIDIO_OUT1_32 = 0 'OUT1~OUT32の32点分のデータを出力します Public Const FBIDIO_OUT33_64 = 4 'OUT33~OUT64の32点分のデータを出力します Public Const FBIDIO_STB1_ENABLE = &H1 'STB1イベント有功 Public Const FBIDIO_STB1_HIGH_EDGE = &H10 'STB1立ち上がりエッジ Public Const FBIDIO_ACK2_ENABLE = &H4 'ACK2イベント有功 Public Const FBIDIO_ACK2_HIGH_EDGE = &H40 'ACK2立ち上がりエッジ ' ----------------------------------------------------------------------- ' 戻り値 ' ----------------------------------------------------------------------- Public Const FBIDIO_ERROR_SUCCESS = 0 '正常終了 Public Const FBIDIO_ERROR_NOT_DEVICE = &HC0000001 '指定されたデバイスを見つけることができません Public Const FBIDIO_ERROR_NOT_OPEN = &HC0000002 'システムがデバイスを見つけることができません Public Const FBIDIO_ERROR_INVALID_HANDLE = &HC0000003 'デバイスハンドルが正しくありません Public Const FBIDIO_ERROR_ALREADY_OPEN = &HC0000004 'すでにデバイスはOPENされています Public Const FBIDIO_ERROR_HANDLE_EOF = &HC0000005 'EOFに達しました Public Const FBIDIO_ERROR_MORE_DATA = &HC0000006 'さらに多くのデータが利用可能です Public Const FBIDIO_ERROR_INSUFFICIENT_BUFFER = &HC0000007 'データ領域が小さすぎます Public Const FBIDIO_ERROR_IO_PENDING = &HC0000008 '非同期I/O操作が進行中です Public Const FBIDIO_ERROR_NOT_SUPPORTED = &HC0000009 'サポートされていない機能です Public Const FBIDIO_ERROR_MEMORY_NOTALLOCATED = &HC0001000 '作業用メモリの確保に失敗しました Public Const FBIDIO_ERROR_PARAMETER = &HC0001001 '引数パラメータの値が不正です Public Const FBIDIO_ERROR_INVALID_CALL = &HC0001002 '不正なファンクション呼び出しです Public Const FBIDIO_ERROR_DRVCAL = &HC0001003 'ドライバが呼び出せません Public Const FBIDIO_ERROR_NULL_POINTER = &HC0001004 'ドライバ、DLL間でNULLポインタが渡されました ' ----------------------------------------------------------------------- ' DLL ' ----------------------------------------------------------------------- Declare Function DioOpen Lib "FbiDio.DLL" (ByVal lpszName As String, ByVal fdwAttrs As Long) As Long Declare Function DioClose Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long) As Long Declare Function DioInputPoint Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pBuffer As Long, ByVal dwStartNum As Long, ByVal dwNum As Long) As Long Declare Function DioOutputPoint Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pBuffer As Long, ByVal dwStartNum As Long, ByVal dwNum As Long) As Long Declare Function DioGetBackGroundUseTimer Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pnUse As Long) As Long Declare Function DioSetBackGroundUseTimer Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nUse As Long) As Long Declare Function DioSetBackGround Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal dwStartPoint As Long, ByVal dwPointNum As Long, ByVal dwValueNum As Long, ByVal dwCycle As Long, ByVal dwCount As Long, ByVal dwOption As Long) As Long Declare Function DioFreeBackGround Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal hBackGroundHandle As Long) As Long Declare Function DioStopBackGround Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal hBackGroundHandle As Long) As Long Declare Function DioGetBackGroundStatus Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal hBackGroundHandle As Long, ByRef pnStartPoint As Long, ByRef pnPointNum As Long, ByRef pnValueNum As Long, ByRef pnCycle As Long, ByRef pnCount As Long, ByRef pnOption As Long, ByRef pnExecute As Long, ByRef pnExecCount As Long, ByRef pnBufferOffset As Long, ByRef pnOver As Long) As Long Declare Function DioInputPointBack Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal hBackGroundHandle As Long, ByRef pBuffer As Long, ByVal nNumberOfBytesToRead As Long, ByRef pOverlapped As OVERLAPPED) As Long Declare Function DioOutputPointBack Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal hBackGroundHandle As Long, ByRef pBuffer As Long, ByVal nNumberOfBytesToWrite As Long, ByRef lpOverlapped As OVERLAPPED) As Long Declare Function DioWatchPointBack Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal hBackGroundHandle As Long, ByRef pBuffer As Long, ByVal nNumberOfBytesToRead As Long, ByRef lpOverlapped As OVERLAPPED) As Long Declare Function DioGetInputHandShakeConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pnInputHandShakeContig As Long, ByRef pdwBitMask1 As Long, ByRef pdwBitMask2 As Long) As Long

Page 32: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 30 -

Declare Function DioSetInputHandShakeConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nInputHandShakeContig As Long, ByVal dwBitMask1 As Long, ByVal dwBitMask2 As Long) As Long Declare Function DioGetOutputHandShakeConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pnOutputHandShakeContig As Long, ByRef pdwBitMask1 As Long, ByRef pdwBitMask2 As Long) As Long Declare Function DioSetOutputHandShakeConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nOutputHandShakeConfig As Long, ByVal dwBitMask1 As Long, ByVal dwBitMask2 As Long) As Long Declare Function DioInputHandShake Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpNumOfBytesRead As Long, ByRef lpOverlapped As OVERLAPPED) As Long Declare Function DioInputHandShakeEx Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpOverlapped As OVERLAPPED, ByVal lpCompletionRoutine As Long) As Long Declare Function DioOutputHandShake Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, ByRef lpNumOfBytesWritten As Long, ByRef lpOverlapped As OVERLAPPED) As Long Declare Function DioOutputHandShakeEx Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, ByRef lpOverlapped As OVERLAPPED, ByVal lpCompletionRoutine As Long) As Long Declare Function DioStopInputHandShake Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long) As Long Declare Function DioStopOutputHandShake Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long) As Long Declare Function DioGetHandShakeStatus Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwpDeviceStatus As Long, ByRef pdwpInputedBuffNum As Long, ByRef pdwpOutputedBuffNum As Long) As Long Declare Function DioGetOverlappedResult Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long, ByRef lpOverlapped As OVERLAPPED, ByRef lpNumberOfBytes As Long, ByVal bWait As Boolean) As Long Declare Function DioInputByte Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByRef pbValue As Byte) As Long Declare Function DioInputWord Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByRef pwValue As Integer) As Long Declare Function DioInputDword Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByRef pdwValue As Long) As Long Declare Function DioOutputByte Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByVal bValue As Byte) As Long Declare Function DioOutputWord Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByVal wValue As Integer) As Long Declare Function DioOutputDword Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByVal dwValue As Long) As Long Declare Function DioGetAckStatus Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pbAckStatus As Byte) As Long Declare Function DioSetAckPulseCommand Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal bCommand As Byte) As Long Declare Function DioGetStbStatus Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pbStbStatus As Byte) As Long Declare Function DioSetStbPulseCommand Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal bCommand As Byte) As Long Declare Function DioInputUniversalPoint Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwUniversalPoint As Long) As Long Declare Function DioOutputUniversalPoint Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal dwUniversalPoint As Long) As Long Declare Function DioSetTimeOut Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal dwInputTotalTimeout As Long, ByVal dwInputIntervalTimeout As Long, ByVal dwOutputTotalTimeout As Long, ByVal dwOutputIntervalTimeout As Long) As Long Declare Function DioGetTimeOut Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwpInputTotalTimeout As Long, ByRef pdwpInputIntervalTimeout As Long, ByRef pdwpOutputTotalTimeout As Long, ByRef pdwpOutputIntervalTimeout As Long) As Long Declare Function DioSetIrqMask Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal bIrqMask As Byte) As Long Declare Function DioGetIrqMask Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pbIrqMask As Byte) As Long Declare Function DioSetIrqConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal bIrqConfig As Byte) As Long Declare Function DioGetIrqConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pbIrqConfig As Byte) As Long Declare Function DioGetDeviceConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwDeviceConfig As Long) As Long Declare Function DioSetTimerConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal bTimerConfigValue As Byte) As Long Declare Function DioGetTimerConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pbTimerConfigValue As Byte) As Long Declare Function DioGetTimerCount Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pbTimerCount As Byte) As Long Declare Function DioSetLatchStatus Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal bLatchStatus As Byte) As Long Declare Function DioGetLatchStatus Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pbLatchStatus As Byte) As Long Declare Function DioGetResetInStatus Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pbResetInStatus As Byte) As Long Declare Function DioEventRequestPending Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal dwEventEnableMask As Long, ByRef pEventBuf As Long, ByRef lpOverlapped As OVERLAPPED) As Long Declare Function DioCommonGetPciDeviceInfo Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwDeviceID As Long, ByRef pdwVenderID As Long, ByRef pdwClassCode As Long, ByRef pdwRevisionID As Long, ByRef pdwBaseAddress0 As Long, ByRef pdwBaseAddress1 As Long, ByRef pdwBaseAddress2 As Long, ByRef pdwBaseAddress3 As Long, ByRef pdwBaseAddress4 As Long, ByRef pdwBaseAddress5 As Long, ByRef pdwSubsystemID As Long, ByRef pdwSubsystemVenderID As Long, ByRef pdwInterruptLine As Long, ByRef pdwBoardID As Long) As Long Declare Function DioEintSetIrqMask Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal dwSetIrqMask As Long) As Long Declare Function DioEintGetIrqMask Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwGetIrqMask As Long) As Long Declare Function DioEintSetEdgeConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal dwSetFallEdgeConfig As Long, ByVal dwSetRiseEdgeConfig As Long) As Long Declare Function DioEintGetEdgeConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwGetFallEdgeConfig As Long, ByRef pdwGetRiseEdgeConfig As Long) As Long Declare Function DioEintInputPoint Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pBuffer As Long, ByVal dwStartNum As Long, ByVal dwNum As Long) As Long Declare Function DioEintInputByte Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByRef pbFallValue As Byte, ByRef pbRiseValue As Byte) As Long

Page 33: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 31 - Interface Corporation

Declare Function DioEintInputWord Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByRef pwFallValue As Integer, ByRef pwRiseValue As Integer) As Long Declare Function DioEintInputDword Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByRef pdwFallValue As Long, ByRef pdwRiseValue As Long) As Long Declare Function DioEintSetFilterConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByVal nSetFilterConfig As Long) As Long Declare Function DioEintGetFilterConfig Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByRef pnGetFilterConfig As Long) As Long Declare Function DioEventRequestPendingEx Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwEventEnableMask As Long, ByRef pEventBuf As Long, ByRef lpOverlapped As OVERLAPPED) As Long Declare Function DioGetDeviceConfigEx Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long, ByRef pdwDeviceConfig As Long, ByRef pdwDeviceConfigEx As Long) As Long ' ----------------------------------------------------------------------- ' WIN32APIより ' ----------------------------------------------------------------------- Type OVERLAPPED Internal As Long InternalHigh As Long offset As Long OffsetHigh As Long hEvent As Long End Type Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long 'Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (lpEventAttributes As SECURITY_ATTRIBUTES, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long 'Windows 98/95ではSECURITY_ATTRIBUTESを指定するとエラーとなります 'lpEventAttributesにNULLを指定するため、下記のようにAPIビューワで宣言されている '定義と違う宣言を行います。 Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (ByVal lpEventAttributes As Long, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As Long) As Long Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Declare Function ResetEvent Lib "kernel32" (ByVal hEvent As Long) As Long

本コードは、製品に添付されるサンプルプログラムに、同じものが記載されております。

Page 34: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 32 -

Step3. 初期化処理と終了処理

ボードよりデジタル入力を行う場合、まずボードの初期化を行わなければなりません。ボードの

初期化は以下のコードにより行います。

(ボードの初期化) Dim lpszName As String Dim hDeviceHandle as Long 'ボード初期化を行います lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) このとき、文字列変数lpszNameに設定する値は、使用するボードのデバイス名を指定します。デバイス名は、「システムのプロパティ」の「デバイスマネージャ」より確認できます。

ここに、デバイス名が表示されます

ボードの初期化はDioOpen関数により行います。また、設定するパラメータにFBIDIO_FLAG_SHAREとありますが、これは、同じデバイス名のボードを2つ以上のアプリケーションで共有するか否かを設定しています。本サンプルコードでは「共有する」となっています。

Page 35: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 33 - Interface Corporation

Dim hDeviceHandle As Long

hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE)

デバイスハンドルを格納する長整数(Long)型の変数を指定します。

共有する場合&h2 を指定します。共有しない場合はそれ以外の値を指定します。

使用するボードのデバイス名を指定します。

「使用例」

また、アプリケーションの終了時、もしくは処理の終了時には、ボードに対して終了処理を行わ

なければなりません。 ボードの終了処理は以下のコードにより行います。

(ボードの終了処理)

‘終了処理 Dim nRet As Long nRet = DioClose(hDeviceHandle)

ボードの終了処理はDioClose関数より行います。ここで、注意しなければならないのは、設定する引数のhDeviceHandleです。hDeviceHandleにはボードの初期化の際のDioOpen関数の戻り値を指定します。DioOpen実行時、その戻り値であるhDeviceHandleには有効なハンドル(番号)が格納されています。 ハンドルとは使用するデバイスの接続に関する情報が格納されたメモリ領域を、識別するための

値を示します。 プログラム作成時、このhDeviceHandleの値が、終了処理を行うデバイスの、DioOpen実行時に取得された値となるように、DioOpenとDioCloseは必ず組になるよう注意してください。

「使用例」

nRet = DioClose(hDeviceHandle)

関数が正常に終了しなかった場合はエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

DioOpen

DioClose

ハンドル

Page 36: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 34 -

Step4. 単点入力/バイト入力/ワード入力/ダブルワード入力

ここでは、ボードの入力接点(IN)より状態(ON/OFF)の取得を行うプログラムを作成します。

1. フォーム上にコマンドボタン(CommandButton)コントロールを描画します。

CommandButton

描画したコマンドボタン

2. オブジェクト名を“cmdInputSingle”と名付けコマンドボタンコントロールのタイトル(Caption)を "単点入力" に変更します。

オブジェクト名を変更します

Captionを変更します

Page 37: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 35 - Interface Corporation

3. 作成したコマンドボタン(cmdInputSingle)をダブルクリックし編集ウィンドウを開き以下のコードを記述します。

(コマンドボタン(cmdInputSingle)の Clickイベントのコード)

Private Sub cmdInputSingle_Click() Dim lpszName As String 'デバイス名 Dim nRet As Long '関数の実行結果 Dim pnBuffer(4) As Long 'データを受け取るバッファ Dim I 'ボード初期化を行います lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = -1 Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If 'データ入力(IN1~IN4までの状態を pnBuffer()に取得します) nRet = DioInputPoint(hDeviceHandle, pnBuffer(0), 1, 4) ‘取得した結果を表示します。 If nRet <> 0 Then MsgBox ("データの入力に失敗しました") nRet = DioClose(hDeviceHandle) Exit Sub Else For I = 0 To 3 Debug.Print "入力データ(" & I & ")= " & pnBuffer(I) Next End If '終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub 上記コードでは、入力接点番号1(IN1)から入力接点番号4(IN4)までの状態を、1接点ずつ順に読み込み配列変数pnBufferに格納します。指定する入力接点番号から所定の任意の点数(範囲)の状態を取得するにはDioInputPoint関数を使用します。

「使用例」

Dim pnBuffer(4) As Long

 nRet = DioInputPoint(hDeviceHandle, pnBuffer(0), 1, 4)

ボードのオープン時に取得したデバイスハンドルを指定します。

入力値を格納する配列変数を指定します。

関数が失敗するとエラーコードが格納されます。

入力開始点番号より取得する件数を指定します。

入力開始点番号を指定します。

では、プログラムを実行し「単点入力」ボタンをクリックしてください。イミディエイトウィン

ドウに以下が表示されます。 入力データ(0)= 1 入力データ(1)= 0 入力データ(2)= 1 入力データ(3)= 0

Page 38: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 36 -

ここで得られる値は、それぞれの入力接点の状態がONであるかOFFであるかを示しています。

表 示 意 味 入力データ(0)= 1 IN1の接点状態はON 入力データ(1)= 0 IN2の接点状態はOFF 入力データ(2)= 1 IN3の接点状態はON 入力データ(3)= 0 IN4の接点状態はOFF

IN1

IN2

IN3

IN4

IN1=1

IN2=0

IN3=1

IN4=0

デジタル入力ボード

ON

ON

先にポートの入力接点を1点ごとに読み取る方法を記載しました。次は、一度に複数の入力接点からデータの読み込みを行うプログラムを作成します。複数の入力接点からの状態取得には、バイ

ト入力(8点),ワード入力(16点),ダブルワード入力(32点)があります。 ここでは、バイト入力を行います。

1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdInputByte と名付コマンドボタンコントロールのタイトルを "バイト入力" に変更します。

2. 作成したコマンドボタン(CommandButton)をダブルクリックし編集ウィンドウを開き次ページのコードを記述します。

Page 39: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 37 - Interface Corporation

(コマンドボタン(cmdInputByte)の Clickイベントのコード)

Private Sub cmdInputByte_Click() Dim lpszName As String 'デバイス名 Dim nRet As Long '関数の実行結果 Dim pbValue As Byte 'データを受け取るバッファ 'ボード初期化を行います lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = &HFFFF Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If 'データ入力(IN1~IN8までの状態を pbValueに取得します) nRet = DioInputByte(hDeviceHandle, FBIDIO_IN1_8, pbValue) ‘取得した結果を表示します。 If nRet <> 0 Then MsgBox ("データの入力に失敗しました") nRet = DioClose(hDeviceHandle) Exit Sub Else Debug.Print "入力データ(byte)= &h" & Hex(pbValue) End If '終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub 上記コードでは、入力接点番号1(IN1)から入力接点番号8(IN8)までを、一度に読み込みバイト型変数pbValueに格納されます。バイト単位(8 bit)で状態を取得するにはDioInputByte関数を使用します。

Dim pbValue As BytenRet = DioInputByte(hDeviceHandle, FBIDIO_IN1_8, pbValue)

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

状態を取得する接点を示す定数を指定します。

入力値を格納する配列変数をバイト型で指定します。

「使用例」

一度に取得できる状態は、以下のとおりです。どの接点の状態を取得するかは、同関数の第2引数に指定します。

接 点 定 数 値 IN1~IN8 FBIDIO_IN1_8 0 IN9~IN16 FBIDIO_IN9_16 1 IN17~IN24 FBIDIO_IN17_24 2 IN25~IN32 FBIDIO_IN25_32 3 IN33~IN40 FBIDIO_IN33_40 4 IN41~IN48 FBIDIO_IN41_48 5 IN49~IN56 FBIDIO_IN49_56 6 IN57~IN64 FBIDIO_IN57_64 7

では、プログラムを実行し「バイト入力」ボタンをクリックしてください。イミディエイトウィ

ンドウに以下が表示されます。 入力データ(Byte)= &h55

Page 40: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 38 -

つまり、接点番号1(IN1)から接点番号8(IN8)の状態が以下のようにあることを知ることができます。 IN8 IN7 IN6 IN5 IN4 IN3 IN2 IN1

0 1 0 1 0 1 0 1

(IN8) (IN1) 01010101(BIN) = &h55(HEX)

次にワード入力(16点)を行います。

1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdInputWordと名付けコマンド ボタン コントロールのタイトルを "ワード入力" に変更します。

2. 作成したコマンドボタン(cmdInputWord)をダブルクリックし編集ウィンドウを開き以下のコードを記述します。

(コマンドボタン(cmdInputWord)の Clickイベントのコード)

Private Sub cmdInputWord_Click() Dim lpszName As String 'デバイス名 Dim nRet As Long '関数の実行結果 Dim pwValue As Integer 'データを受け取るバッファ 'ボード初期化を行います lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = -1 Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If 'データ入力(IN1~IN16までの状態を pwValueに取得します) nRet = DioInputWord(hDeviceHandle, FBIDIO_IN1_16, pwValue) ‘取得した結果を表示します。 If nRet <> 0 Then MsgBox ("データの入力に失敗しました") nRet = DioClose(hDeviceHandle) Exit Sub Else Debug.Print "入力データ(Word)= &h" & Hex(pwValue) End If '終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub ワード単位(16 bit)で状態を取得するには DioInputWord関数を使用します。

※本コードは、入力点数が15以下の

ボードでは使用できません

Page 41: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 39 - Interface Corporation

Dim pwValue As Integer

nRet = DioInputWord(hDeviceHandle, FBIDIO_IN1_16, pwValue)関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

状態を取得する接点を示す定数を指定します。

入力値を格納する配列変数をバイト型で指定します。

「使用例」

一度に取得できる状態は、以下のとおりです。どの接点の状態を取得するかは、同関数の第2引数に指定します。

接点 定数 値 IN1~IN16 FBIDIO_IN1_16 0 IN17~IN32 FBIDIO_IN17_32 2 IN33~IN48 FBIDIO_IN33_48 4 IN49~IN64 FBIDIO_IN49_64 6

では、プログラムを実行し「ワード入力」ボタンをクリックしてください。イミディエイトウィ

ンドウに以下が表示されます。 入力データ(Word)= &h5555

つまり、接点番号1(IN1)から接点番号16(IN16)の状態が以下のようにあることを知ることができます。

IN16 IN15 IN14 IN13 IN12 IN11 IN10 IN9

0 1 0 1 0 1 0 1 IN8 IN7 IN6 IN5 IN4 IN3 IN2 IN1

0 1 0 1 0 1 0 1

(IN16) (IN1) 0101010101010101(BIN) = &h5555(HEX)

次にダブルワード入力(32点)を行います。 1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdInputDWordと名付けコマンドボタンコントロールのタイトルを"Dワード入力"に変更します。

2. 作成したコマンドボタン(cmdInputDWord)をダブルクリックし編集ウィンドウを開き次ページのコードを記述します。

Page 42: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 40 -

(コマンドボタン(cmdInputDWord)の Clickイベントのコード)

Private Sub cmdInputDWord_Click() Dim lpszName As String 'デバイス名 Dim nRet As Long '関数の実行結果 Dim pdwValue As Long 'データを受け取るバッファ 'ボード初期化を行います lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = -1 Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If ‘データ入力(IN1~IN32までの状態を pdwValueに取得します) nRet = DioInputDword(hDeviceHandle, FBIDIO_IN1_32, pdwValue) If nRet <> 0 Then MsgBox ("データの入力に失敗しました") nRet = DioClose(hDeviceHandle) Exit Sub Else Debug.Print "入力データ(DWord)= &h" & Hex(pdwValue) End If ‘終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub

ダブルワード単位(32 bit)で状態を取得するにはDioInputDword関数を使用します。

Dim pdwValue As Long

nRet = DioInputDword(hDeviceHandle, FBIDIO_IN1_32, pdwValue)関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

状態を取得する接点を示す定数を指定します。

入力値を格納する配列変数をバイト型で指定します。

「使用例」

一度に取得できる状態は、以下のとおりです。どの接点の状態を取得するかは、同関数の第2引数に指定します。

接 点 定 数 値 IN1~IN32 FBIDIO_IN1_32 0 IN33~IN64 FBIDIO_IN33_64 4

では、プログラムを実行し「Dワード入力」ボタンをクリックしてください。 イミディエイトウィンドウに以下が表示されます。 入力データ(DWord)= &h55555555

※本コードは、入力点数が31以下の

ボードでは使用できません

Page 43: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 41 - Interface Corporation

つまり、接点番号1(IN1)から接点番号32(IN32)の状態が以下のようにあることを知ることができます。

IN32 IN31 IN30 IN29 IN28 IN27 IN26 IN25

0 1 0 1 0 1 0 1 IN24 IN23 IN22 IN21 IN20 IN19 IN18 IN17

0 1 0 1 0 1 0 1 IN16 IN15 IN14 IN13 IN12 IN11 IN10 IN9

0 1 0 1 0 1 0 1 IN8 IN7 IN6 IN5 IN4 IN3 IN2 IN1

0 1 0 1 0 1 0 1

(IN32) (IN1) 01010101010101010101010101010101 (BIN) = &h55555555(HEX)

ここまでが、簡単なデジタル入力のプログラム例です。接点の状態を単点で取得するかバイト単

位で取得するか等は、取得する情報の特性により、それぞれ使い分けることがポイントです。セ

ントロニクス仕様のインタフェースよりデータラインの状態をモニタしたい場合はバイト入力を

行う等です。(セントロニクス仕様のデータラインは8本)

Page 44: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 42 -

4.2 デジタル出力 ここでは、デジタル入出力ボード(PCI-2726C)より、デジタル信号を出力しCHK-2101のLEDを発光させるプログラムの作成を行います。PCI-2726C以外では、対応するテストボ-ドおよび接続用ケーブルの製品型式が異なる場合がありますのでご注意ください。 ここで記載するソースコードは、以下の製品型式において利用可能です。 デジタル出力 デジタル入出力 PCI-2330CV PCI-2402C PCI-2403A PCI-2424 PCI-2426C PCI-2427 PCI-2427A PCI-2430C PCI-2431 PCI-2431A PCI-2464C PCI-2466C PCI-2470 PCI-2503 PCI-2512C PCI-2513

CTP-2330V CTP-2402 CTP-2424 CTP-2430 CTP-2431 CTP-2464 CTP-2466 CTP-2505 CTP-2506 CTP-2515 CTP-2516 CTP-2517 CPZ-2330V CPZ-2402 CPZ-2424 CPZ-2430 CPZ-2431 CPZ-2464 CPZ-2466 CPZ-2505 CPZ-2506 CPZ-2515 CPZ-2516 CPZ-2517 LPC-234104 PEX-234104

PCI-2702C PCI-2703 PCI-2703A PCI-2722 PCI-2723C PCI-2724C PCI-2724CL PCI-2724CM PCI-2725 PCI-2725A PCI-2725AL PCI-2725AM PCI-2725L PCI-2725M PCI-2726C PCI-2726CL PCI-2726CM PCI-2727 PCI-2727A PCI-2727AL PCI-2727AM PCI-2727L PCI-2727M PCI-2752C PCI-2753 PCI-2756A PCI-2756AL PCI-2756AM PCI-2758A

PCI-2758AL PCI-2758AM PCI-2760C PCI-2762C PCI-2762CM PCI-2768C PCI-2790C PCI-2793 PCI-2796C PCI-2798C PCI-2826C PCI-2826CV PCI-2994C PCI-2994CV PCI-287144 PCI-287244 PCI-292388

CTP-2702 CTP-2703 CTP-2722 CTP-2723 CTP-2724 CTP-2724L CTP-2724M CTP-2725 CTP-2725L CTP-2725M CTP-2726 CTP-2726L CTP-2726M CTP-2727 CTP-2727L CTP-2727M CTP-2752 CTP-2753 CTP-2760 CTP-2762 CTP-2762M CTP-2768 CTP-2769 CTP-2790 CTP-2798 CTP-2799 CTP-2826 CTP-2826V CTP-2827V CTP-2994 CTP-2994V CTP-2995V CTP-286122 CTP-287144 CTP-287244 CTP-292388 CTP-294188

CPZ-2702 CPZ-2703 CPZ-2723 CPZ-2724 CPZ-2724L CPZ-2724M CPZ-2726 CPZ-2726L CPZ-2726M CPZ-2727L CPZ-2752 CPZ-2760 CPZ-2762 CPZ-2762M CPZ-2768 CPZ-2769 CPZ-2790 CPZ-2798 CPZ-2799 CPZ-2826 CPZ-2826V CPZ-2827V CPZ-2994 CPZ-2994V CPZ-2995V CPZ-286122 CPZ-287144 CPZ-287244 CPZ-292388 CPZ-294188

CSI-292366 CSI-293166 LPC-284122 LPC-285122 LPC-292366 LPC-293166 PEX-284122 PEX-285122 PEX-292366 PEX-293166

注意!

テストボードのない型式もあります。詳細は弊社Web site(www.interface.co.jp)にて確認してく

ださい。

製品型式によって、出力点数が異なりますので、ご使用になる製品型式により一部実行でき

ない処理が含まれます。

Page 45: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 43 - Interface Corporation

弊社テストボ-ドがご用意できない場合は、各製品仕様に応じ、以下の配線を行ってください。各配線には弊社、端子台などをご利用ください。 PCI-○○○○LやPCI-○○○○MやPCI-○○○○Vなどの最後に“L”や“M”や“V”がある型式は、“L”や“M”や“V”がない場合の型式と同じ配線を行ってください。また同様に“TK”や“TL”がある型式も“TK”や“TL”がない場合の型式と同じ配線を行ってください。

配線1 配線2 配線3 配線4 配線5 PCI-2330CV PCI-2402C PCI-2403A PCI-2424 PCI-2426C PCI-2427 PCI-2427A PCI-2464C PCI-2466C PCI-2702C PCI-2703 PCI-2703A PCI-2722 PCI-2723C PCI-2724C PCI-2725 PCI-2725A PCI-2752C PCI-2753 PCI-2760C PCI-2768C PCI-2790C PCI-2793 PCI-2796C PCI-2798C PCI-2826C PCI-292388 PCI-2994C CTP-2330V CTP-2402 CTP-2424 CTP-2464 CTP-2466 CTP-2702 CTP-2703 CTP-2722 CTP-2723 CTP-2724 CTP-2727 CTP-2752 CTP-2753 CTP-2760 CTP-2768 CTP-2769 CTP-2790

CTP-2798 CTP-2799 CTP-2826 CTP-2827 CTP-292388 CTP-294188 CTP-2994 CTP-2995 CTP-2330V CTP-2402 CTP-2464 CTP-2466 CTP-2702 CTP-2703 CTP-2723 CTP-2724 CPZ-2727L CPZ-2752 CPZ-2760 CPZ-2768 CPZ-2769 CPZ-2790 CPZ-2798 CPZ-2799 CPZ-2826 CPZ-2827V CPZ-292388 CPZ-294188 CPZ-2994 CPZ-2995V CSI-292366 CSI-293166 PEX-234104 PEX-284122 PEX-292366 PEX-293166 LPC-234104 LPC-284122 LPC-292366 LPC-293166

PCI-2430C PCI-2431 PCI-2431A PCI-2726C PCI-2727 PCI-2727A PCI-2756A PCI-2758A(トランジスタ出力部)PCI-2762C CTP-2430 CTP-2431 CTP-2725 CTP-2726 CTP-2762 CPZ-2430 CPZ-2726 CPZ-2762 LPC-285122 PEX-285122

PCI-2470 PCI-287144PCI-287244CTP-287144CTP-278244CPZ-287144CPZ-287244

PCI-2503 CTP-2505 CPZ-2505

PCI-2512C PCI-2513 PCI-2758A(リレー出力部)CTP-2506 CTP-2515 CTP-2516 CTP-2517 CPZ-2506 CPZ-2515 CPZ-2516 CPZ-2517 CPZ-286122 PEX-251100 PEX-251101 LPC-251100 LPC-251101

Page 46: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 44 -

配線1

OUT1 OUT2 OUT3

発光ダイオード

抵抗

+極

-極

-COM*

• • • •

デジタル出力配線1

抵抗は、デジタル出力ボードの出力仕様と、発光させるLEDの許容範囲を考慮し適切なものを使用してください。(PCI-2427A/2403Aの場合、-COM3, -COM4も電源の-極に接続してください) 使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。

DC+5V DC+5V~DC+48V DC+5V~DC+24V DC+12V~DC+24V DC+12V~DC+48V PCI-2402C PCI-2403A PCI-2702C PCI-2703 PCI-2703A PCI-2752C PCI-2753 PCI-2793 PCI-2796C PCI-292388 CTP-2402 CTP-2702 CTP-2703 CTP-2752 CTP-2753 CTP-292388 CPZ-2402 CPZ-2702 CPZ-2703 CPZ-2752 CPZ-292388 CSI-292366 PEX-292366 LPC-292366

PCI-2330CV PCI-2760C PCI-2768C PCI-2790C PCI-2798C PCI-2826C PCI-2826CV PCI-2994CV CTP-2330V CTP-2760 CTP-2768 CTP-2769 CTP-2790 CTP-2798 CTP-2799 CTP-2826 CTP-2826V CTP-2827V CTP-2994V CTP-2995V CTP-294188 CPZ-2330V CPZ-2464 CPZ-2466 CPZ-2760 CPZ-2768 CPZ-2769 CPZ-2790 CPZ-2798 CPZ-2799 CPZ-2826 CPZ-2826V CPZ-2827V CPZ-294188 CPZ-2994 CPZ-2994V CPZ-2995V

PCI-2426C PCI-2427 PCI-2427A PCI-2723C PCI-2724C PCI-2725 PCI-2725A PCI-2724CL PCI-2724CM PCI-2725L PCI-2725M PCI-2725AL PCI-2725AM CTP-2724 CTP-2724L CTP-2724M CTP-2727 CTP-2727L CTP-2727M CPZ-2723 CPZ-2724 CPZ-2724L CPZ-2724M CPZ-2727L CSI-293166 PEX-234104 PEX-284122 PEX-293166 LPC-234104 LPC-284122 LPC-293166

PCI-2424 PCI-2722 CTP-2424 CTP-2722 CTP-2723

PCI-2464C PCI-2466C PCI-2994C CTP-2464 CTP-2466 CTP-2994

Page 47: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 45 - Interface Corporation

配線2

OUT1 OUT2 OUT3

発光ダイオード

抵抗

+極

-極

-COM*

• • • •

+COM*

デジタル出力配線2

抵抗は、デジタル出力ボードの出力仕様と、発光させるLEDの許容範囲を考慮し適切なものを使用してください。 使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。

DC+5V~DC+24V DC+12V~DC+24V CTP-2431 PCI-2430C CTP-2725 PCI-2431 CTP-2725L PCI-2431A CTP-2725M PCI-2726C CTP-2726 PCI-2726CL CTP-2726L PCI-2726CM CTP-2726M PCI-2727 CPZ-2430 PCI-2727L CPZ-2726 PCI-2727M CPZ-2726L PCI-2727A CPZ-2726M PCI-2727AL CPZ-2762 PCI-2727AM CPZ-2762M PCI-2756A PEX-285122 PCI-2756AL LPC-285122 PCI-2756AM PCI-2758A(トランジスタ出力部) PCI-2758AL(トランジスタ出力部) PCI-2758AM(トランジスタ出力部) PCI-2762C PCI-2762CM CTP-2430 CTP-2762 CTP-2762M

Page 48: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 46 -

配線3

OUT1 OUT2 OUT3 OUT4

発光ダイオード

抵抗+極

-極

-COM*

• • • •

+COM*

デジタル出力配線3

抵抗は、デジタル出力ボードの出力仕様と、発光させるLEDの許容範囲を考慮し適切なものを使用してください。 使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。

DC+5V~DC+24V DC+12V~DC+24V PCI-2470 PCI-287144 PCI-287244 CTP-287144 CTP-287244 CPZ-287144 CPZ-287244

配線4

OUT1OUT2

OUT1OUT2

デジタル出力配線4

OUT1BB~OUT8BB,OUT1BC~OUT8BCは使用しません。 抵抗は、発光させるLEDの許容範囲を考慮し適切なものを使用してください。 使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。

DC+5V~DC+24V PCI-2503 CTP-2505 CPZ-2505

Page 49: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 47 - Interface Corporation

配線5

OUT1OUT2

OUT1 OUT2

デジタル出力配線5 抵抗は、発光させるLEDの許容範囲を考慮し適切なものを使用してください。 使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。

DC+5V~DC+24V PCI-2512C PCI-2758A PCI-2758AL PCI-2758AM PCI-2513 CTP-2506

CTP-2515 CTP-2516 CTP-2517 CPZ-2506 CPZ-2515 CPZ-2516

CPZ-2517 CPZ-286122 PEX-251100 PEX-251101 LPC-251100 LPC-251101

抵抗値の求め方 例)順方向電圧2Vの発光ダイオードを外部電源DC+12Vを用いて、10mAの電流を流して点灯させる 場合

( ) W1.0mA10V2V12

k1mA10

V2V12

=×−=

Ω=−=

消費電力

抵抗値

2倍以上の定格電力の抵抗を使うことを推奨いたします。使用する抵抗は「1kΩ-1/4W以上」となります。

Page 50: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 48 -

Step1. 基本フォーム作成

ここでは、これから作成するプログラムの画面作成を行います。(詳しくは『21ページ 4.1 デジタル入力』でのStep1~Step3を参考にしてください。) 1. Visual Basicを起動し新しい標準 EXE プロジェクトを作成します。 2. プロジェクト名を“DioOutput”に変更します。 3. 既定のフォームの名前を“frmDioOutput”に変更し、フォームのタイトルを"デジタル出力" に変更します。

4. プロジェクトに標準モジュールを追加します。 5. 標準モジュールに“標準モジュールのプロシージャ宣言のコード”(『28ページ Step2. DLLプロシージャ宣言』)を追加します。

Step2. 単点出力/バイト出力/ワード出力/ダブルワード出力

ここでは、ボードのデータ出力ライン(OUT)より状態(ON/OFF)の出力を行うプログラムを作成します。

1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdOutputSingleと名付けコマンドボタンコントロールのタイトルを"単点出力"に変更します。

2. 作成したコマンドボタン(cmdOutputSingle)をダブルクリックし編集ウィンドウを開き以下のコードを記述します。

(コマンドボタン(cmdOutputSingle)の Clickイベントのコード)

Private Sub cmdOutputSingle_Click() Dim lpszName As String 'デバイス名 Dim nRet As Long '関数の実行結果 Dim pnBuffer(4) As Long '状態を設定するバッファ 'ボード初期化を行います lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = -1 Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If ‘出力接点の状態を設定します pnBuffer(0) = 1 pnBuffer(1) = 0 pnBuffer(2) = 1 pnBuffer(3) = 0 'データ出力(OUT1~OUT4 までの状態を設定します) nRet = DioOutputPoint(hDeviceHandle, pnBuffer(0), 1, 4) If nRet <> 0 Then MsgBox ("データの出力に失敗しました") nRet = DioClose(hDeviceHandle) Exit Sub End If '終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub

Page 51: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 49 - Interface Corporation

出力接点番号1(OUT1)から出力接点番号4(OUT4)までを、1接点ずつ順に,接点の状態(ON=1/OFF=0)を設定します。指定する接点番号から所定の任意の点数(範囲)の状態を設定するにはDioOutputPoint関数を使用します。

「使用例」

Dim pnBuffer(4) As LongnRet = DioOutputPoint (hDeviceHandle, pnBuffer(0), 1, 4)

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

出力開始点番号を指定します。出力値を格納する配列変数を指定します。

出力開始点番号より設定する件数を指定します。

では、プログラムを実行し「単点出力」ボタンをクリックしてください。デジタル出力ボードに

接続されたLEDが以下のよう点灯します。

OUT1 OUT2 OUT3 OUT4

これは、配列変数pnBuffer(0)~pnBuffer(3)に設定された値が、OUT1~OUT4に対しそれぞれ以下にように働いているためです。

変数 値 処理

pnBuffer(0) 1 OUT1に接続したLEDを点灯する。 pnBuffer(1) 0 OUT2に接続したLEDを消灯する。 pnBuffer(2) 1 OUT3に接続したLEDを点灯する。 pnBuffer(3) 0 OUT4に接続したLEDを消灯する。

ここで、一度プログラムを終了してみてください。プログラムを終了してもLEDは点灯したままであることに気づくと思います。デジタル出力ボードに対し出力接点の設定を一度行うと、ボー

ドにリセット信号(コンピュータのリセット)が送信されるか、出力接点が新たに設定し直されるまで、その状態が保持されます。 “コマンドボタン(cmdOutputSingle)のClickイベントのコード”(『48ページ Step2. 単点出力/バイト出力/ワード出力/ダブルワード出力』)の出力接点の設定部分のコードを以下のように書き換え再度実行してください。LEDの点灯が消えます。 pnBuffer(0) = 0 pnBuffer(1) = 0 pnBuffer(2) = 0 pnBuffer(3) = 0

PCI-2726C + CHK-2101の組み合わせではCHK-2101のLED33番,35番が点灯します。

Page 52: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 50 -

先にポートの出力接点を1点ずつ設定する方法を記載しました。次は、一度に複数の出力接点を設定するプログラムを作成します。複数の出力接点の設定には、バイト出力(8点)、ワード出力(16点)、ダブルワード出力(32点)があります。 ここでは、バイト出力を行います。 1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdOutputByte と名付けコマンドボタンコントロールのタイトルを"バイト出力" に変更します。

2. 作成したコマンドボタン(CommandButton)をダブルクリックし編集ウィンドウを開き以下のコードを記述します。

(コマンドボタン(cmdOutputByte)の Clickイベントのコード)

Private Sub cmdOutputByte_Click() Dim lpszName As String 'デバイス名 Dim szTemp As String '文字列格納 Dim nRet As Long '関数の実行結果 Dim pbyValue As Byte '出力接点の設定値 'ボード初期化処理 lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = &HFFFF Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If '出力接点の設定値問い合わせ(3 桁以上の値が入力されるとオーバーフローします) szTemp = InputBox("出力接点の設定値を入力して下さい(0~FF)", "バイト出力", 0) '入力された値を 16 進数にします pbyValue = Val("&H" & szTemp) '出力接点 OUT1~OUT8 の設定を行います nRet = DioOutputByte(hDeviceHandle, FBIDIO_OUT1_8, pbyValue) If nRet <> 0 Then MsgBox ("データの入力に失敗しました") nRet = DioClose(hDeviceHandle) Exit Sub End If '終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub

Page 53: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 51 - Interface Corporation

“コマンドボタン(cmdOutputSingle)のClickイベントのコード”(『48ページ Step2. 単点出力/バイト出力/ワード出力/ダブルワード出力』)では、出力接点番号1(OUT1)から接点番号8(OUT8)までを、一度に設定します。 バイト単位(8 bit)で状態を設定するにはDioOutputByte関数を使用します。

「使用例」

Dim pbyValue As Byte

  nRet = DioOutputByte(hDeviceHandle, FBIDIO_OUT1_8, pbyValue)

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

状態を設定する接点を示す定数を指定します。

出力する値をバイト値で指定します。

一度に設定できる出力接点は、以下のとおりです。どの接点の状態を設定するかは、同関数の第2引数に指定します。

接 点 定 数 値 OUT1~OUT8 FBIDIO_OUT1_8 0

OUT9~OUT16 FBIDIO_OUT9_16 1 OUT17~OUT24 FBIDIO_OUT17_24 2 OUT25~OUT32 FBIDIO_OUT25_32 3 OUT33~OUT40 FBIDIO_OUT33_40 4 OUT41~OUT48 FBIDIO_OUT41_48 5 OUT49~OUT56 FBIDIO_OUT49_56 6 OUT57~OUT64 FBIDIO_OUT57_64 7

では、プログラムを実行し「バイト出力」ボタンをクリックしてください。 インプットボックスが表示され出力する値を聞いてくるので「55」と入力し「OK」ボタンをクリックして下さい。デジタル出力ボードに接続されたLEDが点灯します。

OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 OUT8

PCI-2726C + CHK-2101の組み合わせではCHK-2101のLED33番,35番, 37番,39番が点灯します。

Page 54: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 52 -

つまり、出力接点番号1(OUT1)から出力接点番号8(OUT8)の状態が以下のように設定されたことを意味します。

OUT8 OUT7 OUT6 OUT5 OUT4 OUT3 OUT2 OUT1 0 1 0 1 0 1 0 1

(OUT8) (OUT1) &h55(HEX) = 01010101(BIN)

バイト出力ですので、“FFh”を超える値を入力しますとオバーフローします。

では、次のステップに進む前に、「バイト出力」ボタンをクリックし、出力する値を「0」と入力しLEDの点灯を消してください。

次にワード出力(16点)を行います。

1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdOutputWordと名付けコマンドボタンコントロールのタイトルを"ワード出力"に変更します。

2. 作成したコマンドボタン(CommandButton)をダブルクリックし編集ウィンドウを開き以下のコードを記述します。

Page 55: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 53 - Interface Corporation

(コマンドボタン(cmdOutputWord)の Clickイベントのコード)

Private Sub cmdOutputWord_Click() Dim lpszName As String 'デバイス名 Dim szTemp As String '文字列格納 Dim nRet As Long '関数の実行結果 Dim pwValue As Integer '出力接点の設定値 'ボード初期化処理 lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = &HFFFF Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If '出力接点の設定値問い合わせ(5 桁以上以外の値が入力されるとオーバーフローします) szTemp = InputBox("出力接点の設定値を入力して下さい(0~FFFF)", "ワード出力", 0) '入力された値を 16 進数にします pwValue = Val("&H" & szTemp) '出力接点 OUT1~OUT16 の設定を行います nRet = DioOutputWord(hDeviceHandle, FBIDIO_OUT1_16, pwValue) If nRet <> 0 Then MsgBox ("データの入力に失敗しました") nRet = DioClose(hDeviceHandle) Exit Sub End If '終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub

ワード単位(16 bit)で状態を設定するにはDioOutputWord関数を使用します。

「使用例」

Dim pwValue As Integer

nRet = DioOutputWord(hDeviceHandle, FBIDIO_OUT1_16, pwValue)

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

状態を設定する接点を示す定数を指定します。

「使用例」 出力する値をバイト値で指定します。

一度に設定できる出力接点は、以下のとおりです。どの接点の状態を設定するかは、同関数の第2引数に指定します。

接 点 定 数 値 OUT1~OUT16 FBIDIO_OUT1_16 0 OUT17~OUT32 FBIDIO_OUT17_32 2 OUT33~OUT48 FBIDIO_OUT33_48 4 OUT49~OUT64 FBIDIO_OUT49_64 6

※本コードは、出力点数が15以下の

ボードでは使用できません

Page 56: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 54 -

では、プログラムを実行し「ワード出力」ボタンをクリックしてください。 インプットボックスが表示され出力する値を聞いてくるので「5555」と入力し「OK」ボタンをクリックして下さい。デジタル出力ボードに接続されたLEDが点灯します。

OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 OUT8

OUT9 OUT10 OUT11 OUT12 OUT13 OUT14 OUT15 OUT16

PCI-2726C + CHK-2101の組み合わせではCHK-2101のLED33番, 35番, 37番, 39番, 41

番, 43番, 45番, 47番が点灯します。

つまり、出力接点番号1(OUT1)から出力接点番号16(OUT16)の状態が以下のように設定されたことを意味します。

OUT16 OUT15 OUT14 OUT13 OUT12 OUT11 OUT10 OUT9 0 1 0 1 0 1 0 1

OUT8 OUT7 OUT6 OUT5 OUT4 OUT3 OUT2 OUT1 0 1 0 1 0 1 0 1

(OUT16) (OUT1) &h5555(HEX) = 0101010101010101(BIN)

ワード出力ですので、“FFFFh”を超える値を入力しますとオバーフローします。 では、次のステップに進む前に、「ワード出力」ボタンをクリックし、出力する値を「0」と入力しLEDの点灯を消してください。 次にダブルワード出力(32点)を行います。 1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdOutputDWord と名付けコマンド ボタン コントロールのタイトルを "Dワード出力" に変更します。

2. 作成したコマンドボタン(CommandButton)をダブルクリックし編集ウィンドウを開き以下のコードを記述します。

Page 57: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 55 - Interface Corporation

(コマンドボタン(cmdOutputDWord)の Clickイベントのコード)

Private Sub cmdOutputDWord_Click() Dim lpszName As String 'デバイス名 Dim szTemp As String '文字列格納 Dim nRet As Long '関数の実行結果 Dim pdwValue As Long '出力接点の設定値 'ボード初期化処理 lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = &HFFFF Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If '出力接点の設定値問い合わせ(9 桁以上以外の値が入力されるとオーバーフローします) szTemp = InputBox("出力接点の設定値を入力して下さい(0~FFFFFFFF)", "ダブルワード出力", 0) '入力された値を 16 進数にします pdwValue = Val("&H" & szTemp) '出力接点 OUT1~OUT32 の設定を行います nRet = DioOutputDword(hDeviceHandle, FBIDIO_OUT1_32, pdwValue) If nRet <> 0 Then MsgBox ("データの入力に失敗しました") nRet = DioClose(hDeviceHandle) Exit Sub End If '終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub

ワード単位(32 bit)で状態を設定するにはDioOutputDword関数を使用します。

Dim pbyValue As BytenRet = DioOutputDword(hDeviceHandle, FBIDIO_OUT1_32, pdwValue)

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

状態を設定する接点を示す定数を指定します。

「使用例」 出力する値をバイト値で指定します。

一度に設定できる出力接点は、以下のとおりです。どの接点の状態を設定するかは、同関数の第2引数に指定します。

接 点 定 数 値

OUT1~OUT16 FBIDIO_OUT1_32 0 OUT17~OUT32 FBIDIO_OUT33_64 4

※本コードは、出力点数が31以下のボードでは使用できません

Page 58: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 56 -

では、プログラムを実行し「Dワード出力」ボタンをクリックしてください。 インプットボックスが表示され出力する値を聞いてくるので「55555555」と入力し「OK」ボタンをクリックして下さい。デジタル出力ボードに接続されたLEDが点灯します。

OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 OUT8

OUT9 OUT10 OUT11 OUT12 OUT13 OUT14 OUT15 OUT16

OUT17 OUT18 OUT19 OUT20 OUT21 OUT22 OUT23 OUT24

OUT25 OUT26 OUT27 OUT28 OUT29 OUT30 OUT31 OUT32

PCI-2726C + CHK-2101の組み合わせでは CHK-2101の LED33番,35番, 37番, 39番, 41番, 43番, 45番, 47番,49番,51

番,53番,55番,57番,59番,61番,63番が点灯します。

つまり、出力接点番号1(OUT1)から出力接点番号32(OUT32)の状態が以下のように設定されたことを意味します。

OUT32 OUT31 OUT30 OUT29 OUT28 OUT27 OUT26 OUT25

0 1 0 1 0 1 0 1 OUT24 OUT23 OUT22 OUT21 OUT20 OUT19 OUT18 OUT27

0 1 0 1 0 1 0 1 OUT16 OUT15 OUT14 OUT13 OUT12 OUT11 OUT10 OUT9

0 1 0 1 0 1 0 1 OUT8 OUT7 OUT6 OUT5 OUT4 OUT3 OUT2 OUT1

0 1 0 1 0 1 0 1 (OUT32) (OUT1)

&h55555555(HEX) = 01010101010101010101010101010101 (BIN)

ダブルワード出力ですので、“FFFFFFFFh”を超える値を入力しますとオバーフローします。 ここまでが、簡単なデジタル出力のプログラム例です。出力接点の状態を単点で設定するかバイ

ト単位で設定するか等は、接続するシステムの特性により、それぞれ使い分けることがポイント

です。

Page 59: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 57 - Interface Corporation

4.3 バックグランド処理

ここでは、バックグランド処理によるデジタル出力処理を行います。FbiDio.DLLにはバックグランド処理を行うための、バックグランド関数が用意されています(関数名に~Backとあるものがこれにあたります)。 バックグランド関数は、処理回数を指定することにより定期的に指定した間隔で処理を繰り返す

関数です。一定時間ごとに入出力関数をコールして実現する処理をバックグランド関数1度のコールにより実現できます。これらバックグランド関数はオーバーラップ構造体(後に記載)を指定することで非同期に動作します。

Visual Basicにおいて1つのプロジェクト内で非同期処理を実現するには、 ・ActiveX EXE を作成しプロジェクトに組み込む ・Win32APIを使用する

等がありますが、ここではWin32APIを使用する方法を記載します。 では、OUT1に接続されたLEDをバックグランドで点滅させるプログラムを作成して行きます。

Step1. 基本フォーム作成

ここでは、これから作成するプログラムの画面作成を行います。(詳しくは『21ページ 4.1 デジタル入力』でのStep1~Step3を参考にしてください。) 1. Visual Basicを起動し新しい標準 EXE プロジェクトを作成します。 2. プロジェクト名を“OutputBack”に変更します。 3. 既定のフォームの名前を“formOutputBack”に変更し、フォームのタイトルを"バックグランド出力"に変更します。

4. プロジェクトに標準モジュールを追加します。 5. 標準モジュールに“標準モジュールのプロシージャ宣言のコード”(『28ページ Step2. DLLプロシージャ宣言』)を追加します。

Page 60: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 58 -

Step2. フォアグラウンド処理の作成

ここでは、バックグランド処理と対比するための、フォアグラウンドで実行させるプログラムの

作成を行います。 1. フォームにタイマー(Timer)コントロールを描画し、オブジェクト名をtimForegroundにします。 2. timForegroundのIntervalプロパティを10に設定します。 3. 作成したタイマーコントロール(timForeground)をダブルクリックし編集ウィンドウを開き以下のコードを記述します。

(タイマーコントロール(timForeground)のコード)

Private Sub timForeground() Static Xrev As Boolean Static Yrev As Boolean Static XPos As Long Static Ypos As Long ScaleMode = 3 'ScaleMode をピクセルに設定します。 DrawWidth = 10 'DrawWidth を設定します。 PSet (XPos, Ypos), &H8000000F '前回描画したドットを消す '表示位置算出(X 軸) If Xrev Then XPos = XPos - DrawWidth If XPos < 0 Then Xrev = False Else XPos = XPos + DrawWidth If XPos > ScaleWidth Then Xrev = True 'ベクトル反転 End If '表示位置算出(Y 軸) If Yrev Then Ypos = Ypos - DrawWidth If Ypos < 0 Then Yrev = False Else Ypos = Ypos + DrawWidth If Ypos > ScaleHeight Then Yrev = True 'ベクトル反転 End If 'ドット描画 PSet (XPos, Ypos), 0 End Sub

Page 61: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 59 - Interface Corporation

Step3. バックグランド処理の作成

ここでは、バックグランドでデジタル出力を行うプログラムの作成を行います。バックグランド

での非同期処理を実現するために、ここではWin32 APIに定義される以下の関数、および構造体を使用しています。 ・CreateEvent関数 イベントオブジェクトの作成を行います。

・Overlapped構造体 非同期I/O制御に必要な構造体です。

・WaitForSingleObject関数 オブジェクトがシグナル状態になるまで待機します。

・CloseHandle関数 オブジェクトハンドルのクローズを行います。

各関数および構造体の詳細はMicrosoft社提供のWin32APIリファレンスか、もしくはその他専門書籍を参照してください。 バックグランド処理の構築は、以下のシーケンスで行います。

非同期に実行されるオブジェクトを作成す

る。 ↓

バックグランドで行う処理の定義する。 ↓

バックグランド処理を開始する。 ↓

バックグランドの処理を監視し、処理が終了した場合、作成したイベントを解放する。

では、実際にプログラムの作成を行います。

Page 62: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 60 -

1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdBackOut と名付けコマンドボタンコントロールのタイトルを "出力" に変更します。

2. 作成したコマンドボタン(cmdBackOut)をダブルクリックし編集ウィンドウを開き以下のコードを記述します。

(コマンドボタン(cmdOutputBack)のクリックイベントのコード)

Private Sub cmdBackOut_Click() Dim lpszName As String Dim dwStartNum As Long Dim nRet As Long Dim pnBuffer(20) As Long Dim lpOverlapped As OVERLAPPED Dim lpEventAttributes As Long Dim I ‘ボードの初期化 lpszName = "FBIDIO1" & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = -1 Then MsgBox ("デバイスのオープンに失敗しました") Exit Sub End If cmdBackOut.Enabled = False ‘出力ボタンを使用禁止にします。 'イベントオブジェクトの作成を行います。 lpOverlapped.hEvent = CreateEvent(lpEventAttributes, True, False, 0) 'バックグランド処理の設定を行います hBackGroundHandle = DioSetBackGround(hDeviceHandle, 1, 1, 20, 200, 20, 0) If hBackGroundHandle = &HFFFF Then MsgBox ("バックグランドの設定に失敗しました") Exit Sub End If '出力するデータを変数に格納します。 For I = 0 To 19 If I Mod 2 = 0 Then pnBuffer(I) = 1 Else pnBuffer(I) = 0 End If Next 'バックグランド出力を開始します nRet = DioOutputPointBack(hDeviceHandle, hBackGroundHandle, pnBuffer(0), 80, lpOverlapped) If nRet <> &HC0000008 Then MsgBox ("データの出力に失敗しました " + Str(nRet)) End If 'イベントがシグナル状態になるまで待機します。 Do Until WaitForSingleObject(lpOverlapped.hEvent, 0) = 0 DoEvents Loop

Page 63: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 61 - Interface Corporation

cmdBackOut.Enabled = True ‘出力ボタンを使用可能にします。 'バックグランドでの設定を解放します nRet = DioFreeBackGround(hDeviceHandle, hBackGroundHandle) ‘作成したイベントオブジェクトをクローズします。 CloseHandle (lpOverlapped.hEvent) '終了処理 nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox ("デバイスのクローズに失敗しました") End If End Sub

ここで、プログラムを実行してみて下さい。 フォーム上で点(ドット)が移動しています。このとき、「出力」ボタンをクリックして下さい。 LEDが点灯すると同時に、フォーム上の点(ドット)の描画が、停止することなく移動しつづけていることが確認できると思います。これが、非同期処理です。

「出力」ボタンのクリック

LEDの点滅処理

ドットの移動処理

開始 終了

また、プログラム中にDioOutputPointBack関数の正常終了時の戻り値を&HC0000008としているのは、Visual Basicより同関数を使用した場合、関数呼び出しと時に非同期I/Oが実行されるので結果として、エラーコード&HC0000008(FBIDIO_ERROR_IO_PENDING)が返されるためです。

<備考> 使用するコンピュータのスペックによっては、バックグランド処理中にフォームの最小化等を行

うと、バックグランド処理が不安定になる(200msごとに点滅しなくなる)場合があります。このような場合、プログラムをEXEファイルにコンパイルした後実行すると、回避できます。

それでは対比のために、プログラム中に同期処理を行うコード作成し、非同期の場合との動作の

違いを確認してみましょう。

Page 64: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 62 -

リスト中ほどの

' シグナル状態になるまで待機(Win32API) Do Until WaitForSingleObject(lpOverlapped.hEvent, 0) = 0 DoEvents Loop

の部分を ' シグナル状態になるまで待機(Win32API) nRet = WaitForSingleObject(lpOverlapped.hEvent, -1)

と修正すると、この関数が同期処理されます。

プログラム実行後、「出力」ボタンをクリックすると、LEDが点灯すると同時に、フォーム上の点(ドット)の描画が停止します。これは、コマンドボタンコントロール(cmdBackOut)に記述したプログラムとタイマーコントロール(timForeground)に記述したプログラムがWaitForSingleObject関数呼び出しの部分で同期していることを意味します。つまりは、バックグランドの処理が完了しな

いとVisual Basic側に制御が戻りません。 したがって、“コマンドボタン(cmdOutputBack)のクリックイベント”(『59ページ Step3. バックグランド処理の作成』)でのコード生成したイベントオブジェクト(データ出力イベント)が完了すると、処理がVisual Basicに戻り、再びフォーム上の点(ドット)が移動し始めます。

「出力」ボタンのクリック

LEDの点滅処理

ドットの移動処理

開始 終了

ここより、使用したFbiDio.DLLの関数について記載します。 プログラムを再度実行し、今度はLEDの点灯に着目して下さい。LEDは200ms間隔で点灯と消灯を繰り返しています。これらバックグランドで行う処理を設定するにはDioSetBackGround関数を使用します。

Page 65: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 63 - Interface Corporation

hBackGroundHandle = DioSetBackGround(hDeviceHandle, 1, 1, 20, 200, 20, 0)

ハンドル番号が返されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

将来拡張用です。0を指定して下さい。

制御(監視)する接点番号の開始番号を指定します。

制御(監視)する開始点番号より処理対象とする点数を指定します。

制御データ(取得データ)を格納するバッファのサイズを指定します。

「使用方法」

動作させる周期をms 単位で指定します。

処理を実行する回数を指定します。

“コマンドボタン(cmdOutputBack)のクリックイベント”(『59ページ Step3. バックグランド処理の作成』)では出力接点番号1(OUT1)より、配列変数pnBuffer()に格納された情報を200msごとに出力する設定を行っています。 第6引数の実行回数ですが、pnBuffer(0)~pnBuffer(19)までの出力を1セットとし、20セット繰り返すという意味ではありません。pnBuffer(0)が処理されると1回、200ms後pnBuffer(1)が処理されると1回、というように200msごとに処理される回数をカウントし、その合計回数を指定します。よって、“コマンドボタン(cmdOutputBack)のクリックイベント”(『59ページ Step3. バックグランド処理の作成』)でではバッファ内は20回分のデータしか格納されていませんから、実行回数の上限は20となります。20以上の値を指定した場合、21回目はpnBuffer(0)が実行されます。

Page 66: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 64 -

反対に20以下の値、例えば10を設定すると、pnBuffer(9)を出力し、そこで処理は完了します。試しに、バックグランド処理の設定を下記コードのように修正し実行してください。

(バックグランド処理設定のコード)

' バックグランド処理の設定を行います hBackGroundHandle = DioSetBackGround(hDeviceHandle, 1, 3, 5, 200, 5, 0)

出力接点番号1(OUT1)から出力接点番号3(OUT3)の状態が以下のよう変化します。 経過時間 OUT1 OUT2 OUT3 実行回数 0~200ms 1 0 1 1回目 200ms~400ms

0 1 0 2回目

400ms~600ms

1 0 1 3回目

600ms~800ms

0 1 0 4回目

800ms~1s 1 0 1 5回目

この時、処理の対象となっているのはpnBuffer(0)~pnBuffer(14)までです。 ここまでで、バッファに格納されるデータと実行回数の関係は理解頂けたと思います。

次に実際の出力処理ですが、バックグランドでの出力にはDioOutputPointBack関数を使用します。DioSetBackGround関数でバックグランド処理を設定後、DioOutputPointBack関数を呼び出すことにより始めてバックグランドでの処理が開始されます。

nRet = DioOutputPointBack(hDeviceHandle, hBackGroundHandle, _

pnBuffer(0), 80, lpOverlapped)

ハンドル番号が返されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

DioSetBackGround 関数で取得したバックグランド処理ハンドルを指定します。

デバイスへ出力するデータバッファを指定します。 デバイスに出力するバイト数を指定しま

す。

OVERLAPPEDデータ構造体へのポインタを指定します。

「使用方法」

第4引数のデバイスに出力するバイト数は下式のよう算出します。

nNumberOfBytesToWrite = dwPointNum × dwValueNum × 4

Page 67: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 65 - Interface Corporation

dwPointNumとdwValueNumはDioSetBackGround関数で設定した値を指定します。最後の4ですが、実際のDLLの仕様では、C言語でのint型のバイナリサイズ(sizeof(int))が定義されています。Visual Basicでは、C言語でのint型を長整数型(Long)として評価しますのでVsual Basicでの長整数型(Long)のバイナリサイズをあてはめ4としています。 “バックグランド処理設定のコード”(『59ページ Step3. バックグランド処理の作成』)では、nNumberOfBytesToWrite = 1 × 20 × 4 = 80となります。 また、DioSetBackGroundで設定したバックグランド処理の設定は、バックグランド処理が終了または不要になった場合、これを解放しなければなりません。バックグランド処理を

DioStopBackGround関数で停止した場合にも、処理停止後、設定の解放が必要となります。 バックグランド処理の設定の解放には、DioFreeBackGround関数を使用します。

Dim pbyValue As BytenRet = DioFreeBackGround(hDeviceHandle, hBackGroundHandle)

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

DioSetBackGround 関数で取得したバックグランド処理ハンドルを指定します

「使用方法」

ここまでが、Win32APIを用いたバックグランド処理のプログラム例です。しかし、非同期処理を実現する方法は先にも記したとおりこの限りではありません。Visual Basic Ver. 5.0よりマルチスレッドなコンポーネントの作成が可能となりましたので、これらバックグランド関数を使用せずと

も同等もしくはそれ以上の機能を作成することは可能ですが、Professional Edition および Enterprise Editionのみの機能ですので、本冊子ではWin32 APIを用いたバックグランド処理の記述にとどめます。

Page 68: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 66 -

4.4 割り込み処理

ここでは、割り込み処理の方法に関し記載します。フォアグラウンドでプログラムが実行中、バ

ックグランドにて非同期に常時割り込み入力を監視し、割り込みを検知するとフォアグラウンド

のプログラムを停止し(割り込み)ユーザーに知らせる方法を記載しています。 ここでは、ボードの入力接点番号1(IN1)より入力(High Low)があった場合、それを割込み信号として取得するプログラムの作成を行います。非同期処理の実現にはWin32 APIを使用しています。

割り込み監視処理の構築は、以下のシーケンスで行います。

非同期に実行されるオブジェクトを作成する。 ↓

割り込み要因の論理を定義する。 ↓

不要な割り込み入力をマスクする。 ↓

バックグランドで割り込み監視処理を開始する。↓

バックグランドの処理を監視し、処理が終了した場合(割り込み信号の入力があった場合)、作成したイベントを解放する。

Page 69: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 67 - Interface Corporation

Step1. 基本フォーム作成

ここでは、これから作成するプログラムの画面作成を行います。(詳しくは『21ページ 4.1 デジタル入力』でのStep1~Step3を参考にしてください。) 1. Visual Basicを起動し新しい標準EXEプロジェクトを作成します。 2. プロジェクト名を“Interrupt”に変更します。 3. 既定のフォームの名前を“formInterrupt”に変更し、フォームのタイトルを“割り込み入力”に変更します。

4. プロジェクトに標準モジュールを追加します。 5. 標準モジュールに“標準モジュールのプロシージャ宣言のコード”(『28ページ Step2. DLLプロシージャ宣言』)を追加します。

Step2. フォアグラウンド処理の作成

ここでは、バックグランドでの割り込み入力監視処理の確認のため、フォアグラウンドで実行さ

せるプログラムの作成を行います。 1. フォームにタイマー(Timer)コントロールを描画し、オブジェクト名をtimForegroundにします。 2. timForegroundのIntervalプロパティを10に設定します。 3. 作成したタイマーコントロール(timForeground)をダブルクリックし編集ウィンドウを開き“タイマーコントロール(timForeground)のコード”(『58ページ Step2. フォアグラウンド処理の作成』)を追加します。

Step3. 割り込み検知処理の作成

ここでは、バックグランドで割り込み信号の検知を行うプログラムの作成を行います。

1. フォーム上にコマンドボタン(CommandButton)コントロールを描画し、cmdIrqWaitと名付けコマンドボタンコントロールのタイトルを“割り込み待機”に変更します。

2. 作成したコマンドボタン(cmdIrqWait)をダブルクリックし編集ウィンドウを開き次ページのコードを記述します。

Page 70: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 68 -

(コマンドボタン(cmdIrqWait)のクリックイベントのコード)

Private Sub cmdIrqWait_Click() Dim lpszName As String Dim nRet As Long Dim lpOverlapped As OVERLAPPED Dim lpEventAttributes As Long ‘初期化処理 lpszName = “FBIDIO1” & Chr(0) hDeviceHandle = DioOpen(lpszName, FBIDIO_FLAG_SHARE) If hDeviceHandle = -1 Then MsgBox “デバイスのオープンに失敗しました” Exit Sub End If ‘イベントオブジェクト(割り込み監視)の作成を行います lpOverlapped.hEvent = CreateEvent(lpEventAttributes, True, False, 0) ‘割り込み発生論理の設定を行います nRet = DioSetIrqConfig(hDeviceHandle, &H0) If nRet <> 0 Then MsgBox “割り込み要因の割り当てに失敗しました” Exit Sub End If ‘割り込みのマスク設定を行います nRet = DioSetIrqMask(hDeviceHandle, &H1) If nRet <> 0 Then MsgBox “マスク設定に失敗しました” Exit Sub End If ‘ボードのイベント要求を待ちます nRet = DioEventRequestPending(hDeviceHandle, &HF, pEventBuf, lpOverlapped) cmdIrqWait.Enabled = False ‘待機ボタン使用禁止 ‘割り込みがあるまで待機する Do Until WaitForSingleObject(lpOverlapped.hEvent, 0) = 0 DoEvents Loop MsgBox “割り込みを検知しました” cmdIrqWait.Enabled = True ‘待機ボタン使用許可 ‘作成したイベントを終了します CloseHandle (lpOverlapped.hEvent) nRet = DioClose(hDeviceHandle) If nRet <> 0 Then MsgBox (“デバイスのクローズに失敗しました”) End If End Sub

では、プログラムを実行してみてください。 フォーム上で点(ドット)が移動しています。このとき、「割り込み待機」ボタンをクリックして下さい。フォアグラウンドではフォーム上への点(ドット)の描画プログラムが実行され、バックグランドでは割り込み入力の監視が開始されます。 では、ここで入力接点番号1(IN1)の状態をOFF ON(High Low)にしてください。 画面上に「割り込みを検知しました」とメッセージボックスが表示されます。

Page 71: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 69 - Interface Corporation

では、ここより、使用したFbiDio.DLLの関数について記載します。

“バックグランド処理設定のコード”(『59ページ Step3. バックグランド処理の作成』)では入力接点番号 1(IN1)をOFF ON(High Low)にした時のみ割り込みイベントが発生し、ON OFF(Low High)にしても割り込みイベントは発生しません。これは、どういった信号を割り込みとして扱うかが、ボードに設定されているためです。割り込み要因の設定には

DioSetIrqConfig関数を使用します。

nRet = DioSetIrqConfig(hDeviceHandle, &H0)

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

割り込み要因の論理を設定します。

「使用方法」

割り込み要因の論理の設定は、設定される数値データは2進数変換時、各ビットにおいて以下の意味をもっています。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0EDS4 EDS3 EDS3 EDS1 SIG4 SIG3 SIG2 SIG1

SIG1~SIG4 の各々がどういった条件の時、割り込みとするかを設定します。

各ビットを入力接点にアタッチします。

割り込み発生論理設定状態 EDS1 SIG1の割り込み発生論理の設定 EDS2 SIG2の割り込み発生論理の設定 EDS3 SIG3の割り込み発生論理の設定 EDS4 SIG4の割り込み発生論理の設定 値 意味 0 High → Low 1 Low → High SIG1[割り込み要因割り当て] 値 意味 0 IN1 1 STB1 SIG2[割り込み要因割り当て] 値 意味 0 IN2 1 IR.IN1 SIG3[割り込み要因割り当て] 値 意味 0 IN3 1 ACK2 SIG4[割り込み要因割り当て] 値 意味 0 IN4 1 IR.IN2

Page 72: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 70 -

“コマンドボタン(cmdIrqWait)のクリックイベントのコード”(『67ページ Step3. 割り込み検知処理の作成』)においては、&h0が設定されています。つまり、Bit7~Bit0までが「00000000」と設定され、その意味は「IN1,IN2,IN3,IN4のうちどれかが、High Lowに変化した時それを割り込み入力とする」と定義しているわけです。

注意!

設定できる割り込み要因は、使用する製品により決まります。設定できる割り込み要因の詳

細に関しては、各製品マニュアルを参照してください。

では、プログラム実行後、入力接点番号2(IN2)をOFF ON(High Low)にした時はどうでしょう。確認できるように割り込みは発生しません。 これは、IN1以外の状態の変化がマスク処理(不要な割り込み入力を保護)されているためです。 割り込み入力のマスク処理にはDioSetIrqMask関数を使用します。

nRet = DioSetIrqMask(hDeviceHandle, &H1)

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

割り込み要因のマスク/アンマスクを設定します。「使用方法」

割り込み要因のマスクの設定は、設定される数値データは2進数変換時、各ビットにおいて以下の意味をもっています。0の時その接点はマスクされます。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0未使用 未使用 SIGR SIGT SIG4 SIG3 SIG2 SIG1

DioSetIrqConfig関数で設定した各接点に対応します。

SIGR=外部割り込み SIGT=タイマ割り込み 値 意味 0 マスクする 1 マスクしない

“コマンドボタン(cmdIrqWait)のクリックイベントのコード”(『67ページ Step3. 割り込み検知処理の作成』)では&h1が設定されています。つまりBit7~Bit0までが「00000001」と設定され、入力接点番号1(IN1)以外の入力信号はマスク処理されているので、入力接点番号1(IN1)以外の状態の変化は割込み信号として処理されません。

Page 73: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 71 - Interface Corporation

最後に、実際の監視処理の開始では、DioEventRequestPending関数が呼び出されて初めて処理が開始されます。

nRet = DioEventRequestPending(hDeviceHandle, &H1, pEventBuf, lpOverlapped)

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

許可するイベントをビットアサインで設定します。

通知されたイベント内容が格納されます。

OVERLAPPED データ構造体へのポインタを指定します。

「使用方法」

許可するイベントは、設定される数値データは2進数変換時、各ビットにおいて以下の意味をもっています。1の時そのイベントは有効となります。“コマンドボタン(cmdIrqWait)のクリックイベントのコード”(『67ページ Step3. 割り込み検知処理の作成』)ではBit3~Bit0までが「1111」と設定され、IN1~IN4で入力信号を検知すると割り込みイベントとして認識するよう定義しています。

Bit0 IN1からの入力信号または、STB1からの入力信号 Bit1 IN2からの入力信号または、IR.IN1(外部割り込み入力信号)からの入力信号 Bit2 IN3からの入力信号または、ACK2からの入力信号 Bit3 IN4からの入力信号または、IR.IN2(外部割り込み入力信号)からの入力信号 Bit4 インターバルタイマ Bit5 外部リセット入力(RSTIN)割り込み

Page 74: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 72 -

DioSetIrqMask関数でマスクされた接点のイベントを有効にしても、それは割込み信号として処理されません。また反対に、DioSetIrqMask関数においてアンマスクな接点でもイベントが有効でない限り、同様に割込み信号として処理されません。 では、実際のDioSetIrqMask関数の用途ですが、割り込み入力監視中等にフォアグラウンドで実行される処理の状況により割り込み要因を変更したい場合等、割り込み入力監視開始時には全ての

割り込みイベントを有効としておき、途中、DioSetIrqMask関数によりその入力をマスクするといった用途等があげられます。“コマンドボタン(cmdIrqWait)のクリックイベントのコード”(『67ページ Step3. 割り込み検知処理の作成』)ではDioSetIrqMask関数を便宜上記載しました。 ここまでが、Win32APIを用いた割り込み処理のプログラム例です。割り込みを多用するとプログラムが複雑になることがあります。ですが、柔軟なシステム作成においてこの割り込み処理は有

効な手法となります。 割り込み入力設定において、Low Highへの信号変化を割り込みとしたプログラムを作成したにも関わらず、High Lowの変化も割り込みとしてとらえてしまう場合があります。この現象は接点スイッチ部にメカニカルスイッチを用いた場合等に発生します。これは、信号の特性とチャタ

リング*の影響によるものです。ボードの仕様範囲内で電圧をかける等すると同現象を回避できる

場合があります。

※メカニカルなスイッチ等のON,OFFでは切り替わる際に信号がON/OFFの境界をしばらく行き来するノイズが発生します。これをチャタリングと言います。スイッチによっては、数百msの間、信号が安定しない場合もあります。

Page 75: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 73 - Interface Corporation

第5章 FbiDio.DLLリファレンス DioOpen

指定されたデバイス名のボードのオープンを行い、以後のボードへのアクセスを行えるようにします。 宣言 Declare Function DioOpen Lib “FbiDio.DLL” (ByVal lpszName As String,ByVal fdwFlags As Long) As Long パラメータ

lpszName 任意のデバイス名を指定します。 fdwFlags オープン時のフラグを指定します。 値 意味

FBIDIO_FLAG_SHARE 同じデバイスを重複(共有)してオープンすることを許可します。

戻り値 関数が成功すると有効なデバイスハンドルが返されます。 関数が失敗するとINVALID_HANDLE_VALUEが返されます。INVALID_HANDLE_VALUEの値はFFFFFFFFh(-1)です。 解説 デジタル入出力ボードのオープンを行い、以後のボードへのアクセスを行えるようにします。 Windows XP/Server 2003/2000/Me/98/95では、「デバイスマネージャ」に「FbiPciDio」が追加され、認識された弊社デジタル入出力ボードが一覧表示されます。一覧の製品型式の横にボード上のロータリスイッチの値とデバイス名が表示されます。DI入力ユーティリティ(DIUTIL.EXE)、DO出力ユーティリティ(DOUTIL.EXE)でも確認できます。 Windows NTでは、DI入力ユーティリティ(DIUTIL.EXE)、DO出力ユーティリティ(DOUTIL.EXE)にて割り当てられたデバイス名をご確認ください。 デバイス名はボード上のロータリスイッチ(RSW1)の値で決定されるわけではありません。OSがボードを認識した順番により決定されます。 使用するボード枚数やスロット位置の変更等でシステム構成が変化すると割り当てられる名前が変化する場合があります。システム構成が変化する環境でご使用になる場合は、デバイス名の指定が変更できるようにアプリケーションを作成ください。ボード上に実装されたRSW1(ボードID設定)の値を取得し、アプリケーションで目的のボードであるかを判断することができます。詳しくは、DioCommonGetPciDeviceInfo関数 の説明をご参照ください。 CardBusシリーズにつきましては、カードバスID設定ユーティリティで設定したIDがボードIDとして取得されます。

DioClose

ボードのクローズを行い、ボードアクセスのために使用されていた各種リソースの解放を行います。 宣言 Declare Function DioClose Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioInputPoint

ボードの任意の点数の入力接点の状態を読み込みます。 宣言 Declare Function DioInputPoint Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pBuffer As Long,ByVal dwStartNum As Long,ByVal dwNum As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します pBuffer デバイスから読み取ったデータを受け取るバッファへのポインタを指定しま

す。 dwStartNum バッファに取得する入力接点の開始番号を指定します。 dwNum 入力接点数を指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 76: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 74 -

DioOutputPoint

任意の点数の出力接点の出力を制御します。 宣言 Declare Function DioOutputPoint Lib “FbiDio.DLL”(ByVal hDeviceHandle As Long,ByRef pBuffer As Long,ByVal dwStartNum As Long,ByVal dwNum As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します pBuffer デバイスから出力するデータを格納するバッファへのポインタを指定しま

す。 dwStartNum 出力接点の開始番号を指定します。 dwNum 出力接点数を指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioGetBackGroundUseTimer バックグランド処理で使用するタイマーの情報を取得します。 宣言 Declare Function DioGetBackGroundUseTimer Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pnUse As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します pnUse バックグランド処理で使用するタイマーを示す値が返されます。 値 意味 0 パソコンのタイマーを使用します。

1(0以外) ボード上のタイマーを使用します。ボード上のタイマを使用する場合、DioSetTimerConfig関数、DioGetTimerConfig関数、DioGetTimerCount関数は使用できません。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioSetBackGroundUseTimer

バックグランド処理で使用するタイマーの設定を行います。 宣言 Declare Function DioSetBackGroundUseTimer Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nUse As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します nUse バックグランド処理で使用するタイマーを示す値を指定します。 値 意味 0 パソコンのタイマ-を使用します。

1(0以外) ボード上のタイマーを使用します。ボード上のタイマを使用する場合、DioSetTimerConfig関 数 、 DioGetTimerConfig 関 数 、DioGetTimerCount関数は使用できません。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 77: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 75 - Interface Corporation

DioSetBackGround

バックグランド関数実行時の接点番号、接点数、処理回数を設定します。 宣言 Declare Function DioSetBackGround Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal dwStartPoint As Long,ByVal dwPointNum As Long,ByVal dwValueNum As Long,ByVal dwCycle As Long,ByVal dwCount As Long,ByVal dwOption As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します dwStartPoint バックグランド入力または出力、監視を行う開始接点番号を指定します。

DIボードの場合はピンIN1が1に対応します。DOボードの場合はピンOUT1が1に対応します。DIOボード(双方向)の場合ピンI/O1が1に対応します。

dwPointNum バックグランド入力または出力を行う接点数を指定します。 dwValueNum 1接点に割り当てるバッファを指定します。 dwCycle バックグランド処理周期/監視分解能を指定します。単位ms。1ms以上1ms

単位で設定可能です。 dwCount 処理回数を指定します。0を指定するとコールしたバックグランド処理は、

DioStopBackGround関数をコールするまで繰り返し処理を行います。 dwOption 将来拡張用です。0を指定して下さい。

戻り値 関数が成功すると、有効なバックグランド処理ハンドルが返されます。 関数が失敗すると-1(INVALID_HANDLE_VALUE(FFFFFFFFh))が返ります。 解説 バックグランド処理に使用するタイマーをパソコンのタイマーとしている場合、dwCycleの値が500ms以下またはCPUの負荷が過多になると、バックグランド処理が正常に行われなくなる場合があります。 この現象は、使用するタイマーをボード上のタイマーに変更することにより回避できます。

DioFreeBackGround

DioSetBackGroundで設定したバックグランド処理の設定を解放します。 宣言 Declare Function DioFreeBackGround Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal hBackGroundHandle As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 hBackGroundHandle バックグランド処理のハンドルを指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 バックグランド処理を行う必要がなくなった時点で必ず本関数で設定を解放してください。バックグランド処理実行中の場合は、その処理を停止させ設定を解放します。

DioStopBackGround バックグランド処理を停止します。 宣言 Declare Function DioStopBackGround Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal hBackGroundHandle As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 hBackGroundHandle バックグランド処理のハンドルを指定します。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 78: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 76 -

DioGetBackGroundStatus バックグランド処理の設定情報、実行状態を取得します。 宣言 Declare Function DioGetBackGroundStatus Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal hBackGroundHandle As Long,ByRef pnStartPoint As Long, ByRef pnPointNum As Long,ByRef pnValueNum As Long,ByRef pnCycle As Long,ByRef pnCount As Long,ByRef pnOption As Long,ByRef pnExecute As Long,ByRef pnExecCount As Long,ByRef pnBufferOffset As Long,ByRef pnOver As Long) As Long

パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 hBackGroundHandle バックグランド処理のハンドルを指定します。 pnStartPoint 設定された入出力開始接点番号が返されます。 pnPointNum 設定された接点数が返されます。 pnValueNum ひとつの接点に対して確保したバッファ数が返されます。 pnCycle 設定されたバックグランド処理周期、監視分解能が返されます。 pnCount 設定された処理回数が返されます。 pnOption 将来拡張用 pnExecute 実行状態を示す値が返されます。 値 意味 0 停止中 1 実行中 pnExecCount 実行された回数が返されます。 pnBufferOffset 実行中のデータが格納されているオフセット位置が返されます。 pnOver バッファオーバー発生の有無を示す値が返されます。

値 意味 0 - 1 バッファオーバー発生

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioInputPointBack

DioSetBackGround関数で設定した任意の点数の入力接点の状態をバックグランドで読み込みます。 宣言 Declare Function DioInputPointBack Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal hBackGroundHandle As Long,ByRef pBuffer As Long,ByVal nNumberOfBytesToRead As Long,ByRef lpOverlapped As OVERLAPPED) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 hBackGroundHandle バックグランド処理のハンドルを指定します。 pBuffer バッファへのポインタを指定します。このバッファに任意の点数の入力接点

より取得した状態が格納されます。 nNumberOfBytesToRead デバイスから入力するバイト数を指定します。 lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。

戻り値 関数が成功すると0が返されます。Visual Basic上で非同期に実行させる場合、本関数の呼び出しと同時には非同期I/O動作中ですので、リターンコード &hC00008が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 nNumberOfBytesToReadは下式により求めます。

nNumberOfBytesToRead = dwPointNum × dwValueNum × 4[sizeof(int)] dwPointNumとdwValueNumはDioSetBackGround関数に設定した値を指定します。 DioWatchPointBack関数では接点の状態に変化があったときのみ、そのデータの取得を行うのに対し、本関数は、設定された周期でデータの取得を行います。

Page 79: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 77 - Interface Corporation

DioOutputPointBack

DioSetBackGround関数で設定した任意の点数の出力接点の出力をバックグランドで制御します。 宣言 Declare Function DioOutputPointBack Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal hBackGroundHandle As Long,ByRef pBuffer As Long,ByVal nNumberOfBytesToWrite As Long,ByRef lpOverlapped As OVERLAPPED) As Long

パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 hBackGroundHandle バックグランド処理のハンドルを指定します。 pBuffer バッファへのポインタを指定します。このバッファに格納した値が任意の

点数の出力接点より出力されます。 nNumberOfBytesToRead デバイスから出力するバイト数を指定します。 lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。

戻り値 関数が成功すると0が返されます。Visual Basic上で非同期に実行させる場合、本関数の呼び出しと同時には非同期I/O動作中ですので、リターンコード &hC00008が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 nNumberOfBytesToReadは下式により求めます。

nNumberOfBytesToRead = dwPointNum × dwValueNum × 4[sizeof(int)] dwPointNumとdwValueNumはDioSetBackGround関数に設定した値を指定します。

DioWatchPointBack

DioSetBackGround関数で設定した任意の点数の状態を監視します。 宣言 Declare Function DioWatchPointBack Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal hBackGroundHandle As Long,ByRef pBuffer As Long,ByVal nNumberOfBytesToRead As Long,ByRef lpOverlapped As OVERLAPPED) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 hBackGroundHandle バックグランド処理のハンドルを指定します。 pBuffer バッファへのポインタを指定します。このバッファに取得した任意の点数

の状態が格納されます。 nNumberOfBytesToRead デバイスから入力するバイト数を指定します。 lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。

戻り値 関数が成功すると0が返されます。Visual Basic上で非同期に実行させる場合、本関数の呼び出しと同時には非同期I/O動作中ですので、リターンコード &hC00008が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 nNumberOfBytesToReadは下式により求めます。

nNumberOfBytesToRead = dwPointNum × dwValueNum × 4[sizeof(int)] dwPointNumとdwValueNumはDioSetBackGround関数に設定した値を指定します。 DioInputPointBack関数では設定された周期でデータの取得を行うのに対し、本関数は状態に変化があったときのみ、そのデータの取得を行います。

Page 80: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 78 -

DioGetInputHandShakeConfig

DioSetInputHandShakeConfig関数により設定した、制御信号を使用したハンドシェーク入力の設定情報を取得します。 宣言 Declare Function DioGetInputHandShakeConfig Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pnInputHandShakeConfig As Long,ByRef pdwBitMask1 As Long,ByRef pdwBitMask2 As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pnInputHandShakeConfig ハンドシェーク入力にSTB1イベントを使用するか否かを示す値が返されま

す。 値 意味 0 STB1イベントを使用しません。 FBIDIO_STB1_ENABLE STB1イベントを使用します。

FBIDIO_STB1_HIGH_EDGE

STB1の立ち上がりエッジのタイミングをSTB1信号有効とします

pdwBitMask1 設定された入力データマスクビットが返されます。(IN1~IN32) pdwBitMask2 設定された入力データマスクビットが返されます。(IN33~IN64)

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioSetInputHandShakeConfig

制御信号を使用したハンドシェーク入力の設定を行います。 宣言 Declare Function DioSetInputHandShakeConfig Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nInputHandShakeConfig As Long,ByVal dwBitMask1 As Long,ByVal dwBitMask2 As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nInputHandShakeConfig ハンドシェーク入力にSTB1イベントを使用するか否かを示す値を指定し

ます。 値 意味 0 STB1イベントを使用しません。 FBIDIO_STB1_ENABLE STB1イベントを使用します。

FBIDIO_ACK2_HIGH_ED FBIDIO_WAIT_LAST_ACK2 GE

ACK2の立ち上がりエッジのタイミングをACK2信号有効とします DioOutputHandShake関数/ DioOutputHandShakeEx関数による最終データの出力後、ACK2の応答があった時点で関数が完了となります。このフラグを指定しない場合は、最終データの出力後ACK2の応答を待たずに上記出力関数が完了となります。

入力データマスクビットを指定します。(IN1~IN32) 下記のように各ビットが入力接点に対応しています。電源ON時のデフォルトはすべてのデータが無効に設定されています。

Bit31 Bit30 Bit29 … Bit2 Bit1 Bit0

dwBitMask1

IN32 IN31 IN30 … IN3 IN2 IN1 入力データマスクビットを指定します。(IN33~IN64) 下記のように各ビットが入力接点に対応しています。電源ON時のデフォルトはすべてのデータが無効に設定されています。

Bit31 Bit30 Bit29 … Bit2 Bit1 Bit0

dwBitMask2

IN64 IN63 IN62 … IN35 IN34 IN33 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 81: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 79 - Interface Corporation

DioGetOutputHandShakeConfig DioSetOutputHandShakeConfig関数により設定した、制御信号を使用したハンドシェーク出力の設定情報を取得します。 宣言 Declare Function DioGetOutputHandShakeConfig Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pnOutputHandShakeConfig As Long,ByRef pdwBitMask1 As Long,ByRef pdwBitMask2 As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pnOutputHandShakeConfig ハンドシェーク出力にACK2イベントを使用するか否かを示す値が返され

ます。 値 意味 0 ACK2イベントを使用しません。 FBIDIO_ACK2_ENABLE ACK2イベントを使用します。

FBIDIO_ACK2_HIGH_ED FBIDIO_WAIT_LAST_ACK2 GE

ACK2の立ち上がりエッジのタイミングをACK2信号有効とします。 DioOutputHandShake関数/ DioOutputHandShakeEx関数による最終データの出力後、ACK2の応答があった時点で関数が完了となります。このフラグを指定しない場合は、最終データの出力後ACK2の応答を待たずに上記出力関数が完了となります。

pdwBitMask1 設定された出力データマスクビットが返されます。(OUT1~OUT32) pdwBitMask2 設定された出力データマスクビットが返されます。(OUT33~OUT64)

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioSetOutputHandShakeConfig

制御信号を使用したハンドシェーク出力の設定を行います。 宣言 Declare Function DioSetOutputHandShakeConfig Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nOutputHandShakeConfig As Long,ByVal dwBitMask1 As Long,ByVal dwBitMask2 As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nOutputHandShakeConfig ハンドシェーク入力にACK2イベントを使用するか否かを示す値を指定し

ます。 値 意味 0 ACK2イベントを使用しません。 FBIDIO_ACK2_ENABLE ACK2イベントを使用します。

FBIDIO_ACK2_HIGH_ED FBIDIO_WAIT_LAST_ACK2 GE

ACK2の立ち上がりエッジのタイミングをACK2信号有効とします。 DioOutputHandShake関数/ DioOutputHandShakeEx関数による最終データの出力後、ACK2の応答があった時点で関数が完了となります。このフラグを指定しない場合は、最終データの出力後ACK2の応答を待たずに上記出力関数が完了となります。

出力データマスクビットを指定します。(OUT1~OUT32) 下記のように各ビットが入力接点に対応しています。電源ON時のデフォルトはすべてのデータが無効に設定されています。

Bit31 Bit30 Bit29 … Bit2 Bit1 Bit0

dwBitMask1

OUT32 OUT31 OUT30 … OUT3 OUT2 OUT1 出力データマスクビットを指定します。(OUT33~OUT64) 下記のように各ビットが入力接点に対応しています。電源ON時のデフォルトはすべてのデータが無効に設定されています。

Bit31 Bit30 Bit29 … Bit2 Bit1 Bit0

dwBitMask2

OUT64 OUT63 OUT62 … OUT35 OUT34 OUT33 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 82: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 80 -

DioInputHandShake

制御信号を使用したハンドシェーク入力を行います。 宣言 Declare Function DioInputHandShake Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef lpBuffer As Any,ByVal nNumberOfBytesToRead As Long,ByRef lpNumberOfBytesRead As Long,ByRef lpOverlapped As OVERLAPPED) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpBuffer バッファへのポインタを指定します。このバッファに取得したデータが格

納されます。 nNumberOfBytesToRead デバイスから入力するバイト数を指定します。 lpNumberOfBytesRead 入力されたバイト数が返されます。 lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 オーバーラップ構造体(lpOverlapped)を指定した非同期コールの場合、変化がない場合はFBIDIO_ERROR_IO_PENDINGを返し非同期での動作となります。またDioSetInputHandShakeConfig関数よりハンドシェーク入力動作の設定を行ってからハンドシェーク入力を開始してください。1ポートのデータを1バイトで表現します。 例:32点のDIOの場合1×4バイトが一度の入力に使用されるデータとします。 ボード製品型式 PCI-2152C、2790C、2798C、CTP-2152、2790、2798、CPZ-2152、2790、2798にてSTB1割り込みイベントを使用したハンドシェーク入力(STB1割り込みイベントの使用はDioSetInputHandShakeConfig関数にて設定)を行う場合、DioSetLatchStatus関数によりデータとして使用する接点に対応する入力状態ラッチ回路の接続を有効に設定する必要があります。

DioInputHandShakeEx

制御信号を使用したハンドシェーク入力を行います。(コールバック関数有り:Windows 2000/NTでのみ使用可能) 宣言 Declare Function DioInputHandShakeEx Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef lpBuffer As Any,ByVal nNumberOfBytesToRead As Long,ByRef lpOverlapped As OVERLAPPED,ByVal lpCompletionRoutine As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpBuffer バッファへのポインタを指定します。このバッファに取得したデータが格

納されます。 nNumberOfBytesToRead デバイスから入力するバイト数を指定します。 lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。 lpCompletionRoutine 完了ルーチンへのポインタを指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 本API関数はWindows XP/2000/NTにおいてのみ有効です。Windows Me/98/95で本関数を呼び出した場合には、FBIDIO_ERROR_NOT_SUPPORTEDが返されます。

Page 83: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 81 - Interface Corporation

DioOutputHandShake

制御信号を使用したハンドシェーク出力を行います。 宣言 Declare Function DioOutputHandShake Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef lpBuffer As Any,ByVal nNumberOfBytesToWrite As Long,ByRef lpNumOfBytesWritten As Long,ByRef lpOverlapped As OVERLAPPED) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpBuffer バッファへのポインタを指定します。このバッファに格納したデータが出

力されます。 nNumberOfBytesToRead デバイスから出力するバイト数を指定します。 lpNumberOfBytesWritten 出力されたバイト数が返されます。 lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 オーバーラップ構造体(lpOverlapped)を指定した非同期コールの場合、変化がない場合はFBIDIO_ERROR_IO_PENDINGを返し非同期での動作となります。またDioSetInputHandShakeConfig関数よりハンドシェーク入力動作の設定を行ってからハンドシェーク入力を開始してください。1ポートのデータを1バイトで表現します。 例:32点のDIOの場合1×4バイトが一度の入力に使用されるデータとします。

DioOutputHandShakeEx

制御信号を使用したハンドシェーク出力を行います。(コールバック関数有り:Windows 2000/NTでのみ使用可能) 宣言 Declare Function DioOutputHandShakeEx Lib “FbiDio.DLL” ( ByVal hDeviceHandle As Long, ByRef lpBuffer As Any,ByVal nNumberOfBytesToWrite As Long, ByRef lpOverlapped As OVERLAPPED,ByVal lpCompletionRoutine As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpBuffer バッファへのポインタを指定します。このバッファに格納したデータが出

力されます。 nNumberOfBytesToRead デバイスから出力するバイト数を指定します。 lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。 lpCompletionRoutine 完了ルーチンへのポインタを指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 本API関数はWindows XP/2000/NTにおいてのみ有効です。Windows Me/98/95で本関数を呼び出した場合には、FBIDIO_ERROR_NOT_SUPPORTEDが返されます。

DioStopInputHandShake 指定されたデジタル入出力ボードのハンドシェーク入力を停止します。 宣言 Declare Function DioStopInputHandShake Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 84: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 82 -

DioStopOutputHandShake

指定されたデジタル入出力ボードのハンドシェーク出力を停止します。 宣言 Declare Function DioStopOutputHandShake Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioGetHandShakeStatus

ハンドシェーク入出力の状態を取得します。 宣言 Declare Function DioGetHandShakeStatus Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pdwDeviceStatus As Long,ByRef pdwInputedBuffNum As Long,ByRef pdwOutputedBuffNum As Long) As Long パラメータ

HDeviceHandle 有効なデバイスハンドルを指定します。

PdwDeviceStatus 現在のデバイスの状態を以下のビット構成で格納されます。該当ビットが1の時、有効です。

位置 意味 Bit0 ハンドシェーク入力 Bit1 ハンドシェーク出力 pdwInputedBuffNum ハンドシェーク入力実行中の場合に、入力済みバッファ数が格納されます。 pdwOutputedBuffNum ハンドシェーク出力実行中の場合に、残り出力バッファ数が格納されます。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioGetOverlappedResult

ハンドシェーク入出力(DioInputHandShake/DioOutputHandShake)関数の非同期コール時の、実際に入出力されたバイト数を取得します。 ※ 同期コール時には、本関数は必要ありません。

宣言 Declare Function DioGetOverlappedResult Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long, ByRef lpOverlapped As OVERLAPPED, ByRef lpNumberOfBytes As Long, ByVal bWait As Boolean) As Long

パラメータ

HDeviceHandle 有効なデバイスハンドルを指定します。

lpOverlapped DioInputHandShake/DioOutputHandShake関数で指定した、OVERLAPPEDデータ構造体へのポインタを指定して下さい。

lpNumberOfBytes 実際に入出力されたバイト数を格納する変数へのポインタを指定します。

bWait

非同期操作の完了を待つかどうかを指定します。TRUE を指定すると、この関数は、操作が完了するまで待機します。FALSE を指定すると、この関数は、すぐに制御を返します。このとき、もし操作が未処理であれば、関数 の戻り値は、ERROR_IO_INCOMPLETE になります。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 85: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 83 - Interface Corporation

DioInputByte

デジタル入出力ボードの指定した接点8点分のデータを読み込み、1バイト(8ビット)の変数に格納します。 宣言 Declare Function DioInputByte Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nNo As Long, ByRef pbValue As Byte) As Long パラメータ

hDeviceHandl 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。 値 意味 FBIDIO_IN1_8 IN1~IN8の8点分のデータを読み込みます。 FBIDIO_IN9_16 IN9~IN16の8点分のデータを読み込みます。 FBIDIO_IN17_24 IN17~IN24の8点分のデータを読み込みます。 FBIDIO_IN25_32 IN25~IN32の8点分のデータを読み込みます。 FBIDIO_IN33_40 IN33~IN40の8点分のデータを読み込みます。 FBIDIO_IN41_48 IN41~IN48の8点分のデータを読み込みます。 FBIDIO_IN49_56 IN49~IN56の8点分のデータを読み込みます。 FBIDIO_IN57_64 IN57~IN64の8点分のデータを読み込みます。 pbValue バッファへのポインタを指定します。このバッファに取得したデータが格

納されます。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioInputWord

デジタル入出力ボードの指定した接点16点分のデータを読み込み、1ワード(16ビット)の変数に格納します。 宣言 Declare Function DioInputWord Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nNo As Long, ByRef pwValue As Integer) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。 値 意味 FBIDIO_IN1_16 IN1~IN16の16点分のデータを読み込みます。

FBIDIO_IN17_32 IN17~IN32の16点分のデータを読み込みます。

FBIDIO_IN33_48 IN33~IN48の16点分のデータを読み込みます。

FBIDIO_IN49_64 IN49~IN64の16点分のデータを読み込みます。

pwValue バッファへのポインタを指定します。このバッファに取得したデータが格

納されます。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 86: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 84 -

DioInputDword

デジタル入出力ボードの指定した接点32点分のデータを読み込み、1ダブルワード(32ビット)の変数に格納します。 宣言 Declare Function DioInputDword Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nNo As Long,ByRef pdwValue As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。 値 意味 FBIDIO_IN1_32 IN1~IN32の32点分のデータを読み込みます。

FBIDIO_IN33_64 IN33~IN64の32点分のデータを読み込みます。

pdwValue バッファへのポインタを指定します。このバッファに取得したデータが格

納されます。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioOutputByte

デジタル入出力ボードの指定した接点8点分の出力を制御します。 宣言 Declare Function DioOutputByte Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nNo As Long,ByVal bValue As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。 値 意味 FBIDIO_OUT1_8 OUT1~OUT8の8点分のデータを出力します。

FBIDIO_OUT9_16 OUT9~OUT16の8点分のデータを出力します。

FBIDIO_OUT7_24 OUT17~OUT24の8点分のデータを出力します。

FBIDIO_OUT25_32 OUT25~OUT32の8点分のデータを出力します。

FBIDIO_OUT33_40 OUT33~OUT40の8点分のデータを出力します。

FBIDIO_OUT41_48 OUT41~OUT48の8点分のデータを出力します。

FBIDIO_OUT49_56 OUT49~OUT56の8点分のデータを出力します。

FBIDIO_OUT57_64 OUT57~OUT64の8点分のデータを出力します。

bValue バッファへのポインタを指定します。このバッファに格納したデータが出

力されます。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 87: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 85 - Interface Corporation

DioOutputWord

デジタル入出力ボードの指定した接点16点分の出力を制御します。 宣言 Declare Function DioOutputWord Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nNo As Long, ByVal wValue As Integer) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。 値 意味

FBIDIO_OUT1_16 OUT1~OUT16の16点分のデータを出力します。

FBIDIO_OUT17_32 OUT17~OUT32の16点分のデータを出力します。

FBIDIO_OUT33_48 OUT33~OUT48の16点分のデータを出力します。

FBIDIO_OUT49_64 OUT49~OUT64の16点分のデータを出力します。

wValue バッファへのポインタを指定します。このバッファに格納したデータが出

力されます。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioOutputDword

デジタル入出力ボードの指定した接点32点分の出力を制御します。 宣言 Declare Function DioOutputDword Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long, ByVal nNo As Long, ByVal dwValue As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。 値 意味

FBIDIO_OUT1_32 OUT1~OUT32の32点分のデータを出力します。

FBIDIO_OUT33_64 OUT33~OUT64の32点分のデータを出力します。

dwValue バッファへのポインタを指定します。このバッファに格納したデータが出

力されます。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 88: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 86 -

DioGetAckStatus

デジタル入出力ボードのACK2端子の状態、ACK2レジスタの状態、STB2端子の状態を取得します。 宣言 Declare Function DioGetAckStatus Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pbAckStatus As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbAckStatus バッファへのポインタを指定します。このバッファにACK2端子の状態、

ACK2レジスタの状態、STB2端子の状態が下記のビット構成で格納されます。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

ACK2 ACKR2 STB2 - - - - IR.IN2

ACK2[ACK2端子の状態]

値 意味 0 Low 1 High

ACKR2[ACK2レジスタの状態] 値 意味

0 ACK2がLowになったことを示します。ACK2端子がHighになってもステータスを保持します。

1 ACK2がHighのまま変化がないことを示します。

STB2をLowにすることで、ACK2レジスタはクリアされます

STB2[STB2端子の状態] 値 意味 0 Low 1 High

IR.IN2[IR.IN2端子の状態] 値 意味 0 Low 1 High

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioSetAckPulseCommand

デジタル入出力ボードのACK1出力制御、汎用パルス出力PULS.OUT1の出力制御を行います。 宣言 Declare Function DioSetAckPulseCommand Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal bCommand As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 bCommand バッファへのポインタを指定します。このバッファに設定された値により

各制御を行います。制御は下記のビットの組み合わせで行います。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

ACK11

ACK10 PO12 PO11 PO10 - - -

ACK1出力制御 ACK11 ACK10 処理 0 1 ACK1端子をクリア( Low → HIgh ) 1 0 ACK1端子をセット( Highw → Low )

(他の設定は無効です。) 汎用パルス出力(PULS.OUT1)制御(他の設定は無効です。)

PO12 PO11 PO10 処理 0 0 1 PULS.OUT1端子をHighにします 0 1 0 PULS.OUT1端子をLowにします

1 0 0 PULS.OUT1端子からLowパルスを出力します

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 89: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 87 - Interface Corporation

DioGetStbStatus

デジタル入出力ボードのSTB1端子の状態、STB1レジスタの状態、ACK1端子の状態を取得します。 宣言 Declare Function DioGetStbStatus Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long, ByRef pbStbStatus As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbStbStatus バッファへのポインタを指定します。このバッファにSTB1端子の状態、

STB1レジスタの状態、ACK1端子の状態が下記のビット構成で格納されます。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

STB1 STBR2 ACK1 LF - - - IR.IN1

STB1[STB1端子の状態] 値 意味 0 Low 1 High

STBR2[STB1レジスタの状態] 値 意味

0 STB1がLowになったことを示します。STB1端子がHighになってもステータスを保持します。

1 STB1がHighのまま変化がないことを示します。

ACK1をLowにすることで、STB1レジスタはクリアされます

LF[入力ラッチ機能の状態] 値 意味 0 データラッチしていない 1 データラッチしている

IR.IN1[IR.IN1端子の状態] 値 意味 0 Low 1 High

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioSetStbPulseCommand

デジタル入出力ボードのSTB2出力制御、汎用パルス出力PULS.OUT2の出力制御を行います。 宣言 Declare Function DioSetStbPulseCommandLib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal bCommand As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 bCommand バッファへのポインタを指定します。このバッファに設定された値により各

制御を行います。制御は下記のビットの組み合わせで行います。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 STB21 STB20 PO22 PO21 PO20 - - - ACK1出力制御

ACK21 ACK20 処理 0 1 STB2端子をクリア( Low → HIgh ) 1 0 STB2端子をセット( High → Low )

(他の設定は無効です。) 汎用パルス出力(PULS.OUT1)制御

PO22 PO21 PO20 処理 0 0 1 PULS.OUT2端子をHighにします 0 1 0 PULS.OUT2端子をLowにします 1 0 0 PULS.OUT2端子からLowパルスを出力します (他の設定は無効です。)

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 90: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 88 -

DioInputUniversalPoint

汎用入力端子の状態を読み込みます。※PCI製品に汎用入力端子はありません。 宣言 Declare Function DioInputUniversalPoint Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long, ByRef pdwUniversalPointAs Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwUniUniversalPoint 汎用入力端子状態を格納するバッファを指定します。取得したデータは下

記のようにビット毎に汎用入力端子と対応しています。

Bit31~9 Bit8 Bit7 ・・・ Bit2 Bit1 Bit0

未使用 PWR.IN1 DI8 ・・・ DI3 DI2 DI1

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioOutputUniversalPoint

汎用出力端子の出力を制御します。※PCI製品に汎用入力端子はありません。 宣言 Declare Function DioOutputUniversalPoint Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long, ByVal dwUniversalPoint As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwUniUniversalPoint 汎用出力端子の出力データを指定します。出力データは下記のようにビッ

ト毎に汎用出力端子と対応しています。

Bit31~8 Bit7 Bit6 ・・・ Bit2 Bit1 Bit0

未使用 DO81 DO7 ・・・ DO3 DO2 DO1 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioSetTimeOut

ハンドシェーク入出力時のタイムアウト時間を設定します。 宣言 Declare Function DioSetTimeOut Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal dwInputTotalTimeout As Long,ByVal dwInputIntervalTimeout As Long,ByVal dwOutputTotalTimeout As Long,ByVal dwOutputIntervalTimeout As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwInputTotalTimeout ハンドシェーク入力時のトータルタイムアウト値を10ms単位で指定しま

す。 DioInputHandShake関数、DioInputHandShakeEx関数において指定したデータ長の入力が全て完了するまでの時間より大きい値を指定する必要があります。

dwInputIntervalTimeout ハンドシェーク入力時の各接点情報間でのタイムアウト値を10ms単位で指定します。DioInputHandShake関数、DioInputHandShakeEx関数において各接点情報の入力時における前の入力から次の入力までの時間より大きい値を指定する必要があります。

dwOutputTotalTimeout ハンドシェーク出力時のトータルタイムアウト値を10ms単位で指定します。DioOutputHandShake関数、DioOutputHandShakeEx関数において指定したデータ長の出力が全て完了するまでの時間より大きい値を指定する必要があります。

dwOutputIntervalTimeout ハンドシェーク出力時の各接点情報間でのタイムアウト値を10ms単位で指定します。DioOutputHandShake関数、DioOutputHandShakeEx関数において各接点情報の出力時における前の出力から次の出力までの時間より大きい値を指定する必要があります。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 91: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 89 - Interface Corporation

DioGetTimeOut

ハンドシェーク入出力時のタイムアウト設定値を取得します。 宣言 Declare Function DioGetTimeOut Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pdwInputTotalTimeout As Long,ByRef pdwInputIntervalTimeout As Long, ByRef pdwOutputTotalTimeout As Long,ByRef pdwOutputIntervalTimeout As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwInputTotalTimeout ハンドシェーク入力時のトータルタイムアウト値が10ms単位で返されま

す。 pdwInputIntervalTimeout ハンドシェーク入力時の各接点情報間でのタイムアウト値が10ms単位で

返されます。 pwOutputTotalTimeout ハンドシェーク出力時のトータルタイムアウト値が10ms単位で返されま

す。 pdwOutputIntervalTimeout ハンドシェーク出力時の各接点情報間でのタイムアウト値が10ms単位で

返されます。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioSetIrqMask

デジタル入出力ボードの割り込みマスクの状態を設定します。 宣言 Declare Function DioSetIrqMask Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal bIrqMask As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 bIrqMask バッファへのポインタを指定します。このバッファに設定された値により,

割り込み要因のマスク/アンマスクの設定が行われます。設定は下記のビットの組み合わせで行います。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - SIGR SIGT SIG4 SIG3 SIG2 SIG1

SIGR=外部割り込み SIGT=タイマ割り込み

値 意味 0 マスク 1 アンマスク

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioGetIrqMask

デジタル入出力ボードの割り込みマスクの状態を取得します。 宣言 Declare Function DioGetIrqMask “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pbIrqMask As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbIrqMask バッファへのポインタを指定します。このバッファにボードに設定された割

り込み要因のマスク/アンマスクの状態が格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

- - SIGR SIGT SIG4 SIG3 SIG2 SIG1

SIGR=外部割り込み SIGT=タイマ割り込み

値 意味 0 マスク 1 アンマスク

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 92: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 90 -

DioSetIrqConfig

デジタル入出力ボードの割り込み要因の割り当て、割り込み発生論理を設定します。 宣言 Declare Function DioSetIrqConfig Lib “FbiDIo.DLL” (ByVal hDeviceHandle As Long,ByVal bIrqConfig As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 bIrqConfig バッファへのポインタを指定します。このバッファに割り込み要因の割り

当て、割り込み発生論理の設定データを設定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 EDS4 EDS3 EDS3 EDS1 SIG4 SIG3 SIG2 SIG1 割り込み発生論理設定状態

EDS1 SIG1の割り込み発生論理の設定 EDS2 SIG2の割り込み発生論理の設定 EDS3 SIG3の割り込み発生論理の設定 EDS4 SIG4の割り込み発生論理の設定 値 意味 0 High → Low 1 Low → High

SIG1[割り込み要因割り当て] 値 意味 0 IN1 1 STB1

SIG2[割り込み要因割り当て] 値 意味 0 IN2 1 IR.IN1

SIG3[割り込み要因割り当て] 値 意味 0 IN3 1 ACK2

SIG4[割り込み要因割り当て] 値 意味 0 IN4 1 IR.IN2

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 93: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 91 - Interface Corporation

DioGetIrqConfig

デジタル入出力ボードの割り込み要因の割り当て、割り込み発生論理の設定状態を取得します。 宣言 Declare Function DioGetIrqConfig Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pbIrqConfig As Byte) As Long

パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbIrqConfig バッファへのポインタを指定します。このバッファに割り込み要因の割り

当て、割り込み発生論理の状態が格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 EDS4 EDS3 EDS3 EDS1 SIG4 SIG3 SIG2 SIG1 割り込み発生論理設定状態 EDS1 SIG1の割り込み発生論理の設定 EDS2 SIG2の割り込み発生論理の設定 EDS3 SIG3の割り込み発生論理の設定 EDS4 SIG4の割り込み発生論理の設定 値 意味 0 High → Low 1 Low → High SIG1[割り込み要因割り当て] 値 意味 0 IN1 1 STB1 SIG2[割り込み要因割り当て] 値 意味 0 IN2 1 IR.IN1 SIG3[割り込み要因割り当て] 値 意味 0 IN3 1 ACK2 SIG4[割り込み要因割り当て] 値 意味 0 IN4 1 IR.IN2

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 94: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 92 -

DioGetDeviceConfig

デバイスがサポートしている機能情報を取得します。 宣言 Declare Function DioGetDeviceConfig Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pdwDeviceConfig As Long) As Long

パラメータ

HDeviceHandle 有効なデバイスハンドルを指定します。 pdwDeviceConfig バッファへのポインタを指定します。このバッファにデバイスがサポート

している機能情報を以下のビット構成で格納されます。該当ビットが1の時、有効を意味します。

位置 機能 Bit0 IN1~IN8のサポート Bit1 IN9~IN16のサポート Bit2 IN17~IN24のサポート Bit3 IN25~IN32のサポート Bit4 IN33~IN40のサポート Bit5 IN41~IN48のサポート Bit6 IN49~IN56のサポート Bit7 IN57~IN64のサポート Bit8 OUT1~OUT8のサポート Bit9 OUT9~OUT16のサポート Bit10 OUT17~OUT24のサポート Bit11 OUT25~OUT32のサポート Bit12 OUT33~OUT40のサポート Bit13 OUT41~OUT48のサポート Bit14 OUT49~OUT56のサポート Bit15 OUT57~OUT64のサポート Bit16 STB1、ACK1信号の利用 Bit17 STB2、ACK2信号の利用 Bit18 IR.IN1信号の利用 Bit19 IR.IN2信号の利用 Bit20 PULS.OUT1信号の利用 Bit21 PULS.OUT2信号の利用 Bit22 汎用DI1のみサポート Bit23 汎用DI1~4のサポート Bit24 汎用DI5~8のサポート Bit25 汎用DO1のみサポート Bit26 汎用DO1~4のサポート Bit27 汎用DO5~8のサポート Bit28 PWR.IN1の利用 Bit29 PWR.IN2の利用 Bit30 インターバルタイマの使用

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 95: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 93 - Interface Corporation

DioSetTimerConfig

インターバルタイマの設定を行います。 宣言 Declare Function DioSetTimerConfig Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal bTimerConfigValue As Byte) As Long

パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 bTimerConfigValue バッファへのポインタを指定します。このバッファにインターバルタイマ

の設定を以下のビット構成で設定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - CTL7 CTL6 CTL5 CTL4 CTL3 CTL2 CTL1

タイマ周期はCTL5~7で設定した基準周期と、CTL1~4で設定した分周比の積となります。(周期=基準周期×分周比)

CTL4 CTL3 CTL2 CTL1 タイマ停止 0 0 0 0 1分周 0 0 0 1 2分周 0 0 1 0 3分周 0 0 1 1 4分周 0 1 0 0 5分周 0 1 0 1 6分周 0 1 1 0 7分周 0 1 1 1 8分周 1 0 0 0 9分周 1 0 0 1 10分周 1 0 1 0 11分周 1 0 1 1 12分周 1 1 0 0 13分周 1 1 0 1 14分周 1 1 1 0 15分周 1 1 1 1 CTL5~7基準周期設定 CTL7 CTL6 CTL5 10μs 0 0 0 100μs 0 0 1 1ms 0 1 0 10ms 0 1 1 100ms 1 0 0

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 96: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 94 -

DioGetTimerConfig

インターバルタイマの設定情報を取得します。 宣言 Declare Function DioGetTimerConfig Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pbTimerConfigValue As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbTimerConfigValue バッファへのポインタを指定します。このバッファにインターバルタイマ

の設定を以下のビット構成で格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - CTL7 CTL6 CTL5 CTL4 CTL3 CTL2 CTL1

タイマ周期はCTL5~7で設定した基準周期と、CTL1~4で設定した分周比の積となります。(周期=基準周期×分周比)

CTL4 CTL3 CTL2 CTL1 タイマ停止 0 0 0 0 1分周 0 0 0 1 2分周 0 0 1 0 3分周 0 0 1 1 4分周 0 1 0 0 5分周 0 1 0 1 6分周 0 1 1 0 7分周 0 1 1 1 8分周 1 0 0 0 9分周 1 0 0 1 10分周 1 0 1 0 11分周 1 0 1 1 12分周 1 1 0 0 13分周 1 1 0 1 14分周 1 1 1 0 15分周 1 1 1 1 CTL5~7基準周期設定 CTL7 CTL6 CTL5 10μs 0 0 0 100μs 0 0 1 1ms 0 1 0 10ms 0 1 1 100ms 1 0 0

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 97: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 95 - Interface Corporation

DioGetTimerCount

インターバルタイマのカウント値を取得します。 宣言 Declare Function DioGetTimerCount Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long, ByRef pbTimerCount As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbTimerCount バッファへのポインタを指定します。このバッファにインターバルタイマ

の現在のカウンタ値が以下のビット構成で格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - CTL4 CTL3 CTL2 CTL1

DioSetTimerConfigにより設定した周期における、現在の状態値を4bitカウンタで取得します。

CTL4 CTL3 CTL2 CTL1 0カウント 0 0 0 0 1カウント 0 0 0 1 2カウント 0 0 1 0 2カウント 0 0 1 1 4カウント 0 1 0 0 5カウント 0 1 0 1 6カウント 0 1 1 0 7カウント 0 1 1 1 8カウント 1 0 0 0 9カウント 1 0 0 1 10カウント 1 0 1 0 11カウント 1 0 1 1 12カウント 1 1 0 0 13カウント 1 1 0 1 14カウント 1 1 1 0 15カウント 1 1 1 1

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioSetLatchStatus

デジタル入出力ボードの入力状態ラッチ回路の接続を設定します。ラッチ回路の接続を指定するとSTB1端子のセットで入力データをラッチ(保持)することができます。STB1、ACK1端子を使用したハンドシェーク入力を行う場合に、信頼度を向上させることができます。 宣言 Declare Function DioSetLatchStatus Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long, ByVal bLatchStatus As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 bLatchStatus バッファへのポインタを指定します。このバッファに入力状態ラッチ回路

の接続状態を以下のビット構成で設定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

PORT7

PORT6

PORT5

PORT4

PORT3

PORT2

PORT1

PORT0

該当ビットが1の時、有効を意味します。

PORT0 IN1~IN8 PORT4 IN33~IN40 PORT1 IN9~IN16 PORT5 IN41~IN48 PORT2 IN17~IN24 PORT6 IN49~IN56 PORT3 IN25~IN32 PORT7 IN57~IN64

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 98: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 96 -

DioGetLatchStatus

デジタル入出力ボードの入力状態ラッチ回路の接続状態を取得します。 宣言 Declare Function DioGetLatchStatus Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pbLatchStatus As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbLatchStatus バッファへのポインタを指定します。このバッファに入力状態ラッチ回路

の接続状態が以下のビット構成で格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

PORT7

PORT6

PORT5

PORT4

PORT3

PORT2

PORT1

PORT0

該当ビットが1の時、有効を意味します。

PORT0 IN1~IN8 PORT1 IN9~IN16 PORT2 IN17~IN24 PORT3 IN25~IN32 PORT4 IN33~IN40 PORT5 IN41~IN48 PORT6 IN49~IN56 PORT7 IN57~IN64

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioGetResetInStatus

デジタル入出力ボードの外部リセット入力信号の状態を取得します。 宣言 Declare Function DioGetResetInStatus Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pbResetInStatus As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbResetInStatus 外部リセット入力信号の状態を示す値が返されます。

値 意味 0 リセット入力無効 1 リセット入力有効

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 99: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 97 - Interface Corporation

DioEventRequestPending

デジタル入出力ボードの割り込みイベント要求を待ちます。 宣言 Declare Function DioEventRequestPending Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal dwEventEnableMask As Long,ByRef pEventBuf As Long,ByRef lpOverlapped As OVERLAPPED) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwEventEnableMask バッファへのポインタを指定します。このバッファに許可するイベントを

以下のビットアサインで指定します。該当ビットが1のとき有効です。

Bit0 IN1からの入力信号または、STB1からの入力信号

Bit1 IN2からの入力信号または、IR.IN1(外部割り込み入力信号)からの入力信号

Bit2 IN3からの入力信号または、ACK2からの入力信号

Bit3 IN4からの入力信号または、IR.IN2(外部割り込み入力信号)からの入力信号

Bit4 インターバルタイマ Bit5 外部リセット入力(RSTIN)割り込み

pEventBuf バッファへのポインタを指定します。このバッファに通知されたイベントが以下のビットアサインで格納されます。該当ビットが1のとき有効です。

Bit0 IN1からの入力信号または、STB1からの入力信号

Bit1 IN2からの入力信号または、IR.IN1(外部割り込み入力信号)からの入力信号

Bit2 IN3からの入力信号または、ACK2からの入力信号

Bit3 IN4からの入力信号または、IR.IN2(外部割り込み入力信号)からの入力信号

Bit4 インターバルタイマ Bit5 外部リセット入力(RSTIN)割り込み lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 100: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 98 -

DioCommonGetPciDeviceInfo

デバイスID、リソース情報、ボードID(RSW1)等の情報を取得します。 ボード上のRSW1(ボードID)の設定値を取得し、複数枚のボードから目的のボードであるかを判断する等の目的で使用できます。 宣言 Declare Function DioCommonGetPciDeviceInfo Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pdwDeviceID As Long,ByRef pdwVenderID As Long,ByRef pdwClassCode As Long,ByRef pdwRevisionID As Long, ByRef pdwBaseAddress0 As Long,ByRef pdwBaseAddress1 As Long,ByRef pdwBaseAddress2 As Long,ByRef pdwBaseAddress3 As Long,ByRef pdwBaseAddress4 As Long,ByRef pdwBaseAddress5 As Long,ByRef pdwSubsystemID As Long,ByRef pdwSubsystemVenderID As Long,ByRef pdwInterruptLine As Long,ByRef pdwBoardID As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwDeviceID バッファへのポインタを指定します。このバッファにデバイスIDデータが

格納されます。弊社PCIバス用DIOボードは、製品型式の数字部分4桁が適用されます。PCI-2104Cならば2104(16進数では838h)、CTP-2725ならば2725(16進数ではAA5h)です。 PCIボードと CompactPCIボードを判別する必要がある場合、pdwSubsystemIDを参照してください。

pdwVenderID バッファへのポインタを指定します。このバッファにベンダIDデータが格納されます。弊社のベンダIDは、1147h(16進数)です。

pdwClassCode バッファへのポインタを指定します。このバッファにクラスコードデータが格納されます。

pdwRevisionID バッファへのポインタを指定します。このバッファにリビジョンIDデータが格納されます。

pdwBaseAddress0 バッファへのポインタを指定します。このバッファにリソース0データが格納されます。弊社PCIバス用DIOボードは、ここに占有するI/O領域が格納されます。取得した値をFFFChでマスクした値が占有するI/O領域のベースアドレスです。

pdwBaseAddress1 バッファへのポインタを指定します。このバッファにリソース1データが格納されます。弊社PCIバス用DIOボードでは、使用しません。

pdwBaseAddress2 バッファへのポインタを指定します。このバッファにリソース2データが格納されます。弊社PCIバス用DIOボードでは、使用しません。

pdwBaseAddress2 バッファへのポインタを指定します。このバッファにリソース3データが格納されます。弊社PCIバス用DIOボードでは、使用しません。

pdwBaseAddress4 バッファへのポインタを指定します。このバッファにリソース4データが格納されます。弊社PCIバス用DIOボードでは、使用しません。

pdwBaseAddress5 バッファへのポインタを指定します。このバッファにリソース5データが格納されます。弊社PCIバス用DIOボードでは、使用しません。

pdwSubsystemID バッファへのポインタを指定します。このバッファにサブシステムIDデータが格納されます。

pdwSubsystemVenderID バッファへのポインタを指定します。このバッファにデバイスIDデータが格納されます。

pdwInterruptLine バッファへのポインタを指定します。このバッファに割込みラインデータが格納されます。

pdwBoardID バッファへのポインタを指定します。このバッファにボードIDデータが格納されます。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 101: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 99 - Interface Corporation

DioEintSetIrqMask

PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の、エッジ検出割り込みマスク状態を設定します。DioEintSetIrqMaskで有効にした割り込みは、DioEventRequestPendingExによるイベント処理に利用します。 DioEintSetFilterConfigにより設定されているフィルタ時間以上のパルス幅を持つ入力が与えられたときにエッジ検出割り込みが発生します。 DioEintSetIrqMaskにより割り込みを有効にする場合、DioEintSetEdgeConfigによりエッジ検出条件の設定が行われていなければなりません。 宣言 Declare Function DioEintSetIrqMask Lib "FbiDio.DLL” (ByVal hDeviceHandle As Long, ByVal dwSetIrqMask As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwIrqMask IN1~IN32のエッジ検出割り込みのマスク/アンマスクを設定するデータを

指定します。電源導入時はすべてマスク状態(0)です。 Bit31 Bit30 ・・・ Bit1 Bit0 IN32 IN31 ・・・ IN2 IN1

戻り値 関数が成功すると0が返され、dwSetIrqMaskで指定された情報で、割り込み要因のマスク/アンマスクを設定します。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

DioEintGetIrqMask PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の、エッジ検出割り込みマスク状態を取得します。 宣言 Declare Function DioEintGetIrqMask Lib "FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pdwGetIrqMask As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwGetIrqMask IN1~IN32のエッジ検出割り込みのマスク/アンマスクを取得する変数への

ポインタを指定します。pdwGetIrqMaskの形式は、次のようになっています。 Bit31 Bit30 ・・・ Bit1 Bit0 IN32 IN31 ・・・ IN2 IN1

戻り値 関数が成功すると0が返され、pwGetIrqMaskに、現在の割り込みマスク設定を返します。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

DioEintSetEdgeConfig PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の、エッジ検出機能を設定します。DioEintSetEdgeConfigで設定したエッジ検出設定は、次の関数で得られるエッジ検出に影響を与えます。

DioEintInputPoint、DioEintInputByte、DioEintInputWord、 DioEintInputDword、DioEventRequestPending

宣言 Declare Function DioEintSetEdgeConfig Lib "FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal dwSetFallEdgeConfig As Long,ByVal dwSetRiseEdgeConfig As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwSetFallEdgeConfig IN1~IN32の立ち下がりエッジ検出を有効にするか、無効にするかを指定し

ます。電源投入時はすべて無効(0)です。 Bit31 Bit30 ・・・ Bit1 Bit0 IN32 IN31 ・・・ IN2 IN1 dwSetRiseEdgeConfig IN1~IN32の立ち上がりエッジ検出を有効にするか、無効にするかを指定し

ます。電源投入時はすべて無効(0)です。 Bit31 Bit30 ・・・ Bit1 Bit0 IN32 IN31 ・・・ IN2 IN1

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 102: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 100 -

DioEintGetEdgeConfig

PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の、現在のエッジ検出設定を取得します。 宣言 Declare Function DioEintGetEdgeConfig Lib "FbiDio.DLL”(ByVal hDeviceHandle As Long,ByRef pdwGetFallEdgeConfig As Long,ByRef pdwGetRiseEdgeConfig As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwGetFallEdgeConfig IN1~IN32の立ち下がりエッジ検出設定状態を返す変数へのポインタを指定

します。pdwGetFallEdgeConfigには、次の形式で立ち下がりエッジ検出設定が返されます。

Bit31 Bit30 ・・・ Bit1 Bit0 IN32 IN31 ・・・ IN2 IN1 dwGetRiseEdgeConfig IN1~IN32の立ち上がりエッジ検出設定状態を返す変数へのポインタを指定

します。pdwGetRiseEdgeConfigには、次の形式で立ち上がりエッジ検出設定が返されます。

Bit31 Bit30 ・・・ Bit1 Bit0 IN32 IN31 ・・・ IN2 IN1

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

DioEintSetEdgeConfigEx PCI-2162, CTP-2162, CTP/CPZ-294188のエッジ検出機能を設定します。 DioEintSetEdgeConfigExで設定したエッジ検出設定は、次の関数で得られるエッジ検出に影響を与えます。 DioEintInputPoint、DioEintInputByte、DioEintInputWord、 DioEintInputDword、DioEventRequestPendingEx 宣言 Declare Function DioEintSetEdgeConfigEx Lib "FbiDio.DLL"( _ ByVal DeviceHandle As Long, _ ByVal No As Long, _ ByVal FallEdgeConfig As Long, _ ByVal RiseEdgeConfig As Long _ )As Integer パラメータ

DeviceHandle DioOpen関数で取得したデバイスハンドルを指定してください。 No 設定する接点を下記の識別子で指定します。FBIDIO_IN1_32 IR1~IR32の32点分のエッジ検出

を設定します。 FBIDIO_IN33_64 IR33~IR64の32点分のエッジ検出を設定します。

SetFallEdgeConfig 対象接点の立下りエッジ検出を有効にするか、無効にするかを指定します。 SetRiseEdgeConfig 対象接点の立上りエッジ検出を有効にするか、無効にするかを指定します。

戻り値 DioEintSetEdgeConfigEx 関数は正常に終了しますと、0を返します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。

Page 103: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 101 - Interface Corporation

DioEintGetEdgeConfigEx

PCI-2162, CTP-2162, CTP/CPZ-294188の現在のエッジ検出設定を取得します。 宣言 Declare Function DioEintGetEdgeConfigEx Lib "FbiDio.DLL"( _ ByVal DeviceHandle As Long, _ ByVal No As Long, _ ByRef FallEdgeConfig As Long, _ ByRef RiseEdgeConfig As Long _ )As Integer パラメータ

DeviceHandle DioOpen関数で取得したデバイスハンドルを指定してください。 No 読み込む接点を下記の識別子で指定します。FBIDIO_IN1_32 IR1~IR32の32点分のエッジ検出

設定を読み込みます。 FBIDIO_IN33_64 IR33~IR64の32点分のエッジ検出設定を読み込みます。

GetFallEdgeConfig 読み込まれた立下りエッジ検出設定を格納する変数へのポインタを指定してください。Visual Basic、Delphiではデータを格納する変数を指定します。

GetRiseEdgeConfig 読み込まれた立上りエッジ検出設定を格納する変数へのポインタを指定してください。Visual Basic、Delphiではデータを格納する変数を指定します。

戻り値 DioEintGetEdgeConfigEx関数は正常に終了しますと、0を返します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。

DioEintInputPoint

任意の点数のエッジ検出データを読み込みます。指定した開始接点番号から1接点ずつINT型の変数にデータが格納されます。 DioEintInputPointにより、エッジ検出データを読み込んだ接点のエッジ検出データはクリアされます。 宣言 Declare Function DioEintInputPoint Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long,ByRef pBuffer As Long,ByVal dwStartNum As Long,ByVal dwNum As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pBuffer デバイスから読み取ったデータを受け取るバッファを指すポインタです。

pBufferが指すバッファ領域には、次の形式でエッジ検出データが格納されます。

pBuffer + 0 エッジ検出データ1(dwStartNumで指定した接点)

pBuffer + 1 エッジ検出データ2(dwStartNumで指定した接点+1)

・・・ ・・・

pBuffer + (dwNum – 1) エッジ検出データn(dwStartNumで指定した接点+dwNum-1)

エッジ検出データ Bit31~Bit2 Bit1 Bit0 ‘0’ 立ち上がりエッジ 立ち下がりエッジ 0:エッジなし

1:エッジあり dwStartNum 入力開始接点番号1~32を指定して下さい。 dwNum 入力接点数を指定して下さい。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 104: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 102 -

DioEintInputByte

PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の接点8点分のエッジ検出データを読み込みます。 DioEintInputByteによりエッジ検出データを読み出しを行った接点のエッジ検出データはクリアされます。 宣言 Declare Function DioEintInputByte Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long,ByVal nNo As Long,ByRef pbFallValue As Byte,ByRef pbRiseValue As Byte) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。

FBI_IN1_8 :IR1~IR8の8点分のデータを読み込みます。 FBI_IN9_16 :IR9~IR16の8点分のデータを読み込みます。 FBI_IN17_24:IR17~IR24の8点分のデータを読み込みます。 FBI_IN25_32:IR25~IR32の8点分のデータを読み込みます。

pbFallValue1 立ち下がりエッジ検出データを格納する変数へのポインタを指定してください。

pbRiseValue 立ち上がりエッジ検出データを格納する変数へのポインタを指定してください。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

DioEintInputWord PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の接点16点分のエッジ検出データを読み込みます。 DioEintInputWordによりエッジ検出データを読み出しを行った接点のエッジ検出データはクリアされます。 宣言 Declare Function DioEintInputWord Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long,ByVal nNo As Long,ByRef pwFallValue As Integer,ByRef pwRiseValue As Integer) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。

FBI_IN1_16 :IR1~IR16の16点分のデータを読み込みます。 FBI_IN17_32:IR17~IR32の16点分のデータを読み込みます。

pbFallValue1 立ち下がりエッジ検出データを格納する変数へのポインタを指定してください。

pbRiseValue 立ち上がりエッジ検出データを格納する変数へのポインタを指定してください。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 105: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 103 - Interface Corporation

DioEintInputDword

PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の接点32点分のエッジ検出データを読み込みます。 DioEintInputDwordによりエッジ検出データを読み出しを行った接点のエッジ検出データはクリアされます。 宣言 Declare Function DioEintInputDword Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long,ByVal nNo As Long,ByRef pdwFallValue As Long,ByRef pdwRiseValue As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo 読み込む接点を下記の識別子で指定します。

FBI_IN1_32 :IR1~IR32の32点分のデータを読み込みます。 pbFallValue1 立ち下がりエッジ検出データを格納する変数へのポインタを指定してくださ

い。 pbRiseValue 立ち上がりエッジ検出データを格納する変数へのポインタを指定してくださ

い。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

DioEintSetFilterConfig PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)のデジタルフィルタ機能を設定します。DioEintSetFilterConfigで設定したフィルタ時間よりも短い幅のパルスに対して無視するようになります。 DioEintSetFilterConfigで指定されたデジタルフィルタは、次の関数の実行時に影響を与えます。 DioEintInputPoint、DioEintInputByte、DioEintInputWord、 DioEintInputDword、DioEventRequestPendingEx 宣言 Declare Function DioEintSetFilterConfig Lib "FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nNo As Long,ByVal nSetFilterConfig As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo フィルタ設定を行う接点を下記の識別子で指定します。

FBIDIO_IN1_8 :IR1~IR8のフィルタを設定します。 FBIDIO_IN9_16 :IR9~IR16のフィルタを設定します。 FBIDIO_IN17_24:IR17~IR24のフィルタを設定します。 FBIDIO_IN25_32:IR25~IR32のフィルタを設定します。

nSetFilterConfig フィルタ時間を指定します。設定可能なフィルタ設定は次のとおりです。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 0 TBS TCN TBS:基準クロック指定 TCN:カウント数設定

TBS TCN ‘000’ ‘001’ ‘010’ ・・・ ‘110’ ‘111’

‘0000’ - - - ・・・ - - ‘0001’ 125ns 1μs 10μs ・・・ 100ms 無効 ‘0010’ 250ns 2μs 20μs ・・・ 200ms 無効 ‘0011’ 375ns 3μs 30μs ・・・ 300ms 無効 ‘0100’ 500ns 4μs 40μs ・・・ 400ms 無効 ‘0101’ 625ns 5μs 50μs ・・・ 500ms 無効 ‘0110’ 750ns 6μs 60μs ・・・ 無効 無効 ‘0111’ 875ns 7μs 70μs ・・・ 無効 無効 ‘1000’ 1000ns 8μs 80μs ・・・ 無効 無効 ‘1001’ 1125ns 9μs 90μs ・・・ 無効 無効 ‘1010’ 1250ns 10μs 100μs ・・・ 無効 無効 ‘1011’ 1375ns 11μs 110μs ・・・ 無効 無効 ‘1100’ 1500ns 12μs 120μs ・・・ 無効 無効 ‘1101’ 1625ns 13μs 130μs ・・・ 無効 無効 ‘1110’ 1750ns 14μs 140μs ・・・ 無効 無効 ‘1111’ 1875ns 15μs 150μs ・・・ 無効 無効 -:フィルタなし

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 106: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 104 -

DioEintGetFilterConfig

PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の、デジタルフィルタ設定値を取得します。 宣言 Declare Function DioEintSetFilterConfig Lib "FbiDio.DLL” (ByVal hDeviceHandle As Long,ByVal nNo As Long,ByRef pnGetFilterConfig As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo フィルタ設定を取得する接点を下記の識別子で指定します。

FBIDIO_IN1_8 :IR1~IR8のフィルタを設定します。 FBIDIO_IN9_16 :IR9~IR16のフィルタを設定します。 FBIDIO_IN17_24:IR17~IR24のフィルタを設定します。 FBIDIO_IN25_32:IR25~IR32のフィルタを設定します。

pnGetFilterConfig フィルタ時間を受け取る変数へのポインタを指定します。pnGetFilterConfigには次の値が返されます。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 0 TBS TCN TBS:基準クロック指定 TCN:カウント数設定

TBS TCN ‘000’ ‘001’ ‘010’ ・・・ ‘110’ ‘111’

‘0000’ - - - ・・・ - - ‘0001’ 125ns 1μs 10μs ・・・ 100ms 無効 ‘0010’ 250ns 2μs 20μs ・・・ 200ms 無効 ‘0011’ 375ns 3μs 30μs ・・・ 300ms 無効 ‘0100’ 500ns 4μs 40μs ・・・ 400ms 無効 ‘0101’ 625ns 5μs 50μs ・・・ 500ms 無効 ‘0110’ 750ns 6μs 60μs ・・・ 無効 無効 ‘0111’ 875ns 7μs 70μs ・・・ 無効 無効 ‘1000’ 1000ns 8μs 80μs ・・・ 無効 無効 ‘1001’ 1125ns 9μs 90μs ・・・ 無効 無効 ‘1010’ 1250ns 10μs 100μs ・・・ 無効 無効 ‘1011’ 1375ns 11μs 110μs ・・・ 無効 無効 ‘1100’ 1500ns 12μs 120μs ・・・ 無効 無効 ‘1101’ 1625ns 13μs 130μs ・・・ 無効 無効 ‘1110’ 1750ns 14μs 140μs ・・・ 無効 無効 ‘1111’ 1875ns 15μs 150μs ・・・ 無効 無効 -:フィルタなし

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※ PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 107: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 105 - Interface Corporation

DioEventRequestPendingEx

デジタル入出力ボードの割り込みイベント要求を待ちます。オーバーラップ構造体(lpOverlapped)を指定した非同期コールの場合、FBIDIO_ERROR_IO_PENDINGを返し非同期での動作となります。ご使用のボードのタイプにより存在しない信号がございます。ボードのUSER’S MANUALにてご使用のボードの仕様をご確認ください。 DioSetIrqMask、DioSetIrqConfig、DioEintSetIrqMask、DioEintSetEdgeConfig関数により必要な割り込みイベントの設定、マスク解除を事前に行う必要があります。 宣言 Declare Function DioEventRequestPendingEx Lib "FbiDio.DLL" (ByVal hDeviceHandle As Long,ByRef pdwEventEnableMask As Long,ByRef pEventBuf As Long,ByRef lpOverlapped As OVERLAPPED) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwEventEnableMask 許可するイベントのマスク設定を格納しているバッファへのポインタを指定し

ます。各要素の内容のようになっています。 pdwEventEnableMask + 0 割り込みイベント

(DioRequestPendingと同じ)

pdwEventEnableMask + 1

立ち下がりエッジ検出イベント (PCI-2162 、 CTP-2162 、CTP/CPZ-294188(IR1~IR32まで)専用イベント)

pdwEventEnableMask + 2 立ち下がりエッジ検出イベント イベント内容(該当ビットが’1’で有効) ・割り込みイベント Bit0:IN1からの入力信号または、STB1からの入力信号(PCI-2470の場合は、

OUT1~OUT8以上検出信号のORでの割り込みイベント) Bit1:IN2からの入力信号または、IR.IN1(外部割り込み入力信号)からの入力信号 Bit2:IN3からの入力信号または、ACK2からの入力信号 Bit3:IN4からの入力信号または、IR.IN2(外部割り込み入力信号)からの入力信号 Bit4:インターバルタイマ Bit5:外部リセット入力(RSTIN)割り込み ・立ち下がりエッジ検出イベント Bit0 :IR1に立ち下がりエッジが検出されたときのイベント Bit1 :IR2に立ち下がりエッジが検出されたときのイベント ・・・ Bit31:IR32に立ち下がりエッジが検出されたときのイベント ・立ち上がりエッジ検出イベント Bit0 :IR1に立ち上がりエッジが検出されたときのイベント Bit1 :IR2に立ち上がりエッジが検出されたときのイベント ・・・ Bit31:IR32に立ち上がりエッジが検出されたときのイベント pEventBuf 通知されたイベント内容を格納することができるバッファへのポインタです。

各要素の内容は次のようになっています。 pEventBuf + 0 割り込みイベント pEventBuf + 1 立ち下がりエッジ検出イベント pEventBuf + 2 立ち下がりエッジ検出イベント イベント内容(該当ビットが’1’で有効) ・割り込みイベント Bit0:IN1からの入力信号または、STB1からの入力信号

(PCI-2470の場合は、OUT1~OUT8以上検出信号のORでの割り込みイベント)

Bit1:IN2からの入力信号または、IR.IN1(外部割り込み入力信号)からの入力信号 Bit2:IN3からの入力信号または、ACK2からの入力信号 Bit3:IN4からの入力信号または、IR.IN2(外部割り込み入力信号)からの入力信号 Bit4:インターバルタイマ Bit5:外部リセット入力(RSTIN)割り込み

・立ち下がりエッジ検出イベント Bit0 :IR1に立ち下がりエッジが検出されたときのイベント Bit1 :IR2に立ち下がりエッジが検出されたときのイベント ・・・ Bit31:IR32に立ち下がりエッジが検出されたときのイベント ・立ち上がりエッジ検出イベント Bit0 :IR1に立ち上がりエッジが検出されたときのイベント Bit1 :IR2に立ち上がりエッジが検出されたときのイベント ・・・ Bit31:IR32に立ち上がりエッジが検出されたときのイベント

lpOverlapped OVERLAPPEDデータ構造体を指します。

Page 108: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 106 -

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 ※PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の機能をサポートするために拡張された関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外でも使用できます。

DioGetDeviceConfigEx

デバイスがサポートしている機能情報を取得します。 DioGetDeviceConfigExはPCI-2162のエッジ検出機能、デジタルフィルタ機能の機能情報に対応しています。 宣言 Declare Function DioGetDeviceConfigEx Lib “FbiDio.DLL” (ByVal hDeviceHandle As Long,ByRef pdwDeviceConfig As Long,ByRef pdwDeviceConfigEx As Long) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 デバイスがサポートしている機能情報を以下のビット構成で格納します(該当ビットが’1’で有効)。

pdwDeviceConfig

Bit0 :IN1~IN8サポート Bit1 :IN9~IN16サポート Bit2 :IN17~IN24サポート Bit3 :IN25~IN32サポート Bit4 :IN33~IN40サポート Bit5 :IN41~IN48サポート Bit6 :IN49~IN56サポート Bit7 :IN57~IN64サポート Bit8 :OUT1~OUT8サポート Bit10:OUT1~OUT8サポート Bit11:OUT1~OUT8サポート Bit12:OUT1~OUT8サポート Bit13:OUT1~OUT8サポート Bit14:OUT1~OUT8サポート Bit15:OUT1~OUT8サポート

Bit16:STB1.ACK1信号 Bit17:STB2.ACK2信号 Bit18:IR.IN1信号 Bit19:IR.IN2信号 Bit20:PULS.OUT1信号 Bit21:PULS.OUT2信号 Bit22:汎用DI1のみサポート Bit23:汎用DI1~4 Bit24:汎用DI5~8 Bit25:汎用DO1のみサポート Bit26:汎用DO1~4 Bit27:汎用DO5~8 Bit28:PWR.IN1 Bit29:PWR.IN2 Bit30:インターバルタイマ Bit31:拡張情報有無

デバイスがサポートしている拡張機能情報を以下のビット構成で格納します(該当ビットが’1’で有効)。 pdwDeviceConfigのBit31=’1’の場合に有効です。

pdwDeviceConfigEx

Bit0 :IR1~IR8エッジ検出機能 Bit1 :IR9~IR16エッジ検出機能 Bit2 :IR17~IR24エッジ検出機能 Bit3 :IR25~IR32エッジ検出機能

Bit4~23 :将来拡張用 Bit24 :デジタルフィルタ機能 Bit25~31:拡張用

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

※PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)の機能をサポートするために拡張された関数です。PCI-2162、CTP-2162、CTP/CPZ-294188(IR1~IR32まで)以外でも使用できます。

DioSetRstinMask

外部リセット(RSTIN)入力のマスクを設定します。 宣言 Declare Function DioSetRstinMask Lib "FbiDio.DLL” (ByVal hDeviceHandle As Long, ' デバイスハンドル ByVal dwRstinMask As Long ' RSTINマスク設定データ) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwRstinMask RSTINのマスク/アンマスクを設定するデータを指定します。 値 意味

0 RSTIN入力のマスクが無効(RSTIN入力でボードリセットが発生します)

FBIDIO_RSTIN_MASK RSTIN

入力のマスクが有効(RSTIN入力してもボードリセットが発生しません)

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

Page 109: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 107 - Interface Corporation

DioGetRstinMask 外部リセット(RSTIN)入力のマスク状態を取得します。 宣言 Declare Function DioGetRstinMask "FbiDio.DLL" (ByVal hDeviceHandle As Long, ‘ デバイスハンドル ByRef pdwRstinMask As Long ‘ RSTINマスク状態格納用変数への参照渡し) As Long パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwRstinMask RSTINのマスク/アンマスクの状態を格納する変数のポインタを指定しま

す。VB,Delphiでは状態を格納する変数を指定します。 関数が正常に終了すると、pdwRstinMaskには下記の値が格納されます。

値 意味 0 RSTIN入力のマスクが無効(RSTIN入力でボー

ドリセットが発生します) FBIDIO_RSTIN_MASK RSTIN入力のマスクが有効(RSTIN入力しても

ボードリセットが発生しません) 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DioEintSetIrqMaskEx PCI-2162, CTP-2162, CTP/CPZ-294188のエッジ検出割り込みマスク状態を設定します。 DioEintSetIrqMaskEx で有効にした割り込みは、DioEventRequestPendingEx によるイベント処理に利用します。 DioEintSetFilterConfigにより設定されているフィルタ時間以上のパルス幅を持つ入力が与えられたときにエッジ検出割り込みが発生します。DioEintSetIrqMaskEx により割り込みを有効にする場合、DioEintSetEdgeConfig/DioEintSetEdgeConfigExによりエッジ検出条件の設定が行われていなければなりません。 宣言 Declare Function DioEintSetIrqMaskEx Lib "FbiDio.DLL"( _ ByVal DeviceHandle As Long, _ ByVal No As Long, _ ByVal IrqMask As Long _ )As Integer パラメータ

DeviceHandle DioOpen関数で取得したデバイスハンドルを指定してください。 No 設定する接点を下記の識別子で指定します。

値 意味

FBIDIO_IN1_32 IR1~IR32の32点分のエッジ検出割り込みのマスク/アンマスクを設定します。

FBIDIO_IN33_64 IR33~IR64の32点分のエッジ検出割り込みのマスク/アンマスクを設定します。

SetIrqMask 対象接点のエッジ検出割り込みのマスク/アンマスクを設定するデータを指定します。 戻り値 DioEintSetIrqMaskEx関数は正常に終了しますと、0を返します。SetIrqMaskで指定された情報で、割り込み要因のマスク/アンマスクを設定します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。

Page 110: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 108 -

DioEintGetIrqMaskEx

PCI-2162, CTP-2162, CTP/CPZ-294188(IR1~IR32まで)のエッジ検出割り込みマスク状態を取得します。 宣言 Declare Function DioEintSetEdgeConfigEx Lib "FbiDio.DLL"( _ ByVal DeviceHandle As Long, _ ByVal No As Long, _ ByVal FallEdgeConfig As Long, _ ByVal RiseEdgeConfig As Long _ )As Integer パラメータ

DeviceHandle DioOpen関数で取得したデバイスハンドルを指定してください。 No 設定する接点を下記の識別子で指定します。

値 意味

FBIDIO_IN1_32 IR1~IR32の32点分のエッジ検出割り込みのマスク/アンマスクを読み込みます。

FBIDIO_IN33_64 IR33~IR64の32点分のエッジ検出割り込みのマスク/アンマスクを読み込みます。

GetIrqMask 読み込まれたエッジ検出割り込みのマスク/アンマスクを格納する変数へのポインタを指定してください。Visual Basic、Delphiではデータを格納する変数を指定します。

戻り値 DioEintGetIrqMaskEx関数は正常に終了しますと、0を返し、GetIrqMaskに、現在の割り込みマスク設定を返します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。

エラーコード一覧 定数 値 内容 FBIDIO_ERROR_SUCCESS 0 正常終了 FBIDIO_ERROR_NOT_DEVICE C0000001h 指定されたデバイスがありません FBIDIO_ERROR_NOT_OPEN C0000002h システムがデバイスをオープンできません FBIDIO_ERROR_INVALID_HANDLE C0000003h デバイスハンドルが正しくありません FBIDIO_ERROR_ALREADY_OPEN C0000004h すでにOPENしているデバイスをOPENしようとしまし

た FBIDIO_ERROR_HANDLE_EOF C0000005h EOFに達しました FBIDIO_ERROR_MORE_DATA C0000006h さらに多くのデータが利用可能です FBIDIO_INSUFFICIENT_BUFFER C0000007h システムコールに渡されたデータ領域が小さすぎます FBIDIO_ERROR_IO_PENDING C0000008h 非同期I/O操作が進行中です FBIDIO_ERROR_NOT_SUPPORTED C0000009h サポートされていない機能です FBIDIO_ERROR_MEMORY_NOTALLOCATED

C0001000h 作業用メモリの確保に失敗しました

FBIDIO_ERROR_PARAMETER C0001001h 引数パラメータの値が不正です FBIDIO_ERROR_INVALID_CALL C0001002h 不正なファンクション呼び出しです FBIDIO_ERROR_DRVCAL C0001003h ドライバ が 呼び出せません。 FBIDIO_ERROR_NULL_POINTER C0001004h ドライバ、DLL間でNULLポインタが渡されました FBIDIO_ERROR_IO_INCOMPLETE C0001005h 非同期I/Oイベントが、シグナル状態になっていません

Page 111: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

- 109 - Interface Corporation

技術資料紹介 弊社では下記の技術資料を提供しております。 詳しくは、弊社Web site(www.interface.co.jp)、または弊社窓口までお問い合わせください。 カタログ

PRM-0061 CPZカタログ(日本語版) PRM-0062 PCIカタログ(日本語版) PRM-0063 CSIカタログ(日本語版)

チュートリアル TUT-0058 チュートリアル CPZ拡張ユニット 入門編 TUT-0056 チュートリアル XP Embedded OS構築編 TUT-0055 チュートリアル 画像入力ボード TUT-0054 CANチュートリアル TUT-0053 モーションコントロールチュートリアル TUT-0050 RTLinuxによるモーションコントローラボード制御プログラミング チュートリアル(GPG-7400用) TUT-0048 RTLinuxによるカウンタボード制御プログラミング チュートリアル TUT-0044 RTLinuxによるメモリ共有インタフェースボード制御プログラミング チュートリアル TUT-0043 RTLinuxによる調歩同期シリアル通信ボード制御プログラミング チュートリアル TUT-0041 RTLinuxによるGP-IBボード制御プログラミング チュートリアル TUT-0040 RTLinuxによるDAボード制御プログラミング チュートリアル TUT-0039 RTLinuxによるADボード制御プログラミング チュートリアル TUT-0038 RTLinuxによるDIOボード制御プログラミング チュートリアル TUT-0037 RTLinuxによるHDLCボード制御プログラミング チュートリアル TUT-0036 RTLinuxによるPCI/CompactPCI/CardBus制御入門書(導入編) TUT-0034 Visual C++によるPPI入門書 TUT-0033 Visual Basicによるメモリ共有インタフェース入門書 TUT-0032 Visual C++によるメモリ共有インタフェース入門書 TUT-0031 Visual Basicによるカウンタ入門書 TUT-0030 Visual C++によるカウンタ入門書 TUT-0029 Visual BasicによるHDLC入門書 TUT-0028 Visual C++によるHDLC入門書 TUT-0027 Visual BasicによるGP-IB入門書 TUT-0026 Visual C++によるGP-IB入門書 TUT-0025 Visual BasicによるDIO入門書 TUT-0024 Visual C++によるDIO入門書 TUT-0023 Visual BasicによるDA入門書 TUT-0022 Visual C++によるDA入門書 TUT-0021 Visual BasicによるAD入門書 TUT-0020 Visual C++によるAD入門書 TUT-0019 Visual Basicによるモーションコントローラ入門書 TUT-0018 Visual C++によるモーションコントローラ入門書 TUT-0017 メモリンクを使用した負荷分散システム事例チュートリアル TUT-0016 Visual BasicによるPPI入門書 TUT-0015 モーションコントロールチュートリアル TUT-0014 Microsoft Visual Studio .NET移行ガイド TUT-0008 拡張ユニット チュートリアル(問題解決編) TUT-0007 拡張ユニットチュートリアル(入門編) TUT-0006 C(98)/ISA製品からPCI/CompactPCI製品への移行チュートリアル(DOS編) TUT-0005 DOSによるLAP-B入門書 TUT-0004 DOSによるAD入門書 TUT-0003 LinuxによるPCI/CompactPCI/CardBus制御 入門書 TUT-0002 PCI-ISAバスブリッジチュートリアル TUT-0001 PCI-Cバスブリッジチュートリアル

技術情報資料 初めてのCANインタフェース Linux, リアルタイムLinux移植(SH-4)経験談及び当社の今後の取り組みについて LinuxからPCI/CompactPCIボードを制御する方法 ActiveXコントロールによるシステム組み込み技術 CompactPCIへの置き換え+システム構築/移行ガイド MS-DOSからPCI/CompactPCIボードを制御する方法

Page 112: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025

Interface Corporation - 110 -

参考文献

弊社PCI-2726Cを使用し、WindowsによるI/O制御に関し記載した教則本がオーム社より発刊されております。

・大川 善邦 著:PCIバスによるI/O制御(オーム社:1999年) ・Edward Solari,George Willse 著:PCIハードウェアとソフトウェア(インフォ・クリエイツ:1995年)

警告!

本ドキュメントの一部または全てを弊社の許可なく、複写,複製,転載,電子化することを禁じま

す。

Page 113: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

TUT-0025 2006年 6月 Ver. 1.9 発行 発行所

〒732-0828 広島県広島市南区京橋町10-21 TEL 082-262-7777 FAX 082-262-5066

定価 ¥2,000

本書の内容の一部または全部を、無断で転載することを禁止します。 本書の内容は、将来予告なく変更することがありますので、あらかじめご了承ください。 © 2000, 2006 Interface Corporation. All rights reserved.

Page 114: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

www.interface.co.jp

サポート体制

本製品についてのお問い合わせは、お客様相談センタで承ります。弊社Web siteのオンライ

ンQA(「サポート」→「お客様相談センタ」をクリック)、E-mailまたはフリーダイヤルをご利用く

ださい。 お問い合わせ先 <お客様相談センタ> TEL 0120-447213 FAX 0120-458257 (祝日および弊社休業日を除く月~金 AM9:00~PM5:00迄) E-mail [email protected]

TUT-0025 Ver. 1.9 Vol. 1/1

Page 115: チュートリアル - InterfaceTUT-0025 - 1 - Interface Corporation 改訂履歴 Ver. 年 月 改 訂 内 容 1.9 2006年6月 対応型式追加 インストール説明にXP Embedded

www.interface.co.jp

チュートリアル Visual Basic による DIO入門書

TUT-0025 Ver.1.9