• 検索結果がありません。

visual C++によるGP-IB入門書

N/A
N/A
Protected

Academic year: 2021

シェア "visual C++によるGP-IB入門書"

Copied!
108
0
0

読み込み中.... (全文を見る)

全文

(1)

チュートリアル

(2)

商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。 保障の内容と制限 弊社はドキュメント内の情報の正確さに万全を期しています。万一、誤記または誤植等があった 場合、弊社は予告なく改訂する場合があります。ドキュメントまたはドキュメント内の情報に起 因するいかなる損害に対しても弊社は責任を負いません。 製品に含まれるバグ、あるいは製品の供給(納期遅延),性能、もしくは使用に起因する付帯的損害 もしくは間接的損害に対して、弊社に全面的に責がある場合でも、弊社はその製品に対する改良 (正常に動作する)、代品交換までとし、金銭面での賠償の責任は一切負わないものとしますので、 予めご了承ください。 ドキュメント内の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があり ます。 著作権,知的所有権 弊社は本製品に含まれるおよび本製品に対する権利や知的所有権を保持しています。 本製品はコンピュータ ソフトウェア(プログラム),図,文章,写真等を含んでいます。 複製の禁止 弊社の許可なく、本製品(ドキュメント含む)の全て、または一部に関わらず、複製,改変等を行う ことはできません。 責任の制限 弊社は、弊社または再販売者の予見の有無に関わらず、発生したいかなる特別損害,偶発的損害, 間接的な損害,重大な損害について、責任を負いません。 補償の内容 本ドキュメントで使用している弊社製品の補償については、各製品のマニュアルを参照してくだ さい。 本書の内容の一部または全部を、無断で転載することを禁止します。 本書の内容は、将来予告なく変更することがありますので、予めご了承ください。 © 2001, 2006 Interface Corporation. All rights reserved.

(3)

改訂履歴

Ver. 年 月 改 訂 内 容

1.7 2006年12月 ●技術資料一覧更新。

●製品紹介削除。

●インストール説明 Windows Vista/XP/XP Embedded/ Server 2003/2000へ変更。 1.6 2005年3月 ●対応型式追加。 ●インストール説明 Windows XP/Server 2003/2000へ変更。 ●技術資料一覧更新。 ●誤記修正。 1.5 2003年10月 ●誤記修正。 1.4 2003年7月 ●誤記修正。 1.3 2003年1月 ●誤記修正。 1.2 2002年9月 ●製品紹介,対応型式変更。 1.1 2002年1月 ●GP-IB ActiveXコントロールがBPA-0515として分離・独立したこ とによる修正。 ●CompactPCI I/Oモジュール追加。 ●製品紹介,価格変更,型式追加,ソフトウェア紹介追加。 1.0 2001年2月 新規作成 本チュートリアルをご使用の際は、必ず各製品型式の最新のドキュメント(ユーザーズマニュア ル,Help)をあわせて参照してください。また、最新のドライバソフトウェアをご使用ください。 ユーザーズマニュアル,ドライバソフトウェアは弊社Web site(www.interface.co.jp)からダウンロー ドできます。(Helpはドライバソフトウェアに含まれています)

(4)

目 次

第 1 章 GP-IBとは

5

1.1 GP-IBの特長 ... 5 1.2 バス接続 ... 6 1.3 アドレス ... 7 1.4 リスナ,トーカ,コントローラ... 7 1.5 アドレス・コマンドとユニバーサル・コマンド ... 7 1.6 インタフェース機能... 8 1.7 システム構成例... 9

第 2 章 GP-IB製品のインストール

10

2.1 コンピュータへの設置方法... 10 2.1.1 デバイスドライバのインストール... 11 ■Windows Vistaをご使用の場合 ... 11

■Windows XP Embedded,Windows XP,Windows Server 2003 をご使用の場合... 14

■Windows 2000 をご使用の場合 ... 16 2.2 ソフトウェアセットアップ... 17 2.3 ドライバパラメータの変更... 18

第 3 章 Visual C++によるGP-IB制御

19

3.1 ピンアサインメント... 21 3.2 ActiveXコントロールによるプログラミング(概要)... 22 3.3 ActiveXコントロールのインストール(Excel版,高機能版)... 22 3.4 ActiveXコントロールのインストール(標準版) ... 22 3.5 DLL関数呼び出しによるプログラミング(概要)... 24 3.6 GP-IB制御概略 ... 24

第 4 章 チュートリアル(高機能版ActiveXコントロール)

26

4.1 高機能版と標準版ActiveXコントロールの違い... 26 4.2 データ送受信(コントローラモード)... 28 Step1.メインウィンドウ作成... 28 Step2.環境設定 ... 34 Step3.初期化処理と終了処理... 37 Step4.データ送受信(コントローラモード)... 41 4.3 データ送受信(非コントローラモード)... 47 4.4 SRQ割り込みとポーリング処理... 52 4.5 SRQイベント ... 56

第 5 章 チュートリアル(DLL編)

61

5.1 データ送受信(コントローラモード)... 61 Step1.メインウィンドウ作成... 61 Step2.DLL関数宣言 ... 63

(5)

Step3.初期化処理と終了処理... 66 Step4.データ送受信(コントローラモード)... 70 5.2 データ送受信(非コントローラモード)... 74 5.3 SRQ割り込みとポーリング処理... 78 5.4 SRQイベント ... 82

第 6 章 GP-IBリファレンス

88

6.1 標準版ActiveXコントロールリファレンス... 88 6.2 標準版DLLリファレンス... 91 6.3 高機能版ActiveXコントロールリファレンス... 92 6.4 高機能版DLLリファレンス... 98

技術資料紹介

102

(6)

はじめに 平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社GP-IB製品を利用し 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-430x)のReadmeも しくはHelpでご確認ください。 対象環境 本チュートリアルは以下の制約事項があります。 対象型式 (PCI)

PCI-4304P PCI-4301 PCI-4302 PCI-4304

対象型式 (CPZ) CPZ-4304P CPZ-4302P CPZ-4304 CPZ-4302 対象型式 (CTP) CTP-4302P CTP-4304 CTP-4304P CTP-4302 対象型式 (CSI) CSI-432101 対象型式 (LPC) LPC-432101 対象型式 (PEX) PEX-432101 対象ユーザ 制御用電子機器および、コンピュータ等に関して基本的な知識を有している方。 ※本冊子は上記の弊社製品型式のみに対応しています。 製品の詳細は弊社Web siteを参照してください。

(7)

第1章 GP-IBとは

世の中には、色々な事象を電気的に捉えるための様々な計測機器があります。 電圧を測定する電圧計,電流を測定する電流計,電圧波形を観測するオシロスコープ..... これら計測機器を使って様々な計測が行われますが、対象となる(捉えたい)事象が、複雑または複 数になってくると、 ・計測したデータを自動的にコンピュータに記録し、後で解析したい。 ・複数の計測機器を一度にまとめて操作したい。 ・計測したデータを使っていろいろな制御を行いたい。 等の要求が出てきます。この要求に応えたのがGP-IBです。

GP-IBとは、General Purpose Interface Busの略で、もともとは米ヒューレット・パッカード社*(以下

HP社)が考案したインタフェース(HP-IB:Hewlett-Packard Interface Bus)でした。それを、1974年に IEEE(アメリカ電気電子学会)が承認した規格です。 GP-IBは、コンピュータと外部機器との接続を目的として制定された規格で、外部機器を並列に接 続できる点,データの転送が高速に行える点等の特徴を持っています。計測機器(デジタルマルチ メーター,ロジックアナライザ)等の外部機器にはGP-IBインタフェースを持っているものが多くあ り、コンピュータの拡張スロットにGP-IB I/Oモジュールを挿入することによって、コンピュータ から制御や計測データの取り込みが行うことができます。 また、GP-IBは一般的に使われている呼び名ですが、IEEE-488バス,HP-IB(HP社の計測器等では HP-IBと表記されています)も同じものを示します。 ※ 日本ヒューレット・パッカード株式会社の計測機器事業は、別会社「アジレント・ テクノロジー」となっております。

1.1 GP-IBの特長

GP-IBを使うことによって以下のようなことが行うことができます。 ・プログラムによる自動測定。 ・1つの機器から複数の機器へデータを送る。 ・非同期システムを構築できるので、通信速度の異なる機器の混在が可能。 ....等 一般に、「1台のコンピュータに複数の機器をつないで自動計測を行い、その計測データを一括管 理する。」といった使われ方が多いようです。

(8)

1.2 バス接続

GP-IBは1つの回線に多数の端末を接続する分岐方式での接続形態をなします。それぞれの機器や コンピュータは、バス(24ピンのケーブル)で接続してデータ伝送を行います。バスに接続できる機 器の数はコンピュータを含め最大15台です。バスは、その長さは「各機器間で4m以内」,「機器の 数が11台以上の場合はその総合計が20m以内」,「機器が10台以下の場合では、機器の数を2倍した 値以下」でなければなりません。また、データの転送速度が250KB/秒を越えるような場合には、 さらに制限が厳しくなります。 コンピュータを含め 15 台まで (1 枚の I/O モジュールに 14 台まで の機器を接続できます。) 接続仕様 GP-IBのバスは16本の信号線と8本のグランド線からなります。信号線は3つのグループに分けられ、 1つは8本の信号線からなる「データ線」,1つは3本の信号線からなる「データ伝送制御線」, 1つは5本の信号線からなる「バス管理線」です。 データ線はデータをASCIIコードとしてパラレルに転送するのに使用します。データ線上では計測 器の測定結果や条件設定だけではなく、機器を指定するための情報伝達にも使用されます。 データ伝送制御線はデータ線上の信号の確実な受渡しを行なうためのハンドシェークを行なうラ インです。(3線ハンドシェーク) バス管理線はバス上のデータの流れを制御するために使用します。

(9)

1.3 アドレス

GP-IBは分岐方式ですのでデータを伝送する時や、接続機器のリモートコントロールを行う際には、 対象となる機器を指定しなければなりません。接続する機器に固有の番号を割り付け、この番号 を使って機器の特定を行います。 GP-IBではこの番号のことをアドレス(Address)といいます。 アドレスには0∼30を使います。 アドレスは正確には、1次アドレス(Primary Address)と呼ばれます。1次アドレスに対し2次アドレ ス(Secondary Address)もありますが、全ての機器が、2次アドレスを備えているわけではありませ ん。2次アドレスは、1台の機器の内部が論理的に複数の機能単位から構成されている時に、GP-IB からその機能単位を指定するために用いられます。 アドレスは、機器についているスイッチ等で変えられるものと、最初から決まっているものがあ ります。プログラム作成者は接続する機器のアドレスを必ず知っていなければなりません。

1.4 リスナ,トーカ,コントローラ

GP-IBではバス上に接続された機器の中で、プリンタやプロッタ等のデータを受信する機器をリス ナ(Listener)といい、反対に計測器等のデータを送信する機器をトーカ(Talker)といいます。この他 に、トーカやリスナを指定したりバスの管理を行う機器をコントローラ(Controller)といいます。 1台の機器が複数の役割(トーカとリスナ)を持つことはできますが、同時には持てません。トラン シーバのように送信と受信を交互に切替えることで行います。 また、1つの機器でコントローラとトーカ,リスナ機能をあわせもつものもあります。

1.5 アドレス・コマンドとユニバーサル・コマンド

コントローラは、トーカとリスナのアドレスを指定してバス上のデータの流れを整理したり、コ マンド(命令)を特定の機器や全ての機器に発信します。 特定の機器のみに発信するものをアドレス・コマンドといい、全ての機器に発信するものをユニ バーサル・コマンドといいます。

(10)

1.6 インタフェース機能

GP-IBで接続する機器は、それぞれバス上で信号のやりとりをします。その機能であるリスナ, トーカ,コントローラの3つを先に示しましたが、これらをインタフェース機能といいます。イン タフェース機能は下表のように10種の機能として分類されています。 GP-IBに接続する機器は、これら全てのインタフェース機能を備えていなければならないわけでは なく、システムの目的に必要なものだけを備えていれば問題ありません。 インタフェース機能 概 要 SH機能 (Source Handshake) データ線へメッセージを送信するための機能です。AH機能をもった機 器との間でハンドシェークを行ないます。 AH機能 (Acceptor Handshake) データ線からメッセージを受信するための機能です。SH機能をもった 機器との間でハンドシェークを行ないます T機能 (Talker) 他の機器へデータを送出する機能です。自分以外のアドレスがトーカ として指定されるとただちに機能を停止します。これにより、機器が 自分自身へデータを送ることを防ぐことができます。トーカはSH機能 と組で動作します。 L機能 (Listener) 他の機器からデータを受信する機能です。自分自身の出したデータを 受けとることを防ぐ機能も含みます。リスナはAH機能と組で動作しま す。 SR機能 (Service Request) 機器が異常や、予め設定された状態に達したとき、特定のサービスを コントローラに要求する機能です。 RL機能 (Remote/Local) 機器の制御をバスからの情報によって動作させるか、機器のローカル な情報(機器の操作パネルからの操作)から動作させるかを切り替える 機能です。 PP機能 (Parallel Poll) コントローラからのパラレル・ポールに応答する機能です。 DC機能 (Device Clear) バスからあるコマンドを受信した時、機器を予め定められた初期状態 に戻す機能です。 DT機能 (Device Trigger) バスからあるコマンドを受信した時、機器はトーカまたはリスナの機 能を開始します。 C機能 (Controller) バスに接続された機器に対して、トーカやリスナとして動作するよう に指示する機能です。この機能は29種の能力に細分化されています。 コントローラはSH機能と組で動作します。

(11)

1.7 システム構成例

以下にGP-IBを使ったシステムの1例を記載します。 コントローラ/リスナ(PC) ADDRESS = 2 トーカ(DMM) ADDRESS = 22 トーカ(DMM) ADDRESS = 23 計測データ集録システム 上記システムは、2台のデジタル・マルチ・メータ(DMM)より送られる計測データをコンピュータ 上に蓄積し、コンピュータではそのデータの集計,解析が行うことができます。 システム画面

(12)

第2章 GP-IB製品のインストール

作成するアプリケーションからGPIB機器に対して処理を行う場合、当然のことながらアプリケー ションを実行するコンピュータにGP-IB製品が組み込まれていなければなりません。

ここではWindowsVista/XP/XP Embedded/Server 2003/2000環境における、弊社GP-IB製品のインス トール方法を記載します。Windows NT/Me/98/95ではインストール方法がここに記載する内容とは 異なります。こちらに関しては、製品マニュアルまたはオンラインドキュメントをご確認くださ い。

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

※ 写真は実物と異なる場合があります。 ①コンピュータ本体の電源が“OFF”であることを確認し、電源ケーブルをACコンセントから外しま す。その後、外装カバー,スロットカバーを外します。 ②拡張用スロットへI/Oモジュールを差し込みます。 <例> 基板の左右の端に力を入れ、カツンとショックがある まで押し込む。 I/O モジュール コンピュータ PCI コネクタ 金メッキ端子がコネクタに隠れていることを確認する。 ビ ス留め

注意

製品は正しい向きに実装してください。間違った向きに実装した場合、コンピュータ,I/Oモジ ュールを破損する恐れがあります。 ③パネルをコンピュータ本体とビス留めしてください。 ④本体へ外装カバーを元通り取り付け、電源ケーブルをACコンセントに接続します。その後、コ ンピュータを起動します。 以上でI/Oモジュールの設置は完了です。次にドライバのインストールを行います。

(13)

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

■Windows Vistaをご使用の場合

Administratorsのグループに所属しているユーザが、インストールを行ってください。 ※ 「続行するにはあなたの許可が必要です」と警告が表示されることがあります。その場合、 「続行」をクリックしてください。 ①Windows Vistaが起動すると、「新しいハードウェアが見つかりました」が表示されます。 ②「ドライバソフトウェアを検索してインストールします(推奨)」をクリックします。 ③「オンラインで検索しません」をクリックします。

(14)

④「ディスクはありません。他の方法を試します」をクリックします。

⑤「コンピュータを参照してドライバソフトウェアを検索します(上級)」をクリックします。

(15)

⑦ファイルのコピーが始まります。 ※ 「ドライバソフトウェアの発行元を検証できません」と表示された場合、「このドライバ ソフトウェアをインストールします」をクリックします。 ⑧インストールが完了した旨のダイアログボックスが表示されるので、「閉じる」ボタンをクリッ クします。 以上で、Windows Vista用のドライバインストールは完了です。

(16)

■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」フォルダを 指定します。 ④ファイルのコピーが始まります。

(17)

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

以上で、Windows XP Embedded,Windows XP,Windows Server 2003用のデバイスドライバのインス トールは完了です。デバイスドライバのインストール完了後以降は、システム起動時に上記②の ように「新しいハードウェアの検索ウィザード」が起動することはありません。

• Windows XP Embedded 用ハードウェア情報ファイルのインポートをする場合 ・ドライバダウンロード方法

①弊社Web siteよりGPC-430xのDriver Disk [Windows XPe,XP,2003,2000]をダウンロードし ます。

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

①Windows XP Embedded 開発環境の Component Database Manager を起動します。 ②弊社製品のハードウェア情報ファイルをインポートします。作成した「Win2000」フォ

ルダ内の拡張子がSLDのファイルを、画面の指示に従ってインポートしてください。

(18)

■Windows 2000をご使用の場合

Administratorsのグループに所属しているユーザが、インストールを行ってください。 ①Windows 2000が起動すると、「新しいハードウェアの検出ウィザード」が表示されるので、「次 へ」ボタンをクリックします。 ②「デバイスドライバに最適なドライバを検索する(推奨)」を選択し、「次へ」ボタンをクリック します。 ③「検索場所のオプション」で「場所を指定」を選択し、「次へ」ボタンをクリックします。 ④「参照」ボタンをクリックし、「製造元のファイルのコピー元」にドライバ保存先の「¥Win2000」 フォルダを指定します。その後、「OK」ボタンをクリックします。

(19)

⑤デバイスドライバが見つかった旨のダイアログボックスが表示されるので、「次へ」ボタンを クリックします。 ⑥ファイルのコピーが始まります。 ⑦インストールが完了した旨のダイアログボックスが表示されるので、「完了」ボタンをクリッ クします。 以上で、Windows 2000用のデバイスドライバのインストールは完了です。 デバイスドライバのインストール完了後以降は、システム起動時に上記②のように「新しいハー ドウェアの検索ウィザード」が起動することはありません。 インストールを完了したら、リソース(I/Oアドレス,割り込みレベル)の設定,競合の有無の確認を行 ってください。 ドライバのインストールが正常に行われると、システムプロパティのデバイスマネージャに表示 されます。 ここに I/O モジュールが追加 されます。

2.2 ソフトウェアセットアップ

次の手順で、ソフトウェアGPC-430xのインストールを行ってください。 (1)弊社Web siteからダウンロードした圧縮ファイルを解凍して、解凍フォルダ内の「SETUP.EXE」 を実行してください。Help,サンプルプログラム等が指定ドライブにインストールされます。 (2)画面に表示される指示に従って操作してください。 インストールに成功すると、「スタート」メニューの「プログラム」に「Interface GPC-430x」が登 録されます。ソフトウェアの使用方法につきましては、README.HTM,Helpをご覧ください。

(20)

2.3 ドライバパラメータの変更

(1)スタートメニューの「設定(S)」−「コントロールパネル(C)」よりコントロールパネルを開き ます。

(2)コントロールパネルの「Interface GP-IB Configuration」をダブルクリックします。

(3)ここでI/Oモジュール番号(上記では0)が(1)で設定した値と異なっている場合は、そのI/Oモジ ュールを選択後「初期化情報」をクリックすることで設定値の変更が行うことができます。 (4)変更するI/Oモジュール型式をクリックして、選択状態にしてください。

I/Oモジュールの追加

(5)「Interface GP-IB Configuration」ダイアログの「初期化情報」ボタンをクリックすると、初期情 報設定ダイアログが表示されます。

(21)

第3章 Visual C++によるGP-IB制御

Visual C++より、GP-IB I/Oモジュールを制御するには、DLLを利用します。Visual C++(Windows プログラミング)では直接I/Oやメモリにアクセスすることができません。従って、GP-IB I/Oモジ ュールに対して直接的に信号を送ることができません。そこで、I/Oモジュールに対して直接的に 信号を送るプログラム(DLL)から必要な関数(プロシージャ)を呼び出し、このDLLを介してI/Oモジ ュールの制御を行います。 仮想デバイスドライバ Win32 API ダイナミックリンクライブラリ Visual C++ アプリケーション ActiveX Control I/Oモジュール 出力 入力

(22)

アプリケーション作成において、ActiveXコントロールを使用するか、DLLを利用するかは、以下 を参考にしてください。アプリケーションに、より柔軟な仕様を組み込むには、高機能版ActiveX コントロール,高機能版DLLを利用します。詳細についてはHelpをご覧ください。 本チュートリアルでは高機能版ActiveXコントロール,高機能版DLLを用いてプログラムを作成し ています。 ソフトウェア 用途 IEEE488.2版DLL (GPC-4301N) IEEE488.2規格に準拠した操作を行いたい方 主にC言語で開発をされる方 高機能版DLL (GPC-4301, GPC-4304) 複数台のGP-IB機器と接続されたい方 I/Oモジュールの持つ機能を全て使いたい方 主にC言語で開発をされる方 標準版DLL (GPC-4301, GPC-4304) 1台のGP-IB機器と接続されたい方 主にC言語で開発をされる方 GP-IB ActiveXコントロール (BPA-0515) 複数台のGP-IB機器と接続されたい方 I/Oモジュールの持つ機能を全て使いたい方 Visual Basicで開発をされる方 GP-IB Excel対応版ActiveXコントロール (BPA-0515) GP-IB機器から取得したデータをExcelで処理したい方 プログラム経験のほとんど無い方 標準版ActiveXコントロール (BPA-0515) 1台のGP-IB機器と接続されたい方 Visual Basicで開発をされる方 GPC-4301,GPC-4301N,GPC-4304,BPA-0515は、弊社Web siteより無料でダウンロードできます。 ※ GPC-4301NはPCI-4301,PCI-4302,CTP-4302,CTP-4302P,CPZ-4302,CPZ-4302P,LPC-432101, PEX-432101,CSI-432101のみ対応しています。

(23)

3.1 ピンアサインメント

配線時には、これらピンアサインメントをよく確認の上、配線してください。以下、弊社PCI GP-IB 製品共通のピンアサインメントを記載します。 (CompactPCI I/Oモジュール,CardBusカードのピンアサインメントは、I/Oモジュールのマニュアル を参照してください。) <パネル面> CN1 部品面 はんだ面 汎用 LED(LED1) 点灯:マスタモード 消灯:スレーブモード (本製品とソフトウェアを使用する時) アクセス LED(LED2) 点灯(500ms 間):I/O アクセスが発生。 連続でアクセスした場合、最後のアクセスから 500ms 後に消灯。 PCI-4304,4304Pのパネル面 <パネル面> CN1 部品面 はんだ面 コントローラ動作可/不可(LED3:赤) 点灯:コントローラ動作可能 消灯:コントローラ動作不可 (本製品とソフトウェアを使用する時) I/Oアクセス状態(LED1:緑) I/O アクセス時には、点滅します。 GPIBアクセス状態(LED4:赤) GPIB アクセス時には、点滅します。 PCI-4301,4302のパネル面 SHIELD SRQIFC NDACNRFD DAVEOI DIO4 DIO3 DIO2 DIO1 24 23 22 21 20 19 18 17 16 15 14 13 1 2 3 4 5 6 7 8 9 10 11 12 LOGIC GNDGND GND GND GND GND GND REN DIO8 DIO7 DIO6 DIO5 CN1 (IEEE Std 488.1)(相当品) ATN

(24)

3.2 ActiveXコントロールによるプログラミング(概要)

ActiveXコントロールを利用することにより、Visual C++上の複雑な定義を行うことなく、コント ロールをフォーム上に描画し、描画したコントロールにパラメータを設定することにより直感的 にGP-IB I/Oモジュールが利用可能となります。 <プログラム記述例> Gpib1.Open (); ActiveXコントロールオブジェクト

3.3 ActiveXコントロールのインストール(Excel版,高機能版)

Visual C++にて弊社GP-IB I/Oモジュール制御用Excel対応版ActiveXコントロールおよび高機能版 ActiveXコントロールを利用するには、BPA-0515をインストールする必要があります。 (BPA-0515は、弊社Web siteより無料でダウンロードできます。) (1)BPA-0515の「SETUP.EXE」を実行し、指示に従ってインストールを行います。 (2)インストールが成功すると、「スタート」メニューの「プログラム」に、「Interface BPA-0515」 が追加されます。 (3)ActiveXコントロールはこの時点でシステムに組み込まれていますので、Visual Basic上から使用 することができます。

3.4 ActiveXコントロールのインストール(標準版)

BPA-0515には、標準版ActiveXコントロールも添付されておりますが、標準版ActiveXコントロー ルを使用する際は、以下のような手順が必要です。

Visual C++にて弊社GP-IB I/Oモジュール制御用 Excel対応版ActiveXコントロールおよび高機能版 ActiveXコントロールを利用するには、REGSVR32.EXE (Windowsに搭載されるプログラム)を使用 して「ActiveXコントロール」をレジストリに登録する必要があります。 以下にGP-IB ActiveXコントロールの登録方法を記載します。 (1)BPA-0515の「SETUP.EXE」を実行し、指示に従ってインストールを行います。 (2)インストールが成功すると、「スタート」メニューの「プログラム」に、「Interface BPA-0515」 が追加されます。 (3)インストール完了後、「¥Program Files¥Interface¥BPA0515¥Standard」に「Standard.EXE」が格納 されています。 「Standard.EXE」は標準版ActiveXコントロールを圧縮した自己解凍形式のファイルです。 「Standard.EXE」をダブルクリックし、解凍先のフォルダを指定し、「OK」ボタンをクリック してください。 (4)標準版ActiveXコントロールが解凍され、解凍先フォルダの中に「GPC43043.DLL」が格納され ています。 (5)「GPC43043.DLL」をWindows NT,2000の場合には「WINNT¥SYSTEM32」へ、Windows XP,98,95 の場合には「WINNT¥SYSTEM」へ格納します。

(25)

(6)「スタート」−「ファイル名を指定して実行(R)…」を選択します。 (7)名前のところに「REGSVR32 C:¥Windows¥System¥Gpc43043.dll」(Windows XP,98,95の場合)とタ イプし、「OK」ボタンをクリックします。 ここにタイプします。 Windows98,95,Meの場合※ 起動ドライブがAドライブとなるPC98シリーズ等の場合、 「REGSVR32 A:¥Windows¥System¥Gpc43043.dll」となります。REGSVR32の後にGPC43043.DLL が格納された位置を指定してください。 (8)登録が正常に行われると以下のよう表示されます。 登録完了メッセージ 登録が正常に行われない場合、I/Oモジュールのインストールが正常に行えていないことが考え られます。

「スタート」−「設定」−「コントロールパネル」を開き、「Interface GP-IB Configuration」を ダブルクリックし設定内容を確認してください。 ここで、I/Oモジュールが正しく登録されていない場合等以下のエラーが発生します。 登録失敗時のメッセージ

注意

ActiveXコントロールをインストールする際は、各OSと各プログラム言語について、最新のサー ビスパックをインストールしてください ActiveXコントロールをインストールする前に、以下の共有DLLがシステムに組み込まれてい る最新であることを確認してください。 ・MFC42.DLL ・MSVCRT.DLL ・MSVCP60.DLL 上記ファイルが無い、もしくは最新でないと、ActiveXコントロールのインストールに失敗する 可能性があります。

(26)

3.5 DLL関数呼び出しによるプログラミング(概要)

Visual C++よりDLL関数呼び出しプログラミングを行うには、弊社、GP-IB制御用ソフトウェア (GPC4304.DLL:高機能版DLL,GPC43042.DLL:標準版DLL)をダイナミックリンクし使用します。 DLLとはダイナミックリンクライブラリ(Dynamic Link Library)の略でアプリケーションの実行時 に動的にリンクして利用できる関数のライブラリです。 Visual C++にてDLL関数を利用するには、(GPC4304.LIB:高機能版LIB,GPC43042.LIB:標準版LIB) ファイルをリンクしてDLL関数のアドレスを指定します。(リンクの方法は『26ページ 第4章 チ ュートリアル(高機能版ActiveXコントロール)』で記載しています)

3.6 GP-IB制御概略

弊社GP-IB I/Oモジュールを使用しGP-IBインタフェースをもった機器に対して制御を行う場合、 基本的に下記の制御シーケンス(順番)で行います。 (1) I/Oモジュール初期化 プログラム起動 ↓ (2) I/Oモジュールの設定 ↓ (3) GP-IB初期化 ↓ (4) 各種処理 ↓ (5) 終了処理 プログラム終了 (1)I/Oモジュールの初期化 Visual C++で作成されたアプリケーションが、接続された機器に対し何らかの処理を行う場合、 アプリケーションが直接的に接続された機器に何かをしているわけではありません。GP-IB I/O モジュールを介して接続された機器に対し間接的に処理が行われます。 従って、まずアプリケーションは、GP-IB I/Oモジュールを利用可能な状態にする必要がありま す。この処理がI/Oモジュールの初期化です。I/Oモジュールの初期化を行うと、プログラムは GP-IB I/Oモジュールへのアクセスが可能となります。本処理が行われないとGP-IB I/Oモジュー ルへのアクセスは行えません。 (2)I/Oモジュールの設定 弊社GP-IB I/Oモジュールは、例えばPCI-4301,4302,4304,4304P,CTP-4302,4302P,4304,4304P, CPZ-4302,4302P,4304,4304P,LPC/PEX-432101の組み合わせで併用することにより最大16枚まで の使用が可能です。また、1枚のI/Oモジュールに最大14台の機器を接続することができます。I/O モジュールからデータの伝送を行う場合等、先に記述しておりますとおり、GP-IB I/Oモジュー ルを介して接続された機器に対し間接的に処理が行われますので、どのI/Oモジュールに対して 処理を行うか、また、どの機器に対しデータの伝送を行うか等を設定する必要があります。こ れが、I/Oモジュールの設定です。

(27)

(3)GP-IB初期化 接続した機器は通常そのままではデータの伝送は行えません。これら接続した機器にも準備作 業が必要となります。これが、GP-IBの初期化です。 IFC送信(※1),REN設定(※2) デバイス・クリア(※3) 等所定の手続きを行います。この手続きは使用す る機器により異なります。 (※1)IFC(Interface Clear) 全ての機器に対するGP-IBインタフェース機能の初期化要求です。 (※2)REN(Remote Enable) 全ての機器のリモート状態(論理的にバスに接続された状態),ローカル状態(論理的にバ スから切り離された状態)を切り替えます。機器にRL機能がある時にのみ有効です。ロー カル状態では操作をその機器の操作パネルから行います。 (※3)デバイス・クリア(Device Clear) 全ての機器を初期状態に戻します。機器によって初期状態の意味は異なります。 DC機能がある時にのみ有効です。 (4)各種処理 機器へのコマンド送信または計測値の受信等を行います。 ここで、GP-IBで重要なものの1つにサービスリクエスト(SRQ)があります。 GP-IBでシステムを組む場合、トーカ/リスナの指定をして測定データを取得する等の処理は シーケンスに行なわなければなりません。しかし、実際のシステムでは計測データがいつ届く かわからなかったり、計測中はコンピュータ側(コントローラ)が別の処理を行なったりと必ずし もシーケンスに処理が行えるとも限りません。 ここで使われるのが、SRQ割り込みとポーリング処理です。 使用している機器がSR機能をもっている場合、コントローラに対しサービス要求(割り込み)を 通知することができます。コントローラは、どの機器がサービス要求をしているのかを探して、 その要求に応じた処理を行います。 ここで、サービス要求をしている機器を探す方法として、シリアル・ポーリングとパラレル・ ポーリングがあります。 シリアル・ポーリングは、コントローラがサービス要求元と思われる機器を1台ずつ順番に呼び 出して、その時の機器の状態を示すステータス・バイトと呼ばれる1バイトの情報を送らせ、こ の内容を調べることで、サービス要求元とその要因を取得します。 規格上、ポーリング機能と SR機能は別の機能なので、SR機能のない機器でもポーリングは可能です。そうすればコント ローラは好きな時にステータス・バイトを読むことで、現在の機器の状態を知ることができ、 それに応じた処理を行うことができます。パラレル・ポーリングは8本のデータ・ラインを1本 ずつ8組の機器に割り当て、8組のトーカのどれがサービス要求しているかを一度に判別する方 法ですが、使用方法には制限があります。 (チュートリアルではシリアル・ポールのみを記載しています) (5)終了 I/Oモジュールの使用終了を行うための手続きです。プログラム終了時には必要です。 (ActiveXコントロール利用時はフォームのUnloadと同時にI/Oモジュールへの終了処理が行われ ますので、プログラムによってはソースに記述する必要がない場合もあります)

(28)

第4章 チュートリアル(高機能版ActiveXコントロール)

ここでは、高機能版ActiveXコントロールを用いたGP-IB制御を行います。ActiveXコントロールと は、ひとことで言えばソフトウェアコンポーネントです。ActiveXコントロールを用いることで、 プログラムのコード量を減らすことが可能になり、DLL関数を用いた場合よりも簡単にGP-IBが制 御できます。 弊社にはExcel対応版ActiveXコントロール,高機能版ActiveXコントロール,標準版ActiveXコント ロールの3種類のActiveXコントロールがあります。Excel対応版ActiveXコントロールは、GP-IB機 器から取得したデータをExcel上に取り込めるという特長があります。高機能版ActiveXコントロー ルはI/Oモジュールの持つ全ての機能を使用したい場合に使用します。 以下に高機能版ActiveXコントロールの特長を示しました。Excel版ActiveXコントロールに関して は参考文献(大川義邦著:Windows2000による計測・制御プログラミングのノウハウ)を参照してく ださい。

4.1 高機能版と標準版ActiveXコントロールの違い

高機能版には以下の特長があります。 (1)SRQイベントのサポート SRQの発生をポーリングする必要がありません。 GP-IB機器からサービス要求(SRQ)が発生した場合の処理を、SRQイベントで記述できます。 (2)複数機器の接続サポート 高機能版では最大32台(2次アドレス機器を含む)をサポートしています。 (3)非コントローラモードのサポート GP-IB I/Oモジュール間の通信が行えます。 (4)非同期データ転送のサポート データ転送完了をポーリングする必要がありません。データ送受信メソッドの実行後、直ちに 処理を抜けられます。送受信完了後の処理は、送受信完了イベントで記述できます。 (5)プロパティページのサポート プロパティの変更を視覚的に行えます。 (6)GP-IB機器を名前で扱える 高機能版では接続機器を名前で指定できます。機器アドレスを隠蔽しているため、デザイン時 以外は機器アドレスを意識する必要がありません。 (7)I/Oモジュールがインストールされていなくてもデザインが可能 高機能版では、I/Oモジュールが挿入されていなくてもデザインが可能になります。

(29)

(8)バスコマンドの送出 直接バスコマンドが送出できます。 通常は、メソッドで全バスコマンドをサポートしていますが、それで対応できない測定機に対 して、直接バスコマンドでの制御が行えます。 (9)パラレルポーリングのサポート サービス要求(SRQ)発生時に、シリアルポーリングが各装置を順番にポーリングしていくのに 対して、8台までの装置を同時にポーリングできます。 (10)ローカル/リモートモードのサポート 計測機器のパネルからの制御を、有効/禁止にできます。 (11)パスコントロールのサポート アクティブコントローラを、他の装置に譲渡できます。 (12)システムコントロールの要求/解除 システムコントローラを、他の装置に譲渡できます。 (13)事象変化の検出 トーカ/リスナ/デバイストリガ/デバイスクリアの状態検出が行えます。 以上が、高機能版ActiveXコントロールの特長です。 では、実際にGP-IB機器の制御を行う簡単なプログラムの作成を行います。高機能版ActiveXコン トロール使用したプログラムです。 (Active Xの代わりにDLL関数を使用した場合については、『61ページ 第5章 チュートリアル (DLL編)』を参照してください。) 接続は以下の2通り行なっています。 非コントローラ リスナ/トーカ: アドレス = 22 コントローラ: アドレス = 0 コ ン ト ロー ラ :ア ド レス = 0 リスナ/トーカ: アドレス = 22 接続例 1 接続例 2

(30)

まず、コンピュータにPCI-4301,4302,4304,4304P,CTP-4302,4302P,4304,4304P,CPZ-4302,4302P, 4304,4304P,CSI/LPC/PEX-432101のいずれかが1枚実装され、それに計測機器が1台接続されている ことを想定しています(接続例1)。もう一つは2枚のGP-IB I/Oモジュールをコントローラ,非コント ローラとして接続していることを想定しています(接続例2)。 ただし、I/Oモジュール同士を接続する場合は両コントローラでプログラムを実行する必要があり ます。これは以後に説明する「データの送受信」についてのプログラムに相当します。コントロー ラでは「データの送受信(コントロールモード)」のプログラムを、非コントローラでは「データの送 受信(非コントロールモード)」のプログラムを同時に実行してください。 GP-IB機器のアドレスはコントローラとして扱うGP-IB I/Oモジュールを「0」,制御するGP-IB機器 を「22」,非コントローラとして扱うGP-IB I/Oモジュールを「22」とします。また、GP-IB I/Oモジ ュールのI/Oモジュール番号を「0」とします。 本チュートリアルではGP-IB I/OモジュールにPCI-4304を、接続するGP-IB機器にHP社マルチメー タ(34401A)を使用しています。

4.2 データ送受信(コントローラモード)

ここでは、GP-IB I/Oモジュールがコントローラモード時でのデータ送受信で使用するプログラム の作成を行います。使用するメソッド,プロパティ,イベントの詳細は『92ページ 6.3 高機能版 ActiveXコントロールリファレンス』を参照してください。 では、この高機能版ActiveXコントロールを使用したプログラムの作成を行ってみましょう。

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

ここでは、これから作成するプログラムの画面作成を行います。 Visual C++を起動し新しいプロジェクトを作成します。 1. 「ファイル」メニューより「新規作成」を選択します。 2. 新規作成ダイアログが表示されますので、「プロジェクト」タブを選択します。 ・MFC AppWizard(exe)を選択し、「プロジェクト名」に“GpibTrans_m_ActvX”と記入します。 ・「位置」には作業するフォルダを指定してください。その後「OK」をクリックします。

(31)

MFC AppWizard(exe)を実行します フォルダを指定します プロジェクト名を書き込みます 3. 作成するアプリケーションの種類は「ダイアログベース」、リソースで使用する言語の指定は 「日本語」を選択し、「次へ」をクリックします。 ダイアログベースを選択します 4. ステップ2では「ActiveXコントロール」にチェックを入れクリック、ステップ3では「次へ」をク リック、ステップ4で「終了」をクリックします。

(32)

5. 新規プロジェクト情報というダイアログが表示されますので、「OK」をクリックしてください。 OK をクリックします 6. プロジェクトにGP-IB ActiveXコントロール(高機能版)を追加します。 「プロジェクト」→「プロジェクトへ追加」を選択し、「コンポーネントおよびコントロール」 を選択します。 「コンポーネントおよびコントロール」選択します

(33)

・「Registered ActiveX Controls」を選択し、「挿入」ボタンをクリックします。

「Registered ActiveX Controls」を選択します

「挿入」ボタンをクリックします

・表示されたコンポーネントから「Interface BPA-0515 GP-IB Advanced Control 1.1」を選択し、「挿 入」ボタンをクリックします。

クリックします Interface BPA-0515 GP-IB Advanced Control 1.1 を選択します

(34)

・「OK」ボタンを押した後、クラスの確認画面でクラスの確認を行ってください。そして、「OK」 ボタンをクリックし、コンポーネントおよびコントロールギャラリ画面を閉じてください。こ れで、高機能版GP-IB ActiveXコントロールがプロジェクトに挿入されました。 クリックします 7. ResourceViewを表示し、Dialogフォルダを展開して「IDD_GP-IBTRANS_M_ACTVX_DIALOG」 をダブルクリックします。コントロール内にGP-IB ActiveXコントロール(高機能版)アイコンが 追加されていることが確認できます。 ダブルクリックします ResourceView を選択します ActiveX コントロール(高機能版) のアイコンが確認できます

(35)

8. ダイアログボックスの必要のないボタン,スタティックテキストを削除します。「OK」ボタン, 「キャンセル」ボタン,「TODO:ダイアログのコントロールをここに配置」というスタティック テキストをそれぞれ選択し、Deleteキーを押してください。 それぞれ選択して Delete キーで削除します 9. コントロールからGP-IB ActiveXコントロール(高機能版)を選択し、ダイアログ上(ここでは右下 隅)に配置します。 ActiveX コントロール(高機能版)を貼り付けます ここまでで、メインウィンドウの作成は完了です。

(36)

Step2.環境設定

ここでは、ActiveXコントロール(高機能版)のプロパティページにプログラムを実行させる環境を 定義し、オブジェクトの作成方法を記述します。 1. 高機能版ActiveXコントロールのプロパティページを開きます。さきほど貼り付けたActiveXコ ントロール(高機能版)のアイコンにカーソルを合わせ、右クリックし、プロパティを選択します。 プロパティの項目は2つ(1番下と下から4番目)ありますが、どちらを選択しても構いません。 どちらを選んでも構いません 2. 「I/Oモジュール初期設定」タブをクリックしI/Oモジュールの設定を行います。 各種設定を行います

(37)

デフォルトでは、以下のようになっています。 設定項目 内 容 初期値 I/Oモジュール番号 I/Oモジュール番号 マスタ/スレーブ* マスタ(コントローラモード), スレーブ(非コントローラモード)の設定 マスタ マイアドレス GP-IB I/Oモジュールの1次アドレス 0 2次アドレス GP-IB I/Oモジュールの2次アドレス 無し データ入出力方式 データ出力方式の設定 FIFO データ転送モード 非同期データ転送設定 同期 送受信タイムアウト データ転送タイムアウト 30 STB応答時間 STB受信タイムアウトの時間設定 30 送信バッファサイズ 送信バッファサイズ 65536 受信バッファサイズ 受信バッファサイズ 65536 送信デリミタ* 送信デリミタ(非コントローラモード時) CRLF+EOI 受信デリミタ* 受信デリミタ(非コントローラモード時) CRLF+EOI NRFD信号ライン待ち設定 GP-IBバス NRFD信号ライン待ち設定 無効 ※ 「マスタ/スレーブ」,「送信デリミタ」,「受信デリミタ」の設定はコントロールパネルより 行います。「送信デリミタ」,「受信デリミタ」は使用する機器に合わせたものに設定してく ださい 3. 「接続機器設定」タブをクリックし接続機器の設定を行います。プロパティページ下部に接続 する機器を設定し「追加」ボタンをクリックしてください。デバイス名は半角32文字以内で自 由に設定できます。(ここではデバイス名をHP34401Aに設定しています。)

(38)

4. 次に先程と同じようにActiveXコントロール(高機能版)アイコンを右クリックし、ClassWizard を選択します。 ClassWizard を選択します 5. 「メンバ変数タブ」をクリックし、以下の設定で、「変数の追加」ボタンをクリックします。 プロジェクト名 GpibTrans_m_ActvX クラス名 CGpibTrans_m_ActvXDlg コントロールID IDC_BPA0515ADVANCEDCTRL1 クリックします 6. 「メンバ変数の追加」ウィンドウが表示されますので、以下の設定にし、「OK」ボタンをク リックしてください。 メンバ変数 m_GpibHost カテゴリ コントロール 変数のタイプ CGpibAdvnanced クリックします タイプとメンバを確認して「OK」ボタンをクリックしてください。これでオブジェクトが作成で きました。プログラム中ではm_GpibHost.“メソッド名”等と記述することでメソッドやプロパティ が使用できます。

(39)

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

GP-IB機器の制御を行う場合には、先にも記載したとおりI/Oモジュールの初期化,GP-IB機器の初 期化を行う必要があります。(『24ページ 3.6 GP-IB制御概略』を参照) I/Oモジュールの初期化は、ActiveXコントロールのOpenメソッドにより行います。 次に、実際にデータ送受信を行うためにGP-IBの初期化を行います。ここでは、以下のGP-IB初期 化処理を行います。 ・IFC(Interface Clear)信号の送出 ・REN(Remote Enable)信号の送出 ・DC(Device Clear)実行 それぞれの処理にはActiveXコントロールの以下のメソッドを使います。 IFC(Interface Clear)信号の送出 ⇒ SetIfcメソッド

REN(Remote Enable)信号の送出 ⇒ SetRenメソッド

DC(Device Clear)実行 ⇒ ExecDeviceClearメソッド

また、GP-IB I/Oモジュールが、コントロール(マスタ)モードに設定されているかの確認も初期化 の中に加えています。 アプリケーションの終了時、もしくは処理の終了時に、I/Oモジュールに対して必ず終了処理を行 わなければなりません。終了処理は、ActiveXコントロールのCloseメソッドにより行います。 では、実際に初期化処理と終了処理のプログラムの作成を行います。 1. FileViewを表示し、SourceFileフォルダを展開してGpibTrans_m_ActvXDlg.cpp関数の最初の部分 に(List 1-1)を記述します。 (List 1-1:GpibTrans_m_ActvXDlg.cppのコード) // GpibTrans_m_ActvXDlg.cpp : インプリメンテーション ファイル // #include "stdafx.h" #include "GpibTrans_m_ActvX.h" #include "GpibTrans_m_ActvXDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

(40)

2. メニューバーの「表示」を選択し、「ClassWizard」を開きます。 3. 「ClassWizard」の以下のように設定して、「関数の追加」をクリックします。 プロジェクト GpibTrans_m_ActvX クラス名 CGpibTrans_m_ActvX オブジェクト名 CGpibTrans_m_ActvXDlg メッセージ WM_CLOSE 「関数の追加」をクリックします 4. 以下のように、OnClose関数が追加されますので、「OK」をクリックします。 関数が追加される 5. ClassViewを表示し、CGpibTrans_m_ActvXDlgクラスを展開してOnInitDialog関数とOnClose関数 に、それぞれ(List 1-2),(List 1-3)のコードを記述します。 こ の ク ラ ス に コ ー ドを 追 加 しま す

(41)

(List 1-2:CGpibTrans_m_ActvXDlgクラスのOnInitDialog関数のコード) CGpibTrans_m_ActvXDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 特別な初期化を行う時はこの場所に追加してください。 LONG lRet; // 関数の実行結果 CString szErrMsg; // エラーメッセージ // プロパティページの"接続機器設定"タブのNo.1に登録されている機器名を // グローバル変数gszDeviceに代入します。 gszDevice = m_GpibHost.GetDeviceName1(); // GP-IB I/Oモジュールのオープンを行います lRet = m_GpibHost.Open(); if (lRet != 0) { szErrMsg.Format("初期化に失敗しました(%d)", lRet); MessageBox(szErrMsg,"オープンエラー", MB_ICONERROR); exit(0); } // GP-IB I/Oモジュールが、マスターモードに設定されていることを確認します。 if (m_GpibHost.GetIsMaster() == FALSE) {

MessageBox("GP-IB I/Oモジュールが、マスターモードに設定されていません", "実行エラー", MB_ICONERROR); m_GpibHost.Close(); exit(0); } // IFC送出を行います lRet = m_GpibHost.SetIfc(); if (lRet != 0) { szErrMsg.Format("IFCの送出に失敗しました(%d)", lRet); MessageBox(szErrMsg,"実行エラー", MB_ICONERROR); m_GpibHost.Close(); exit(0); } // RENの設定を行います lRet = m_GpibHost.SetRen(); if (lRet != 0) { szErrMsg.Format("RENの設定に失敗しました(%d)", lRet); MessageBox(szErrMsg,"実行エラー", MB_ICONERROR); m_GpibHost.Close(); exit(0); } // デバイスクリアを行います lRet = m_GpibHost.ExecDeviceClear(); if (lRet != 0) { szErrMsg.Format("デバイスクリアに失敗しました(%d)", lRet); MessageBox(szErrMsg,"実行エラー", MB_ICONERROR); m_GpibHost.Close(); exit(0); }

return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。 }

(List 1-3:CgpibTrans_m_ActvXDlgクラスのOnClose関数のコード)

CGpibTrans_m_ActvXDlg::OnClose() { // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してく ださい LONG lRet; // 関数の実行結果 CString szErrMsg; // エラーメッセージ lRet = m_GpibHost.Close(); if(lRet != 0){ szErrMsg.Format("終了処理に失敗しました(%d)",lRet); MessageBox(szErrMsg,"クローズエラー", MB_ICONERROR); } CDialog::OnClose(); } プログラムの入力が終わったら保存してください。 この部分は、デフォルトのままです ここから記述します

(42)

では、初期化と終了処理についての説明を行います。ここで使用したOnInitDailog関数は、ダイア ログボックスが表示される前に実行される関数であり、OnClose関数は、ウィンドウまたはアプリ ケーションが終了しなければならない時に実行される関数です。つまり、プログラムを実行しダ イアログが作成(表示)される前に初期化処理(OnInitDialog関数)を行い、ウィンドウが終了する時に 終了処理(OnClose関数)を行います。 『61ページ 第5章 チュートリアル(DLL編))』で作成するサンプルププログラムは、初期化と終 了処理をOnCreate関数とOnDestroy関数で行っています。 DLL関数の場合は、OnCreate関数,OnDestroy関数ではなくActiveXコントロール同様に、OnInitDialog 関数,OnClose関数で初期化,終了処理を行っても構いませんが、ActiveXコントロールでの初期化, 終了処理をOnCreate関数,OnClose関数で行うことはできません。なぜなら、ActiveXコントロール は、ダイアログに張り付いている状態にあります。ですから、ダイアログが表示(作成)される前に ActiveXコントロールのメソッド,プロパティを使用することができません。(下図参照) ……ウィンドウを作成します。 OnInitDialog 実行 OnCreate 実行 プログラム実行 ActiveX コントロールが有効になる。 ……ダイアログを表示します。 OnClose 実行 ……ダイアログを破棄します。 ActiveX コントロールが無効になる。 ……ウィンドウを閉じます。 OnDestroy 実行 初期化の項目は、最初に説明した「IFC信号の送出」「REN信号の送出」「デバイスクリア」に加 えて、GP-IB I/Oモジュールがマスタに設定されているかの確認も行っています。 「使用例」 (初期化処理)

lRet = m_GpibHost.Open( ); // GP-IB I/O モジュールオープン lRet = m_GpibHost.GetIsMaster( ); // マスタ/スレーブの設定確認 lRet = m_GpibHost.SetIfc( ); // IFC 送出

lRet = m_GpibHost.SetRen( ); // REN の設定 lRet = m_GpibHost.ExecDeviceClear( ); // デバイスクリア

(終了処理)

lRet = m_GpibHost.Close( ); // GP-IB I/O モジュールクローズ

IFC送出時間を設定します。 (100μ単位)

(43)

Step4.データ送受信(コントローラモード)

では、データ送信(コントロールモード)を行うプログラムを作成します。データ送受信の一連の作 業の流れは、データ送信→データ受信→受信データ取得となります。 データ送信(相手) データ受信 受信データ取得 データ受信が終わると、それを知らせるイベントが上がる ここで初めて受信データを取得する 1. ResourceViewを表示し、ダイアログボックス(IDO_GP-IBTRANS_M_ACTVX_DIALOG)をダブル クリックして開きます。 ダブルクリックします 2. ダイアログボックス上に、送信データを書き込むエディットボックス、受信データを表示する エディットボックスと送信/受信を行うボタンを配置します。右クリックでプロパティを開き、 それぞれ以下のように設定してください。 IDC_SENDDATA チェックをつけます (エディットボックス 1:送信データを書き込む) IDC_RECVDATA チェックをつけます (エディットボックス 2:受信データを表示する) (ボタン1) ID IDC_SEND キャプション 送信 (ボタン2) ID IDC_RECV キャプション 受信 エディットボックス 1 とボタン 1 エディットボックス 2 とボタン 2

(44)

3. 送信データ,受信データを格納するメンバ変数の追加設定を行います。メニューより「表示」を 選択し「Class Wizard」を開き、「メンバ変数」タブを表示します。 4. 最初に送信データを保存するメンバ変数を追加します。以下のように設定し、「変数の追加」 をクリックします。 プロジェクト GpibTrans_m_ActvX クラス名 CGpibTrans_m_ActvXDlg コントロール IDC_SENDDATA 5. さらに以下のように設定し、「OK」をクリックします。 メンバ変数 m_szSendData カテゴリ 値 変数のタイプ Cstring 6. 同様にして、受信データを保存するメンバ変数の追加も行います。同じように「Class Wizard」 を開き以下のように設定してください。 プロジェクト GpibTrans_m_ActvX クラス名 CGpibTrans_m_ActvXDlg コントロール IDC_RECVDATA メンバ変数 m_szRecvData カテゴリ 値 変数のタイプ Cstring ※ 追加した2つのメンバ変数共に、「最大文字数」を“32”に設定します。 追加されたメンバ変数 “32”にします

(45)

7. データ送信,データ受信を行う関数と受信データを取得する関数の追加設定を行います。 メニューより「表示」を選択し「ClassWizard」を開き、「メッセージマップ」タブを表示しま す。 8. 最初にデータ送信を行う関数を追加します。以下のように設定し、「関数の追加」をクリック します。 プロジェクト GpibTrans_m_ActvX クラス名 CGpibTrans_m_ActvX Dlg オブジェクトID IDC_SEND メッセージ BN_CLICKED 9. メンバ関数を決定するダイアログボックスが表示されますので、“OnSend”となっていることを 確認し、「OK」をクリックします。 10. 同様にして、データ受信を行う関数とデータ受信完了を通知するイベントの追加を行います。 以下のように設定して「関数の追加」ボタンを押してください。関数名は、それぞれ“OnSend” と“OnReceiveFinishBpa0515advancedctrl1”となります。 (データ受信関数) プロジェクト GpibTrans_m_ActvX クラス名 C GpibTrans_m_ActvX Dlg オブジェクトID IDC_RECV メッセージ BN_CLICKED (データ受信完了イベント) プロジェクト GpibTrans_m_ActvX クラス名 C GpibTrans_m_ActvX Dlg

オブジェクトID IDC_ BPA0515ADVANCEDCTRL1

メッセージ ReceiveFinish

追加された関数

11. ClassViewを表示し、CGpibTrans_m_ActvXDlgクラスを展開して、OnSend関数,

OnRecv関数,OnReceiveFinishBpa0515advancedctrl1関数に、それぞれ(List 1-4),(List 1-5),(List 1-6) のコードを記述します。

(46)

(List 1-4:CgpibTrans_m_ActvXDlg関数のOnSend関数のコード) CGpibTrans_m_ActvXDlg::OnSend() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください LONG lRet; // 関数の実行結果 CString szErrMsg; // エラーメッセージ COleVariant vtData; // SlaveSendメソッドを呼び出し、データを送信します。 // 第2引数を省略する(NULL終端までの文字列を送信する) UpdateData(TRUE); vtData = m_szSendData;

lRet = m_GpibHost.MasterSend(gszDevice, vtData, COleVariant((long)0, VT_ERROR)); if (lRet != 0) {

szErrMsg.Format("データ送信に失敗しました(%d)", lRet); MessageBox(szErrMsg,"送信エラー", MB_ICONERROR); }

}

(List 1-5:CgpibTrans_m_ActvXDlgクラスのOnRecv関数のコード)

CGpibTrans_m_ActvXDlg::OnRecv() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください LONG lRet; // 関数の実行結果 LONG lRecvSize; // 受信データサイズ CString szErrMsg; // エラーメッセージ // I/Oモジュール番号0よりデータ受信を開始します

lRet = m_GpibHost.MasterReceive(gszDevice, “”, &lRecvSize); // データ受信 if(lRet != 0){

szErrMsg.Format("データ受信に失敗しました(%d)",lRet); MessageBox(szErrMsg,"受信エラー", MB_ICONERROR); }

}

(List 1-6 : CgpibTrans_m_ActvXDlgクラスのOnReceiveFinishBpa0515advancedctrl1関数のコード)

CGpibTrans_m_ActvXDlg::OnReceiveFinishBpa0515advancedctrl1(long bytesTotal) { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください LONG lRet; // 関数の実行結果 CString szErrMsg; // エラーメッセージ // GetDataメソッドは、変数の型に応じてデータを返します。 // そのため、予めVariant型変数に文字列を代入して初期化 // した変数を指定することで、文字列を取得できます。 COleVariant vtData(""); // GetDataメソッドを呼び出し、受信バッファからデータを // 取り出し、メッセージボックスで表示します。

lRet = m_GpibHost.GetData(vtData, COleVariant((long)0, VT_ERROR)); if (lRet != 0) { szErrMsg.Format("データ取得に失敗しました:%d", lRet); MessageBox(szErrMsg, "実行エラー", MB_ICONERROR); } else { m_szRecvData = vtData.bstrVal; // 受信データをメンバ変数に格納 UpdateData(FALSE); // エディットボックスに表示 } } プログラムの入力が終わったら保存してください。

(47)

List 1-4では、エディットボックスに入力されたデータをMasterSendメソッドにて送信を行ってい ます。List 1-5は、MasterReceiveメソッドでデータを受信します。正常に完了(デリミタ受信または 指定データ長受信)した時、ReceiveFinishイベントが発生し、 OnReceiveFinishBpa0515advancededctrl1 の関数が呼ばれます。データ受信が完了を知らせる ReceiveFinishイベントの中で、MasterReceiveメソッド実行後の受信データを取得するのに、GetData メソッドを使用します。 処 理 使用メソッド/イベント 1 データ送信 MasterSendメソッド 2 データ受信 MasterReceiveメソッド 3 受信データ取得 OnReceiveFinishイベント GetDataメソッド 「使用例」 COleVariant vtData;

lRet = m_GpibHost.MasterSend(gszDevice, vtData, COleVariant((long)0, VT_ERROR)); リスナ機器名を指定します。 送信するデータを指定します。 メソッド実行後の状態が格納されます。 送信データ長(バイト数)を指定します。※1 ※1 引数の省略:オプション引数はVARIANTとして宣言する必要があります。引数を省略する場 合には、呼び出し側のプログラムは初期化されたVARIANTを渡す必要があります。 「使用例」

lRet = m_GpibHost.MasterReceive(gszDevice, “ “, &lRecvSize);

トーカ機器名を指定します。 リスナの機器名を指定します。 メソッド実行後の状態が 格納されます。 データ完了時に受信バッファに格納されている受信 データのサイズを格納する変数を意思低します。*2 ※2 非同期転送時には、この値は無効です。 リスナの指定が無い場合は、第2引数に空文字列“”を指定します。 プログラムを動かしてみる環境は、図「チュートリアルの接続例」で行います。では、エディッ トボックス1(送信データ)に“READ?”と入力し「送信」ボタンをクリックしてください。その後、 「受信」ボタンをクリックしてください。「受信」をクリックした時点での電圧値が受信データ としてエディットボックスに表示されます。 データ受信完了時に受信バッファに格納されている 受信データのサイズを格納する変数を指定します。※ 2 「使用例」

lRet = m_GpobHost.GetData(vtData, COleVariant((long)0, VT_ERROR)); 取得するデータ長(バイト数)を指定します。

取得したデータが格納される場所を指定します。 メソッド実行後の状態が

参照

関連したドキュメント

Bluetooth® Low Energy プロトコルスタック GUI ツールは、Microsoft Visual Studio 2012 でビルドされた C++アプリケーションです。GUI

日本語で書かれた解説がほとんどないので , 専門用 語の訳出を独自に試みた ( たとえば variety を「多様クラス」と訳したり , subdirect

[r]

対応者: Vikas Jha 役職 Director, Governance and Policy Advocacy Sam Kapoor 役職 Manager, Partnerships and External Relations 概要. スタッフは

マンダナはクマーリラの二重 bhāvanā 説 ― bhāvanā のツインタワー説

ダウンロードした書類は、 「MSP ゴシック、11ポイント」で記入で きるようになっています。字数制限がある書類は枠を広げず入力してく

◆第2計画期間末までにグリーンエネルギー証書等 ※1 として発行 ※2

高効率熱源機器の導入(1.1) 高効率照明器具の導入(3.1) 高効率冷却塔の導入(1.2) 高輝度型誘導灯の導入(3.2)