• 締切済み

GPIB制御

このたびExcel VBAを使用し、プログラミングを作成することになりました。 プログラム内容は、Agilent様のPSA測定機器から測定結果をExcelに表示する。という内容です。 プログラミングはほぼ初心者です。 そこで質問です。 どの様な順序でプログラムを組んでいけばよいのか詳しい方、 いませんか? ちなみにGPIBインタフェースはNational Instruments様を使用です。 ノートPCからGPIBカードを使用する形で制御を考えています。 マニュアルはあるのですが、VB.netやC言語のサンプルが多いです。 VBAで作成するにはどの様な点を注意して読めばいいですか?

みんなの回答

回答No.5

ExcelのVBAを使ったGPIB制御に関しては最初の回答が全てです。 このあたりは情報が無く試行錯誤で得られるノウハウです。 これ以降の開発情報は有り余るほど公開されているので自力で行ってください。 プログラムはVB6で記述することになります。 Excelへの表示はVBAを使います。 ExcelのVBAはVB6+VBAなので入門編としてはタフです。 これらに関して数冊本を購入して熟読してください。 *RSTや*CLSは計測器固有の命令ですのでマニュアルを読んでください。 計測器のマニュアルも必須です。 また、計測システム開発はいくら習熟しても本体無しでは何も進みません。 GPIBで接続できてから、remoteになるか、resetできるかと一歩一歩コミュニケーションを確立しながら計測器を制御していくものです。 先ず本体を入手することを優先してください。 この技術は習熟すれば食っていけます。 そのためにはプログラミング言語を習得し、自分のスタイルを確立し、忘れないように定期的にプログラムを書き続けることが必要です。 計測器は、メーカーや命令は気にしないでその測定ぼ本質を理解すること。 きつい分、あなたの付加価値を高めます。 頑張ってください。

すると、全ての回答が全文表示されます。
回答No.4

この種のシステム開発の経験者です。 以下はNI社のGPIB-USBを使ってExcelのVBAからGPIB機器を制御する場合の手順です。 (1)先ず付属のCD-ROMからGPIB-USBのドライバをdefault設定でinstallします。移植性を考えて常にdefault設定にしときます。 これでGPIB-USBをUSBに差し込むと自動認識されるようになりWindowsからGPIBが制御可能となります。 (2)ExceのVBAに標準モジュール、即ち、どこからでも呼び出せるサブルーチンとしてGPIB制御関数を組み込みます。 NI社のVB用の関数は、CD-ROMをdefaultで導入すると、 C:\Program Files\National Instruments\NI-488.2\Languages\Visual Basic にVB用関数が入るので、この関数を以下のように読み込みます。 Excelを起動後、ツール->マクロ->VisualBasicEditor でVBEditorを開く VBEditorで、ファイル->ファイルのインポート から上記のNationalInsturumentのFolderから NIGLOBAL VBIB32 の2つをインポートします。これらはVBAProjectの標準モジュールに入ります。 これでGPIBの命令が使用可能になります。 (3) VBAでプログラムを作成します。 VBAはVB6のサブセットです。Form1上にCommand1ボタンを配置した状態だと以下の 以下はコマンドボタンに命令を詰め込んだ例です。 Private Sub CommandButton1_Click() '計測器の認識 Agilent = ildev(0, 11, 0, T2s, 1, &H140A) 'AgilentのGPIBアドレスを11としてます '初期化 wtbuf$ = "*RST": ilwrt Agilent, wtbuf$, Len(wtbuf$) wtbuf$ = "*CLS": ilwrt Agilent, wtbuf$, Len(wtbuf$) というように命令を送ります 上記の形式でデータ転送命令を送って計測器からデータを読み込む場合は rdbuf$ = Space(100): ilrd Agilent, rdbuf$, 100 でrdbuf$に文字列として読み込めます。 計測器の認識は1回実行すればよいのでVB6だとForm1_Loadに設定してますが、ExcelのVBAのFormにはLoadが無いので、計測器認識を行うボタンと測定ボタンを分けたほうが良いでしょう。 ちなみに、この例でのはGPIBの番号を格納したローカル変数で、このサブルーチンのみ有効です。ボタンで認識と測定を分ける場合、グローバル変数にしておいてください。 この場合、プログラムの先頭、サブルーチンの外に Dim Agilent As Integer と記述すると、認識ボタンで変数Agilentにカード番号が書き込まれ測定ボタンのGPIB制御命令で使えます。 読み込んだ文字列はheaderのような余分な情報が添付されているので必要な情報のみtrimやmid関数で切り出します。 これをファイルに書き込むか、ExcelのCellに表示することになります。この辺は市販本にも多く記述されているので自分で苦労してください。 (4)計測器の制御ではタイマーがないと不便なので以下からフリーのタイマーのactivexを組み込めます。 http://kasayan86.hp.infoseek.co.jp/html/activex.htm これはVB6のタイマー関数と同じように使えます。 健闘を祈ります。

0125hazuki
質問者

お礼

解答ありがとうございます。 いくつか質問があるのですが、 まずGPIBカードを使用しリモート制御をかけたいのですが、 そちらに関しましてはどういったプログラムを組めばよろしいでしょうか (2)に関しまして。 ドライバ等のインストールは個人ではインストールさせていただけない状況になっておりまして、ひとまずプログラムを先に組もうと思っているのですが、ドライバをインストールしてからのほうがよろしいでしょうか? (3)に関しまして。 (1)*RSTや、*CLSににはどの様な意味合いがあるのですか? (2)Dimで宣言するのはAgilentのみでよろしいのでしょうか。 アドレスなどの宣言も必要でしょうか? (3)データを読み込んだあとは、どの様な処理でCellに表示させればよろしいでしょうか? 今のところは以上です、よろしくお願いいたします。

すると、全ての回答が全文表示されます。
  • BORREL
  • ベストアンサー率0% (0/0)
回答No.3

PCにはGPIBインターフェースが搭載されていませんので、使用予定のNI製GPIBインターフェースはUSBやPCI Expressなどのインターフェース変換を行っているはずです。 上記の場合は必ずメーカからドライバとAPIが提供されます。ActiveXやDLLファイルで提供されていれば、VBAなどの言語に関係なく、APIを呼び出してGPIBを制御できるはずです。 おそらく、ハンドシェーク等の低水準部分は覆い隠されたAPIになっているはずで、「送信」、「受信」などの関数を呼び出すだけでGPIB通信処理ができるのではないでしょうか? 構築手順は、 ・メーカが提供するAPIを理解する。 ・GPIBの基本的な事項(アドレスやデリミタなど)を理解する。 ・制御対象機器の制御方法(取説にコマンド等の説明があります)を理解する。 ・(VBAなどで)プログラム となると思います。 上記と異なり、easyGPIBというVBAでの制御を目的としたフリーのツールもあります。Webで検索すると、ダウンロードや使用方法がわかると思います。 知人の話では、これが一番簡単な方式となるそうです。ただし、easyGPIBはすべてのGPIBインターフェースに対応しているわけではありませんので、もしこのツールを使用するつもりであれば、対応しているインターフェースを調べて、選定する必要があります。

0125hazuki
質問者

お礼

しばらくこれず、お礼が遅れましてすみません。 >使用予定のNI製GPIBインターフェースはUSBやPCI Expressなどのインターフェース変換を行っているはずです そうですね。PCMCIAのカードを使用しています。 会社で作成なのでフリーツールが使用できない状態ですのでeasyGPIBというツールは使用できない状態です。 解答ありがとうございました。 参考にさせていただきます。

すると、全ての回答が全文表示されます。
noname#194317
noname#194317
回答No.2

理念が高いのはよいことですが、通信というのは相手があるものであり、その相手が用意している手順に従って通信するようにソフトを作らなければダメです。とにかく、まずは測定機器の説明書を良く読んで、通信手順を完全に理解してください。そこをちゃんと押さえておかないと、ソフト制作はできません。質問者さんが頑張って高度なハンドシェークを実装したのに、肝心の測定機器が用意している手順が垂れ流しだけだったら、これはシャレになりませんよね。 GPIB制御の専用のVBA言語というのは存在しませんが、VBAでGPIBを簡単に利用できるようにするActiveXコントロールだったらあるでしょう。ただそれは、GPIBインターフェースの製品次第(そのメーカーが用意するもの)ですから、それは何とも言えません。APIだけ提供するから、後は何とかしてねって言う可能性もありますし。そもそもVBAっていうのは、ExcelやWordを制御するものであり、それにGPIB専用機能を求めることは本来なら筋違いでしょう。

すると、全ての回答が全文表示されます。
noname#194317
noname#194317
回答No.1

基本的に通信系の話になると思います。なので、プログラムする上で次の二点は必須事項でしょう。これは、測定機器の説明書に書かれているはずなので、そちらをよく確認してください。 1)測定機器とのやりとりにはどういうコマンドを使うか 2)ハンドシェークが必要か ハンドシェークというのは、データをやりとりする時の手順みたいなものです。いきなりデータを投げて後は知らん顔、という無責任な方法(俗に言う垂れ流し)もありますが、そうではなくて、「これからデータを送りたいが準備は良いか」と相手に尋ね、「準備OK」という返事をもらってから送るような方法がハンドシェークです。これも厳密なやり方だけではなく、いきなりデータを投げつけるが、相手からエラー応答が返ってきたら再送する、という簡易な方法もあります。どういうやり方でデータを授受するのか、それがわからないとソフトは組めないので、ここの確認は重要です。 VBAから制御する場合は、ドライバが用意しているAPIを呼び出すか、ActiveXコントロールが提供されているなら、それをフォームに貼り付けることになります。これに関しては、ネットにもいろいろ情報が落ちていますし、あるいは参考書もたくさんあるので、それで調べた方が良いでしょう。実際に使っているところを見た方が解りやすいはずです。 ActiveXをVBAから使う例の解説 http://www.sigoto.co.jp/excel/activex/actmenu01.htm APIの場合 http://www.ne.jp/asahi/hishidama/home/tech/excel/dll.html

0125hazuki
質問者

お礼

回答ありがとうございます。 出来るならばハンドシェーク法でプログラミングを組みたいです。 こちらにするとやはり難しくなるのでしょうか? GPIB制御の専用のVBA言語とかってあるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A