エクセルからの GP-IB 制 御 2012/2/29 ver.3 初 版 2005 年 11 月 23 日 第 2 版 2008 年 6 月 4 日 大 野 泰 夫 1.はじめに 計 測 器 をプログラム 制 御 して 測 定 を 行 うことは 単 に 作 業 の 負 担 を 減 らすだけでなく 精 度 の 向 上 や 全 く 新 しい 測 定 を 可 能 とする 出 来 合 の 装 置 とソフトで 行 う 測 定 では 出 来 合 の 成 果 しか 得 られない 装 置 メーカー ソフトメーカーが 販 売 している 装 置 やツールは 誰 かが 初 めて 測 定 を 行 った 残 骸 である 測 定 をプログラム 制 御 して 行 う 技 術 は 近 年 整 備 され 当 初 はHP 社 ( 現 アジレント 社 )のみが 提 供 していたHP-IBインターフェイスがIEEEの 標 準 規 格 となり 多 くの 測 定 器 会 社 がそ のインターフェースを 用 いた 装 置 を 作 成 している 現 在 ではアジレント 社 もHP-IBという 呼 称 を 捨 ててGP-IBという 名 前 を 使 っている (GPは General Purpose の 略 ) 最 近 ではUS BやLAN 規 格 の 導 入 も 始 まっているが しばらくはGP-IBが 自 動 測 定 の 標 準 として 使 われ ると 思 われる 現 実 の 測 定 やデータ 整 理 ではエクセルでのデータ 整 理 解 析 が 広 く 行 われている エクセルに は 表 計 算 のみならずグラフの 作 成 WORD パワーポイントとのリンクなど 実 験 結 果 を 論 文 や スライドまで 持 っていくのに 便 利 な 環 境 がある さらにVBA(Visual Basic for Applications) というプログラム 言 語 を 搭 載 しており これを 使 えば 複 雑 なデータ 処 理 も 可 能 となっている そこで 今 回 は 測 定 系 の 制 御 をこのVBAを 用 いて 行 うこととした これにより 測 定 条 件 の 設 定 をエクセルの 表 で 指 定 できるようになり また 測 定 結 果 が 表 に 直 接 と 入 り 込 めるようになる 2. 測 定 系 の 構 成 測 定 系 の 構 成 は ハードウエアとしては (1) 測 定 に 直 接 用 いる 装 置 今 回 はモノクロメータ 付 き 光 源 と 半 導 体 パラメータアナライザ(4 155C)を 用 いる (2)パソコン(Windows エクセルが 走 るもの) (3)GP-IBインターフェイス である GP-IBインターフェイスには Agilent82357A USB/GPIB Interface for Windows を 用 いる ソフトウエアはエクセルとエクセルから 起 動 されるエクセルVBAである GP-IB 制 御 に 用 いるソフトウエア 体 系 には VISA(Virtual Instrument Software Architecture) と SICL((Standard Instrument Control Library)の2 種 がある SICL は 以 前 からこれで 書 か れた 資 産 を 持 っている 場 合 を 除 いて 推 奨 されていない 特 に VXIPlug&Play 機 器 を 使 う 場 合 はV 1
ISAが 必 須 と 言 うことで ここでは VISA を 用 いる 図 1 Agilent82357A USB/GPIB Interface for Windows またアジレントの 測 定 器 特 に 4155C の 制 御 では SCPI(Standard Commands for Programable Instruments) FLEX(FAst Language for EXecution) 4145 シンタックスの3つのコマンドモー ドがある 4145 シンタックスは 4155C の 前 身 の 4145Bで 用 いていたコマンドで 4145 用 に 開 発 されたソフトをそのまま 使 う 場 合 に 使 うが 4155C の 機 能 をフルには 利 用 できない SCPI と FLEX の 関 係 は 明 確 でないが FLEX の 方 が 高 速 ということからこちらを 用 いる FLEX モード の 中 にさらに US と US42 のモードがある これも 旧 機 種 4142B との 互 換 性 を 保 つためのもので 過 去 の 資 産 のない 大 野 研 としては US モードを 用 いる ここまでのモードに 関 しては 研 究 室 と しては 統 一 した 方 が 便 利 であろう GP-IBでのデータ 転 送 にはASCIIとBINARYが あるがこれは 状 況 に 応 じて 使 い 分 けることにする 3. 準 備 作 業 (1) エクセルでの VBA 練 習 エクセルをオープンし 表 示 ツールバーで Visual Basic にチェックを 入 れる ツール マク ロ 新 しいマクロの 記 録 などで VBA に 慣 れておくことが 好 ましい (2) インターフェイス 機 器 の 取 り 付 け (a) パソコンへのソフトウエアのインストール 82357A 付 属 の CD から PC に Agilent IO Library をインストールする 実 験 室 にあるパソコ ンには 既 にインストールされている 可 能 性 が 高 い Windows Desktop 右 下 の 稼 働 中 ソフトのアイ コンに 青 い 字 の"IO"というアイコンがあれば 既 にインストールされている (Man82357A p.11) (b) 82357A の 接 続 PC の USB 端 子 に 82357A を 接 続 する USB ポートはセルフパワーである 必 要 がある 始 めは 3つの LED すべてが 点 灯 するが 約 10 秒 で FAIL( 赤 )と ACCESS( 緑 )は 消 灯 し READY( 緑 ) のみが 点 灯 する (Man82357A p.21) 2
PC では 新 しい 機 器 の 接 続 が 検 知 されるので 指 示 に 従 いドライバーをインストールする さらに GP-IB インターフェイスの 検 知 が 報 告 され その 際 に VISA と SICL としての 名 前 が 表 示 される 必 要 なら 名 前 を 編 集 する インターフェイスの 名 前 はメモしておくこと (3) 測 定 機 器 の 接 続 GP-IB ケーブルを 接 続 する 機 器 側 をつなぎ 次 に 82357A 側 につなぐ デスクトップ 右 下 タスクバーの IO アイコンから VISA Assistant を 起 動 する 接 続 された 装 置 が 表 示 されているはずである 装 置 を 選 び 下 記 を 実 行 する 5 Select the Formatted I/O Tab. 6 Select the IEEE 488.2 button. 7 Click the *IDN? button. この 操 作 を 各 装 置 に 実 行 する これが 済 むと ダイアログボックスからコマンドを 入 力 して 装 置 を 動 かすことが 可 能 となる (4) VISA モジュールのインストール エクセルの VBA 編 集 ページを 開 く ファイル ファイルのインポートでC: Program Files VISA winnt includeにあるvisa32.bas を 指 定 する これでVISAの 関 数 が 使 えるようになる マニュアルvisa.pdf p.23~による 注 意 事 項 viprintf,viscanf, viqueryfは 使 えない 代 わりにviVPrintf, vivscanf, vivqueryf を 用 いる VISA 関 数 に 対 しValiant 型 変 数 を 用 いてはならない これを 防 ぐため プログラム 冒 頭 で Option Explicitを 宣 言 し 全 変 数 を 宣 言 して 用 いると 良 い vivprintf, vivscanf and vivqueryf を 使 う 場 合 % 記 号 で 始 まるformat 指 定 は1 個 のみ 複 数 の 場 合 はコマンドを 分 けること vivscanf,vivqueryf に 文 字 変 数 を 使 う 場 合 は 固 定 長 の 文 字 変 数 を 使 うこと (Dim strval as String * 40) (5) プログラム 例 Option Explicit ( 変 数 宣 言 しないと 変 数 が 使 えないという 面 倒 な 点 もあるが 訳 の 分 からない 変 数 が 増 えたり 変 数 のスペルミスによるバグを 防 げる C 言 語 では 入 れるのが 標 準 で 原 則 入 れる こと ) idn.bas 以 下 5 行 はコメント 文 3
This example program queries a GPIB device for an identification string and prints the results. Note that you may have to change the VISA Interface Name and address for your device from "GPIB0" and "22", respectively. Sub Main() Dim defrm As Long Session to Default Resource Manager Dim vi As Long Session to instrument Dim strres As String * 200 Fixed length string to hold results Open the default resource manager session Call viopendefaultrm(defrm) Open the session to the resource The "GPIB0" parameter is the VISA Interface name to a GPIB instrument as defined in Start Programs Agilent IO Libraries IO Config Change this name to what you have defined your VISA Interface. "GPIB0::22::INSTR" is the address string for the device. this address will be the same as seen in: Start Programs Agilent IO Libraries VISA Assistant after the VISA Interface Name is defined in IO Config) Call viopen(defrm, "GPIB0::22::INSTR", 0, 0, vi) Initialize device Call vivprintf(vi, "*RST" + Chr$(10), 0) Ask for the device s *IDN string. Call vivprintf(vi, "*IDN?" + Chr$(10), 0) Read the results as a string. Call vivscanf(vi, "%t", strres) Display the results MsgBox "Result is: " + strres, vbokonly, "*IDN? Result" Close the vi session and the resource manager session Call viclose(vi) Call viclose(defrm) End Sub 4155Cの 制 御 本 体 メインスイッチ オン 4
ボタンキーSYSTEM 画 面 キーmiscellaneous NOT SYSTEM CONTROLLER,GPIBアドレス *RST : 装 置 初 期 化 CN 1,2,3,4:SMU 1,2,3,4をオン MM 1,1,2,3,4: SMU1,2,3,4をスポットモード(この 順 に 出 力 ) FMT 1:アスキー/ヘッダー 付 き SLI k: 積 分 時 間 k=1 short, 2=Medium, 3=Long AV k,0:k 平 均 化 サンプル 数 が10 0はダミー DV n(smu), 0(auto), Voltage, I_Comp, 0(Comp Abs) DI XE: 測 定 の 実 行 RMD?: 測 定 データのバッファへの 転 送 *STB:シリアルポール Bit1 1 0( 測 定 完 了 ) Bit3 0 1(Query 回 答 あり) Bit4 0 1(Messageあり) BC:バッファークリア 5
計 算 途 中 の 経 過 表 示 ( 動 いているかどうか どの 辺 を 走 っているか 判 らなくなってしまうとき) 見 たいところに Application.StatusBar =を 置 く Application.StatusBar = Format(col) + "/" + Format(i) =の 後 ろは string です セルや 図 の 書 き 換 えを 一 時 停 止 セルの 書 き 換 えや 津 の 書 き 換 えには 時 間 を 取 られるので 計 算 が 終 るまで 書 き 換 えない 用 にする 書 き 換 え 停 止 :Application.ScreenUpdating = False 解 除 :Application.ScreenUpdating = True 最 後 は 必 ず 解 除 すること セルデータの 一 括 書 き 換 え 旧 エクセルでは VBA プログラムからのセルへの 書 き 換 えに 時 間 がかかる これを 逃 げるため 貼 り 付 けるセルと 同 じサイズのアレイを 作 り 下 記 のようにして 書 き 換 える ( 例 ) Dim data(10,20) as variant data(i,j)でデータをセットする Range(cell(x,y),cell(x+10,y+20))=data で 書 き 込 む 6