チュートリアル - interfacetut-0024 - 5 - interface corporation はじめに...

115
www.interface.co.jp チュートリアル Visual C++によるDIO入門書

Upload: others

Post on 09-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

www.interface.co.jp

チュートリアル

Visual C++によるDIO入門書

Page 2: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

www.interface.co.jp

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

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

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

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

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

さい。

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

Page 3: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 1 - Interface Corporation

改訂履歴

Ver. 年 月 改 訂 内 容 1.8 2006年11月 ●対応型式追加。

●インストール説明Windows XP Embedded/Windows Server 2003を追加。

●『4.2 デジタル出力』 ・配線図修正。

1.7 2006年2月 ●対応型式追加 ●インストール説明変更 ●関数追加 ●『デジタル入力』配線図修正 ●『デジタル出力』配線図修正

1.6 2004年11月 ●インストール説明 Windows XP/2000へ変更 ●技術資料一覧更新

1.5 2003年10月 ●関数追加 ●誤記修正

1.4 2003年3月 ●対応型式追加 ●誤記修正

1.3 2002年12月 ●対応型式追加 ●誤記修正

1.2 2002年3月 ●CompactPCIボードに対応 ●誤記修正 デジタル入力 → デジタル出力

1.1 2001年6月 ●『チュートリアル 図4-2』訂正。 1.0 2000年11月 新規作成

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

Page 4: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

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 C++によるデジタル入出力 15

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

第 4章 チュートリアル 19

4.1 デジタル入力 ............................................................................................................................... 20 Step1.メインウィンドウ作成 ...................................................................................................... 24 Step2. DLLプロシージャ宣言 ..................................................................................................... 25 Step3.初期化処理と終了処理 ...................................................................................................... 28 Step4.単点入力/バイト入力/ワード入力/ダブルワード入力 .................................................. 29

4.2 デジタル出力 ............................................................................................................................... 39 Step1.メインウィンドウ作成 ...................................................................................................... 45 Step2.単点出力/バイト出力/ワード出力/ダブルワード出力 .................................................. 45

4.3 バックグランド処理 ................................................................................................................... 58 Step1.メインウィンドウ作成 ...................................................................................................... 59 Step2.バックグランド処理作成 .................................................................................................. 60

4.4 割り込み処理 ............................................................................................................................... 66 Step1.メインウィンドウ作成 ...................................................................................................... 66 Step2.割り込み検知処理作成 ...................................................................................................... 67

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

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

Page 5: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 3 - Interface Corporation

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 ...................................................................................................................................... 83 DioOutputByte ....................................................................................................................................... 84 DioOutputWord...................................................................................................................................... 84 DioOutputDword.................................................................................................................................... 84 DioGetAckStatus.................................................................................................................................... 85 DioSetAckPulseCommand..................................................................................................................... 86 DioGetStbStatus ..................................................................................................................................... 87 DioSetStbPulseCommand ...................................................................................................................... 88 DioInputUniversalPoint ......................................................................................................................... 88 DioOutputUniversalPoint....................................................................................................................... 88 DioSetTimeOut ...................................................................................................................................... 89 DioGetTimeOut...................................................................................................................................... 89 DioSetIrqMask ....................................................................................................................................... 89 DioGetIrqMask....................................................................................................................................... 90 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 DioEintGetEdgeConfig ........................................................................................................................ 100

Page 6: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 4 -

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

技術資料紹介 109

Page 7: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 5 - Interface Corporation

はじめに

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

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

注意事項

本冊子では、使用する環境をWindows XP/XP Embedded/Server 2003/2000+Visual C++ Ver. 5.0(SP3)またはVer. 6.0(SP5)を想定し記載しております。 Windows NT/Me/98/95をご利用の場合、I/Oモジュールのインストール方法が本冊子に記載した内容とは異なりますのでご注意ください。こちらに関しましては、弊社製品マニュアルをご確認く

ださい。 Visual Studio .NETでご利用の方は、チュートリアル「Visual Studio .NET移行ガイド」を別途用意しております。こちらを参照してください。 対応OSはI/Oモジュール型式によって異なりますので、対応ソフトウェア(GPC-2000)のReadmeもしくはヘルプでご確認ください。

Page 8: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 6 -

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

PCI-2994CV PCI-287244 PCI-2727A PCI-2753 PCI-2758AM PCI-2793 PCI-2727L PCI-2756AM PCI-2762CM PCI-2826C PCI-2725L PCI-2725 PCI-2702C PCI-2724CL PCI-2513 PCI-2724C PCI-2725AM PCI-2431 PCI-2430C PCI-2424 PCI-2403A PCI-2131M PCI-2162 PCI-2130CM PCI-2104C PCI-2131 PCI-2135 PCI-2105A

PCI-292388 PCI-2994C PCI-2727AM PCI-2756AL PCI-2762C PCI-2727 PCI-2752C PCI-2758AL PCI-2790C PCI-287144 PCI-2726C PCI-2470 PCI-2703A PCI-2466C PCI-2703 PCI-2724CM PCI-2725M PCI-2464C PCI-2431A PCI-2230C PCI-2426C PCI-2135L PCI-2230CV PCI-2131A PCI-2128 PCI-2131AL PCI-2135M

PCI-2826CV PCI-2798C PCI-2727M PCI-2758A PCI-2768C PCI-2727AL PCI-2756A PCI-2760C PCI-2796C PCI-2725AL PCI-2726CM PCI-2512C PCI-2723C PCI-2503 PCI-2722 PCI-2725A PCI-2726CL PCI-2427 PCI-2402C PCI-2330CV PCI-2427A PCI-2152C PCI-2130C PCI-2131AM PCI-2130CL PCI-2131L PCI-2154C

対象型式 (CPZ)

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

CPZ-2995V CPZ-2130L CPZ-2104 CPZ-2230V CPZ-2464 CPZ-2506 CPZ-2517 CPZ-2723 CPZ-2724M CPZ-2726M CPZ-2762 CPZ-2769 CPZ-2799 CPZ-2827V CPZ-287244

CPZ-2994 CPZ-2130M CPZ-2154 CPZ-2402 CPZ-2466 CPZ-2515 CPZ-2702 CPZ-2724 CPZ-2726 CPZ-2752 CPZ-2762M CPZ-2790 CPZ-2826 CPZ-286122 CPZ-292388

Page 9: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 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-2722 CTP-2724L CTP-2725L CTP-2726L CTP-2727L CTP-2753 CTP-2799 CTP-287244 CTP-2762M CTP-2769 CTP-2827V CTP-2994

CTP-2128 CTP-2130M CTP-2131M CTP-2135M CTP-2162 CTP-2330V CTP-2430 CTP-2466 CTP-2515 CTP-2702 CTP-2723 CTP-2724M CTP-2725M CTP-2726M CTP-2727M CTP-2760 CTP-2826V CTP-294188 CTP-2768 CTP-2798 CTP-287144 CTP-2995V

CTP-2130 CTP-2131 CTP-2135 CTP-2152 CTP-2230 CTP-2402 CTP-2431 CTP-2505 CTP-2516 CTP-2703 CTP-2724 CTP-2725 CTP-2726 CTP-2727 CTP-2752 CTP-2762 CTP-286122 CTP-2994V CTP-2790 CTP-2826 CTP-292388

対象型式 (CSI)

CSI-292366 CSI-293166

対象型式 (PEX)

PEX-284122 PEX-285122 PEX-251100

PEX-292366 PEX-293166 PEX-234104

PEX-251101 PEX-224140

対象型式 (LPC)

LPC-284122 LPC-285122 LPC-251100

LPC-292366 LPC-293166 LPC-234104

LPC-251101 LPC-224140

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

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

Page 10: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

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-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 9 - Interface Corporation

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

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

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

さい。

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

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

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

②拡張用スロットへI/Oモジュールを差し込みます。

<例>

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

I/Oモジュール

コンピュータ

PCIコネクタ

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

ビス留め

注意!

製品は正しい向きに実装してください。間違った向きに実装した場合、コンピュータ,I/Oモジ

ュールを破損する恐れがあります。

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

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

以上でI/Oモジュールの設置は完了です。次にドライバのインストールを行います。

Page 12: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

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-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 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-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 12 -

■Windows 2000をご使用の場合

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

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

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

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

Page 15: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 13 - Interface Corporation

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

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

クします。

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

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

されます。

ここに I/O モジュールが追加

されます。

Page 16: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 14 -

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

ルのインストール

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

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

Page 17: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 15 - Interface Corporation

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

Visual C++より、デジタルI/Oモジュールを制御するには、DLL(Dynamic Link Library)を利用します。Windowsアプリケーションプログラミングでは、直接I/Oやメモリにアクセスすることが禁止されています。従って、デジタルI/Oモジュールに対して直接的に信号を送ることができません。そこで、I/Oモジュールに対して直接的に信号を送るプログラム(DLL)から必要な関数(プロシージャ)を呼び出し、このDLLを介してI/Oモジュールの制御を行います。

I/Oモジュール

( )

出力

Visual C++ アプリケーション

ダイナミックリンクライブラリ(FBIDIO.DLL)

Win32 API

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

入力

Page 18: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 16 -

3.1 ピンアサインメント

デジタルI/Oモジュールへの信号入力、または、デジタルI/Oモジュールからの信号出力は、I/Oモジュールのコネクタ部分より行われますが、使用する製品型式によって、各ピンに割り当てられ

た役割が異なります。配線時には、これらピンアサインメントをよく確認の上、配線してくださ

い。 以下、弊社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-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 17 - Interface Corporation

信号名 内 容

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

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

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

IR.IN1 IR.IN2

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

ACK1

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

PULS.OUT1 PULS.OUT2

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

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

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

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

P.OUT I/Oモジュールの電源状態出力信号です。 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.OUT2ACK1,STB2 -FCOM

RSTOUT/P.OUT -RCOM RSTIN +RCOM

お知らせ

他製品型式に関しましては、弊社Web site(www.interface.cp.jp)を参照してください。

Page 20: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 18 -

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

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

3.3 デジタルI/Oモジュール制御概略

デジタルI/Oモジュールへの制御を行う場合、基本的に下記の制御シーケンス(順番)で行います。

(1) I/Oモジュール初期化 プログラム起動 ↓

(2) 各種処理 ↓

(3) 終了処理 プログラム終了 (1)I/Oモジュールの初期化

Visual C++で作成されたアプリケーションがデジタルI/Oモジュールへの操作を行う場合、まずアプリケーションは、デジタルI/Oモジュールを利用可能な状態にする必要があります。 この処理がI/Oモジュールの初期化です。I/Oモジュールの初期化を行うと、プログラムはデジタルI/Oモジュールへのアクセスが可能となります。本処理が行われないとデジタルI/Oモジュールへのアクセスは行えません。

(2)各種処理

I/Oモジュールの入力ポートまたは出力ポートより信号の入力または出力を行います。 (3)終了

I/Oモジュールの使用終了を行うための手続きです。プログラム終了時にはかならず必要です。

Page 21: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 19 - Interface Corporation

第4章 チュートリアル

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

PCI-2726C

CHK-2101

ECO-66xx

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

c DC+12V

Page 22: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 20 -

4.1 デジタル入力

ここでは、CHK-2101に設定された情報(スイッチのON/OFF)をコンピュータに取り込むプログラムの作成を行います。PCI-2726C以外では、対応するテスト用I/Oモジュールおよび接続用ケーブルの製品型式が異なる場合がありますのでご注意ください。

ここで記載するソースコードは、以下の製品型式において利用可能です。 デジタル入力 デジタル入出力 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 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 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-2790 CTP-2798 CTP-2826 CTP-2826V CTP-2994

CTP-2994V CTP-287144 CTP-287244 CTP-292388 CSI-292366 CSI-293166 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 LPC-251100 LPC-284122

LPC-285122 LPC-292366 LPC-293166 PEX-251100 PEX-284122 PEX-285122 PEX-292366 PEX-293166

注意!

テスト用I/Oモジュールのない型式もあります。詳細は弊社Web site(www.interface.co.jp)にて

ご確認ください。

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

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

Page 23: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 21 - Interface Corporation

弊社テスト用I/Oモジュールをご用意できない場合は、各製品仕様に応じ、以下の配線を行ってください。配線には弊社端子台(TNS-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-2723 CTP-2752 CTP-2753 CTP-2760 CTP-2768

CTP-2994 CTP-292388 CTP-2722 CTP-2790 CTP-2798 CTP-2826 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 CSI-292388 CSI-293166 LPC-224140 LPC-284122 LPC-292366 LPC-293166 PEX-224140 PEX-284122 PEX-292366 PEX-293166

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

PCI-287144 CTP-287144 CPZ-287144

PCI-287244 CTP-287244 CPZ-287244

Page 24: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 22 -

外部電源

+極

-極

IN1IN2IN3

+COM*

+極 -極

• • •

• • •

外部電源 配線 1 配線 2

IN1 IN2 IN3

-COM*

• • •

• • •

-COM*

使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。 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 25: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 23 - Interface Corporation

IN1 IN2 IN3

-COM*

• • •

+極 -極

-極

外部電源

IN1IN2IN3• • •

IN1IN2IN3• • •

+極

配線 3 配線 4

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

• • •

• • •

• • •

使用できる外部電源電圧は、各製品によって異なり、下表のように分類されます。 12V 12V~24V 24V

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

外部電源

+極

-極

配線 5

IN1 IN2 IN3

-COM*

• • •

• • •

COM*IN1IN2

配線 6

IN3• • •

• • •

Page 26: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 24 -

Step1.メインウィンドウ作成

ここでは、これから作成するプログラムの画面作成を行います。 1. Visual C++を起動し新しいプロジェクトを作成します。 ・「ファイル」メニューより「新規作成」を選択すると、新規作成ダイアログボックスが表示さ

れます。「プロジェクト」タブを選択,表示します。 ・MFC AppWizard(exe)を選択し、プロジェクト名を記入します。ここでは“Input”と記入し以後それについての説明とします。 ・位置には作業するフォルダを指定してください。その後「OK」をクリックします。

プロジェクト名を書き込みます

MFC AppWizard (exe)を選択します

フォルダを指定します

2. SDI/MDIでSDIを選択し「次へ」をクリックします。 ・リソースで使用する言語の指定は「日本語」を選択します。

SDIを選択します

Page 27: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 25 - Interface Corporation

3. 残りの項目は「次へ」をクリックします。 ステップ2~5まで全て「次へ」をクリックし、ステップ6に「終了」をクリックします。

4. 新規プロジェクト情報というダイアログ表示されますので「OK」をクリックします。 ここまでで、新規プロジェクトの作成は完了です。

OKをクリック

Step2. DLLプロシージャ宣言

DLLプロシージャを利用するには、FBIDIO.LIBファイルを使ってプロシージャの位置を指定し、プロシージャの呼び出しに使う引数の識別を行わなければなりません。 DLLとはダイナミックリンクライブラリ(Dynamic Link Library)の略でアプリケーションの実行時に動的にリンクして利用できるプロシージャのライブラリです。そもそも、Windowsアプリケーションプログラミングでは直接I/Oやメモリにアクセスすることが禁止されています。言い換えれば、デジタル入出力I/Oモジュールに対して直接的に信号を送ることができません。そこで、I/Oモジュールに対して直接的に信号を送るプログラム(DLL)から必要なプロシージャを呼び出し、このDLLを介してボートの制御を行います。ここで一度宣言したDLLプロシージャは、Visual C++のプロシージャと同じようにコードで呼び出すことが可能となります。 1. プロジェクトにFBIDIO.LIBファイル,FBIDIO.Hファイルのパス設定を行います。 ・「ツール」→「オプション」を選択し、「ディレクトリ」タブを選択します。

Page 28: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 26 -

2. 表示するディレクトリを「インクルードファイル」にします。 ・空白の部分をダブルクリックします。(下図参照)

クリックします。

インクルードファイル

にします。

ダブルクリックします。

・ディレクトリの追加を行います。 ディレクトリ先をProgram Files>¥Interface¥GPC2000¥includeに設定して「OK」をクリックします。

includeを選択します。

・ディレクトリに追加されます。

追加されたディレクトリ

Page 29: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 27 - Interface Corporation

・次に、表示するディレクトリを「ライブラリファイル」にします。 ・ディレクトリの追加を行います。 ディレクトリ先を<Program Files>¥Interface¥GPC2000¥libと設定して「OK」をクリックします。

libを選択します

・ディレクトリに追加されます。

追加されたディレクトリ

ライブラリファイルにします

3. プロジェクトにFBIDIO.LIBファイルをリンクします。 ・「プロジェクト」→「設定」を選択し、「リンク」タブを選択します。 ・設定の対象を「全ての構成」に設定し、「オブジェクト/ライブラリモジュール」に“fbidio.lib”と書き込み「OK」をクリックします。

FBIDIO.LIBをリンクします

「すべての構成」にします

・“FBIDIO.LIB”“FBIDIO.H”は、Setupでインストールされる<インストール先>¥lib,<インストール先>¥includeにあります。(インストール先:<Program Files>¥interface¥GPC2000)

Page 30: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 28 -

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

I/Oモジュールよりデジタル入力を行う場合、まずI/Oモジュールの初期化を行わなければなりません。I/Oモジュールの初期化は以下のコードにより行います。

(List 1-1:I/Oモジュールの初期化)

//I/O モジュール初期化を行います HANDLE hDeviceHandle; hDeviceHandle = DioOpen("FBIDIO1", FBIDIO_FLAG_SHARE);

このとき、FBIDIO1に設定する値は、使用するI/Oモジュールのデバイス名を指定します。デバイス名は、「コントロールパネル」-「システム」の「デバイスマネージャ」より確認できます。

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

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

います。 「使用例」 HANDLE hDeviceHandle; hDeviceHandle = DioOpen(“FBIDIO1”, FBIDIO_FLAG_SHARE);

デバイスハンドルを格納するHANDLE型の変数を指定します。

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

使用するI/Oモジュールのデバイス名を指定します。

Page 31: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 29 - Interface Corporation

また、アプリケーションの終了時、もしくは処理の終了時には、I/Oモジュールに対して終了処理を行わなければなりません。 I/Oモジュールの終了処理は以下のコード(List 1-2)により行います。

(List 1-2:I/Oモジュールの終了処理)

//終了処理 nRet = DioClose(hDeviceHandle);

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

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

「使用例」 nRet = DioClose(hDeviceHandle);

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

I/O モジュールのオープン時に取得したデバイスハンドルを指定します。

DioOpen

DioClose

ハンドル

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

ここでは、I/Oモジュールの入力接点(IN)より状態(ON/OFF)の取得を行うプログラムを作成します。1. ResourceViewを表示し、Menuフォルダを展開して「IDR_MAINFRAME」をダブルクリックしま す。 2. 空白の部分(ヘルプの隣)をダブルクリックし、メニューアイテムプロパティを表示し以下のように設定します。

キャプション Input

ここをダブルクリックします

Page 32: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 30 -

3.「Input」をクリックしプルダウンメニューの空白部分をダブルクリックします。メニューアイテムプロパティが表示されますので以下のように設定します。

ID ID_INPUTSINGLE キャプション 単点入力

ここをダブルクリックします

単点入力と設定

ID_INPUTSINGLEと設定

4. 先程作成したプルダウンメニューの中の「単点入力」の上にマウスカーソルをもってきて右クリックし「Class Wizard」を選択します。

5. 「メッセージマップ」タブを選択し、以下のように設定します。(下図参照) プロジェクト Input クラス名 CInputView オブジェクト ID_INPUTSINGLE メッセージ COMMAND

6. 「関数の追加」をクリックします。

関数の追加をクリックします

Page 33: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 31 - Interface Corporation

7. メンバ関数名が“OnInputsingle”と表示されますので「OK」をクリックします。 8. FileViewを表示し、SourceFileフォルダを展開してInputView.cppの以下の位置(最初の部分)に

#include “fbidio.h”を追加します。 (List 1-3 fbidio.hのインクルード)

// InputView.cpp : CInputView クラスの動作の定義を行います。 // #include "stdafx.h" #include "Input.h" #include "InputDoc.h" #include "InputView.h" #include "fbidio.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

9. ClassViewを表示し、CInputViewクラスを展開してOnInputsingle関数に以下のコード(List1-4)を記述します。 (List 1-4 CInputViewクラスの OnInputsingle関数のコード 単点入力)

void CInputView::OnInputsingle() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; // 関数の実行結果 INT nBuffer[4]; // データを受け取るバッファ HANDLE hDeviceHandle; // デバイスハンドル char szTmp[40]; // メッセージ格納変数 // I/O モジュールの初期化を行います hDeviceHandle = DioOpen("FBIDIO1", FBIDIO_FLAG_SHARE);

if (hDeviceHandle == INVALID_HANDLE_VALUE) { AfxMessageBox("デバイスのオープンに失敗しました"); return;

} // データ入力(IN1~IN4 までの状態を nBuffer[]に取得します) nRet = DioInputPoint( hDeviceHandle,&nBuffer[0],1,4); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("データの入力に失敗しました"); }

else { sprintf(szTmp, "入力データ(IN1~IN4) ¥n %d %d %d %d", nBuffer[0],nBuffer[1],nBuffer[2],nBuffer[3]); AfxMessageBox(szTmp);

} // 終了処理. nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスのクローズに失敗しました"); } }

ここに追加

Page 34: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 32 -

List 1-4では、入力接点番号1(IN1)から入力接点番号4(IN4)までの状態を、1接点づつ順に読み込み配列変数nBufferに格納します。指定する入力接点番号から所定の任意の点数(範囲)の状態を取得するにはDioInputPoint関数を使用します。

CHK-2101のIN1~IN4をON/OFF/ON/OFFと設定し、 プログラムを実行してメニューバーより「Input」→「単点入力」と選択します。以下のようなメッセージボックスが表示されます。

左からIN1,IN2,IN3,IN4の入力接点の状態がONであるかOFFであるかを示しています。

表 示 意 味 1 IN1の接点状態はON 0 IN2の接点状態はOFF 1 IN3の接点状態はON 0 IN4の接点状態はOFF

IN1

IN2

IN3

IN4

IN1=1

IN2=0

IN3=1

IN4=0

デジタルI/Oモジュール

ON

ON

先にポートの入力接点を1点ごとに読み取る方法を記載しました。次は、一度に複数の入力接点

からデータの読み込みを行うプログラムを作成します。複数の入力接点からの状態取得には、バ

イト入力(8点),ワード入力(16点) ,ダブルワード入力(32点)があります。 ここでは、バイト入力を行います。(単点入力の手順3以降を参考にしてください。)

「使用例」

nRet = DioInputPoint(hDeviceHandle, &nBuffer[0], 1, 4);

I/Oモジュールのオープン時に取得したデバイスハンドルを指定します。

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

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

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

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

Page 35: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 33 - Interface Corporation

1. プルダウンメニューに項目の追加を行います。「Input」をクリックし、プルダウンメニューの空白部分をクリックします。以下のように設定します。

ID ID_INPUTBYTE キャプション バイト入力

2. メンバ関数“OnInputbyte”の設定を行います。「バイト入力」の上にカーソルをもってきて 右クリックし、「Class Wizard」を選択して以下のように設定します。 プロジェクト Input クラス名 CInputView オブジェクト ID_INPUTBYTE メッセージ COMMAND

3. FileViewを表示し、SourceFileフォルダを展開してInputView.cppの #include “InputView.h”の後に

#include “fbidio.h”を追加します。(すでに追加されている場合は追加する必要はありません) 4. SClassViewを表示し、CInputViewクラスを展開してOnInputbyte関数に以下のコード(List1-5)を記述します。

(List 1-5 CInputViewクラスの OnInputbyte関数のコード バイト入力)

void CInputView::OnInputbyte() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; // 関数の実行結果 BYTE byValue; // データを受け取るバッファ HANDLE hDeviceHandle; // デバイスハンドル char szTmp[40]; // メッセージ格納変数 hDeviceHandle = DioOpen("FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスオープンに失敗しました"); return;

} // データ入力(IN1~IN8 までの状態を byValue に取得します) nRet = DioInputByte( hDeviceHandle, FBIDIO_IN1_8, &byValue); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("データ入力に失敗しました"); } else { sprintf(szTmp, "入力データ(IN1~IN8) ¥n %X ", byValue);

AfxMessageBox(szTmp); } // 終了処理. nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスクローズに失敗しました"); } }

Page 36: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 34 -

List 1-5では、入力接点番号1(IN1)から入力接点番号8(IN8)までを、一度に読み込みバイト型変数byValueに格納されます。バイト単位(8ビット)で状態を取得するにはDioInputByte関数を使用します。

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

CHK-2101のIN1,3,5,7をONにして他はOFFに設定し、プログラムを実行してメニューバーより「Input」→「バイト入力」と選択してください。ダイアログに「入力データ(IN1~IN8) 55」と表示されます。つまり、接点番号1(IN1)から接点番号8(IN8)の状態が以下のようにあることを知ることができます。

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

(IN8) (IN1) 01010101(2進数)= 0x55(16進数)

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

「使用例」

BYTE byValue; nRet = DioInputByte(hDeviceHandle, FBIDIO_IN1_8, &byValue);

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

入力値を格納するバイト型変数のアドレスを指定します。

I/Oモジュールのオープン時に取得したデバイスハンドルを指定します。

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

Page 37: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 35 - Interface Corporation

1. プルダウンメニューに項目の追加を行います。「Input」をクリックし、プルダウンメニューの空白部分をクリックします。以下のように設定します。 ID ID_INPUTWORD キャプション ワード入力

2. メンバ関数“OnInputword”の設定を行います。「ワード入力」の上にカーソルをもってきて右クリックし、「Class Wizard」を選択して以下のように設定します。 プロジェクト Input クラス名 CInputView オブジェクト ID_INPUTWORD メッセージ COMMAND

3. FileViewを表示し、SourceFileフォルダを展開してInputView.cppの#include “InputView.h”の後に

#include “fbidio.h”を追加します。(すでに追加されている場合は追加する必要はありません) 4. ClassViewを表示し、CInputViewクラスを展開してOnInputword関数に以下のコード(List1-6)を記述します。

(List 1-6 CInputViewクラスの OnInputword関数のコード ワード入力)

void CInputView::OnInputword() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; // 関数の実行結果 WORD wValue; // データを受け取るバッファ HANDLE hDeviceHandle; // デバイスハンドル char szTmp[40]; // メッセージ格納変数 hDeviceHandle = DioOpen("FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスオープンに失敗しました"); return;

} // データ入力(IN1~IN16 までの状態を wValue に取得します) nRet = DioInputWord( hDeviceHandle, FBIDIO_IN1_16, &wValue); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("データ入力に失敗しました"); } else {

sprintf(szTmp, “入力データ(IN1~IN16) ¥n %X ", wValue); AfxMessageBox(szTmp);

} // 終了処理. nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスクローズに失敗しました"); } }

※ 本コードは、入力点数が15以下のI/Oモジュールでは使用できません。

Page 38: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 36 -

ワード単位(16ビット)で状態を取得するにはDioInputWord関数を使用します。

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

では、CHK-2101のIN1,3,5,7…と奇数番目をONにして他はOFFに設定し、プログラムを実行してメニューバーより「Input」→「ワード入力」と選択してください。ダイアログに「入力データ(IN1~IN16) 5555」と表示されます。 つまり、接点番号1(IN1)から接点番号16(IN16)の状態が以下のようにあることを知ることができます。

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

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

(IN16) (IN1) 0101010101010101(2進数) = 0x5555(16進数)

次にダブルワード入力(32点)を行います。

1. プルダウンメニューに項目の追加を行います。「Input」をクリックし、プルダウンメニューの空白部分をクリックします。以下のように設定します。 ID ID_INPUTDWORD キャプション ダブルワード入力

2. メンバ関数“OnInputdword”の設定を行います。「ダブルワード入力」の上にカーソルをもってきて右クリックし、「Class Wizard」を選択して以下のように設定します。 プロジェクト Input クラス名 CInputView オブジェクト ID_INPUTDWORD メッセージ COMMAND

「使用例」 WORD wValue; nRet = DioInputWord(hDeviceHandle, FBIDIO_IN1_16, &wValue);

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

I/Oモジュールのオープン時に取得したデバイスハンドルを指定します。

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

入力値を格納するワード型変数のアドレスを指定します。

Page 39: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 37 - Interface Corporation

3. FileViewを表示し、SourceFileフォルダを展開してInputView.cppの#include “InputView.h”の後に

#include “fbidio.h”を追加します。(すでに追加されている場合は追加する必要はありません。) 4. ClassViewを表示し、CInputViewクラスを展開してOnInputdword関数に以下のコード(List1-7)を記述します。

(List 1-7 CinputViewクラスの OnInputdword関数のコード ダブルワード入力)

void CInputView::OnInputdword() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; // 関数の実行結果 DWORD dwValue; // データを受け取るバッファ HANDLE hDeviceHandle; // デバイスハンドル char szTmp[40]; // メッセージ格納変数 hDeviceHandle = DioOpen("FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスオープンに失敗しました"); return;

} // データ入力(IN1~IN32 までの状態を dwValue に取得します) nRet = DioInputDword( hDeviceHandle,FBIDIO_IN1_32,&dwValue); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox(“データ入力に失敗しました”); } else {

sprintf(szTmp, "入力データ(IN1~IN32) ¥n %X ", dwValue); AfxMessageBox(szTmp);

} // 終了処理. nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスクローズに失敗しました"); } }

※ 本コードは、入力点数が31以下のI/Oモジュールでは使用できません。 ダブルワード単位(32ビット)で状態を取得するにはDioInputDword関数を使用します。

一度に取得できる状態は、以下のとおりです。どの接点の状態を取得するかは、同関数の第2引数に指定します。第2引数の値、つまり読み込む接点は以下の識別子で指定します。

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

注意)PCI-2726Cの入力は32点なので定数“FBIDIO_IN33_64”は使用できません。

「使用例」 DWORD dwValue; nRet = DioInputDword(hDeviceHandle, FBIDIO_IN1_32, &dwValue);

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

I/Oモジュールのオープン時に取得したデバイスハンドルを指定します。

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

入力値を格納するダブルワード型変数のアドレスを指定します。

Page 40: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 38 -

では、CHK-2101のIN1,3,5,7…と奇数番目をONにして他はOFFに設定し、プログラムを実行してメニューバーより「Input」→「ダブルワード入力」を選択してください。ダイアログに「入力データ(IN1~IN32) 55555555」と表示されます。 つまり、接点番号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(2進数) = 0x55555555(16進数)

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

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

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

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

Page 41: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 39 - Interface Corporation

4.2 デジタル出力

ここでは、デジタルI/Oモジュール(PCI-2726C)より、デジタル信号を出力しCHK-2101のLEDを発光させるプログラムの作成を行います。PCI-2726C以外では、対応するテスト用I/Oモジュールおよび接続用ケーブルの製品型式が異なる場合がありますのでご注意ください。

ここで記載するソースコードは、以下の製品型式において利用可能です。 デジタル出力 デジタル入出力 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 LPC-251101 PEX-234104 PEX-251101

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-2790 CTP-2798 CTP-2826 CTP-2826V CTP-2994 CTP-2994V CTP-287144 CTP-287244 CTP-292388

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

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

注意!

テスト用I/Oモジュールのない型式もあります。詳細は弊社Web site(www.interface.co.jp)にて

確認してください。

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

ない処理が含まれます。

Page 42: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 40 -

弊社テスト用I/Oモジュールがご用意できない場合は、各製品仕様に応じ、以下の配線を行ってください。各配線には弊社、端子台などをご利用ください。 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 43: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 41 - Interface Corporation

配線1

OUT1 OUT2 OUT3

発光ダイオード

抵抗

+極

-極

-COM*

• • • •

抵抗は、デジタル出力モジュールの出力仕様と、発光させる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 44: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 42 -

配線2

OUT1 OUT2 OUT3

発光ダイオード

抵抗

+極

-極

-COM*

• • • •

+COM*

抵抗は、デジタル出力モジュールの出力仕様と、発光させる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 45: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 43 - Interface Corporation

配線3

OUT1 OUT2 OUT3 OUT4

発光ダイオード

抵抗+極

-極

-COM*

• • • •

+COM*

• • • •

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

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

配線4

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

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

Page 46: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 44 -

配線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 47: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 45 - Interface Corporation

Step1.メインウィンドウ作成

ここでは、これから作成するプログラムの基本フォーム作成を行います。(詳しくは『20ページ 4.1 デジタル入力』でのStep1,Step2を参考にしてください。) 1. Visual C++を起動し、新しいプロジェクト(プロジェクト名:Output)を作成します。 2. プロジェクトにFBIDIO.LIBファイル,FBIDIO.Hファイルのパス設定を行い、ライブラリファイル“fbidio.lib”をリンクさせます(デジタル入力Step2を参照してください)。

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

ここでは、I/Oモジュールのデータ出力ライン(OUT)より状態(ON/OFF)の出力を行うプログラムを作成します。(『20ページ 4.1 デジタル入力』でのStep3,Step4を参照してください) 1. ResourceViewを表示し、Menuフォルダを展開して「IDR_MAINFRAME」をダブルクリックします。

2. 空白の部分(ヘルプの隣)をダブルクリックし、メニューアイテムプロパティを表示し以下のように設定します。

キャプション Output 3. 「Output」をクリックしプルダウンメニューの空白部分をダブルクリックします。メニューアイテムプロパティが表示されますので以下のように設定します。

ID ID_OUTPUTSINGLE キャプション 単点出力

4. メンバ関数“OnOutputsingle”の設定を行います。「単点出力」の上にカーソルをもってきて右クリックし、「Class Wizard」を選択して以下のように設定します。 プロジェクト Output クラス名 COutputView オブジェクト ID_OUTPUTSINGLE メッセージ COMMAND

5. FileViewを表示し、SourceFileフォルダを展開してOutputView.cppの以下の位置(最初に部分)に

#include “fbidio.h”を追加します。(List2-1)

(List 2-1 fbidio.hのインクルード) // OutputView.cpp : COutputView クラスの動作の定義を行います。 // #include "stdafx.h" #include "Output.h" #include "OutputDoc.h" #include "OutputView.h" #include "fbidio.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__;

#endif

ここに追加

Page 48: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 46 -

「使用例」

INT nBuffer[4];nRet = DioOutputPoint (hDeviceHandle, &nBuffer[0], 1, 4);

I/O モジュールのオープン時に取得したデバイスハンドルを指定します。

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

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

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

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

6. ClassViewを表示し、CInputViewクラスを展開してOnOutputsingle関数に以下のコードを記述します。

(List 2-2 COutputViewクラスの OnOutpusingle関数のコード 単点出力)

void COutputView::OnOutputsingle() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; // 関数の実行結果 INT nBuffer[4]; // 状態を設定するバッファ HANDLE hDeviceHandle; // デバイスハンドル // 出力接点の状態を設定します nBuffer[0] = 1; nBuffer[1] = 0; nBuffer[2] = 1; nBuffer[3] = 0; // I/O モジュールの初期化を行います hDeviceHandle = DioOpen( "FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスのオープンに失敗しました"); return;

} // データ出力(OUT1~OUT4 までの状態を設定します) nRet = DioOutputPoint( hDeviceHandle, &nBuffer[0], 1, 4); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("データ出力に失敗しました"); }

else { AfxMessageBox("データ出力に成功しました");

} // 終了処理 nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスのクローズに失敗しました"); } }

List 2-2では、出力接点番号1(OUT1)から出力接点番号4(OUT4)までを、1接点ずつ順に, 接点の状態(ON=LED点灯=1/OFF=LED消灯=0)を設定します。指定する接点番号から所定の任意の点数(範囲)の状態を設定するにはDioOutputPoint関数を使用します。 では、プログラムを実行してメニューバーより「Output」→「単点出力」を選択してください。デジタル出力I/Oモジュールに接続されたLEDが以下のよう点灯します。

OUT1 OUT2 OUT3 OUT4

PCI-2726C + CHK-2101の組み合わせでは

CHK-2101の LED33番,35番が点灯します。

Page 49: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 47 - Interface Corporation

これは、配列変数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は点灯したままであることに気づくと思います。デジタル出力I/Oモジュールに対し出力接点の設定を一度行うと、I/Oモジュールにリセット信号(コンピュータのリセット)が送信されるか、出力接点が新たに設定し直されるまで、その状態が保持されます。 List 2-2の出力接点の設定部分のコードを以下のように書き換え再度実行してください。LEDの点灯が消えます。 pnBuffer[0] = 0 pnBuffer[1] = 0 pnBuffer[2] = 0 pnBuffer[3] = 0

先にポートの出力接点を1点ずつ設定する方法を記載しました。次は、一度に複数の出力接点を

設定するプログラムを作成します。複数の出力接点の設定には、バイト出力(8点),ワード出力 (16点),ダブルワード出力(32点)があります。ここでは、バイト出力を行います。 1. プルダウンメニューに項目の追加を行います。「Output」をクリックし、プルダウンメニューの空白部分をクリックします。以下のように設定します。

ID ID_OUTPUTBYTE キャプション バイト出力

2. メンバ関数“OnOutputbyte”の設定を行います。「バイト出力」の上にカーソルをもってきて右クリックし、「Class Wizard」を選択して以下のように設定します。

プロジェクト Output クラス名 COutputView オブジェクト ID_OUTPUTBYTE メッセージ COMMAND

3. ダイアログを作成します。メニューバーの「挿入」の中から「リソース」を選択します。

リソースをクリックします。

Page 50: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 48 -

4. Dialogを選択し「新規作成」をクリックします。

新規作成をクリックします

5. 作成したダイアログを右クリックし「プロパティ」を選択します。 ダイアログプロパティが表示されますので以下の以下のように設定します。

ID IDD_OUTBYTEBOX キャプション バイト出力

IDD_OUTBYTEBO バイト出力

6. 同じダイアログを右クリックし「Class Wizard」を選択します。下図のダイアログが表示されますので「OK」をクリックします。

Page 51: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 49 - Interface Corporation

7. クラス新規作成ダイアログ表示されます。以下のように設定します。 クラス名 CoutByteDialog

8. ダイアログにエディットボックスを作成します。

9. 作成したエディットボックスを右クリックし、「ClassWizard」を選択して「メンバ変数」タブを表示します。

10. 以下のように設定して「変数の追加」をクリックします。 プロジェクト Output クラス名 COutByteDialog コントロール IDC_EDIT1

11. メンバ変数の追加設定を行います。以下のように設定して「OK」をクリック します。 メンバ変数 m_szByte カテゴリ 値 変数のタイプ Cstring

12. 下図のようにメンバ変数が追加されます。ここで最大文字数を“2”と設定して「OK」をクリックします。

追加したメンバ変数

“2”に設定

Page 52: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 50 -

FileViewを表示し、SourceFileフォルダを展開してOutputView.cppの#include “OutputView.h”の後に#include “OutByteDialog.h”と#include “fbidio.h”を追加します。(すでに追加されている場合は追加する必要はありません。)

13. ClassViewを表示し、COutputViewクラスを展開してOnOutputbyte関数に以下のコード (List2-3)を記述します。

(List 2-3 COutputViewクラスの OnOutputbyte関数のコード バイト出力)

void COutputView::OnOutputbyte() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; // 関数の実行結果 HANDLE hDeviceHandle; // デバイスハンドル COutByteDialog dlg; // ダイアログのクラス名 BYTE byValue; // 型変換後の格納先 // ダイアログを表示します nRet = dlg.DoModal(); if (nRet != IDOK) return; // データの型変換 sscanf(dlg.m_szByte, ”%x”, &byValue); // m_szByte = メンバ変数 // I/O モジュールの初期化を行います hDeviceHandle = DioOpen( "FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスのオープンに失敗しました"); return;

} // データ出力(OUT1~OUT8 までの状態を設定します) nRet = DioOutputByte( hDeviceHandle, FBIDIO_OUT1_8, byValue); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("データ出力に失敗しました"); } else {

AfxMessageBox("データ出力に成功しました"); } // 終了処理 nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスのクローズに失敗しました"); } }

List 2-3では、出力接点番号1(OUT1)から接点番号8(OUT8)までを、一度に設定します。 バイト単位(8ビット)で状態を設定するにはDioOutputByte関数を使用します。

「使用例」 BYTE byValue; nRet = DioOutputByte(hDeviceHandle, FBIDIO_OUT1_8, byValue);

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

I/Oモジュールのオープン時に取得したデバイスハンドルを指定します。

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

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

Page 53: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 51 - Interface Corporation

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

では、プログラムを実行してメニューバーより「Output」→「バイト出力」を選択してください。エディットボックスに出力する値(16進数)を「55」と入力し「OK」ボタンをクリックしてください。デジタル出力I/Oモジュールに接続されたLEDが点灯します。

OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 OUT8

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

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

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

(OUT8) (OUT1) 0x55(16進数) = 01010101(2進数)

では、次のステップに進む前に、エディットボックスに「0」を入力して「OK」ボタンをクリックしてLEDを消灯してください。

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

1. プルダウンメニューに項目の追加を行います。「Output」をクリックし、プルダウンメニューの空白部分をクリックします。以下のように設定します。

ID ID_OUTPUTWORD キャプション ワード出力

2. メンバ関数“OnOutputword”の設定を行います。「バイト出力」の上にカーソルをもってきて右クリックし「Class Wizard」を選択して以下のように設定します。 プロジェクト Output クラス名 COutputView オブジェクト ID_OUTPUTWORD メッセージ COMMAND

Page 54: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 52 -

3. ダイアログを作成します。メニューバーの「挿入」の中から「リソース」を選択します。

4. Dialogを選択し「新規作成」をクリックします。

5. 作成したダイアログを右クリックし「プロパティ」を選択します。ダイアログプロパティが表示されますので以下の以下のように設定します。

ID IDD_OUTWORDBOX キャプション ワード出力

6. 同じダイアログを右クリックて「Class Wizard」を選択します。ダイアログが表示され「新規作成クラス」にチェックが入っていますので「OK」をクリックします。

7. クラス新規作成ダイアログ表示されます。以下のように設定します。 クラス名 CoutWordDialog

8. ダイアログにエディットボックスを作成します。

9. 作成したエディットボックスを右クリックし、「ClassWizard」を選択して「メンバ変数」タブを表示します。

10. 以下のように設定して「変数の追加」をクリックします。 プロジェクト Output クラス名 COutWordDialog コントロール IDC_EDIT1

11. メンバ変数の追加設定を行います。以下のように設定して「OK」をクリックします。 メンバ変数 m_szWord カテゴリ 値 変数のタイプ Cstring

12. メンバ変数が追加されたら最大文字数を“4”に設定します。 13. FileViewを表示し、SourceFileフォルダを展開してOutputView.cppの#include “OutputView.h”の後に#include “OutWordDialog.h”と#include “fbidio.h”を追加します。(すでに追加されている場合は追加する必要はありません)

Page 55: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 53 - Interface Corporation

14. ClassViewを表示し、COutputViewクラスを展開してOnOutputword関数に以下のコード(List2-4)を記述します。

(List 2-4 COutputViewクラスの OnOutputword関数のコード ワード出力)

void COutputView::OnOutputword() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; // 関数の実行結果 HANDLE hDeviceHandle; // デバイスハンドル COutWordDialog dlg; // ダイアログのクラス名 WORD wValue; // 型変換後の格納先 // ダイアログを表示します nRet = dlg.DoModal(); if (nRet != IDOK) return; // データの型変換 sscanf(dlg.m_szWord, "%x", &wValue); // m_szWord = メンバ変数 // I/O モジュールの初期化を行います hDeviceHandle = DioOpen( "FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスのオープンに失敗しました"); return;

} // データ出力(OUT1~OUT16 までの状態を設定します) nRet = DioOutputWord( hDeviceHandle, FBIDIO_OUT1_16, wValue); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("データ出力に失敗しました"); } else {

AfxMessageBox("データ出力に成功しました"); } // 終了処理 nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスのクローズに失敗しました"); } }

※ 本コードは、出力点数が15以下のI/Oモジュールでは使用できません。

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

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

「使用例」 WORD wValue; nRet = DioOutputWord(hDeviceHandle, FBIDIO_OUT1_16, wValue);

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

I/Oモジュールのオープン時に取得したデバイスハンドルを指定します。

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

出力する値をワード値で指定します。

Page 56: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 54 -

では、プログラムを実行してメニューバーより「Output」→「ワード出力」を選択してください。エディットボックスに出力する値(16進数)を「5555」と入力し「OK」ボタンをクリックしてください。デジタル出力I/Oモジュールに接続された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) 0x5555(16進数) = 0101010101010101(2進数)

では、次のステップに進む前に、エディットボックスに「0」を入力して「OK」ボタンをクリックしてLEDを消灯してください。 次にダブルワード出力(32点)を行います。

1. プルダウンメニューに項目の追加を行います。「Output」をクリックし、プルダウンメニューの空白部分をクリックします。以下のように設定します。

ID ID_OUTPUTDWORD キャプション ダブルワード出力

2. メンバ関数“OnOutputdword”の設定を行います。「バイト出力」の上にカーソルをもってきて右クリックし「Class Wizard」を選択して以下のように設定します。 プロジェクト Output クラス名 COutputView オブジェクト ID_OUTPUTDWORD メッセージ COMMAND

3. ダイアログを作成します。メニューバーの「挿入」の中から「リソース」を選択します。

4. Dialogを選択し「新規作成」をクリックします。

Page 57: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 55 - Interface Corporation

5. 作成したダイアログを右クリックし「プロパティ」を選択します。ダイアログプロパティが表示されますので以下の以下のように設定します。

ID IDD_OUTDWORDBOX キャプション ダブルワード出力

6. 同じダイアログを右クリックて「Class Wizard」を選択します。ダイアログが表示され「新規作成クラス」にチェックが入っていますので「OK」をクリックします。

7. クラス新規作成ダイアログ表示されます。以下のように設定します。

クラス名 CoutDwordDialog

8. ダイアログにエディットボックスを作成します。

9. 作成したエディットボックスを右クリックし、「ClassWizard」を選択して「メンバ変数」タブを表示します。

10. 以下のように設定して「変数の追加」をクリックします。

プロジェクト Output クラス名 COutDwordDialog コントロール IDC_EDIT1

11. メンバ変数の追加設定を行います。以下のように設定して「OK」をクリックします。 メンバ変数 m_szDword カテゴリ 値 変数のタイプ Cstring

12. メンバ変数が追加されたら最大文字数を“8”に設定します。

13. FileViewを表示し、SourceFileフォルダを展開してOutputView.cppの#include “OutputView.h”の後に#include “OutDwordDialog.h”と#include “fbidio.h”を追加します。(すでに追加されている場合は追加する必要はありません)

Page 58: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 56 -

14. ClassViewを表示し、COutputViewクラスを展開してOnOutputdword関数に以下のコード

(List2-5)を記述します。

(List 2-5 COutputViewクラスの OnOutputdword関数のコード ダブルワード出力) void COutputView::OnOutputdword() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; // 関数の実行結果 HANDLE hDeviceHandle; // デバイスハンドル COutDwordDialog dlg; // ダイアログのクラス名 DWORD dwValue; // 型変換後の格納先 // ダイアログを表示します nRet = dlg.DoModal(); if (nRet != IDOK) return; // データの型変換 sscanf(dlg.m_szDword, "%x", &dwValue); // m_szDword = メンバ変数 // I/O モジュールの初期化を行います hDeviceHandle = DioOpen( "FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスのオープンに失敗しました"); return;

} // データ出力(OUT1~OUT32 までの状態を設定します) nRet = DioOutputDword( hDeviceHandle, FBIDIO_OUT1_32, dwValue); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("データ出力に失敗しました"); } else {

AfxMessageBox("データ出力に成功しました"); } // 終了処理 nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスのクローズに失敗しました"); } }

※ 本コードは、出力点数が31以下のI/Oモジュールでは使用できません。

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

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

接 点 定 数 値 OUT1~OUT32 FBIDIO_OUT1_32 0 OUT33~OUT64 FBIDIO_OUT33_64 4

「使用例」 DWORD dwValue; nRet = DioOutputDword(hDeviceHandle, FBIDIO_OUT1_32, dwValue);

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

I/Oモジュールのオープン時に取得したデバイスハンドルを指定します。

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

出力する値をダブルワード値で指定します。

Page 59: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 57 - Interface Corporation

では、プログラムを実行してメニューバーより「Output」→「ダブルワード出力」を選択してください。エディットボックスに出力する値(16進数)を「55555555」と入力し「OK」ボタンをクリックしてください。デジタル出力I/Oモジュールに接続された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)

0x55555555(16進数)= 01010101010101010101010101010101(2進数)

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

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

トです。

Page 60: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 58 -

4.3 バックグランド処理

ここでは、バックグランド処理によるデジタル出力処理を行います。バックグランド処理とは、

主となる処理を行いながら、それと同時に(主となる処理とは別のプロセスとして)別の処理をすることです。FBIDIO.DLLにはバックグランド処理を行うための、バックグランド関数が用意されています(関数名に~Backとあるものがこれにあたります)。 バックグランド関数は、処理回数を指定することにより定期的に指定した間隔で処理を繰り返す

関数です。一定時間ごとに入出力関数をコールして実現する処理をバックグランド関数1度のコールにより実現できます。これらバックグランド関数はオーバーラップ構造体(後に記載)を指定することで非同期に動作します。 Visual C++において1つのプロジェクト内で非同期処理を実現するには、 ・コンポーネントを作成しプロジェクトに組み込む ・Win32APIを使用する 等があります。 ActiveXコンポーネントは、一度作成しておけば、データを変更するだけで自由にプログラムを実行することができるというメリットがありますが、専門的な知識と手間が必要になるというデメ

リットがあります。 Win32APIは、プログラム中に直接関数を書き込むだけなので使いやすいというメリットがありますが、プログラムに変更があった場合、プログラム全体を修正する必要があるというデメリット

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

Page 61: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 59 - Interface Corporation

Step1.メインウィンドウ作成

ここでは、これから作成するプログラムの画面作成を行います。(詳しくは『20ページ 4.1 デジタル入力』でのStep1~Step3を参考にしてください。) 1. Visual C++を起動し、新しいプロジェクト(プロジェクト名:OutputBack)を作成します。 2. プロジェクトにFBIDIO.LIBファイル,FBIDIO.Hファイルのパス設定を行い、ライブラリファイル”fbidio.lib”をリンクさせます。(デジタル入力Step2を参照してください。)

3. メインウィンドウにメニューアイテムの追加を行います。(デジタル入力Step4の2を参照してください。)ポップアップのチェックをはずし以下のように設定します。

ID D_BACKGROUND キャプション バックグランド

4. メンバ関数”OnBackground”の設定を行います。(『20ページ 4.1 デジタル入力』tep4の4~7を参照してください。)以下のように設定します。 プロジェクト OutputBack クラス名 COutputBackView オブジェクト ID_BACKGROUND メッセージ COMMAND

Page 62: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 60 -

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

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

での非同期処理(同期を取らずに処理を進める、つまり並行して複数のジョブを処理すること)を実現するために、ここではWin32 APIに定義される以下の関数、および構造体を使用しています。 ・CreateEvent関数 イベントオブジェクトの作成を行います。 ・Overlapped構造体 非同期I/O制御に必要な構造体です。 ・WaitForSingleObject関数 オブジェクトがシグナル状態になるまで待機します。 ・CloseHandle関数 オブジェクトハンドルのクローズを行います。

各関数および構造体の詳細はMicrosoft社提供のWin32APIリファレンスか、もしくはその他専門書籍を参照してください。

バックグランド処理の構築は、以下のシーケンスで行います。

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

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

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

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

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

1. OutputBackView.cppの以下の位置(最初の部分)に”fbidio.h”を追加します。

(List 3-1 fbidio.hのインクルード) // OutputBackView.cpp : COutputBackView クラスの動作の定義を行います。 // #include "stdafx.h" #include "OutputBack.h" #include "OutputBackDoc.h" #include "OutputBackView.h" #include "fbidio.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

ここに追加

Page 63: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 61 - Interface Corporation

2. OnBackground関数に以下のコード(List 3-2)を記述します。プログラムリスト中のDLL関数については後述します。

(List 3-2 COutBackViewクラスの OnBackGround関数のコード)

void COutputBackView::OnBackground() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください INT nRet; //関数の実行結果 HANDLE hDeviceHandle, //デバイスハンドル

hBackGroundHandle; //バックグランド処理ハンドル DWORD dwRet; //イベントのシグナル格納用変数 OVERLAPPED Overlapped; //オーバーラップ構造体 INT nBuffer[20]={1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0}; //出力データ格納用バッファ // デバイスをオープンします hDeviceHandle = DioOpen( "FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスのオープンに失敗しました"); return;

} // イベントオブジェクトの作成を行います Overlapped.hEvent = CreateEvent(0, TRUE, FALSE,NULL); // バックグランド処理の設定を行います hBackGroundHandle = DioSetBackGround(hDeviceHandle, 1, 1, 20, 200, 20, 0); if (hBackGroundHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("バックグランド処理の設定に失敗しました"); } // バックグランド処理を開始します nRet = DioOutputPointBack( hDeviceHandle, hBackGroundHandle, &nBuffer[0], 20*sizeof(int), &Overlapped); if (nRet != FBIDIO_ERROR_IO_PENDING) {

AfxMessageBox("バックグランド処理の出力に失敗しました"); } // イベントのシグナルを待ちます dwRet = WaitForSingleObject(Overlapped.hEvent, 5000); if (dwRet == WAIT_TIMEOUT) {

AfxMessageBox("バックグランド処理がタイムアウトしました"); } else {

AfxMessageBox("バックグランド処理が完了しました"); } // バックグランドハンドルを開放します DioFreeBackGround(hDeviceHandle, hBackGroundHandle); // デバイスのクローズを行います nRet = DioClose( hDeviceHandle ); if (nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスのクローズに失敗しました"); } // 作成したイベントオブジェクトをクローズします CloseHandle(Overlapped.hEvent); }

Page 64: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 62 -

ここで、プログラムを実行してみてください。 メインウィンドウの右上の「バックグランド」をクリックしてください。 OUT1に接続されたLEDの点滅が確認できると思います。このLEDの点滅はバックグランドで処理しています。このLEDの点滅がバックグランドでの処理だということを知るために、 List 3-2中ほどの // バックグランドを開始します nRet = DioOutputPointBack( hDeviceHandle, hBackGroundHandle, &nBuffer[0], 20*sizeof(int), &Overlapped); if (nRet != FBIDIO_ERROR_IO_PENDING) {

AfxMessageBox("バックグランド処理の出力に失敗しました"); }

と // イベントのシグナルを待ちます dwRet = WaitForSingleObject(Overlapped.hEvent, 5000);

の間に、以下に示すList 3-3を追加してみましょう。

(List 3-3フォアグランド処理のコード) INT nBuffer2; //出力データ格納用変数

INT nNext; //順番に点灯させる LED の数 for(nNext = 0;nNext <= 32;nNext++){ nBuffer2 = 1; //LED を点灯させます nRet = DioOutputPoint( hDeviceHandle, &nBuffer2, nNext, 1); Sleep(100);// LED の点灯を目視するためウェイトをかけます //LED を消灯させます nBuffer2 = 0; nRet = DioOutputPoint( hDeviceHandle, &nBuffer2, nNext, 1); Sleep(100);//LEDの消灯を目視するためウェイトをかけます }

フォアグランドでI/Oモジュール上のLEDが順番に点灯していく処理を行うと同時にOUT1に接続されたLEDが点滅することが確認できます。これがバックグランド処理です。

LEDの点滅処理

LEDの移動処理

開始 終了

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

Page 65: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 63 - Interface Corporation

「使用例」

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

バックグランド処理のハンドル番号が返されます。

I/O モジュールのオープン時に取得したデバイスハンドルを指定します。

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

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

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

1接点あたりの制御データ(取得データ)を格納するバッファのサイズを指定します。 処理を実行する回数を指定します。

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

List3-2では出力接点番号1(OUT1)より、配列変数nBuffer[]に格納された情報を200ms毎に出力する設定を行っています。 第4引数のバッファサイズですが、ここでは出力接点番号1(接点1つ)に対して制御データが20(List3-2の配列nBuffer[20]の配列数)あるため20となっています。 第6引数の実行回数ですが、nBuffer[0]~nBuffer[19]までの出力を1セットとし20セット繰り返すという意味ではありません。nBuffer[0]が処理されると1回,200 ms後nBuffer[1]が処理されると1回、と、200 ms毎に処理される実行される回数をカウントしその合計回数を指定します。 したがって、List 3-2ではバッファ内は20回分のデータしか格納されていませんから、実行回数の上限は20となります。20以上の値を指定した場合、21回目はpnBuffer[0]が実行されます。 反対に20以下の値、例えば10を設定すると、nBuffer[9]を出力し、そこで処理は完了します。

1 回 2 回 3 回 4 回 19 回 20 回・・・・・・・・・・

1 回 2 回 19 回 20 回・・・

1 回 2 回 19 回 20 回・・・

・・・・・・・・・

1 セット

20 セット

・・・・・・・・・

制御する接点数とバッファサイズ、処理を実行する回数の関係をより深く理解するために、バッ

クグランド処理の設定をList 3-4のよう修正し実行してみてください。

(List 3-4 バックグランド処理設定のコード) // バックグランド処理の設定を行います hBackGroundHandle = DioSetBackGround(hDeviceHandle, 1, 3, 5, 200, 5, 0);

第3引数が3となっているため、処理対象となる接点が、第2引数で指定された1、つまり出力接点番号1から出力接点番号3までの処理を行います。また第4引数は5となっているため、1つの接点当たりのバッファサイズは5となっています(5つ以上のデータは格納できません)。さらに第6引数の5により実行回数が5回と決定されます。

Page 66: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 64 -

出力接点番号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回目

この時、処理の対象となっているのはnBuffer[0]~nBuffer[14]までです。 ここまでで、バッファに格納されるデータと実行回数の関係は理解頂けたと思います。 次に実際の出力処理ですが、バックグランドでの出力にはDioOutputPointBack関数を使用します。DioSetBackGround関数でバックグランド処理を設定後、DioOutputPointBack関数を呼び出すことにより初めてバックグランドでの処理が開始されます。

「使用例」

nRet = DioOutputPointBack(hDeviceHandle, hBackGroundHandle,

&nBuffer[0], 20*sizeof(int), &lpOverlapped);

I/O モジュールのオープン時に取得したデバイスハンドルを指定します。

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

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

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

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

デバイスに出力するバイト数を指定します。

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

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

dwPointNum(処理する接点数) × dwValueNum(接点当たりのバッファサイズ) × sizeof(int)

dwPointNumとdwValueNumはDioSetBackGround関数で設定した値を指定します。 ここでsizeof(int)はint型のバイト数を示します。

1接点あたりのバッファサイズは5です。

Page 67: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 65 - Interface Corporation

List 3-2では、nNumberOfBytesToWrite = 1 × 20 × sizeof(int) となるわけです。 また、DioSetBackGroundで設定したバックグランド処理の設定は、バックグランド処理が終了または不要になった場合、これを解放しなければなりません。設定したバックグラウンドのリソー

スが格納してあるメモリ領域を解放するためです。バックグランド処理をDioStopBackGround関数で停止した場合にも、処理停止後、設定の解放が必要となります。このため、DioSetBackGroundとDioFreeBackGroundは対になっています。 バックグランド処理の設定の解放には、DioFreeBackGround関数を使用します。

「使用例」

nRet = DioFreeBackGround(hDeviceHandle, hBackGroundHandle)

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

I/O モジュールのオープン時に取得したデバイスハンドルを指定します。

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

ここまでが、Win32APIを用いたバックグランド処理のプログラム例です。しかし、非同期処理を実現する方法は先にも記したとおりこの限りではありません。複数のスレッド(プロセスに含まれる実行経路)を使用することで、これらバックグランド関数を使用せずとも同等もしくはそれ以上の機能を作成することは可能ですが、本冊子ではWin32 APIを用いたバックグランド処理の記述にとどめます。

Page 68: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 66 -

4.4 割り込み処理

ここでは、割り込み処理の方法に関し記載します。割り込みとは、何らかの条件により実行中の

プログラムを中断し、他のプログラムに制御を移すことです。

実行中プログラム

割り込み発生

プログラム中断中 割り込み処理スタート

割り込み処理が終われば元のプログラムに制御を戻します。

ここでは、バックグランドにて非同期に常時割り込み入力を監視し、割り込みを検知するとメッ

セージボックスを表示させユーザーに知らせる方法を記載しています。 CHK-2101の入力接点番号1(IN1)のスイッチより、入力(High Low)があった場合、それを割り込み信号として取得するプログラムの作成を行います。非同期処理の実現にはWin32 APIを使用しています。

Step1.メインウィンドウ作成

ここでは、これから作成するプログラムの画面作成を行います。(詳しくは『20ページ 4.1 デジタル入力』でのStep1~Step3を参考にしてください。) 1. Visual C++を起動し、新しいプロジェクト(プロジェクト名:Interrupt)を作成します。 プロジェクトにFBIDIO.LIBファイル,FBIDIO.Hファイルのパス設定を行い、ライブラリファイル”fbidio.lib”をリンクさせます(デジタル入力Step2を参照してください)。

2. メインウィンドウにメニューアイテムの追加を行います(デジタル入力Step4の2を参照して下 さい)。ポップアップのチェックをはずし以下のように設定します。

ID ID_INTERRUPT キャプション 割り込み

3. メンバ関数”OnInterrupt”の設定を行います(デジタル入力Step4の4~7を参照してください)。 以下のように設定します。

プロジェクト Interrupt クラス名 CInterruptView オブジェクト ID_INTERRUPT メッセージ COMMAND

Page 69: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 67 - Interface Corporation

Step2.割り込み検知処理作成

ここでは、バックグランドで割り込み信号の検知を行うプログラムの作成を行います。 割り込み監視処理の構築は、以下のシーケンスで行います。

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

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

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

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

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

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

1. InterruptView.cppの以下の位置(最初の部分)に”fbidio.h”を追加します。

(List 4-1 fbidio.hのインクルード) // InterruptView.cpp : CInterruptView クラスの動作の定義を行います。 // #include "stdafx.h" #include "Interrupt.h" #include "InterruptDoc.h" #include "InterruptView.h" #include "fbidio.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

2. OnInterrupt関数に次項のコード(List4-2)を記述します。プログラムリスト中のDLL関数について は後述します。

ここに追加

Page 70: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 68 -

(List 4-2 割り込み発生待ち OKボタンのクリックイベントのコード)

void CInterruptView::OnInterrupt() { // TODO: この位置にその他の検証用のコードを追加してください INT nRet; //関数の実行結果 HANDLE hDeviceHandle; //デバイスハンドル DWORD dwEventBuf; //通知されたイベント格納用 OVERLAPPED EventOverlapped; //オーバーラップ構造体 // デバイスをオープンします hDeviceHandle = DioOpen("FBIDIO1", FBIDIO_FLAG_SHARE); if (hDeviceHandle == INVALID_HANDLE_VALUE) {

AfxMessageBox("デバイスのオープンに失敗しました"); return ;

} // イベントオブジェクト(割り込み監視)の作成を行います EventOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // 割り込み発生論理の設定を行います

nRet = DioSetIrqConfig(hDeviceHandle, 0x00); if( nRet != FBIDIO_ERROR_SUCCESS){

AfxMessageBox("割り込み要因の割り当てに失敗しました"); DioClose(hDeviceHandle); CloseHandle(EventOverlapped.hEvent); return ;

} // 割り込みをアンマスクします

nRet = DioSetIrqMask(hDeviceHandle, 0x01); if(nRet != FBIDIO_ERROR_SUCCESS){

AfxMessageBox("マスク設定に失敗しました"); DioClose(hDeviceHandle); CloseHandle(EventOverlapped.hEvent); return ;

} // I/O モジュールのイベント要求を待ちます nRet = DioEventRequestPending(hDeviceHandle, 0x01, &dwEventBuf, &EventOverlapped); if(nRet != FBIDIO_ERROR_IO_PENDING){

AfxMessageBox("割り込み待ちに失敗しました"); CloseHandle(EventOverlapped.hEvent); DioClose(hDeviceHandle); return ;

}else{ AfxMessageBox("割り込みの発生を待ちます");

} //割り込みがあるまで待機します nRet = WaitForSingleObject(EventOverlapped.hEvent, 10000); if(nRet == 0){

AfxMessageBox("割り込みを検知しました"); }else{

AfxMessageBox("タイムアウトしました"); } // 割り込みをマスクします。

nRet = DioSetIrqMask(hDeviceHandle, 0x00); if(nRet != FBIDIO_ERROR_SUCCESS){

AfxMessageBox("マスク設定に失敗しました"); DioClose(hDeviceHandle); CloseHandle(EventOverlapped.hEvent); return ;

} // デバイスのクローズを行います nRet = DioClose( hDeviceHandle ); if ( nRet != FBIDIO_ERROR_SUCCESS) {

AfxMessageBox("デバイスのクローズに失敗しました"); CloseHandle(EventOverlapped.hEvent); return ;

} // 作成したイベントを終了します CloseHandle(EventOverlapped.hEvent); }

Page 71: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 69 - Interface Corporation

では、プログラムを実行してみてください。 メインウィンドウの右上の「割り込み」をクリックしてください。”割り込みの発生を待ちます”というメッセージボックスが出現し、「OK」ボタンを押すとバックグランドでの割り込みの監視が開始されます。 では、ここでCHK-2101の入力接点番号1(IN1)のスイッチの状態をOFF ON(High Low)にしてください。 画面上に「割り込みを検知しました」とメッセージボックスが表示されます。

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

「使用例」 nRet = DioSetIrqConfig(hDeviceHandle, 0x00);

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

I/O モジュールのオープン時に取得したデバイスハンドルを指定します。

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

List 4-2ではCHK-2101の入力接点番号1(IN1)のスイッチをOFF ON(High Low)にした時のみ割り込みイベントが発生し、ON OFF(Low High)にしても割り込みイベントは発生しません。これは、どういった信号を割り込みとして扱うかが、I/Oモジュールに設定されているためです。割り込み要因の設定にはDioSetIrqConfig関数を使用します。 割り込み要因の論理の設定ですが、設定される数値データは2進数変換時、各ビットにおいて以下の意味をもっています。

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

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

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

Page 72: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 70 -

割り込み発生論理設定状態 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

List 4-2においては、0x00が設定されています。つまり、Bit7~Bit0までが「00000000」と設定され、その意味は「IN1,IN2,IN3,IN4のうちどれかが、High Lowに変化した時それを割り込み入力とする」と定義しているわけです。

注意!

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

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

では、プログラム実行後、入力接点番号2(IN2)をOFF ON(High Low)にした時はどうでしょう。「割り込みを検知しました」というメッセージボックスは表示されません。つまり割り込みは発

生しません。 これは、IN1以外の状態の変化がマスク処理(不要な割り込み入力を保護)されているためです。 割り込み入力のマスク処理にはDioSetIrqMask関数を使用します。

「使用例」 nRet = DioSetIrqMask(hDeviceHandle, 0x01);

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

I/O モジュールのオープン時に取得したデバイスハンドルを指定します。

割り込み要因のマスク/アンマスクを設定します。

Page 73: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 71 - Interface Corporation

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

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

SIGR=外部割り込み SIGT=タイマ割り込み 値 意味 0 マスクする 1 マスクしない SIG1[割り込み要因割り当て] 値 意味 0 IN1 1 STB1 SIG2[割り込み要因割り当て] 値 意味 0 IN2 1 IR.IN1 SIG3[割り込み要因割り当て] 値 意味 0 IN3 1 ACK2 SIG4[割り込み要因割り当て] 値 意味 0 IN4 1 IR.IN2

List 4-2では0x01が設定されています。つまりBit7~Bit0までが「00000001」と設定され、入力接点番号1(IN1)以外の入力信号はマスク処理されているので、入力接点番号1(IN1)以外の状態の変化は割込み信号として処理されません。 最後に、実際の監視処理の開始ですが、DioEventRequestPending関数が呼び出されて初めて処理が開始されます。

「使用例」

nRet = DioEventRequestPending(hDeviceHandle, 0x01, &dwEventBuf, &lpEventOverlapped);

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

I/O モジュールのオープン時に取得したデバイスハンドルを指定します。

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

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

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

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

Page 74: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 72 -

許可するイベントですが、設定される数値データは2進数変換時、各ビットにおいて以下の意味をもっています。1の時そのイベントは有効となります。List 4-2ではBit3~Bit0までが「1111」と設定され、IN1~IN4で入力信号を検知すると割り込みイベントとして認識するよう定義しています。

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

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

の割り込みイベントを有効としておき、途中、DioSetIrqMask関数によりその入力をマスクするといった用途等があげられます。 List 4-2ではDioSetIrqMask関数を便宜上記載しました。 ここまでが、Win32APIを用いた割り込み処理のプログラム例です。割り込みを多用するとプログラムが複雑になることがあります。ですが、柔軟なシステム作成においてこの割り込み処理は有

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

タリング※の影響によるものです。I/Oモジュールの仕様範囲内で電圧をかける等すると同現象を回避できる場合があります。 ※ メカニカルなスイッチ等のON,OFFでは切り替わる際に信号がON/OFFの境界をしばらく行き 来するノイズが発生します。これをチャタリングと言います。スイッチによっては、数100ms信号が安定しない場合もあります。

ON

OFFチャタリング

以上でデジタルI/Oモジュールを使ったチュートリアルを終わります。 次ページからはFbiDio.DLL関数についての説明を行います。

Page 75: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 73 - Interface Corporation

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

指定されたデバイス名のI/Oモジュールのオープンを行い、以後のI/Oモジュールへのアクセスを行えるようにします。 宣言 HANDLE DioOpen(LPCTSTR lpszName,DWORD fdwFlags); パラメータ

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

値 意味

0 デバイスを排他オープンします。重複オープンを禁止します。

FBIDIO_FLAG_SHARE 同じデバイスを重複(共有)してオープンすることを許可します。 戻り値 関数が成功すると有効なデバイスハンドルが返されます。 関数が失敗するとINVALID_HANDLE_VALUEが返されます。 解説 Windows XP/XP Embedded/Server 2003/2000/Me/98/95では、「デバイスマネージャ」に「FbiPciDio」が追加され認識された弊社デジタルI/Oモジュールが一覧表示されます。一覧の製品型式の横にI/Oモジュール上のロータリスイッチ(RSW1)の値とデバイス名が表示されます。診断プログラム(DIAGDIO.EXE),DI入力ユーティリティ(DIUTIL.EXE),DO出力ユーティリティ(DOUTIL.EXE)でも確認できます。 Windows NTでは、診断プログラム(DIAGDIO.EXE),DI入力ユーティリティ(DIUTIL.EXE),DO出力ユーティリティ(DOUTIL.EXE)にて割り当てられたデバイス名を確認できます。 デバイス名はI/Oモジュール上のロータリスイッチ(RSW1)の値で決定されるわけではありません。 使用するI/Oモジュール枚数やスロット位置の変更等でシステム構成が変化すると割り当てられる名前が変化する場合があります。デバイス名はDioCommonGetPciDeviceInfoにより取得できます。システム構成が変化する環境で使用する場合は、デバイス名の指定が変更できるようにアプリケーションを作成してください。 FBIDIO_FLAG_SHAREフラグを指定することにより、同じデバイス名を2つ以上のアプリケーションで共有することが可能となります。

DioClose

I/Oモジュールのクローズを行い、I/Oモジュールアクセスのために使用されていた各種リソースの解放を行います。 宣言 INT DioClose(HANDLE hDeviceHandle); パラメータ

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

DioInputPoint

I/Oモジュールの任意の点数の入力接点の状態を読み込みます。 宣言 INT DioInputPoint(HANDLE hDeviceHandle,PINT pBuffer,DWORD dwStartNum,DWORD dwNum); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します pBuffer デバイスから読み取ったデータを受け取るバッファへのポインタを指定します。 dwStartNum バッファに取得する入力接点の開始番号を指定します。 dwNum 入力接点数を指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 指定した開始接点番号から1接点ずつINT型の変数にデータが格納されます。

Page 76: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 74 -

DioOutputPoint

任意の点数の出力接点の出力を制御します。 宣言 INT DioOutputPoint(HANDLE hDeviceHandle,PINT pBuffer,DWORD dwStartNum,DWORD dwNum); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します pBuffer デバイスから出力するデータを格納するバッファへのポインタを指定します。 dwStartNum 出力接点の開始番号を指定します。 dwNum 出力接点数を指定します。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 指定した開始接点番号から1接点ずつINT型の変数に格納されたデータで接点を制御します。

DioGetBackGroundUseTimer

バックグランド処理で使用するタイマーの情報を取得します。 宣言 INT DioGetBackGroundUseTimer(HANDLE hDeviceHandle,PINT pnUse); パラメータ

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

値 意味 0 コンピュータのタイマーを使用します。

1(0以外) I/Oモジュール上のタイマーを使用します。I/Oモジュール上のタイマを使用する

場合、DioSetTimerConfig関数,DioGetTimerConfig関数,DioGetTimerCount関数は使用できません。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 バックグランド処理でI/Oモジュール上のタイマを使用するか、コンピュータのタイマを使用するかの設定情報を取得します。

DioSetBackGroundUseTimer

バックグランド処理で使用するタイマーの設定を行います。 宣言 INT DioSetBackGroundUseTimer(HANDLE hDeviceHandle,INT nUse); パラメータ

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

値 意味 0 コンピュータのタイマ-を使用します。

1(0以外) I/Oモジュール上のタイマーを使用します。I/Oモジュール上のタイマを使用する

場合、DioSetTimerConfig関数,DioGetTimerConfig関数,DioGetTimerCount関数は使用できません。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 バックグランド処理でI/Oモジュール上のタイマを使用するか、コンピュータのタイマを使用するかを設定します。

Page 77: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 75 - Interface Corporation

DioSetBackGround

バックグランド関数実行時の接点番号,接点数,処理回数を設定します。 宣言 HANDLE DioSetBackGround(HANDLE hDeviceHandle,DWORD dwStartPoint,DWORD dwPointNum,DWORD dwValueNum, DWORD dwCycle,DWORD dwCount,DWORD dwOption); パラメータ

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

ルの場合はピンIN1が1に対応します。デジタル出力モジュールの場合はピンOUT1が1に対応します。デジタル入出力モジュール(双方向)の場合ピンI/O1が1に対応します。

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

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

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

DioFreeBackGround

DioSetBackGroundで設定したバックグランド処理の設定を解放します。 宣言 INT DioFreeBackGround(HANDLE hDeviceHandle,HANDLE hBackGroundHandle); パラメータ

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

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

DioStopBackGround バックグランド処理を停止します。 宣言 INT DioStopBackGround(HANDLE hDeviceHandle,HANDLE hBackGroundHandle); パラメータ

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

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 停止したいバックグランド処理ハンドル(DioSetBackGround関数で取得)を指定して処理を停止させます。

Page 78: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 76 -

DioGetBackGroundStatus

バックグランド処理の設定情報,実行状態を取得します。 宣言 INT DioGetBackGroundStatus(HANDLE hDeviceHandle,HANDLE hBackGroundHandle,PINT pnStartPoint, PINT pnPointNum,PINT pnValueNum,PINT pnCycle,PINT pnCount,PINT pnOption,PINT pnExecute, PINT pnExecCount, PINT pnBufferOffset, PINT pnOver ); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 hBackGroundHandle バックグランド処理のハンドルを指定します。 pnStartPoint 設定された入出力開始接点番号が返されます。 pnPointNum 設定された接点数が返されます。 pnValueNum ひとつの接点に対して確保したバッファ数が返されます。 pnCycle 設定されたバックグランド処理周期、監視分解能が返されます。 pnCount 設定された処理回数が返されます。 pnOption 将来拡張用 pnExecute 実行状態を示す値が返されます。

値 意味 0 停止中 1 実行中

pnExecCount 実行された回数が返されます。 pnBufferOffset 実行中のデータが格納されているオフセット位置が返されます。 pnOver バッファオーバー発生の有無を示す値が返されます。

値 意味 0 - 1 バッファオーバー発生 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 情報を取得したいバックグランド処理ハンドル(DioSetBackGround関数で取得)を指定します。

DioInputPointBack DioSetBackGround関数で設定した任意の点数の入力接点の状態をバックグランドで読み込みます。 宣言 INT DioInputPointBack(HANDLE hDeviceHandle, HANDLE hBackGroundHandle, PINT pBuffer, DWORD nNumberOfBytesToRead, LPOVERLAPPED lpOverlapped ); パラメータ

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

pBuffer バッファへのポインタを指定します。このバッファに任意の点数の入力接点より取得した状態が格納されます。

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

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

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

Page 79: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 77 - Interface Corporation

DioOutputPointBack

DioSetBackGround関数で設定した任意の点数の出力接点の出力をバックグランドで制御します。 宣言 INT DioOutputPointBack(HANDLE hDeviceHandle,HANDLE hBackGroundHandle,PINT pBuffer, DWORD nNumberOfBytesToWrite,LPOVERLAPPED lpOverlapped); パラメータ

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

pBuffer バッファへのポインタを指定します。このバッファに格納した値が任意の点数の出力接点より出力されます。

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

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

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

DioWatchPointBack

DioSetBackGround関数で設定した任意の点数の状態を監視します。 宣言 INT DioWatchPointBack(HANDLE hDeviceHandle,HANDLE hBackGround,PINT pBuffer, DWORD nNumberOfBytesToRead,LPOVERLAPPED lpOverlapped); パラメータ

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

pBuffer バッファへのポインタを指定します。このバッファに取得した任意の点数の状態が格納されます。 nNumberOfBytesToRead デバイスから入力するバイト数を指定します。 lpOverlapped OVERLAPPEDデータ構造体へのポインタを指定します。

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

nNumberOfBytesToRead = dwPointNum × dwValueNum × sizeof(int) dwPointNumとdwValueNumはDioSetBackGround関数に設定した値を指定します。 DioWatchPointBackをコールした時から接点状態の監視が開始されます。DioStopBackGround関数をコールするまで監視し続けます。 DioWatchPointBackは16変化分を内部に保存可能となっています。16変化を越える変化は保存されません。DioWatchPointBackをコールして変化データが保存されている場合はすぐに制御を戻します。オーバーラップ構造体(lpOverlapped)を指定した非同期コールの場合、変化がない場合はFBIDIO_ERROR_IO_PENDINGを返し非同期での動作となります。 DioInputPointBack関数では設定された周期でデータの取得を行うのに対し、本関数は状態に変化があった時のみ、そのデータの取得を行います。

Page 80: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 78 -

DioGetInputHandShakeConfig

DioSetInputHandShakeConfig関数により設定した、制御信号を使用したハンドシェーク入力の設定情報を取得します。 宣言 INT DioGetInputHandShakeConfig(HANDLE hDeviceHandle,PINT pnInputHandShakeConfig, PDWORD pdwBitMask1,PDWORD pdwBitMask2); パラメータ

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

値 意味 0 STB1イベントを使用しません。 FBIDIO_STB1_ENABLE STB1イベントを使用します。 FBIDIO_STB1_HIGH_EDGE STB1の立ち上がりエッジのタイミングをSTB1信号有効とします

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

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

DioSetInputHandShakeConfig

制御信号を使用したハンドシェーク入力の設定を行います。 宣言 INT DioSetInputHandShakeConfig(HANDLE hDeviceHandle,INT nInputHandShakeConfig,DWORD dwBitMask1, DWORD dwBitMask2); パラメータ

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

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

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

当社の出力I/OモジュールのSTB2信号に同期させる場合は指定しないでください。

入力データマスクビットを指定します。(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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 81: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 79 - Interface Corporation

DioGetOutputHandShakeConfig

DioSetOutputHandShakeConfig関数により設定した、制御信号を使用したハンドシェーク出力の設定情報を取得します。 宣言 INT DioGetOutputHandShakeConfig(HANDLE hDeviceHandle,PINT pnOutputHandShakeConfig, PDWORD pdwBitMask1,PDWORD pdwBitMask2); パラメータ

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

値 意味 0 ACK2イベントを使用しません。 FBIDIO_ACK2_ENABLE ACK2イベントを使用します。 FBIDIO_ACK2_HIGH_EDGE ACK2の立ち上がりエッジのタイミングをACK2信号有効とします

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

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

DioSetOutputHandShakeConfig

制御信号を使用したハンドシェーク出力の設定を行います。 宣言 INT DioSetOutputHandShakeConfig(HANDLE hDeviceHandle,INT nOutputHandShakeConfig,DWORD dwBitMask1, DWORD dwBitMask2); パラメータ

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

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

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

当社の出力I/OモジュールのACK1信号に同期させる場合は指定しないでください。

出力データマスクビットを指定します。(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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 82: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 80 -

DioInputHandShake

制御信号を使用したハンドシェーク入力を行います。 宣言 INT DioInputHandShake(HANDLE hDeviceHandle,LPVOID lpBuffer,DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead,LPOVERLAPPED lpOverlapped); パラメータ

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

nNumberOfBytesToRead デバイスから入力するバイト数を指定します。 lpNumberOfBytesRead 入力されたバイト数が返されます。

非同期コールの場合、この値は意味を持ちません。非同期コールで、実際に入力されたバイト数を取得するには、DioGetOverlappedResult関数をご使用ください。)

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

DioInputHandShakeEx 制御信号を使用したハンドシェーク入力を行います。(コールバック関数有り:Windows 2000/NTでのみ使用可能) 宣言 INT DioInputHandShakeEx(HANDLE hDeviceHandle,LPVOID lpBuffer,DWORD nNumberOfBytesToRead, LPOVERLAPPED lpOverlapped,LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); パラメータ

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

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

lpCompletionRoutine 完了ルーチンへのポインタを指定します。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 本API関数はWindows XP/2000/NTにおいてのみ有効です。Windows Me/98/95で本関数を呼び出した場合には、FBIDIO_ERROR_NOT_SUPPORTEDが返されます。

Page 83: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 81 - Interface Corporation

DioOutputHandShake

制御信号を使用したハンドシェーク出力を行います。 宣言 INT DioOutputHandShake(HANDLE hDeviceHandle,LPVOID lpBuffer,DWORD nNumOfBytesToWrite, LPDWORD lpNumOfBytesWritten,LPOVERLAPPED lpOverlapped); パラメータ

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

nNumberOfBytesToRead デバイスから出力するバイト数を指定します。 lpNumberOfBytesWritten 出力されたバイト数が返されます。

(非同期コールの場合、この値は意味を持ちません。非同期コールで、実際に出力されたバイト数を取得するには、DioGetOverlappedResult関数をご使用ください。)

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

DioOutputHandShakeEx

制御信号を使用したハンドシェーク出力を行います。(コールバック関数有り:Windows 2000/NTでのみ使用可能) 宣言 INT DioOutputHandShakeEx(HANDLE hDeviceHandle,LPVOID lpBuffer,DWORD nNumberOfBytesToWrite, LPOVERLAPPED lpOverlapped,LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); パラメータ

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

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

lpCompletionRoutine 完了ルーチンへのポインタを指定します。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 本API関数はWindows XP/2000/NTにおいてのみ有効です。Windows Me/98/95で本関数を呼び出した場合には、FBIDIO_ERROR_NOT_SUPPORTEDが返されます。

DioStopInputHandShake

指定されたデジタルI/Oモジュールのハンドシェーク入力を停止します。 宣言 INT DioStopInputHandShake(HANDLE hDeviceHandle); パラメータ

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

Page 84: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 82 -

DioStopOutputHandShake

指定されたデジタルI/Oモジュールのハンドシェーク出力を停止します。 宣言 INT DioStopOutputHandShake(HANDLE hDeviceHandle); パラメータ

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

DioGetHandShakeStatus

ハンドシェーク入出力の状態を取得します。 宣言 INT DioGetHandShakeStatus(HANDLE hDeviceHandle,PDWORD pdwDeviceStatus,PDWORD pdwInputedBuffNum, PDWORD pdwOutputedBuffNum); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwDeviceStatus 現在のデバイスの状態を以下のビット構成で格納されます。該当ビットが1の時、有効です。

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

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

DioGetOverlappedResult

ハンドシェーク入出力(DioInputHandShake/DioOutputHandShake)関数の非同期コール時の、実際に入出力されたバイト数を取得します。 ※ 同期コール時には、本関数は必要ありません。 宣言 INT DioGetOverlappedResult (HANDLE hDeviceHandle,LPOVERLAPPED lpOverlapped,LPDWORD pNumberOfBytes ,BOOL bWait); パラメータ

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

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

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

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

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

Page 85: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 83 - Interface Corporation

DioInputByte

デジタルI/Oモジュールの指定した接点8点分のデータを読み込み、1バイト(8ビット)の変数に格納します。 宣言 INT DioInputByte(HANDLE hDeviceHandle,INT nNo,PBYTE pbValue); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

DioInputWord

デジタルI/Oモジュールの指定した接点16点分のデータを読み込み、1ワード(16ビット)の変数に格納します。 宣言 INT DioInputWord(HANDLE hDeviceHandle,INT nNo,PWORD pwValue); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

DioInputDword

デジタルI/Oモジュールの指定した接点32点分のデータを読み込み、1ダブルワード(32ビット)の変数に格納します。 宣言 INT DioInputDword(HANDLE hDeviceHandle,INT nNo,PDWORD pdwValue); パラメータ

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

値 意味 FBIDIO_IN1_32 IN1~IN32の32点分のデータを読み込みます。 FBIDIO_IN33_64 IN33~IN64の32点分のデータを読み込みます。

pdwValue バッファへのポインタを指定します。このバッファに取得したデータが格納されます。 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 86: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 84 -

DioOutputByte

デジタルI/Oモジュールの指定した接点8点分の出力を制御します。 宣言 INT DioOutputByte(HANDLE hDeviceHandle,INT nNo,BYTE bValue); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

DioOutputWord

デジタルI/Oモジュールの指定した接点16点分の出力を制御します。 宣言 INT DioOutputWord(HANDLE hDeviceHandle,INT nNo,WORD wValue); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

DioOutputDword

デジタルI/Oモジュールの指定した接点32点分の出力を制御します。 宣言 INT DioOutputDword(HANDLE hDeviceHandle,INT nNo,DWORD dwValue); パラメータ

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

値 意味 FBIDIO_OUT1_32 OUT1~OUT32の32点分のデータを出力します。 FBIDIO_OUT33_64 OUT33~OUT64の32点分のデータを出力します。

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

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

Page 87: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 85 - Interface Corporation

DioGetAckStatus

デジタルI/OモジュールのACK2端子の状態,ACK2レジスタの状態,STB2端子の状態を取得します。 宣言 INT DioGetAckStatus(HANDLE hDeviceHandle,PBYTE pbAckStatus); パラメータ

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が返されます。 hDeviceHandleで指定したデジタルI/Oモジュールの制御信号の状態をpbAckStatus で指定された領域に格納します。それ以外の場合は、0以外の値が返ります。この場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 DioSetStbPulseCommand関数と併用してハンドシェーク出力を行うことができます。制御信号(STB,ACK)を使用したハンドシェーク出力の説明をI/OモジュールのUSER’S MANUALに記載していますので、そちらも参照してください。

Page 88: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 86 -

DioSetAckPulseCommand

デジタルI/OモジュールのACK1,PULS.OUT1の出力制御を行います。 宣言 INT DioSetAckPulseCommand(HANDLE hDeviceHandle,BYTE bCommand); パラメータ

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が返されます。 hDeviceHandleで指定したデジタルI/Oモジュールの制御信号をbCommandの組み合わせで制御します。それ以外の場合は、0以外の値を返します。それ以外の場合は0以外の値が返ります。その場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 89: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 87 - Interface Corporation

DioGetStbStatus

デジタルI/OモジュールのSTB1端子の状態,STB1レジスタの状態,ACK1端子の状態を取得します。 宣言 INT DioGetStbStatus(HANDLE hDeviceHandle,PBYTE pbStbStatus); パラメータ

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

端子の状態が下記のビット構成で格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 STB1 STBR1 ACK1 LF - - - IR.IN1 STB1[STB1端子の状態]

値 意味 0 Low 1 High

STBR1[STB1レジスタの状態]

値 意味

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

1 STB1がHighのまま変化がないことを示します。ACK1をLowにすることで、STB1レジスタはクリアされます

ACK1[ACK1端子の状態]

値 意味 0 Low 1 High

LF[入力ラッチ機能の状態]

値 意味 0 データラッチしていない 1 データラッチしている

IR.IN1[IR.IN1端子の状態]

値 意味 0 Low 1 High 戻り値 関数が成功すると0が返されます。 hDeviceHandleで指定したデジタルI/Oモジュールの制御信号の状態をpbStbStatus で指定された領域に格納します。それ以外の場合は0以外の値が返ります。その場合の戻り値については『108ページ エラーコード一覧』を参照してください。 解説 DioSetAckPulseCommand関数と併用してハンドシェーク入力を行うことができます。制御信号(STB,ACK)を使用したハンドシェーク出力の説明をI/OモジュールのUSER’S MANUALに記載していますので、そちらも参照してください。

Page 90: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 88 -

DioSetStbPulseCommand

デジタルI/OモジュールのSTB2,PULS.OUT2の出力制御を行います。 宣言 INT DioSetStbPulseCommand(HANDLE hDeviceHandle,BYTE bCommand); パラメータ

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

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

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

(他の設定は無効です。) デジタル出力信号(PULS.OUT2)制御

PO22 PO21 PO20 処理 0 0 1 PULS.OUT2端子をHighにします 0 1 0 PULS.OUT2端子をLowにします 1 0 0 PULS.OUT2端子からLowパルスを出力します (他の設定は無効です。) 戻り値 関数が成功すると0が返されます。 hDeviceHandleで指定したデジタルI/Oモジュールの制御信号をbCommandの組み合わせで制御します。それ以外の場合は0以外の値が返ります。その場合の戻り値については『108ページ エラーコード一覧』を参照してください。

DioInputUniversalPoint

デジタル入力端子の状態を読み込みます。※ PCI製品にデジタル入力端子はありません。 宣言 INT DioInputUniversalPoint(HANDLE hDeviceHandle,PDWORD pdwUniversalPoint); パラメータ

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

トごとにデジタル入力端子と対応しています。 Bit31~9 Bit8 Bit7 ・・・ Bit2 Bit1 Bit0 未使用 PWR.IN1 DI8 ・・・ DI3 DI2 DI1

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

DioOutputUniversalPoint

デジタル出力端子の出力を制御します。※ PCI製品にデジタル入力端子はありません。 宣言 INT DioOutputUniversalPoint(HANDLE hDeviceHandle,DWORD dwUniversalPoint); パラメータ

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

ル出力端子と対応しています。 Bit31~8 Bit7 Bit6 ・・・ Bit2 Bit1 Bit0 未使用 DO81 DO7 ・・・ DO3 DO2 DO1

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

Page 91: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 89 - Interface Corporation

DioSetTimeOut

ハンドシェーク入出力時のタイムアウト時間を設定します。 宣言 INT DioSetTimeOut(HANDLE hDeviceHandle,DWORD dwInputTotalTimeout,DWORD dwInputIntervalTimeout, DWORD dwOutputTotalTimeout,DWORD dwOutputIntervalTimeout); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwInputTotalTimeout ハンドシェーク入力時のトータルタイムアウト値を10ms単位で指定します。

DioInputHandShake関数、DioInputHandShakeEx関数において指定したデータ長の入力が全て完了するまでの時間より大きい値を指定する必要があります。

dwInputIntervalTimeout ハンドシェーク入力時の各接点情報間でのタイムアウト値を10ms単位で指定します。DioInputHandShake関数、DioInputHandShakeEx関数において各接点情報の入力時における前の入力から次の入力までの時間より大きい値を指定する必要があります。

dwOutputTotalTimeout ハンドシェーク出力時のトータルタイムアウト値を10ms単位で指定します。DioOutputHandShake関数、DioOutputHandShakeEx関数において指定したデータ長の出力が全て完了するまでの時間より大きい値を指定する必要があります。

dwOutputIntervalTimeout ハンドシェーク出力時の各接点情報間でのタイムアウト値を10ms単位で指定します。DioOutputHandShake関数、DioOutputHandShakeEx関数において各接点情報の出力時における前の出力から次の出力までの時間より大きい値を指定する必要があります。

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

DioGetTimeOut

ハンドシェーク入出力時のタイムアウト設定値を取得します。 宣言 INT DioGetTimeOut(HANDLE hDeviceHandle,PDWORD pdwInputTotalTimeout, PDWORD pdwInputIntervalTimeout, PDWORD pdwOutputTotalTimeout,PDWORD pdwOutputIntervalTimeout); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwInputTotalTimeout ハンドシェーク入力時のトータルタイムアウト値が10ms単位で返されます。 pdwInputIntervalTimeout ハンドシェーク入力時の各接点情報間でのタイムアウト値が10ms単位で返されます。 pwOutputTotalTimeout ハンドシェーク出力時のトータルタイムアウト値が10ms単位で返されます。 pdwOutputIntervalTimeout ハンドシェーク出力時の各接点情報間でのタイムアウト値が10ms単位で返されます。

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

DioSetIrqMask

デジタルI/Oモジュールの割り込みマスクの状態を設定します。 宣言 INT DioSetIrqMask(HANDLE hDeviceHandle,BYTE bIrqMask); パラメータ

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

割り込み要因のマスク/アンマスクの設定が行われます。設定は下記のビットの組み合わせで行います。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - SIGR SIGT SIG4 SIG3 SIG2 SIG1

SIGR=外部割り込み SIGT=タイマ割り込み

値 意味 0 マスク 1 アンマスク 戻り値 関数が成功すると0が返されます。 bIrqMaskで指定された情報で、割り込み要因のマスク/アンマスクを設定します。それ以外の場合は0以外の値が返ります。その場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 92: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 90 -

DioGetIrqMask

デジタルI/Oモジュールの割り込みマスクの状態を取得します。 宣言 INT DioGetIrqMask(HANDLE hDeviceHandle,PBYTE pbIrqMask); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbIrqMask バッファへのポインタを指定します。このバッファにI/Oモジュールに設定された割り込み要因

のマスク/アンマスクの状態が格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - SIGR SIGT SIG4 SIG3 SIG2 SIG1

SIGR=外部割り込み SIGT=タイマ割り込み

値 意味 0 マスク 1 アンマスク 戻り値 関数が成功すると0が返されます。 pbIrqMaskに割り込み要因のマスク状態を格納します。それ以外の場合は0以外の値が返ります。その場合の戻り値については 『108ページ エラーコード一覧』を参照してください。

DioSetIrqConfig

デジタルI/Oモジュールの割り込み要因の割り当て,割り込み発生論理を設定します。 宣言 INT DioSetIrqConfig(HANDLE hDeviceHandle,BYTE bIrqConfig); パラメータ

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が返されます。 bIrqConfigで指定された情報で、割り込み要因の割り当て,割り込み発生論理の設定を行います。それ以外の場合は0以外の値が返ります。その場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 93: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 91 - Interface Corporation

DioGetIrqConfig

デジタルI/Oモジュールの割り込み要因の割り当て,割り込み発生論理の設定状態を取得します。 宣言 INT DioGetIrqConfig(HANDLE hDeviceHandle,PBYTE pbIrqConfig); パラメータ

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が返されます。 pbIrqConfigに割り込み要因の割り当て,割り込み発生論理の設定データを格納します。それ以外の場合は0以外の値が返ります。その場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 94: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 92 -

DioGetDeviceConfig

デバイスがサポートしている機能情報を取得します。 宣言 INT DioGetDeviceConfig(HANDLE hDeviceHandle,PDWORD pdwDeviceConfig); パラメータ

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 デジタル入力1のみサポート Bit23 デジタル入力1~4のサポート Bit24 デジタル入力5~8のサポート Bit25 デジタル出力1のみサポート Bit26 デジタル出力1~4のサポート Bit27 デジタル出力5~8のサポート Bit28 将来拡張用 Bit29 将来拡張用 Bit30 インターバルタイマの使用 戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 95: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 93 - Interface Corporation

DioSetTimerConfig

インターバルタイマの設定を行います。 宣言 INT DioSetTimerConfig(HANDLE hDeviceHandle,BYTE bTimerConfigValue); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 96: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 94 -

DioGetTimerConfig

インターバルタイマの設定情報を取得します。 宣言 INT DioGetTimerConfig(HANDLE hDeviceHandle,PBYTE pbTimerConfigValue); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 97: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 95 - Interface Corporation

DioGetTimerCount

インターバルタイマのカウント値を取得します。 宣言 INT DioGetTimerConfig(HANDLE hDeviceHandle,PBYTE pbTimerConfigValue); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

DioSetLatchStatus

デジタルI/Oモジュールの入力状態ラッチ回路の接続を設定します。ラッチ回路の接続を指定するとSTB1端子のセットで入力データをラッチ(保持)することができます。STB1、ACK1端子を使用したハンドシェーク入力を行う場合に、信頼度を向上させることができます。 宣言 INT DioSetLatchStatus(HANDLE hDeviceHandle,BYTE bLatchStatus); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 bLatchStatus バッファへのポインタを指定します。このバッファに入力状態ラッチ回路の接続状態を以下の

ビット構成で設定します。 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が返されます。 bLatchStatusで指定された情報で入力状態ラッチ回路の接続状態を設定します。それ以外の場合は0以外の値が返ります。その場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 98: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 96 -

DioGetLatchStatus

デジタルI/Oモジュールの入力状態ラッチ回路の接続状態を取得します。 宣言 INT DioGetLatchStatus(HANDLE hDeviceHandle,PBYTE pbLatchStatus); パラメータ

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が返されます。 pbLatchStatusに入力状態ラッチ回路の接続状態を格納します。それ以外の場合は0以外の値を返します。その場合の戻り値については『108ページ エラーコード一覧』を参照してください。

DioGetResetInStatus

デジタルI/Oモジュールの外部リセット入力信号の状態を取得します。 宣言 INT DioGetResetInStatus(HANDLE hDeviceHandle,PBYTE pbResetInStatus); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pbResetInStatus 外部リセット入力信号の状態を示す値が返されます。

値 意味 0 リセット入力無効 1 リセット入力有効 戻り値 関数が成功すると0が返されます。 pbResetInStatusに外部リセット入力信号の状態を格納します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合ポートについては、『108ページ エラーコード一覧』を参照してください。 pbResetInStatusが1の時、外部からリセットが入っていることになります。

Page 99: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 97 - Interface Corporation

DioEventRequestPending

デジタルI/Oモジュールの割り込みイベント要求を待ちます。 宣言 INT DioEventRequestPending(HANDLE hDeviceHandle,DWORD dwEventEnableMask,PDWORD pEventBuf, LPOVERLAPPED lpOverlapped); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。

Page 100: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 98 -

DioCommonGetPciDeviceInfo

デバイスID,リソース情報,I/OモジュールID(RSW1)等の情報を取得します。 I/Oモジュール上のRSW1(I/OモジュールID)の設定値を取得し、複数枚のI/Oモジュールから目的のI/Oモジュールであるかを判断する等の目的で使用できます。 宣言 INT DioCommonGetPciDeviceInfo(HANDLE hDeviceHandle,PDWORD pdwDeviceID,PDWORD pdwVenderID, PDWORD pdwClassCode,PDWORD pdwRevisionID,PDWORD pdwBaseAddress0,PDWORD pdwBaseAddress1, PDWORD pdwBaseAddress2,PDWORD pdwBaseAddress3,PDWORD pdwBaseAddress4,PDWORD pdwBaseAddress5, PDWORD pdwSubsystemID,PDWORD pdwSubsystemVenderID,PDWORD pdwInterruptLine,PDWORD pdwBoardID); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwDeviceID バッファへのポインタを指定します。このバッファにデバイスIDデータが格納されます。弊社

PCIバス用デジタル入出力モジュールは、製品型式の数字部分4桁が適用されます。PCI-2104Cならば2104(16進数では838h)、CTP-2725ならば2725(16進数ではAA5h)です。 PCII/OモジュールとCompactPCII/Oモジュールを判別する必要がある場合、pdwSubsystemIDを参照してください。

pdwVenderID バッファへのポインタを指定します。このバッファにベンダIDデータが格納されます。弊社のベンダIDは、1147h(16進数)です。

pdwClassCode バッファへのポインタを指定します。このバッファにクラスコードデータが格納されます。 pdwRevisionID バッファへのポインタを指定します。このバッファにリビジョンIDデータが格納されます。 pdwBaseAddress0 バッファへのポインタを指定します。このバッファにリソース0データが格納されます。弊社PCI

バス用デジタル入出力モジュールは、ここに占有するI/O領域が格納されます。取得した値をFFFChでマスクした値が占有するI/O領域のベースアドレスです。

pdwBaseAddress1 バッファへのポインタを指定します。このバッファにリソース1データが格納されます。弊社PCIバス用デジタル入出力モジュールでは、使用しません。

pdwBaseAddress2 バッファへのポインタを指定します。このバッファにリソース2データが格納されます。弊社PCIバス用デジタル入出力モジュールでは、使用しません。

pdwBaseAddress2 バッファへのポインタを指定します。このバッファにリソース3データが格納されます。弊社PCIバス用デジタル入出力モジュールでは、使用しません。

pdwBaseAddress4 バッファへのポインタを指定します。このバッファにリソース4データが格納されます。弊社PCIバス用デジタル入出力モジュールでは、使用しません。

pdwBaseAddress5 バッファへのポインタを指定します。このバッファにリソース5データが格納されます。弊社PCIバス用デジタル入出力モジュールでは、使用しません。 バッファへのポインタを指定します。このバッファにサブシステムIDデータが格納されます。PCI I/OモジュールかCompactPCI I/Oモジュールか、またはCardBusシリーズかを判別したい場合、この値のbit8~11で判別できます。 0h PCII/Oモジュール 1h CompactPCII/Oモジュール

pdwSubsystemID

Bit8~11

2h CardBusシリーズ pdwSubsystemVenderID バッファへのポインタを指定します。このバッファにデバイスIDデータが格納されます。 pdwInterruptLine バッファへのポインタを指定します。このバッファに割込みラインデータが格納されます。 pdwBoardID バッファへのポインタを指定します。このバッファにI/OモジュールIDデータが格納されます。

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

Page 101: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 99 - Interface Corporation

DioEintSetIrqMask

PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)の、エッジ検出割り込みマスク状態を設定します。DioEintSetIrqMaskで有効にした割り込みは、DioEventRequestPendingExによるイベント処理に利用します。 DioEintSetFilterConfigにより設定されているフィルタ時間以上のパルス幅を持つ入力が与えられた時にエッジ検出割り込みが発生します。 DioEintSetIrqMaskにより割り込みを有効にする場合、DioEintSetEdgeConfigによりエッジ検出条件の設定が行われていなければなりません。 宣言 INT DioEintSetIrqMask(HANDLE hDeviceHandle,DWORD dwSetIrqMask); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwIrqMask IN1~IN32のエッジ検出割り込みのマスク/アンマスクを設定するデータを指定します。電源導

入時は全てマスク状態(0)です。 Bit31 Bit30 ・・・ Bit1 Bit0 IN32 IN31 ・・・ IN2 IN1

戻り値 関数が成功すると0が返され、dwSetIrqMaskで指定された情報で、割り込み要因のマスク/アンマスクを設定します。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ 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まで)の、エッジ検出割り込みマスク状態を取得します。 宣言 INT DioEintGetIrqMask(HANDLE hDeviceHandle,PDWORD pdwGetIrqMask); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwGetIrqMask IN1~IN32のエッジ検出割り込みのマスク/アンマスクを取得する変数へのポインタを指定し

ます。pdwGetIrqMaskの形式は、次のようになっています。 Bit31 Bit30 ・・・ Bit1 Bit0 IN32 IN31 ・・・ IN2 IN1

戻り値 関数が成功すると0が返され、pwGetIrqMaskに、現在の割り込みマスク設定を返します。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ 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

宣言 INT DioEintSetEdgeConfig(HANDLE hDeviceHandle,DWORD dwSetFallEdgeConfig,DWORD dwSetRiseEdgeConfig); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 102: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 100 -

DioEintGetEdgeConfig

PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)の、現在のエッジ検出設定を取得します。 宣言 INT DioEintGetEdgeConfig(HANDLE hDeviceHandle,PDWORD pdwGetFallEdgeConfig,PDWORD pdwGetRiseEdgeConfig); パラメータ

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

DioEintInputPoint

任意の点数のエッジ検出データを読み込みます。指定した開始接点番号から1接点ずつINT型の変数にデータが格納されます。 DioEintInputPointにより、エッジ検出データを読み込んだ接点のエッジ検出データはクリアされます。 宣言 INT DioEintInputPoint(HANDLE hDeviceHandle,PINT pBuffer,DWORD dwStartNum,DWORD dwNum); パラメータ

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~64を指定してください。 dwNum 入力接点数を指定してください。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 103: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 101 - Interface Corporation

DioEintInputByte

PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)の接点8点分のエッジ検出データを読み込みます。 DioEintInputByteによりエッジ検出データを読み出しを行った接点のエッジ検出データはクリアされます。 宣言 INT DioEintInputByte(HANDLE hDeviceHandle,INT nNo,PBYTE pbFallValue,PBYTE pbRiseValue); パラメータ

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

FBIDIO_IN1_8 :IR1~IR8の8点分のデータを読み込みます。 FBIDIO_IN9_16 :IR9~IR16の8点分のデータを読み込みます。 FBIDIO_IN17_24:IR17~IR24の8点分のデータを読み込みます。 FBIDIO_IN25_32:IR25~IR32の8点分のデータを読み込みます。 FBIDIO_IN33_40:IR33~IR40の8点分のデータを読み込みます。 FBIDIO_IN41_48:IR41~IR48の8点分のデータを読み込みます。 FBIDIO_IN49_56:IR49~IR56の8点分のデータを読み込みます。 FBIDIO_IN57_64:IR57~IR64の8点分のデータを読み込みます。

pbFallValue1 立ち下がりエッジ検出データを格納する変数へのポインタを指定してください。 pbRiseValue 立ち上がりエッジ検出データを格納する変数へのポインタを指定してください。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ 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によりエッジ検出データを読み出しを行った接点のエッジ検出データはクリアされます。 宣言 INT DioEintInputWord(HANDLE hDeviceHandle,INT nNo,PWORD pbFallValue,PWORD pbRiseValue); パラメータ

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

FBIDIO_IN1_16:IR1~IR16の16点分のデータを読み込みます。 FBIDIO_IN17_32:IR17~IR32の16点分のデータを読み込みます。 FBIDIO_IN33_48:IR33~IR48の16点分のデータを読み込みます。 FBIDIO_IN49_64:IR49~IR64の16点分のデータを読み込みます。

pbFallValue1 立ち下がりエッジ検出データを格納する変数へのポインタを指定してください。 pbRiseValue 立ち上がりエッジ検出データを格納する変数へのポインタを指定してください。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 104: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 102 -

DioEintInputDword

PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32までの)接点32点分のエッジ検出データを読み込みます。 DioEintInputDwordによりエッジ検出データを読み出しを行った接点のエッジ検出データはクリアされます。 宣言 INT DioEintInputDword(HANDLE hDeviceHandle,INT nNo,PDWORD pbFallValue,PDWORD pbRiseValue); パラメータ

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

FBIDIO_IN1_32:IR1~IR32の32点分のデータを読み込みます。 FBIDIO_IN33_64:IR33~IR64の32点分のデータを読み込みます。

pbFallValue1 立ち下がりエッジ検出データを格納する変数へのポインタを指定してください。 pbRiseValue 立ち上がりエッジ検出データを格納する変数へのポインタを指定してください。

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ 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 宣言 INT DioEintSetFilterConfig(HANDLE hDeviceHandle,INT nNo,INT nSetFilterConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo フィルタ設定を行う接点を下記の識別子で指定します。

FBIDIO_IN1_8:IR1~IR8のフィルタを取得します。 FBIDIO_IN9_16:IR9~IR16のフィルタを取得します。 FBIDIO_IN17_24:IR17~IR24のフィルタを取得します。 FBIDIO_IN25_32:IR25~IR32のフィルタを取得します。 FBIDIO_IN33_40:IR33~IR40のフィルタを取得します。 FBIDIO_IN41_48:IR41~IR48のフィルタを取得します。 FBIDIO_IN49_56:IR49~IR56のフィルタを取得します。 FBIDIO_IN57_64:IR57~IR64のフィルタを取得します。 FBIDIO_IRIN1_2_STB1 IR.IN1,IR.IN2,STB1のフィルタを取得します。

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 105: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 103 - Interface Corporation

DioEintGetFilterConfig

PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)のデジタルフィルタ設定値を取得します。 宣言 INT DioEintGetFilterConfig(HANDLE hDeviceHandle,INT nNo,INT pnGetFilterConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nNo フィルタ設定を取得する接点を下記の識別子で指定します。

FBIDIO_IN1_8:IR1~IR8のフィルタを取得します。 FBIDIO_IN9_16:IR9~IR16のフィルタを取得します。 FBIDIO_IN17_24:IR17~IR24のフィルタを取得します。 FBIDIO_IN25_32:IR25~IR32のフィルタを取得します。 FBIDIO_IN33_40:IR33~IR40のフィルタを取得します。 FBIDIO_IN41_48:IR41~IR48のフィルタを取得します。 FBIDIO_IN49_56:IR49~IR56のフィルタを取得します。 FBIDIO_IN57_64:IR57~IR64のフィルタを取得します。 FBIDIO_IRIN1_2_STB1 IR.IN1,IR.IN2,STB1のフィルタを取得します。

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以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)専用の関数です。PCI-2162,CTP-2162,CTP/CPZ-294188(IR1~IR32まで)以外では使用できません。

Page 106: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 104 -

DioEventRequestPendingEx

デジタルI/Oモジュールの割り込みイベント要求を待ちます。オーバーラップ構造体(lpOverlapped)を指定した非同期コールの場合、FBIDIO_ERROR_IO_PENDINGを返し非同期での動作となります。ご使用のI/Oモジュールのタイプにより存在しない信号がございます。I/OモジュールのUSER’S MANUALにてご使用のI/Oモジュールの仕様をご確認ください。 DioSetIrqMask、DioSetIrqConfig、DioEintSetIrqMask、DioEintSetEdgeConfig関数により必要な割り込みイベントの設定,マスク解除を事前に行う必要があります。 宣言 INT DioEventRequestPendingEx(HANDLE hDeviceHandle,PDWORD pdwEventEnableMask,PDWORD pEventBuf,LPOVERLAPPED lpOverlapped); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwEventEnableMask 許可するイベントのマスク設定を格納しているバッファへのポインタを指定します。各要素の

内容のようになっています。

pdwEventEnableMask+0 割り込みイベント (DioEventRequestPending と同じ)

pdwEventEnableMask+1

IR1~IR32立ち下がりエッジ検出イベント (PCI-2162, CTP-2162, CTP/CPZ-294188専用イベント)

pdwEventEnableMask+2

IR1~IR32立ち上がりエッジ検出イベント (PCI-2162, CTP-2162, CTP/CPZ-294188専用イベント)

pdwEventEnableMask+3

IR33~IR64立ち下がりエッジ検出イベント (CTP/CPZ-294188専用イベント)

pdwEventEnableMask+4

IR33~IR64立ち上がりエッジ検出イベント (CTP/CPZ-294188専用イベント)

イベント内容(該当ビットが’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 107: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 105 - Interface Corporation

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ PCI-2162,CTP-2162の機能をサポートするために拡張された関数です。PCI-2162,CTP-2162以外でも使用できます。

DioGetDeviceConfigEx

デバイスがサポートしている機能情報を取得します。 DioGetDeviceConfigExは、PCI-2162,CTP-2162のエッジ検出機能,デジタルフィルタ機能の機能情報に対応しています。 宣言 INT DioGetDeviceConfigEx(HANDLE hDeviceHandle,PDWORD pdwDeviceConfig,PDWORD pdwDeviceConfigEx); パラメータ

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サポート 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:デジタル入力1のみサポート Bit23:デジタル入力1~4 Bit24:デジタル入力5~8 Bit25:デジタル出力1のみサポート Bit26:デジタル出力1~4 Bit27:デジタル出力5~8 Bit28:PWR.IN1 Bit29:PWR.IN2 Bit30:インターバルタイマ Bit31:拡張情報有無

pdwDeviceConfigEx デバイスがサポートしている拡張機能情報を以下のビット構成で格納します(該当ビットが’1’で有効)。 pdwDeviceConfigのBit31=’1’の場合に有効です。 bit0:IR1~IR8エッジ検出機能 bit1:IR9~IR16エッジ検出機能 bit2:IR17~IR24エッジ検出機能 bit3:IR25~IR32エッジ検出機能 bit4:IR33~IR40エッジ検出機能 bit5:IR41~IR48エッジ検出機能 bit6:IR49~IR56エッジ検出機能 bit7:IR57~IR64エッジ検出機能 bit8~23:将来拡張用 bit24:IRx(x:入力ピン番号)のデジタルフィルタ機能 bit25:RSTIN入力マスク機能 bit26:IR.IN1,IR.IN2,STB1のデジタルフィルタ機能 bit27~31:将来拡張用

戻り値 関数が成功すると0が返されます。 関数が失敗すると0以外の値が返ります。関数が失敗した場合の戻り値については『108ページ エラーコード一覧』を参照してください。 ※ PCI-2162,CTP-2162の機能をサポートするために拡張された関数です。PCI-2162,CTP-2162以外でも使用できます。

Page 108: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 106 -

DioSetRstinMask

デジタルI/Oモジュールの外部リセット(RSTIN)入力のマスクを設定します。 本関数は、外部リセットマスク機能を持った製品の専用関数です。 ※ 外部リセットマスクの有無については、DioGetDeviceConfig関数にて確認することができます。 宣言 INT DioSetRstinMask(HANDLE hDeviceHandle,DWORD dwRstinMask); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwRstinMask RSTINのマスク/アンマスクを設定するデータを指定します。

値 意味

0 RSTIN入力のマスクが無効(RSTIN入力でI/Oモジュールリセットが発生します)

FBIDIO_RSTIN_MASK RSTIN入力のマスクが有効(RSTIN入力してもI/Oモジュールリセットが発生しません)

戻り値 関数が成功すると0が返されます。 dwRstinMaskで指定された情報で、RSTINのマスク/アンマスクを設定します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。

※ 外部リセット(RSTIN)入力のマスク機能を持った製品の専用関数です。外部リセット入力のマスク機能の有無は、 DioGetDeviceConfigEx関数にて確認できます。

DioGetRstinMask

デジタルI/Oモジュールの外部リセット(RSTIN)入力のマスク機能に対する設定値を取得します。 本関数は、外部リセット入力のマスク機能を持った製品の専用関数です。 ※ 外部リセットマスクの有無については、DioGetDeviceConfig関数にて確認することができます。 宣言 INT DioGetRstinMask(HANDLE hDeviceHandle, PDWORD pdwRstinMask); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 pdwRstinMask RSTINのマスク/アンマスクの状態を格納する変数のポインタを指定します。VB,Delphiでは状

態を格納する変数を指定します。 関数が正常に終了すると、pdwRstinMaskには下記の値が格納されます。

値 意味

0 RSTIN入力のマスクが無効(RSTIN入力でI/Oモジュールリセットが発生します)

FBIDIO_RSTIN_MASK RSTIN入力のマスクが有効(RSTIN入力してもI/Oモジュールリセットが発生しません)

戻り値 関数が成功すると0が返されます。 pdwRstinMaskにRSTINのマスク状態を格納します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。 ※ 外部リセット(RSTIN)入力のマスク機能を持った製品の専用関数です。外部リセット入力のマスク機能の有無は、 DioGetDeviceConfigEx関数にて確認できます。

Page 109: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 107 - Interface Corporation

DioEintSetIrqMaskEx

PCI-2162,CTP-2162,CTP/CPZ-294188のエッジ検出割り込みマスク状態を設定します。 DioEintSetIrqMaskEx で有効にした割り込みは、DioEventRequestPendingEx によるイベント処理に利用します。 DioEintSetFilterConfigにより設定されているフィルタ時間以上のパルス幅を持つ入力が与えられた時にエッジ検出割り込みが発生します。DioEintSetIrqMaskEx により割り込みを有効にする場合、DioEintSetEdgeConfig/DioEintSetEdgeConfigExによりエッジ検出条件の設定が行われていなければなりません。 宣言 INT DioEintSetIrqMask( HANDLE DeviceHandle, // デバイスハンドル INT No, // 対象接点の指定 DWORD SetIrqMask // 割り込みマスク設定データ ); パラメータ

DeviceHandle DioOpen関数で取得したデバイスハンドルを指定してください。 No 設定する接点を下記の識別子で指定します。

値 意味

FBIDIO_IN1_32 IR1~IR32の32点分のエッジ検出割り込みのマスク/アンマスクを設定します。

FBIDIO_IN33_64 IR33~IR64の32点分のエッジ検出割り込みのマスク/アンマスクを設定します。

SetIrqMask 対象接点のエッジ検出割り込みのマスク/アンマスクを設定するデータを指定します。 戻り値 DioEintSetIrqMaskEx関数は正常に終了しますと、0を返します。SetIrqMaskで指定された情報で、割り込み要因のマスク/アンマスクを設定します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。

DioEintGetIrqMaskEx

PCI-2162, CTP-2162, CTP/CPZ-294188(IR1~IR32まで)のエッジ検出割り込みマスク状態を取得します。 宣言 INT DioEintGetIrqMaskEx( HANDLE DeviceHandle, // デバイスハンドル INT No, // 対象接点の指定 PDWORD GetIrqMask // 割り込みマスク設定データを返すポインタ ); パラメータ

DeviceHandle DioOpen関数で取得したデバイスハンドルを指定してください。 No 設定する接点を下記の識別子で指定します。

値 意味

FBIDIO_IN1_32 IR1~IR32の32点分のエッジ検出割り込みのマスク/アンマスクを読み込みます。

FBIDIO_IN33_64 IR33~IR64の32点分のエッジ検出割り込みのマスク/アンマスクを読み込みます。

GetIrqMask 読み込まれたエッジ検出割り込みのマスク/アンマスクを格納する変数へのポインタを指定してください。Visual Basic,Delphiではデータを格納する変数を指定します。

戻り値 DioEintGetIrqMaskEx関数は正常に終了しますと、0を返し、GetIrqMaskに、現在の割り込みマスク設定を返します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。

Page 110: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 108 -

DioEintSetEdgeConfigEx

PCI-2162, CTP-2162, CTP/CPZ-294188のエッジ検出機能を設定します。 DioEintSetEdgeConfigExで設定したエッジ検出設定は、次の関数で得られるエッジ検出に影響を与えます。 DioEintInputPoint,DioEintInputByte,DioEintInputWord,DioEintInputDword,DioEventRequestPendingEx 宣言 INT DioEintSetEdgeConfigEx(HANDLE DeviceHandle, // デバイスハンドル INT No, // 対象接点の指定 DWORD SetFallEdgeConfig // 立下りエッジ検出設定 DWORD SetRiseEdgeConfig // 立上りエッジ検出設定); パラメータ

DeviceHandle DioOpen関数で取得したデバイスハンドルを指定してください。 No 設定する接点を下記の識別子で指定します。FBIDIO_IN1_32 IR1~IR32の32点分のエッジ検出

を設定します。 FBIDIO_IN33_64 IR33~IR64の32点分のエッジ検出を設定します。

SetFallEdgeConfig 対象接点の立下りエッジ検出を有効にするか、無効にするかを指定します。 SetRiseEdgeConfig 対象接点の立上りエッジ検出を有効にするか、無効にするかを指定します。

戻り値 DioEintSetEdgeConfigEx関数は正常に終了しますと、0を返します。それ以外の場合は、0以外の値を返します。0以外の値が返された場合については、エラーコードを参照してください。

DioEintGetEdgeConfigEx

PCI-2162, CTP-2162, CTP/CPZ-294188の現在のエッジ検出設定を取得します。 宣言 INT DioEintGetEdgeConfigEx( HANDLE DeviceHandle, // デバイスハンドル INT No, // 対象接点の指定 PDWORD GetFallEdgeConfig, // 立下りエッジ検出設定を返すポインタ PDWORD GetRiseEdgeConfig // 立上りエッジ検出設定を返すポインタ ); パラメータ

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以外の値が返された場合については、エラーコードを参照してください。

エラーコード一覧 定数 値 内容 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-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

- 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 チュートリアル 画像入力I/Oモジュール TUT-0054 CANチュートリアル TUT-0053 モーションコントロールチュートリアル TUT-0050 RTLinuxによるモーションコントローラI/Oモジュール制御プログラミング チュートリアル(GPG-7400用) TUT-0048 RTLinuxによるメモリンクI/Oモジュール制御プログラミング チュートリアル TUT-0044 RTLinuxによるメモリ共有インタフェースI/Oモジュール制御プログラミング チュートリアル TUT-0043 RTLinuxによる調歩同期シリアル通信I/Oモジュール制御プログラミング チュートリアル TUT-0041 RTLinuxによるGP-IBI/Oモジュール制御プログラミング チュートリアル TUT-0040 RTLinuxによるDAI/Oモジュール制御プログラミング チュートリアル TUT-0039 RTLinuxによるADI/Oモジュール制御プログラミング チュートリアル TUT-0038 RTLinuxによるDIOI/Oモジュール制御プログラミング チュートリアル TUT-0037 RTLinuxによるHDLCI/Oモジュール制御プログラミング チュートリアル 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/CompactPCII/Oモジュールを制御する方法 ActiveXコントロールによるシステム組み込み技術 CompactPCIへの置き換え+システム構築/移行ガイド MS-DOSからPCI/CompactPCII/Oモジュールを制御する方法

Page 112: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024

Interface Corporation - 110 -

参考文献

著 者 題 名 大川善邦 PCIバスによるI/O制御(オーム社:1999年) Edward Solari,George Willse PCIハードウェアとソフトウェア(インフォ・クリエイツ:1995年)

警告!

本ドキュメントの一部または全てを弊社の許可なく、複写,複製,転載,電子化することを禁じま

す。

Page 113: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

TUT-0024 2006年 11月 Ver. 1.8 発行 発行所

〒732-0828 広島県広島市南区京橋町10-21 TEL 082-262-7777 FAX 082-262-5066

定価 ¥2,000

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

Page 114: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

www.interface.co.jp

サポート体制

本製品についてのお問い合わせは、お客様相談センタで承ります。弊社Web siteのオンライ

ンQA(「サポート」→「お客様相談センタ」をクリック)、E-mailまたはフリーダイヤルをご利用く

ださい。 お問い合わせ先 <お客様相談センタ> TEL 0120-447213 FAX 0120-458257 (祝日および弊社休業日を除く月~金 AM9:00~PM5:00迄) E-mail [email protected]

TUT-0024 Ver. 1.8 Vol. 1/1

Page 115: チュートリアル - InterfaceTUT-0024 - 5 - Interface Corporation はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社デジタル入出力製

www.interface.co.jp

Visual C++によるDIO入門書

TUT-0024 Ver. 1.8