KI-VISA Library Guidebook J

Size: px
Start display at page:

Download "KI-VISA Library Guidebook J"

Transcription

1 KI-VISA Library VISA COM ガイドブック (KI-VISA 対 応 版 ) Feb 2013 Revision 2.5 KIKUSUI ELECTRONICS CORP.

2 (This page is intentionally left blank) KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 2/159

3 Contents 1- 概 要 本 書 について VISA ライブラリとは KI-VISA の 動 作 環 境 サポートされる 計 測 器 IO インターフェース 参 考 文 献 および 関 連 仕 様 書 商 標 用 語 の 説 明 X86/X WOW VXIPNPPATH (VISA 標 準 ルートディレクトリ) インターフェース SCPI-RAW VXI HISLIP LXI USBTMC VXI-11 DISCOVERY MDNS DNS-SD IO リソース VISA アドレス セッション タイプ VISA セッション SETUP KI-VISA のセットアップ KI-VISA INSRUMENT EXPLORER (IO CONFIG) IO コンフィグレーション KI-VISA INSRUMENT EXPLORER ( 対 話 式 制 御 ) タイプ ライブラリのインポート VISUAL STUDIO 2008 (マネージド 言 語 )での 参 照 設 定 と 名 前 空 間 の 指 定 VISUAL BASIC 6.0 での 参 照 設 定 EXCEL 2007 VBA での 参 照 設 定 VISUAL C (アンマネージド)での 参 照 設 定 VISA セッションのオープン リソース マネージャ オブジェクトの 作 成 VISA セッションのオープン 基 本 的 な IO オプション 文 字 列 IO インターフェース タイプの 識 別 計 測 器 との 通 信 IO インターフェースによって 扱 いの 異 なるメッセージ ターミネータ VISA アドレスの 動 的 な 設 定 永 続 性 のない VISA アドレス FINDRSRC を 使 ったリソースの 検 索 VISA エイリアスを 使 う リソース ロッキング なぜロックが 必 要 か ロックの 仕 組 み ロック タイプ KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 3/159

4 9-4 リソースのロックとアンロック ネットワーク 越 しのロック イベント キュー 非 同 期 IO IO 動 作 の 開 始 IO の 完 了 待 ちと 結 果 の 取 得 IO 動 作 の 終 了 イベント コールバック サービス リクエスト 通 知 KI-VISA SPY 傍 受 の 開 始 と 停 止 詳 細 情 報 の 確 認 各 表 示 カラムの 説 明 SPY ログの 保 存 環 境 設 定 常 に 最 前 面 表 示 KI-VISA SPY の 終 了 IO インターフェースに 依 存 した 処 理 シリアル ポーリング(GPIB USB VXI-11 HISLIP) デバイス クリアの 送 出 デバイス トリガの 送 出 リモート ローカルの 制 御 コントローラ インターフェース 機 能 (GPIB) 数 値 パラメータの 書 式 制 御 (FORMATTEDIO488) FORMATTEDIO488 コンポーネント オブジェクトの 作 成 コマンドとレスポンスの 送 受 信 バッファ サイズ 数 値 パラメータの 書 式 制 御 (.NET FRAMEWORK) 数 値 文 字 列 変 換 文 字 列 数 値 変 換 プログラミング 言 語 依 存 の 補 足 説 明 (C#) コンポーネント オブジェクトの 作 成 方 法 インターフェースの 参 照 配 列 の 扱 い エラー コードの 原 則 物 理 的 な 戻 り 値 エラー トラッピング イベント シンクの 作 成 方 法 ターゲット OS の 設 定 プログラミング 言 語 依 存 の 補 足 説 明 (VISUAL BASIC.NET) コンポーネント オブジェクトの 作 成 方 法 インターフェースの 参 照 配 列 の 扱 い エラー コードの 原 則 物 理 的 な 戻 り 値 エラー トラッピング イベント シンクの 作 成 方 法 ターゲット OS の 設 定 プログラミング 言 語 依 存 の 補 足 説 明 (VISUAL BASIC 6.0) コンポーネント オブジェクトの 作 成 方 法 インターフェースの 参 照 配 列 の 扱 い KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 4/159

5 18-4 エラー コードの 原 則 物 理 的 な 戻 り 値 エラー トラッピング イベント シンクの 作 成 方 法 プログラミング 言 語 依 存 の 補 足 説 明 (C++/CLI) コンポーネント オブジェクトの 作 成 方 法 インターフェースの 参 照 配 列 の 扱 い エラー コードの 原 則 物 理 的 な 戻 り 値 エラー トラッピング イベント シンクの 作 成 方 法 ターゲット OS の 設 定 プログラミング 言 語 依 存 の 補 足 説 明 (VISUAL C ) COM ラッパ モジュールの 生 成 COM を 使 うための 宣 言 コンポーネント オブジェクトの 作 成 方 法 インターフェースの 参 照 文 字 列 の 扱 い 配 列 の 扱 い エラー コードの 原 則 物 理 的 な 戻 り 値 エラー トラッピング イベント シンクの 作 成 方 法 ターゲット OS の 設 定 プログラミング 言 語 依 存 の 補 足 説 明 (C++BUILDER XE2) COM ラッパ モジュールの 生 成 COM を 使 うための 宣 言 コンポーネント オブジェクトの 作 成 方 法 インターフェースの 参 照 文 字 列 の 扱 い 配 列 の 扱 い エラー コードの 原 則 エラー トラッピング イベント シンクの 作 成 方 法 プログラミング 言 語 依 存 の 補 足 説 明 (DELPHI XE2) COM ラッパ モジュールの 生 成 コンポーネント オブジェクトの 作 成 方 法 インターフェースの 参 照 文 字 列 の 扱 い 配 列 の 扱 い エラー コードの 原 則 エラー トラッピング イベント シンクの 作 成 方 法 IVI CONFIGURATION ユーティリティの 起 動 ロジカル ネームの 追 加 タブ ページでの 設 定 設 定 の 保 存 付 録 (C) VISA COM QUICK REFERENCE IVISASESSION インターフェース IBASEMESSAGE インターフェース IMESSAGE インターフェース IASYNCMESSAGE インターフェース KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 5/159

6 24-5 IHISLIPINSTR インターフェース IGPIB インターフェース ISERIAL インターフェース IUSB インターフェース ITCPIPINSTR インターフェース ITCPIPSOCKET インターフェース IGPIBINTFC インターフェース IGPIBINTFCMESSAGE インターフェース IEVENT インターフェース IEVENTIOCOMPLETION インターフェース IRESOURCEMANAGER3 インターフェース IFORMATTEDIO488 インターフェース 付 録 (B) VISA COM インターフェース 階 層 付 録 (C) VISA COM API ステータス コード 改 定 履 歴 Rev Date Filename Comments /May/2003 KiVisaGuide_J.doc 初 版 /Sep/2003 KiVisaGuide_J.doc 改 訂 版 誤 記 修 正 他 /Oct/2003 KiVisaGuide_J.doc.NET 解 説 修 正 KI-VISA 対 応 の 修 正 /Jan/2004 KiVisaGuide_J.doc KI-VISA 対 応 の 修 正 /May/2010 KiVisaGuide_2010_J.doc KI-VISA 対 応 の 修 正 /July/2010 KiVisaGuide_2010_J.doc KI-VISA 対 応 の 修 正 /Aug/2011 KiVisaGuide_2011_J.doc KI-VISA 5.0.x 対 応 の 修 正 誤 記 修 正 他 /Mar/2012 KiVisaGuide_2012_J.doc KI-VISA 対 応 の 修 正 誤 記 修 正 他 /July/2012 KiVisaGuide_2012(July)_J.docx KI-VISA 対 応 の 修 正 誤 記 修 正 C++Builder XE2 サンプル 追 加 Delphi XE2 サンプル 追 加 IVI Config Utility 説 明 移 植 /Feb/2013 KiVisaGuide_2013(Feb)_J.docx KI-VISA 対 応 の 修 正 誤 記 修 正 他 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 6/159

7 ライセンスの 同 意 1. 権 利 の 許 諾 菊 水 電 子 工 業 株 式 会 社 ( 以 下 当 社 といいます)はお 客 様 に 対 して 本 使 用 許 諾 契 約 に 同 意 いただいて 利 用 可 能 となる KI-VISA ライブラリ ソフトウェア 及 びその 関 連 資 料 ( 以 下 本 ソフトウェア といいます)に 関 し 以 下 の 権 利 を 許 諾 します (a) お 客 様 は 本 ソフトウェアの 無 制 限 数 の 複 製 を 作 成 する 事 が 出 来 ます (b) お 客 様 は 本 ソフトウェアを 無 制 限 数 のコンピュータにインストールする 事 ができます (c) お 客 様 は 本 ソフトウェアを 当 社 製 品 を 使 用 する 目 的 で 商 用 及 び 非 商 用 ソフトウェアに 使 用 する 事 が 出 来 ます (d) お 客 様 は 本 ソフトウェアがインストールされたコンピュータが 一 台 以 上 の 当 社 製 品 を 制 御 する 場 合 に 限 り 本 ソフトウェアを 当 社 以 外 の 製 品 を 使 用 する 目 的 で 商 用 及 び 非 商 用 ソフトウェアに 使 用 する 事 が 出 来 ます (e) お 客 様 は 本 ソフトウェアを 当 社 もしくは 当 社 が 容 認 した 第 三 者 によって 提 供 されたアプリケーション ソフ トウェアと 共 に 使 用 する 事 が 出 来 ます (f) お 客 様 は 上 記 (c) 項 もしくは(d) 項 で 示 される 条 件 下 において 本 ソフトウェアをお 客 様 のソフトウェアと 共 に 第 三 者 に 再 配 布 する 事 が 出 来 ます 2. 追 加 許 諾 条 項 本 ソフトウェアを 定 められた 目 的 に 従 って 使 用 した 結 果 作 成 された 各 種 のファイルは お 客 様 の 著 作 物 となり ます 3. 著 作 権 本 ソフトウェア 及 びその 複 製 物 の 著 作 権 は 当 社 又 は 当 社 が 認 めた 者 が 有 するものであり 日 本 国 著 作 権 法 及 び 国 際 条 約 によって 保 護 されています 本 使 用 許 諾 契 約 に 基 づき お 客 様 が 本 ソフトウェアを 複 製 する 場 合 は ダウンロードされた 本 ソフトウェアに 付 されていたものと 同 一 の 著 作 権 表 示 がなされることを 要 します 4. 禁 止 事 項 (a) 本 ソフトウェアを 再 配 布 する 場 合 一 切 の 改 変 を 行 うことなくそのままの 状 態 で 再 配 布 しなければなりませ ん (b) 本 ソフトウェアがバイナリ 形 式 で 提 供 される 場 合 お 客 様 は 本 ソフトウェアをリバースエンジニアすることは できません 5. 無 保 証 当 社 は 本 ソフトウェアがお 客 様 の 特 定 の 目 的 のために 適 当 であること もしくは 有 用 であること 又 は 本 ソフト ウェアに 瑕 疵 がないこと その 他 本 ソフトウェアに 関 していかなる 保 証 もいたしません 6. 免 責 当 社 は いかなる 場 合 においても 本 ソフトウェアの 使 用 又 は 使 用 不 能 から 生 ずるいかなる 損 害 ( 事 業 利 益 の 損 害 事 業 の 中 断 事 業 情 報 の 損 失 又 はその 他 金 銭 的 損 害 )に 関 して 一 切 責 任 を 負 いません 7. 契 約 の 解 除 お 客 様 が 本 使 用 許 諾 契 約 に 違 反 した 場 合 当 社 は 本 使 用 許 諾 契 約 を 解 除 することができます その 場 合 お 客 様 は 本 ソフトウェアを 一 切 使 用 しないものとします 7. その 他 本 ソフトウェア 及 び 本 書 に 記 載 されている 内 容 は 予 告 なく 変 更 される 事 があります KIKUSUI ELECTRONICS CORP. All rights reserved KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 7/159

8 1- 概 要 1-1 本 書 について 本 書 では KI-VISA ライブラリを 使 用 して 計 測 器 のリモート IO 動 作 を 行 うプログラムの 作 成 手 順 を 解 説 します 計 測 器 IO を 行 うプログラムは 主 にアプリケーション プログラムと 計 測 器 ドライバに 大 別 されます KI-VISA ライブラリはどちらのタイプのプログラムでも 同 じように 扱 う 事 ができますが 本 書 では 主 にアプリケーション プログラムを 作 成 する 手 順 を 前 提 として 説 明 していきます 本 書 は 下 記 に 示 されるプログラミング 言 語 に 対 応 していますが 特 にプログラミング 言 語 やツールに 依 存 した 部 分 を 除 いて 全 て C# 言 語 でサンプル コードを 提 示 します Microsoft C# 2008 Microsoft Visual Basic 2008 Microsoft Visual C (.NET 版 C++/CLI) Microsoft Visual C (アンマネージド MFC/ATL) Microsoft Visual Basic 6.0 言 語 やツールに 依 存 した 部 分 は 別 途 解 説 を 行 います 最 後 にエラー ステータス コードのリファレン スを 掲 載 します VISA COM API の 言 語 リファレンスに 関 しては KI-VISA COM オンライン ヘルプを 参 照 して 下 さい 本 書 で 扱 われていない 言 語 やツールでも Microsoft COM (Component Object Model)のクライア ント プログラムの 作 成 機 能 をサポートするものであれば 原 則 として 利 用 できますが 一 部 古 いツー ルなどでは 使 えない 事 があります 本 書 の 内 容 は KI-VISA COM ライブラリ バージョン に 合 わせて 記 述 されています 1-2 VISA ライブラリとは VISA (Virtual Instrument Software Architecture)は VXIplug&play Systems Alliance ( 現 IVI Foundation)によって 策 定 された 計 測 器 接 続 ソフトウェアの 標 準 仕 様 です VISA ライブラリ は VISA 仕 様 に 従 って 実 装 されたライブラリ ソフトウェアであり Windows の 場 合 は 通 常 DLL の 形 式 を 取 ります VISA ライブラリは 計 測 制 御 アプリケーションや 計 測 器 ドライバを 実 行 するための IO ド ライバであり それ 自 体 は 単 体 で 実 行 可 能 なアプリケーション ソフトウェアではありません VISA は 計 測 器 制 御 に 使 われる 一 般 的 な IO インターフェースとして GPIB シリアル(RS232) LAN USB などを 仮 想 化 します VISA ライブラリを 使 うことにより 計 測 制 御 アプリケーションや 計 測 器 ドラ イバのプログラムは IO インターフェースの 種 別 や GPIB ボードのブランドに 依 存 しない 共 通 の API (Application Programming Interface)セットを 通 じて 統 一 されたプログラミング 手 順 で 計 測 器 を 制 御 することができます Windows ベースの VISA ライブラリには 大 きく 分 けて 2 種 類 の API スタイル VISA C と VISA COM があります VISA C API VISA C はその 名 のとおり C 言 語 から 使 われる 事 を 念 頭 に 置 いて 設 計 されています 初 期 の VISA ライブラリではこれが VISA の 実 体 であり Windows3.1 時 代 は 16 ビットの VISA.DLL として NI- VISA が 存 在 しました 現 在 の Windows では VISA32.DLL(32 ビット 版 DLL) 及 び VISA64.DLL(64 ビ ット 版 DLL)がその 実 体 です VISA C DLL は 通 常 の 関 数 ベースの DLL として 実 装 されており DLL を 呼 び 出 す 事 の 可 能 なプログラミング 言 語 であれば C 言 語 以 外 でも 利 用 する 事 ができます 但 し 関 数 のプロトタイプ 宣 言 を 記 述 したヘッダ ファイルが 言 語 ごとに 必 要 になります KI-VISA では C/C++ 及 び Visual Basic 6.0 用 のヘッダ ファイルを 同 梱 しています ( 他 の 言 語 から 使 用 する 場 合 はヘッダ ファイル 又 はそれに 準 ずる 物 を 自 作 する 必 要 があります ) 32 ビット 版 VISA32.DLL は VISA の 実 装 ベンダーによって 直 接 提 供 されますが 64 ビット 版 VISA64.DLL は VISA Router DLL と 呼 ばれる 物 で VISA Shared Components 64bit Edition によってインストールされます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 8/159

9 VISA Router DLL は 実 際 の IO 処 理 は 行 わず VISA 実 装 ベンダーによって 提 供 される 別 の DLL(KI-VISA の 場 合 は System32 ではない 別 のディレクトリに 置 かれた 64 ビット 版 KIVISA32.DLL)へリダイレクトされます VISA COM API VISA COM は Microsoft COM (Component Object Model) 技 術 に 基 づいた API スタイルになってい ます この API を 使 うアプリケーション( 又 は 計 測 器 ドライバ)は VISA C DLL を 直 接 参 照 しません COM スタイル API の 長 所 は やはりなんと 言 ってもオブジェクト 指 向 である 事 です 特 にアプリケー ションの 規 模 がある 程 度 以 上 大 きくなると オブジェクト 指 向 的 な 設 計 アプローチは 威 力 を 発 揮 しま す また.NET 開 発 環 境 では VISA COM API を 使 うための.NET アセンブリ(Primary Interop Assembly)が 標 準 で 提 供 されるので VISA C API よりも 使 いやすくなっています VISA C API 同 様 VISA COM API もまた 言 語 依 存 がありません COM クライアント 機 能 に 対 応 した 開 発 言 語 ツール 或 いは.NET 仕 様 の 任 意 の 言 語 開 発 ツールであれば 基 本 的 にどれでも 利 用 する 事 ができます Microsoft Visual Basic であれば Ver5.0 以 降 Microsoft Office であれば Office 2000 以 降 National Instruments LabVIEW であれば Ver6.0 以 降 で 使 用 可 能 です.NET 環 境 の 言 語 で はバージョンを 問 わずインタロップ アセンブリ 経 由 で COM API を 使 う 事 が 可 能 です KI-VISA ライブラリでは VISA COM と VISA C の 両 方 の API セットが 提 供 されます 本 書 及 びオン ライン ヘルプも 含 め VISA COM API を 使 うことを 前 提 とし これを 推 奨 します VISA COM は IDispatch インターフェースを 持 たず IUnknown ベースのカスタム インターフェースのみを 装 備 しているので IDispatch インターフェースに 依 存 した(オートメーション 或 いはデュアル インターフェースを 前 提 とする) 開 発 ツールからは 直 接 利 用 できません オートメーションまたはデュアル インターフェースのみをサポ ートするツールの 例 は Excel95 VBA Visual Basic 4.0 Delphi 2 LabVIEW 5.0 および Visual C++で MFC の COleDispatch クラスなどを 使 用 する 場 合 など 殆 どが 古 い 開 発 ツールばかりです 1-3 KI-VISA の 動 作 環 境 KI-VISA ライブラリを 使 ったプログラムを 動 作 させるには 下 記 の 何 れかの OS が 動 作 する PC が 必 要 です (これ 以 外 にも 最 近 の Windows Server なら 動 作 します ) Windows 2000 (x86) SP4 + Update Rollup 1 必 須 Windows XP (x86) (SP2 以 降 を 推 奨 ) Windows Vista (x86/x64) Windows 7 (x86/x64) Windows 8 (x86/x64) 1-4 サポートされる 計 測 器 IO インターフェース KI-VISA では 下 記 の 計 測 器 IO インターフェースを 使 用 する 事 ができます GPIB に 関 しては 使 用 するハードウェア(GPIB ボード)に 付 属 のドライバをインストールしておく 必 要 があります USB RS232C LAN に 関 しては KI-VISA がドライバを 提 供 します GPIB インターフェース (コンテック 社 製 GPIB ボード) GPIB インターフェース (インターフェース 社 製 GPIB ボード LabVIEW 対 応 版 ドライバ 使 用 時 ) GPIB インターフェース (National Instruments 社 製 GPIB ボード) GPIB インターフェース (Agilent Technologies 社 製 GPIB ボード Agilent 488 有 効 設 定 時 ) シリアル インターフェース (RS232C) USB インターフェース (USBTMC) LAN インターフェース(SCPI-RAW ソケット VXI-11 HiSLIP) GPIB ボードに 関 しては 現 在 各 社 の 製 品 をサポートしていますが 現 時 点 で KI-VISA の 動 作 を 確 認 できている のは 下 記 の 機 種 だけです 他 の 機 種 の 動 作 状 況 については 動 作 する 可 能 性 は 高 いですが 確 認 をしていませ ん また 括 弧 内 に 記 載 されているよりも 古 いバージョンの IO ドライバでの 動 作 も 確 認 していません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 9/159

10 コンテック 社 : インターフェース 社 : GP-IB(PCI)L GP-IB(PM) GP-IB(PCI)F GP-IB(CB)F (API-GPIB ドライバ VER4.80 以 上 推 奨 ) PCI-4301 (LabVIEW 対 応 版 GPC-4301N ドライバ VER3.00 以 上 推 奨 ) National Instruments 社 : PCI-GPIB GPIB-ENET/100 GPIB-USB-B GPIB-USB-HS (NI-488.2M Software For Windows, VER2.7 以 上 推 奨 ) Agilent 社 : (PCI/GPIB) (IO Libraries Suite 15.5 以 上 推 奨 ) コンテック 社 製 GPIB ボード 使 用 時 は API-GPLV ドライバ(LabVIEW 対 応 版 NI-488.2M API 互 換 )ではなく 通 常 版 の API-GPIB ドライバを 使 用 して 下 さい インターフェース 社 製 GPIB ボード 使 用 時 は 逆 に 通 常 版 GPC ドライバではなく GPC-4301N(LabVIEW 対 応 版 NI-488.2M API 互 換 )を 使 用 して 下 さい Agilent 製 GPIB ボード 使 用 時 は Primary VISA を 非 選 択 Agilent 488 オプションを 選 択 して 下 さい NI 製 GPIB ボード 使 用 時 は NI-488.2M のインストール 時 に NI-VISA インストールを 除 外 して 下 さい シリアル インターフェースに 関 しては PC に 標 準 装 備 されている 通 信 ポート 及 び USB-RS232C 変 換 器 などに よる 仮 想 シリアル 通 信 ポートをサポートしています ただし 変 換 機 などによる 仮 想 通 信 ポートの 場 合 は 提 供 されるデバイス ドライバによっては 必 ずしも 正 常 動 作 しない 場 合 があるので 注 意 して 下 さい ( 可 能 であれば Microsoft 製 のドライバを 使 用 してください ) USB 計 測 器 は USBTMC プロトコルに 準 拠 しているか 又 は 仮 想 シリアル ポートをサポートしている 必 要 があり ます また USBTMC プロトコルの 場 合 は 計 測 器 の USB インターフェースが IVI Foundation 版 の USBTMC デ バイス ドライバでホストされている 必 要 があります それ 以 外 の 条 件 では KI-VISA からは 使 用 出 来 ません 1-5 参 考 文 献 および 関 連 仕 様 書 Table 1-1 文 献 名 Inside COM 参 考 文 献 著 者 出 版 社 Dale Rogerson 著 Microsoft Press ( 日 本 語 版 アスキー 出 版 IDBN ) Table 1-2 関 連 仕 様 書 仕 様 書 名 出 典 VPP-4.3 The VISA Library Rev5.0 VPP-4.3.2: VISA Implementation Specification for Textual Languages Rev5.0 VPP-4.3.4: VISA Implementation Specification for COM Rev5.0 VPP-4.3.5: VISA Shared Components Rev5.0 IVI-6.1: IVI High-Speed LAN Instrument Protocol (HiSLIP) Rev1.0 Universal Serial Bus Specification Rev2.0 Universal Serial Bus Test and Measurement Class Specification (USBTMC) Rev1.0 Universal Serial Bus Test and Measurement Class, Subclass USB USB488 Specification (USBTMC-USB488) Rev1.0 LXI Device Specification 2011, Rev1.4 IVI Foundation USB Implementers Forum 商 標 本 文 中 に 登 場 する 企 業 名 商 品 名 は 各 社 の 商 標 又 は 登 録 商 標 です KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 10/159

11 2- 用 語 の 説 明 2-1 x86/x WOW64 このドキュメントでは 様 々な 専 門 用 語 が 使 われます ここでは 比 較 的 重 要 なものを 幾 つか 紹 介 しま す 特 に VISA はアプリケーション ソフトではなく 中 間 レイヤー(ミドルウェア)に 位 置 づけられるため Windows のシステムに 強 く 依 存 した 説 明 も 多 数 使 われます 現 在 Windows には 32 ビット 版 と 64 ビット 版 が 存 在 します KI-VISA はこれら 両 方 のシステムに 対 応 します このビット 数 を 示 す 総 称 として ビットネス という 言 い 方 をします x86 は Intel i386 CPU 以 降 の 32 ビット アーキテクチャを 指 す 総 称 です Windows NT3.1 及 び 95 以 降 現 在 でもこのアーキテクチャは 広 く 使 われていますが Windows Vista/7 の 登 場 以 降 主 流 は x64 へ 移 って 来 ています 尚 デバイス ドライバなどカーネル 寄 りの 技 術 書 では i386 と 表 記 されてい ることもあります x64 は AMD Athlon64 CPU 以 降 の 64 ビット アーキテクチャを 指 す 総 称 です 当 初 は amd64 と 言 われていましたが その 後 Intel が Core2 プロセッサで 参 入 してからは x64 と 呼 ばれるようになりま した (x64 は Intel Itanium プロセッサで 採 用 している IA-64 というアーキテクチャとは 別 物 です ) このガイドブックでは x86 及 び x64 という 統 一 表 記 をします KI-VISA の 幾 つかのプログラム( 特 にド ライバ 関 連 )では i386 又 は amd64 という 名 称 を 使 っている 部 分 がありますが 同 義 語 です WOW64 (Windows-On-Windows 64)は x64 OS で 従 来 の x86 プログラムを 実 行 するエミュレータ です エミュレータといっても amd64 系 (x64 系 )の 64 ビット CPU がネイティブに x86 命 令 を 実 行 で きるため 速 度 低 下 はありません 但 し WOW64 はユーザー モードでの 実 行 (EXE, DLL 等 )に 限 られており デバイス ドライバ 等 カー ネル モードで 実 行 されるプログラムは 64 ビット コードのみ 実 行 できます つまり x64 OS 環 境 で は x86 OS 用 の 古 い 32bit デバイス ドライバは 一 切 動 作 せず x64 版 デバイスドライバを 用 意 する 必 要 があります System32 ディレクトリ SysWow64 ディレクトリ x86 OS では 気 にする 必 要 がありませんが x64 OS では System32 ディレクトリは 64bit のシステム DLL 専 用 の 場 所 になっています このディレクトリは 通 常 32bit プロセスからは 見 えません 一 方 32bit の WOW64 環 境 では 32bit システム DLL 類 は 全 て SysWow64 ディレクトリに 置 かれますが 32bit プロセスからは SysWow64 こそが System32 ディレクトリの 幻 として 見 えます このガイドブッ クでは このシステム ディレクトリの 事 を 総 称 的 に<WINSYSDIR>と 表 記 します System32 は 64 ビット(x64)のシステム DLL SysWow64 は 32 ビット(x86)のシステム DLL を 置 くディレクトリで す 32 と 64 の 名 前 が 逆 転 しているように 見 えますが 間 違 いではありません また 64 ビット システム DLL のファイル 名 の 多 くは xxxx32.dll のように 32 が 付 きます これは 32 ビット 時 代 のアプリケーションとファイル 名 互 換 を 維 持 するためにそのようになっています WOW64 環 境 で 実 行 される 32 ビットソフトウェアから 見 た 場 合 見 掛 け 上 の System32 ディレクトリは WOW64 レイヤーによって 仮 想 化 されているため 実 際 には SysWow64 ディレクトリにリダイレクトされます 通 常 は 32 ビットソフトウェアからは 真 の System32 ディレクトリは 見 えません 2-3 VXIPNPPATH (VISA 標 準 ルートディレクトリ) これは VISA ライブラリがインストールされるディレクトリの 最 上 位 階 層 を 指 します 元 々VISA は IVI ではなく VXI Plug&Play で 策 定 された 仕 様 であり VISA インストール 先 ディレクトリをこのように 呼 ん でいた 為 その 言 い 方 が 今 も 残 っています VXIPNPPATH は 通 常 下 記 のディレクトリを 指 す 場 合 が 殆 どです KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 11/159

12 Table 2-1 OS 環 境 VXIPNPPATH 一 般 的 なディレクトリ 32 ビット(x86) OS C:/Program Files/IVI Foundation/VISA 又 は C:/VXIpnp ( 古 いバージョンの VISA からアップデートした 場 合 等 ) 64 ビット(X64) OS C:/Program Files/IVI Foundation/VISA (64 ビットネイティブモジュール) C:/Program Files (x86)/ivi Foundation/VISA (32 ビット WOW64 モジュール) このガイドブックでは <VXIPNPPATH>という 表 記 を 行 います これは 実 際 には 上 の 表 に 書 かれ ているディレクトリを 指 します 2-4 インターフェース 2-5 SCPI-RAW 2-6 VXI HiSLIP 2-8 LXI 2-9 USBTMC インターフェースという 言 葉 は ソフトウェアに 関 連 した 用 語 としては 様 々な 意 味 を 持 ちます VISA COM ライブラリに 関 しては 主 に 2 つの 意 味 があります 一 つは ハードウェア IO インターフェース で この 場 合 は GPIB RS-232C USB LAN などの 通 信 インターフェースを 指 します もう 一 つの 意 味 は COM インターフェース です これは Microsoft COM (Component Object Model)での 専 門 用 語 なのですが IUnknown インターフェースや IVisaSession インターフェースなど プログラミング 上 の 用 語 もしくはオブジェクト 指 向 設 計 の 専 門 用 語 として 登 場 します COM インターフェース 名 は 全 て 大 文 字 の"I"から 始 まります 元 々は TCP/IP 無 手 順 ソケットによるコマンド 送 受 信 インターフェースですが 最 近 は SCPI-RAW と 呼 ばれ また 使 用 する TCP ポートも 5025 が 推 奨 されています プロトコル 自 体 に 特 別 な 仕 掛 けは 無 く RS232 全 二 重 通 信 のような 動 作 をします また GPIB のマルチライン ユニライン メッセージ やサービス リクエストに 相 当 する 部 分 を 備 えていません 1995 年 に 策 定 された LAN 用 の 計 測 器 標 準 プロトコルの 一 つ SUN( 現 Oracle)の ONC RPC (Open Network Computing Remote Procedure Call) 技 術 を 利 用 します SCPI-RAW で 欠 落 してい る GPIB マルチライン ユニライン メッセージやサービス リクエスト 機 能 を LAN で 実 現 しています 計 測 器 側 に 実 装 される RPC Port Mapper によってポート 番 号 が 決 まるため 使 用 する TCP ポート 番 号 は 不 定 です (RPC Port Mapper サービス 自 体 は TCP/UDP ポート 111 で 動 作 します ) High-Speed LAN Instrument Protocol の 略 2010 年 に IVI Foundation によって 策 定 された LAN 用 計 測 器 プロトコルの 一 つ VXI-11 のような GPIB 的 動 作 と SCPI-RAW に 匹 敵 する 速 度 性 能 を 実 現 します 使 用 する TCP ポートとして 4880 が 推 奨 されています LAN extensions for Instrumentation の 略 LAN インターフェースを 装 備 した 計 測 器 の 業 界 標 準 仕 様 LXI は LAN の 特 定 通 信 プロトコルを 指 すのではなく LAN 搭 載 計 測 器 全 般 の 標 準 仕 様 について 規 定 しています USB Test & Measurement Class の 略 2003 年 に 策 定 された USB I/F(インプリメンターズ フォー ラム) 公 認 のデバイス クラスの 一 つ VXI-11 同 様 GPIB 機 能 を USB に 置 き 換 えたアーキテクチャ になっています 2-10 VXI-11 Discovery VXI-11 プロトコル(UDP 111)を 使 ったブロードキャスト 通 信 によって 計 測 器 を 検 索 する 手 法 LXI 準 拠 の 計 測 器 は(その LXI Spec バージョンに 拠 らず) 必 ずサポートしています KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 12/159

13 2-11 mdns 2-12 DNS-SD KI-VISA Library VISA COM ガイドブック マルチキャスト DNS DNS (Domain Name System)をマルチキャストに 拡 張 した 名 前 解 決 プロトコ ル 従 来 の DNS が UDP ポート 53 を 使 っていたのに 対 し mdns は UDP ポート 5353 を 使 用 します mdns を 更 に 拡 張 してサービス 検 索 を 行 なうプロトコル ここでいう サービス とは 該 当 するサー バーがどのような 機 能 を 提 供 しているのかを 示 します Apple の 独 自 プロトコル Rendezvouz(ランデ ブー)を 拡 張 した Bonjour(ボンジュール)が 正 に DNS-SD そのものです LXI Spec 1.3 以 降 準 拠 の 計 測 器 は この 仕 様 に 従 った LXI サービス の 照 会 に 必 ず 応 答 します またこれを 利 用 して 計 測 器 の 検 索 にも 利 用 されます 2-13 IO リソース IO リソースとは 計 測 器 を 接 続 している 具 体 的 な IO インターフェース 経 路 の 事 を 指 します 例 えば GPIB ボード(ボード インデックス 0)に 接 続 されているプライマリ アドレス 3 の 計 測 器 はその 接 続 経 路 が IO リソースとなり "GPIB0::3::INSTR"という VISA アドレスで 表 現 されます 2-14 VISA アドレス VISA アドレスとは 特 定 の 計 測 器 の IO インターフェース 即 ち IO リソースを 表 現 する 文 字 列 です かつては IO リソース デスクリプタ 或 いは VISA リソース 文 字 列 という 言 い 方 をしていた 事 もありま すが 全 て 同 義 語 です このガイドブックでは VISA アドレス と 表 記 します VISA API で 計 測 器 との 接 続 を 開 始 するには この VISA アドレスをパラメータにして 計 測 器 接 続 の VISA セッション をオープンする 必 要 があります VISA セッションをオープンするには VISA COM リソース マネージャの Open()メソッドを 使 うか VISA C の viopen() 関 数 を 使 います パラメータに 渡 す VISA アドレスの 表 現 方 法 は IO リソースのタイプ(GPIB, ASRL, USB, LAN 等 )や セッションのタイプ(INSTR INTFC 等 )によって 異 なります 下 記 に 示 されるのは 一 般 的 な 例 です KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 13/159

14 Table 2-2 VISA アドレスの 例 リソース 文 字 列 解 説 "GPIB0::3::INSTR" GPIB0 に 接 続 されたプライマリ アドレス 3 の 計 測 器 "GPIB1::4::12::INSTR" "GPIB0::INTFC" "ASRL1::INSTR" "USB::0x0B3E::0x1005::SB001839::INSTR" "TCPIP:: ::5025::SOCKET" "TCPIP:: ::inst0::INSTR" "TCPIP::my-test-instr.local::inst0::INSTR" "TCPIP:: ::hislip0::INSTR" 2-15 セッション タイプ GPIB1 に 接 続 されたプライマリ アドレス 4 セカンダリ アドレス 12 の 計 測 器 GPIB0 のコントーラ インターフェース シリアル ポート 1 に 接 続 された 計 測 器 USB ポートに 接 続 された ベンダーID 2878(hex 0B3E) プロダクト ID 4101(hex 1005) シリアル 番 号 SB の 計 測 器 IP アドレス を 持 ちポートアド レス 5025 でソケット 通 信 する LAN 計 測 器 (SCPI-RAW) IP アドレス を 持 つ LAN 計 測 器 (VXI-11) mdns ホスト 名 my-test-instr.local を 持 つ LAN 計 測 器 (VXI-11) IP アドレス を 持 つ LAN 計 測 器 (HiSLIP) セッション タイプは VISA では 通 常 INSTR と INTFC に 分 けられます INSTR は 計 測 器 (Instrument)のセッションを 指 し INTFC はコントローラ インターフェース(Interface)セッションを 指 します 但 し INTFC が 使 えるのは GPIB のみです 例 えば"GPIB0::3::INSTR"という VISA アドレスは GPIB0(GPIB のボードインデックス 0)のバ スに 接 続 されたプライマリ アドレス 3 の 計 測 器 を 指 し "GPIB0::INTFC"は コントローラ イン ターフェース (この 場 合 はボードインデックス 0 の GPIB ボード 自 身 )を 指 します 一 般 に INSTR セッ ションは 計 測 器 との IO を 容 易 に 行 なうことが 出 来 ますが あまり 細 かい 制 御 やトリッキーな 操 作 は 不 得 意 です 一 方 INTFC セッションは 特 殊 な 動 作 やトリックを 駆 使 した 低 レベル 操 作 を 行 なうこと ができますが 扱 いは 難 しくなります また GPIB では 通 信 バスが 計 測 器 間 で 共 有 に 成 っているため INTFC セッションでの 操 作 は 場 合 によっては 同 じボード 上 で 動 作 する INSTR セッションを 妨 害 する 可 能 性 もあります これらはアプリケーションや 計 測 器 ドライバでの 制 御 内 容 に 応 じて どちらか 一 方 或 いは 両 方 を 同 時 に 使 うことが 出 来 ますが 混 在 させる 場 合 には 注 意 して 運 用 する 必 要 がありま す VISA では INSTR 以 外 にも RAW(USB の 場 合 ) SOCKET(LAN の 場 合 )などがありますが これらも INSTR 同 様 に 計 測 器 (Instrument)セッションの 一 種 です 計 測 器 業 界 で 推 奨 される 標 準 プロトコルではないため(デバイ ス クラスに 準 拠 しないベンダー 固 有 USB TCPIP 無 手 順 ソケットなど) INSTR の 名 前 が 使 われていません 2-16 VISA セッション VISA セッションとは 特 定 の 計 測 器 を 制 御 する 通 信 ハンドルのようなものです 実 際 VISA ハンド ル 或 いは 計 測 器 ハンドル などという 言 い 方 もされますが これらは 同 義 語 です 本 書 では VISA セッション という 言 い 方 で 統 一 します VISA セッションが Open()メソッド 又 は viopen() 関 数 によってオープンされると アプリケーションか らは VISA セッションを 通 じて 計 測 器 との 通 信 を 行 う 事 ができます セッションをオープンせずに い きなり GPIB0 ボードのアドレス 3 の 計 測 器 に"VSET 20"という 文 字 列 を 送 信 する という 考 え 方 は VISA では 通 用 しません 必 ず VISA セッションが 必 要 です また VISA セッションは 必 要 がなくなっ た 時 点 でクローズしなくてはなりません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 14/159

15 VISA セッションと IO リソースはどちらも 計 測 器 を 接 続 している 特 定 の 経 路 もしくはそのハンドル という 点 で 非 常 に 似 ています また 区 別 もつきにくいのですが これらは 明 確 に 異 なります 例 えば アプリケーション 内 に 複 数 のスレッドがあり それぞれが 同 じ VISA アドレス GPIB0::3::INSTR で 示 される 1 台 の 計 測 器 に 接 続 するために 別 々に VISA セッションをオープンした 場 合 を 考 えてみ ましょう どちらの 場 合 も GPIB0::3::INSTR という VISA アドレスで VISA セッションをオープン します この 場 合 IO リソースは 1 個 だが 同 じ IO リソースに 接 続 する 2 個 の VISA セッションが 存 在 する という 事 になります 単 一 のリソースオブジェクト(= 単 一 の 計 測 器 )を 複 数 のハンドルから 操 作 する 事 は VISA では 特 に 珍 しい 事 ではありません アプリケーション 内 の 複 数 スレッドでなくても 全 く 別 々の 複 数 のアプリケーションが 偶 然 ( 或 いは 意 図 的 に) 同 じ IO リソースに 対 して VISA セッショ ンをそれぞれオープンする 事 もあります 更 にネットワーク 上 で 動 作 する LAN-GPIB 変 換 モジュール や LXI 計 測 器 のようなケースでは 同 じ IO リソースに 複 数 の PC からアクセスする 場 合 も 想 定 され ます これらはいずれの 場 合 も IO リソースは 同 じですが VISA セッションは 別 々のものです KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 15/159

16 3- Setup 概 要 説 明 と 用 語 説 明 はこのくらいにして 早 速 KI-VISA をセットアップしましょう 3-1 KI-VISA のセットアップ KIKUSUI WEB サイトからダウンロード 可 能 な KI-VISA SETUP は 2 種 類 あります それぞれ 対 象 OS が 異 なるので 適 切 なほうを 選 んで 下 さい (サーバーOS にもセットアップ 出 来 ます ) Table 3-1 KI-VISA SETUP プログラムの 種 類 対 象 Windows バージョン 8(x64) 7(x64) Vista(x64) 8(x86) 7(x86) Vista(x86) XP(x86, SP2 以 降 ) 2k(x86, SP4 with Update Rollup 1) SETUP Program (ファイル 名 は KI-VISA バージョンに 依 存 下 記 は VER5.0.9 の 例 ) Kivisa_5_0_9_265(x64).exe Kivisa_5_0_9_265(x86).exe SETUP は 必 ず 管 理 者 権 限 でログインした 状 態 で 作 業 して 下 さい Vista/7 では UAC(User Account Control)に よる 管 理 者 権 限 への 一 時 昇 格 を 問 われるので 必 ず 昇 格 を 受 理 して 下 さい KI-VISA SETUP は 必 要 に 応 じて.NET Framework 2.0 Visual C 再 頒 布 パッケージ VISA/IVI Shared Components Microsoft XML Engine 等 を 自 動 インストールします また 古 い KI-VISA のアンインスト ールも 行 います x64 版 SETUP ではインストールが 終 了 すると 引 き 続 き WOW64 版 SETUP が 起 動 します そのまま WOW64 版 の SETUP を 実 行 して 下 さい WOW64 版 の SETUP は x86 版 のそれと 良 く 似 たものですが x64 OS で 32 ビ ット アプリケーションを 実 行 する 為 の 条 件 に 特 化 させています SETUP の 起 動 管 理 者 権 限 で SETUP を 起 動 すると 下 のようなウェルカム 画 面 が 出 てきます Figure 3-1 Welcome 画 面 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 16/159

17 Next ボタンをクリックすると ライセンス 同 意 書 の 確 認 が 出 てきます ライセンス 同 意 書 は 必 ず 読 ん で 下 さい 更 に Next ボタンをクリックすると コンポーネント 選 択 の 画 面 になります 通 常 は 全 選 択 のままにして 下 さい Figure 3-2 コンポーネントの 選 択 更 に Next ボタンをクリックすると インストール 先 の 選 択 画 面 になります Figure 3-3 インストール 先 の 選 択 インストール 先 のディレクトリは デフォルトでは<VXIPNPPATH>(VISA 標 準 ルート ディレクトリ)に なっています 既 に VISA ライブラリをインストールした 事 がある 場 合 は インストール 先 がグレーの まま 変 更 不 可 になっている 場 合 があります 変 更 可 能 な 場 合 であっても 通 常 はデフォルトのままイ ンストールして 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 17/159

18 更 に Install ボタンをクリックするとセットアップが 開 始 します ファイルのコピーやレジストリへの 登 録 が 終 了 すると 完 了 画 面 が 表 示 されます Close ボタンをクリックするとセットアップを 終 了 します Figure 3-4 インストールの 完 了 x86 OS へのインストールの 場 合 はセットアップはこれで 終 了 です x64 OS へのインストールの 場 合 引 き 続 き WOW64 版 KI-VISA のセットアップが 自 動 的 に 起 動 します WOW64 版 KI-VISA は 32 ビ ットプログラムで 必 要 になるので 必 ずインストールしてください Figure 3-5 WOW64 版 KI-VISA のセットアップ(x64 OS のみ) 作 成 されるショートカット インストールが 完 了 すると Start ボタン All Programs Kikusui IO Software にフォルダの 傘 下 にショートカットが 作 成 されます そこには x64 版 (x64 OS の 場 合 ) 又 は x86 版 (x86 OS の 場 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 18/159

19 合 )のフォルダと 各 プログラム(ユーティリティ 等 )へのショートカットが 作 られます KI-VISA Instrument Explorer のと KI-VISA SPY のショートカットはデスクトップにも 作 られます KI-VISA Instrument Explorer IVI Configuration Utility Release Note (E/J) Help (VISA COM リファレンス マニュアル) KI-VISA SPY KI-VISA Help KI-VISA Instrument Explorer は 通 信 インターフェースの 環 境 設 定 を 行 ったり 計 測 器 との 簡 単 な IO 接 続 テストをを 行 うための 対 話 式 ツールが 含 まれます KI-VISA SPY は KI-VISA を 経 由 して 行 われる IO トラフィックの 内 容 を 傍 受 するデバッグ 支 援 ツールです IVI Configuration Utility は IVI 計 測 器 ドライバーの 仮 想 計 測 器 (Logical Name)や 計 測 器 セッションなどを 設 定 する ツールです KI-VISA Instrument Explorer と KI-VISA SPY については このガイドブックで 説 明 します x64 OS にインストールした 場 合 WOW64 版 (32 ビット 版 )のユーティリティへのショートカットは 作 られません 通 常 32 ビット 版 のユーティリティを 使 用 する 必 要 はありませんが どうしても 起 動 したい 場 合 は C:/Program Files (x86)/ivi Foundation/VISA/VisaCom/KI-VISA ディレクトリから 直 接 起 動 して 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 19/159

20 4- KI-VISA Insrument Explorer (IO Config) KI-VISA の SETUP が 終 了 したら まず Instrument Explorer を 起 動 して IO コンフィグレーションをし て 下 さい Instrument Explorer の 起 動 ショートカットアイコンはデスクトップにあります Figure 4-1 KI-VISA Instrument Explorer 4-1 IO コンフィグレーション まず 最 初 に 画 面 に 大 きく 表 示 されている KI-VISA IO Config...ボタン( 又 は Tools Kikussui IO Config メニュー)から KI-VISA IO Config ダイアログを 表 示 します では 各 IO インターフェ ースの 機 能 と 設 定 方 法 を 説 明 します Serial RS-232 又 は RS-485 などのシリアル ポートの 設 定 です 仮 想 COM ポートもこれに 該 当 します (USB-シリアル 変 換 ケーブル USB を 装 備 していながら 仮 想 COM ポートを 提 供 する 計 測 器 等 ) Figure 4-2 IO Config (Serial) KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 20/159

21 Use Serial (RS232 or 485) instruments のをチェックした 場 合 KI-VISA はシリアル 接 続 の 計 測 器 IO を 有 効 にします Enable dynamic search for available serial ports のチェックボックスは 常 にチェックされて いるので 利 用 可 能 な IO リソースの 検 索 は 自 動 的 に 行 われます Enable simultaneous access from multiple processes は 機 能 削 除 されたため 選 択 できま せん( 下 記 参 照 ) 複 数 プロセスから 同 一 COM ポートの VISA セッションを 多 重 オープンする 機 能 は 以 前 はサポートされていまし たが KI-VISA VER5.0.4 以 降 正 常 に 動 作 しなくなり VER5.0.6 から 正 式 に 機 能 削 除 されました これは 受 信 バ ッファの 処 理 メカニズムが 大 きく 設 計 変 更 されたため 複 数 プロセスからの 多 重 アクセスに 対 する 受 信 データの 振 り 分 けが 困 難 になったためです 同 一 プロセスから 同 一 COM ポートへの VISA セッションを 多 重 オープンする 機 能 は 現 在 もサポートされていま す 但 し 仮 想 COM ポートを 使 用 した 場 合 はデバイスに 依 っては 動 作 が 不 安 定 になる 場 合 があります USB(USBTMC) USBTMC プロトコルに 準 拠 した 計 測 器 を 接 続 するための 設 定 です Figure 4-3 IO Configuration (USB) Use USB (USBTMC-USB488 compliant) instruments のをチェックした 場 合 KI-VISA は USB 計 測 器 の IO 機 能 を 有 効 にします Enable dynamic search for active USBTMC instrument のチェックボックスは 常 にチェック されているので 利 用 可 能 な IO リソースの 検 索 は 自 動 的 に 行 われます GPIB (CONTEC) GPIB(NI-488.2) CONTEC 製 又 は NI-488.2M 互 換 の GPIB を 使 用 するための 設 定 です CONTEC サポート 機 能 では CONTEC 製 の GPIB ボードのみ 使 用 できます NI-488.2M サポートで は National Instruments NI-488.2M 互 換 の GPIB ボードをメーカー 問 わず 使 用 できます 但 し 互 換 を 謳 う 全 ての GPIB 製 品 を 動 作 検 証 しているわけではありません 現 時 点 動 作 確 認 できている 主 なメーカーは National Instruments Agilent Technologies INTERFACE です CONTEC と NI-488.2M では 設 定 用 のページが 別 々に 用 意 されていますが ここではまとめて 説 明 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 21/159

22 Figure 4-4 IO Config (GPIB CONTEC) Figure 4-5 IO Config (GPIB NI-488.2) Use GPIB instruments のをチェックした 場 合 KI-VISA は 該 当 するタイプの GPIB 機 能 を 有 効 に します Enable dynamic search for active controllers and listeners のをチェックした 場 合 は 利 用 可 能 な IO リソースの 検 索 は 動 的 に 行 われます そうでない 場 合 は このコンフィグレーション プ ログラムで 事 前 に 行 っておく 必 要 があります 通 常 はこのダイナミック 検 索 機 能 を 選 択 しておけば 良 いでしょう GPIB Board の 区 画 では GPIB ボードインデックス 毎 に 使 用 するかどうかを 設 定 します 例 えば GPIB0 を 使 用 する 場 合 まず Index から GPIB0 を 選 択 肢 して Use this GPIB board をチェック します すると Model のコンボボックスが 有 効 になるので 実 際 に 使 用 する GPIB ボードの 機 種 名 を 選 択 します ダイナミック 検 索 がチェックされていない 場 合 Device Address の Primary/Secondary に 入 力 した 計 測 器 のアドレスを Add ボタンで 1 個 ずつ 追 加 してやる 必 要 があります(セカンダリ アドレスを 使 用 しない 場 合 は Secondary を 空 白 にして 下 さい ) 或 いは ここで Seach ボタンで 一 時 的 な 検 索 を 行 う 方 法 もあります KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 22/159

23 Enable board-level locking(ni のみ)は VISA のリソースロッキング 機 能 を 使 う 際 NI M GPIB ドライバー 又 はボードハードウェア 自 身 が 提 供 する 排 他 制 御 メカニズムを 利 用 するか どうかのオプションです これは 通 常 のローカルバス(PCI バス PCIe バス USB バスなど) 接 続 型 の GPIB ボードではチェックする 必 要 ありませんが GPIB-ENET/100 のようなネットワーク 対 応 の GPIB ボード(アダプタ)では 意 味 を 持 ちます ボードレベルのロック 機 構 が 有 効 になっている 場 合 あ るマシンから VISA でロックを 掛 けた 場 合 他 のマシンから 同 じネットワーク 型 GPIB ボードへのアク セスは 制 限 されます CONTEC と NI-488.2M の 両 方 を 有 効 にして 例 えば CONTEC 製 GPIB ボードと NI 製 GPIB ボードの 両 方 を 同 時 に 使 用 する 事 は 可 能 です 但 し この 場 合 同 じボードインデックス(GPIB0 等 )を 両 方 で 同 時 に 使 用 しないで 下 さい Model コンボボックスでは GPIB ボードの 機 種 選 択 あるいは 手 入 力 を 必 ず 行 って 下 さい ここが 空 白 のまま 放 置 された 場 合 KI-VISA が 正 常 に 機 能 しない 場 合 があります 使 用 しないボード インデックスに 関 しては 空 白 のままで 問 題 ありません CONTEC 固 有 の 注 意 CONTEC の 場 合 には Model コンボボックスで 設 定 するコンテック 社 製 GPIB ボードの 機 種 名 を 正 確 に 選 んで 下 さい KI-VISA は 設 定 された GPIB ボードの 機 種 名 によってボード 機 種 に 合 わせた 微 細 な 分 岐 処 理 を 行 っ ている 個 所 があります 実 際 には F シリーズと 呼 ばれる 機 種 ( 型 名 の 後 ろに F が 付 くモデル 但 し GP-IB(PC)F は 除 外 )と F が 付 かない 古 い 機 種 とではデバイス ドライバが 異 なる 為 KI-VISA でも 動 作 を 調 整 しています コンテック 社 製 GPIB ボードでは F が 付 かない 古 い 機 種 を x64 OS で 使 う 事 はできません (デバイス ドライバ が 対 応 していないため ) コンテック 社 製 GPIB ボードを 使 用 するにはコンテック API-TOOL (API-GPIB VER4.80 以 上 )を 推 奨 します 可 能 な 限 り 最 新 版 の GPIB ドライバをインストールして 下 さい インストールの 順 序 は KI-VISA より 前 でもあとでも 構 いません また API-GPIB の 開 発 環 境 は 必 要 なく 実 行 環 境 のみで 十 分 です コンテック 社 製 GPIB には LabVIEW 対 応 版 API-GPLV というドライバも 存 在 します これは 事 実 上 NI-488.2M 互 換 API(GPIB-32.DLL)を 提 供 するものです 理 論 的 には 次 に 説 明 する GPIB(NI-488.2) 機 能 を 通 じて 動 作 さ せる 事 は 可 能 かも 知 れませんが 現 在 KI-VISA では 動 作 保 証 していません NI-488.2M 固 有 の 注 意 NI-488.2M の 場 合 には Model で 設 定 する GPIB ボードの 機 種 名 は 動 作 上 特 別 な 意 味 はありません 機 種 名 に 関 わらず 同 じ 動 作 となります KI-VISA は NI 互 換 API の DLL として GPIB-32.DLL を 第 一 候 補 それが 見 つからない 場 合 NI DLL を 使 用 します x86 プログラム(32 ビット OS 又 は WOW64 環 境 )ではほぼすべての 場 合 で GPIB- 32.DLL ですが x64 プログラムの 場 合 GPIB ボードベンダーによって DLL が 二 通 りあります しかし KI-VISA ではどちらもサポートしています NI-488.2M 互 換 API を 提 供 する GPIB ボードは 沢 山 ありますが 全 てを 動 作 保 証 しているわけではありませ ん 互 換 品 質 の 悪 い DLL を 提 供 する 製 品 では 正 常 動 作 しない あるいはシステムがクラッシュする 可 能 性 が あります インターフェース 社 製 GPIB ボードを 使 用 する 場 合 は LabVIEW 対 応 版 GPC-4301N を 必 ず 使 用 して 下 さい イ ンターフェース 社 からは LabVIEW 対 応 版 でない 通 常 版 のドライバ(GPC-4301)も 提 供 されています しかし KI- VISA が 要 求 する 複 数 プロセスからの 同 一 GPIB ボードの 同 時 運 転 が 正 常 に 機 能 しない 事 が 確 認 されている ため KI-VISA では GPC-4301 を 利 用 した IO 機 能 はサポートしていません Agilent 製 の GPIB ボードを 使 用 する 場 合 Agilent IO Libraries Suite 15.5 以 降 を 使 用 して 下 さい また Primary VISA の 選 択 を 外 す 事 Agilent 488 オプションを 有 効 にすることを 忘 れないで 下 さい ナショナル インスツルメンツ 社 製 GPIB ボードを 使 用 する 場 合 使 用 する GPIB ボード 対 応 した NI-488.2M ソフ トウェア(ドライバ)が 必 要 になりますが それをインストールする 際 NI-VISA のインストールを 必 ず 除 外 して 下 さ い NI-VISA と KI-VISA の 共 存 は 出 来 ません 一 般 に NI-488.2M 互 換 API (GPIB-32.DLL)は 異 なるベンダー 同 士 の 物 を 混 在 させて 使 用 することはできま せん これは 異 なるバージョンの GPIB-32.DLL を 同 時 にインストールする 事 ができない 為 です KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 23/159

24 Enable board-level locking を 有 効 にした 場 合 VISA の LockRsrc()/viLock() 関 数 は NI-488.2M API の iblck(1) 関 数 を 呼 び 出 してロックの 獲 得 ( 又 は 回 数 のインクリメント)を 行 います 同 様 に UnlockRsrc()/viUnlock() 関 数 は iblck(0)を 呼 び 出 してロックのデクリメント(0 に 成 れば 開 放 )を 行 います 前 記 のボードレベルロッキング 機 能 を 利 用 できるのは NI-488.2M 互 換 の GPIB ボードで セッションタイプが GPIBx::INTFC の 場 合 だけです INSTR セッションには 関 与 しません また 一 部 の NI-488.2M 互 換 API では iblck() 関 数 自 体 が 実 装 されていないケースがあります その 場 合 には 設 定 に 関 わらず iblck()は 呼 び 出 され ません(KI-VISA はドライバに iblck() 関 数 エントリが 存 在 する 場 合 のみ 呼 び 出 します ) 尚 必 要 が 無 い 場 合 には この 機 能 を 出 来 るだけ 無 効 にして 下 さい 順 不 同 で Lock/Unlock を 繰 り 返 した 場 合 に Lock/Unlock 管 理 の 複 雑 度 が 上 がってしまうため デッドロックしてしまう 危 険 性 があります LAN LAN に 接 続 された 計 測 器 の 設 定 を 行 います ここで 扱 う LAN インターフェースは SCPI-RAW (TCP/IP ソケット) VXI-11 HiSLIP に 対 応 した 計 測 器 です LXI 規 格 に 準 拠 した 計 測 器 であれば こ れらのうち 最 低 限 1 つ 以 上 は 機 能 が 備 わっています (LXI 計 測 器 では 計 測 器 自 身 の 埋 め 込 み WEB ページを 見 ることで 機 能 確 認 が 出 来 ます ) Figure 4-6 IO Config (LAN) Use LAN instruments のをチェックした 場 合 KI-VISA は LAN 接 続 された 計 測 器 との 通 信 を 有 効 にします Enable dynamic search for active instruments をチェックした 場 合 は 利 用 可 能 な IO リソ ースの 検 索 は 動 的 に 行 われます そうでない 場 合 は このコンフィグレーション プログラムで 事 前 に 行 っておく 必 要 があります LAN の 場 合 は 検 索 に 時 間 がかかる 場 合 があるので 通 常 は 動 的 検 索 はオフにしておいた 方 が 良 いでしょう Search Method( 検 索 方 法 )として VXI-11 Discovery 及 び DNS-SD (Bonjour)を 選 択 する 事 ができます 前 者 は VXI-11 Discovery 機 能 を 利 用 した 検 索 で 後 者 は mdns(マルチキャスト DNS) を 利 用 した 検 索 です 少 なくともどちらかは 選 択 しておく 必 要 があります Search Instruments ボタンをクリックすると 現 在 選 択 されている 検 索 方 法 を 利 用 して KI-VISA が 稼 働 している PC と 同 じサブネット 内 に 存 在 する LAN 計 測 器 を 検 索 します Search Timeout は 検 索 の 際 の 待 ち 時 間 です 両 方 の 検 索 方 法 が 選 択 されている 場 合 は それぞれに 待 ち 時 間 がかか ります Manual Add の 区 画 では 検 索 とは 別 に 手 動 で 計 測 器 を 追 加 する 事 ができます IP アドレスの 他 には Protocol の 選 択 (SOCKET/VXI-11/HiSLIP から 選 択 ) Devicename の 指 定 (VXI KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 24/159

25 11/HiSLIP のみ) Port 指 定 (SOCKET 及 び HiSLIP のみ)が 必 要 です これらを 入 力 したら Add Instrument Manually ボタンをクリックする 事 で 追 加 できます 検 索 が 利 かない LAN 計 測 器 やルー タを 越 えてアクセスする 場 合 などは この 方 法 で VISA アドレスを 追 加 してください DNS-SD (Bonjour)による 検 索 にヒットするには 計 測 器 が mdns/dns-sd に 対 応 している 必 要 があります こ のプロトコルは LXI 仕 様 Ver1.3 以 降 に 準 拠 する 計 測 器 には 必 ず 実 装 されています KI-VISA の DNS-SD 機 能 は 使 用 する PC に Apple Bonjour がインストールされている 場 合 のみ 動 作 します Bonjour がインストールされていない 場 合 にこれを 選 択 すると Apple Bonjour のランタイム エンジン( 実 際 に は Bonjour Printer Wizard)をダウンロード 可 能 な URL に 誘 導 されます 必 要 に 応 じてインストールすることで す VXI-11 Discovery 及 び DNS-SD はそれぞれ UDP のブロードキャスト(ポート 111) 又 はマルチキャスト(ポート 5353)で 通 信 が 行 われる 為 KI-VISA を 実 行 する PC と 検 索 対 象 の 計 測 器 が 同 じサブネット 内 のアドレスを 持 つ 必 要 があります 異 なるサブネットを 跨 いでの 検 索 及 びルーターを 越 えての 検 索 はできません サブネットが 違 っても VISA による 計 測 器 の 通 信 が 出 来 ないわけではありません 但 しその 場 合 は 検 索 にはヒ ットしないので 手 作 業 による IP アドレスの 追 加 が 必 要 です 特 定 IP アドレスやアドレス 範 囲 がファイアーウォール 等 でブロックされている 場 合 は 計 測 器 との 通 信 ができな い 場 合 があります PC 側 のポート 111 をファイアーウォールでブロックすると VXI-11 機 能 は 使 えなくなります PC 側 のポート 5353 をファイアーウォールでブロックすると mdns/dns-sd 機 能 は 使 えなくなります コンフィグレーションの 保 存 コンフィグレーションを 終 えたら Apply 又 は OK ボタンをクリックして 変 更 を 適 用 して 下 さい その 際 全 ての 設 定 がシステム レジストリに 保 存 されます レジストリの 場 所 は HKEY_CURRENT_USER の 下 の SOFTWARE\Kikusui\KiVisaCom\CurrentVersion 以 下 のブランチです 同 じコンピュータを 複 数 ユーザで 別 々にログオンしている 場 合 は レジストリ 設 定 は ユーザ 毎 に 別 々に 管 理 されます 4-2 KI-VISA Insrument Explorer ( 対 話 式 制 御 ) IO コンフィグレーションが 完 了 している 状 態 では Instrument Explorer 画 面 には 設 定 又 は 認 識 さ れた 全 ての VISA アドレスが 左 側 のツリーに 表 示 されています ( 何 らかの 理 由 でツリーが 最 新 表 示 になっていない 場 合 は F5 キーを 押 して 下 さい ) 通 常 OS によって 認 識 される 有 効 なシリアルポート( 計 測 器 が 接 続 されているかどうかとは 無 関 係 )と 現 在 接 続 されている USBTMC デバイスに 関 しては VISA アドレスが 常 に 表 示 されます どれかひとつの VISA アドレスをクリックすると 右 側 の 画 面 に 詳 細 設 定 が 表 示 されます この 内 容 は 全 ての IO インターフェースで 共 通 の 項 目 と インターフェースによって 異 なるものがあります KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 25/159

26 Figure 4-7 Instrument Explorer 全 体 画 面 Check Instrument ID Check Instrument ID ボタンは 簡 易 的 な 機 種 ID(*IDN?クエリ 相 当 )チェックを 行 います LAN の 場 合 は*IDN?クエリによる 照 会 (By *IDN?)のほかに By LXI identification.xml も 選 択 可 能 です この 方 法 は LXI spec 1.2 以 降 で 必 須 要 件 となっている identification.xml を HTTP(WEB)イン ターフェースで 照 会 して 機 種 ID を 取 得 します By LXI/identification.xml での 動 作 は LXI spec 1.1 以 前 及 び LXI 準 拠 を 謳 っていない 古 い LAN 計 測 器 では 応 答 しません VISA Alias 現 在 選 択 されている VISA アドレスに 対 してエイリアス( 別 名 )を 追 加 します この 機 能 を 使 うと 長 い VISA アドレスの 代 わりにエイリアスを 使 って VISA セッションをオープンすることが 出 来 ます また 異 なる VISA アドレスに 対 してエイリアスを 割 り 当 てしなおせば 計 測 器 本 体 を 入 れ 替 えた 際 に 計 測 アプリケーション 側 での VISA アドレス 設 定 を 変 更 せずにシステムを 運 用 できます この 点 は VISA アドレスに 計 測 器 のシリアル 番 号 を 含 んでいる USB のようなケースでは 特 に 有 効 です エイリアスに 使 用 できる 文 字 は 英 数 字 (0..9, A..Z, a..z)とアンダースコア(_)のみです ブランク 文 字 列 を 指 定 するとエイリアスを 削 除 する 事 を 意 味 します エイリアスはケース インセンシティブ( 大 文 字 小 文 字 の 区 別 なし)なので 例 えば "com1"と"com1"は 同 じものとみなされます KI-VISA のデフォ ルトでは エイリアスは 何 も 設 定 されていません 同 じ VISA アドレスに 対 して 複 数 のエイリアスを 指 定 することはできません また 1 つのエイリアスの 参 照 先 を 複 数 の VISA アドレスにすることもできません 既 に 割 り 当 て 済 みのエイリアスを 別 の VISA アドレスに 割 り 当 て た 場 合 後 から 割 り 当 てた 物 が 有 効 になります エイリアスを 設 定 したら 忘 れずに Apply Alias ボタンをクリックして 下 さい 適 用 せずに 他 のページへ 移 動 したり KI-VISA Instrument Explorer を 終 了 すると 設 定 が 適 用 されません VISA エイリアスの 管 理 方 法 は VISA 仕 様 書 によって 標 準 化 されているわけではなく VISA ライブラリの 実 装 に よって 様 々です KI-VISA の 場 合 は レジストリ 内 の HKEY_CURRENT_USER\Software\Kikusui\KI- VISA\CurrentVersion\Aliases に 保 存 されています レジストリ エディタで 直 接 編 集 することも 可 能 です KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 26/159

27 Optional Settings For RS232 Serial Interface Figure 4-8 RS232 オプション この 機 能 はシリアル インターフェース(ASRL) 専 用 です VISA セッションをオープンする 際 LOAD_CONFIG オプションを 指 定 すると VISA 仕 様 によるデフォルト 設 定 (9600/N/8/1/FLOW 無 し) ではなく ここで 指 定 した 条 件 が 即 座 に 適 用 されます 後 述 する Open VISA Session で VISA セ ッションをオープンする 場 合 もこのオプションを 指 定 してします Optional Settings for LAN Interface Figure 4-9 LAN オプション この 機 能 は LAN インターフェース 専 用 です Use HiSLIP Overlapped Mode をチェックすると HiSLIP でのオーバーラップド モードの 動 作 になります オーバーラップド モードは HiSLIP が 備 える Query INTERRUPTED の 検 出 機 構 を 停 止 し クエリと 応 答 回 収 の 同 期 維 持 管 理 をやて SOCKET の ような 動 作 になります Enable KeepAlive をチェックすると キープアライブ パケットの 送 信 を 行 い 長 時 間 通 信 トラフィックが 無 い 場 合 の 自 動 切 断 をしないようになります( 通 常 キープアライブは 2 時 間 ) Enable NoDelay は 通 常 はチェックされていますが これをアンチェックすると Nagle(ネイ グル)アルゴリズムによる 遅 延 Ack をサポートするようになります Open WELCOME page は IP アドレスの 手 前 に を 付 けた URL を 指 定 してブラウザを 起 動 します 通 常 は 計 測 器 自 身 の WEB サーバーに 用 意 されたデフォルトの WELCOME ページが 表 示 されます LXI 準 拠 の 計 測 器 では WELCOME ページの 提 供 が 必 須 要 件 なので 必 ず 何 かしらの ページが 表 示 されます コンテンツや 外 見 は 計 測 器 ごとに 異 なります Open LXI identification XML は LXI 1.2 以 降 で 必 須 となっている LXI Identification.XML ファイルを 照 会 します Open VISA Session 選 択 された VISA アドレスで VISA セッションをオープンします オープンに 成 功 すると 対 話 形 式 の 制 御 画 面 が 表 示 されます 画 面 左 のツリーから VISA アドレスをダブル クリックしても 同 じ 動 作 にな ります VISA Session を 開 いて 対 話 形 式 で 計 測 器 と 通 信 する 方 法 は 後 述 します ここでの Open 操 作 は 上 で 説 明 したオプション 設 定 が 適 用 されるように LOAD_CONFIG オプション 付 きで 呼 び 出 され ます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 27/159

28 Figure 4-10 対 話 式 制 御 (ASRL1::INSTR の 例 ) Interface メニューからは オープンした VISA セッションに 該 当 する VISA COM インターフェース (IMessage, ISerial 等 )が 選 択 できます 画 面 上 に 複 数 表 示 されている 全 てのタブは 現 在 選 択 されている COM インターフェースで 利 用 可 能 なメソッドと 同 じになっています 例 えば IMessage という COM インターフェースが 選 択 されてい る 時 には WriteString や ReadString メソッドが 利 用 できます 但 し[Attributes]だけはメソッドでなく 該 当 COM インターフェースで 参 照 できるプロパティの 一 覧 です Figure 4-11 対 話 式 制 御 ([Attribute]ページ) [Attribute]を 選 択 した 場 合 に Property コンボボックスに 複 数 表 示 される 項 目 は 全 て 該 当 インタ ーフェースで 設 定 又 は 読 み 取 りの 出 来 るプロパティです Associated Attribute は KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 28/159

29 SetAttribute() 又 は GetAttribute()メソッドを 使 ってプロパティにアクセスする 際 のシンボル 名 で す (SetAttribute/GetAttribute は 有 効 なメソッドですが タブには 表 示 されません ) Type/ Direction/ Scope はプロパティの 型 方 向 アクセス スコープを 示 しています 型 は LONG や SHORT など 型 を COM 仕 様 での 標 準 的 表 現 (Visual Basic 6 と 同 じ)で 記 載 しています 方 向 は r( 読 み 込 み) w( 書 き 込 み)またはその 両 方 です アクセス スコープは Local 又 は Global です Local は 該 当 IO リソースに 対 して VISA セッション 毎 に 独 立 して 管 理 される 属 性 値 です Global は 該 当 IO リソースに 対 する 複 数 VISA セッション 間 で 共 通 管 理 される 属 性 値 です ある VISA セッショ ンから Global 属 性 値 を 変 更 した 場 合 同 じ IO リソースに 接 続 する 別 の VISA セッションにも 変 更 が 波 及 しますが ローカル 属 性 ではそのような 事 はありません これより 先 は 実 際 に KI-VISA を 使 用 して 計 測 器 IO プログラミングを 行 う 手 順 を 説 明 します 説 明 で 使 用 するコード サンプルは C# 言 語 (Visual Studio 2008)を 前 提 としたものですが 他 の 言 語 でも 基 本 的 な 手 順 は 同 じです 尚 プログラミング 言 語 やツールに 依 存 した 内 容 (タイプ ライブラリのイ ンポート 方 法 や エラー 処 理 ロジックなど)は 更 に 後 のほうで 言 語 別 に 説 明 します またサービス リクエスト 通 知 ハンドラの 処 理 方 法 は 言 語 ごとに 大 きく 異 なるので これについても 言 語 別 パートで 説 明 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 29/159

30 5- タイプ ライブラリのインポート ここでは VISA COM ライブラリによって 提 供 されるタイプ ライブラリをインポートする 方 法 について 言 語 別 に 手 順 を 説 明 します タイプ ライブラリ(TypeLib, TLB 等 と 略 される)とは COM サーバが 提 供 するインターフェース 定 義 ( 型 情 報 メソッドとプロパティの 文 法 シンボル 定 数 など)を 格 納 したライブラリ モジュールです COM サーバを 作 成 する 際 全 てのインターフェース 定 義 は IDL(Interface Definition Language)と いう 言 語 で 記 述 されますが TLB はこれを MIDL コンパイラで 変 換 したものです 従 って ライブラリ といってもインターフェース 定 義 が 含 まれるだけなので プログラムとしての 実 行 コードはありません タイプ ライブラリは 通 常.tlb ファイルとして 単 独 に 用 意 されるか 又 はそのイメージをリソースとし て.dll や.exe に 埋 め 込 んだ 形 で 提 供 されます.NET Framework を 必 要 とするマネージド 言 語 (Visual Basic C# C++/CLI 等 )の 場 合 は VISA COM モジュールに 関 するタイプ ライブラリは プライマリ インタロップ アセンブリ(Primary Interop Assembly 略 して PIA)として 提 供 されます インタロップ アセンブリは 本 来 ネイティブコードで 実 装 されている COM コンポーネントのタイプ ライブラリを.NET 環 境 から 使 うためのラッパーです その 中 でも プライマリ に 格 付 けされているものは グローバル アセンブリ キャッシュ(Global Assembly Cache, 略 して GAC)に あたかも OS の 一 部 のように 登 録 されています.NET 言 語 で VISA COM を 利 用 する 場 合 は VISA COM タイプ ライブラリを 直 接 参 照 するのではな く VISA COM の PIA を 参 照 する 事 になります GAC に 登 録 されているアセンブリは Windows Explorer で C:/Windows/Assembly ディレクトリを 参 照 すること で 確 認 できます 但 し Assembly ディレクトリに 表 示 されるファイルのレイアウトは Explorer のシェル 拡 張 によ って 実 際 の HDD 内 の 物 理 レイアウトとは 違 った 物 にすり 替 えられています 5-1 Visual Studio 2008 (マネージド 言 語 )での 参 照 設 定 と 名 前 空 間 の 指 定 Visual Studio 2008 を 起 動 し Visual Basic C# C++/CLI の 何 れかの 言 語 でプロジェクトを 作 成 し て 下 さい プロジェクトのタイプはフォーム アプリかコンソール アプリが 良 いでしょう 参 照 設 定 それぞれの 言 語 でプロジェクトの 統 合 環 境 が 起 動 したら メニューバーからプロジェクト 参 照 の 追 加 を 選 択 し 下 の 図 のような 参 照 の 追 加 ダイアログを 表 示 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 30/159

31 Figure 5-1 参 照 設 定 ダイアログ(Visual Studio.NET) そこで COM タブに 表 示 されるリストから VISA COM 3.0 Type Library を 選 択 して 下 さい 見 つ からない 場 合 は 参 照 タブから Ivi.Visa.Interop.dll を 直 接 指 定 して 下 さい このファイルは 通 常 <VXIPNPPATH>/VisaCom/Primary Interop Assemblies デイレクトリに 置 かれています この 設 定 は 一 度 行 ったらそのプロジェクト 内 では 再 度 行 う 必 要 はありません しかし 別 のプロジェ クトでは 別 途 同 じ 操 作 をする 必 要 があります 名 前 空 間 の 指 定 VISA COM ライブラリの 名 前 空 間 は Ivi.Visa.Interop です Imports 又 は using 文 を 使 ってそれ を 指 定 します // // C# // using Ivi.Visa.Interop; ' ' Visual Basic.NET ' Imports Ivi.Visa.Interop // //C++/CLI // using namespace Ivi::Visa::Interop;.NET 言 語 では ターゲット プラットフォームを 指 定 する 事 により x86 と x64 のどちらのプログラムも 作 成 でき ます ターゲットを 明 示 していせずに Any とした 場 合 は アプリケーションの 実 行 時 に OS 環 境 に 合 わせて 適 宜 ビットネスが 設 定 されます 5-2 Visual Basic 6.0 での 参 照 設 定 VB6 を 起 動 し 標 準 EXE のプロジェクトを 作 成 して 下 さい 次 にメニューバーからプロジェクト 参 照 設 定 を 選 択 し 下 の 図 のような 参 照 設 定 ダイアログを 表 示 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 31/159

32 Figure 5-2 参 照 設 定 ダイアログ(VB6) そこで VISA COM 3.0 Type Library を 選 択 してチェックして 下 さい あとは OK ボタンをクリックする だけです リスト 中 に 見 つからない 場 合 は 参 照...ボタンをクリックし GlobMgr.DLL を 探 して 下 さい このファイルは 通 常 <VXIPNPPATH>/VisaCom ディレクトリに 置 かれています この 設 定 は 一 度 行 ったらそのプロジェクト 内 では 再 度 行 う 必 要 はありません しかし 別 のプロジェク トでは 別 途 同 じ 操 作 をする 必 要 があります 参 照 設 定 はプロジェクトごとに 管 理 されています VB6 では 32 ビットのプログラムのみを 作 成 できますが x64 環 境 の WOW64 上 でも 動 作 します 5-3 Excel 2007 VBA での 参 照 設 定 Excel VBA の 場 合 は まず Visual Basic Editor の 環 境 を 用 意 しなければなりません まずリボンメニューに[ 開 発 ]タブが 表 示 されているかどうか 確 認 して 下 さい 無 い 場 合 には 次 の 手 順 で 表 示 します ( 既 に 表 示 されている 場 合 は 読 み 飛 ばして 下 さい ) Microsoft Office ボタン( 左 上 の )をクリックし [Excel のオプション]をクリックします [ 基 本 設 定 ] カテゴリの [Excel の 使 用 に 関 する 基 本 オプション] で [[ 開 発 ] タブをリボンに 表 示 する] チェックボックスをオンにし [OK]をクリックします [ 開 発 ]タブが 表 示 されたら 次 にセキュリティレベルを 一 時 的 に 低 く 変 更 します [ 開 発 ] タブの [コード] で [マクロ セキュリティ] をクリックします [マクロの 設 定 ] カテゴリの [マクロの 設 定 ] で [すべてのマクロを 有 効 にする ( 推 奨 しません 危 険 なコードが 実 行 される 可 能 性 があります)] をクリックし [OK] をクリックします これで Excel VBA が 使 用 できるようになりました [ 開 発 ] タブの [コード] で [Visual Basic] をク リックして Visual Basic の 環 境 を 起 動 して 下 さい VB6 の 場 合 と 異 なり Excel VBA ではデフォルトで フォームが 1 つもありません しかし VISA COM は ActiveX コントロールではないので フォームを 使 う 事 は 必 須 条 件 ではありません もし Excel VBA 環 境 でフォームを 使 用 したい 場 合 は Visual Basic Editor 環 境 のメニューから 挿 入 ユーザーフォームを 選 択 し フォームを 追 加 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 32/159

33 参 照 設 定 を 行 うには メニューバーからツール 参 照 設 定 を 選 択 し 下 の 図 のような 参 照 設 定 ダ イアログを 表 示 します そこで VISA COM 3.0 Type Library を 選 択 してチェックして 下 さい あとは OK ボタンをクリックするだけです リスト 中 に 見 つからない 場 合 は 参 照...ボタンをクリックし GlobMgr.DLL を 探 して 下 さい このファイルは 通 常 <VXIPNPPATH>/VisaCom ディレクトリに 置 かれ ています Figure 5-3 参 照 設 定 ダイアログ(Excel 2007 VBA) この 設 定 は 一 度 行 ったらその VBA プロジェクト(Excel ワークブック) 内 では 再 度 行 う 必 要 はありま せん しかし 別 の Excel ワークブックでは 別 途 同 じ 操 作 をする 必 要 があります 参 照 設 定 はワーク ブックごとに 管 理 されています Excel 2007 に 搭 載 されている VBA は Visual Basic 6.5 と 刻 印 されています VB6 と 同 様 Excel は 32 ビットの プログラムですが WOW64 上 でも 動 作 します 5-4 Visual C (アンマネージド)での 参 照 設 定 アンマネージドの Visual C++(MFC や ATL 等 を 使 う 場 合 )では.NET 言 語 のような 参 照 設 定 を 統 合 環 境 内 から 行 う 事 はありません その 代 わりに 下 記 のような#import 擬 似 命 令 を stdafx.h 内 の 適 当 な 場 所 に 書 きます // x64 OS で x64 アプリケーションを 開 発 する 場 合 #import "C:/Program Files/IVI Foundation/VISA/VisaCom64/GlobMgr.DLL" no_namespace named_guids // x64 OS で x86 アプリケーションをクロス 開 発 する 場 合 #import "C:/Program Files (x86)/ivi Foundation/VISA/VisaCom/GlobMgr.DLL" no_namespace named_guids // x86 OS で x86 アプリケーションを 開 発 する 場 合 #import "C:/Program Files/IVI Foundation/VISA/VisaCom/GlobMgr.DLL" no_namespace named_guids 実 際 のコードでは 上 記 の 擬 似 命 令 は 改 行 せずに 一 行 で 書 いて 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 33/159

34 GlobMgr.DLL の 実 際 のロケーションに 合 わせてパスの 指 定 を 変 更 して 下 さい このファイルは 通 常 <VXIPNPPATH>/VisaCom ディレクトリに 置 かれていますが Visual Studio でアプリケーション 開 発 をする 際 の OS 及 びターゲットプラットフォームの OS で ディレクトリが 微 妙 に 異 なるので 注 意 して 下 さい これから 先 は 具 体 的 なプログラムのコーディング 方 法 について 説 明 していきます 代 表 的 に C#を 例 にします KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 34/159

35 6- VISA セッションのオープン 6-1 リソース マネージャ オブジェクトの 作 成 VISA COM ライブラリを 使 うアプリケーションで 最 初 にしなければならない 事 は リソース マネージ ャ オブジェクトを 作 成 する 事 です リソース マネージャ オブジェクトは 下 の 様 に 記 述 する 事 で 新 規 に 作 成 する 事 ができます IResourceManager3 rm = new ResourceManagerClass(); ここで 変 数 rm は IResourceManager3 というインターフェース 型 で 宣 言 されていますが 右 辺 で 新 規 作 成 されるのは ResourceManagerClass コンポーネントです 最 後 に()が 付 いているのは その コンポーネント 型 のコンストラクタを 呼 び 出 している 事 を 意 味 します リソース マネージャの 最 も 重 要 な 仕 事 は 指 定 された VISA アドレスを 元 に VISA セッションをオー プンする 事 です VISA セッションをオープンしなければ 計 測 器 との IO は 何 も 始 まらないからです リソース マネージャの 実 体 は <VXIPNPPATH>/VisaCom ディレクトリに 置 かれた Global Resource Maneger ( 略 して GRM)という COM コンポーネント(GlobMgr.dll)です GRM は IVI Foundation が 提 供 する VISA Shared Components の 一 部 で 実 際 の IO 処 理 は 全 く 行 いません しかし GRM はシステムに 登 録 されている 複 数 のベンダー 提 供 コンポーネントを 階 層 的 に 取 り 扱 う 機 能 を 持 っています 6-2 VISA セッションのオープン リソース マネージャ オブジェクトが 作 成 できたら Open メソッドを 使 って VISA セッションをオープン します IMessage msg = (IMessage)rm.Open("GPIB0::3::INSTR", AccessMode.LOAD_CONFIG, 0, "");... msg.close(); まず オープンした VISA セッションの 参 照 を 保 持 するための 変 数 を 宣 言 しておきます ここでは IMessage インターフェース 型 の 変 数 msg を 宣 言 します 型 名 の 先 頭 に 大 文 字 の"I"が 付 いている 場 合 一 般 にそれはインターフェース 型 になっています この 場 合 は IMessage の"I"です コンポーネント クラス 型 と COM インターフェース 型 の 違 いを 理 解 するのは 少 々 難 しいのですが 一 般 にコンポーネント クラス 型 は new 演 算 子 でオブジェクトのインスタンスを 作 成 できる 型 です 先 の 例 では ResourceManagerClass コンポーネントがそうです それに 対 し インターフェース 型 はオブジェクトのインスタンスを 作 成 する 事 はできません それは コンポーネント クラスと 異 なりイ ンターフェース 自 体 は 抽 象 的 なものであり 何 ら 実 体 を 伴 わないからです その 代 わりに 何 か 別 の 手 段 で 作 成 されたオブジェクトのインスタンス( 実 体 )に 対 し 特 定 のインターフェースを 参 照 するため に 使 います 次 に Open メソッドの 呼 び 出 し 部 分 を 見 て 下 さい 厳 密 には Open メソッドが 返 す 型 は IVisaSession 型 なのですが ここではその 派 生 型 である IMessage 型 の 変 数 でそれを 受 取 る 事 にします つまりここでは リソース マネージャ オブジェクトの Open メソッドを 呼 び 出 し その 戻 り 値 を IMessage 型 COM インターフェースとして 変 数 msg に 代 入 しています (この 場 合 タイプキ ャストが 必 要 です ) 呼 び 出 しに 成 功 すれば 以 降 IMessage インターフェースで 提 供 される 全 ての メソッドとプロパティを 利 用 できます ここでリソース マネージャの Open メソッドについて 簡 単 に 説 明 しておきます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 35/159

36 IVisaSession IResourceManager3.Open( string ResourceName, AccessMode mode, int inittimeoutm string OptionString ); KI-VISA Library VISA COM ガイドブック Open メソッドに 渡 している 文 字 列 ResourceName は VISA アドレスと 呼 ばれるもので 特 定 の IO リソースを 指 し 示 す 名 前 になっています VISA アドレスの 書 式 は VISA の 仕 様 書 で 明 確 に 定 められ ており GPIB シリアル USB LAN の 場 合 は 下 記 のような 構 文 になっていなければなりません GPIB[board]::PrimaryAddress[::SecondaryAddress][::INSTR] GPIB[board]::INTFC ASRL[board][::INSTR] USB[board]::VendorID::ProductID::SerialNumber[::InterfaceNumber][::INSTR] TCPIP[board]::IPAddress[::devicename][::INSTR] TCPIP[board]::IPAddress::devicename[::INSTR] TCPIP[board]::IPAddress::portno::SOCKET []で 囲 まれた 部 分 は 省 略 が 可 能 です 上 記 のプログラム 例 では"GPIB0::3::INSTR"というリ ソース 名 を 使 っているので これは GPIB0 のバス 上 に 接 続 されたプライマリ アドレス 3 セカンダ リ アドレスなし の 計 測 器 を 示 します 下 の 表 は 比 較 的 良 く 使 われるリソース 文 字 列 の 例 を 示 したものです Table 6-1 リソース 文 字 列 の 例 リソース 文 字 列 GPIB0::3::INSTR GPIB1::3::12::INSTR GPIB0::INTFC ASRL1::INSTR 説 明 GPIB0 に 接 続 されたプライマリ アドレス 3 の 計 測 器 GPIB1 に 接 続 されたプライマリ アドレス 3 セカンダ リ アドレス 12 の 計 測 器 GPIB0 のコントローラ インターフェース シリアル ポート COM1 に 接 続 された 計 測 器 USB0::0x0B3E::0x1005::ABC12345::INSTR ベンダーID(VID)2878 プロダクト ID(PID)4101 シリ アル ナンバー"ABC12345"を 持 つ USBTMC 計 測 器 TCPIP0:: ::inst0::INSTR TCPIP0:: ::hislip0::INSTR TCPIP0:: ::5025::SOCKET IP アドレス の VXI-11 計 測 器 IP アドレス の HiSLIP 計 測 器 IP アドレス ポート 番 号 5025 の SCPI- RAW 計 測 器 [board]を 省 略 した 場 合 0 を 指 定 したものとして 扱 われます 従 って"GPIB"は"GPIB0"と 解 釈 されます USB の 場 合 [board]の 値 は 特 に 意 味 を 持 たないので 通 常 は 0 にして 下 さい [INSTR]を 省 略 する 事 はできますが INTFC は 省 略 できません GPIB セカンダリ アドレスには 0~30 を 指 定 して 下 さい システムによってはセカンダリを 96~126 で 表 現 し ているものもありますが VISA では 0~30 です 実 際 のアドレッシング コマンド 送 出 時 には 60(hex)が 加 算 さ れたものが 使 用 されます USB の VID/PID 部 分 は 16 進 と 10 進 のどちらでも 指 定 できます ただし 16 進 書 式 は C 言 語 スタイルと 同 じ 0x が 手 前 に 必 要 です LAN の IP アドレス 部 分 は 有 効 なホスト 名 でも 指 定 できます ( 有 効 なホスト 名 は 計 測 器 の 埋 め 込 み WEB ペー ジで 確 認 できます ) VISA アドレスは ケース インセンセィティブ( 大 文 字 小 文 字 の 区 別 なし)です KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 36/159

37 Open メソッドの 2 番 目 以 降 のパラメータについて 説 明 しましょう mode パラメータはリソース ロッ キングの 為 のアクセス モードを 指 定 します リソース ロッキングについては 後 述 します 通 常 は NO_LOCK か LOAD_CONFIG を 指 定 します パラメータ inittimeout は 同 じリソースが 他 のセ ッションで 既 にロックされている 際 にロックを 獲 得 できるまでのタイムアウト(ms)を 指 定 します mode パラメータに EXCLUSIVE_LOCK 又 は SHARED_LOCK を 指 定 した 場 合 のみ 意 味 を 持 ちます OptionString パラメータは このセッションに 対 して 設 定 可 能 な 属 性 値 を 一 括 指 定 できる 便 利 な 機 能 です 属 性 は 個 別 にも 指 定 できるので ここでは 省 略 又 はブランク 文 字 列 を 指 定 します Open メソッドで VISA セッションをオープンしたら それ 以 降 そのセッションを 通 じて IO を 行 う 事 が 出 来 ます 全 ての IO 動 作 を 終 了 して VISA セッションが 不 要 になったら Close メソッドを 呼 び 出 し て 下 さい void IMessage.Close(); IResourceManager3.Open メソッドの 戻 り 値 は 厳 密 には IVisaSession インターフェースへの 参 照 とな っています 従 ってこれを 受 取 る 変 数 は 本 来 であれば IVisaSession 型 でなければなりません しかし "INSTR"を 含 むリソース 文 字 列 をリソース マネージャに 指 定 して 作 成 された VISA セッション オブジェクトは 必 ず IMessage インターフェースをサポートしています 従 って 厳 密 な 戻 り 値 の 型 ではなく IMessage インタ ーフェースへの 参 照 として 取 得 する 事 ができます 但 し 明 示 的 なタイプキャストをする 必 要 があります VISA アドレスのタイプが GPIB INSTR の 場 合 Open メソッドの 呼 び 出 しに 成 功 すれば 下 のサンプ ルに 示 される COM インターフェースを 全 て 参 照 することが 出 来 ます IVisaSession vi; vi = rm.open( "GPIB0::3::INSTR", AccessMode.NO_LOCK, 0, ""); IBaseMessage bmsg = (IBaseMessage)vi; IAsyncMessage amsg = (IAsyncMessage)vi; IMessage msg = (IMessage)vi; IEventManager evm = (IEventManager)vi; IGpib g = (IGpib)vi; ( 略 ) vi.close(); VISA アドレスのタイプが ASRL INSTR の 場 合 Open メソッドの 呼 び 出 しに 成 功 すれば 下 のサンプ ルに 示 される COM インターフェースを 全 て 参 照 することが 出 来 ます IVisaSession vi; vi = rm.open( "ASRL1::INSTR", AccessMode.NO_LOCK, 0, ""); IBaseMessage bmsg = (IBaseMessage)vi; IAsyncMessage amsg = (IAsyncMessage)vi; IMessage msg = (IMessage)vi; IEventManager evm = (IEventManager)vi; ISerial s = (ISerial)vi; VISA アドレスのタイプが GPIB INTFC の 場 合 Open メソッドの 呼 び 出 しに 成 功 すれば 下 のサンプ ルに 示 される COM インターフェースを 全 て 参 照 することが 出 来 ます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 37/159

38 IVisaSession vi; vi = rm.open( "GPIB0::INTFC", AccessMode.NO_LOCK, 0, ""); IGpibIntfc gi = (IGpibIntfc)vi; IGpibIntfcMessage gim = (IGpibIntfcMessage)vi; VISA アドレスのタイプが USB INSTR の 場 合 Open メソッドの 呼 び 出 しに 成 功 すれば 下 のサンプル に 示 される COM インターフェースを 全 て 参 照 することが 出 来 ます IVisaSession vi; vi = rm.open( "USB0::0x0B3E::0x1005::ABC12345::INSTR", AccessMode.NO_LOCK, 0, ""); IBaseMessage bmsg = (IBaseMessage)vi; IAsyncMessage amsg = (IAsyncMessage)vi; IMessage msg = (IMessage)vi; IEventManager evm = (IEventManager)vi; IUsb u = (IUsb)vi; VISA アドレスのタイプが LAN INSTR の 場 合 Open メソッドの 呼 び 出 しに 成 功 すれば 下 のサンプル に 示 される COM インターフェースを 全 て 参 照 することが 出 来 ます IVisaSession vi; vi = rm.open("tcpip0:: ::instr", AccessMode.NO_LOCK, 0, ""); IBaseMessage bmsg = (IBaseMessage)vi; IAsyncMessage amsg = (IAsyncMessage)vi; IMessage msg = (IMessage)vi; IEventManager evm = (IEventManager)vi; ITcpipInstr t = (ITcpipInstr)vi;... vi.close(); COM インターフェースから 別 の COM インターフェースへのタイプキャストを 伴 う 参 照 は COM DLL の 内 部 実 装 では QueryInterface()の 呼 び 出 しを 伴 っています 言 語 記 述 上 の 単 純 な 型 変 換 ではなく インターフェー ス 参 照 に 関 する 問 い 合 わせを DLL 自 体 に 問 い 合 わせを 行 っています 複 数 の COM インターフェース 型 変 数 で 参 照 を 保 持 するとその 数 だけ COM オブジェクトの 参 照 カウントは 増 加 します これは QueryInterface されるたびにオブジェクト 自 身 が AddRef を 呼 び 出 して 参 照 カウントを 増 加 するからです 逆 に その 変 数 がスコープを 失 ったときには Release を 呼 び 出 します しかし 変 数 の 数 に 関 わらず オブジェクトのインスタンス( 実 体 )は 同 じものです ( 上 記 最 後 の LAN INSTR の 記 述 例 では IVisaSession 以 外 の 5 つのインターフェース 型 変 数 でそれぞれ vi を 参 照 していますが オブジェクトのコピーを 5 個 作 ったわけではなく オブジェクトの 実 体 は 依 然 1 個 です ) 言 い 換 えると 複 数 の COM インターフェース 型 変 数 で 幾 通 りもの 参 照 を 行 なっても VISA セッション 自 体 は 一 つです 従 って 最 後 に Close メソッドを 呼 び 出 すのはセッションに 対 して 一 度 で 十 分 です COM インターフェー ス 型 の 変 数 ごとに 何 度 も Close を 呼 び 出 してはなりません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 38/159

39 7- 基 本 的 な IO まずは 下 記 のコードを 見 て 下 さい IResourceManager rm = new ResourceManagerClass(); string strvisaaddress = "GPIB0::5::INSTR"; // 必 要 に 応 じて 下 記 のような VISA アドレスに 置 き 換 えて //string strvisaaddress = "ASRL1::INSTR"; //string strvisaaddress = "USB0::0x0B3E::0x1005::ABC12345::INSTR"; //string strvisaaddress = "TCPIP0:: ::INSTR"; IMessage msg = (IMessage)rm.Open( strvisaaddress, AccessMode.NO_LOCK, 0, "Timeout = 3000"); msg.terminationcharacter = 10; msg.terminationcharacterenabled = false; msg.sendendenabled = true; IGpib gpib; ISerial seri; ITcpipInstr tcp; IUsb usb; switch( msg.hardwareinterfacetype) { case 1: //GPIB gpib = (IGpib)msg; gpib.repeataddressingenabled = true; gpib.unaddressingenabled = false; break; case 4: //ASRL seri = (ISerial)msg; seri.baudrate = 19200; seri.databits = 8; seri.stopbits = SerialStopBits.ASRL_STOP_TWO; seri.parity = SerialParity.ASRL_PAR_NONE; seri.flowcontrol = SerialFlowControl.ASRL_FLOW_XON_XOFF; break; case 6: //LAN tcp = (ITcpipInstr)msg; break; case 7: //USB usb = (IUsb)msg; break; } msg.terminationcharacterenabled = true; int r = msg.writestring( "*IDN?\n"); string rd = msg.readstring(256); msg.close(); このサンプルは GPIB インターフェース ( 或 いはシリアル インターフェース USB インターフェース LAN インターフェース 等 に) に 接 続 された 計 測 器 の VISA セッションをオープンし インターフェース KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 39/159

40 タイプによって 異 なる 処 理 を 行 い "*IDN?"クエリを 改 行 コード 付 きで 送 信 し そしてそのレスポンス を 受 取 るだけの 単 純 なプログラムです 7-1 オプション 文 字 列 Open メソッドについては 既 に 説 明 しましたが 最 後 の"Timeout = 3000"という 文 字 列 に 注 目 し て 下 さい このパラメータは Open メソッドの 説 明 で OptionString として 登 場 しました 必 要 が 無 ければブランク 文 字 列 を 渡 しても 構 わないのですが この 例 のように 設 定 可 能 な VISA 属 性 値 を 代 入 式 のような 構 文 で 指 定 する 事 もできます 複 数 の 属 性 値 を 一 度 に 指 定 する 場 合 はセミコロンで 区 切 ります また これら 属 性 値 は プロパティに 値 を 書 き 込 む 事 でも 同 様 の 設 定 を 行 う 事 が 出 来 ます ここで 指 定 された"Timeout = 3000"は IO タイムアウト(ms)です VISA 仕 様 によりデフォルト では 2000ms ですが 必 要 に 応 じて 変 更 して 下 さい Open メソッドに inittimeout という 時 間 設 定 パラメータがありましたが それは VISA セッションのオープンと 同 時 にリソース ロッキングを 行 う 際 の ロック 獲 得 までのタイムアウト 指 定 です IO タイムアウトと 間 違 えやすいので 注 意 して 下 さい 下 に 示 されるのは Open メソッド 呼 び 出 し 後 に OptionString プロパティから 読 み 出 したもので す 設 定 値 はともかく 表 現 方 法 としては 全 て Open メソッドの OptionString パラメータに 渡 せ る 有 効 なものです この 中 から 必 要 な 項 目 だけを 絞 って OptionString パラメータに 渡 すことが できます 各 項 目 は 代 入 式 のような 表 現 で 項 目 同 士 の 連 結 はセミコロンで 行 ないます 記 号 の 両 側 には 必 ずスペースを 開 けて 下 さい Timeout = 2000 ; SendEndEnabled = TRUE ; TerminationCharacter = 10 ; TerminationCharacterEnabled = FALSE ; MaximumQueueLength = 16 ; BaudRate = 9600 ; DataBits = 8 ; DataTerminalReadyState = STATE_UNKNOWN; EndIn = ASRL_END_TERMCHAR; EndOut = ASRL_END_NONE; Parity = ASRL_PAR_NONE; RequestToSendState = STATE_UNKNOWN; StopBits = ASRL_STOP_ONE; ReplacementCharacter = 0 ; XONCharacter = 17 ; XOFFCharacter = 19 先 ほどのサンプルでは GPIB, Serial, USBTMC LAN それぞれの 異 なる IO インターフェース タイ プに 対 して 基 本 的 な IO の 手 順 を 説 明 しました その 中 には IO インターフェース タイプ 毎 に 異 なっ た 書 き 方 をしなければならない 部 分 と 共 通 な 部 分 とが 共 存 してます まず 第 一 に VISA は 異 なる IO インターフェースに 対 して 全 く 同 じプログラムが 動 作 する 事 を 保 証 し ているわけではないという 事 を 理 解 して 下 さい VISA ライブラリの 利 点 は IO リソースタイプに 依 存 し ない 共 通 の API が 提 供 されている 事 ですが 状 況 によってはインターフェース 毎 に 違 った 処 理 が 必 要 な 場 合 もあるのです 例 えば GPIB インターフェースにはリモート ローカルや EOI 信 号 サービス リクエスト 等 の 固 有 概 念 があったり 逆 にシリアル インターフェースにはこれらが 無 くボーレート 等 の 概 念 が 存 在 します これらを 上 手 く 設 定 しないと インターフェース 固 有 の 処 理 は 行 えません ボーレートに 関 する 属 性 値 等 はシリアルの 場 合 には 適 切 に 設 定 しないと 計 測 器 との 通 信 さえ 出 来 ませんが GPIB 接 続 の 時 にこれら 属 性 を 不 用 意 に 設 定 しようとすると 例 外 が 発 生 してしまいます 作 成 する 計 測 制 御 アプリケーションがもしこれら 異 なる IO インターフェース タイプを 透 過 的 に 扱 い たいのであれば ここで 説 明 する 手 法 を 知 っておいたほうが 良 いでしょう 7-2 IO インターフェース タイプの 識 別 上 の 例 では switch/case 文 を 使 って IO インターフェースによって 異 なる 処 理 をいくつか 行 って います しかし このような IO インターフェース 依 存 のアプローチを 取 らなければならないのはほん のわずかです 全 ての VISA セッションでは HardwareInterfaceType プロパティを 使 用 する 事 で IO インター フェース タイプを 識 別 する 事 ができます またその 識 別 を 行 う 行 為 自 体 はインターフェース タイプに は 依 存 しません short IVisaSession.HardwareInterfaceType; KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 40/159

41 このプロパティはリード オンリーです GPIB では 1 ASRL では 4 LAN では 6 USB では 7 を 返 し ます この 値 を 元 に 上 記 サンプルの switch/case 文 のような 条 件 分 岐 処 理 を 記 述 する 事 がで きます IGpib インターフェース(タイプ 1) VISA セッションが GPIB INSTR リソースに 対 してオープンされている 場 合 セッション オブジェクト は IMessage インターフェースの 他 に IGpib インターフェースを 同 時 にサポートしています 従 っ てタイプキャストを 伴 えば IGpib インターフェースの 参 照 を 取 得 する 事 ができます IGpib インタ ーフェースへの 参 照 を 獲 得 できれば GPIB 固 有 の 詳 細 処 理 を 行 う 事 ができます IGpib gpib = (IGpib)msg; gpib.repeataddressingenabled = true; gpib.unaddressingenabled = false; ここでは リピート アドレッシングとアンアドレッシングの 設 定 をそれぞれ true false に 設 定 して います リピート アドレッシングは 同 じ 方 向 の IO が 連 続 する 場 合 2 度 目 以 降 の IO に 対 してアドレ ッシング コマンドの 再 送 出 を 行 うかどうかを 指 定 します アンアドレッシング 機 能 は ATN FALSE メ ッセージが 処 理 されたあと 再 度 ATN TRUE の UNT(hex 5F)と UNL(hex 3F)を 送 出 する 機 能 です GPIB で VISA セッションをオープンした 直 後 はデフォルトで 上 記 サンプルコードの 記 述 と 同 じ 設 定 に なっているので 特 に 明 示 的 に 設 定 する 必 要 はありません しかし これらの 設 定 を 変 更 する 事 も 可 能 である 事 を 覚 えておいて 下 さい IGpib インターフェースの 各 メソッド プロパティの 詳 細 について は KI-VISA COM オンライン ヘルプを 参 照 して 下 さい ISerial インターフェース(タイプ 4) VISA セッションが ASRL INSTR リソースに 対 してオープンされている 場 合 セッション オブジェクト は IMessage インターフェースの 他 に ISerial インターフェースを 同 時 にサポートしています 従 って Set ステートメントによって ISerial インターフェースの 参 照 を 取 得 する 事 ができます ISerial インターフェースへの 参 照 を 獲 得 できれば シリアル インターフェース 固 有 の 詳 細 処 理 を 行 う 事 ができます seri = (ISerial)msg; seri.baudrate = 19200; seri.databits = 8; seri.stopbits = SerialStopBits.ASRL_STOP_TWO; seri.parity = SerialParity.ASRL_PAR_NONE; seri.flowcontrol = SerialFlowControl.ASRL_FLOW_XON_XOFF; シリアル インターフェースの 場 合 は 固 有 設 定 項 目 がやや 多 くなります BaudRate から FlowControl までの 設 定 は 特 に 説 明 の 必 要 も 無 いでしょう これらの 値 は 通 常 は 計 測 器 側 の 設 定 と 一 致 させれば 問 題 ありません 上 記 サンプルコードの 記 述 は VISA のデフォルト 値 ではありませんが 当 社 製 計 測 器 の RS232-C イ ンターフェースで 最 もよく 使 われる 設 定 です VISA セッションをシリアル インターフェースに 対 してオープンする 際 に LOAD_CONFIG オプションを 指 定 する と 上 記 サンプルで 設 定 された 最 初 の 5 個 のプロパティは VISA 仕 様 によるデフォルト 値 ではなく KI-VISA Instrument Explorer の Optional Settings For RS232 Serial Interface でコンフィグレーションした 値 が デフォルトになります 従 って LOAD_CONFIG を 指 定 することで シリアル ポートの 詳 細 設 定 をプログラムコー ドから 除 去 することでもできます IUsb インターフェース(タイプ 7) IUsb インターフェースでは USB で 実 際 に 使 用 するエンドポイントの 情 報 や コントロールエンドポ イントを 直 接 操 作 してベンダー 依 存 リクエストなどを 送 ることもできます 但 し 現 時 点 でそのような 操 作 を 必 要 とする USBTMC 計 測 器 は 殆 どありません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 41/159

42 ITcpipInstr, ITcpipSocket, IHislipInstr インターフェース(タイプ 6) ITcpipInstr/ITcpipSocket/IHislipInstr インターフェースでは 接 続 された 計 測 器 の ネットワーク 接 続 に 関 する 詳 細 情 報 を 取 得 することができます しかし 計 測 器 として 制 御 する 際 に は 特 に 意 識 する 必 要 は 無 いでしょう 7-3 計 測 器 との 通 信 IO インターフェース タイプ 固 有 の 処 理 が 適 切 に 行 われたあとは Write Read WriteString ReadString メソッドを 使 って 実 際 に 計 測 器 との 通 信 を 行 ないます IMessage インターフェース で 最 もよく 使 われるのは ASCII ベースのメッセージを 処 理 する WriteString と ReadString メ ソッドです この 2 つのメソッドがあれば SCPI コマンドのような 文 字 列 ベースのの IO 作 業 は 殆 どす べて 出 来 てしまうでしょう 上 記 の 例 では SCPI コマンド 対 応 の 計 測 器 に"*IDN?"クエリを 改 行 コー ド 付 きで 送 り その 応 答 を 受 取 っています 下 の 表 に 示 されるのは IMessage インターフェースでよ く 使 われるメソッドです Table 7-1 計 測 器 との 通 信 でよく 使 われるメソッド (IMessage インターフェース) メソッド WriteString ReadString Write Read Clear AssertTrigger ReadSTB 説 明 ASCII ベースのメッセージを 計 測 器 に 送 信 する ASCII ベースのレスポンス メッセージを 計 測 器 から 受 信 する バイナリ メッセージを 計 測 器 に 送 信 する バイナリ レスポンス メッセージを 計 測 器 から 受 信 する セレクテッド デバイス クリア(SDC)を 計 測 器 に 送 信 する(GPIB USB) デバイス トリガ(GET)を 計 測 器 に 送 信 する(GPIB USB) シリアル ポーリングを 実 行 してステータス バイトを 取 得 する(GPIB USB) ここでは 最 も 使 用 頻 度 の 高 い WriteString と ReadString の 説 明 をしておきましょう その 他 のメソッドの 詳 細 については VISA COM オンライン ヘルプを 参 照 して 下 さい int IMessage.WriteString(string buffer ); WriteString は 文 字 列 の 送 信 を 行 ないます buffer パラメータには 送 信 したい 文 字 列 を 渡 し ます 戻 り 値 は 実 際 に 計 測 器 に 送 信 されたメッセージバイト 数 です string IMessage.ReadString( int count ); ReadString は 文 字 列 の 受 信 を 行 ないます count パラメータは 受 信 したいレスポンスの 最 大 バ イト 数 戻 り 値 は 受 信 したレスポンス 文 字 列 です 計 測 器 から 返 されるレスポンスのバイト 数 が count 指 定 値 よりも 短 い 場 合 レスポンス 全 体 を 取 得 出 来 ます 計 測 器 から 返 されるレスポンスの ほうが 長 い 場 合 count 指 定 値 の 長 さぶんだけが 返 されます count 指 定 値 が 短 すぎた 為 に 取 得 しそこなった 続 きのレスポンスが 残 っている 場 合 再 度 の ReadString 呼 び 出 しで 残 りのぶんを 継 続 取 得 出 来 るかどうかは 状 況 によって 異 なります GPIB シリアル LAN(ソケット HiSLIP)の 場 合 は 継 続 取 得 できますが USBTMC LAN(VXI-11)の 場 合 は 計 測 器 側 の 出 力 バッファの 振 る 舞 いによって 状 況 は 違 ってきます 7-4 IO インターフェースによって 扱 いの 異 なるメッセージ ターミネータ WriteString と ReadString メソッドが 前 提 としているメッセージ ターミネータに 関 して 少 し 触 れておかなければなりません メッセージ ターミネータには 幾 つかの 種 類 があり 計 測 器 の IO 仕 様 や IO インターフェースの 種 類 によって 様 々です またこの 部 分 がうまく 設 定 されていないために デバイス メッセージが 計 測 器 にうまく 伝 わらなかったり 或 いはクエリに 対 するレスポンスをうまく 受 信 できなかったりします KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 42/159

43 GPIB の 場 合 KI-VISA Library VISA COM ガイドブック GPIB 計 測 器 の 場 合 メッセージ ターミネータ( 古 くはデリミタなどとも 呼 ばれている)には CR, LF, CR+LF, あるいはこれらに EOI(End Of Identify) 信 号 が 合 わさったものが 使 われます VISA ライブ ラリの 場 合 デフォルトでは EOI 以 外 は 一 切 使 われません もちろんこれは EOI 以 外 の(LF 等 の 特 定 メッセージ バイト)をターミネータとして 利 用 できないという 意 味 ではありません デフォルトでは EOI のみであるという 事 です 例 えば WriteString("*IDN?")と 書 いた 場 合 GPIB では 5 バイトのメッセージを 送 信 し 最 終 バイト(この 場 合 は"?" 文 字 ASCII コード 0x3F)と 同 時 に EOI 信 号 がアサートされます 改 行 コード が 自 動 的 に 付 加 されることはありません 改 行 コードを 必 要 とする 場 合 は 送 信 する 文 字 列 に 明 示 的 にそれを 含 ませる 必 要 があります ("*IDN?\n" 等 ) しかし 殆 どの GPIB 計 測 器 は EOI 信 号 を 受 信 した 際 にターミネート 処 理 を 行 なうので 改 行 コードを 付 加 しなくても 正 常 に 通 信 できます "*IDN?"クエリに 対 する 応 答 が"KIKUSUI,PLZ664WA,ABC12345,1.00\n"であると 仮 定 しま しょう この 場 合 計 測 器 は 31 バイト( 表 示 可 能 な 30 バイトとメッセージターミネータの LF ASCII コ ード 0x0A)を 返 そうとします GPIB での ReadString メソッドは デフォルトでは EOI 信 号 がターミ ネータに 使 われます LF などの 特 定 メッセージ バイトでターミネートするのではありません また 有 効 なターミネータを 検 出 していない 場 合 でも ReadString に 渡 された 最 大 受 信 バイト 数 に 達 する と 受 信 動 作 を 終 了 します これが GPIB でのデフォルト 動 作 です ASCII ベースのコマンドで SCPI 対 応 の 計 測 器 ( 或 いは EOI をサポートする 全 ての 計 測 器 )を 扱 うぶんには 通 常 は 特 に 設 定 を 変 更 する 必 要 は 無 いでしょう しか し EOI をターミネータとして 扱 わない 古 い 計 測 器 や 文 字 列 ベースでない Write メソッドや Read メ ソッドを 使 用 してバイナリ 転 送 を 行 う 場 合 には 必 要 に 応 じてデフォルト 動 作 を 変 更 する 必 要 があり ます デフォルト 動 作 を 変 更 するには TerminationCharacter TerminationCharacterEnabled SendEndEnabled の 各 プロパティを 適 切 に 設 定 変 更 す る 必 要 があります これらはいずれも IMessage インターフェースで 利 用 可 能 なプロパティです TerminationCharacter TerminationCharacterEnabled の 各 プロパティは 受 信 動 作 (Read)に 対 して 適 用 されます 送 信 動 作 (Write)には 影 響 しません Table 7-2 GPIB のターミネータに 有 効 なプロパティ(IMessage インターフェース) プロパティ タイプ デフォルト 値 IEEE488.2 計 測 器 での 推 奨 値 TerminationCharacter Byte 0x0A TerminationCharacterEnabled Boolean false true SendEndEnabled Boolean true SendEndEnabled が true の 場 合 WriteString メソッドは 最 終 メッセージバイトと 同 時 に EOI 信 号 をアサートします CR や LF などのターミネータが 自 動 的 に 付 加 されるわけではないので 注 意 して 下 さい 逆 に false に 設 定 されている 場 合 は EOI はアサートされないため コマンド 文 字 列 中 に 明 示 的 な LF コードなどが 埋 め 込 まれていない 限 り 計 測 器 側 ではターミネートされたとは 解 釈 されません TerminationCharacterEnabled が true の 場 合 ReadString メソッドは EOI 受 信 又 は 指 定 された 最 大 バイト 数 という 条 件 に 加 えて TerminationCharacter で 指 定 さ れた 特 定 バイトをターミネータとして 受 信 作 業 を 終 了 します TerminationCharacterEnabled と TerminationCharacter プロパティは ReadString にのみ 効 果 があります WriteString には 何 ら 効 果 がないので 注 意 して 下 さい ASRL(シリアル)の 場 合 RS232 などのシリアル インターフェースを 持 つ 計 測 器 の 場 合 メッセージ ターミネータには CR, LF, CR+LF などがあります GPIB の 場 合 と 異 なり EOI は 存 在 しません また シリアル インターフ ェースには ボーレート データビット ストップビット パリティ フロー 制 御 など 固 有 の 概 念 が 存 在 します VISA ライブラリの 場 合 シリアル ポートの VISA アドレスに 対 するデフォルトでは WriteString に 関 しては LF などの 特 定 メッセージバイトの 考 慮 は 行 われません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 43/159

44 例 えば WriteString("*IDN?")と 書 いた 場 合 ASRL ではデフォルトでは 5 バイトのメッセージ を 送 信 するだけです EOI 信 号 をアサートする 術 もありません 殆 どの 場 合 シリアル インターフェー スを 持 つ 計 測 器 は これでは 応 答 しません 計 測 器 がコマンドを 正 しくターミネートできる 様 にするには 送 信 するコマンドに 明 示 的 に 改 行 コード 明 示 的 に 含 ませる 必 要 があります ("*IDN?\n" 等 ) クエリに 対 するレスポンスを 受 信 する 場 合 も 同 様 の 問 題 がありますが 殆 どの 計 測 器 はレスポンス に 明 示 的 な 改 行 コードを 付 加 してきます VISA の ReadString()でそれを 正 しく 受 信 してターミネート するには TerminationCharacterEnabled プロパティを True にセットしておく 必 要 がありま す(デフォルトは False) TerminationCharacter TerminationCharacterEnabled の 各 プロパティは 受 信 動 作 (Read)に 対 して 適 用 されます 送 信 動 作 (Write)には 影 響 しません Table 7-3 シリアルのターミネータに 有 効 なプロパティ(IMessage インターフェース) プロパティ タイプ デフォルト 値 IEEE488.2 計 測 器 での 推 奨 値 TerminationCharacter Byte 0x 0A TerminationCharacterEnabled Boolean false true ISerial インターフェースでは さらに 二 種 類 のプロパティをターミネーション 設 定 に 使 用 すること ができます Table 7-4 シリアルのターミネータに 有 効 なプロパティ(ISerial インターフェース) プロパティ タイプ デフォルト 値 IEEE488.2 計 測 器 での 推 奨 値 EndOut SerialEndConst ASRL_END_NONE 明 示 的 に 改 行 コードを 付 ける なら ASRL_END_NONE EndIn SerialEndConst ASRL_END_TERMCHAR 明 示 的 に 改 行 コードを 付 けな いなら ASRL_END_TERMCHAR EndOut はデフォルトでは ASRL_END_NONE に 設 定 されていますが ASRL_END_TERMCHAR に 変 更 すると WriteString でのメッセージ 送 信 時 に TerminationCharacter で 指 定 された メッセージ バイトを 付 加 して 送 信 します EndIn はデフォルトで ASRL_END_TERMCHAR に 設 定 さ れていますが ReadString メソッドは 指 定 された 最 大 バイト 数 という 条 件 に 加 えて TerminationCharacter で 指 定 された 特 定 バイトをターミネータとして 受 信 作 業 を 終 了 します TerminationCharacterEnabled プロパティは False のまま 放 置 しておいても 問 題 ありませ ん EndOut プロパティは WriteString に 効 果 があり EndIn プロパティは ReadString に 効 果 があります EndOut を ASRL_END_NONE に 設 定 する 事 で WriteString()での 動 作 で 改 行 コードを 暗 黙 に 追 加 送 信 する 事 ができます しかし ASRL 同 様 に EOI 機 能 を 持 たない TCP/IP ソケット(SCPI-RAW)の 場 合 には 送 信 文 字 列 に 明 示 的 に 改 行 コードを 含 ませる 以 外 にそれを 付 加 させる 手 段 はありません 従 って 通 信 IF に 依 らず 共 通 のアプリケーション ソフトを 作 成 する 場 合 EndOut に 頼 らず WriteString()の 呼 び 出 し 毎 に 明 示 的 に 改 行 コードを 含 ませるようにした 方 が 良 いでしょう USB の 場 合 USB(USBTMC) 計 測 器 の 場 合 メッセージ ターミネータには CR, LF, CR+LF, あるいはこれらに EOM(End Of Message)フィールドが 合 わさったものが 使 われます EOM は GPIB の EOI 信 号 をを KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 44/159

45 模 倣 して 設 計 されたものです GPIB の 場 合 とは 異 なり USB には EOM を 表 現 するための 専 用 ライン は 有 りませんが メッセージの 先 頭 に 特 殊 なヘッダ 部 を 設 け そこに EOM ビットというフィールドを 持 たせるようにしています 意 味 合 い 的 には GPIB の EOI と 全 く 同 じと 考 えてよいでしょう KI-VISA で USB インターフェースを 装 備 する 計 測 器 を 制 御 したい 場 合 計 測 器 は USBTMC 仕 様 に 準 拠 してい る 必 要 があります KI-VISA では USBTMC 仕 様 でない 任 意 の USB 計 測 器 を 制 御 できる USB RAW セッション は 提 供 していません USBTMC が 使 用 する 特 殊 なヘッダは ホストからの 送 信 時 に 使 われるものは USBTMC バルクアウト ヘッダと 呼 ばれ 計 測 器 からの 受 信 時 に 使 われるものは USBTMC バルクイン ヘッダと 呼 ばれます EOM フィールドは これらヘッダ 内 に 存 在 します USBTMC に 関 する 詳 細 は USBTMC および USBTMC-USB488 仕 様 書 を 参 照 し て 下 さい USBTMC ヘッダの 処 理 は VISA 又 はデバイス ドライバが 行 ないます アプリケーションが 特 に 意 識 する 必 要 は ありません また Write メソッドなどが 返 す 転 送 バイト 数 情 報 にもヘッダ 部 分 のサイズは 含 まれません VISA ライブラリの 場 合 デフォルトでは EOM 以 外 は 一 切 使 われません もちろんこれは EOM 以 外 の(LF 等 の 特 定 メッセージバイト)をターミネータとして 利 用 できないという 意 味 ではありません デフ ォルトでは EOM のみであるという 事 です 先 のプログラムの 例 WriteString("*IDN?\n")では 改 行 コードを 含 む 6 バイトのメッセージを 送 信 し この 最 終 バイト(この 場 合 は LF 文 字 ASCII コード 0x0A)を 以 ってメッセージが 完 了 する (EOM)という 意 思 を 計 測 器 側 に 伝 達 します "*IDN?"クエリに 対 する 応 答 が"KIKUSUI,PLZ664WA,BBB77700,1.00\n"であると 仮 定 しま しょう この 場 合 計 測 器 は 31 バイト( 表 示 可 能 な 30 バイトとメッセージ ターミネータの LF ASCII コード 0x0A)を 返 そうとします USB での ReadString メソッドは デフォルトでは EOM フィールド がターミネータに 使 われます LF などの 特 定 メッセージ バイトでターミネートするのではありません また 有 効 なターミネータを 検 出 していない 場 合 でも ReadString に 渡 された 最 大 受 信 バイト 数 に 達 すると 受 信 動 作 を 終 了 します これが USB でのデフォルト 動 作 です USBTMC は 比 較 的 新 しいプロトコル(2003 年 リリース)なので この 仕 様 に 準 拠 する 計 測 器 は 多 くの 場 合 SCPI 仕 様 になっていると 考 えられます ASCII ベースの コマンドで USBTMC 計 測 器 を 扱 うぶんには 通 常 は 特 に 設 定 を 変 更 する 必 要 は 無 いでしょう しかし Write メソッドや Read メソッドを 使 用 してバイナリ 転 送 で 受 信 を 行 う 場 合 には 必 要 に 応 じてデフ ォルト 動 作 を 変 更 する 必 要 があります デフォルト 動 作 を 変 更 するには TerminationCharacter TerminationCharacterEnabled SendEndEnabled の 各 プ ロパティを 適 切 に 設 定 変 更 する 必 要 があります これらはいずれも IMessage インターフェースで 利 用 可 能 なプロパティです Table 7-5 USB のターミネータに 有 効 なプロパティ(IMessage インターフェース) プロパティ タイプ デフォルト 値 IEEE488.2 計 測 器 での 推 奨 値 TerminationCharacter Byte 0x 0A TerminationCharacterEnabled Boolean false true SendEndEnabled Boolean True SendEndEnabled が true の 場 合 WriteString メソッドは 送 信 されるメッセージ 全 体 が 最 終 バイトを 以 って 完 結 する 事 を 明 示 的 に 示 すため バルクアウト ヘッダの EOM フィールドを 設 定 しま す CR や LF などのターミネータが 付 加 されるわけではないので 注 意 して 下 さい 逆 に False に 設 定 されている 場 合 は EOM は 設 定 されないため コマンド 文 字 列 中 に 明 示 的 な LF コードなどが 埋 め 込 まれていない 限 り 計 測 器 側 ではターミネートされたとは 解 釈 されません TerminationCharacterEnabled が true の 場 合 ReadString メソッドは TerminationCharacter で 指 定 されたメッセージ バイトより 後 のレスポンスを 送 り 返 さないよう に 更 に ReadString のパラメータで 渡 されたメッセージ バイト 数 を 上 限 としてレスポンスを 返 す KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 45/159

46 ように 計 測 器 に 対 して 指 示 します USBTMC 計 測 器 はこの 条 件 に 従 ってレスポンスを 返 すように 設 計 されているので ReadString は 実 際 には 計 測 器 から 返 されたメッセージを 全 て 受 信 します TerminationCharacterEnabled と TerminationCharacter プロパティは ReadString にのみ 効 果 があります WriteString には 何 ら 効 果 がないので 注 意 して 下 さい TerminationCharacterEnabled=true を 利 用 して USBTMC 計 測 器 から 受 信 を 行 なう 場 合 TerminationCharacter プロパティの 値 を 任 意 のものに 変 更 できるかどうかは 計 測 器 によって 異 なりま す USBTMC 仕 様 では デバイス( 計 測 器 )がレスポンスを 送 り 返 す 場 合 の TerminationCharacter 設 定 機 能 は 必 須 事 項 にはなっていません その 場 合 TerminationCharacter をデフォルト 値 (0x0A) 以 外 に 設 定 しようとしたり 或 いは 単 に(0x0A も 含 めて) 設 定 しようとする 行 為 そのものをエラー 扱 いする 場 合 がありま す LAN(VXI-11)の 場 合 VXI-11 計 測 器 の 場 合 メッセージ ターミネータには CR, LF, CR+LF, あるいはこれらに end フラグ が 合 わさったものが 使 われます end フラグ GPIB の EOI 信 号 をを 模 倣 して 設 計 されたものです GPIB の 場 合 とは 異 なり LAN には end フラグを 表 現 するための 専 用 ラインは 有 りません そこで VXI-11 仕 様 では 水 面 下 で 行 われる RPC 関 数 コールのパラメータにそれを 指 定 できるようになって います 意 味 合 い 的 には GPIB の EOI と 全 く 同 じと 考 えてよいでしょう 全 ての LAN 計 測 器 が VXI-11 に 対 応 しているわけではありません 使 用 する 計 測 器 が VXI-11 に 対 応 している かは その 機 種 の 仕 様 書 や 説 明 書 或 いは 計 測 器 自 身 が 提 供 する 埋 め 込 み WEB サイトなどを 参 照 して 下 さ い KI-VISA IO Config での LAN 計 測 器 検 索 機 能 は VXI-11 /DNS-SN での 検 索 ヒットの 他 に LXI 標 準 の XML フ ァイルも 参 照 しています 検 索 の 結 果 VXI-11 の VISA アドレスが 表 示 された 場 合 は 殆 どの 場 合 その 計 測 器 は VXI-11 に 対 応 しています VISA ライブラリの 場 合 デフォルトでは end フラグ 以 外 は 一 切 使 われません もちろんこれは end フラグ 以 外 の(LF 等 の 特 定 メッセージバイト)をターミネータとして 利 用 できないという 意 味 ではありま せん デフォルトでは end フラグのみであるという 事 です 先 のプログラムの 例 WriteString("*IDN?\n")では 改 行 コードを 含 む 6 バイトのメッセージを 送 信 し この 最 終 バイト(この 場 合 は LF 文 字 ASCII コード 0x0A)を 以 ってメッセージが 完 了 する (end)という 意 思 を 計 測 器 側 に 伝 達 します Table 7-6 VXI-11 のターミネータに 有 効 なプロパティ(IMessage インターフェース) プロパティ タイプ デフォルト 値 IEEE488.2 計 測 器 での 推 奨 値 TerminationCharacter Byte 0x 0A TerminationCharacterEnabled Boolean false true SendEndEnabled Boolean True LAN(HiSLIP)の 場 合 HiSLIP 計 測 器 の 場 合 メッセージ ターミネータには CR, LF, CR+LF, あるいはこれらに DataEND メ ッセージが 適 用 されたものが 使 われます HiSLIP では 内 部 のプロトコルに Data(データ 転 送 )と DataEND(データ 転 送 終 端 )の 両 方 が 用 意 されており DataEND は GPIB の EOI 信 号 付 送 信 をを 模 倣 して 設 計 されたものです 意 味 合 い 的 には GPIB の EOI と 全 く 同 じと 考 えてよいでしょう 全 ての LAN 計 測 器 が HiSLIP に 対 応 しているわけではありません また 仕 様 書 自 体 が 2010 年 公 開 と 非 常 に 新 しい 為 市 場 に 存 在 する HiSLIP 計 測 器 はごく 僅 かです 計 測 器 が HiSLIP に 対 応 しているかは その 機 種 の 仕 様 書 や 説 明 書 或 いは 計 測 器 自 身 が 提 供 する 埋 め 込 み WEB サイトなどを 参 照 して 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 46/159

47 KI-VISA IO Config での LAN 計 測 器 検 索 機 能 は VXI-11 /DNS-SN での 検 索 ヒットの 他 に LXI 標 準 の XML フ ァイルも 参 照 しています 検 索 の 結 果 HiSLIP の VISA アドレスが 表 示 された 場 合 は 殆 どの 場 合 その 計 測 器 は HiSLIP に 対 応 しています VISA ライブラリの 場 合 デフォルトでは DataEND での 転 送 によるターミネーションが 行 われます も ちろんこれは end フラグ 以 外 の(LF 等 の 特 定 メッセージバイト)をターミネータとして 利 用 できないと いう 意 味 ではありません デフォルトでは DataEND メッセージを 使 用 しているという 事 です 先 のプログラムの 例 WriteString("*IDN?\n")では 改 行 コードを 含 む 6 バイトのメッセージを 送 信 し この 最 終 バイト(この 場 合 は LF 文 字 ASCII コード 0x0A)を 以 ってメッセージが 完 了 する (end)という 意 思 を 計 測 器 側 に 伝 達 します Table 7-7 HiSLIP のターミネータに 有 効 なプロパティ(IMessage インターフェース) プロパティ タイプ デフォルト 値 IEEE488.2 計 測 器 での 推 奨 値 TerminationCharacter Byte 0x 0A TerminationCharacterEnabled Boolean false true SendEndEnabled Boolean True LAN(SCPI-RAW 単 純 ソケット)の 場 合 単 純 ソケットの 計 測 器 の 場 合 は 或 る 意 味 ASRL(シリアル) 全 二 重 通 信 の 場 合 と 非 常 に 似 ています メッセージ ターミネータには CR, LF, CR+LF などはありますが VXI-11 や HiSLIP のような end フ ラグ 或 いは DataEND メッセージのようなメカニズムは 存 在 しません VISA ライブラリの 場 合 単 純 ソケットの VISA アドレスに 対 するデフォルトでは WriteString に 関 しては LF などの 特 定 メッセ ージバイトの 考 慮 は 行 われません 例 えば WriteString("*IDN?")と 書 いた 場 合 ソケットではデフォルトでは 5 バイトのメッセージ を 送 信 するだけです end フラグのような 物 をアサートする 術 もありません 殆 どの 場 合 LAN 単 純 ソ ケットを 持 つ 計 測 器 は これでは 応 答 しません 計 測 器 がコマンドを 正 しくターミネートできる 様 にするには 送 信 するコマンドに 明 示 的 に 改 行 コード 明 示 的 に 含 ませる 必 要 があります ("*IDN?\n" 等 ) クエリに 対 するレスポンスを 受 信 する 場 合 も 同 様 の 問 題 がありますが 殆 どの 計 測 器 はレスポンス に 明 示 的 な 改 行 コードを 付 加 してきます VISA の ReadString()でそれを 正 しく 受 信 してターミネート するには TerminationCharacterEnabled プロパティを True にセットしておく 必 要 がありま す(デフォルトは False) TerminationCharacter TerminationCharacterEnabled の 各 プロパティは 受 信 動 作 (Read)に 対 して 適 用 されます 送 信 動 作 (Write)には 影 響 しません Table 7-8 単 純 ソケットのターミネータに 有 効 なプロパティ(IMessage インターフェース) プロパティ タイプ デフォルト 値 IEEE488.2 計 測 器 での 推 奨 値 TerminationCharacter Byte 0x 0A TerminationCharacterEnabled Boolean false true KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 47/159

48 8- VISA アドレスの 動 的 な 設 定 8-1 永 続 性 のない VISA アドレス これまで 説 明 した 内 容 を 理 解 すれば 計 測 器 に 対 して 基 本 的 な IO 動 作 を 行 う 事 はできるでしょう しかし ここで 重 要 な 問 題 があります それは VISA アドレスの 指 定 方 法 です これまでの 例 では Open メソッドに 特 定 の IO インターフェース タイプに 依 存 した VISA アドレスの 文 字 列 ( 例 えば "GPIB0::3::INSTR"など)を 直 接 渡 していました 動 作 確 認 や 実 験 検 証 のためのプログラムはと もかく 最 終 的 な 計 測 制 御 アプリケーションにこのような 文 字 列 をプログラム 内 に 直 接 コーディング する 事 は 賢 いやり 方 ではありません このような 事 をすると VISA アドレスの 決 定 に 関 して 実 行 時 の 柔 軟 性 に 欠 けたアプリケーションになってしまいます 通 常 VISA アドレスの 決 定 は 自 動 システム アプリケーションの 最 終 ユーザ( 工 場 でのオペレータ 等 )の 動 作 環 境 や 用 意 される 計 測 器 の IO インターフェースなどによって 変 化 します 計 測 アプリケー ションの 開 発 時 と 同 じ VISA アドレスが 最 終 的 なシステム 稼 動 時 に 使 える 保 証 はありません GPIB ならばデバイスアドレスを 同 じ 値 に 設 定 してやれば 同 じ VISA アドレスを 別 の 実 行 環 境 で 再 現 する のは 比 較 的 簡 単 です しかし シリアル ポートでは 同 じ COM ポート 番 号 が 使 えるとは 限 りません LAN 計 測 器 の 場 合 はネットワーク 環 境 が 変 わると( 意 図 的 にルーターや DHCP サーバーを 環 境 設 定 しない 限 り) 同 じ IP アドレスが 振 られることはまずありません USB の 場 合 は 更 に 面 倒 な 事 が 起 こります USB 計 測 器 に 対 する VISA アドレスには 計 測 器 のベンダ ーID(VID) プロダクト ID(PID) そしてシリアル 番 号 が 含 まれています この 場 合 修 理 や 計 測 器 の 貸 し 借 りなどで 計 測 器 のセットを 交 換 した 場 合 たとえ 同 じ 機 種 であってもシリアル 番 号 が 変 わっ てしまい 同 じ VISA アドレスを 再 現 することは 不 可 能 です このように VISA アドレスには 計 測 アプ リケーションの 設 計 者 が 想 定 できるような 永 続 性 は 無 いのです このような 問 題 を 解 決 する 有 効 な 方 法 は 2 つあります 8-2 FindRsrc を 使 ったリソースの 検 索 まずひとつの 方 法 は 有 効 な VISA アドレスを 実 行 時 に 検 索 し 候 補 から 選 択 させる GUI をアプリケ ーションに 用 意 し 使 用 者 にそれを 選 択 させる 方 法 です アプリケーション 自 体 に 計 測 業 務 の 本 質 とは 直 接 関 係 のない 機 能 (VISA アドレス 選 択 GUI 選 択 状 態 のレジストリへの 永 続 保 存 等 )を 実 装 する 面 倒 がありますが それでもこの 手 法 は 最 も 多 く 使 われます 有 効 な VISA アドレスの 検 索 にはリソース マネージャで IResourceManager3.FindRsrc メソ ッドを 使 います string [] IResourceManager3.FindRsrc( string expr); expr パラメータは 正 規 表 現 と 呼 ばれる 文 字 列 で 検 索 対 象 の VISA アドレスを 抽 象 表 現 します 戻 り 値 は 見 つかった 複 数 の VISA アドレスを 格 納 する 文 字 列 配 列 です 正 規 表 現 と 検 索 対 象 リソースの 例 を 幾 つか 下 の 表 に 示 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 48/159

49 Table 8-1 正 規 表 現 の 例 正 規 表 現 検 索 にヒットするリソース?* 全 てのリソース?*INSTR ASRL[0-9]*::?*INSTR GPIB[0-9]*::?*INSTR GPIB?*INSTR GPIB[^0]::?*INSTR USB[0-9]*INSTR 全 ての INSTR リソース 全 ての ASRL INSTR リソース 全 ての GPIB INSTR リソース 全 ての GPIB INSTR と GPIB-VXI INSTR リソース GPIB0 を 除 く 全 ての GPIB INSTR リソース 全 ての USB INSTR リソース TCPIP?*INSTR 全 ての LAN INSTR リソース(SCPI-RAW は INSTR でないので 除 外 ) TCPIP?* 全 ての LAN リソース(SCPI-RAW も 含 む) FindRsrc で 検 索 された VISA アドレスの 文 字 列 をアプリケーション GUI のコンボボックス 等 に 提 示 すれば アプリケーションに VISA アドレスを 直 接 ハード コーディングすることなく いつでも 適 切 な 選 択 肢 を 使 用 者 に 提 示 することが 出 来 ます 次 の C#プログラム 例 は FindRsrc で 検 索 された 全 ての VISA アドレスを Form ベースのアプリケ ーションのコンボボックス( 変 数 cbovisaaddress)に 追 加 する 方 法 を 示 したものです // 正 規 表 現 で VISA アドレスを 検 索 する IResourceManager3 rm = new ResourceManagerClass(); string[] adrslist = rm.findrsrc("?*instr"); // 見 つかった 全 ての VISA アドレスをコンボボックスに 追 加 する foreach( string s in adrslist) { cbovisaaddress.items.add( s); } KI-VISA では USB とシリアルに 関 しては FindRsrc 実 行 時 に 有 効 な VISA アドレスを 事 前 のコンフィグレー ション 無 しに 検 索 します これらの 検 索 は Plug&Play の Configuration Manager への 問 い 合 わせ(USB の 場 合 ) 又 はレジストリの 探 索 (シリアルの 場 合 )を 利 用 して 動 作 します GPIB に 関 しては IO Config において Enable dynamic search for active controllers and listers が 有 効 な 場 合 には GPIB のバス 信 号 を 通 じてリスナー 検 索 行 い そうでない 場 合 には 事 前 コンフィグレーションのテーブルを 元 にリストを 提 示 します LAN の 場 合 は 常 に 事 前 コンフィグレーションのテーブルを 使 用 します GPIB での 計 測 器 検 索 は 実 際 に GPIB のバスに 信 号 を 発 生 します そのため 別 のプログラムが 計 測 器 と 通 信 を 行 っている 最 中 に FindRsrc が 呼 び 出 されると 場 合 によってはバスに 妨 害 信 号 を 出 す 危 険 性 があります この 問 題 を 回 避 したい 場 合 は Enable dynamic search for active controllers and listers を 無 効 にし て 事 前 コンフィグレーションを 行 うことを 推 奨 します 8-3 VISA エイリアスを 使 う VISA には VISA アドレスのエイリアス( 別 名 )という 考 え 方 があります 例 えばエイリアスとして "MYDMM"を 作 成 し これを 外 部 のコンフィグレーション テーブル 等 を 通 じて "GPIB0::4::INSTR"と 解 釈 したり"ASRL2::INSTR"と 解 釈 したりするという 方 法 です このよう な 方 法 をとれば アプリケーションからは VISA アドレスの 代 わりにエイリアスを 使 用 してハード コー ディングしても 実 行 時 に 適 切 な VISA アドレス 名 に 変 換 する 事 ができます VISA アドレスを 選 択 さ せる GUI を 提 供 する 必 要 はありません エイリアスとその 解 決 先 VISA アドレスとのマップは KI- VISA 自 体 によって 管 理 され アプリ 外 部 に 保 存 されます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 49/159

50 例 えば 上 記 の 例 では 次 のような 記 述 で VISA セッションをオープンできます IMessage msg = (IMessage)rm.Open( "MYDMM", AccessMode.NO_LOCK, 0, ""); この 場 合 "MYDMM"という 名 前 の VISA エイリアスがどの VISA アドレスにマップされるかは VISA 自 身 によって 管 理 されるため マップを 変 更 すればアプリケーションの 変 更 無 しに 異 なる VISA アドレ スへ 転 換 できます VISA エイリアスは KI-VISA Instrument Explorer で 設 定 できます VISA エイリアスは VISA をインストールした 実 行 マシン 毎 に 設 定 する 必 要 があります KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 50/159

51 9- リソース ロッキング 9-1 なぜロックが 必 要 か VISA では 単 一 のリソース( 計 測 器 )に 対 してアプリケーションから 複 数 の VISA セッションをオープ ンする 事 ができます 従 って アプリケーションはそのリソースを 異 なるセッションから 同 時 にアクセ スする 事 が 可 能 になります しかし 状 況 によっては リソースに 対 する 複 数 セッションからのアクセス に 対 して 制 限 をかけたい 場 合 もあります 例 えば あるアプリケーションが 一 連 の 書 き 込 み(メッセー ジ 送 信 )を 確 実 に 行 う 必 要 がある 場 合 他 のセッションがそのリソースに 対 して 同 時 書 き 込 みを 行 う とまずい 事 になります 具 体 的 な 例 を 挙 げてみましょう 例 えば あるプロセス(アプリケーション プログラム)が 複 数 のスレッ ドを 作 成 し プライマリ スレッドが 計 測 データを 定 期 的 に 読 み 込 み バックグラウンドで 動 作 するセカ ンダリ スレッドが 計 測 データ 取 得 の 合 間 を 縫 ってリアルタイム 画 像 データを 吸 い 上 げるような 場 合 が 考 えられます このような 場 合 スレッド 毎 に VISA セッションをオープンするのが 普 通 です もう 一 つの 具 体 例 としては 例 えば あるプログラムが"MEAS:VOLT?"クエリを 発 行 してそのレスポ ンス( 電 圧 計 測 データ)を 受 取 るとします それと 同 時 に 別 のプログラムが 同 じ 計 測 器 に 対 して "MEAS:CURR?" クエリを 発 行 してそのレスポンス( 電 流 計 測 データ)を 受 取 るとします これらのプ ログラムを 同 時 に 実 行 すると 期 待 した 動 作 をしない 場 合 があります このような 動 作 を 安 全 に 行 なう 場 合 計 測 器 に 対 する IO 動 作 を 同 期 させる 必 要 がありますが 下 記 A/B のプログラムを 同 時 に 実 行 した 場 合 期 待 した 動 作 にはなりません 例 : //プログラム A int r = msg.writestring("meas:volt?\n"); string rd = msg.readstring(256); //プログラム B int r = msg.writestring("meas:curr?\n"); string rd = msg.readstring(256); 実 際 の IO 動 作 を 時 系 列 順 に 見 た 場 合 次 のようになる 可 能 性 があります Table 9-1 実 行 順 序 プログラム A プログラム B プログラム A プログラム B リソース ロッキングを 使 わない 場 合 の 問 題 例 想 定 される 動 作 msg.writestring("meas:volt?\n"); msg.writestring("meas:curr?\n"); msg.readstring( ); 電 圧 計 測 データを 期 待 するが 電 流 データを 誤 って 取 得 msg.readstring( ); 電 流 計 測 データを 期 待 するが 計 測 器 の 応 答 がなくタイムアウト する このように 同 期 を 行 わずに 複 数 スレッド 又 は 複 数 プロセスで 別 々の VISA セッションから 同 じリソー スに 同 時 アクセスすると プログラムは 期 待 した 順 序 で 実 行 されない 場 合 があります このような 状 況 を 解 決 するのがリソース ロッキングです リソース ロッキングを 使 わない 場 合 の 上 記 の 問 題 は IO リソース タイプによって 発 生 する 場 合 としない 場 合 があります KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 51/159

52 GPIB USBTMC VXI-11 の 場 合 は クエリによって 生 成 されたレスポンスはそのあとの 明 示 的 な 読 み 込 み 動 作 (ReadString() 等 )が 行 われるまで 計 測 器 側 で 保 持 されています ホストから 読 み 込 み 動 作 が 行 われた 時 その VISA セッションが 該 当 クエリを 送 った 時 に 使 われた VISA セッションかどうかとは 関 係 なく 計 測 器 はレス ポンスを 送 り 出 します 従 って 上 記 の 問 題 を 発 生 します (セッション A から 送 られたクエリに 対 する 応 答 をセッ ション B から 受 け 取 れます ) SCPI-RAW(SOCKET) 及 び HiSLIP の 場 合 は クエリによって 生 成 されたレスポンスは 即 座 にホストへ 返 信 され ます ホストが 読 み 込 み 動 作 を 開 始 する 必 要 はありません このような 動 作 になるのは いずれの IO リソース も 全 二 重 動 作 になっているからです この 場 合 レスポンスは 該 当 クエリを 送 った 時 の VISA セッションに 対 して そのセッション 固 有 の TCP/IP ソケットで 返 信 されるため 上 記 のような 問 題 は 発 生 しません (セッション A から 送 られたクエリに 対 する 応 答 はセッション A からのみ 受 け 取 れます ) ASRL(シリアル)の 場 合 は 基 本 的 には 全 二 重 シリアルなので SCPI-RAW(SOCKET)や HiSLIP のようにレスポ ンスは 即 座 にホストへ 返 信 されますが ホスト 側 のシリアル ポート 受 信 バッファが COM ポート 毎 に 単 一 であり 複 数 セッション 間 で 共 有 されています 従 って GPIB と 同 様 に 上 記 の 問 題 を 発 生 します 9-2 ロックの 仕 組 み VISA のロッキング メカニズムは リソースへのアクセスを VISA セッション 単 位 で 調 停 します ある VISA セッションがリソースをロックしている 場 合 他 の VISA セッションから 同 じリソースに 対 する 操 作 を 行 おうとすると その 動 作 の 種 類 やロック タイプによって 動 作 が 受 け 入 れられる 場 合 とエラーに なる 場 合 とがあります リソースがどのセッションからもロックされていない 場 合 IO 動 作 及 びグローバル 属 性 値 を 変 更 する 事 に 関 して 何 ら 制 限 を 受 ける 事 は 有 りません この 場 合 VISA セッションは 特 にロックを 獲 得 する 必 要 も 無 く リソースに 対 するすべての 操 作 を 行 う 事 が 出 来 ます しかし 他 の VISA セッションがすで にリソースをロックしている 場 合 グローバル 属 性 値 を 変 更 しようとしたり 特 定 の 動 作 ( 特 に IO 動 作 ) を 行 おうとすると 失 敗 します リソースをロックする 事 で 他 の VISA セッションからのアクセスが 制 限 さ れているのです 特 に 排 他 的 ロックを 獲 得 している 場 合 は 他 の VISA セッションからのアクセスが 原 因 で 動 作 が 失 敗 する 事 がないように 他 の VISA セッションからのアクセスを 完 全 に 排 除 します 属 性 値 とは セッションを 通 じて 設 定 又 は 取 得 可 能 な 状 態 変 数 のようなものと 考 えて 下 さい VISA COM では 通 常 属 性 をプロパティとしてアクセスするか 又 は SetAttribute/GetAttribute メソッドを 通 じてアクセ スすることができます 属 性 には VISA セッションごとに 管 理 されるもの(ローカル 属 性 )と リソースごとに 管 理 されるもの(グローバル 属 性 )があります ローカル 属 性 は 同 じリソースに 関 連 付 けられた 複 数 の VISA セッシ ョンで 別 々に 管 理 されるので たとえリソースがロックされていても 自 由 に 読 み 書 きができます 一 方 グローバ ル 属 性 は ある VISA セッションがその 値 を 書 き 換 えると 同 じリソースに 関 連 付 けられた 他 のセッションにも 影 響 が 及 ぶため リソースがロックされているときは 書 き 込 み 動 作 においてアクセス 制 限 がかかります 9-3 ロック タイプ VISA では 2 種 類 のロック タイプ 排 他 的 ロック(Exclusive Lock) と 共 有 ロック(Shared Lock) が 定 義 され LockRsrc メソッドのパラメータにはそれぞれ EXCLUSIVE_LOCK 及 び SHARED_LOCK が 使 われます LockRsrc メソッドはロックを 獲 得 し UnlockRsrc メソッドはロッ クを 開 放 します 現 在 のロック 状 態 は LockState プロパティを 参 照 する 事 で 行 えます LockState プロパティはロック 状 態 に 応 じて EXCLUSIVE_LOCK 又 は SHARED_LOCK を 返 すか 或 いはロックを 獲 得 していない 場 合 には NO_LOCK を 返 します 排 他 的 ロック アプリケーションは VISA セッションを 通 じて EXCLUSIVE_LOCK 指 定 で LockRsrc メソッドを 呼 び 出 す 事 により リソースに 対 する 排 他 的 アクセス 権 限 を 獲 得 します この 場 合 同 じリソースに 関 連 付 けられている 他 の VISA セッションは 無 条 件 にアクセスを 制 限 されます VISA セッションが 排 他 的 ロックを 保 持 している 場 合 他 の VISA セッションはグローバル 属 性 値 (プロ パティ)を 変 更 したり IO 動 作 を 行 う 事 はできません しかし 属 性 値 (プロパティ)の 読 み 出 しは 制 限 さ れません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 52/159

53 共 有 ロック KI-VISA Library VISA COM ガイドブック アプリケーションは VISA セッションを 通 じて SHARED_LOCK 指 定 で LockRsrc メソッドを 呼 び 出 す 事 により 他 のセッションとロックを 共 有 する 事 ができます 共 有 ロックにおけるアクセス 権 限 は 排 他 的 ロックと 同 じですが 複 数 の VISA セッションでロックを 共 有 できるところが 違 います VISA セッションが 共 有 ロックを 保 持 している 場 合 ロックを 共 有 する 他 の VISA セッションからはグロ ーバル 属 性 (プロパティ)を 変 更 したり IO 動 作 を 行 う 事 ができます しかしロックを 共 有 していない VISA セッションからのアクセスは 制 限 されます VISA セッションは 複 数 回 に 渡 ってロックを 獲 得 する 事 ができます その 場 合 排 他 的 ロックと 共 有 ロックを 混 在 させて 獲 得 する 事 ができます 下 記 の 表 は ロックを 獲 得 できるための 条 件 を 示 したも のです Table 9-2 ロックを 獲 得 したいセッションが 現 在 何 もロックを 保 持 していない 場 合 獲 得 したい ロック 他 のセッションが 保 持 しているロック なし Exclusive Lock Shared Lock Shared and Exclusive Locks Exclusive Yes No No No Shared Yes No Yes* Yes* Table 9-3 獲 得 したい ロック ロックを 獲 得 したいセッションが Exclusive Lock だけを 保 持 している 場 合 (ネスティング) 他 のセッションが 保 持 しているロック なし Exclusive Lock Shared Lock Shared and Exclusive Locks Exclusive Yes ** ** ** Shared No ** ** ** Table 9-4 獲 得 したい ロック ロックを 獲 得 したいセッションが Shared Lock だけを 保 持 している 場 合 (ネスティング) 他 のセッションが 保 持 しているロック なし Exclusive Lock Shared Lock Shared and Exclusive Locks Exclusive Yes ** Yes No Shared Yes ** Yes Yes Table 9-5 獲 得 したい ロック ロックを 獲 得 したいセッションが Shared Lock と Exclusive Lock の 両 方 を 保 持 している 場 合 (ネスティング) 他 のセッションが 保 持 しているロック なし Exclusive Lock Shared Lock Shared and Exclusive Locks Exclusive Yes ** Yes ** Shared Yes ** No ** Yes* - ロックを 獲 得 したいセッションが LockRsrc 呼 び 出 しで 正 しいアクセス キーを 提 示 した 場 合 に 限 る ** - ロッキング メカニズム 上 このような 場 面 が 発 生 する 事 はない KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 53/159

54 共 有 ロックを 保 持 した 状 態 で 排 他 的 ロックを 獲 得 する KI-VISA Library VISA COM ガイドブック 複 数 の VISA セッションが 共 有 ロックを 獲 得 している 場 合 そのうちの 一 つのセッションだけは 共 有 ロ ックを 保 持 したまま 排 他 的 ロックを 獲 得 する 事 が 出 来 ます つまり 共 有 ロックを 獲 得 しているセッシ ョンのうち 一 つは 更 に LockRsrc メソッドを 呼 び 出 して 排 他 的 ロックを 獲 得 できるという 事 です 排 他 的 ロックと 共 有 ロックの 両 方 を 獲 得 した VISA セッションは 共 有 ロックだけを 獲 得 していた 時 と 同 じアクセス 権 限 を 持 ちます しかしこの 場 合 共 有 ロックを 獲 得 していた 他 のセッションはリソースに 対 するアクセスを 制 限 されるようになります 排 他 的 ロックを 獲 得 した VISA セッションが UnlockRsrc によってロックを 開 放 した 時 共 有 ロックを 獲 得 していた 他 のセッションは 再 びリソー スに 対 する 全 てのアクセス 権 限 を 与 えられます 同 じ 共 有 ロックを 獲 得 している 複 数 の VISA セッシ ョン 同 士 でリソース アクセスに 対 する 同 期 を 取 りたい 場 合 この 仕 組 みは 便 利 です この 逆 の 場 合 つまり 排 他 的 ロックだけを( 共 有 ロック 無 しで) 保 持 している VISA セッションが 共 有 ロックを 更 に 獲 得 する 事 は VISA では 許 されていません ロックのネスティング VISA ではロックのネスティングがサポートされています つまり VISA セッションは 複 数 回 に 渡 って 同 じタイプのロックを 行 う 事 ができるという 事 です リソースをアンロックするには LockRsrc を 呼 び 出 した 回 数 と 同 じ 回 数 の UnlockRsrc 呼 び 出 しが 必 要 になります それぞれの VISA セッション は それぞれのロック タイプに 対 して 別 々のロック カウントを 管 理 しています 同 じ VISA セッション で LockRsrc を 繰 り 返 し 呼 び 出 した 場 合 は 指 定 されたロック タイプのロック カウントが 増 えてい きます 共 有 ロックを 要 求 する LockRsrc の 多 重 呼 び 出 しでは 毎 回 同 じアクセス キーが 返 され ます 排 他 的 ロックを 要 求 する LockRsrc の 呼 び 出 しでは 呼 び 出 しがネストされているかどうか に 関 係 なく アクセス キーが 返 されることはありません VISA セッションが 複 数 回 に 渡 ってリソース をロックした 場 合 リソースを 実 際 に 開 放 するには 同 じ 回 数 分 の UnlockRsrc 呼 び 出 しが 必 要 に なります つまり LockRsrc はロック カウントを 増 加 させ UnlockRsrc はロック カウントを 減 少 させます ロック カウントがゼロになった 時 リソース ロッキングが 実 際 に 開 放 されます VISA セッションが 共 有 ロックをネスティング 状 態 で 要 求 する 場 合 LockRsrc 呼 び 出 しに 対 してアク セス キーを 提 示 する 必 要 はありません つまり VISA セッションは 以 前 に 獲 得 した 共 有 ロックのア クセス キーを 2 回 目 以 降 の 呼 び 出 しでは 提 示 する 必 要 がないということです しかし ネスティング で 共 有 ロックを 要 求 する 場 合 に もしアクセス キーを 明 示 的 に 提 示 するのであれば そのアクセス キーは 正 しいものでなければなりません アクセス キーに 関 する 説 明 は LockRsrc の 説 明 を 参 照 して 下 さい 9-4 リソースのロックとアンロック ロックを 獲 得 するには LockRsrc メソッドを ロックを 開 放 するには UnlockRsrc メソッドを 使 用 します string IVisaSession.LockRsrc( AccessMode type, int locktimeout, string requestedkey ); void IVisaSession.UnlockRsrc(); LockRsrc メソッドの type パラメータはロックの 種 類 を 指 定 します 指 定 できるのは EXCLUSIVE_LOCK 又 は SHARED_LOCK のどちらか 一 方 です 両 方 を 論 理 OR で 合 成 して 同 時 に 指 定 する 事 は 出 来 ません EXCLUSIVE_LOCK を 指 定 した 場 合 そのリソースへの 排 他 的 アクセス 権 を 獲 得 します ただし 他 のセッションが 同 一 IO リソースに 対 して 既 にロックを 獲 得 している 場 合 は locktimeout パラメータで 指 定 された 時 間 (ミリ 秒 )のあいだロックが 開 放 されるのを 待 ちます その 時 間 内 に ロックを 獲 得 中 のセッションが UnlockRsrc メソッドでロックを 開 放 すれば 入 れ 替 わりに LockRsrc を 呼 び 出 したセッションがロックを 獲 得 します ロック タイムアウト 指 定 時 間 を 過 ぎてもロックを 獲 得 できない 場 合 LockRsrc メソッドは 失 敗 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 54/159

55 requestedkey パラメータは type パラメータに SHARED_LOCK を 指 定 した 場 合 のパラメータで す 共 有 ロックは 複 数 の VISA セッションで アクセス キー を 設 定 し そのキーを 提 示 する VISA セッション 同 士 でロックを 共 有 できる 仕 組 みです アクセス キーには 文 字 列 を 使 用 します また 戻 り 値 は SHARED_LOCK を 指 定 した 場 合 は そのアクセス キー 文 字 列 を 返 します リソースがどのセ ッションからもロックされていない 状 態 で 共 有 ロックを 獲 得 する 場 合 LockRsrc を 呼 び 出 す 時 点 で はまだアクセス キーは 存 在 しません この 時 LockRsrc に 渡 す 要 求 アクセス キーを 省 略 (ブラン ク 文 字 列 )する 事 ができます この 場 合 共 有 ロックの 文 字 列 は VISA によって 作 成 され それが LockRsrc メソッドの 戻 り 値 となります アプリケーションから 明 示 的 な 要 求 アクセス キーが 提 示 さ れた 場 合 はそれが 使 われます EXCLUSIVE_LOCK を 指 定 した 場 合 は 鍵 を 全 く 使 用 しないので requestedkey パラメータは 無 視 され 戻 り 値 はブランク 文 字 列 になります UnlockRsrc にはパラメータがありません このメソッドは 既 に 獲 得 済 みのロックカウントを 1 つ 下 げる 効 果 があります ロックを 全 く 獲 得 していない VISA セッションがこれを 呼 び 出 すとエラーになり ます また VISA セッションが 排 他 的 ロックと 共 有 ロックの 両 方 を 既 に 獲 得 している 場 合 は 排 他 的 ロックが 優 先 的 に 開 放 されます 先 ほどの 2 つのプログラムにリソース ロッキングを 追 加 してみましょう 今 度 は WriteString と ReadString の 呼 び 出 しを LockRsrc と UnlockRsrc の 呼 び 出 しで 囲 むことになります ロック が 獲 得 されてから 開 放 されるまでの 間 同 じ VISA アドレスを 操 作 する 他 の VISA セッションは IO ア クセスを 一 切 行 なうことはできず またロックの 獲 得 も 待 たされる 事 になります //プログラム A msg.lockrsrc( AccessMode.EXCLUSIVE_LOCK, 2000, ""); r = msg.writestring("meas:volt?\n"); rd = msg.readstring(256); msg.unlockrsrc(); //プログラム B msg.lockrsrc( AccessMode.EXCLUSIVE_LOCK, 2000, ""); r = msg.writestring("meas:curr?\n"); rd = msg.readstring(256); msg.unlockrsrc(); この 例 では どちらのプログラムも 排 他 的 ロックの 獲 得 要 求 に 関 して 最 大 2000ms まで 待 つと 指 定 しています ここでは 計 測 コマンドの 応 答 が 2000ms 以 内 で 得 られるという 前 提 なので これらのプ ログラムはタイムアウトする 事 なく 交 互 にロックを 獲 得 し しかも WriteString/ReadString の ペアが 互 いに 干 渉 することなく 正 常 に 目 的 のデータを 取 得 できます ロック 獲 得 から 開 放 までの 処 理 がもっと 長 い 場 合 は このロックが 開 放 されるのを 待 つ 他 の VISA セ ッションでは ロックタイムアウトをもっと 長 い 時 間 に 調 整 したほうが 良 いでしょう そうでないとロック の 獲 得 がタイムアウトして 失 敗 し VISA はエラーを 発 生 します LockRsrc でロックを 獲 得 したら 忘 れずに 同 じ 回 数 分 の UnlockRsrc を 呼 び 出 して 下 さい UnlockRsrc を 忘 れると 同 じ IO リソースを 操 作 する 他 の VISA セッションは IO アクセスもロックの 獲 得 も 出 来 なくなります VISA セッションがロックを 獲 得 したまま 必 要 な 回 数 分 の UnlockRsrc を 呼 び 出 さずに Close メソッドを 呼 び 出 した 場 合 そのセッションが 保 持 する 全 てのロック カウントはゼロに 戻 され 同 じ IO リソースをアクセスする 他 のセッションがロックを 獲 得 できるようになります VISA セッションが Close メソッドを 呼 び 出 さずに 廃 棄 された 場 合 セッション オブジェクトのデストラクタによっ て 自 動 的 に Close 処 理 が 行 なわれます すなわちロック カウントもゼロに 戻 ります HiSLIP SCPI-RAW の 場 合 は IO アーキテクチャの 都 合 上 リソースロッキングを 行 わないプログラム 同 士 でも 正 常 に 同 時 実 行 できる 場 合 があります 例 えばクエリとレスポンス 回 収 を 行 う 場 面 であれば 複 数 プログラムの KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 55/159

56 処 理 タイミングが 入 れ 子 になっても 問 題 は 起 きませんが トリガ 設 定 予 約 とトリガ 遂 行 のように 実 行 順 序 が 重 要 なコマンドを 分 散 処 理 させている 場 合 は リソースロッキングを 使 う 必 要 があります 9-5 ネットワーク 越 しのロック ローカルバス(PCI, PCIe, USB シリアルなど)に 接 続 された 計 測 器 はでは 通 常 は 複 数 の PC から 同 時 にアクセスする 事 はできませんが ネットワーク 上 に 接 続 された 計 測 器 ではそれが 可 能 です こ こでいうネットワークに 接 続 された 計 測 器 とは 下 記 のような 例 を 指 します LAN ベースの 計 測 器 (VXI-11 HiSLIP SCPI-RAW ソケット 等 ) LAN ベースの GPIB アダプタ(NI GPIB-ENET/100 等 )に 接 続 された 計 測 器 VISA が 提 供 する Gateway 機 能 でブリッジ 接 続 された 計 測 器 このような 接 続 形 態 を 持 つ 計 測 器 は 多 くの 場 合 ロックメカニズムは 複 数 マシン 間 でも 動 作 します 順 番 に 例 を 見 ていきましょう LAN ベースの 計 測 器 例 えば 同 じサブネット 内 の 複 数 の PC から IP アドレス の LAN ベースの 計 測 に 同 時 に VISA セッションをオープンするような 場 合 です この 時 マシン A から LockRsrc()で 排 他 的 ロッ クをを 呼 び 出 すと マシン B からのアクセスはどうなるでしょうか この 場 合 VISA セッションが VXI-11 又 は HiSLIP の 場 合 にはロックの 状 態 管 理 が 計 測 器 自 身 によ って 行 われます 従 って マシン B からのアクセスはブロックアウトされます (VXI-11 及 び HiSLIP プロトコルは 計 測 器 ファームウェア 側 でのロック 管 理 メカニズムの 実 装 が 必 須 になっています ) VISA セッションが 無 手 順 ソケット(SCPI-RAW)の 場 合 には マシン 間 でロック 状 態 を 共 通 管 理 するメ カニズムが 根 本 的 に 存 在 しないので アクセスはブロックされません マシン A と B の VISA ライブラ リがネットワーク 通 信 をしてロック 管 理 を 同 期 させていれば 可 能 かもしれませんが 一 般 に VISA ラ イブラリはそれをやっていないようです KI-VISA でもそのような 機 能 は 提 供 していません VXI-11 で 提 供 されるロック 管 理 メカニズムは ネスティングをサポートしていません そのため VISA がネスティ ング 機 構 を 提 供 します HiSLIP で 提 供 されるロック 管 理 メカニズムは VISA 仕 様 と 同 じになっているため 計 測 器 自 身 がネスティングを 管 理 します LAN ベースの GPIB アダプタ 例 えば 同 じサブネット 内 の 複 数 の PC から IP アドレス の LAN-GPIB アダプタに 接 続 された GPIB 計 測 器 に 対 して セッションをオープンするような 場 合 です この 時 マシン A から LockRsrc()で 排 他 的 ロックをを 呼 び 出 すと マシン B からのアクセスはどうなるでしょうか これは LAN-GPIB アダプタの 仕 様 により 異 なる 可 能 性 があります しかし National Instruments 製 の GPIB-ENET/100 等 では GPIB アダプタ 自 身 にロック 管 理 のメカニズムが 備 わっています KI-VISA の NI-488.2M サポートでは Enable board-level locking のオプションを 有 効 にした 場 合 は LockRsrc()/UnlockRsrc()が VISA 内 部 で NI-488.2M API の iblck() 関 数 を 呼 び 出 しています 従 って それが 有 効 に 働 けばマシン B からのアクセスはブロックアウトされます VISA が 提 供 する Gateway 機 能 例 えば VISA の Gateway 機 能 を 利 用 し マシン C のローカルバスに 接 続 された 計 測 器 を 外 部 マシ ンから 仮 想 的 な VXI-11 計 測 器 に 見 せてしまう 方 法 です この 状 態 で A から LockRsrc()で 排 他 的 ロックをを 呼 び 出 すと マシン B からのアクセスはどうなるでしょうか この 場 合 マシン C で 実 行 される VISA の Gateway 機 能 ( 仮 想 VXI-11 デーモンのような 物 )がロッ クを 管 理 する 事 になります (VXI-11 計 測 器 の 場 合 と 同 じ ) 従 って マシン B からのアクセスはブロ ックアウトされます 現 在 の KI-VISA バージョンでは Gateway 機 能 ( 仮 想 VXI-11 デーモン)は 用 意 されていません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 56/159

57 10- イベント キュー 10-1 非 同 期 IO VISA ではイベントを 扱 う 事 が 出 来 ます イベントとは アプリケーション プログラムなどで 注 視 しな ければならないような 事 象 発 生 のことを 指 します イベントには サービス リクエストの 発 生 (SRQ) 割 り 込 み ハードウェア トリガ IO 動 作 の 完 了 などがあります イベントの 受 け 取 り 方 には 2 種 類 あります イベント キューを 使 う EnableEvent で 1 つ 又 は 複 数 のイベント 発 生 を 有 効 にし WaitOnEvent でイベントの 発 生 を 待 ちます WaitOnEvent を 呼 び 出 したスレッドは 実 行 を 停 止 し 期 待 しているイベントが 発 生 するか 又 は 指 定 されたタイムアウト 時 間 が 経 過 すると 呼 び 出 しがリターンします この 方 法 はイベント キュ ーと 呼 ばれます イベント コールバックを 使 う InstallHandler でコールバック ハンドラーを 登 録 し EnableEvent で 1 つ 又 は 複 数 のイベ ント 発 生 を 有 効 にします イベントが 発 生 すると 登 録 済 みのコールバック ハンドラーが 呼 び 出 され ます この 方 法 はイベント コールバックと 呼 ばれます コールバック ハンドラーはアプリケーション プログラム 側 で 用 意 しなければなりません この 章 ではイベント キューの 使 い 方 を 11- イベント コールバック ではイベント コールバックの 使 い 方 をそれぞれ 説 明 します VISA では 非 同 期 IO 動 作 をサポートしています 非 同 期 IO とは 長 くかかるかもしれない IO 動 作 の 完 了 を 待 たずに 直 ぐにメソッドの 呼 び 出 しがリターンするような 動 作 です 例 えば IMessage イ ンターフェースの Write/WriteString/Read/ReadString メソッドは IO 動 作 が 完 了 するま でメソッドの 呼 び 出 しはリターンしません しかし IAsyncMessage インターフェースが 提 供 する Write/WriteString/Read メソッドは 呼 び 出 しが 直 ぐにリターンします 非 同 期 IO を 行 うには IAsyncMessage インターフェースを 使 用 します また 非 同 期 IO 機 能 の 管 理 や IO 結 果 の 取 得 などで IEventManager インターフェースと IEventIOCompletion イ ンターフェースを 使 用 します IAsyncMessage amsg = (IAsyncMessage)rm.Open("GPIB0::3::INSTR", AccessMode.NO_LOCK, 0, ""); IEventManager evm = (IEventManager)msg; IAsyncMessage インターフェースは IMessage インターフェース 同 様 に IO メッセージを 処 理 す るためのインターフェースですが IAsyncMessage インターフェースは 非 同 期 IO を 行 います IEventManager インターフェースは イベント キューやイベント コールバックなど イベントが 関 与 する 機 能 全 体 の 動 作 を 管 理 するためのインターフェースです IEventIOCompletion インター フェースは IO 完 了 イベントにアクセスするためのインターフェースです まずはサンプルコードを 見 てみましょう これは 2 行 の SCPI コマンド 送 信 とレスポンス 回 収 を 非 同 期 動 作 で 行 い 最 後 に 完 了 イベントを 待 つプログラムです IResourceManager3 rm = new ResourceManagerClass(); IAsyncMessage amsg = (IAsyncMessage)rm.Open( "TCPIP0:: ::inst0::INSTR", AccessMode.NO_LOCK, 0, "" ); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 57/159

58 IEventManager evm = (IEventManager)amsg; evm.enableevent( EventType.EVENT_IO_COMPLETION, EventMechanism.EVENT_QUEUE, 0); int job1; int job2; int job3; job1 = amsg.writestring(":sour:curr 10;VOLT 1.5;:OUTP ON\n"); job2 = amsg.writestring(":meas:curr?"); job3 = amsg.read(256); IEventIOCompletion ev; ev = (IEventIOCompletion)evm.WaitOnEvent(1000,EventType.EVENT_IO_COMPLETION, 0); ev = (IEventIOCompletion)evm.WaitOnEvent(1000,EventType.EVENT_IO_COMPLETION, 0); ev = (IEventIOCompletion)evm.WaitOnEvent(1000,EventType.EVENT_IO_COMPLETION, 0); evm.disableevent( EventType.ALL_ENABLED_EVENTS,EventMechanism.EVENT_ALL_MECH, 0); amsg.close(); 10-2 IO 動 作 の 開 始 まず IEventManager インターフェースの EnableEvent メソッドを 呼 び 出 しています void IAsyncMessage.EnableEvent( EventType type, EventMechanism mech, int customeventtype ); EnableEvent メソッドは type パラメータで 指 定 されたイベントタイプを mech パラメータで 指 定 されたメカニズムでイベントを 発 生 させるように VISA に 指 示 します 現 在 KI-VISA の 実 装 では type に EVENT_IO_COMPLETION を 指 定 した 場 合 mech は EVENT_QUEUE で 無 ければなりま せん これは VISA の 制 限 ではなく KI-VISA ライブラリの 実 装 による 機 能 制 限 です CustomEventType パラメータは 使 用 しないので 指 定 しても 無 視 されます 次 に 呼 び 出 しているのは WriteString メソッドです int IAsyncMessage.WriteString( string buffer); IMessage インターフェースの 同 名 メソッドと 全 く 同 じプロトタイプ 宣 言 がされていますが 戻 り 値 の 意 味 が 違 います IMessage インターフェース 版 では 実 際 に 送 信 されたメッセージ バイト 数 でした が IAsyncMessage インターフェースの 場 合 はジョブ ID が 返 されます ジョブ ID とは あとで IO 結 果 を 取 得 する 際 の 識 別 に 使 われるもので 数 値 自 体 に 特 別 な 意 味 は 有 りません 非 同 期 IO な ので 実 際 に 送 信 されたメッセージ バイト 数 はまだ 判 りません レスポンスを 取 得 するメソッドは Read であって ReadString ではありません int IAsyncMessage.Read( int count); ここでの 戻 り 値 は やはりジョブ ID です 10-3 IO の 完 了 待 ちと 結 果 の 取 得 IAsyncMessage インターフェースのメソッドからは IO 結 果 を 直 接 知 る 事 はできません その 代 わ りに IEventManager インターフェースの WaitOnEvent メソッドを 使 います IEvent IEventManager.WaitOnEvent( int waittimeout, EventType type, KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 58/159

59 ); int customeventtype KI-VISA Library VISA COM ガイドブック WaitOnEvent メソッドは 既 に 動 作 を 開 始 した IO アクションが 発 生 する 完 了 イベントを 待 ちます つまりこのメソッドは イベントの 発 生 待 ち(この 場 合 は IO 完 了 待 ち)を 行 い その 結 果 を 保 持 するイ ベントを 回 収 します waittimeout パラメータはイベント 待 ちのタイムアウトです type パラメー タは 待 とうとするイベントのタイプで 非 同 期 IO の 完 了 を 待 つ 場 合 は EVENT_IO_COMPLETION か 又 は ALL_ENABLED_EVENTS でなければなりません WaitOnEvent メソッドは WaitTimeout パラメータで 指 定 された 時 間 を 上 限 としてイベントを 待 ちます イベント 待 ちが 完 了 すると そのイベントオブジェクトを 返 します メソッドの 構 文 上 は IEvent インターフェースを 返 す 事 になっていますが IO 完 了 イベントの 場 合 そのイベントオブジ ェクトは IEventIOCompletion インターフェースをサポートしているのは 間 違 い 有 りません そこ でイベントを 受 取 る 変 数 は IEventIOCompletion 型 で 宣 言 されたものを 使 います IO 結 果 の 取 得 を 行 うには WaitOnEvent メソッドから 取 得 されたイベントを IEventIOCompletion インターフェースを 通 じてアクセスします IEventIOCompletion イン ターフェースには 幾 つか 有 用 なプロパティがあります Table 10-1 IEventIOCompletion のプロパティ プロパティ int jobid int IOStatus int ReturnCount byte[] ReadBuffer string ReadBufferAsString 説 明 ジョブ ID IO 結 果 を 示 す IO のバイト 数 バイト 配 列 版 IO バッファ 文 字 列 版 IO バッファ JobID は 非 同 期 版 の WriteString や Read メソッドが 返 した 値 と 同 じです これによってイベント と IO 動 作 の 関 係 を 見 失 わないようにする 事 ができます IOStatus は VISA COM API の 発 生 す るエラーコードです 正 常 終 了 の 場 合 はゼロ 警 告 であればプラスの 値 エラーであればマイナスの 値 になります これは VISA ステータス コードと 呼 ばれるものです このコードの 詳 細 については オンライン ヘルプ 又 は 本 書 の 付 録 に 掲 載 されています ReadBuffer 及 び ReadBufferAsString プロパティのどちらを 使 っても 送 信 又 は 受 信 されたバッファを 確 認 する 事 ができます ReadBuffer 及 び ReadBufferAsString プロパティは 非 同 期 版 メソッドの Write WriteString Read の 全 ての IO 完 了 イベントに 対 して 内 容 を 確 認 できますが VISA の 仕 様 では 書 き 込 み 系 動 作 では 保 持 する 必 要 はありません KI-VISA では 書 き 込 み 系 アクションのバッファのコピーを 保 持 しますが 他 のベンダー の VISA では 必 ずしもそうなっていないので 注 意 して 下 さい 現 在 の KI-VISA の 実 装 では GPIB に 関 しては 非 同 期 IO 動 作 をサポートしていません GPIB では IAsyncMessage を 使 用 しても 同 期 動 作 となります ただし アプリケーションのプログラミング 上 の 扱 いが 同 じになるように イベントキューはサポートされています KI-VISA の 将 来 のバージョンでは 非 同 期 IO が 動 作 す るように 変 更 される 場 合 があります 10-4 IO 動 作 の 終 了 非 同 期 IO 動 作 を 終 了 する 場 合 は IEventManager インターフェースの DisableEvent メソッ ドを 呼 び 出 します void IAsyncMessage.DisableEvent( EventType type, EventMechanism mech, int customeventtype ) KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 59/159

60 DisableEvent メソッドは type パラメータで 指 定 されたイベントタイプに 関 して mech パラメータ で 指 定 されたメカニズムでのイベント 発 生 を 停 止 するように VISA に 指 示 します type に EVENT_IO_COMPLETION のような 特 定 イベントタイプを 指 定 しても 良 いし 全 てのイベントタイプを 停 止 させるために ALL_ENABLED_EVENTS を 指 定 しても 良 いでしょう mech に 関 しても EVENT_QUEUE のように 特 定 メカニズムを 指 定 しても 良 いし 全 てのメカニズムを 停 止 させるために EVENT_ALL_MECH を 指 定 しても 良 いでしょう EnableEvent でイベント 発 生 を 許 可 しないまま 非 同 期 IO を 行 った 場 合 計 測 器 との IO 自 体 は 行 われます が 結 果 を 取 得 するためのイベントは 発 生 しません またこの 場 合 は IO は 同 期 動 作 になります この 場 合 WaitOnEvent を 呼 び 出 しても NULL 参 照 が 返 ってきます DisableEvent を 呼 び 出 した 後 は 既 に 発 生 したイベントはイベント キューに 保 持 されたままになります ま た 新 規 のイベントはキューに 積 み 込 まれません イベント キューからイベントを 削 除 するには DiscardEvents メソッドを 使 います WaitOnEvent で IO 完 了 を 待 たずに 次 の 非 同 期 IO 動 作 (WriteString など)を 連 続 動 作 させた 場 合 IO メソッド 内 部 で WaitOnEvent 相 当 の 処 理 が 行 われます またこの 時 のイベントはイベントキューに 積 み 込 ま れます イベント キューのサイズを 超 えてイベントが 発 生 した 場 合 新 しいイベントは 記 録 されず 既 存 のイベントがキ ュー 内 に 維 持 されます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 60/159

61 11- イベント コールバック 10- イベント キュー では キューを 使 ったイベントの 扱 い 方 を 説 明 しました この 章 ではもう 一 つ のイベント メカニズムである イベント コールバックについて 説 明 します 11-1 サービス リクエスト 通 知 イベント コールバックはサービス リクエスト 通 知 で 最 も 頻 繁 に 利 用 されます サービス リクエスト 発 生 の 有 無 を 調 べる 単 純 な 方 法 は ReadSTB メソッドを 使 ってシリアル ポーリングを 行 う 事 です しかしその 方 法 では サービス リクエストを 検 出 したいアプリケーションは While ループや Do ル ープ あるいはタイマ イベントなどを 駆 使 して シリアル ポーリングを 定 期 的 に 行 なわなければなり ません ここで 説 明 する 方 法 は サービス リクエストが 発 生 したら 予 め 指 定 されているイベント ハン ドラをコールバックしてもらうという 方 法 です 少 し 高 度 な 方 法 なので 実 装 は 前 述 の 方 法 よりも 多 少 難 しくなります シリアル ポーリングについては IO インターフェース 依 存 の 機 能 として 13-1 シリアル ポーリング(GPIB USB VXI-11 HiSLIP) で 解 説 します シリアル ポーリング 及 びサービス リクエスト イベントは GPIB USBTMC LAN(VXI-11/HiSLIP)でのみ 利 用 する 事 が 出 来 ます VISA COM でのイベント コールバック メカニズム 一 般 にコールバック ハンドラを 扱 う DLL は アプリケーション 側 で 用 意 したコールバック 関 数 のアド レスをパラメータにしてハンドラ 登 録 関 数 を 呼 び 出 し 必 要 に 応 じてライブラリからそれを 呼 び 出 して もらうというものです VISA C API も 含 め コールバックをサポートする 多 くの DLL がこの 手 法 を 利 用 しています しかし VISA COM API でのイベント コールバックの 扱 い 方 はこれとは 全 く 異 なります 予 めアプリ ケーション 側 で 用 意 したハンドラを DLL からコールバックする 点 は 同 じなのですが そこには.NET の デリゲートの 手 法 が 関 与 します COM インターフェースを 通 じたコールバックの 手 法 は 一 般 に アプ リケーション 側 でイベント シンク インターフェースを 提 示 する 事 になります イベント シンク(イベン トの 流 し 口 )は 単 純 な 関 数 として 実 装 する 事 はできず IEventHandler インターフェースを 実 装 した COM コンポーネント クラス を 作 成 する 必 要 があります 幸 い Visual Basic や C#にはこれを 実 装 する 機 能 が 備 わっています イベント シンクの 作 成 イベント シンクを 作 成 するための 手 順 は 特 定 の COM インターフェースを 実 装 するコンポーネン ト クラスを 作 成 する 手 順 に 他 なりません この 手 順 はプログラミング 言 語 や 開 発 ツールによって 大 きく 異 なります ここでは 説 明 の 都 合 上 C#を 例 にしていますが コンポーネント クラスの 作 成 手 順 は 言 語 別 パートで 更 に 詳 細 説 明 を 行 います Visual C# 統 合 環 境 のメニューバーから Project Add Class を 選 択 して 下 さい Add New Item ダイアログが 表 示 されるので Templates から Clsss を 選 択 します また 生 成 されるクラス の 名 前 を MyEventSink.cs としておきましょう そして OK ボタンをクリックすると MyEventSink クラス が 自 動 生 成 されプロジェクトに 追 加 されます 追 加 されたクラス モジュールの Name プロパティを MyEventSink としましょう つまり 今 から 作 成 するのは MyEventSink というコンポーネント クラスです そしてクラス モジュール MyEventSink.cs には 以 下 のような 内 容 を 記 述 します using System; using Ivi.Visa.Interop; namespace VisaCom_cs2 この 部 分 は 実 際 にはプロジェクト 名 になる { /// <summary> /// Summary description for MyEventSink. /// </summary> KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 61/159

62 public class MyEventSink : IEventHandler { public MyEventSink() { } public void HandleEvent( IEventManager vi, IEvent ev, int userhandle) { IMessage msg = (IMessage)vi; short stb; stb = msg.readstb(); } } } // TODO: Add your own job depending on the stb value MyEventSink クラスは IEventHandler インターフェースから 派 生 したクラスとして 作 成 します IEventHandler には 唯 一 のメソッドとして HandleEvent があります このメソッドは VISA が 用 意 するものではなく 作 成 するアプリケーション 側 で 用 意 する 責 任 があります それはアプリケーショ ンが 呼 び 出 すメソッドではなく VISA がアプリケーションに 向 かって( 逆 方 向 に) 呼 び 出 すメソッドだか らです HandleEvent()のパラメータは IEventManager インターフェース IEvent インターフェース そして int 型 の userhandle の 3 つです IEventManager インターフェースは 実 際 には VISA セッション オブジェクト 内 に 生 息 するインターフェースなので 既 にリソース マネージャから 作 成 された VISA セッションオブジェクトの IMessage インターフェースからを 簡 単 に 参 照 することがで きます IEvent はサービス リクエストによって 生 成 されたイベント オブジェクトを 参 照 しています 最 後 の userhandle は 後 で 説 明 します ハンドラ イベントを 有 効 にする サービス リクエスト ハンドラのコールバックを 有 効 にするには InstallHandler メソッドと EnableEvent メソッドを 使 います これらはどちらも IEventManager インターフェースで 提 供 さ れるメソッドです void IEventManager.InstallHandler( EventType type, IEventHandler handler, int userhandle, int customeventtype ); void IEventManager.EnableEvent( EventType type, EventMechanism mech, int customeventtype ); InstallHandler は イベント ハンドラーの 登 録 をします イベント ハンドラーというよりは 正 確 にはイベント シンクを 登 録 すると 言 ったほうが 良 いでしょう ここではサービス リクエストのイベン ト 通 知 が 目 的 なので type パラメータには EVENT_SERVICE_REQ を 渡 します handler にはア プリケーション 側 で 用 意 されたイベント シンクに 生 息 する IEventHandler インターフェースへの 参 照 を 渡 します ここで 注 意 しなければならないのは 前 項 で 作 成 したクラス MyEventSink は そ れだけではオブジェクトとして 生 命 は 吹 き 込 まれていないので インスタンスを 作 成 しなければならな いということです そのためには 下 のようなコードでインスタンスを 作 成 しておく 必 要 があります KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 62/159

63 // //このコードはクラス モジュールではなく 通 常 の IO を 行 う 部 分 に 書 くこと // IResourceManager3 rm; IMessage msg; IEventManager evm;... rm = new ResourceManagerClass(); msg = (IMessage)rm.Open( "USB0::0x0B3E::0x1006::BBB77700::0::INSTR", AccessMode.NO_LOCK, 0, ""); evm = (IEventManager)msg; IEventHandler eh = new MyEventSink(); evm.installhandler(eventtype.event_service_req, (IEventHandler)eh, 1, 0); evm.enableevent( EventType.EVENT_SERVICE_REQ, EventMechanism.EVENT_HNDLR, 0); int r; r = msg.writestring("*cls\n"); r = msg.writestring("*ese 32\n"); r = msg.writestring("*sre 32\n"); r = msg.writestring("aaaaa\n"); // このジャンク コマンドが SRQ を 発 生 する!... evm.disableevent( EventType.EVENT_SERVICE_REQ, EventMechanism.EVENT_HNDLR, 0); このサンプルで 宣 言 されている 変 数 eh は IEventHandler インターフェース 型 で 宣 言 されていま すが このようなインターフェース 型 でインスタンスを 直 接 作 ることはできないと 前 に 説 明 しました こ こでは MyEventSink クラスのオブジェクト インスタンスを 作 成 し その 中 に 生 息 する IEventHandler インターフェースを( 暗 黙 のタイプキャスト)によって 問 合 せ その 結 果 を 変 数 eh に 保 持 する 事 になります userhandle には 任 意 の 32 ビット 整 数 を 設 定 する 事 ができます これ は サービス リクエストのイベント ハンドラ メソッド HandleEvent が 呼 び 出 された 時 にパラメー タ userhandle にそのまま 現 れます それ 以 上 の 深 い 意 味 は 有 りませんが 同 じイベント シンク を 異 なる 複 数 の VISA セッションでサービス リクエスト 通 知 に 多 重 利 用 するような 場 合 イベント ハ ンドラで 文 脈 を 識 別 する 為 に 利 用 することが 出 来 ます EnableEvent メソッドは type パラメータで 指 定 されたイベントタイプを mech パラメータで 指 定 されたメカニズムでイベントを 発 生 させるように VISA に 指 示 します サービス リクエスト 通 知 が 目 的 であれば 通 常 は type に EVENT_SERVICE_REQ を 指 定 し mech は EVENT_HNDLR を 渡 すの が 妥 当 でしょう CustomEventType パラメータは 使 用 しないので 指 定 しても 無 視 されます EnableEvent の mech パラメータには EVENT_HNDLR 以 外 にも EVENT_SUSPEND_HNDLR を 指 定 する 事 もできます EVENT_HNDLR と EVENT_SUSPEND_HNDLR 更 に DisableEvent を 呼 び 出 した 場 合 のイベント 発 生 条 件 の 違 いを 下 の 表 に 示 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 63/159

64 Table 11-1 イベント 発 生 条 件 の 比 較 状 態 その 状 態 に 遷 移 するための 条 件 動 作 Disabled DisableEvent 新 規 のイベントは 監 視 されない これが 呼 び 出 さ れた 時 にイベント キューに 未 処 理 のイベントがあ っても それを 削 除 する 事 はしない Suspended Enabled EnableEvent( mech = EVENT_SUSPEND_HNDLR) EnableEvent( mech = EVENT_HNDLR) 新 規 のイベントは 監 視 されキューに 積 み 込 まれる が コールバックは 行 わない EnableEvent が 呼 び 出 されたとき イベント キュ ーに 未 処 理 のイベントがあればそのぶんのコール バックを 行 う 以 降 新 規 のイベントは 監 視 されキューに 積 み 込 まれ 即 時 コールバックが 行 われる --- DiscardEvents イベント キュー 内 の 未 処 理 イベントを 全 て 削 除 す る Enable/Disable の 設 定 には 何 ら 影 響 しない この 状 態 で 計 測 器 からサービス リクエストが 発 生 すると イベント シンク オブジェクトの HandleEvent メソッドが VISA からアプリケーションに 向 かって 呼 び 出 されます サービス リクエストの 発 生 計 測 器 からサービス リクエストが 発 生 するのを 待 っていても 良 いのですが それなりの 理 由 が 無 け れば 計 測 器 はサービス リクエストを 発 生 しません また IEEE488.2 仕 様 の 計 測 器 の 場 合 では Service Request Enable Register や Standard Event Enable Register などを 適 切 に 設 定 しておか なければサービス リクエストを 観 測 する 事 はできません そこで ここでは 強 制 的 にサービス リク エストを 発 生 させてみることにします 上 記 サンプル 中 に 書 かれている WriteString メソッドの 呼 び 出 しで"*CLS" "*ESE 32" "*SRE 32"を 順 番 に 設 定 している 部 分 に 注 目 して 下 さい これは SPCI 仕 様 の 計 測 器 に 対 して コ マンド エラー 発 生 時 にサービス リクエストを 発 生 させるように 指 示 するためのものです 従 ってそ の 直 後 に 送 信 されるジャンク メッセージ"AAAAA"がコマンドエラーとして 処 理 され 計 測 器 はサー ビス リクエスト イベントを 発 生 します ステータス バイトの 確 認 サービス リクエストの 原 因 を 知 るには ステータス バイトの 値 を 知 る 必 要 があります しかし 残 念 な 事 に HandleEvent に 渡 されるイベント オブジェクトからは IEvent インターフェースを 駆 使 し ても ステータス バイトを 知 ることはできません ステータス バイトを 知 るには HandleEvent 内 からステータス バイト 取 得 のメソッド ReadSTB を 呼 び 出 せばよいでしょう IMessage msg = (IMessage)vi; //vi は HandleEvent で 渡 されたパラメータ short stb = msg.readstb(); サービス リクエスト 発 生 の 検 出 は KI-VISA 内 部 の 作 業 スレッド 内 で 行 なっています この 動 作 は VISA の 仕 様 によるものではなく KI-VISA の 実 装 上 の 仕 様 によるものです ハンドラ イベントを 無 効 にする サービス リクエストの 通 知 機 能 を 無 効 にするには IEventManeger インターフェースの DisableEvent を 呼 び 出 します Sub void IEventManager.DisableEvent( EventType type, EventMechanism mech, KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 64/159

65 ); int customeventtype KI-VISA Library VISA COM ガイドブック DisableEvent メソッドは type パラメータで 指 定 されたイベントタイプに 関 して mech パラメータ で 指 定 されたメカニズムでのイベント 発 生 を 停 止 するように VISA に 指 示 します type に EVENT_SERVICE_REQ のような 特 定 イベントタイプを 指 定 しても 良 いし 全 てのイベントタイプを 停 止 させるために ALL_ENABLED_EVENTS を 指 定 しても 良 いでしょう mech に 関 しても EVENT_HNDLR のように 特 定 メカニズムを 指 定 しても 良 いし 全 てのメカニズムを 停 止 させるために EVENT_ALL_MECH を 指 定 しても 良 いでしょう 更 に イベント ハンドラ 自 体 の 登 録 抹 消 も 行 なえます void IEventManager.UninstallHandler( EventType type, int userhandle, int customeventtype ); ハンドラを 示 すパラメータが 無 い 以 外 InstallHandler とパラメータ セットは 同 じです サービス リクエスト 通 知 のイベント コールバック サポートは KI-VISA 内 部 では 作 業 用 スレッドを 利 用 して 行 なわれています GPIB の 場 合 は 定 期 的 ( 約 500ms 間 隔 )に 自 動 的 に 並 行 処 理 でシリアル ポーリングを 実 行 し ます USBTMC の 場 合 はインタラプト エンドポイントの 常 時 監 視 をしてシリアル ポーリングを 並 行 処 理 します LAN(VXI-11/HiSLIP)の 場 合 は それぞれのプロトコルで 定 義 されている( 計 測 器 からの)コールバック メカニズ ムを 使 用 します ステータス バイトの 0x40 のビット(RQS ビット)が 新 規 にアサートされた 場 合 は SRQ 発 生 とみなします この 時 に 登 録 されて 有 効 化 されているイベント シンクに 対 して 即 時 イベントを 発 射 する 仕 組 みになっています 自 動 シリアル ポーリングを 行 なう 作 業 スレッドは EVENT_SERVICE_REQ を 指 定 して EnableEvent が 呼 び 出 さ れた 場 合 だけ 作 成 されます DisableEvent された 場 合 セカンダリ スレッドも 停 止 するので 自 動 シリア ル ポーリングは 一 切 行 なわれません 自 動 シリアル ポーリングは 副 作 用 も 大 きいので EVENT_SERVICE_REQ でイベント 通 知 が 有 効 になっている 場 合 のみの 限 定 的 な 動 作 になるように 設 計 されて います 自 動 シリアル ポーリング 動 作 の 開 始 停 止 の 仕 組 みは VISA の 仕 様 によるものではなく KI-VISA の 実 装 上 の 仕 様 によるものです アプリケーション 側 で 用 意 されるイベント シンクは 自 動 シリアル ポーリングのスレッド コンテキストでそのま ま 呼 び 出 されます VISA の SRQ イベント コールバックは 通 常 アプリケーションの GUI スレッドとは 異 なるス レッド コンテキストで 呼 び 出 されると 考 えて 下 さい そのため コールバックハンドラー 内 での 動 作 に 十 分 注 意 する 必 要 があります VB6 と Excel VBA の 統 合 環 境 では 特 に 深 刻 です VB6 と Excel VBA の VB エンジンはランタイム ライブラリも 含 めてスレッド セーフに 出 来 ていますが 統 合 環 境 はそうではありません 従 って 作 業 スレッドの 文 脈 で 動 作 する VB6/VBA コードをデバッガでブレークすると 統 合 環 境 は 確 実 にクラッシュします またデバッガでブレークしなくとも コールバックハンドラーから 直 接 GUI 関 連 の 操 作 を 行 なうと やはり VB6/VBA ではクラッシュします.NET Framework ではアクセス 拒 否 (Access denied)の 例 外 が 発 生 します コ ールバックハンドラーのような 作 業 スレッドの 文 脈 から GUI を 直 接 操 作 することは 出 来 ません デリゲート 機 能 などを 必 要 に 応 じて 使 用 し GUI のスレッド 文 脈 に 移 ってから GUI を 更 新 するようにして 下 さい 但 し VISA COM API 全 てスレッド セーフ(Multithreaded Model)に 設 計 されているため 作 業 スレッド 文 脈 か ら VISA COM API を 利 用 しても 問 題 はありません サービス リクエストのイベント 機 能 は コールバックの 他 にキューもサポートしています イベント キューを 使 っ たサービス リクエスト 待 ちは IO 完 了 イベントと 同 様 に WaitOnEvent メソッドを 使 用 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 65/159

66 12- KI-VISA SPY KI-VISA SPY は アプリケーションや 計 測 器 ドライバなどが 実 際 に 行 う 計 測 器 との IO を 傍 受 し ログ を 表 示 又 は 記 録 するユーティリティです KI-VISA Instrument Explorer のメニューバーから Tools Launch SPY を 選 択 すると KI-VISA SPY が 起 動 します (SPY のショートカットはデスクトップにも あります ) Figure 12-1 KI-VISA SPY 12-1 傍 受 の 開 始 と 停 止 IO トラフィックの 傍 受 を 開 始 するには KI-VISA SPY のメニューバーから Spy Capture On を 選 択 します 傍 受 を 停 止 する 場 合 は Spy Capture Off を 選 択 します 但 し これは 新 規 のデータログ 取 得 を 行 わないという 意 味 であり 高 速 で 大 量 通 信 を 行 っている 場 合 は SPY の 画 面 表 示 (ログの 追 加 と 画 面 スクロール)は 直 ぐに 停 止 しません これは キャプチャ 自 体 は 水 面 下 でマルチスレッドで 行 なわ れており SPY 画 面 への 表 示 とは 別 だからです 実 際 キャプチャそのものよりも 画 面 への 表 示 のほ うが 遥 かに 時 間 が 掛 かります そのため 大 量 通 信 の 場 合 はキャプチャを 停 止 した 後 も 暫 くの 間 SPY 画 面 が 更 新 を 続 けます この 更 新 をとめたい 場 合 には Spy No More Data メニューを 操 作 することで 即 座 に 停 止 することが できます 12-2 詳 細 情 報 の 確 認 画 面 上 側 のリストから 見 たい 項 目 を 選 択 すると 画 面 下 側 に 詳 細 が 表 示 されます Write/Read 系 統 の 各 メソッドでは IO の 内 容 が 16 進 ダンプでも 表 示 されます リストの 各 行 はメソッド 呼 び 出 し の 結 果 が 色 分 けされています 黒 文 字 表 示 の 場 合 はメソッド 呼 び 出 しが 成 功 (HRESULT=0)である 事 を 示 し 赤 文 字 表 示 の 場 合 はメソッド 呼 び 出 しが 失 敗 (HRESULT<0)である 事 を 示 しています 青 文 字 表 示 は メソッドの 呼 び 出 し 結 果 が 警 告 (HRESULT>0)である 事 を 示 しています いずれの 場 合 も 結 果 として HRESULT コードが 存 在 するため Status カラムの 16 進 表 示 部 にマウス カーソルを 持 っていくと ツールチップで HRESULT の 詳 細 説 明 を 見 る 事 ができます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 66/159

67 Figure 12-2 ステータス コードのツールチップ 表 示 アイテムがグレー( 淡 色 ) 表 示 されている 場 合 そのメソッドは 呼 び 出 しの 途 中 であり まだ 結 果 が 出 ていない 事 を 示 します 例 えば 同 期 モードでの 受 信 動 作 として IMessage インターフェースの ReadString メソッドを 呼 び 出 したあと 計 測 器 の 応 答 が 無 い 場 合 タイムアウトするまでの 間 KI-ん メソッド 呼 び 出 しが 終 了 した 段 階 で 表 示 は 黒 ( 成 功 ) 赤 ( 失 敗 ) 青 ( 警 告 ) 茶 色 (SCPI エラー)のい ずれかに 変 わります 茶 色 (SCPI エラー)だけは 扱 いが 少 し 特 殊 で これは 通 信 自 体 のエラーではなく 直 前 に 送 ったエラ ー 照 会 クエリに 対 する 計 測 器 からの 応 答 が SCPI エラーを 示 唆 している 場 合 に 着 色 表 示 されます 具 体 的 には SYST:ERR? 又 は*ESR?クエリに 対 する 応 答 が 0 以 外 の 値 の 示 した 時 に SCPI エラーと みなされます 現 在 の KI-VISA の 実 装 では SPY を 使 用 して 傍 受 できるのはメソッド 呼 び 出 しのみです プロパティのアクセス に 関 しては KI-VISA 内 部 で GetAttribute/SetAttribute メソッドを 使 用 して 実 装 されているため これ らのメソッド 呼 び 出 しとして SPY に 傍 受 されます メソッド 呼 び 出 しの 途 中 で(アイテムの 表 示 が 淡 色 表 示 の 時 に)キャプチャをオフした 場 合 メソッドの 呼 び 出 しが 完 了 したあとも 表 示 は 更 新 されません SCPI エラー 表 示 は 環 境 設 定 でそれをオンした 場 合 のみの 動 作 となります また 非 同 期 系 メソッドでのエラー 照 会 に 関 しては クエリと 応 答 の 関 連 付 けが 難 しいので 着 色 表 示 にはなりません またセミコロン 区 切 りによる 複 合 コマンドにエラー 照 会 を 混 ぜた 場 合 も 機 能 しません SCPI エラー 照 会 を 行 う WriteString ログ(SYST:ERR? 又 は*ESR?)とその 応 答 を 回 収 する ReadString ログが 極 端 に 離 れている 場 合 SCPI エラーがカラー 表 示 されない 場 合 があります KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 67/159

68 12-3 各 表 示 カラムの 説 明 Table 12-1 Item# Process ViSession I/O Resource Method Len Summary 各 表 示 カラムの 説 明 ログの 連 番 VISA コールを 行 ったプロセスの EXE 名 *32 は WOW64 上 の 32bit プロセスを 示 す ツールチップではプロセス ID とスレッド ID が 表 示 VISA-C API における VISA IO セッションの 値 該 当 する VISA アドレス (VISA エイリアスを 使 ったアクセスの 場 合 も 正 規 の VISA アドレスを 表 示 ) 該 当 する VISA COM メソッド 名 O 処 理 が 行 われたデータの 長 さ( 但 しサイズの 概 念 があるコールのみ) IO の 内 容 Status VISA コールによるステータスコード(マイナスはエラーを 示 す) ツールチップでは 該 当 コードの 説 明 文 ( 英 語 )を 表 示 Call IN Call OUT Tag メソッドコールを 開 始 した 時 点 のタイムスタンプ メソッドコールがリターンした 時 点 のタイムスタンプ ( 無 表 示 はメソッドの 所 要 時 間 が 1ms 未 満 又 は 計 測 されていない 場 合 ) USBTMC VXI-11 HiSLIP のプロトコル 内 部 で 使 われるタグ (VISA を 使 用 するアプリケーションからこの 値 にはアクセス 出 来 ないが 計 測 器 ファ ームウェアの 実 装 時 にデバッグ 目 的 で 利 用 される) 12-4 SPY ログの 保 存 キャプチャを 停 止 した 状 態 で メニューバーから File Save As を 選 択 すると SPY ログを 保 存 す る 事 ができます 保 存 された SPY ログはあとから KI-VISA SPY で 閲 覧 する 事 ができます 12-5 環 境 設 定 現 在 の KI-VISA SPY の 実 装 では テキスト 形 式 でのログ 保 存 をサポートしていません KI-VISA SPY アプリケーションの 画 面 が 出 ている 状 態 では File Exit メニューは 操 作 できません システム メニューから Close を 選 択 するか ウインドウ 右 上 のクローズ ボタンを 操 作 した 場 合 は SPY アプリケーションは 終 了 せず 単 にウインドウを 最 小 化 します ( 例 外 として 左 SHIFT キーを 押 しながらこの 操 作 をした 場 合 には SPY アプリケーションは 終 了 します ) タスクトレイに KI-VISA SPY のアイコンが 置 かれているので それをマウスで 右 クリックし Exit を 選 択 すると KI-VISA SPY は 終 了 します 終 了 操 作 が 二 度 手 間 になっていますが 不 用 意 に SPY プリケーションを 終 了 しないように そのような 設 計 になっています タスクトレイ アイコンを 右 クリックして Restore Event Window を 選 択 すると SPY ウインドウが 再 度 表 示 されます Edit Preferences メニューで 環 境 設 定 を 行 う 事 ができます この 操 作 もキャプチャ 停 止 中 のみ 可 能 です KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 68/159

69 Figure 12-3 KI-VISA SPY 環 境 設 定 (Capture Settings) Figure 12-4 KI-VISA SPY 環 境 設 定 (Display Settings) Capture Sessings このカテゴリはログの 取 り 込 みに 関 する 設 定 です Max Log Items [lines]では 画 面 表 示 できる 最 大 の 行 数 を 設 定 します 極 端 に 大 きくすると SPY アプリケーションが 扱 う 情 報 量 が 大 きくなって 重 くなるので 注 意 してください Capture XXXX Traffic は 該 当 する IO リソースタイプのトラフィックを キャプチャするかどうかを 選 択 します Unify Same Logs for WaitOnEvent() call をチェックす ると viwaitonevent() 関 数 のログで 同 一 セッション 同 一 結 果 同 一 時 刻 の 物 が 連 続 した 場 合 にそれを 統 合 します LabVIEW の 非 同 期 VISA Write/Read 関 数 が 連 続 してこの 関 数 をコールしま すが 膨 大 な 数 のログ(1ms あたり 数 百 ~ 数 千 回 コール) を 生 成 してしまうのでそれを 間 引 くのに 有 効 です Display Settings このカテゴリは 表 示 に 関 する 設 定 です Show VISA C ViSession をチェックすると ViSession の 表 示 を 行 ないます Show date at timestamp colum をチェックするとログ 表 示 に 日 付 時 刻 の 両 方 を 表 示 し そうでない 場 合 は 時 刻 のみの 表 示 となります Colour By Interface をチェックす ると IO インターフェースの 種 類 ごとに 色 分 け 表 示 をします Colour By SCPI Errors をチェックす ると SCPI エラー 照 会 クエリへの 応 答 で SCPI エラーが 示 唆 されている 項 目 を 色 分 け 表 示 します 12-6 常 に 最 前 面 表 示 SPY アプリケーションを 常 にデスクトップの 最 前 面 に 表 示 したい 場 合 は メニューバーから View Always On Top を 選 択 します この 設 定 はトグル 動 作 で 切 り 替 えられます デフォルトでは 常 に 最 前 面 表 示 するようにはなっていません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 69/159

70 12-7 KI-VISA SPY の 終 了 KI-VISA SPY のウインドウが 表 示 されている 時 は 終 了 操 作 (File Exit)してもタスク トレイ アイ ンコンになるだけで 実 際 には SPY は 終 了 しません SPY を 終 了 するには 面 倒 ですが タスク トレ イの 状 態 から 終 了 操 作 ( 右 クリック Exit)して 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 70/159

71 13- IO インターフェースに 依 存 した 処 理 13-1 シリアル ポーリング(GPIB USB VXI-11 HiSLIP) GPIB USB(USBTMC) LAN(VXI-11/HiSLIP)にはシリアル ポーリングの 機 能 があります GPIB の シリアル ポーリングは IEEE488.1 仕 様 で 定 義 されているものなので 特 にここでは 詳 しくは 説 明 しま せん USBTMC のシリアル ポーリング 機 能 は USBTMC-USB488 仕 様 で 定 義 されたクラス リクエスト READ_STATUS_BYTE によって 実 現 されています VXI-11 のシリアル ポーリング 機 能 は VXI-11 仕 様 で 定 義 された device_readstb という RPC ファ ンクションで 実 現 されています HiSLIP のシリアル ポーリング 機 能 は 内 部 の 非 同 期 通 信 ソケットを 使 って AsyncStatusQuery メッ セージを 使 って 実 現 されています VISA を 使 って 計 測 器 との IO 動 作 を 行 うプログラムからは IO インターフェースの 種 別 によらずどの シリアルポーリングも 同 じように 見 えます ステータス バイトは SCPI/IEEE488.2 仕 様 で 8 ビットが 割 り 当 てられています ステータス バイトの RQS ビット(0x40)がセットされている 状 態 を 特 に サー ビス リクエスト 発 生 状 態 といいます サービス リクエストを 検 出 する 最 も 簡 単 な 方 法 は シリアル ポーリングを 行 う 事 です シリアルポー リングを 行 うには IMessage インターフェース 又 は IAsyncMessage の ReadSTB メソッドを 使 います どちらのインターフェースを 使 用 しても 動 作 は 同 じです short IMessage.ReadSTB(); このメソッドの 使 い 方 は 特 に 説 明 するまでもないでしょう シリアル ポーリングを 行 ってステータス バイトを 返 し ます サービス リクエストを 検 出 するには ステータス バイト 中 の RQS ビット(0x 40)が 立 っているかどうか 調 べればよいでしょう シリアル ポーリング 機 能 は GPIB/ USBTMC/LAN(VXI-11/HiSLIP)で 接 続 された 計 測 器 のみ 利 用 できます シリアル ポーリングに 似 た 機 能 として SCPI/IEEE488.2 で 定 義 された"*STB?" 共 通 クエリ コマンドがあります が これはシリアル ポーリングと 同 じ 動 作 をするわけではありません またステータス バイトのビット 定 義 も 一 部 異 なります シリアル インターフェース(ASRL)では IOProtocol プロパティが VI_PROT_4882_STRS に 明 示 的 に 指 定 されている 場 合 には ReadSTB()メソッドを 利 用 できますが 実 際 には*STB?クエリを 送 出 しそのレスポンスを 数 値 変 換 して 返 します 13-2 デバイス クリアの 送 出 GPIB USBTMC LAN(VXI-11/HiSLIP)ではセレクテッド デバイス クリア(Selected Device Clear, SDC)を 送 出 する 事 ができます シリアル(ASRL)では IOProtocol プロパティが VI_PROT_4882_STRS の 場 合 にはブレーク 信 号 を 送 出 しますが そうでない 場 合 にはエラーにな ります void IMessage.Clear(); 13-3 デバイス トリガの 送 出 GPIB USBTMC LAN(VXI-11/HiSLIP)ではデバイス トリガ(Group Execute Trigger, GET)を 送 出 する 事 ができます void IMessage.AssertTrigger(TriggerProtocol protocol); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 71/159

72 AssertTrigger のパラメータ protocol に 指 定 できるのは GPIB/USBTMC/LAN の 場 合 は TRIG_PROT_DEFAULT のみです 他 の 値 は VXI bus などで 使 用 するものです シリアル(ASRL)で も IOProtocol プロパティが VI_PROT_4882_STRS の 場 合 には AssertTrigger()を 使 用 できますが 実 際 には*TRG コマンドを 送 出 します 13-4 リモート ローカルの 制 御 GPIB USBTMC HiSLIP ではリモート ローカルを 切 り 替 える 為 の ControlREN メソッドが IGpib インターフェース IUsb インターフェース IHislipInstr インターフェースにそれぞれ 用 意 され ています void IGpib.ControlREN( RENControlConst mode); void IUsb.ControlREN( RENControlConst mode); void IHislipInstr.ControlREN( RENControlConst mode); パラメータに 指 定 できるのは 以 下 の 表 に 示 されるいずれかの 一 つです Table 13-1 ControlREN のパラメータ RENControlConst GPIB_REN_DEASSERT GPIB_REN_ASSERT GPIB_REN_GTL_AND_DEASSERT 説 明 REN ラインをリセットする REN ラインをセットする Go To Local コマンドを 送 り 更 に REN ラインをリセットする GPIB_REN_ASSERT_AND_ADDRESS REN ラインをセットし 更 に 計 測 器 にアドレスコマンドを 送 る GPIB_REN_LLO GPIB_REN_ADDRESS_AND_LLO GPIB_REN_GTL Local Lockout コマンドを 送 る 計 測 器 にアドレスコマンドを 送 り 更 に Local Lockout コマンド を 送 る Go To Local コマンドを 送 る VXI-11 仕 様 にはリモート ローカルを 制 御 する 機 能 が 備 わっていますが VISA の ITcpipInstr インターフ ェースではそれを 利 用 するメソッドが 欠 落 しています 13-5 コントローラ インターフェース 機 能 (GPIB) これまでの 説 明 では 一 度 も 登 場 していませんが GPIB の 場 合 は INSTR リソース 以 外 に INTFC リソ ースを 使 う 事 が 出 来 ます INTFC というリソース タイプは( 計 測 器 ではなく)GPIB ボードのコントロー ラ インターフェースを 操 作 するためのリソースです INTFC リソースをオープンするには 次 のように 記 述 します IGpibIntfc intfc = (IGpibIntfc)rm.Open( "GPIB0::INTFC", AccessMode.NO_LOCK, 0, ""); IGpibIntfcMessage intfcm = (IGpibIntfcMessage)intfc; ここで 新 しい COM インターフェース 型 が 2 つ 登 場 します IGpibIntfc インターフェースと IGpibIntfcMessage インターフェースです これら 2 つの COM インターフェースは GPIB INTFC リソースでオープンした VISA セッションでは 必 ずサポートされています KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 72/159

73 IGpibIntfc インターフェース KI-VISA Library VISA COM ガイドブック 名 前 が 示 す 通 り GPIB インターフェース 機 能 を 低 レベル 操 作 するためのインターフェースです 基 本 的 に GPIB バスのユニライン メッセージ 操 作 (IFC REN ATN など)と ATN TRUE モードにおけるコ マンドの 送 出 を 行 う 機 能 が 用 意 されています 比 較 的 利 用 頻 度 が 高 いと 思 われるものを 下 の 表 に 示 します 表 に 示 されているもの 以 外 のメソッド プロパティについては KI-VISA オンライン ヘルプを 参 照 して 下 さい Table 13-2 IGpibIntfc インターフェースでよく 使 われるメソッド メソッド SendIFC ControlREN ControlATN PassControl Command 説 明 IFC 信 号 を 送 出 し CIC(Controller In Charge)に 移 行 する REN ラインを 制 御 する ATN ラインを 制 御 する 指 定 されたアドレスの 装 置 に CIC の 権 利 を 譲 る ATN TRUE 状 態 で 任 意 のコマンドを 送 信 する IGpibIntfcMessage インターフェース GPIB インターフェース 機 能 を 低 レベル 操 作 するもののうち デバイス メッセージを 操 作 するものが 用 意 されたインターフェースです メソッドとプロパティのセットは IMessage インターフェースとよく 似 ています 比 較 的 利 用 頻 度 が 高 いと 思 われるものを 下 の 表 に 示 します 表 に 示 されているもの 以 外 のメソッド プロパティについては KI-VISA オンライン ヘルプを 参 照 して 下 さい Table 13-3 IGpibIntfcMessage インターフェースでよく 使 われるメソッド メソッド WriteString Write ReadString Read AssertTrigger 説 明 デバイス メッセージを 送 信 する ただし ATN TRUE 部 分 のアドレッシング コマンドは 送 出 せず ATN FALSE 部 分 のみの 送 出 をする デバイス メッセージをバイナリで 送 信 する ただし ATN TRUE 部 分 のアド レッシング コマンドは 送 出 せず ATN FALSE 部 分 のみの 送 出 をする デバイスからレスポンス メッセージを 受 信 する ただし ATN TRUE 部 分 の アドレッシング コマンドは 送 出 せず ATN FALSE 部 分 のみを 単 純 に 受 信 する デバイスからレスポンス メッセージをバイナリで 受 信 する ただし ATN TRUE 部 分 のアドレッシング コマンドは 送 出 せず ATN FALSE 部 分 のみを 単 純 に 受 信 する デバイス トリガ(GET)を 送 信 する ただし リスナー アドレスの 設 定 は 行 な わない WriteString/Write/ReadString/Read は IMessage インターフェースで 用 意 されている 同 名 メソッドとよく 似 た 動 作 をします しかし IGpibIntfcMessage 版 では アドレッシング コマン ドなどの ATN TRUE パートは 一 切 送 出 されません アドレッシング コマンドは IGpibIntfc インタ ーフェースの Command メソッドを 使 って 事 前 に 行 っておく 必 要 があります 例 えば Command と WriteString を 上 手 く 組 み 合 わせれば 複 数 リスナーを 指 定 したメッセージの 送 出 を 行 う 事 も 可 能 です IResourceManager3 rm = new ResourceManagerClass(); IGpibIntfc intfc = (IGpibIntfc)rm.Open( "GPIB0::INTFC", AccessMode.NO_LOCK, 0, ""); IGpibIntfcMessage intfcm = (IGpibIntfcMessage)intfc; intfc.sendifc(); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 73/159

74 intfc.controlren( RENControlConst.GPIB_REN_ASSERT); short intradrs = intfc.primaryaddress; byte[] cmd = { 0x3F, (byte)(0x40 + intradrs), 0x20 + 2, 0x20 + 3, }; //UNL //TA0 //LA2 //LA3 int r; r = intfc.command(ref cmd, 4); //Sends UNL/TA0/LA2/LA3 r = intfcm.writestring("curr 3.0\n"); //Sends a dev-msg to instruments intfc.close(); GPIB INSTR リソースと 異 なり GPIB INTFC リソースでオープンされた VISA セッションは IMessage や IGpib インターフェースを 実 装 していません その 代 わりに IGpibIntfc と IGpibIntfcMessage インタ ーフェースを 実 装 しています IGpibIntfc と IGpibIntfcMessage インターフェースは GPIB のボード レベル ファンクションを 利 用 す るためのものです これらを 使 いこなすには IEEE488.1 に 関 する 知 識 が 必 要 になります NI 互 換 ボードでの GPIB INSTR リソースで VISA セッションから Close()メソッドを 呼 び 出 すと 該 当 GPIB ボードの REN(Remote Enable)ラインがディセーブル 状 態 になります この 場 合 そのボードに 接 続 された 全 ての GPIB 計 測 器 がローカル 操 作 に 戻 ります この 動 作 が 計 測 アプリケーションにとって 不 都 合 になる 場 合 は INSTR リソースへの Close() 操 作 をアプリケーションの 終 了 時 に 行 うように 調 整 して 下 さい ここから 先 は プログラミング 言 語 ごとによって 異 なる 内 容 を 説 明 します KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 74/159

75 14- 数 値 パラメータの 書 式 制 御 (FormattedIO488) この 章 では VISA COM API が 提 供 する 書 式 制 御 コンポーネント FormattedIO488 について 説 明 し ます FormattedIO488 は 計 測 器 通 信 インターフェースに 対 して 直 接 IO 処 理 を 行 うものではありません しかし 計 測 器 との IO 処 理 で 必 要 な 数 値 書 式 変 換 を 行 ったり IEEE488.2 で 定 義 されたブロック データと 配 列 変 数 との 交 換 を 行 ったりする 機 能 があります FormattedIO488 を 使 用 する 際 計 測 器 のコマンド 体 系 が IEEE488.2 仕 様 に 準 拠 している 必 要 があります そ うでない 古 い 設 計 の 計 測 器 では 期 待 通 りには 動 作 しません SCPI コマンド 言 語 に 対 応 した 計 測 器 は IEEE488.2 仕 様 に 必 ず 準 拠 しています *IDN?クエリに 応 答 できる 計 測 器 が 全 て IEEE488.2 や SCPI 仕 様 に 準 拠 しているわけではありません 計 測 器 をスキャンする 多 くのユーティリティ(NI-MAX Agilent Connection Expert KI-VISA Instrument Explorer 等 ) が*IDN?クエリを 投 げる 為 それに 反 応 させる 為 だけに*IDN?クエリを 実 装 した 計 測 器 も 多 数 存 在 します 14-1 FormattedIO488 コンポーネント オブジェクトの 作 成 FormattedIO488 コンポーネントのオブジェクトは 他 の IO コンポーネントのようにリソース マネー ジャから 作 成 するのではなく リソース マネージャを 作 成 するときと 同 じように new 演 算 子 を 使 って 単 独 に 作 成 します // リソース マネージャの 作 成 IResourceManager rm = new ResourceManagerClass(); //フォーマット IO488 の 作 成 IFormattedIO488 fmtio = new FormattedIO488Class(); // VISA セッションのオープン fmtio.io = (IMessage)rm.Open("GPIB0::3::INSTR", AccessMode.NO_LOCK, 0, ""); FormattedIO488 コンポーネントを 操 作 する 時 の COM インターフェースは IFormattedIO488 です ここでは 変 数 fmtio でそれを 参 照 します VISA セッションをオープンする 際 は 受 取 変 数 を 別 に 用 意 するのではなく IFormattedIO488 の IO プロパティで 受 けるようにします これは FormattedIO488 のオブジェクトが 計 測 器 IO の 矛 先 を 知 るのに 必 要 な 設 定 です 以 降 は IMessage インターフェースのメソッドを 使 うのではなく IFormattedIO488 インターフ ェースのメソッドを 使 って 計 測 器 と 通 信 します ( 勿 論 IO プロパティ つまり IMessage インターフェ ースを 通 じて 通 常 の WriteString/ReadString 等 を 使 用 する 事 は 可 能 です ) 14-2 コマンドとレスポンスの 送 受 信 ここでは 順 を 追 って コマンドの 送 受 信 の 方 法 を 説 明 していきます WriteString 単 純 にコマンド 文 字 列 を 送 出 します // 単 純 なコマンド 文 字 列 の 送 信 fmtio.writestring("outp 1", true); //フラッシュ 指 定 付 なので 改 行 コードの 指 定 は 不 要 IMessage インターフェースにも 同 名 のメソッドがありますが IFormattedIO488 では 構 文 が 違 います void IFormattedIO488.WriteString(string data, bool flushandend); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 75/159

76 WriteString メソッドでは data( 送 出 したいコマンド 文 字 列 )の 他 に flushandend パラメータ が 追 加 されています これを true に 指 定 すると このメソッドはコマンド 文 字 列 を 計 測 器 に 直 ちに 送 信 します その 際 ターミネーション キャラクタ (TerminationCharacter プロパティで 指 定 中 のコード 通 常 は 0x0A) 及 びターミネーション マーク(GPIB の EOI 信 号 もしくは USBTMC/VXI- 11/HiSLIP での 相 当 コード)が 自 動 的 に 付 加 されます false にした 場 合 は この 時 点 ではコマンド 文 字 列 は 送 出 されず バッファリングされたまま 保 留 されます バッファリングされたまま 送 出 されていないコマンドは FlushWrite メソッドを 明 示 的 に 呼 び 出 す ことで 一 気 に 送 出 する 事 ができます 先 ほどの 例 を バッファリングとフラッシュの 2 段 階 に 分 けた 書 き 方 をすると 次 のようになります // 単 純 なコマンド 文 字 列 の 送 信 fmtio.writestring("outp 1", false); fmtio.flushwrite(true); //バッファ 送 出 コマンド 文 字 列 は 終 端 される ここで FlushWrite メソッドには sendend パラメータが 付 きます void IFormattedIO488.FlushWrite (bool sendend); FlushWrite メソッドは そのパラメータに 関 わらずフラッシュ 処 理 ( 溜 まっているバッファ 内 容 の 送 出 )を 行 います sendend パラメータが true の 場 合 は ターミネーション キャラクタ LF(0x0A) 及 びターミネーション マーク(GPIB の EOI 信 号 もしくは USBTMC/VXI-11/HiSLIP での 相 当 コード)が 自 動 的 ターミネーション キャラクタとして LF(0x0A)を 送 出 しますが false の 場 合 はそれらを 一 切 送 出 しません // 単 純 なコマンド 文 字 列 の 送 信 fmtio.writestring("outp 1", false); fmtio.flushwrite(false); //バッファ 送 出 コマンド 文 字 列 は 終 端 されない この 例 の 場 合 は コマンドが 終 端 されないため 送 出 された"OUTP 1"というコマンド 文 字 列 は 計 測 器 側 では 恐 らく 処 理 されないでしょう 従 って ASCII 文 字 列 ベースのコマンドを 送 出 する 際 は 実 用 的 には 必 ず 終 端 させる 必 要 があります 但 し 応 用 的 な 使 い 方 をした 場 合 次 のような 例 は 期 待 通 りに 動 作 します //セミコロン 区 切 りの 複 合 コマンドを 断 片 でバッファリング( 計 測 器 が SCPI 複 合 構 文 に 対 応 する 事 ) fmtio.writestring(":volt 30;", false); // 最 後 にセミコロンが 付 く fmtio.writestring(":curr 1.0;", false); // 最 後 にセミコロンが 付 く fmtio.writestring(":outp 1", false); //バッファ 内 容 を 一 気 に 送 出 fmtio.flushwrite(true); この 例 では 各 コマンドが 一 行 ずつ 送 出 されるのではなく SCPI の 複 合 コマンドの 形 式 で 送 られてい ます (セミコロンがセパレータに 使 われている 事 コマンドの 記 述 が 最 上 位 ノードからの 文 脈 に 強 制 されている 点 に 注 意 ) これは 次 のような 記 述 と 等 価 な 動 作 です fmtio.writestring(":volt 30;:CURR 1.0;:OUTP 1", true); ReadString 単 純 にレスポンスを 読 み 込 み そのまま 文 字 列 として 返 します // クエリを 送 信 してそのレスポンスを 読 み 込 む fmtio.writestring("*idn?", true); string stridn = fmtio.readstring(); string IFormattedIO488.ReadString(); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 76/159

77 IMessage インターフェースの 同 名 メソッドと 違 い 受 信 最 大 バイト 数 を 指 定 する 引 数 がありません ( 受 信 最 大 バイト 数 は FormattedIO488 によって 自 動 的 に 決 定 されますが 詳 細 は 後 述 します ) WriteNumber 単 純 な( 配 列 でない)スカラ 量 のパラメータを 送 る 場 合 に 使 用 します void IFormattedIO488.WriteNumber( object data, IEEEASCIIType type, bool flushandend ); object には 数 値 変 数 ( 又 は 直 値 )などのオブジェクトを 渡 します type には 該 当 するデータ 型 を 指 定 します flushandend が true の 場 合 はターミネーション キャラクタ( 及 びターミネーション マーク)と 共 にすぐに 送 出 を 行 い false の 場 合 はバッファリングだけ 行 います 但 し コマンドとセットで 送 れるわけではなく あくまでもパラメータ 部 分 のみです 先 行 して 送 ってい る"VOLT"コマンドの 後 ろにスペースが 空 いている 点 に 注 意 して 下 さい SCPI/IEEE488.2 計 測 器 で は コマンドとパラメータの 間 に 空 白 が 必 要 です // DOUBLE 型 パラメータを 送 信 する fmtio.writestring( "VOLT ", false); fmtio.writenumber( 50.1, IEEEASCIIType.ASCIIType_R8, true); 例 では 最 終 的 に"VOLT 50.1\n"が 送 出 されます ReadNumber 単 純 な( 配 列 でない)スカラ 量 のレスポンスを 受 け 取 る 場 合 に 使 用 します object IFormattedIO488.ReadNumber( IEEEASCIIType type, bool flushtoend ); type には 予 期 されるデータ 型 を 指 定 します flushtoend が true の 場 合 はターミネーション 条 件 に 遭 遇 する(ターミネーション キャラクタ 又 はターミネーション マークを 受 信 )するまで 待 ち 続 け ます // クエリを 送 信 fmtio.writestring("meas:volt?", true); // DOUBLE 型 レスポンスを 受 信 し 直 接 DOUBLE 型 変 数 に 格 納 する double dmeasvolt = (double)fmtio.readnumber(ieeeasciitype.asciitype_r8, true); WriteList リストとして 事 前 に 列 挙 された 複 数 のパラメータを 送 る 場 合 に 使 用 します パラメータ 同 士 のセパレ ータも 任 意 に 指 定 できます void IFormattedIO488.WriteList( ref object data, IEEEASCIIType type, string listseparator, bool flushandend ); object には 数 値 や 文 字 列 を 格 納 した 配 列 を 渡 します type には 該 当 するデータ 型 を 指 定 します listseparator には 送 出 する 際 のセパレータ 文 字 を 指 定 します 送 出 するコマンドにもよりま すが 多 くの 場 合 はカンマかスペースでしょう flushandend が true の 場 合 はターミネーション キャラクタ( 及 びターミネーション マーク)と 共 にすぐに 送 出 を 行 い false の 場 合 はバッファリング だけ 行 います 但 し コマンドとセットで 送 れるわけではなく あくまでもパラメータ 部 分 のみです 先 行 して 送 ってい る"SYST:TIME"コマンドの 後 ろにスペースが 空 いている 点 に 注 意 して 下 さい SCPI/IEEE488.2 計 測 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 77/159

78 器 では コマンドとパラメータの 間 に 空 白 が 必 要 です また セパレータに 2 種 類 以 上 の 文 字 を 同 時 に 指 定 する 事 はできません // リストの 送 信 short[] lst = { 23, 59, 45, }; Object o = lst; fmtio.writestring("syst:time ", false); fmtio.writelist( ref o, IEEEASCIIType.ASCIIType_I2, ",", true); この 例 では "SYST:TIME 23,59,45\n"が 送 出 されます ReadList 一 定 のセパレータで 区 切 られた 複 合 レスポンスを 分 解 して 配 列 として 返 します object IFormattedIO488.ReadList( IEEEASCIIType type, string listseparator ); type には 予 期 されるデータ 型 を 指 定 します listseparator には レスポンスとして 予 期 される セパレータ 文 字 を 指 定 します 複 数 フィールドを(カンマ 区 切 りで) 返 すクエリに 対 してはカンマを 単 一 レスポンスを 返 すクエリを 複 数 結 合 させた 複 合 クエリの 場 合 にはセミコロンを それぞれ 指 定 する とよいでしょう またこれらの 条 件 が 合 成 されたケース(レスポンスのセパレータがカンマとセミコロン の 混 在 の 時 )では listseparator に",;"のような 複 数 を 指 定 する 事 もできます (WriteList メソッドでは 複 数 指 定 はエラーになります ) // レスポンスのリストを 分 解 する fmtio.writestring("*idn?", true); String[] s = (String[])fmtIO.ReadList(IEEEASCIIType.ASCIIType_BSTR, ","); // 受 け 取 り 配 列 を System.Array 型 で 受 け 取 っても 良 い //Array a = (Array)fmtIO.ReadList(IEEEASCIIType.ASCIIType_BSTR, ","); この 例 では "*IDN?"クエリに 対 するレスポンス( 機 種 情 報 を 示 す 4 つのフィールドがある)を 配 列 の 各 要 素 に 分 解 して 格 納 します 例 えば s[0]には 計 測 器 ベンダー 名 s[1]には 機 種 名 といった 具 合 です 複 数 の 数 値 型 フィールドを 返 すような 場 合 ( 複 数 の 計 測 データを 照 会 するような 場 合 )であ れば 受 け 取 り 配 列 を double[]にしてデータ 型 指 定 を ASCIIType_R8 (8 バイト 型 の 実 数 つまり double)にすれば 動 作 します WriteIEEEBlock これは SCPI/IEEE488.2 仕 様 で 規 定 化 されている 任 意 ブロック データを 扱 うものです ブロック デ ータは ASCII と 対 比 した 言 い 方 として BINARY データ( 但 し 2 進 数 という 意 味 ではなく)と 表 現 され る 場 合 もあります WriteIEEEBlock メソッドは WriteNumber や WriteList と 違 って コマ ンド 部 分 とパラメータ 部 分 の 両 方 を 同 時 指 定 する 事 が 出 来 ます void IFormattedIO488.WriteIEEEBlock( string command, object data, bool flushandend ); command は 送 出 したいコマンドを 指 定 します data は 配 列 を 指 定 します flushandend が true の 場 合 はターミネーション キャラクタ( 及 びターミネーション マーク)と 共 にすぐに 送 出 を 行 い false の 場 合 はバッファリングだけ 行 います IEEE488.2 ブロック データは 通 常 の ASCII パラメータとは 違 った 形 式 になっています 抽 象 的 に 表 現 すると 下 記 のようになります #<digit_width><length_info><block_data> KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 78/159

79 #0<block_data>ブロック データは 必 ず#で 始 まります 続 く<digit_width>は 1 桁 の 数 字 (1~9)になります これは その 後 ろに 来 る<length_info>の 表 現 上 の 桁 数 を 示 しています 例 えば 先 頭 が#4 で 始 まった 場 合 digit_width=4 という 意 味 になり これは<length_info>が 4 桁 で 表 現 されている 事 を 意 味 します 例 1( 固 定 長 ブロック データ): #41024<データ><データ><データ>...<データ> この 例 では 長 さ 1024 を 4 桁 の 形 式 で 宣 言 し 実 際 のデータ(バイト)が 1024 個 続 くと 見 なします 具 体 的 なコマンド 例 では :TRAC:DATA #41024<データ 0><データ 1><データ 2>...<データ 1023>,AUTO<LF^END> といった 感 じになります パラメータ(この 例 では 第 一 パラメータがブロック 第 二 パラメータが AUTO というキャ ラクタ) 自 体 には 改 行 コードは 付 きませんが プログラム メッセージ 全 体 の 終 端 としてターミネーションされま す <digit_width>は 1~9 の 数 字 であると 書 きましたが 例 外 的 に 0(ゼロ)の 場 合 も 存 在 します これは ヘッダ 部 分 で 明 示 的 に 全 長 を 表 現 出 来 ない(この 時 点 では 決 定 できない)ようなケースです 例 えば 半 永 久 的 にストリ ームデータを 流 し 続 けるような 場 合 などがこれに 該 当 します 例 2( 不 定 長 ブロック データ): #0<データ><データ><データ>...<データ> この 場 合 <length_info>は 0 桁 での 表 現 (つまり 表 現 しない)となり 直 接 ブロック データが 続 きます この 形 式 では 不 定 長 連 続 通 信 が 継 続 する 限 りターミネーションされる 事 はありません 継 続 するのをやめたい 場 合 に は 最 後 の<データ>の 後 に LF(0x0A)とターミネーション マーク(END)が 付 きます この 方 式 は キャラクタで はないターミネーション マーク(END end フラグなど)を 表 現 できる 限 られた 通 信 インターフェース(GPIB, USBTMC, VXI-11, HiSLIP 等 )でのみ 成 立 します シリアルやソケットでは 成 立 しません 具 体 的 なコマンド 例 では :TRAC:DATA #0<データ 0><データ 1><データ 2>...<データ 876><LF^END> といった 感 じになります 但 し パラメータ(この 例 では 唯 一 のパラメータがブロック データ) 自 体 に 改 行 コードが 付 いているのではありません あくまでもプログラム メッセージ 全 体 に 対 するターミネーションです 不 定 長 パラ メータは IEEE488.2 仕 様 書 で Indefinite Length Data( 不 定 長 データ) に 該 当 するため そのパラメータより 後 に 別 のパラメータが 続 いたり セミコロン 区 切 りで 別 のコマンドを 複 合 させることは 禁 じ 手 になっています ここで"TRAC:DATA"コマンドにブロック データを 渡 す 例 を 幾 つか 見 ていきます このコマンドが 何 をする 物 なのかはここでは 重 要 ではありません 単 にブロック データを 使 用 するコマンドの 一 例 と 考 えて 下 さい 実 際 のブロック データのバイナリイメージと 照 合 するため KI-VISA SPY で 確 認 した 実 際 のトラフィックと 合 わせて 確 認 します ここでは 話 を 単 純 にするため 僅 か 8 バイトのブロック デー タを 計 測 器 に 送 信 します // 送 信 するバイト 配 列 byte[] abyblockdata = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,}; // 配 列 を 送 信 し LF で 終 端 する fmtio.writeieeeblock("trac:data", abyblockdata, false); fmtio.flushwrite(true); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 79/159

80 Figure 14-1 ブロック データの 送 出 (byte[] 配 列 ) この 例 では byte[] 配 列 ( 全 部 で 8 バイト)を 渡 しています #の 後 に 1 桁 で 8 バイト 長 を 宣 言 し ているのがわかります そのあとに 続 く 8 バイトが 実 際 に 渡 された 配 列 のイメージです この 例 では 最 後 に LF(0x0A)が 付 加 されている 点 に 注 意 して 下 さい これは FlushWrite メソッドに true が 渡 された 為 にそのような 動 作 になっています 次 は short(16 ビット 整 数 )の 例 です // 送 信 する 16 ビット 整 数 配 列 short[] aiblockdata = { 0x0001, 0x0203, 0x0405, 0x0607, }; // short 配 列 を 送 信 し LF で 終 端 する(ビッグ エンディアン) fmtio.instrumentbigendian = true; fmtio.writeieeeblock("trac:data", aiblockdata, false); fmtio.flushwrite(true); WriteIEEEBlock メソッドは 様 々な 配 列 型 を 引 数 に 指 定 できるので short 配 列 でも 同 じように 記 述 できます 但 し 16 ビット 以 上 の 幅 を 持 つデータ 型 ではエンディアンに 注 意 しなければなりませ ん エンディアンは InstrumentBigEndian プロパティで 指 定 できます true でビッグ false でリトルになります (デフォルトはビッグ ) この 例 ではビッグ エンディアンを 指 定 するので 実 行 す ると 次 のようなログを 観 測 できます Figure 14-2 ブロック データの 送 出 (short[] 配 列 Big Endian) KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 80/159

81 リトルに 指 定 した 場 合 は 次 のようになります // 送 信 する 16 ビット 整 数 配 列 short[] aiblockdata = { 0x0001, 0x0203, 0x0405, 0x0607, }; // short 配 列 を 送 信 し LF で 終 端 する(リトル エンディアン) fmtio.instrumentbigendian = false; fmtio.writeieeeblock("trac:data", aiblockdata, false); fmtio.flushwrite(true); Figure 14-3 ブロック データの 送 出 (short[] 配 列 Little Endian) エンディアンとは 2 バイト 以 上 の 大 きさを 持 つデータをメモリ 上 又 は 伝 送 経 路 上 に 並 べた 時 最 上 位 バイトと 最 下 位 バイトのどちらが 先 に 来 るかを 意 味 する 言 葉 です 例 えば UInt32 型 のデータが 数 値 0x であ った 場 合 メモリや 伝 送 経 路 上 で という 順 序 に 並 んだものをビッグ エンディアン という 順 序 に 並 んだものをリトルエンディアンと 呼 びます コンピュータ システムのメモリ 上 では CPU のタイプによってエンディアンが 決 定 します モトローラ 系 の CPU で はビッグ インテル 系 の CPU ではリトルになります 伝 送 経 路 上 の 場 合 は 複 数 CPU の 都 合 が 混 在 するため その 伝 送 技 術 の 背 景 になった 関 連 技 術 や 標 準 を 規 定 した 企 業 や 業 界 の 都 合 等 で 決 まる 場 合 が 多 いようです 例 えば UNIX ベースで SUN Micrososystems が 大 きく 関 与 したネットワーク 転 送 (LAN)ではビッグが 標 準 であ り Microsoft や Intel が 大 きく 関 与 した USB 関 連 技 術 ではリトルが 標 準 です SCPI/IEEE488.2 のような 計 測 器 インターフェースの 場 合 は Hewlett Packard( 現 Agilent Technologies)の HP-IB という 歴 史 的 背 景 からビッ グが 標 準 のようです ReadIEEEBlock このメソッドは SCPI/IEEE488.2 で 規 定 されているブロック データのレスポンスを 受 信 します object IFormattedIO488.ReadIEEEBlock( IEEEBinaryType type, bool seektoblock bool flushtoend ); type は 予 期 されるバイナリブロックのデータ 型 を 指 定 します seektoend が true の 場 合 受 信 データ 中 のシャープ 文 字 (#)に 遭 遇 するまで 検 索 を 行 います (#に 遭 遇 するまでのデータは 捨 てら れます ) これは 受 信 したデータの(#で 始 まる)ヘッダ 部 分 より 手 前 に(#を 含 まない)ゴミが 含 まれ ていても 正 常 動 作 する 為 の 措 置 です seektoend が false の 場 合 はこの 検 索 を 行 いませんが 受 信 データが# 文 字 で 始 まっていなければなりません flushtoend が true の 場 合 は ターミネ ーション 条 件 に 遭 遇 するまで 待 ちます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 81/159

82 計 測 器 から 送 られてくるブロック データは SCPI/IEEE488.2 仕 様 に 従 って 長 さ 情 報 もしくは 明 示 的 な 終 端 条 件 が 明 確 化 されていますが データ 形 式 に 関 する 情 報 は 含 まれていません 従 って アプ リケーションがデータを 受 信 する 際 に 予 期 されるデータ 形 式 を 明 示 的 に 指 定 する 必 要 があります 通 常 はレスポンスデータを 要 求 するクエリの 構 文 やそれ 以 前 に 計 測 器 に 指 定 してある 諸 条 件 等 から 形 式 は 推 測 出 来 る 筈 です ( 少 なくとも 計 測 器 のマニュアルには 明 記 されています ) //ブロック データを 受 信 し ビッグ エンディアンの short 配 列 として 解 釈 する fmtio.instrumentbigendian = true; fmtio.writestring("trac:data?", true); short[] x = (short[])fmtio.readieeeblock(ieeebinarytype.binarytype_i2, true, true); この 例 では ビッグ エンディアンを 指 定 し ブロック データのレスポンスを 要 求 する "TRAC:DATA?"クエリを 送 出 し そのレスポンスを 受 信 します ここでは ブロック データが short[] 配 列 に 相 当 すると 事 前 に 分 かっている 物 とします 実 際 の 計 測 器 が 返 すレスポンスと ReadIEEEBlock メソッドに 指 定 する 形 式 が 合 致 しない 場 合 は 予 期 しないデータで 充 填 されている 場 合 があるので 注 意 して 下 さい 配 列 に Char, UInt16, UInt32 は 使 えません これは FormattedIO488 の 制 約 です このコンポーネントが 提 供 する IFormattedIO488 インターフェースは 元 々Automation 互 換 (OLE Automation 互 換 )の VARIANT 型 に 依 存 している 為 Automation で 扱 えない 符 号 なし 16 ビット 符 号 なし 32 ビット 符 号 付 き 8 ビット の 配 列 は 扱 う 事 ができません この 場 合 は byte, Int16, Int32 等 の 類 似 した 型 で 便 宜 上 宣 言 し 必 要 に 応 じてタイプキャストを 行 う 必 要 があります また ブロック データが 計 測 器 依 存 の 構 造 体 になって いるようなケースにも 対 応 できません この 場 合 も byte[] 配 列 などに 置 き 替 えて 処 理 する 必 要 があります 14-3 バッファ サイズ FormattedIO488 の Write/Read 関 連 のメソッドでは パラメータ 次 第 でバッファリングが 行 われる 事 を 説 明 しました この 場 合 のバッファ サイズは 幾 つになるでしょうか このバッファ サイズは VISA 仕 様 書 には 明 確 に 記 述 されていませんが どうやら 1000 に 成 ってい るようです このサイズを 設 定 するには SetBufferSize メソッドを 使 用 します void IFormattedIO488.SetBufferSize( BufferMask mask, int size ); mask には IO_OUT_BUF IO_IN_BUF 又 はその 論 理 OR を 指 定 します それぞれ 出 力 バッフ ァ(Write 関 連 ) 入 力 バッファ(Read 関 連 ) 同 時 指 定 を 意 味 します Write 系 の 動 作 で 送 出 したいコマンド( 又 はクエリ)のサイズが 出 力 バッファ サイズ 以 内 に 収 まって いる 場 合 flushandend パラメータが false を 指 定 されている 場 合 には コマンドを 送 出 せずに バッファリングのみを 行 います しかし それを 連 続 的 に 動 作 させ 出 力 バッファ サイズに 空 きが 無 くなった 場 合 FormattedIO488 は 自 動 的 にコマンドの 送 出 を 行 います flushandend が true に 指 定 されている 場 合 は バッファ サイズとは 関 係 なくすぐにコマンドは 送 出 されます Read 系 の 動 作 では バッファ サイズは IO コンポーネントに 対 する IMessage.Read メソッド 呼 び 出 しでの 最 大 受 信 バイト 数 指 定 に 利 用 されます 従 って このバッファ サイズを 極 端 に 小 さくすると 本 来 の 受 信 レスポンスが 尻 切 れ 扱 いになる 可 能 性 があり 結 果 として ReadNumber や ReadList などが 期 待 通 りの 結 果 を 返 さない 場 合 があります Write 動 作 で flushandend=true に 設 定 した 場 合 でも バッファ サイズが 極 端 に 小 さい 時 は IO 動 作 が 異 なります 例 えばバッファ サイズを 5 にした 場 合 送 出 されるコマンドは 5 バイトずつ 小 分 けされて 最 終 的 な IO 処 理 に 回 されます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 82/159

83 Write 動 作 でバッファ サイズをデフォルトよりも 小 さくする 必 要 があるのは 例 えば 計 測 器 の RS232 インターフ ェースで 計 測 器 側 の 受 信 バッファが 極 端 に 小 さい 場 合 などです この 場 合 計 測 器 側 のバッファオーバーランを 避 けるためにバッファを 小 さくして 運 転 する 方 法 が 考 えられます フロー 制 御 等 が 作 動 する 場 合 には この 方 法 でコマンド 送 信 を 小 刻 みにする 出 来 る 場 合 があります Write 動 作 でバッファ サイズをデフォルトよりも 大 きくする 必 要 があるのは 長 大 なブロック データを 間 欠 では なく 一 気 に 送 出 したい 場 合 です Read 動 作 でバッファ サイズをデフォルトよりも 小 さくする 必 要 があるのは 意 図 的 に 間 欠 受 信 をするような 場 合 です Read 動 作 でバッファ サイズをデフォルトよりも 大 きくする 必 要 があるのは 長 大 なブロック データを 間 欠 では なく 一 気 に 受 信 したい 場 合 です KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 83/159

84 15- 数 値 パラメータの 書 式 制 御 (.NET Framework) この 章 では.NET Framework の 標 準 クラス ライブラリを 使 用 した 書 式 制 御 の 手 法 と 注 意 点 につい て 説 明 します 15-1 数 値 文 字 列 変 換 計 測 器 のコマンドに 数 値 パラメータを 渡 す 場 合 元 のデータを 格 納 する 数 値 型 クラスの ToString()メ ソッドを 使 います // 文 化 依 存 を 適 用 しない Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; // volt 設 定 値 を 送 信 する double dvset = ; int r = msg.writestring ( "VOLT " + dvset.tostring("0.000") + "\n"); ToString メソッドには 書 式 を 指 定 する 事 が 可 能 です 上 の 例 では 小 数 点 以 下 3 桁 に 書 式 が 指 定 されています 指 定 が 無 い 場 合 は 自 動 的 に 行 われます (SCPI コマンドによるプログラミング イン ターフェースを 実 装 する 計 測 器 では 特 に 書 式 を 指 定 しなくても 殆 どの 場 合 正 しく 解 釈 されます ) ここで 冒 頭 に 書 かれているカルチャー( 文 化 )の 指 定 に 注 意 して 下 さい.NET Framework では ToDouble や ToString のような 文 字 列 数 値 変 換 を 行 うメソッドは 期 待 される 数 値 表 現 書 式 が 全 て OS の 言 語 地 域 の 設 定 に 依 存 します しかしヨーロッパや 南 米 で 動 作 する PC では 小 数 点 記 号 が 必 ずしもドット(.)ではありません 一 方 計 測 器 の 通 信 インターフェースで 受 け 渡 しされる 際 の 数 値 パラメータに 小 数 点 がつく 場 合 それは 必 ず 米 国 式 ( 日 本 も 同 じ)である 必 要 があります その ため これらの 地 域 は.NET Framework のデフォルト 動 作 では 数 値 文 字 列 変 換 が 正 しく 動 作 しま せん そこで 文 化 依 存 動 作 をキャンセルするため 冒 頭 でカルチャーの 無 効 化 を 行 っています カルチャーを 明 示 的 に 設 定 しない 場 合 OS の 言 語 地 域 設 定 に 依 存 した 動 作 になります 明 示 的 に 設 定 されたカルチャーは 現 在 のスレッドにのみ 適 用 されます 計 測 器 との IO 動 作 を GUI とは 別 の スレッドに 配 置 するようなマルチ スレッド アプリケーションでは そのスレッド 毎 にカルチャーの 無 効 化 を 指 定 する 必 要 があります アプリケーションの GUI が 言 語 地 域 設 定 を 尊 重 したい 場 合 ( 例 えば 南 米 地 域 で 動 作 するアプリケーションが 小 数 点 記 号 に 正 しくカンマを 表 示 させたい 場 合 ) カルチャーの 無 効 化 は 計 測 器 コマンドとレスポンスの 数 値 変 換 処 理 を 行 う 部 分 に 局 所 化 する 必 要 があります そうでないと GUI 上 での 数 値 表 現 が 米 国 式 に 強 制 されてしまい ます 前 の 章 で 説 明 した FormattedIO488 は 言 語 地 域 の 設 定 の 影 響 は 受 けません 15-2 文 字 列 数 値 変 換 計 測 器 からのレスポンスに 数 値 表 現 が 含 まれている 場 合 数 値 型 変 数 への 変 換 は Convert クラ スのスタティック メソッドを 使 います // 文 化 依 存 を 適 用 しない Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; //curr/volt 計 測 を 開 始 しその 測 定 値 を 照 会 する r = msg.writestring ( "READ:CURR?;VOLT?\n"); string rd = msg.readstring(100); //レスポンスをセパレータで 分 解 char[] splitters = new char[] { ';', ',', '\n' }; string[] astoken = rd.split(splitters); // 分 解 されたトークンを 数 値 に 変 換 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 84/159

85 double dcurr = Convert.ToDouble(asToken[0]); double dvolt = Convert.ToDouble(asToken[1]); この 例 では"READ:CURR?" 及 び"READ:VOLT?"の 複 合 クエリを 使 って 電 流 電 圧 の 計 測 値 を 照 会 し その 複 合 レスポンス(それぞれの 値 はセミコロン 区 切 り)を 取 得 します 実 際 のレスポンスは 例 えば" E+00; E+01\n"のようになるかもしれません Split は string クラスのメソッドで 指 定 されたスプリッタ(セパレータ)でトークンを 分 解 し 結 果 を string[] 配 列 で 返 します ここでは セミコロン(;) カンマ(,) 改 行 (LF)を 同 時 に char[] 配 列 で 指 定 しています 最 後 に Convert クラスのスタティック メソッド ToDouble で double 型 への 変 換 をしています 整 数 を 期 待 する 場 合 は ToInt16, ToInt32 などを 使 っても 良 いでしょう ここでもカルチャーの 無 効 化 が 明 示 的 設 定 されている 点 に 注 意 して 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 85/159

86 16- プログラミング 言 語 依 存 の 補 足 説 明 (C#) この 章 では C# 固 有 の 内 容 を 説 明 します このガイドブックで 扱 う C#のバージョンは 2008 とします C#は.NET Framework を 利 用 したプログラミング 言 語 なので ネイティブ コードで 実 装 された VISA COM DLL とは 直 接 リンクされませんが Primary Interop Assembly ( 通 称 PIA)と 呼 ばれる DLL モ ジュールを 使 用 して 間 接 的 にリンクします 16-1 コンポーネント オブジェクトの 作 成 方 法 C#でコンポーネント オブジェクトの 作 成 を 行 うには 下 記 サンプルのように 行 います ここではリソー ス マネージャ オブジェクトを 作 成 する 場 面 を 例 に 説 明 します using Ivi.Visa.Interop;... IResourceManager3 rm = new ResourceManagerClass(); リソース マネージャを 作 成 するには ResourceManagerClass クラスに 対 して new 演 算 子 を 使 いま す またプログラムの 冒 頭 で using 擬 似 命 令 が 使 われている 点 に 注 意 して 下 さい この using 擬 似 命 令 は 必 須 ではありませんが もし 書 かない 場 合 は VISA COM タイプ ライブラリが 提 供 する ネーム スペース Ivi.Visa.Interop を 全 ての 型 名 とシンボル 名 に 明 示 的 に 書 かなければなり ません 16-2 インターフェースの 参 照 リソース マネージャの Open メソッドは C#スタイルの 構 文 として 以 下 のような 形 式 で 宣 言 されま す IVisaSession IResourceManager3.Open( string ResourceName, AccessMode mode, int inittimeout, string OptionString ); メソッドの 戻 り 値 は IVisaSession です しかし 実 際 のプログラム(アプリケーション 計 測 器 ドライ バなど)では 多 くの 場 合 IMessage 型 の 変 数 に 戻 り 値 を 代 入 します.. IMessage msg; msg = (IMessage)rm.Open("GPIB0::3::INSTR", AccessMode.NO_LOCK, 0, "");... msg.close(); IResourceManager3.Open メソッドは IVisaSession インターフェースへの 参 照 を 返 します しかしそれを 受 取 る 変 数 が IMessage 型 で 宣 言 されているため IMessage 型 でタイプキャストを 行 います C#では 異 なる COM インターフェースに 対 して 暗 黙 のタイプキャストを 行 いません しか し 明 示 的 なタイプキャストを 行 うと 水 面 下 では 指 定 されたインターフェース 型 への 問 い 合 わせが 行 われます "GPIB0::3::INSTR"のような INSTR リソースでオープンされた VISA セッションは IMessage インターフェースを 必 ずサポートしているため 結 果 的 に IMessage インターフェース への 問 い 合 わせが 成 功 し 変 数 msg にそのインターフェース 参 照 が 格 納 されます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 86/159

87 16-3 配 列 の 扱 い C#での 配 列 の 扱 いは.NET Framework で 用 意 された System.Array の 機 能 を 使 います 配 列 は Array 型 で 記 述 する 方 法 と 型 が 判 っている 場 合 は[]を 用 いて 記 述 する 方 法 があります 例 えば リソース マネージャの FindRsrc()メソッドは 有 効 な VISA アドレスを 文 字 列 配 列 で 返 します System.Array a = rm.findrsrc("?*instr"); string[] s = rm.findrsrc("?*instr"); //どちらの 記 述 も 正 しい これ 以 外 にも 複 数 の 計 測 値 を 問 い 合 わせるようなメソッドが double 配 列 を 返 すような 場 合 も 似 た ような 方 法 で 記 述 できます 16-4 エラー コードの 原 則 計 測 器 を 制 御 するアプリケーションの 場 合 実 行 時 に 計 測 器 と 正 常 に 通 信 できたかどうかを 確 認 す るのは 重 要 な 事 です どんなに 堅 牢 に 設 計 実 装 されたアプリケーションでも 実 行 時 に 計 測 器 のパ ワーが 落 ちていたり 通 信 ケーブルが 外 れていれば 計 測 器 との 通 信 は 正 常 に 行 えません VISA では 全 てのメソッド 呼 び 出 しとプロパティへのアクセスに 対 して 一 貫 したエラー コード 体 系 を 持 っています VISA C API 及 び VISA COM API の 全 てのファンクションは その 戻 り 値 として 32 ビッ ト コードを 使 用 します VISA C API では 各 関 数 の 戻 り 値 は 全 て ViStatus 型 (=int 32 ビット 整 数 型 )と 定 義 されています 一 方 VISA COM API では COM の 標 準 に 合 わせて 全 てのメソッド( 及 びプロパティ アクセス メソッド)の 戻 り 値 は HRESULT 型 (=int 32 ビット 整 数 型 )と 定 義 されています VISA C API と VISA COM API の 戻 り 値 はコードの ビット 割 り 当 てが 若 干 異 なりますが 同 じ 意 味 のステータス コードは 相 互 変 換 可 能 な 関 係 にあります 本 書 は VISA COM API を 中 心 とした 説 明 をしていますので HRESULT 型 のステータス コードを 前 提 にして 説 明 しま す C#では long は 64 ビット 整 数 型 int は 32 ビット 整 数 型 です 従 って C#の 場 合 には HRESULT は int 型 と 等 価 であると 解 釈 して 下 さい 一 般 に COM メソッド 呼 び 出 し 時 とプロパティ アクセス 時 のステータス コード(HRESULT)は 次 のよう に 分 類 されます VISA COM もその 例 外 ではありません Table 16-1 値 の 範 囲 HRESULT=0 HRESULT>0 HRESULT<0 HRESULT の 大 まかな 分 類 説 明 成 功 警 告 エラー HRESULT がマイナスの 場 合 は.NET Framework は COM 例 外 を 発 生 します VISA COM API のメ ソッドを 呼 び 出 した 結 果 或 いはプロパティにアクセスした 結 果 として COM 例 外 が 発 生 した 場 合 通 常 は 計 測 器 との 通 信 が 失 敗 したか 呼 び 出 しのパラメータに 問 題 があったか 或 いは VISA の 動 作 状 態 がその 呼 び 出 しを 拒 否 した 場 合 などが 考 えれます 16-5 物 理 的 な 戻 り 値 C#では COM インターフェースを 通 じてメソッドを 呼 び 出 したりプロパティにアクセスした 場 合 物 理 的 な 戻 り 値 である HRESULT をプログラムから 直 接 扱 う 事 はできません 例 えば 既 に 説 明 したリソ ース マネージャの Open メソッドは 物 理 的 には 次 のような 形 で IDL 言 語 (COM インターフェース KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 87/159

88 のタイプ ライブラリ ソース)で 記 述 されています C#ユーザが 一 般 に 考 えているメソッドの 宣 言 とは かなり 違 いますが 次 に 示 す IDL 言 語 で 書 かれた COM メソッドの 宣 言 と 完 全 に 等 価 なものです HRESULT Open( [in] BSTR ResourceName [in] AccessMode mode, [in] long inittimeout, [in] BSTR OptionString [out,retval] IVisaSession** vi ); ここでは 物 理 的 な 戻 り 値 が HRESULT であり C#では 戻 り 値 であると 信 じられていた IVisaSession への 参 照 が( 二 重 参 照 ポインタへのポインタとして) 最 終 パラメータになっていま す ここで 最 終 パラメータに[out,retval]という 方 向 属 性 が 与 えられている 事 に 注 意 して 下 さい out は このパラメータがリソース マネージャ オブジェクトから 呼 び 出 し 元 (アプリケーション 又 は 計 測 器 ドライバ 側 )に 向 かって 返 される 事 を 意 味 します そして retval はこの 戻 り 値 が COM メソッド としての 表 面 的 な 戻 り 値 である 事 を 意 味 します C#での COM メソッドは このような 表 面 的 な 構 文 で 扱 われます そして 物 理 的 な 戻 り 値 である HRESULT は 水 面 下 の 処 理 にまわされるのです もうひとつ 例 を 見 てみましょう HRESULT get_timeout( [out,retval] long* pval ); HRESULT put_timeout( [in] long newval ); これは IMessage インターフェースで 使 われる Timeout プロパティの 構 文 を 物 理 的 に 表 現 した ものです プロパティのとは 結 局 のところ get_ 又 は put_をプレフィックスに 持 つメソッドに 過 ぎませ ん get_メソッドだけが 提 供 される 場 合 そのプロパティはリード オンリーになります 逆 に put_メ ソッドだけが 提 供 される 場 合 そのプロパティはライト オンリーとなります ここでも 物 理 的 な 戻 り 値 は HRESULT になっており C#からは 水 面 下 の 処 理 になります このように 全 ての COM メソッド(プロパティの get_メソッド put_メソッドを 含 む)は 必 ず 物 理 的 な 戻 り 値 が HRESULT になっています そして C#では メソッドの 戻 り 値 がマイナスになった 場 合 は COM 例 外 として 処 理 されるように 設 計 されています 具 体 的 なエラー 原 因 は Microsoft で 一 般 的 に 定 義 さ れているものと VISA COM のような 特 定 コンポーネントで 拡 張 定 義 しているものとがあります IDL 言 語 で 記 述 される long 型 は C++ 言 語 と 同 じ 32 ビットですが C#では int( 同 じく 32 ビット 整 数 ) 型 にな ります VISA COM で 定 義 されている HRESULT コードの 詳 細 は KI-VISA オンライン ヘルプ 又 は 本 書 の 付 録 に 掲 載 さ れています 16-6 エラー トラッピング C#ではメソッドの 呼 び 出 し 直 後 に HRESULT の 値 が 水 面 下 でチェックされ マイナスの 値 になってい る 場 合 は COM 例 外 を 発 生 します COM 例 外 を 捕 獲 するには try/catch ステートメントを 使 いま す try { msg = (IMessage)rm.Open( "GPIB0::3::INSTR", AccessMode.NO_LOCK, 0, "");.. r = msg.writestring( "CURR 20.0\n"); r = msg.writestring( "VOLT 5.5\n");... } catch( System.Runtime.InteropServices.ComException ex) { MessageBox.Show( KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 88/159

89 exp.message, "error 0x" + Convert.ToString(ex.ErrorCode, 16));... } finally { msg.close();. } try ブロック 内 で 呼 び 出 された 全 ての COM メソッド 呼 び 出 し 及 びプロパティのアクセスでは.NET Framework によって HRESULT がチェックされます HRESULT がマイナスの 場 合.NET Framework は COM 例 外 を 発 生 させ catch ブロックに 処 理 がジャンプします catch ブロックでは System.Runtime.InteropServices.ComException 型 の 例 外 オブ ジェクト ex を 通 じてエラー(COM 例 外 )の 原 因 を 探 る 事 ができます System.Runtime.InteropServices.ComException 型 で 定 義 されているもので 特 に 有 用 な 情 報 は ErrorCode プロパティと Message プロパティです それぞれ HRESULT コード 及 びエ ラー メッセージ 文 字 列 を 返 します try/catch ブロックを 使 わずにプログラムを 実 行 すると 例 外 発 生 時 にデバッガがそれを 捕 獲 します デバッガを 使 用 せずにスタンド アロンで 実 行 された 場 合 はプログラムがクラッシュする 事 になり プログラムは 強 制 終 了 し ます 最 終 的 なアプリケーションでは 必 ずエラー トラッピングを 行 い プログラムが 強 制 終 了 される 事 のないよ うにして 下 さい finally は 必 ずしも 必 要 ありませんが Close()メソッドの 呼 び 出 しのように 成 功 失 敗 にかかわらず 最 終 的 には 呼 び 出 さなければならないような 処 理 があれば 使 うと 便 利 です 16-7 イベント シンクの 作 成 方 法 サービス リクエスト イベントなどで COM のイベント コールバック 機 能 を 使 う 場 合 VISA COM では イベント シンクを 作 成 しなければなりません イベント シンクとは そのイベントが 要 求 するコール バック インターフェース(この 場 合 IEventHandler インターフェース)を 装 備 する 任 意 のコンポ ーネント オブジェクトです そのためには IEventHandler インターフェースを 実 装 するコンポー ネント クラスを 作 成 しなければなりません イベント シンクの 作 成 Visual C# 統 合 環 境 のメニューバーから Project Add Class を 選 択 して 下 さい Add New Item ダイアログが 表 示 されるので Templates から Clsss を 選 択 します また 生 成 されるクラス の 名 前 を MyEventSink.cs としておきましょう そして OK ボタンをクリックすると MyEventSink クラス が 自 動 生 成 されプロジェクトに 追 加 されます そしてクラス モジュール MyEventSink.cs には 以 下 のような 内 容 を 記 述 します using System; using Ivi.Visa.Interop; namespace VisaCom_cs2 この 部 分 は 実 際 にはプロジェクト 名 になる { /// <summary> /// Summary description for MyEventSink. /// </summary> public class MyEventSink : IEventHandler { public MyEventSink() { } KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 89/159

90 public void HandleEvent( IEventManager vi, IEvent ev, int userhandle) { IMessage msg = (IMessage)vi; short stb; stb = msg.readstb(); } } } // TODO: Add your own job depending on the stb value MyEventSink クラスは IEventHandler インターフェースから 派 生 したクラスとして 作 成 します IEventHandler には 唯 一 のメソッドとして HandleEvent があります このメソッドは VISA が 用 意 するものではなく 作 成 するアプリケーション 側 で 用 意 する 責 任 があります それはアプリケーショ ンが 呼 び 出 すメソッドではなく VISA がアプリケーションに 向 かって( 逆 方 向 に) 呼 び 出 すメソッドだか らです 16-8 ターゲット OS の 設 定.NET Framework で 動 作 するアプリケーションは 動 作 対 象 の OS をビルド 時 に 指 定 することが 出 来 ます Visual Studio 2008 のメニューバーから Project <プロジェクト 名 > Properties...を 選 択 し Build タブを 選 択 すると Platform Target という 項 目 があるので ターゲットを 指 定 します ターゲットの 指 定 と 動 作 OS との 関 係 を 下 の 表 に 示 します ターゲットの 指 定 と 動 作 OS との 関 係 を 下 の 表 に 示 します 新 規 プロジェクトを 作 成 した 直 後 のデフォルト 指 定 は Any CPU です Table 16-2 ターゲット プラットフォームの 指 定 ターゲット 指 定 x86 OS での 動 作 x64 OS での 動 作 Any CPU 32bit アプリとして 動 作 64bit アプリとして 動 作 x86 32bit アプリとして 動 作 32bit アプリとして WOW64 環 境 で 動 作 x64 実 行 不 可 64bit アプリとして 動 作 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 90/159

91 17- プログラミング 言 語 依 存 の 補 足 説 明 (Visual Basic.NET) この 章 では Visual Basic.NET 固 有 の 内 容 を 説 明 します このガイドブックで 扱 う Visual Basic のバ ージョンは 2008 としますが 基 本 的 な 記 述 方 法 は 2002 以 降 でも 同 様 です Visual Basic.NET は.NET Framework を 利 用 したプログラミング 言 語 なので ネイティブ コードで 実 装 された VISA COM DLL とは 直 接 リンクされませんが Primary Interop Assembly ( 通 称 PIA)と 呼 ばれる DLL モ ジュールを 使 用 して 間 接 的 にリンクします 17-1 コンポーネント オブジェクトの 作 成 方 法 Visual Basic.NET でコンポーネント オブジェクトの 作 成 を 行 うには 下 記 サンプルのように 行 います ここではリソース マネージャ オブジェクトを 作 成 する 場 面 を 例 に 説 明 します Imports Ivi.Visa.Interop... Dim rm As IResourceManager3 = New ResourceManager() リソース マネージャを 作 成 するには ResourceManager クラスに 対 して New 演 算 子 を 使 います またプログラムの 冒 頭 で Imports 擬 似 命 令 が 使 われている 点 に 注 意 して 下 さい この Imports 擬 似 命 令 は 必 須 ではありませんが もし 書 かない 場 合 は VISA COM タイプ ライブラリが 提 供 するネ ーム スペース Ivi.Visa.Interop を 全 ての 型 名 とシンボル 名 に 明 示 的 に 書 かなければなりま せん 17-2 インターフェースの 参 照 リソース マネージャの Open メソッドは Visual Basic.NET から 見 ると 以 下 のような 形 式 で 宣 言 さ れています Function Open( ResourceName As String, [mode As AccessMode,] [inittimeout As Integer,] [OptionString As String] ) As IVisaSession メソッドの 戻 り 値 は IVisaSession です しかし 実 際 のプログラム(アプリケーション 計 測 器 ドライ バなど)では 多 くの 場 合 IMessage 型 の 変 数 に 戻 り 値 を 代 入 します.. Dim msg As IMessage msg = rm.open( "GPIB0::3::INSTR", AccessMode.NO_LOCK, 0, "")... msg.close() Open メソッドは IVisaSession インターフェースへの 参 照 を 返 します しかしそれを 受 取 る 変 数 が IMessage 型 で 宣 言 されているため IMessage 型 へ 暗 黙 のタイプキャストが 行 われます 暗 黙 的 であれ 明 示 的 であれ タイプキャストを 行 うと 水 面 下 では 指 定 されたインターフェース 型 への 問 い 合 わせが 行 われます "GPIB0::3::INSTR"のような INSTR リソースでオープンされた VISA セッションは IMessage インターフェースを 必 ずサポートしているため 結 果 的 に IMessage インターフェースへの 問 い 合 わせが 成 功 し 変 数 msg にそのインターフェース 参 照 が 格 納 されます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 91/159

92 17-3 配 列 の 扱 い Visual Basic.NET での 配 列 の 扱 いは.NET Framework で 用 意 された System.Array の 機 能 を 使 います 配 列 は Array 型 で 記 述 する 方 法 と 型 が 判 っている 場 合 は()を 用 いて 記 述 する 方 法 があり ます 例 えばリソース マネージャの FindRsrc()メソッドは 有 効 な VISA アドレスを 文 字 列 配 列 で 返 します Dim a As System.Array = rm.findrsrc("?*instr") Dim s As String() = rm.findrsrc("?*instr") //どちらの 記 述 も 正 しい これ 以 外 にも 複 数 の 計 測 値 を 問 い 合 わせるようなメソッドが Double 配 列 を 返 すような 場 合 も 似 た ような 方 法 で 記 述 できます 17-4 エラー コードの 原 則 計 測 器 を 制 御 するアプリケーションの 場 合 実 行 時 に 計 測 器 と 正 常 に 通 信 できたかどうかを 確 認 す るのは 重 要 な 事 です どんなに 堅 牢 に 設 計 実 装 されたアプリケーションでも 実 行 時 に 計 測 器 のパ ワーが 落 ちていたり 通 信 ケーブルが 外 れていれば 計 測 器 との 通 信 は 正 常 に 行 えません VISA では 全 てのメソッド 呼 び 出 しとプロパティへのアクセスに 対 して 一 貫 したエラー コード 体 系 を 持 っています VISA C API 及 び VISA COM API の 全 てのファンクションは その 戻 り 値 として 32 ビッ ト コードを 使 用 します VISA C API では 各 関 数 の 戻 り 値 は 全 て ViStatus 型 (=Long 32 ビット 整 数 型 )と 定 義 されています 一 方 VISA COM API では COM の 標 準 に 合 わせて 全 てのメソッド( 及 びプロパティ アクセス メソッド)の 戻 り 値 は HRESULT 型 (=Long 32 ビット 整 数 型 )と 定 義 されています VISA C API と VISA COM API の 戻 り 値 はコード のビット 割 り 当 てが 若 干 異 なりますが 同 じ 意 味 のステータス コードは 相 互 変 換 可 能 な 関 係 にあります 本 書 は VISA COM API を 中 心 とした 説 明 をしていますので HRESULT 型 のステータス コードを 前 提 にして 説 明 し ます Visual Basic.NET では Long は 64 ビット 整 数 型 Integer は 32 ビット 整 数 型 です 従 って Visual Basic.NET の 場 合 には HRESULT は Integer 型 と 等 価 であると 解 釈 して 下 さい 一 般 に COM メソッド 呼 び 出 し 時 とプロパティ アクセス 時 のステータス コード(HRESULT)は 次 のよう に 分 類 されます VISA COM もその 例 外 ではありません Table 17-1 値 の 範 囲 HRESULT=0 HRESULT>0 HRESULT<0 HRESULT の 大 まかな 分 類 説 明 成 功 警 告 エラー HRESULT がマイナスの 場 合 は.NET Framework は COM 例 外 を 発 生 します VISA COM API のメ ソッドを 呼 び 出 した 結 果 或 いはプロパティにアクセスした 結 果 として COM 例 外 が 発 生 した 場 合 通 常 は 計 測 器 との 通 信 が 失 敗 したか 呼 び 出 しのパラメータに 問 題 があったか 或 いは VISA の 動 作 状 態 がその 呼 び 出 しを 拒 否 した 場 合 などが 考 えれます 17-5 物 理 的 な 戻 り 値 Visual Basic.NET では COM インターフェースを 通 じてメソッドを 呼 び 出 したりプロパティにアクセス した 場 合 物 理 的 な 戻 り 値 である HRESULT をプログラムから 直 接 扱 う 事 はできません 例 えば 既 に 説 明 したリソース マネージャの Open メソッドは 物 理 的 には 次 のような 形 で IDL 言 語 (COM イ KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 92/159

93 ンターフェースのタイプ ライブラリ ソース)で 記 述 されています Visual Basic.NET ユーザが 一 般 に 考 えているメソッドの 宣 言 とはかなり 違 いますが 次 に 示 す IDL 言 語 で 書 かれた COM メソッドの 宣 言 と 完 全 に 等 価 なものです HRESULT Open( [in] BSTR ResourceName [in] AccessMode mode, [in] long inittimeout, [in] BSTR OptionString [out,retval] IVisaSession** vi ); ここでは 物 理 的 な 戻 り 値 が HRESULT であり Visual Basic.NET では 戻 り 値 であると 信 じられてい た IVisaSession への 参 照 が( 二 重 参 照 ポインタへのポインタとして) 最 終 パラメータになってい ます ここで 最 終 パラメータに[out,retval]という 方 向 属 性 が 与 えられている 事 に 注 意 して 下 さ い out は このパラメータがリソース マネージャ オブジェクトから 呼 び 出 し 元 (アプリケーション 又 は 計 測 器 ドライバ 側 )に 向 かって 返 される 事 を 意 味 します そして retval はこの 戻 り 値 が COM メ ソッドとしての 表 面 的 な 戻 り 値 である 事 を 意 味 します Visual Basic.NET での COM メソッドは この ような 表 面 的 な 構 文 で 扱 われます そして 物 理 的 な 戻 り 値 である HRESULT は 水 面 下 の 処 理 にま わされるのです もうひとつ 例 を 見 てみましょう HRESULT get_timeout( [out,retval] long* pval ); HRESULT put_timeout( [in] long newval ); これは IMessage インターフェースで 使 われる Timeout プロパティの 構 文 を 物 理 的 に 表 現 した ものです プロパティのとは 結 局 のところ get_ 又 は put_をプレフィックスに 持 つメソッドに 過 ぎませ ん get_メソッドだけが 提 供 される 場 合 そのプロパティはリード オンリーになります 逆 に put_メ ソッドだけが 提 供 される 場 合 そのプロパティはライト オンリーとなります ここでも 物 理 的 な 戻 り 値 は HRESULT になっており Visual Basic.NET からは 水 面 下 の 処 理 になります このように 全 ての COM メソッド(プロパティの get_メソッド put_メソッドを 含 む)は 必 ず 物 理 的 な 戻 り 値 が HRESULT になっています そして Visual Basic.NET では メソッドの 戻 り 値 がマイナスになっ た 場 合 はランタイム エラーとして 処 理 されるように 設 計 されています 具 体 的 なエラー 原 因 は Microsoft で 一 般 的 に 定 義 されているものと VISA COM のような 特 定 コンポーネントで 拡 張 定 義 し ているものとがあります IDL 言 語 で 記 述 される long 型 は C++ 言 語 と 同 じ 32 ビットですが Visual Basic.NET では Integer( 同 じく 32 ビット 整 数 ) 型 になります VISA COM で 定 義 されている HRESULT コードの 詳 細 は KI-VISA オンライン ヘルプ 又 は 本 書 の 付 録 に 掲 載 さ れています 17-6 エラー トラッピング Visual Basic.NET ではメソッドの 呼 び 出 し 直 後 に HRESULT の 値 が 水 面 下 でチェックされ マイナス の 値 になっている 場 合 は COM 例 外 を 発 生 します COM 例 外 を 捕 獲 するには Try/Catch ステート メントを 使 います Try msg = rm.open( "GPIB0::3::INSTR", AccessMode.NO_LOCK, 0, "").. r = msg.writestring( "CURR 20.0" & vblf) r = msg.writestring( "VOLT 5.5" & vblf) KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 93/159

94 . Catch ex As System.Runtime.InteropServices.ComException MessageBox.Show(_ ex.message, "error 0x" + Convert.ToString(ex.ErrorCode, 16))... Finally msg.close().. End Try Visual Basic.NET では 従 来 の Visual Basic と 同 様 の On Error Goto ステートメントを 使 うことができます し かし Try/Catch ステートメントを 使 ったほうが 処 理 ロジックをより 明 確 に 表 現 する 事 ができるので こちらの 書 き 方 を 推 奨 します また このアプローチは C# 言 語 でもほとんど 同 じように 記 述 できます Visual Basic.NET は 言 語 的 には BASIC 言 語 ですが 動 作 プラットフォームや 処 理 ロジックなどのスタイルは むしろ 同 じ.NET フレ ーム 環 境 の 仲 間 である C#に 近 いのです Try ブロック 内 で 呼 び 出 された 全 ての COM メソッド 呼 び 出 し 及 びプロパティのアクセスでは.NET Framework によって HRESULT がチェックされます HRESULT がマイナスの 場 合.NET Framework は COM 例 外 を 発 生 させ Catch ブロックに 処 理 がジャンプします Catch ブロックでは System.Runtime.InteropServices.ComException 型 の 例 外 オブ ジェクト ex を 通 じてエラー(COM 例 外 )の 原 因 を 探 る 事 ができます System.Runtime.InteropServices.ComException 型 で 定 義 されているもので 特 に 有 用 な 情 報 は ErrorCode プロパティと Message プロパティです それぞれ HRESULT コード 及 びエ ラー メッセージ 文 字 列 を 返 します Try/Catch ブロックを 使 わずにプログラムを 実 行 すると 例 外 発 生 時 にデバッガがそれを 捕 獲 します デバッガ を 使 用 せずにスタンド アロンで 実 行 された 場 合 はプログラムがクラッシュする 事 になり プログラムは 強 制 終 了 します 最 終 的 なアプリケーションでは 必 ずエラー トラッピングを 行 い プログラムが 強 制 終 了 される 事 のない ようにして 下 さい Finally は 必 ずしも 必 要 ありませんが Close()メソッドの 呼 び 出 しのように 成 功 失 敗 にかかわらず 最 終 的 には 呼 び 出 さなければならないような 処 理 があれば 使 うと 便 利 です 17-7 イベント シンクの 作 成 方 法 サービス リクエスト イベントなどで COM のイベント コールバック 機 能 を 使 う 場 合 VISA COM では イベント シンクを 作 成 しなければなりません イベント シンクとは そのイベントが 要 求 するコール バック インターフェース(この 場 合 IEventHandler インターフェース)を 装 備 する 任 意 のコンポ ーネント オブジェクトです そのためには IEventHandler インターフェースを 実 装 するコンポー ネント クラスを 作 成 しなければなりません イベント シンクの 作 成 Visual Basic.NET 統 合 環 境 のメニューバーから Project Add Class を 選 択 して 下 さい Add New Item ダイアログが 表 示 されるので Templates から Clsss を 選 択 します また 生 成 される クラスの 名 前 を MyEventSink.vb としておきましょう そして OK ボタンをクリックすると MyEventSink クラスが 自 動 生 成 されプロジェクトに 追 加 されます そしてクラス モジュール MyEventSink.vb には 以 下 のような 内 容 を 記 述 します Imports Ivi.Visa.Interop Public Class MyEventSink KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 94/159

95 Implements IEventHandler Private Sub HandleEvent( _ ByVal vi As IEventManager, _ ByVal ev As IEvent, _ ByVal userhandle As Integer) Implements IEventHandler.HandleEvent End Sub Dim msg As IMessage msg = vi Dim stb As Short stb = msg.readstb 'ステータス バイトを 取 得 する ' TODO: Add your own job depending on the stb value End Class MyEventSink クラスは IEventHandler インターフェースを 実 装 する 必 要 があるため Implements キーワードを 使 用 します IEventHandler には 唯 一 の 追 加 メソッドとして HandleEvent があります このメソッドは VISA が 用 意 するものではなく 作 成 するアプリケーショ ン 側 で 用 意 する 責 任 があります それはアプリケーションが 呼 び 出 すメソッドではなく VISA がアプリ ケーションに 向 かって( 逆 方 向 に) 呼 び 出 すメソッドだからです 17-8 ターゲット OS の 設 定.NET Framework で 動 作 するアプリケーションは 動 作 対 象 の OS をビルド 時 に 指 定 することが 出 来 ます Visual Studio 2008 のメニューバーから Project <プロジェクト 名 > Properties...を 選 択 し Compile タブを 選 択 すると Advanced Compile Options...ボタンがあるのでそれをクリックし て Advanced Compiler Settings ダイアログを 表 示 します その 中 に Target CPU という 項 目 があるので ターゲットを 指 定 します ターゲットの 指 定 と 動 作 OS との 関 係 を 下 の 表 に 示 します 新 規 プロジェクトを 作 成 した 直 後 のデフォ ルト 指 定 は Any CPU です Table 17-2 ターゲット プラットフォームの 指 定 ターゲット 指 定 x86 OS での 動 作 x64 OS での 動 作 Any CPU 32bit アプリとして 動 作 64bit アプリとして 動 作 x86 32bit アプリとして 動 作 32bit アプリとして WOW64 環 境 で 動 作 x64 実 行 不 可 64bit アプリとして 動 作 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 95/159

96 18- プログラミング 言 語 依 存 の 補 足 説 明 (Visual Basic 6.0) この 章 では Visual Basic 6.0( 以 下 VB6 と 省 略 ) 固 有 の 内 容 を 説 明 します VB6 でのプログラミング 手 法 はそのまま Excel VBA マクロにも 適 用 できます VB6 は.NET ではなく 旧 来 のネイティブコードを 生 成 するツールなので VISA COM DLL とは 直 接 リンクされます Primary Interop Assembly は 使 用 しません 18-1 コンポーネント オブジェクトの 作 成 方 法 VB6 ではコンポーネント オブジェクトの 作 成 を 行 うには 下 記 サンプルのように 行 います ここではリ ソース マネージャ オブジェクトを 作 成 する 場 面 を 例 に 説 明 します Dim rm As IResourceManager3 Set rm As New ResourceManager リソース マネージャを 作 成 するには ResourceManager クラスに 対 して New 演 算 子 を 使 います 18-2 インターフェースの 参 照 リソース マネージャの Open メソッドは VB6 から 見 ると 以 下 のような 形 式 で 宣 言 されています Function Open( ResourceName As String, [mode As AccessMode,] [inittimeout As Long,] [OptionString As String] ) As IVisaSession メソッドの 戻 り 値 は IVisaSession です しかし 実 際 のプログラム(アプリケーション 計 測 器 ドライ バなど)では 多 くの 場 合 IMessage 型 の 変 数 に 戻 り 値 を 代 入 します.. Dim msg As IMessage Set msg = rm.open("gpib0::3::instr", NO_LOCK, 0, "")... msg.close() Open メソッドは 一 旦 IVisaSession インターフェースへの 参 照 を 返 します しかしそれを 受 取 る 変 数 が IMessage 型 で 宣 言 されているため IMessage 型 への 暗 黙 のタイプキャストが 行 われま す COM インターフェースを 変 数 で 受 ける 場 合 VB6 では 必 ず Set 文 が 使 われます "GPIB0::3::INSTR"のような INSTR リソースでオープンされた VISA セッションは IMessage インターフェースを 必 ずサポートしているため 結 果 的 に IMessage インターフェースへの 問 い 合 わ せが 成 功 し 変 数 msg にそのインターフェース 参 照 が 格 納 されます 18-3 配 列 の 扱 い VB6 での 配 列 は 一 般 的 な COM で 使 われる 配 列 の 実 装 と 全 く 同 じものです (VB6 自 体 が COM 技 術 によって 成 り 立 っているので 当 然 と 言 えば 当 然 です ) 例 えばリソース マネージャの FindRsrc メソッドが 返 す 配 列 は 通 常 の 文 字 列 配 列 として 扱 う 事 ができます Dim r() As String r = rm.findrsrc("?*instr") KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 96/159

97 18-4 エラー コードの 原 則 計 測 器 を 制 御 するアプリケーションの 場 合 実 行 時 に 計 測 器 と 正 常 に 通 信 できたかどうかを 確 認 す るのは 重 要 な 事 です どんなに 堅 牢 に 設 計 実 装 されたアプリケーションでも 実 行 時 に 計 測 器 のパ ワーが 落 ちていたり GPIB ケーブルが 外 れていれば 計 測 器 との 通 信 は 正 常 に 行 えません VISA では 全 てのメソッド 呼 び 出 しとプロパティへのアクセスに 対 して 一 貫 したエラー コード 体 系 を 持 っています VISA C API 及 び VISA COM API の 全 てのファンクションは その 戻 り 値 として 32 ビッ ト コードを 使 用 します VISA C API では 各 関 数 の 戻 り 値 は 全 て ViStatus 型 (=Long 型 )と 定 義 されています 一 方 VISA COM API では COM の 標 準 に 合 わせて 全 てのメソッド( 及 びプロパティ アクセス メソッド)の 戻 り 値 は HRESULT 型 (=Long 型 )と 定 義 されています VISA C API と VISA COM API の 戻 り 値 はコードのビット 割 り 当 てが 若 干 異 な りますが 同 じ 意 味 のステータス コードは 相 互 変 換 可 能 な 関 係 にあります 本 書 は VISA COM API を 中 心 とし た 説 明 をしていますので HRESULT 型 のステータス コードを 前 提 にして 説 明 します 一 般 に COM メソッド 呼 び 出 し 時 とプロパティ アクセス 時 のステータス コード(HRESULT)は 次 のよう に 分 類 されます VISA COM もその 例 外 ではありません Table 18-1 値 の 範 囲 HRESULT=0 HRESULT>0 HRESULT<0 HRESULT の 大 まかな 分 類 説 明 成 功 警 告 エラー HRESULT がマイナスの 場 合 は VB6 はランタイム エラーを 発 生 します VISA COM API のメソッド を 呼 び 出 した 結 果 或 いはプロパティにアクセスした 結 果 としてランタイム エラーが 発 生 した 場 合 通 常 は 計 測 器 との 通 信 が 失 敗 したか 呼 び 出 しのパラメータに 問 題 があったか 或 いは VISA の 動 作 状 態 がその 呼 び 出 しを 拒 否 した 場 合 などが 考 えれます 18-5 物 理 的 な 戻 り 値 VB6 では COM インターフェースを 通 じてメソッドを 呼 び 出 したりプロパティにアクセスした 場 合 物 理 的 な 戻 り 値 である HRESULT をプログラムから 直 接 扱 う 事 はできません 例 えば 既 に 説 明 したリ ソース マネージャの Open メソッドは 物 理 的 には 次 のような 形 で IDL 言 語 (COM インターフェース のタイプ ライブラリ ソース)で 記 述 されています VB6 ユーザが 一 般 に 考 えているメソッドの 宣 言 と はかなり 違 いますが 次 に 示 す IDL 言 語 で 書 かれた COM メソッドの 宣 言 と 完 全 に 等 価 なものです HRESULT Open( [in] BSTR ResourceName [in] AccessMode mode, [in] long inittimeout, [in] BSTR OptionString [out,retval] IVisaSession** vi ); ここでは 物 理 的 な 戻 り 値 が HRESULT であり VB6 では 戻 り 値 であると 信 じられていた IVisaSession への 参 照 が( 二 重 参 照 ポインタへのポインタとして) 最 終 パラメータになっていま す ここで 最 終 パラメータに[out,retval]という 方 向 属 性 が 与 えられている 事 に 注 意 して 下 さい out は このパラメータがリソース マネージャ オブジェクトから 呼 び 出 し 元 (アプリケーション 又 は 計 測 器 ドライバ 側 )に 向 かって 返 される 事 を 意 味 します そして retval はこの 戻 り 値 が COM メソッド としての 表 面 的 な 戻 り 値 である 事 を 意 味 します VB6 での COM メソッドは このような 表 面 的 な 構 文 で 扱 われます そして 物 理 的 な 戻 り 値 である HRESULT は 水 面 下 の 処 理 にまわされるのです KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 97/159

98 もうひとつ 例 を 見 てみましょう HRESULT get_timeout( [out,retval] long* pval ); HRESULT put_timeout( [in] long newval ); これは IMessage インターフェースで 使 われる Timeout プロパティの 構 文 を 物 理 的 に 表 現 した ものです プロパティのとは 結 局 のところ get_ 又 は put_をプレフィックスに 持 つメソッドに 過 ぎませ ん get_メソッドだけが 提 供 される 場 合 そのプロパティはリード オンリーになります 逆 に put_メ ソッドだけが 提 供 される 場 合 そのプロパティはライト オンリーとなります ここでも 物 理 的 な 戻 り 値 は HRESULT になっており VB6 からは 水 面 下 の 処 理 になります このように 全 ての COM メソッド(プロパティの get_メソッド put_メソッドを 含 む)は 必 ず 物 理 的 な 戻 り 値 が HRESULT になっています そして VB6 では メソッドの 戻 り 値 がマイナスになった 場 合 はラン タイム エラーとして 処 理 されるように 設 計 されています 具 体 的 なエラー 原 因 は Windows で 一 般 的 に 定 義 されているものと VISA COM のような 特 定 コンポーネントで 拡 張 定 義 しているものとがあり ます VISA COM で 定 義 されている HRESULT コードの 詳 細 は KI-VISA オンライン ヘルプ 又 は 本 書 の 付 録 に 掲 載 さ れています 18-6 エラー トラッピング Visual Basic ではメソッドの 呼 び 出 し 直 後 に HRESULT の 値 が 水 面 下 でチェックされ マイナスの 値 になっている 場 合 はランタイム エラーを 発 生 します ランタイム エラーを 捕 獲 するには On Error Goto ステートメントを 使 います On Error Goto IOEXP r = msg.writestring( "CURR 20.0" & vblf) r = msg.writestring( "VOLT 5.5" & vblf)... IOEXP: MsgBox Err.Number, Err.Description.. On Error Goto ステートメントで 予 めエラー ジャンプ 先 を 指 定 すると ランタイム エラー 発 生 時 にその 場 所 へプログラムがジャンプします ランタイム エラーの 発 生 は 抑 制 したいがどこにもジャン プさせたくない 場 合 は On Error Resume Next を 使 います エラー トラッピング 自 体 をやめた い 場 合 は On Error Goto 0 を 使 います エラー 発 生 時 は Visual Basic で 定 義 済 みの Err オ ブジェクトを 使 って エラー コード(HRESULT)や 詳 細 説 明 ( 文 字 列 )を 取 得 する 事 が 出 来 ます エラー トラッピングを 無 効 にしたまま(On Error Goto 0 の 状 態 )でプログラムを 実 行 しランタイム エラーが 発 生 すると VB6 の 統 合 環 境 (インタプリタ 環 境 )と Excel VBA 環 境 では デバッガがプログラムを 一 時 停 止 しエ ラーが 発 生 した 場 所 のソースコードを 表 示 します しかし VB6 でスタンド アロン EXE を 生 成 しそれを 実 行 中 に ランタイム エラーが 発 生 すると エラー 発 生 を 示 すメッセージ ボックスが 表 示 されたあと プログラムは 強 制 終 了 します 最 終 的 なアプリケーションでは 必 ずエラー トラッピングを 行 い プログラムが 強 制 終 了 される 事 のな いようにして 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 98/159

99 18-7 イベント シンクの 作 成 方 法 サービス リクエスト イベントなどでイベント コールバック 機 能 を 使 う 場 合 VISA COM ではイベン ト シンクを 作 成 しなければなりません イベント シンクとは そのイベントが 要 求 するコールバック インターフェース(この 場 合 IEventHandler インターフェース)を 装 備 する 任 意 のコンポーネン ト オブジェクトです そのためには IEventHandler インターフェースを 実 装 するコンポーネント クラスを 作 成 しなければなりません イベント シンクの 作 成 VB6 の 場 合 は メニューバーから Project Add Class Module を 選 択 して 下 さい Excel VBA の 場 合 は メニューバーから Insert Class Module を 選 択 して 下 さい いずれの 場 合 もクラス モジュールが 追 加 されます 追 加 されたクラス モジュールの Name プロパティを MyEventSink としましょう つまり 今 から 作 成 するのは MyEventSink というコンポーネント クラスです Excel の 場 合 は Instancing プロ パティがありますが Private にしておいて 下 さい そしてクラス モジュールには 以 下 のような 内 容 を 記 述 します Option Explicit Implements VisaComLib.IEventHandler Private Sub IEventHandler_HandleEvent( _ ByVal vi As IEventManager, ByVal ev As IEvent, ByVal userhandle As Long) End Sub On Error Resume Next Dim msg As VisaComLib.IMessage Dim stb As Integer Set msg = vi stb = msg.readstb() ' TODO: Add your own job depending on the stb value Implements キーワードは VB6 で 利 用 可 能 なステートメントで クラス モジュールで 特 定 の COM インターフェースを 実 装 する 際 に 使 用 します このサンプルでは このコンポーネント クラス (MyEventSink 型 )に IEventHandler インターフェースを 実 装 するという 事 を 宣 言 しています IEventHandler には 唯 一 の 追 加 メソッドとして HandleEvent があります このメソッドは VISA が 用 意 するものではなく 作 成 するリケーション 側 で 用 意 する 責 任 があります それはアプリケーショ ンが 呼 び 出 すメソッドではなく VISA がアプリケーションに 向 かって( 逆 方 向 に) 呼 び 出 すメソッドだか らです VB でインターフェース メソッドを 実 装 する 場 合 関 数 名 として <interfacename>_<methodname>のように インターフェース 名 とメソッド 名 をアンダースコア ("_")で 連 結 します Notes VISA COM のイベントコールバック 機 構 はマルチスレッドで 動 作 するため VISA からのコールバックの 呼 び 出 し は GUI のスレッドとは 別 の 作 業 スレッドから 行 われます VB6 の 言 語 とランタイム ライブラリ 自 体 はマルチスレ ッドをサポートしますが VB6 統 合 環 境 はそれをサポートしません その 為 コールバック 関 数 の 中 をデバッグし ようとすると 確 実 に 統 合 環 境 がクラッシュします また デバッグを 伴 わないコンパイル 済 みコードであっても 作 業 スレッド 内 から GUI を 操 作 すると 殆 どの 場 合 クラッシュします KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 99/159

100 19- プログラミング 言 語 依 存 の 補 足 説 明 (C++/CLI) この 章 では C++/CLI(.NET Framework で 動 作 するマネージド 版 C++) 固 有 の 内 容 を 説 明 します このガイドブックで 扱 う C++/CLI のバージョンは VC とします C++/CLI は.NET Framework を 利 用 したプログラミング 言 語 なので ネイティブ コードで 実 装 された VISA COM DLL とは 直 接 リンクされませんが Primary Interop Assembly ( 通 称 PIA)と 呼 ばれる DLL モジュールを 使 用 して 間 接 的 にリンクします 19-1 コンポーネント オブジェクトの 作 成 方 法 C++/CLI でコンポーネント オブジェクトの 作 成 を 行 うには 下 記 サンプルのように 行 います ここでは リソース マネージャ オブジェクトを 作 成 する 場 面 を 例 に 説 明 します #include "stdafx.h".. using namespace Ivi::Visa::Interop;.. IResourceManager3^ rm = gcnew ResourceManagerClass(); リソース マネージャを 作 成 するには ResourceManagerClass クラスに 対 して gcnew 演 算 子 を 使 います またプログラムの 冒 頭 で using namespace 擬 似 命 令 が 使 われている 点 に 注 意 して 下 さ い この using namespace 擬 似 命 令 は 必 須 ではありませんが もし 書 かない 場 合 は VISA COM タイプ ライブラリが 提 供 するネーム スペース Ivi::Visa::Interop を 全 ての 型 名 とシン ボル 名 に 明 示 的 に 書 かなければなりません 同 じ C++ 言 語 であっても 従 来 のアンマネージド 版 C++(MFC や ATL を 使 う C++ 言 語 )とマネージド 版 の C++/CLI では ポインタ 演 算 子 や new 演 算 子 の 扱 い 方 が 根 本 的 に 違 います C++/CLI では 原 則 的 にアスタ リスク(*)を 使 ったポインタ 表 現 は 使 わず キャレット(^)を 使 います キャレットはマネージドヒープへのポインタ を 指 すものです また.NET アセンブリによるオブジェクトを 作 成 する 場 合 は マネージドヒープへの 割 り 当 てを 行 う gcnew 演 算 子 を 使 います 19-2 インターフェースの 参 照 リソース マネージャの Open メソッドは C++/CLI スタイルの 構 文 として 以 下 のような 形 式 で 宣 言 されます IVisaSession^ IResourceManager3::Open( System::String^ ResourceName, AccessMode mode, int inittimeout, System::String^ OptionString ); メソッドの 戻 り 値 は IVisaSession^です しかし 実 際 のプログラム(アプリケーション 計 測 器 ドラ イバなど)では 多 くの 場 合 IMessage^ 型 の 変 数 に 戻 り 値 を 代 入 します.. IMessage^ msg = (IMessage^)rm->Open( "GPIB0::3::INSTR", AccessMode::NO_LOCK, 0, "");.. msg->close(); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 100/159

101 IResourceManager3::Open メソッドは IVisaSession インターフェースへの 参 照 を 返 します しかしそれを 受 取 る 変 数 が IMessage^ 型 で 宣 言 されているため IMessage^ 型 でタイプキャスト を 行 います C++/CLI では 異 なる COM インターフェースに 対 して 暗 黙 のタイプキャストを 行 いませ ん しかし 明 示 的 なタイプキャストを 行 うと 水 面 下 では 指 定 されたインターフェース 型 への 問 い 合 わせが 行 われます "GPIB0::3::INSTR"のような INSTR リソースでオープンされた VISA セッシ ョンは IMessage インターフェースを 必 ずサポートしているため 結 果 的 に IMessage インターフ ェースへの 問 い 合 わせが 成 功 し 変 数 msg にそのインターフェース 参 照 が 格 納 されます 19-3 配 列 の 扱 い C++/CLI での 配 列 の 扱 いは.NET Framework で 用 意 された System::Array の 機 能 を 使 います 配 列 は System::Array 型 で 記 述 する 方 法 と 型 が 判 っている 場 合 は array<>を 用 いて 記 述 する 方 法 があります 例 えばリソース マネージャの FindRsrc()メソッドは 有 効 な VISA アドレスを 文 字 列 配 列 で 返 します System::Array^ a = rm->findrsrc( "?*INSTR"); array<string^>^ s = rm->findrsrc( "?*INSTR"); //どちらの 記 述 も 正 しい これ 以 外 にも 複 数 の 計 測 値 を 問 い 合 わせるようなメソッドが double 配 列 を 返 すような 場 合 も 似 た ような 方 法 で 記 述 できます 19-4 エラー コードの 原 則 計 測 器 を 制 御 するアプリケーションの 場 合 実 行 時 に 計 測 器 と 正 常 に 通 信 できたかどうかを 確 認 す るのは 重 要 な 事 です どんなに 堅 牢 に 設 計 実 装 されたアプリケーションでも 実 行 時 に 計 測 器 のパ ワーが 落 ちていたり 通 信 ケーブルが 外 れていれば 計 測 器 との 通 信 は 正 常 に 行 えません VISA では 全 てのメソッド 呼 び 出 しとプロパティへのアクセスに 対 して 一 貫 したエラー コード 体 系 を 持 っています VISA C API 及 び VISA COM API の 全 てのファンクションは その 戻 り 値 として 32 ビッ ト コードを 使 用 します VISA C API では 各 関 数 の 戻 り 値 は 全 て ViStatus 型 (=int 32 ビット 整 数 型 )と 定 義 されています 一 方 VISA COM API では COM の 標 準 に 合 わせて 全 てのメソッド( 及 びプロパティ アクセス メソッド)の 戻 り 値 は HRESULT 型 (=int 32 ビット 整 数 型 )と 定 義 されています VISA C API と VISA COM API の 戻 り 値 はコードの ビット 割 り 当 てが 若 干 異 なりますが 同 じ 意 味 のステータス コードは 相 互 変 換 可 能 な 関 係 にあります 本 書 は VISA COM API を 中 心 とした 説 明 をしていますので HRESULT 型 のステータス コードを 前 提 にして 説 明 しま す C++/CLI では long/int 共 に 32 ビット 整 数 型 でが IDL で 定 義 された COM インターフェース 上 の long 型 は C++/CLI では int と 扱 われるようです HRESULT は int 型 と 等 価 であると 解 釈 して 下 さい 一 般 に COM メソッド 呼 び 出 し 時 とプロパティ アクセス 時 のステータス コード(HRESULT)は 次 のよう に 分 類 されます VISA COM もその 例 外 ではありません Table 19-1 値 の 範 囲 HRESULT=0 HRESULT>0 HRESULT<0 HRESULT の 大 まかな 分 類 説 明 成 功 警 告 エラー HRESULT がマイナスの 場 合 は.NET Framework は COM 例 外 を 発 生 します VISA COM API のメ ソッドを 呼 び 出 した 結 果 或 いはプロパティにアクセスした 結 果 として COM 例 外 が 発 生 した 場 合 通 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 101/159

102 常 は 計 測 器 との 通 信 が 失 敗 したか 呼 び 出 しのパラメータに 問 題 があったか 或 いは VISA の 動 作 状 態 がその 呼 び 出 しを 拒 否 した 場 合 などが 考 えれます 19-5 物 理 的 な 戻 り 値 C++/CLI では COM インターフェースを 通 じてメソッドを 呼 び 出 したりプロパティにアクセスした 場 合 物 理 的 な 戻 り 値 である HRESULT をプログラムから 直 接 扱 う 事 はできません 例 えば 既 に 説 明 し たリソース マネージャの Open メソッドは 物 理 的 には 次 のような 形 で IDL 言 語 (COM インターフェ ースのタイプ ライブラリ ソース)で 記 述 されています C++/CLI ユーザが 一 般 に 考 えているメソッド の 宣 言 とはかなり 違 いますが 次 に 示 す IDL 言 語 で 書 かれた COM メソッドの 宣 言 と 完 全 に 等 価 な ものです HRESULT Open( [in] BSTR ResourceName [in] AccessMode mode, [in] long inittimeout, [in] BSTR OptionString [out,retval] IVisaSession** vi ); ここでは 物 理 的 な 戻 り 値 が HRESULT であり C++/CLI では 戻 り 値 であると 信 じられていた IVisaSession への 参 照 が( 二 重 参 照 ポインタへのポインタとして) 最 終 パラメータになっていま す ここで 最 終 パラメータに[out,retval]という 方 向 属 性 が 与 えられている 事 に 注 意 して 下 さい out は このパラメータがリソース マネージャ オブジェクトから 呼 び 出 し 元 (アプリケーション 又 は 計 測 器 ドライバ 側 )に 向 かって 返 される 事 を 意 味 します そして retval はこの 戻 り 値 が COM メソッド としての 表 面 的 な 戻 り 値 である 事 を 意 味 します C++/CLI での COM メソッドは このような 表 面 的 な 構 文 で 扱 われます そして 物 理 的 な 戻 り 値 である HRESULT は 水 面 下 の 処 理 にまわされるので す もうひとつ 例 を 見 てみましょう HRESULT get_timeout( [out,retval] long* pval ); HRESULT put_timeout( [in] long newval ); これは IMessage インターフェースで 使 われる Timeout プロパティの 構 文 を 物 理 的 に 表 現 した ものです プロパティのとは 結 局 のところ get_ 又 は put_をプレフィックスに 持 つメソッドに 過 ぎませ ん get_メソッドだけが 提 供 される 場 合 そのプロパティはリード オンリーになります 逆 に put_メ ソッドだけが 提 供 される 場 合 そのプロパティはライト オンリーとなります ここでも 物 理 的 な 戻 り 値 は HRESULT になっており C++/CLI からは 水 面 下 の 処 理 になります このように 全 ての COM メソッド(プロパティの get_メソッド put_メソッドを 含 む)は 必 ず 物 理 的 な 戻 り 値 が HRESULT になっています そして C++/CLI では メソッドの 戻 り 値 がマイナスになった 場 合 は COM 例 外 として 処 理 されるように 設 計 されています 具 体 的 なエラー 原 因 は Microsoft で 一 般 的 に 定 義 されているものと VISA COM のような 特 定 コンポーネントで 拡 張 定 義 しているものとがあり ます VISA COM で 定 義 されている HRESULT コードの 詳 細 は KI-VISA オンライン ヘルプ 又 は 本 書 の 付 録 に 掲 載 さ れています 19-6 エラー トラッピング C++/CLI ではメソッドの 呼 び 出 し 直 後 に HRESULT の 値 が 水 面 下 でチェックされ マイナスの 値 にな っている 場 合 は COM 例 外 を 発 生 します COM 例 外 を 捕 獲 するには try/catch ステートメントを 使 います try { KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 102/159

103 msg = (IMessage^)rm->Open( "GPIB0::3::INSTR", AccessMode::NO_LOCK, 0, "");... r = msg->writestring( "CURR 20.0\n"); r = msg->writestring( "VOLT 5.5\n");... } catch( System::Runtime::InteropServices::COMException^ ex) { MessageBox::Show( ex->message, "error 0x" + Convert::ToString(ex- >ErrorCode, 16)); } finally { msg->close(); } try ブロック 内 で 呼 び 出 された 全 ての COM メソッド 呼 び 出 し 及 びプロパティのアクセスでは.NET Framework によって HRESULT がチェックされます HRESULT がマイナスの 場 合.NET Framework は COM 例 外 を 発 生 させ catch ブロックに 処 理 がジャンプします catch ブロックでは System::Runtime::InteropServices::ComException 型 の 例 外 オブジェクト ex を 通 じてエラー(COM 例 外 )の 原 因 を 探 る 事 ができます System::Runtime::InteropServices::ComException 型 で 定 義 されているもので 特 に 有 用 な 情 報 は ErrorCode プロパティと Message プロパティです それぞれ HRESULT コード 及 びエラー メッセージ 文 字 列 を 返 します try/catch ブロックを 使 わずにプログラムを 実 行 すると 例 外 発 生 時 にデバッガがそれを 捕 獲 します デバッガを 使 用 せずにスタンド アロンで 実 行 された 場 合 はプログラムがクラッシュする 事 になり プログラムは 強 制 終 了 し ます 最 終 的 なアプリケーションでは 必 ずエラー トラッピングを 行 い プログラムが 強 制 終 了 される 事 のないよ うにして 下 さい finally は 必 ずしも 必 要 ありませんが Close()メソッドの 呼 び 出 しのように 成 功 失 敗 にかかわらず 最 終 的 には 呼 び 出 さなければならないような 処 理 があれば 使 うと 便 利 です 19-7 イベント シンクの 作 成 方 法 サービス リクエスト イベントなどで COM のイベント コールバック 機 能 を 使 う 場 合 VISA COM では イベント シンクを 作 成 しなければなりません イベント シンクとは そのイベントが 要 求 するコール バック インターフェース(この 場 合 IEventHandler インターフェース)を 装 備 する 任 意 のコンポ ーネント オブジェクトです そのためには IEventHandler インターフェースを 実 装 するコンポー ネント クラスを 作 成 しなければなりません イベント シンクの 作 成 C++/CLI 統 合 環 境 のメニューバーから Project Add Class を 選 択 して 下 さい Add Class ダイ アログが 表 示 されるので C++から C++ Class を 選 択 し Add します すると Generic C++ Class Wizard が 表 示 されるので 下 記 のようにして CMyEventSink クラスを 作 成 します ベースク ラスに IEventHandler を 指 定 し インラインで 生 成 しましょう KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 103/159

104 Figure 19-1 イベント シンク 用 のクラスを 作 成 する すると MyEventSink.h(インラインなので.cpp ファイルは 無 い)が 生 成 されます そして 下 記 のようにクラスを 記 述 します #pragma once using namespace Ivi::Visa::Interop; ref class CMyEventSink : public IEventHandler { public: CMyEventSink(void) { } virtual void HandleEvent( IEventManager^ vi, IEvent^ ev, int userhandle) { IMessage^ msg = (IMessage^)vi; short stb; stb = msg->readstb(); } // TODO: Add your own job depending on the stb value }; KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 104/159

105 CMyEventSink クラスは IEventHandler インターフェースから 派 生 したクラスとして 作 成 します IEventHandler には 唯 一 のメソッドとして HandleEvent があります このメソッドは VISA が 用 意 するものではなく 作 成 するアプリケーション 側 で 用 意 する 責 任 があります それはアプリケーショ ンが 呼 び 出 すメソッドではなく VISA がアプリケーションに 向 かって( 逆 方 向 に) 呼 び 出 すメソッドだか らです 19-8 ターゲット OS の 設 定 C++/CLI でのターゲット プラットフォーム 指 定 は 少 し 複 雑 です C++/CLI はマネージド コードと P/Invoke によるアンマネージド コードの 混 在 を 許 しているからです ここでは 2 箇 所 の 設 定 が 必 要 になります 1 つは MSIL に 関 する 設 定 です Visual Studio 2008 のメニューバーから Project <プロジェクト 名 > Properties...を 選 択 し General タブの 中 にある Common Language Runtime Support という 項 目 に 注 目 します ここでは MSIL の 動 作 条 件 を 細 かく 指 定 でき /clr /clr:pure /clr:safe の 選 択 肢 があります (/clr:oldsyntax は C++/CLI の 構 文 をコンパイルできないので 事 実 上 選 択 不 可 です ) safe を 選 択 するとアプリケーションから P/Invoke 機 能 (ネイティブ DLL ある いは Win32 API を 直 接 呼 び 出 す 機 能 )を 利 用 できないので 注 意 してください もうひとつは Configuration Manager によるターゲット プラットフォームの 設 定 です General タブが 表 示 されている 状 態 で Configuration Manager ボタンをクリックし Platform の 選 択 肢 から 新 規 に x64 又 は Win32 を 作 成 して 適 用 します ターゲットの 指 定 と 動 作 OS との 関 係 を 下 の 表 に 示 します 新 規 プロジェクトを 作 成 した 直 後 のデフォ ルト 指 定 は/clr の Win32 ターゲットです Table 19-2 ターゲット プラットフォームの 指 定 MSIL とターゲット の 指 定 /clr 又 は/clr:pure Win32 ターゲット /clr 又 は/clr:pure x64 ターゲット /clr:safe ターゲット 不 問 x86 OS での 動 作 32bit アプリとして 動 作 実 行 不 可 32bit アプリとして 動 作 x64 OS での 動 作 32bit アプリとして WOW64 環 境 で 動 作 64bit アプリとして 動 作 64bit アプリとして 動 作 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 105/159

106 20- プログラミング 言 語 依 存 の 補 足 説 明 (Visual C ) この 章 ではネイティブ 版 Visual C++(MFC, ATL 等 を 使 う 場 合 など) 固 有 の 内 容 を 説 明 します この ガイドブックで 扱 う Visual C++のバージョンは 2008 とします マネージドバージョンの Visual C++ については C++/CLI での 説 明 を 参 照 して 下 さい Visual C++では COM メソッド 及 びプロパティを その 物 理 的 な 実 装 に 忠 実 にプリミティブに 扱 う 事 が 可 能 です しかし 多 くのアプリケーション プログラムでは より 便 利 に 使 えるスマート ポインタを 使 います 本 書 でもプリミティブな COM のアクセスではなくスマート ポインタを 使 うことを 前 提 に 説 明 します 20-1 COM ラッパ モジュールの 生 成 5-4 Visual C (アンマネージド)での 参 照 設 定 でも 説 明 しましたが Visual C++では #import 擬 似 命 令 をプログラムの 冒 頭 に 書 くことでタイプ ライブラリを 生 成 します #import "C:/Program Files (x86)/ivi Foundation/VISA/VisaCom/GlobMgr.DLL" no_namespace named_guids ( 改 行 せず 一 行 で 書 いて 下 さい ) GlobMgr.DLL の 実 際 のロケーションに 合 わせてパスの 指 定 を 変 更 して 下 さい このファイルは 通 常 <VXIPNPPATH>/VisaCom デイレクトリに 置 かれています プロジェクトの stdafx.h ファイルに 記 述 するのが 良 いでしょう #import 擬 似 命 令 は DLL 又 は TLB ファイルからタイプ ライブラリを 抽 出 し 拡 張 子.tlh と.tli の 2 個 のラッパ モジュールを C++ソース ファイルとして 生 成 します これらのファイルには メソッドや プロパティを 簡 単 にアクセスするのに 都 合 の 良 い スマート ポインタが 定 義 されています 例 えば IMessage 型 は Visual C++プログラムの 中 では( 水 面 下 での 処 理 が 一 切 介 在 しない) 生 のインターフェース 型 です 従 って IMessage* pmsg = NULL; // 生 のインターフェース ポインタ などように 宣 言 するのですが 生 のインターフェース 型 であるために 参 照 カウントを 調 整 する AddRef Release メソッドやインターフェースを 問 い 合 わせる QueryInterface の 自 動 呼 び 出 し( 水 面 下 での 呼 び 出 し)は 一 切 行 われません ところがスマート ポインタ IMessagePtr 型 で COM インターフェースを 宣 言 すると これらの 呼 び 出 しを 自 動 化 する 事 ができます スマート ポイン タとはこのような COM インターフェース 固 有 の 水 面 下 での 処 理 をサポートするものです IMessagePtr spmsg; //スマート ポインタはアスタリスクを 付 けずに 宣 言 する 20-2 COM を 使 うための 宣 言 COM を 使 用 する 場 合 COM オブジェクトを 作 成 するプロセスは 必 ず CoInitialize または CoInitializeEx 関 数 (Win32 API)を 呼 び 出 さなければなりません また 終 了 時 に CoUninitialize を 呼 び 出 さなければなりません MFC アプリケーションでオートメーション サポ ートを 有 効 にして Wizard コードを 生 成 させた 場 合 は <CYourApp>::InitInstance で AfxOleInit が 呼 び 出 されるようになっています これは CoInitialize と 同 じ 効 果 があります そうでない 場 合 は CoInitialize(Ex)/CoUninitialize 呼 び 出 しを 忘 れずに 追 加 して 下 さい これを 忘 れるとリソース マネージャ オブジェクトを 作 成 できません 簡 単 な 動 作 実 験 をするための コンソール アプリケーションなどを 書 く 場 合 は 忘 れがちなので 特 に 注 意 して 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 106/159

107 OleInitialize と CoInitialize はどちらもアプリケーションを STA(Single Threaded Apartment)として 初 期 化 しま す しかし VISA COM ライブラリはスレッディング モデルを both として 実 装 しているので 複 数 スレッド 間 で VISA セッションを 使 いまわす 場 合 は アプリケーションが MTA(Multi Threaded Apartment)として 初 期 化 され るように 下 記 のように 呼 び 出 して 下 さい アプリケーションが MTA として 動 作 する 場 合 VISA COM ライブラリ も MTA として 動 作 するので この 場 合 スレッド 間 で COM インターフェースを 共 有 する 場 合 でもスレッド マーシャ リングは 必 要 ありません CoInitializeEx(NULL, COINIT_MULTITHREADED); 20-3 コンポーネント オブジェクトの 作 成 方 法 Visual C++では コンポーネント オブジェクトの 作 成 にはスマート ポインタの CreateInstance()メソッドを 使 います ここではリソース マネージャ オブジェクトを 作 成 する 場 面 を 例 に 説 明 します HRESULT hr; IResourceManager3Ptr sprm; hr = sprm.createinstance( CLSID_ResourceManager); ここでは スマート ポインタの CreateInstance()メソッドを 使 ってリソース マネージャを 作 成 し ています 20-4 インターフェースの 参 照 リソース マネージャの Open メソッドは 例 えば VB6 のような 環 境 では 以 下 のような 形 式 で 宣 言 さ れているように 見 えます C++で 生 のインターフェース ポインタを 使 った 場 合 は 20-8 物 理 的 な 戻 り 値 で 説 明 されるような 宣 言 なのですが スマート ポインタを 利 用 する 事 により あたかも VB6 の ような 見 かけ 上 の 構 文 で 利 用 する 事 ができます Function Open( ResourceName As String, [mode As AccessMode,] [inittimeout As Long,] [OptionString As String] ) As IVisaSession メソッドの 戻 り 値 は IVisaSession です しかし 実 際 のプログラム(アプリケーション 計 測 器 ドライ バなど)では 多 くの 場 合 IMessage 型 の 変 数 に 戻 り 値 を 代 入 します IMessagePtr spmsg; spmsg = sprm->open( L"GPIB0::3::INSTR", NO_LOCK, 0, L"");... spmsg->close(); Open メソッドは 一 旦 IVisaSession インターフェースへの 参 照 を 返 します しかしそれをスマー ト ポインタ IMessagePtr 型 で 宣 言 されている 変 数 spmsg で 受 取 ります スマート ポインタ 変 数 に 代 入 を 行 う 場 合 IVisaSession インターフェース(Open で 返 されたインターフェース 参 照 )の QueryInterface が 水 面 下 で 呼 び 出 されます その 際 IID_IMessage というインターフェース 識 別 子 ( 実 際 には GUID 値 )を 渡 します 全 ての COM インターフェースは 間 接 的 又 は 直 接 的 に IUnknwon インターフェースから 派 生 し その 結 果 QueryInterface AddRef Release とい う 3 つのメソッドを 装 備 しています IVisaSession もその 例 外 では 有 りません KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 107/159

108 "GPIB0::3::INSTR"のような INSTR リソースでオープンされた VISA セッションは IMessage インターフェースを 必 ずサポートしているため 結 果 的 に IID_IMessage を 指 定 された QueryInterface 呼 び 出 しは 成 功 し 最 終 的 に IMessage インターフェースへの 参 照 が 返 され て 変 数 spmsg に 格 納 されるのです これはスマート ポインタの 代 入 演 算 子 (=)がオーバーロード されており QueryInterface を 水 面 下 で 呼 び 出 すように 仕 組 まれているからなのです IUnknown には 3 つのメソッドが 定 義 されています QueryInterface はインターフェースの 問 合 せをしま す AddRef は 参 照 カウンタの 増 加 Release メソッドは 参 照 カウンタの 現 象 を 行 います 全 ての COM オブジ ェクトは 最 低 でも IUnknown から 派 生 したインターフェースを 装 備 しているので これら 全 てのメソッドを 必 ず 装 備 しているといえます これら 3 つのメソッドを 全 てを 装 備 していない 限 り COM オブジェクトとは 言 えません COM オブジェクトの 寿 命 は 参 照 カウンタによって 管 理 されます 参 照 カウンタは 通 常 COM オブジェクト 自 身 に よって 管 理 され AddRef で 増 加 Release で 減 少 します オブジェクトが QueryInterface 呼 び 出 しを 受 けそれが 成 功 すると オブジェクトは AddRef を 連 鎖 的 に 1 回 だけ 呼 び 出 します オブジェクトが Release 呼 び 出 しを 受 け その 結 果 参 照 カウントがゼロのなった 時 オブジェクトは 自 分 自 身 を 破 壊 します Visual C++で#import 擬 似 命 令 を 使 用 した 場 合 に 生 成 される COM ラッパ(スマート ポインタ)では 代 入 演 算 子 (=)が QueryInterface にマップされています 代 入 演 算 子 はまた 既 に 保 持 している 有 効 なインターフェ ース ポインタがあれば QueryInterface を 呼 び 出 す 寸 前 に Release を 呼 び 出 します Release 呼 び 出 しは スマート ポインタのデストラクタからも 自 動 的 に 呼 び 出 されます 20-5 文 字 列 の 扱 い C++ 環 境 では COM インターフェースをアクセスする 際 に 扱 われる 文 字 列 は 全 て UNICODE になり ます 従 ってリテラル( 直 値 文 字 列 )を 記 述 する 場 合 は L"*IDN?"のように 引 用 符 の 手 前 に L が 付 きます これは アプリケーションが UNICODE ビルドであっても ANSI ビルドであっても 変 わる 事 は ありません COM で 文 字 列 パラメータや 戻 り 値 を 受 け 渡 す 場 合 UNICODE 文 字 の 配 列 ではなく BSTR 型 を 使 います BSTR 型 は 見 かけ 上 は wchar_t*と typedef されていますが 実 際 には SysAllocString や SysFreeString などの API を 使 って 生 成 廃 棄 を 行 わなければなりません Visual C++では BSTR 型 をラップする_bstr_t クラスがあります これは BSTR のメモリ 管 理 を 水 面 下 で 処 理 してくれるだけでなく UNICODE 文 字 列 と ANSI 文 字 列 の 相 互 変 換 を 行 えるように オーバーロードされた 代 入 演 算 子 やタイプ キャスト 演 算 子 を 実 装 しています Visual C では 通 常 新 規 作 成 したプロジェクトは UNICODE ビルドが 指 定 されています アプリケーシ ョンを Windows95/98/Me で 動 作 させる 需 要 が 殆 ど 無 くなった 現 在 ANSI ビルドを 選 択 する 必 要 性 は 殆 どない でしょう 20-6 配 列 の 扱 い C++ 環 境 では COM 互 換 の 配 列 を 扱 うには 少 々テクニックが 必 要 です COM インターフェースがメソ ッドの 引 数 や 戻 り 値 あるいはプロパティで 使 用 する 配 列 は SAFEARRAY と 呼 ばれるものであり C/C++ 言 語 のそれとは 大 きく 異 なるからです リソース マネージャの FindRsrc メソッドが 返 す 文 字 列 配 列 (SAFEARRAY)を 例 に 説 明 しましょう // Search for valid visa resource strings //.. SAFEARRAY* psa = NULL; try { psa = sprm->findrsrc( L"?*INSTR"); } catch(...) { } if( psa) { KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 108/159

109 BSTR* rgelems = NULL; ::SafeArrayAccessData( psa, (PVOID*)&rgElems); ASSERT( rgelems); LONG llbound, lubound; ::SafeArrayGetLBound( psa, 1, &llbound); ::SafeArrayGetUBound( psa, 1, &lubound); for( long lndx=llbound; lndx<=lubound; lndx++) { _bstr_t strfound = rgelems[lndx]; } //この 時 点 で strfound は 文 字 列 を 1 個 保 持 している } ::SafeArrayUnaccessData( psa); ::SafeArrayDestroyData( psa); FindRsrc メソッドから 文 字 列 配 列 を 受 取 るには 一 旦 SAFEARRAY 型 ポインタ 変 数 psa を 使 い ます 更 に SafeArrayAccessData SafeArrayGetLBound SafeArrayGetUBound SafeArrayUnaccessData SafeArrayDestroyData の 各 API 関 数 を 駆 使 して 内 部 エレメ ントにアクセスします 20-7 エラー コードの 原 則 計 測 器 を 制 御 するアプリケーションの 場 合 実 行 時 に 計 測 器 と 正 常 に 通 信 できたかどうかを 確 認 す るのは 重 要 な 事 です どんなに 堅 牢 に 設 計 実 装 されたアプリケーションでも 実 行 時 に 計 測 器 のパ ワーが 落 ちていたり GPIB ケーブルが 外 れていれば 計 測 器 との 通 信 は 正 常 に 行 えません VISA では 全 てのメソッド 呼 び 出 しとプロパティへのアクセスに 対 して 一 貫 したエラー コード 体 系 を 持 っています VISA C API 及 び VISA COM API の 全 てのファンクションは その 戻 り 値 として 32 ビッ ト コードを 使 用 します VISA C API では 各 関 数 の 戻 り 値 は 全 て ViStatus 型 (=Long 型 )と 定 義 されています 一 方 VISA COM API では COM の 標 準 に 合 わせて 全 てのメソッド( 及 びプロパティ アクセス メソッド)の 戻 り 値 は HRESULT 型 (=Long 型 )と 定 義 されています VISA C API と VISA COM API の 戻 り 値 はコードのビット 割 り 当 てが 若 干 異 な りますが 同 じ 意 味 のステータス コードは 相 互 変 換 可 能 な 関 係 にあります 本 書 は VISA COM API を 中 心 とし た 説 明 をしていますので HRESULT 型 のステータス コードを 前 提 にして 説 明 します 一 般 に COM メソッド 呼 び 出 し 時 とプロパティ アクセス 時 のステータス コード(HRESULT)は 次 のよう に 分 類 されます VISA COM もその 例 外 ではありません Table 20-1 値 の 範 囲 HRESULT=0 HRESULT>0 HRESULT<0 HRESULT の 大 まかな 分 類 説 明 成 功 警 告 エラー HRESULT がマイナスの 場 合 は スマート ポインタのラッパー コードは COM 例 外 を 発 生 します VISA COM API のメソッドを 呼 び 出 した 結 果 或 いはプロパティにアクセスした 結 果 として COM 例 外 が 発 生 した 場 合 通 常 は 計 測 器 との 通 信 が 失 敗 したか 呼 び 出 しのパラメータに 問 題 があったか 或 いは VISA の 動 作 状 態 がその 呼 び 出 しを 拒 否 した 場 合 などが 考 えれます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 109/159

110 20-8 物 理 的 な 戻 り 値 C++スマートポインターでは COM インターフェースを 通 じてメソッドを 呼 び 出 したりプロパティにアク セスした 場 合 物 理 的 な 戻 り 値 である HRESULT をプログラムから 直 接 扱 う 事 はできません 例 えば 既 に 説 明 したリソース マネージャの Open メソッドは 物 理 的 には 次 のように 宣 言 されています ス マート ポインタを 通 じてアクセスする 場 合 の 見 かけ 上 の 宣 言 とはかなり 違 いますが 次 に 示 す IDL 言 語 で 書 かれた COM メソッドの 宣 言 と 完 全 に 等 価 なものです HRESULT Open( [in] BSTR ResourceName [in] AccessMode mode, [in] long inittimeout, [in] BSTR OptionString [out,retval] IVisaSession** vi ); ここでは 物 理 的 な 戻 り 値 が HRESULT であり スマート ポインタを 使 用 した 場 合 には 戻 り 値 であ ると 信 じられていた IVisaSession への 参 照 が( 二 重 参 照 ポインタへのポインタとして) 最 終 パラ メータになっています ここで 最 終 パラメータに[out,retval]という 方 向 属 性 が 与 えられている 事 に 注 意 して 下 さい out は このパラメータがリソース マネージャ オブジェクトから 呼 び 出 し 元 (アプ リケーション 又 は 計 測 器 ドライバ 側 )に 向 かって 返 される 事 を 意 味 します そして retval はこの 戻 り 値 が COM メソッドとしての 表 面 的 な 戻 り 値 である 事 を 意 味 します C++でスマート ポインタを 使 用 した 場 合 の COM メソッドは このような 表 面 的 な 構 文 で 扱 われます そして 物 理 的 な 戻 り 値 であ る HRESULT は 水 面 下 の 処 理 にまわされるのです もうひとつ 例 を 見 てみましょう HRESULT get_timeout( [out,retval] long* pval ); HRESULT put_timeout( [in] long newval ); これは IMessage インターフェースで 使 われる Timeout プロパティの 構 文 を 物 理 的 に 表 現 した ものです プロパティのとは 結 局 のところ get_ 又 は put_をプレフィックスに 持 つメソッドに 過 ぎませ ん get_メソッドだけが 提 供 される 場 合 そのプロパティはリード オンリーになります 逆 に put_メ ソッドだけが 提 供 される 場 合 そのプロパティはライト オンリーとなります ここでも 物 理 的 な 戻 り 値 は HRESULT になっており スマート ポインタを 利 用 した 場 合 は 水 面 下 の 処 理 になります このように 全 ての COM メソッド(プロパティの get_メソッド put_メソッドを 含 む)は 必 ず 物 理 的 な 戻 り 値 が HRESULT になっています そしてスマート ポインタのラッパ コードでは メソッドの 戻 り 値 がマイナスになった 場 合 はランタイム エラーとして 処 理 されるように 設 計 されています 具 体 的 なエ ラー 原 因 は Microsoft で 一 般 的 に 定 義 されているものと VISA COM のような 特 定 コンポーネントで 拡 張 定 義 しているものとがあります VISA COM で 定 義 されている HRESULT コードの 詳 細 は KI-VISA オンライン ヘルプ 又 は 本 書 の 付 録 に 掲 載 さ れています 20-9 エラー トラッピング C++でスマート ポインタを 利 用 する 場 合 はメソッドの 呼 び 出 し 直 後 に HRESULT の 値 が 水 面 下 でチ ェックされ マイナスの 値 になっている 場 合 は COM 例 外 が 発 生 します 例 外 を 捕 獲 するには C++の try/catch ブロックを 使 います try { r = spmsg->writestring( L"CURR 20.0\n"); r = spmsg->writestring( L"VOLT 5.5\n"); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 110/159

111 } catch( _com_error e) { //エラー コードとメッセージは_com_error クラスのメンバー 関 数 から 取 得 できる HRESULT hr = e.error(); _bstr_t strdescription = e.description(); } //TODO:... try/catch ブロックを 使 わずにプログラムを 実 行 し COM 例 外 が 発 生 すると プログラムは 処 理 されない 例 外 が 発 生 した として 強 制 終 了 させられます 最 終 的 なアプリケーションでは 必 ずエラー トラッピングを 行 い プログ ラムが 強 制 終 了 される 事 のないようにして 下 さい イベント シンクの 作 成 方 法 サービス リクエスト イベントなどでイベント コールバック 機 能 を 使 う 場 合 VISA COM ではイベン ト シンクを 作 成 しなければなりません イベント シンクとは そのイベントが 要 求 するコールバック インターフェース(この 場 合 IEventHandler インターフェース)を 装 備 する 任 意 のコンポーネン ト オブジェクトです そのためには IEventHandler インターフェースを 実 装 するコンポーネント クラスを 作 成 しなければなりません イベント シンクの 作 成 イベント シンクを 作 成 するには C++クラスを 1 個 作 成 する 必 要 があります その C++クラスで IEventHandler インターフェースを 実 装 することになります C++ 環 境 で C++クラス モジュール を 生 成 する 方 法 はプロジェクトのタイプによって 異 なりますが ここでは 手 作 業 で MyEventSink.H フ ァイルを 作 成 し すべてインライン 記 述 した 場 合 を 想 定 します 作 成 するのは CMyEventSink クラ スとしましょう ここで 作 成 するイベントシンクは これも 立 派 な COM クラスです(DLL 等 に 独 立 に 配 置 しているわけ ではありませんが) 従 って COM クラスとしての 実 装 の 原 則 に 従 わなければなりません CMyEventSink のベースクラスになっている IEventHandler は 元 々IUnknown を 継 承 した 派 生 イ ンターフェースです 全 ての COM クラスの 原 点 になる IUnknown には 元 々QueryInterface, AddRef, Release の 3 つのメソッド( 仮 想 メンバー 関 数 )が 設 計 されています そしてそこから 派 生 し た IEventHandler には 追 加 メソッドとして HandleEvent が 設 計 されています これら 合 計 4 つのメ ソッドは 全 て 純 仮 想 関 数 (pure virtual method)として 記 述 されているため そこからの 最 終 的 な 派 生 クラス CMyEventSink は これらを 全 て 現 実 に 実 装 する 必 要 があります (そうしないとビルドが 通 りません ) IUnknown からの 3 つのメソッドの 実 装 は 全 ての COM クラスに 共 通 の 部 分 なのでここでは 詳 細 は 省 略 します HandleEvent メソッドは raw_handleevent 関 数 に 既 にリネームされている 点 に 注 意 し て 下 さい stdafx.h に 記 述 した#import 文 では GlobMgr.dll のタイプ ライブラリから.tlh/.tli を 自 動 生 成 しました しかしこの 時 にスマートポインタを 使 用 するための 諸 条 件 を 与 えているため (IUnknown の 3 つのメソッドを 除 いた 残 りの) 元 々のメソッド 名 はスマートポインターでの 使 用 にあ てがわれているため 生 のインターフェース 記 述 として raw_として 雛 型 を 生 成 しています ここでの イベントシンクの 実 装 は 生 の COM インターフェースを 直 接 扱 う 必 要 があるため raw_handleevent 関 数 を 実 装 することになります #include "stdafx.h" class CMyEventSink : public IEventHandler { protected: DWORD m_dwref; public: CMyEventSink() {m_dwref = 0;} ~CMyEventSink() {} KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 111/159

112 public: // Implementation // IUnknown HRESULT stdcall QueryInterface( REFIID riid, void** ppvobject) { if( (riid == IID_IEventHandler) (riid == IID_IUnknown)) { *ppvobject = (IUnknown*)this; AddRef(); return S_OK; } return E_NOINTERFACE; } ULONG stdcall AddRef() { return ::InterlockedIncrement( (LONG*)&m_dwRef); } ULONG stdcall Release() { ::InterlockedDecrement( (LONG*)&m_dwRef); if( m_dwref == 0) { delete this; return 0; } return m_dwref; } // IEventHandler HRESULT stdcall raw_handleevent( IEventManager* pvi, IEvent* pevent, long userhandle ) { IMessagePtr spmsg = pvi; short stb = spmsg->readstb(); }; } return S_OK; ターゲット OS の 設 定 アンマネージド 版 C++でのターゲット プラットフォーム 指 定 は 次 のようにします Visual Studio 2008 のメニューバーから Project <プロジェクト 名 > Properties...を 選 択 し General タブを 選 択 します さらに Configuration Manager ボタンをクリックし Platform の 選 択 肢 から 新 規 に x64 又 は Win32 を 作 成 して 適 用 します (デフォルトで Win32 は 作 られていま す ) ターゲットの 指 定 と 動 作 OS との 関 係 を 下 の 表 に 示 します 新 規 プロジェクトを 作 成 した 直 後 のデフォ ルト 指 定 は Win33 ターゲットです KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 112/159

113 Table 20-2 ターゲット プラットフォームの 指 定 ターゲットの 指 定 x86 OS での 動 作 x64 OS での 動 作 Win32 ターゲット 32bit アプリとして 動 作 32bit アプリとして WOW64 環 境 で 動 作 x64 ターゲット 実 行 不 可 64bit アプリとして 動 作 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 113/159

114 21- プログラミング 言 語 依 存 の 補 足 説 明 (C++Builder XE2) この 章 では C++Builder 固 有 の 内 容 を 説 明 します このガイドブックで 扱 う C++Builder のバージョ ンは XE2 とします C++Builder では COM メソッド 及 びプロパティを その 物 理 的 な 実 装 に 忠 実 にプリミティブに 扱 う 事 が 可 能 です しかし 多 くのアプリケーション プログラムでは より 便 利 に 使 えるスマート ポインタを 使 います 本 書 でもプリミティブな COM のアクセスではなくスマート ポインタを 使 うことを 前 提 に 説 明 します 21-1 COM ラッパ モジュールの 生 成 C++Builder では COM ラッパ モジュールの 生 成 を 外 部 コマンドライン ツール TLIBIMP.exe に 頼 っています(Visual C++に 似 た#import は 推 奨 されていません) コマンド プロンプトを 起 動 し アプリケーションのソースが 置 かれた 作 業 ディレクトリ 内 で 下 記 コマン ドを 実 行 して 下 さい この 操 作 で 生 成 される VisaComLib_TLB.cpp 及 び 同.h を 使 います tlibimp -C "C:/Program Files (x86)/ivi Foundation/VISA/VisaCom/GlobMgr.DLL" プロジェクトに VisaComLib_TLB.cpp を 追 加 して 下 さい 更 にアプリケーションのソース コード 上 に 下 記 インクルード 文 を 追 加 して 下 さい #include <ComObj.hpp> #include "VisaComLib_TLB.h" TLIBIMP.exe が 生 成 したファイルには メソッドやプロパティを 簡 単 にアクセスするのに 都 合 の 良 い スマート ポインタが 定 義 されています 例 えば IMessage 型 は C++Builder プログラムの 中 では( 水 面 下 での 処 理 が 一 切 介 在 しない) 生 のインターフェース 型 です 従 って IMessage* pmsg = NULL; // 生 のインターフェース ポインタ などように 宣 言 するのですが 生 のインターフェース 型 であるために 参 照 カウントを 調 整 する AddRef Release メソッドやインターフェースを 問 い 合 わせる QueryInterface の 自 動 呼 び 出 し( 水 面 下 での 呼 び 出 し)は 一 切 行 われません ところがスマート ポインタ IMessagePtr 型 で COM インターフェースを 宣 言 すると これらの 呼 び 出 しを 自 動 化 する 事 ができます スマート ポイン タとはこのような COM インターフェース 固 有 の 水 面 下 での 処 理 をサポートするものです IMessagePtr spmsg; //スマート ポインタはアスタリスクを 付 けずに 宣 言 する 21-2 COM を 使 うための 宣 言 COM を 使 用 する 場 合 COM オブジェクトを 作 成 するプロセスは 必 ず CoInitialize または CoInitializeEx 関 数 (Win32 API)を 呼 び 出 さなければなりません また 終 了 時 に CoUninitialize を 呼 び 出 さなければなりません VCL アプリケーションでオートメーションが 既 にサポートされている 場 合 は 同 様 の 処 理 がフレームワーク 内 で 行 われている 場 合 があります そ うでない 場 合 は CoInitialize(Ex)/CoUninitialize 呼 び 出 しを 忘 れずに 追 加 して 下 さい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 114/159

115 これを 忘 れるとリソース マネージャ オブジェクトを 作 成 できません 簡 単 な 動 作 実 験 をするための コンソール アプリケーションなどを 書 く 場 合 は 忘 れがちなので 特 に 注 意 して 下 さい 21-3 コンポーネント オブジェクトの 作 成 方 法 C++Builder では コンポーネント オブジェクトの 作 成 にはスマート ポインタの CreateInstance()メソッドを 使 います ここではリソース マネージャ オブジェクトを 作 成 する 場 面 を 例 に 説 明 します HRESULT hr; IResourceManager3Ptr sprm; hr = sprm.createinstance( CLSID_ResourceManager); ここでは スマート ポインタの CreateInstance()メソッドを 使 ってリソース マネージャを 作 成 し ています 21-4 インターフェースの 参 照 リソース マネージャの Open メソッドは 例 えば VB6 のような 環 境 では 以 下 のような 形 式 で 宣 言 さ れているように 見 えます Function Open( ResourceName As String, [mode As AccessMode,] [inittimeout As Long,] [OptionString As String] ) As IVisaSession しかし C++Builder でスマート ポインタを 利 用 する 場 合 は 生 の COM インターフェースが 剥 き 出 し になります (Visual C++のスマート ポインタとは 事 情 が 異 なる) 生 の COM インターフェースとは 次 に 示 す IDL 言 語 で 書 かれた 物 です HRESULT Open( [in] BSTR ResourceName [in] AccessMode mode, [in] long inittimeout, [in] BSTR OptionString [out,retval] IVisaSession** vi ); BSTR は C++Builder 上 では wchar_t* (UNICODE 文 字 列 へのポインタ)として 見 えます メソッド の 戻 り 値 は 常 に HRESULT であり Open メソッドで 取 得 したい VISA セッションへの 参 照 (COM イン ターフェース ポインタ)は 戻 り 値 ではなく 最 終 パラメータでの 二 重 参 照 を 通 じて 行 われます IVisaSessionPtr spvi; IMessagePtr spmsg; hr = sprm->open( L"TCPIP:: ::INSTR", AccessMode::NO_LOCK, 0, L"", &spvi); hr = spvi->queryinterface(iid_imessage, (void**)&spmsg); hr = spmsg->close(); リソース マネージャ Open メソッドは 最 終 パラメータ(IVisaSession ポインタの 参 照 渡 し)を 通 じ て 一 旦 IVisaSession インターフェースへの 参 照 を 返 します しかし IVisaSession インターフ KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 115/159

116 ェースはメッセージ ベースの I/O を 直 接 行 えないので この 例 では IMessage インターフェースを 必 要 とします Open メソッドの 最 終 パラメータはシンタックス 上 IVisaSession** 型 なので IMessage** 型 で それを 直 接 受 け 取 ることは 出 来 ません その 為 一 旦 IVisaSessionPtr 型 の spvi でそれを 受 け そのあと 明 示 的 に QueryInterface()で IMessage インターフェースを 照 会 します C++Builder のスマート ポインタではプロパティへのアクセスは 変 数 のように 扱 うことは 出 来 ず 全 てアクセッ サ メソッド(get_ 又 は set_の 付 いた 関 数 )で 扱 います 同 様 に 値 を 返 すメソッドも その 受 け 渡 しを 最 終 パラ メータでの 参 照 渡 しを 通 じて 行 います これは 全 てのメソッドが 物 理 的 に HRESULT を 返 すように 作 られており C++Builder ではその 物 理 的 なシンタックスが 剥 き 出 しになっているからです Visual C++のスマート ポインタ とはこの 点 が 異 なります IUnknown には 3 つのメソッドが 定 義 されています QueryInterface はインターフェースの 問 合 せをしま す AddRef は 参 照 カウンタの 増 加 Release メソッドは 参 照 カウンタの 現 象 を 行 います 全 ての COM オブジ ェクトは 最 低 でも IUnknown から 派 生 したインターフェースを 装 備 しているので これら 全 てのメソッドを 必 ず 装 備 しているといえます これら 3 つのメソッドを 全 てを 装 備 していない 限 り COM オブジェクトとは 言 えません COM オブジェクトの 寿 命 は 参 照 カウンタによって 管 理 されます 参 照 カウンタは 通 常 COM オブジェクト 自 身 に よって 管 理 され AddRef で 増 加 Release で 減 少 します オブジェクトが QueryInterface 呼 び 出 しを 受 けそれが 成 功 すると オブジェクトは AddRef を 連 鎖 的 に 1 回 だけ 呼 び 出 します オブジェクトが Release 呼 び 出 しを 受 け その 結 果 参 照 カウントがゼロのなった 時 オブジェクトは 自 分 自 身 を 破 壊 します C++Builder の スマート ポインタは Visual C++よりは 薄 いラッパですが 参 照 カウントの 管 理 に 関 しては 自 動 化 します 21-5 文 字 列 の 扱 い C++ 環 境 では COM インターフェースをアクセスする 際 に 扱 われる 文 字 列 は 全 て UNICODE になり ます 従 ってリテラル( 直 値 文 字 列 )を 記 述 する 場 合 は L"*IDN?"のように 引 用 符 の 手 前 に L が 付 きます これは アプリケーションが UNICODE ビルドであっても ANSI ビルドであっても 変 わる 事 は ありません COM で 文 字 列 パラメータや 戻 り 値 を 受 け 渡 す 場 合 UNICODE 文 字 の 配 列 ではなく BSTR 型 を 使 います BSTR 型 は 見 かけ 上 は wchar_t*と typedef されていますが 実 際 には SysAllocString や SysFreeString などの API を 使 って 生 成 廃 棄 を 行 わなければなりません 21-6 配 列 の 扱 い C++Builder 環 境 では COM 互 換 の 配 列 を 扱 うには 少 々テクニックが 必 要 です COM インターフェー スがメソッドの 引 数 や 戻 り 値 あるいはプロパティで 使 用 する 配 列 は SAFEARRAY と 呼 ばれるものであ り C/C++ 言 語 のそれとは 大 きく 異 なるからです リソース マネージャの FindRsrc メソッドが 返 す 文 字 列 配 列 (SAFEARRAY)を 例 に 説 明 しましょう // Search for valid visa resource strings //.. SAFEARRAY* psa = NULL; if( psa) { try { hr = sprm->findrsrc( L"?*INSTR", &psa); } catch(...) { } if( psa) { BSTR* rgelems = NULL; ::SafeArrayAccessData( psa, (PVOID*)&rgElems); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 116/159

117 } LONG llbound, lubound; ::SafeArrayGetLBound( psa, 1, &llbound); ::SafeArrayGetUBound( psa, 1, &lubound); for( long lndx=llbound; lndx<=lubound; lndx++) { String strfound = rgelems[lndx]; } //この 時 点 で strfound は 文 字 列 を 1 個 保 持 している ::SafeArrayUnaccessData( psa); ::SafeArrayDestroyData( psa); FindRsrc メソッドから 文 字 列 配 列 を 受 取 るには 一 旦 SAFEARRAY 型 ポインタ 変 数 psa を 使 い ます 更 に SafeArrayAccessData SafeArrayGetLBound SafeArrayGetUBound SafeArrayUnaccessData SafeArrayDestroyData の 各 API 関 数 を 駆 使 して 内 部 エレメ ントにアクセスします 21-7 エラー コードの 原 則 計 測 器 を 制 御 するアプリケーションの 場 合 実 行 時 に 計 測 器 と 正 常 に 通 信 できたかどうかを 確 認 す るのは 重 要 な 事 です どんなに 堅 牢 に 設 計 実 装 されたアプリケーションでも 実 行 時 に 計 測 器 のパ ワーが 落 ちていたり GPIB ケーブルが 外 れていれば 計 測 器 との 通 信 は 正 常 に 行 えません VISA では 全 てのメソッド 呼 び 出 しとプロパティへのアクセスに 対 して 一 貫 したエラー コード 体 系 を 持 っています VISA C API 及 び VISA COM API の 全 てのファンクションは その 戻 り 値 として 32 ビッ ト コードを 使 用 します VISA C API では 各 関 数 の 戻 り 値 は 全 て ViStatus 型 (=Long 型 )と 定 義 されています 一 方 VISA COM API では COM の 標 準 に 合 わせて 全 てのメソッド( 及 びプロパティ アクセス メソッド)の 戻 り 値 は HRESULT 型 (=Long 型 )と 定 義 されています VISA C API と VISA COM API の 戻 り 値 はコードのビット 割 り 当 てが 若 干 異 な りますが 同 じ 意 味 のステータス コードは 相 互 変 換 可 能 な 関 係 にあります 本 書 は VISA COM API を 中 心 とし た 説 明 をしていますので HRESULT 型 のステータス コードを 前 提 にして 説 明 します 一 般 に COM メソッド 呼 び 出 し 時 とプロパティ アクセス 時 のステータス コード(HRESULT)は 次 のよう に 分 類 されます VISA COM もその 例 外 ではありません Table 21-1 値 の 範 囲 HRESULT=0 HRESULT>0 HRESULT<0 HRESULT の 大 まかな 分 類 説 明 成 功 警 告 エラー HRESULT がマイナスの 場 合 は 通 常 は 計 測 器 との 通 信 が 失 敗 したか 呼 び 出 しのパラメータに 問 題 があったか 或 いは VISA の 動 作 状 態 がその 呼 び 出 しを 拒 否 した 場 合 などが 考 えれます Visual C++のスマート ポインタと 異 なり C++Builder では HRESULT がマイナスであっても C++ 言 語 としての COM 例 外 は 投 げられません 各 々のメソッド 呼 び 出 しのあと HRESULT の 値 を IF 文 等 で 評 価 する 必 要 があり ます VISA COM で 定 義 されている HRESULT コードの 詳 細 は KI-VISA オンライン ヘルプ 又 は 本 書 の 付 録 に 掲 載 さ れています KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 117/159

118 21-8 エラー トラッピング C++Builder のスマート ポインタを 利 用 する 場 合 はメソッドの 呼 び 出 し 直 後 に 必 要 に 応 じて HRESULT の 値 を 評 価 する 必 要 があります HRESULT がマイナスの 場 合 はエラーを 意 味 します 下 記 の 例 では HRESULT がマイナスだった 場 合 に EOleSysError 型 の 例 外 オブジェクトを 自 力 で 投 げ るように 記 述 しています try ブロックから 投 げた 例 外 を 捕 獲 するには catch ブロックを 使 います try {. long lenwritten; hr = spmsg->writestring( L"CURR 20.0\n", &lenwritten); if( FAILED(hr)) throw( EOleSysError(NULL, hr, 0)); hr = spmsg->writestring( L"VOLT 5.5\n", &lenwritten); if( FAILED(hr)) throw( EOleSysError(NULL, hr, 0));... } catch( EOleSysError& e) { wchar_t msg[256]; wsprintf( msg, L"Error = 0x%08x", e.errorcode); //TODO:... } 21-9 イベント シンクの 作 成 方 法 サービス リクエスト イベントなどでイベント コールバック 機 能 を 使 う 場 合 VISA COM ではイベン ト シンクを 作 成 しなければなりません イベント シンクとは そのイベントが 要 求 するコールバック インターフェース(この 場 合 IEventHandler インターフェース)を 装 備 する 任 意 のコンポーネン ト オブジェクトです そのためには IEventHandler インターフェースを 実 装 するコンポーネント クラスを 作 成 しなければなりません イベント シンクの 作 成 イベント シンクを 作 成 するには C++クラスを 1 個 作 成 する 必 要 があります その C++クラスで IEventHandler インターフェースを 実 装 することになります C++ 環 境 で C++クラス モジュール を 生 成 する 方 法 はプロジェクトのタイプによって 異 なりますが ここでは 手 作 業 で MyEventSink.H フ ァイルを 作 成 し すべてインライン 記 述 した 場 合 を 想 定 します 作 成 するのは CMyEventSink クラ スとしましょう ここで 作 成 するイベントシンクは これも 立 派 な COM クラスです(DLL 等 に 独 立 に 配 置 しているわけ ではありませんが) 従 って COM クラスとしての 実 装 の 原 則 に 従 わなければなりません TMyEventSink のベースクラスになっている IEventHandler は 元 々IUnknown を 継 承 した 派 生 イ ンターフェースです 全 ての COM クラスの 原 点 になる IUnknown には 元 々QueryInterface, AddRef, Release の 3 つのメソッド( 仮 想 メンバー 関 数 )が 設 計 されています そしてそこから 派 生 し た IEventHandler には 追 加 メソッドとして HandleEvent が 設 計 されています これら 合 計 4 つのメ ソッドは 全 て 純 仮 想 関 数 (pure virtual method)として 記 述 されているため そこからの 最 終 的 な 派 生 クラス TMyEventSink は これらを 全 て 現 実 に 実 装 する 必 要 があります (そうしないとビルドが 通 りません ) 幸 い C++Builder には IUnknown の 3 つのメソッドを 実 装 済 みのデリゲート クラス TInterfacedObject 型 が 用 意 されています #include <ComObj.hpp> #include "VisaComLib_TLB.h" class TMyEventSink : public TInterfacedObject, IEventHandler KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 118/159

119 { public: // Implementation // IUnknown // (simply delegates to TInterfacedObject) HRESULT stdcall QueryInterface( REFIID riid, void** ppv) { return TInterfacedObject::QueryInterface(riid, (void*)ppv); } ULONG stdcall AddRef() { return TInterfacedObject::_AddRef(); } ULONG stdcall Release() { return TInterfacedObject::_Release(); } // IEventHandler HRESULT stdcall HandleEvent( IEventManager* pvi, IEvent* pevent, long userhandle ) { IMessagePtr spmsg = pvi; short stb; HRESULT hr = spmsg->readstb( &stb); }; } return S_OK; KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 119/159

120 22- プログラミング 言 語 依 存 の 補 足 説 明 (Delphi XE2) この 章 では Delphi 固 有 の 内 容 を 説 明 します このガイドブックで 扱 う Delphi のバージョンは XE2 と します Delphi では COM メソッド 及 びプロパティを その 物 理 的 な 実 装 に 忠 実 にプリミティブに 扱 う 事 が 可 能 です 22-1 COM ラッパ モジュールの 生 成 Delphi では COM ラッパ モジュールの 生 成 を 外 部 コマンドライン ツール TLIBIMP.exe に 頼 ってい ます コマンド プロンプトを 起 動 し アプリケーションのソースが 置 かれた 作 業 ディレクトリ 内 で 下 記 コマンドを 実 行 して 下 さい この 操 作 で 生 成 される VisaComLib_TLB.pas を 使 います tlibimp -P "C:/Program Files (x86)/ivi Foundation/VISA/VisaCom/GlobMgr.DLL" プロジェクトに VisaComLib_TLB.pas を 追 加 して 下 さいすると アプリケーションのソース コード 上 の uses ブロックに VisaComLib_TLB.pas が 自 動 追 加 されます 更 に uses ブロックに 下 記 の Pascal ユニットを 追 加 して 下 さい ComObj, Windows, TLIBIMP.exe が 生 成 したファイルには メソッドやプロパティを 簡 単 にアクセスするのに 都 合 の 良 い ラッパ クラスが 定 義 されています 例 えば 下 記 は IMessage 型 のラッパ クラスで 変 数 を 宣 言 す る 一 例 です var msg : IMessage;... I で 始 まる 型 名 は C/C++ 言 語 では 生 のインターフェース 型 のため 参 照 カウントを 調 整 する AddRef Release メソッドやインターフェースを 問 い 合 わせる QueryInterface の 自 動 呼 び 出 し( 水 面 下 での 呼 び 出 し)は 一 切 行 われませんでした しかし Delphi での 型 は 生 のインターフェー ス ポインタではなくラッパ クラスです その 為 これら 参 照 カウントに 関 する 処 理 は 自 動 化 されていま す また C/C++のようにポインタ 型 で 宣 言 するのではなく 実 体 型 のように 変 数 宣 言 します 22-2 コンポーネント オブジェクトの 作 成 方 法 Delphi では コンポーネント オブジェクトの 作 成 には COM ラッパ クラスの Create()メソッドを 使 います ここではリソース マネージャ オブジェクトを 作 成 する 場 面 を 例 に 説 明 します var rm : IResourceManager3;... rm:= CoResourceManager.Create(); ここでは ラッパ クラスの Create()メソッドを 使 ってリソース マネージャを 作 成 しています KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 120/159

121 22-3 インターフェースの 参 照 リソース マネージャの Open メソッドは 例 えば VB6 のような 環 境 では 以 下 のような 形 式 で 宣 言 さ れているように 見 えます Function Open( ResourceName As String, [mode As AccessMode,] [inittimeout As Long,] [OptionString As String] ) As IVisaSession しかし Delphi でラッパ クラスを 利 用 する 場 合 は 生 の COM インターフェースが 剥 き 出 しになります 生 の COM インターフェースとは 次 に 示 す IDL 言 語 で 書 かれた 物 です HRESULT Open( [in] BSTR ResourceName [in] AccessMode mode, [in] long inittimeout, [in] BSTR OptionString [out,retval] IVisaSession** vi ); BSTR は Delphi 上 では WideString として AccessMode は 列 挙 型 として それぞれ 見 えます メ ソッドの 戻 り 値 は 常 に HRESULT であり Open メソッドで 取 得 したい VISA セッションへの 参 照 (COM インターフェース ポインタ)は 戻 り 値 ではなく 最 終 パラメータでの 参 照 を 通 じて 行 われます var hr : HRESULT; rm : IResourceManager3; vi : IVisaSession; msg : IMessage;... begin... hr:= rm.open( 'TCPIP:: ::INSTR', NO_LOCK, 0, '', vi); hr:= vi.queryinterface(iid_imessage, msg); hr:= msg.close();... end. リソース マネージャ Open メソッドは 最 終 パラメータ(IVisaSession の 参 照 渡 し)を 通 じて 一 旦 IVisaSession インターフェースへの 参 照 を 返 します しかし IVisaSession インターフェース はメッセージ ベースの I/O を 直 接 行 えないので この 例 では IMessage インターフェースを 必 要 と します Open メソッドの 最 終 パラメータはシンタックス 上 IVisaSession への 参 照 なので IMessage 型 でそれを 直 接 受 け 取 ることは 出 来 ません その 為 一 旦 IVisaSession 型 の vi でそれを 受 け そ のあと 明 示 的 に QueryInterface()で IMessage インターフェースを 照 会 します Delphi の COM ラッパ クラスではプロパティへのアクセスは 変 数 のように 扱 うことは 出 来 ず 全 てアクセッサ メ ソッド(get_ 又 は set_の 付 いた 関 数 )で 扱 います 同 様 に 値 を 返 すメソッドも その 受 け 渡 しを 最 終 パラメータ での 参 照 渡 しを 通 じて 行 います これは 全 てのメソッドが 物 理 的 に HRESULT を 返 すように 作 られており Delphi ではその 物 理 的 なシンタックスが 剥 き 出 しになっているからです IUnknown には 3 つのメソッドが 定 義 されています QueryInterface はインターフェースの 問 合 せをしま す AddRef は 参 照 カウンタの 増 加 Release メソッドは 参 照 カウンタの 現 象 を 行 います 全 ての COM オブジ KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 121/159

122 ェクトは 最 低 でも IUnknown から 派 生 したインターフェースを 装 備 しているので これら 全 てのメソッドを 必 ず 装 備 しているといえます これら 3 つのメソッドを 全 てを 装 備 していない 限 り COM オブジェクトとは 言 えません COM オブジェクトの 寿 命 は 参 照 カウンタによって 管 理 されます 参 照 カウンタは 通 常 COM オブジェクト 自 身 に よって 管 理 され AddRef で 増 加 Release で 減 少 します オブジェクトが QueryInterface 呼 び 出 しを 受 けそれが 成 功 すると オブジェクトは AddRef を 連 鎖 的 に 1 回 だけ 呼 び 出 します オブジェクトが Release 呼 び 出 しを 受 け その 結 果 参 照 カウントがゼロのなった 時 オブジェクトは 自 分 自 身 を 破 壊 します Delphi の COM ラッパ クラスは C++Builder の 場 合 と 同 様 薄 いラッパですが 参 照 カウントの 管 理 に 関 しては 自 動 化 します 22-4 文 字 列 の 扱 い Delphi 環 境 では COM インターフェースをアクセスする 際 に 扱 われる 文 字 列 は 全 て UNICODE(WideString)になります 22-5 配 列 の 扱 い Delphi 環 境 では COM 互 換 の 配 列 を 扱 うには 少 々テクニックが 必 要 です COM インターフェースが メソッドの 引 数 や 戻 り 値 あるいはプロパティで 使 用 する 配 列 は SAFEARRAY と 呼 ばれるものであり Delphi のそれとは 大 きく 異 なるからです リソース マネージャの FindRsrc メソッドが 返 す 文 字 列 配 列 (SAFEARRAY)を 例 に 説 明 しましょう var hr : HRESULT; rm : IResourceManager3; {vi : IVisaSession; msg : IMessage;} sa : PSafeArray; rgelems : ^PWideChar; found: PWideChar; llbound : longint; lubound : longint; ndx: longint; begin.. { Search for valid visa resource strings} hr:= rm.findrsrc( '?*INSTR', sa); if sa <> nil then begin SafeArrayAccessData( sa, Pointer(rgElems)); SafeArrayGetLBound( sa, 1, llbound); SafeArrayGetUBound( sa, 1, lubound); for ndx:= llbound to lubound do begin found:= rgelems^; //この 時 点 で found は 文 字 列 を 1 個 保 持 している Inc( rgelems); end; SafeArrayUnaccessData( sa); SafeArrayDestroyData( sa); end; SafeArray 型 を 使 用 するため uses 節 に ActiveX ユニットを 追 加 して 下 さい FindRsrc メソ ッドから 文 字 列 配 列 を 受 取 るには 一 旦 SageArray 型 ポインタ 変 数 sa を 使 います 更 に KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 122/159

123 SafeArrayAccessData SafeArrayGetLBound SafeArrayGetUBound SafeArrayUnaccessData SafeArrayDestroyData の 各 API 関 数 を 駆 使 して 内 部 エレメ ントにアクセスします 22-6 エラー コードの 原 則 計 測 器 を 制 御 するアプリケーションの 場 合 実 行 時 に 計 測 器 と 正 常 に 通 信 できたかどうかを 確 認 す るのは 重 要 な 事 です どんなに 堅 牢 に 設 計 実 装 されたアプリケーションでも 実 行 時 に 計 測 器 のパ ワーが 落 ちていたり GPIB ケーブルが 外 れていれば 計 測 器 との 通 信 は 正 常 に 行 えません VISA では 全 てのメソッド 呼 び 出 しとプロパティへのアクセスに 対 して 一 貫 したエラー コード 体 系 を 持 っています VISA C API 及 び VISA COM API の 全 てのファンクションは その 戻 り 値 として 32 ビッ ト コードを 使 用 します VISA C API では 各 関 数 の 戻 り 値 は 全 て ViStatus 型 (=Long 型 )と 定 義 されています 一 方 VISA COM API では COM の 標 準 に 合 わせて 全 てのメソッド( 及 びプロパティ アクセス メソッド)の 戻 り 値 は HRESULT 型 (=Long 型 )と 定 義 されています VISA C API と VISA COM API の 戻 り 値 はコードのビット 割 り 当 てが 若 干 異 な りますが 同 じ 意 味 のステータス コードは 相 互 変 換 可 能 な 関 係 にあります 本 書 は VISA COM API を 中 心 とし た 説 明 をしていますので HRESULT 型 のステータス コードを 前 提 にして 説 明 します 一 般 に COM メソッド 呼 び 出 し 時 とプロパティ アクセス 時 のステータス コード(HRESULT)は 次 のよう に 分 類 されます VISA COM もその 例 外 ではありません Table 22-1 値 の 範 囲 HRESULT=0 HRESULT>0 HRESULT<0 HRESULT の 大 まかな 分 類 説 明 成 功 警 告 エラー HRESULT がマイナスの 場 合 は 通 常 は 計 測 器 との 通 信 が 失 敗 したか 呼 び 出 しのパラメータに 問 題 があったか 或 いは VISA の 動 作 状 態 がその 呼 び 出 しを 拒 否 した 場 合 などが 考 えれます Delphi では HRESULT がマイナスであっても EOleException のような COM 例 外 は 投 げられません 各 々のメ ソッド 呼 び 出 しのあと HRESULT の 値 を IF 文 等 で 評 価 する 必 要 があります VISA COM で 定 義 されている HRESULT コードの 詳 細 は KI-VISA オンライン ヘルプ 又 は 本 書 の 付 録 に 掲 載 さ れています 22-7 エラー トラッピング Delphi の COM ラッパ クラスを 利 用 する 場 合 はメソッドの 呼 び 出 し 直 後 に 必 要 に 応 じて HRESULT の 値 を 評 価 する 必 要 があります HRESULT がマイナスの 場 合 はエラーを 意 味 します 下 記 の 例 で は HRESULT がマイナスだった 場 合 に EOleSysError 型 の 例 外 オブジェクトを 自 力 で 投 げるように 記 述 しています try ブロックから 投 げた 例 外 を 捕 獲 するには except ブロックを 使 います var... lenwritten: longint;... begin try... hr:= msg.writestring( 'CURR 20.0'#10, lenwritten); KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 123/159

124 if( FAILED(hr)) then raise EOleSysError.Create('', hr, 0); hr:= msg.writestring( 'VOLT 5.5'#10, lenwritten); if( FAILED(hr)) then raise EOleSysError.Create('', hr, 0);... except on E: EOleSysError do Writeln( Format( 'Error:0x%08x', [E.ErrorCode])); on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; 22-8 イベント シンクの 作 成 方 法 サービス リクエスト イベントなどでイベント コールバック 機 能 を 使 う 場 合 VISA COM ではイベン ト シンクを 作 成 しなければなりません イベント シンクとは そのイベントが 要 求 するコールバック インターフェース(この 場 合 IEventHandler インターフェース)を 装 備 する 任 意 のコンポーネン ト オブジェクトです そのためには IEventHandler インターフェースを 実 装 するコンポーネント クラスを 作 成 しなければなりません イベント シンクの 作 成 イベント シンクを 作 成 するには Delphi クラスを 1 個 作 成 する 必 要 があります その Delphi クラス で IEventHandler インターフェースを 実 装 することになります Delphi 環 境 でクラス モジュール を 生 成 する 方 法 はプロジェクトのタイプによって 異 なりますが ここでは 手 作 業 で MyEventSink.pas ファイルを 作 成 する 例 を 示 します 作 成 するのは TMyEventSink クラスとしましょう ここで 作 成 するイベントシンクは これも 立 派 な COM クラスです(DLL 等 に 独 立 に 配 置 しているわけ ではありませんが) 従 って COM クラスとしての 実 装 の 原 則 に 従 わなければなりません TMyEventSink のベースクラスになっている IEventHandler は 元 々IUnknown を 継 承 した 派 生 イ ンターフェースです 全 ての COM クラスの 原 点 になる IUnknown には 元 々QueryInterface, AddRef, Release の 3 つのメソッド( 仮 想 メンバー 関 数 )が 設 計 されています そしてそこから 派 生 し た IEventHandler には 追 加 メソッドとして HandleEvent が 設 計 されています これら 合 計 4 つのメ ソッドは 全 て 純 仮 想 関 数 (pure virtual method)として 記 述 されているため そこからの 最 終 的 な 派 生 クラス TMyEventSink は これらを 全 て 現 実 に 実 装 する 必 要 があります (そうしないとビルドが 通 りません ) 幸 い Delphi には IUnknown の 3 つのメソッドを 実 装 済 みのデリゲート クラス TInterfacedObject 型 が 用 意 されています unit MyEventSink; interface uses System.SysUtils, ComObj, Windows, ActiveX, VisaComLib_TLB; type TMyEventSink = class( TInterfacedObject, IEventHandler) public // IUnknown KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 124/159

125 end; // (already implemented by TInterfacedObject) // IEventHandler function HandleEvent( const vi : IEventManager; const event : IEvent; userhandle : long ): HRESULT; stdcall; implementation // IEventHandler function TMyEventSink.HandleEvent( const vi : IEventManager; const event : IEvent; userhandle : long ): HRESULT; stdcall; var msg : IMessage; stb : short; hr : HRESULT; begin msg:= vi as IMEssage; hr:= msg.readstb( stb); end. Result:= hr; end; KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 125/159

126 23- IVI Configuration ここでは KI-VISA に 付 属 するもう 一 つのユーティリティ IVI Configuration Utility の 使 い 方 を 説 明 し ます IVI Configuration Utility は VISA ライブラリを 使 う 上 での 必 須 ツールではありません IVI 計 測 器 ドライバを 計 測 器 クラス のインターフェースで 使 用 する 際 に 仮 想 インストルメント を 設 定 するためのツールです この 章 での 記 述 は 2003 年 版 IVI ドライバガイドブック(IVI Configuration Utility 編 現 在 は 廃 刊 )からの 移 植 です 23-1 ユーティリティの 起 動 Start ボタン Programs Kikusui IO Software KI-VISA(x64)メニューから IVI Config Utility を 起 動 する 事 ができます 起 動 直 後 の 画 面 は 下 の 図 のようになっています 画 面 左 側 はツリー ビューになっていて 2 つの 階 層 が 表 示 されています 上 側 は Software Modules で この 階 層 には 現 在 インストールされている IVI-COM 計 測 器 ドライバが 全 て 表 示 されます 弊 社 製 以 外 の 例 えば Agilent Technologies 製 や Tektronix 製 の IVI-COM 計 測 器 ドライバも 表 示 されます 下 側 は Logical Names で ここには 利 用 可 能 な 全 ての 仮 想 インストルメントが 表 示 されます 下 図 の 例 では Kikusui4800 というロジカル ネームで 識 別 される 仮 想 インストルメントが 設 定 されて います Figure 23-1 Kikusui IVI Config Utility メイン スクリーン ロジカル ネーム Kikusui4800 は Kikusui4800 IVI-COM ドライバをインストールした 時 に 作 成 され るデフォルトの 仮 想 インストルメントです これをカスタマイズしても 良 いのですが ここでは 新 規 に 作 成 する 例 を 示 します IVI-COM 計 測 器 ドライバをセットアップすると デフォルトの 仮 想 インストルメント(ロジカル ネーム)が 作 成 され る 場 合 があります これは 仮 想 インストルメントの 作 成 をする 際 のサンプルとして 用 意 されています ロジカル ネームを 変 更 して 利 用 しても 良 いでしょう デフォルトの 仮 想 インストルメントは IVI-COM ドライバのベンダーやバージョンによっては 提 供 されない 場 合 が あります KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 126/159

127 23-2 ロジカル ネームの 追 加 ツリー 表 示 の 上 で Logical Names と 書 かれた 部 分 を 右 クリックすると コンテキスト メニューが 表 示 されるので Add Logical Name を 選 択 します すると Add Logical Name ダイアログが 表 示 されます Figure 23-2 Logical Name の 追 加 ここでは 新 規 作 成 したい 仮 想 インストルメントの 名 前 を 指 定 します ロジカル ネームに 使 用 できる 文 字 は 英 数 字 (A..Z, a..z, 0..9) アンダースコア(_) 及 び 感 嘆 符 (!)のみです また 既 に 存 在 するロ ジカル ネームは 使 用 できません ロジカル ネームはケース センシティブ( 大 文 字 小 文 字 の 区 別 あり)です ここでは 例 として MySupply という 名 前 を 指 定 します すると この 名 前 が Logical Names に 追 加 されて 表 示 されます ロジカル ネームを 与 えて 仮 想 インストルメントを 作 成 したら Logical Name Driver Session Hardware Asset Virtual Names のタブ ページで 具 体 的 な 設 定 を 行 います 23-3 タブ ページでの 設 定 Logical Name タブ KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 127/159

128 Figure 23-3 Logical Name タブ このページで 設 定 できるのは Description だけです 機 能 上 の 特 別 な 意 味 は 無 いのでここでは 省 略 します 空 白 のまま 放 置 して 構 いません Driver Session タブ Figure 23-4 Driver Session タブ Description は 機 能 上 の 特 別 な 意 味 は 無 いので 空 白 のまま 放 置 して 構 いません Software Module では コンボボックスで 提 示 されるソフトウェア モジュールを 1 つ 選 択 します これは この 仮 想 インストルメントをどの 計 測 器 ドライバでホストするかを 決 定 する 重 要 な 設 定 です ここでは Kikusui4800.Software でホストしてもらうので それを 選 択 してください 選 択 肢 として 提 示 されたも の 以 外 は 指 定 できません Figure 23-5 Software Module の 選 択 Default Operation では Range Check, Cache Simulate Query Instr Status Record Coercions Interchange Check の ON/OFF 設 定 及 び Driver Setting 文 字 列 を 設 定 します ここで 設 定 した 内 容 は アプリケーションが Initialize メソッドを 呼 び 出 したときのデフォルト 設 定 となります Figure 23-6 Default Operation の 設 定 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 128/159

129 Range Check が 有 効 になっている 場 合 ドライバはプロパティの put_アクセスにおける 入 力 値 とメ ソッド 呼 び 出 しのパラメータ 値 をチェックします この 機 能 は 計 測 器 に 対 して 範 囲 外 の 値 を 送 る 前 の 事 前 チェックとして 行 われます アプリケーションのデバッグ 時 に 役 に 立 ちます Cache が 有 効 になっている 場 合 ドライバは 不 必 要 な I/O を 排 除 します たとえば もし 或 る 値 が 計 測 器 に 既 に 設 定 されている 場 合 計 測 器 に 同 じ 設 定 値 を 再 度 送 ることは 冗 長 です 無 駄 な I/O を 排 除 することでアプリケーションのパフォーマンスが 向 上 します Simulate が 有 効 になっている 場 合 ドライバは 計 測 器 への I/O を 行 わず 出 力 パラメータにシミュ レートされた 値 を 返 します この 機 能 はアプリケーション 開 発 で 実 際 の 計 測 器 が 準 備 できていない 場 合 に 役 に 立 ちます Query Instr Status が 有 効 になっている 場 合 ドライバは 計 測 器 への I/O を 行 う 各 メソッド 呼 び 出 し 或 いはプロパティへのアクセスの 後 に 計 測 器 への 問 い 合 わせを 行 います 計 測 器 がエラーを 報 告 した 場 合 ErrorQuery メソッドを 使 用 して 計 測 器 からエラーメッセージを 取 得 することができます アプリケーションのデバッグ 時 に 役 に 立 ちますが 開 発 が 完 了 したら 無 効 に 設 定 すればよいでしょう Record Coercions が 有 効 になっている 場 合 ドライバは LONG と DOUBLE 値 に 関 してコアーショ ン( 値 の 強 制 ) 記 録 のリストを 作 成 します ドライバがコアーション 記 録 をサポートしない 場 合 は この 設 定 は 無 視 されます Interchange Check が 有 効 になっている 場 合 ドライバは インターチェンジャビリティ 警 告 の 記 録 を 作 成 します ドライバがインターチェンジャビリティのチェックをサポートしない 場 合 は この 設 定 は 無 視 されます Hardware Asset タブ Figure 23-7 Hardware Asset タブ Description は 機 能 上 の 特 別 な 意 味 は 無 いので 空 白 のまま 放 置 して 構 いません IO Resource Descriptor のコンボボックスには 現 在 使 用 可 能 な VISA I/O リソースが 提 示 されます 選 択 肢 の 中 から 適 切 なものを 選 んで 下 さい 接 続 されていない 計 測 器 や TCP/IP 上 の 計 測 器 などは リストに 表 示 されません この 場 合 には 直 接 VISA リソースを 入 力 してください アプリケーションがロジカル ネームをパラメータにして Initialize メソッドを 呼 び 出 したとき ここで 設 定 された VISA リソース を 使 用 して 計 測 器 との I/O を 行 います KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 129/159

130 Figure 23-8 IO Resource Descriptor の 選 択 Check Instrument ボタンをクリックすると VISA COM ライブラリを 使 用 した 簡 単 な I/O テストが 行 えます Virtual Name タブ Figure 23-9 Virtual Names タブ ここでは バーチャル ネームとフィジカル ネームのマッピングを 行 います これは リピーテッド キ ャパビリティを 使 用 する 場 合 の オブジェクトの 識 別 に 使 われます リピーテッド キャパビリティとは 全 く 同 じ 或 いは 類 似 する 複 数 のオブジェクトを 配 列 又 はコンテナの ように 扱 う 概 念 です 例 えば IviDCPwr クラスに 属 する 計 測 器 ドライバでは 出 力 チャンネルを 複 数 装 備 したマルチ トラック DC 電 源 装 置 を 前 提 に 設 計 されています 別 の 例 では IviScope クラスに 属 する 計 測 器 ドライバは 複 数 のトレース チャンネルを 装 備 するオシロスコープを 前 提 に 設 計 され ています このように 類 似 するオブジェクトを 複 数 保 持 する 場 合 にはリピーテッド キャパビリティを 仕 様 する 事 が IVI 仕 様 で 推 奨 されています IviDCPwr クラスに 属 する Kikusui4800 IVI-COM ドライバでは "N5!C1"のようなルールの 名 前 で 出 力 オブジェクトを 識 別 しますが このような 名 前 は 計 測 器 ドライバ 独 自 のものです このようなドラ イバ 独 自 の 名 前 をフィジカル ネームと 言 います しかしインターチェンジャビリティ 機 能 を 利 用 するア プリケーションから 特 定 ドライバに 依 存 したフィジカル ネームを 使 うわけにはいきません そこでバ ーチャル ネームを 作 成 し それがどのフィジカル ネームにマップされるかを 設 定 する 必 要 がありま す Names 側 にある Add ボタンをクリックすると Virtual Name ダイアログが 表 示 されます KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 130/159

131 Figure Virtual Name ダイアログ ここでは 例 として Name の 項 目 に Track_A MapTo の 項 目 に N5!C1 とタイプします OK ボタ ンをクリックするとバーチャル ネームが 1 つ 出 来 上 がりました この 設 定 により アプリケーションがリピーテッド キャパビリティを 通 じて"Track_A"のオブジェクト を 参 照 しようとすると 計 測 器 ドライバはそのマップ 先 である"N5!C1"を 指 定 されたと 解 釈 します こ れにより 計 測 器 ドライバ 内 で"N5!C1"という 名 前 で 存 在 するオブジェクトを "Track_A"という 名 前 で 参 照 できるわけです 同 様 の 手 順 で 必 要 な 数 だけマップを 作 成 してください 同 じ 名 前 を Name に 複 数 回 指 定 する 事 はで きません 全 てのバーチャル ネームは 一 意 的 な 名 前 でなければなりません しかし 異 なるバーチ ャル ネームが 同 じフィジカル ネームにマップする 事 は 構 いません これは 同 じフィジカル ネームに 対 して 複 数 のバーチャル ネームでエイリアス( 別 名 )を 作 った 事 になります また 全 てのフィジカル ネームに 対 して 対 応 するバーチャル ネームを 作 成 する 必 要 はありません 例 えば Kikusui4800 IVI-COM ドライバでは"N30!C4"は 有 効 なフィジカル ネームですが アプリケ ーションがそのオブジェクトを 参 照 しないのであれば それにマップされるバーチャル ネームを 作 る 必 要 はありません 現 在 利 用 可 能 なバーチャル ネームとそのマップ 先 フィジカル ネームを 全 て 表 示 するには Show Available Virtual Names ボタンをクリックします Figure Show Available Virtual Names ダイアログ マップ 先 として 利 用 可 能 なフィジカル ネームは Driver Session タブの Software Module コン ボボックスで 選 択 されたソフトウェア モジュール( 計 測 器 ドライバ ソフトウェア)によって 全 く 異 なりま す その 情 報 を 得 るには 計 測 器 ドライバのオンライン ヘルプや Readme 文 書 を 参 照 するか また は 各 言 語 別 に 用 意 されたプログラミング ガイドブックに 示 されるサンプル コードを 使 って 取 得 してく ださい KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 131/159

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2 目 次 動 作 環 境 特 長 方 法 方 法 起 動 終 了 方 法 方 法 操 作 方 法 使 方 使 方 使 方 詳 細 設 定 使 方 KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2 KINGSOFT Office 2016 特 長 主 特 長 以

More information

目 次 1. 積 算 内 訳 書 に 関 する 留 意 事 項 1 ページ 2. 積 算 内 訳 書 のダウンロード 3 ページ 3. 積 算 内 訳 書 の 作 成 (Excel 2003の 場 合 ) 6 ページ 4. 積 算 内 訳 書 の 作 成 (Excel 2007の 場 合 ) 13

目 次 1. 積 算 内 訳 書 に 関 する 留 意 事 項 1 ページ 2. 積 算 内 訳 書 のダウンロード 3 ページ 3. 積 算 内 訳 書 の 作 成 (Excel 2003の 場 合 ) 6 ページ 4. 積 算 内 訳 書 の 作 成 (Excel 2007の 場 合 ) 13 積 算 内 訳 書 の 作 成 マニュアル 平 成 26 年 1 形 県 県 整 備 部 建 設 企 画 課 目 次 1. 積 算 内 訳 書 に 関 する 留 意 事 項 1 ページ 2. 積 算 内 訳 書 のダウンロード 3 ページ 3. 積 算 内 訳 書 の 作 成 (Excel 2003の 場 合 ) 6 ページ 4. 積 算 内 訳 書 の 作 成 (Excel 2007の 場 合 )

More information

別冊資料-11

別冊資料-11 一 般 競 争 入 札 方 式 工 事 希 望 型 競 争 入 札 方 式 における 技 術 資 料 入 力 システムの 利 用 方 法 について Rev 8.0( 平 成 28 年 3 月 ) 国 土 交 通 省 中 国 地 方 整 備 局 - 目 次 - 1. はじめに... 1 2. 利 用 環 境 及 び 注 意 事 項... 1 3. 入 力 手 順 について... 2 3.1. 技 術

More information

研究者情報データベース

研究者情報データベース 研 究 者 情 報 管 理 システム 研 究 者 向 けデータ 一 括 登 録 機 能 操 作 マニュアル 2013 年 6 月 4 日 目 次 1. はじめに... 1 1.1 本 マニュアルの 注 意 事 項... 1 2. 操 作 手 順... 2 2.1 データ 登 録 手 順... 2 2.2 データ 読 み 込 みエラー 時 の 対 応 手 順... 13 3. 登 録 データ 一 覧...

More information

Microsoft Word - 参考資料:SCC_IPsec_win8__リモート設定手順書_20140502

Microsoft Word - 参考資料:SCC_IPsec_win8__リモート設定手順書_20140502 セキュアカメラクラウドサービス リモート 接 続 設 定 順 書 Windows 8 版 Ver1.0 株 式 会 社 NTTPC コミュニケーションズ Copyright 2014 NTT PC Communications Incorporated, All Rights Reserved. 次 1. はじめに... 2 2. 実 施 前 ご 確 認 事 項... 2 3. VPN 接 続 設

More information

事前チェック提出用現況報告書作成ツール入力マニュアル(法人用)

事前チェック提出用現況報告書作成ツール入力マニュアル(法人用) 事 前 チェック 提 出 用 現 況 報 告 書 作 成 ツール 入 力 マニュアル ( 法 人 用 ) 平 成 26 年 7 月 一 般 社 団 法 人 日 本 補 償 コンサルタント 協 会 目 次 1. ツールの 概 要 1 2. 動 作 環 境 1 3. マクロの 設 定 (1) Excel のバージョンの 確 認 2 (2) マクロの 設 定 3 4. 現 況 報 告 書 の 作 成 (1)

More information

変 更 履 歴 日 付 版 数 変 更 内 容 2012/07/13 Rev 1.0.0 初 版 発 行 2013/07/03 Rev 1.3.3 1.2. 対 応 機 器 一 覧 機 器 一 覧 を 更 新 3.2.1.[Settings] 画 面 の 表 示 時 刻 を 挿 入 する 機 能 を

変 更 履 歴 日 付 版 数 変 更 内 容 2012/07/13 Rev 1.0.0 初 版 発 行 2013/07/03 Rev 1.3.3 1.2. 対 応 機 器 一 覧 機 器 一 覧 を 更 新 3.2.1.[Settings] 画 面 の 表 示 時 刻 を 挿 入 する 機 能 を キーボードエミュレーションツール RFID2KBD 取 扱 説 明 書 2015 年 5 月 29 日 第 2.0.0 版 株 式 会 社 アートファイネックス 変 更 履 歴 日 付 版 数 変 更 内 容 2012/07/13 Rev 1.0.0 初 版 発 行 2013/07/03 Rev 1.3.3 1.2. 対 応 機 器 一 覧 機 器 一 覧 を 更 新 3.2.1.[Settings]

More information

目 次 1. Web メールのご 利 用 について... 2 2. Web メール 画 面 のフロー 図... 3 3. Web メールへのアクセス... 4 4. ログイン 画 面... 5 5. ログイン 後 (メール 一 覧 画 面 )... 6 6. 画 面 共 通 項 目... 7 7.

目 次 1. Web メールのご 利 用 について... 2 2. Web メール 画 面 のフロー 図... 3 3. Web メールへのアクセス... 4 4. ログイン 画 面... 5 5. ログイン 後 (メール 一 覧 画 面 )... 6 6. 画 面 共 通 項 目... 7 7. Web メール 操 作 説 明 書 京 都 与 謝 野 町 有 線 テレビ 0 目 次 1. Web メールのご 利 用 について... 2 2. Web メール 画 面 のフロー 図... 3 3. Web メールへのアクセス... 4 4. ログイン 画 面... 5 5. ログイン 後 (メール 一 覧 画 面 )... 6 6. 画 面 共 通 項 目... 7 7. メール 一 覧 画 面...

More information

端 末 型 払 い 出 しの 場 合 接 続 構 成 図 フレッツ グループから 払 出 されたIPアドレス /32 NTT 西 日 本 地 域 IP 網 フレッツ グループ フレッツ グループから 払 出 されたIPアドレス /

端 末 型 払 い 出 しの 場 合 接 続 構 成 図 フレッツ グループから 払 出 されたIPアドレス /32 NTT 西 日 本 地 域 IP 網 フレッツ グループ フレッツ グループから 払 出 されたIPアドレス / CTU 端 末 型 接 続 設 定 例 H19 年 10 月 端 末 型 払 い 出 しの 場 合 接 続 構 成 図 フレッツ グループから 払 出 されたIPアドレス 172.25.1.1/32 NTT 西 日 本 地 域 IP 網 フレッツ グループ フレッツ グループから 払 出 されたIPアドレス 172.25.1.2/32 172.25.1.1 172.25.1.2 192.168.24.1

More information

(Microsoft PowerPoint - Ver12\203o\201[\203W\203\207\203\223\203A\203b\203v\216\221\227\277.ppt)

(Microsoft PowerPoint - Ver12\203o\201[\203W\203\207\203\223\203A\203b\203v\216\221\227\277.ppt) ACAD-DENKI DENKI Ver.12 新 機 能 / 改 善 機 能 アルファテック 株 式 会 社 1 新 機 能 改 善 機 能 一 覧 ACAD-DENKI/EL Ver.12 新 機 能 と 改 善 機 能 新 メニュー/ 新 機 能 拡 張 プロジェクト 管 理 外 部 端 子 コネクタ 端 子 ネット 分 割 化 リアルタイム 線 番 挿 入 改 善 項 目 図 題 情 報 編

More information

医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート - 目 次 - < 第 1 章 > 共 通 事 項 説 明 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート 目 次 1.1 本 システムの 注 意 点 1 1.2 入 力 項 目 について 1.2.1 基 本 情

医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート - 目 次 - < 第 1 章 > 共 通 事 項 説 明 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート 目 次 1.1 本 システムの 注 意 点 1 1.2 入 力 項 目 について 1.2.1 基 本 情 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート - 目 次 - < 第 1 章 > 共 通 事 項 説 明 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート 目 次 1.1 本 システムの 注 意 点 1 1.2 入 力 項 目 について 1.2.1 基 本 情 報 入 力 項 目 2 1.2.2 子 ども 医 療 費 明 細 入 力 項 目 3 1.2.3 ひとり

More information

前 書 き 広 域 機 関 システム System for Organization for Cross-regional Coordination of Transmission Operators(OCCTO) rev:2016-01-00 商 標 類 Windows Office Excel

前 書 き 広 域 機 関 システム System for Organization for Cross-regional Coordination of Transmission Operators(OCCTO) rev:2016-01-00 商 標 類 Windows Office Excel 広 域 機 関 システム 操 作 マニュアル 共 通 2016-01-00 前 書 き 広 域 機 関 システム System for Organization for Cross-regional Coordination of Transmission Operators(OCCTO) rev:2016-01-00 商 標 類 Windows Office Excel Word Internet

More information

変 更 履 歴 日 付 Document ver. 変 更 箇 所 変 更 内 容 2015/3/27 1.0.0 新 規 追 加 2015/9/24 誤 字 修 正 2016/2/19 1.01 動 作 環 境 最 新 のものへ 変 更 全 体 オペレーター の 表 記 を 削 除 2016/5/

変 更 履 歴 日 付 Document ver. 変 更 箇 所 変 更 内 容 2015/3/27 1.0.0 新 規 追 加 2015/9/24 誤 字 修 正 2016/2/19 1.01 動 作 環 境 最 新 のものへ 変 更 全 体 オペレーター の 表 記 を 削 除 2016/5/ KDDI Smart Mobile Safety Manager Mac ユーザーマニュアル 最 終 更 新 日 2016 年 5 月 26 日 Document ver.1.0.2 1 変 更 履 歴 日 付 Document ver. 変 更 箇 所 変 更 内 容 2015/3/27 1.0.0 新 規 追 加 2015/9/24 誤 字 修 正 2016/2/19 1.01 動 作 環 境

More information

<4D6963726F736F667420576F7264202D20819C486F70658F6F93588ED297708AC7979D89E696CA837D836A83858341838B8169342E33566572816A2E646F63>

<4D6963726F736F667420576F7264202D20819C486F70658F6F93588ED297708AC7979D89E696CA837D836A83858341838B8169342E33566572816A2E646F63> 商 品 管 理 商 品 管 理 を 行 うためのメニューです 4.1 商 品 管 理 のサイドメニュー 商 品 管 理 には 以 下 のサイドメニューがあります 商 品 一 覧 登 録 済 みの 商 品 の 一 覧 を 表 示 します 既 に 登 録 済 みの 商 品 の 検 索 検 索 した 商 品 を 編 集 する 際 に 使 用 します 新 規 作 成 商 品 を 新 規 登 録 する 画 面

More information

POWER EGG V2.01 ユーザーズマニュアル ファイル管理編

POWER EGG V2.01 ユーザーズマニュアル ファイル管理編 POWER EGG V2.0 ユーザーズマニュアル ファイル 管 理 編 Copyright 2009 D-CIRCLE,INC. All Rights Reserved 2009.4 はじめに 本 書 では POWER EGG 利 用 者 向 けに 以 下 の POWER EGG のファイル 管 理 機 能 に 関 する 操 作 を 説 明 しま す なお 当 マニュアルでは ファイル 管 理 機

More information

CSV_Backup_Guide

CSV_Backup_Guide ActiveImage Protector による クラスター 共 有 ボリュームのバックアップ 運 用 ガイド 第 5 版 - 2015 年 4 月 20 日 Copyright NetJapan, Inc. All Rights Reserved. 無 断 複 写 転 載 を 禁 止 します 本 ソフトウェアと 付 属 ドキュメントは 株 式 会 社 ネットジャパンに 所 有 権 および 著 作

More information

Microsoft Word - 操作マニュアル(石油コンビナート_オフラインソフト編)_v0.2.doc

Microsoft Word - 操作マニュアル(石油コンビナート_オフラインソフト編)_v0.2.doc 総 務 省 消 防 庁 統 計 調 査 系 システム 操 作 マニュアル 石 油 コンビナート 等 実 態 調 査 業 務 (オフライン オフラインソフト 編 ) 第 0.2 版 平 成 25 年 3 月 総 務 省 消 防 庁 改 訂 履 歴 版 改 訂 日 改 訂 内 容 第 0.1 版 平 成 24 年 1 月 24 日 新 規 作 成 第 0.2 版 平 成 24 年 3 月 2 日 第 4

More information

HTG-35U ブルーバック表示の手順書 (2014年12月改定)

HTG-35U ブルーバック表示の手順書 (2014年12月改定) HTG-35U ブルーバック 表 示 の 手 順 書 概 要 本 書 は HTG-35U にてブルーバックの 画 面 を 出 力 するための 手 順 書 です HTG-35U のビットマップ 出 力 機 能 及 び 固 定 文 字 表 示 機 能 を 使 用 してブルーバックの 表 示 を 設 定 します また ブルーバックの 表 示 / 非 表 示 をタイマーで 自 動 に 切 り 替 えを 行

More information

<4D6963726F736F667420576F7264202D208CA990CF96BE8DD78F918EAE82CC95CF8D583230313131313130>

<4D6963726F736F667420576F7264202D208CA990CF96BE8DD78F918EAE82CC95CF8D583230313131313130> 平 成 23 年 11 月 10 日 協 力 会 社 の 皆 様 へ 西 松 建 設 株 式 会 社 見 積 明 細 書 書 式 の 変 更 について 平 成 23 年 6 月 より 新 業 務 システム(RN21 システム)を 導 入 しておりますが 運 用 を 円 滑 なものとするため 提 出 いただく 見 積 明 細 書 の 書 式 を 変 更 いたしました 以 下 に 取 り 扱 い 要 領

More information

目 次 1. はじめに 3 2. システム 要 件 4 3. HDD Password Tool のインストール 5 Windows の 場 合 5 Mac の 場 合 8 4. HDD Password Tool の 使 い 方 10 4-1 HDD Password Tool を 起 動 する

目 次 1. はじめに 3 2. システム 要 件 4 3. HDD Password Tool のインストール 5 Windows の 場 合 5 Mac の 場 合 8 4. HDD Password Tool の 使 い 方 10 4-1 HDD Password Tool を 起 動 する HDD Password Tool USB3.0/2.0 東 芝 製 外 付 けハードディスク CANVIO 用 パスワードツールソフトウェア 取 扱 説 明 書 1.10 版 - 1 - 目 次 1. はじめに 3 2. システム 要 件 4 3. HDD Password Tool のインストール 5 Windows の 場 合 5 Mac の 場 合 8 4. HDD Password Tool

More information

電子納品チェックシステム利用マニュアル

電子納品チェックシステム利用マニュアル 高 知 県 版 電 子 納 品 チェックシステム 利 用 マニュアル Ver.11 高 知 県 目 次 1. 概 要... 1 1-1 システムの 基 本 機 能... 1 1-2 システムの 機 能 概 要... 1 1-2-1 対 応 する 要 領 基 準... 1 1-2-2 動 作 環 境... 1 1-2-3 電 子 納 品 データのチェック 手 順... 2 2. インストール... 3

More information

( 運 用 制 限 ) 第 5 条 労 働 基 準 局 は 本 システムの 維 持 補 修 の 必 要 があるとき 天 災 地 変 その 他 の 事 由 によりシステムに 障 害 又 は 遅 延 の 生 じたとき その 他 理 由 の 如 何 を 問 わず その 裁 量 により システム 利 用 者

( 運 用 制 限 ) 第 5 条 労 働 基 準 局 は 本 システムの 維 持 補 修 の 必 要 があるとき 天 災 地 変 その 他 の 事 由 によりシステムに 障 害 又 は 遅 延 の 生 じたとき その 他 理 由 の 如 何 を 問 わず その 裁 量 により システム 利 用 者 労 災 レセプト 電 算 処 理 システム 利 用 規 約 ( 目 的 及 び 定 義 ) 第 1 条 本 規 約 は 厚 生 労 働 省 労 働 基 準 局 ( 以 下 労 働 基 準 局 という )が 運 営 する 労 災 レセプト 電 算 処 理 システムを 利 用 する 場 合 に 必 要 な 事 項 を 定 めるものです 2 本 規 約 において 使 用 する 用 語 の 意 義 は 次

More information

ファイルサーバー(NFS) 構築ガイド

ファイルサーバー(NFS) 構築ガイド CLUSTERPRO D for Linux ファイルサーバー(NFS) 構 築 ガイド 改 版 履 歴 版 数 改 版 日 付 内 容 1 2016/04/20 新 規 作 成 i 目 次 第 1 章 はじめに... 1 1.1 対 象 読 者 と 目 的...2 1.2 適 用 範 囲...2 1.3 表 記 規 則...2 1.4 免 責 事 項...2 1.5 商 標 情 報...3 1.6

More information

入退室インストールマニュアル.pdf

入退室インストールマニュアル.pdf TimeCharger AirTouch 入 退 室 インストールマニュアル 目 次 1.はじめに.......................... 1 2. 注 意............................ 1 3. 前 準 備 3-1.Windows 10 にインストールする 場 合 3-1-1.スクリーンセーバ-の 設 定................ 2 3-1-2. 自

More information

<4D F736F F D2090C389AA8CA72D92F18F6F2D D F ED28CFC82AF91808DEC837D836A B E838B A815B816A2E646F6378>

<4D F736F F D2090C389AA8CA72D92F18F6F2D D F ED28CFC82AF91808DEC837D836A B E838B A815B816A2E646F6378> 1. 基 本 事 項 1.1. システムで 行 えること デジタルライブラリー では データベース 上 に 登 録 されている 様 々なカテゴリのデータを 検 索 閲 覧 できます データを 検 索 する キーワード 検 索 全 データをフリーワードで 検 索 できます 簡 易 検 索 データの 共 通 項 目 に 条 件 を 指 定 し 全 データを 横 断 して 検 索 できます 詳 細 検 索

More information

ーがサーバーにファイルをアップロードしたり ファイルを 電 子 メールで 送 信 したために) 利 用 できるようになった 場 合 手 動 で 転 送 されたこれらのファイルにアクセスするユーザーまたはデバイスに CAL は 必 要 ありません 以 下 の 例 では 特 定 の 製 品 について 説

ーがサーバーにファイルをアップロードしたり ファイルを 電 子 メールで 送 信 したために) 利 用 できるようになった 場 合 手 動 で 転 送 されたこれらのファイルにアクセスするユーザーまたはデバイスに CAL は 必 要 ありません 以 下 の 例 では 特 定 の 製 品 について 説 ボリューム ライセンス 簡 易 ガイド マルチプレキシング ( 多 重 化 ) クライアント アクセス ライセンス (CAL) の 要 件 この 簡 易 ガイドは すべてのマイクロソフト ボリューム ライセンス プログラムに 適 用 されます 目 次 概 要... 1 この 簡 易 ガイドの 更 新 内 容... 1 詳 細... 1 Microsoft SQL Server... 2 Microsoft

More information

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合 TIPS 目 次 TIPS 項 目 棚 割 りを 開 始 するまで 商 品 画 像 の 追 加 方 法 商 品 情 報 の 一 括 更 新 登 録 方 法 棚 割 情 報 の 連 携 方 法 小 売 様 棚 割 ソフトとの 棚 割 情 報 連 携 について 他 棚 割 ソフトとの 棚 割 情 報 連 携 について 棚 割 情 報 のExcel 取 込 について 棚 板 設 定 の 詳 細 商 品 設

More information

R4財務対応障害一覧

R4財務対応障害一覧 1 仕 訳 入 力 仕 訳 入 力 時 摘 要 欄 で. + Enter を 押 すと アプリケーションでエラーが 発 生 しまインデックスが 配 列 の 境 界 外 です が 出 る 場 合 がある 問 題 に 対 応 しま 2 仕 訳 入 力 仕 訳 入 力 主 科 目 と 補 助 科 目 を 固 定 にすると2 行 目 以 降 の 補 助 科 目 コピーが 動 作 しない 問 題 に 対 応

More information

<4D F736F F F696E74202D2082C882E982D982C DD8ED88EE688F882CC82B582AD82DD C668DDA9770>

<4D F736F F F696E74202D2082C882E982D982C DD8ED88EE688F882CC82B582AD82DD C668DDA9770> な る ほ ど! 貸 借 取 引 のしくみ Japan Securities Finance Co.,Ltd 1 目 次 1. 貸 借 取 引 について 2. 貸 借 取 引 における 株 式 調 達 について 3. 品 貸 料 の 決 定 方 法 について 4. 制 限 措 置 を 含 む 貸 借 取 引 情 報 について 5.よくある 質 問 Japan Securities Finance Co.,Ltd

More information

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド 本 書 では 管 理 者 向 けに MetaMoJi ClassRoom/ゼミナールで 年 度 更 新 を 実 施 する 手 順 について 説 明 して います 管 理 者 ガイドと 合 わせてご 覧 ください Excelは 米 国 Microsoft Corporationの 米 国 およびその 他 の 国 における 登 録 商 標 または 商 標 です Apache OpenOffice Apache

More information

1-1 一覧画面からの印刷

1-1 一覧画面からの印刷 第 7 章 公 報 の 印 刷 7-1 一 覧 画 面 からの 印 刷 検 索 された 公 報 は 印 刷 することができます 目 次 印 刷 や 公 報 全 文 複 数 件 の 公 報 印 刷 も 可 能 です はじめに 検 索 画 面 から 結 果 一 覧 ボタンを 押 して 検 索 結 果 一 覧 画 面 を 表 示 させます 印 刷 方 法 をご 確 認 ください 一 括 選 択 ( 反 転

More information

Microsoft Word - 生物学技研報告ONLINE ガイドブック.doc

Microsoft Word - 生物学技研報告ONLINE ガイドブック.doc 生 物 学 技 研 報 告 ONLINE ガイドブック 基 礎 生 物 学 研 究 所 技 術 課 2010 年 2 月 第 1 版 1. 生 物 学 技 研 報 告 ONLINE へのアクセス URL 生 物 学 技 研 報 告 ONLINE は 基 生 研 技 術 課 Web サイト TechDivWeb(techdiv.nibb.ac.jp) のコンテンツです 上 記 よりリンクをたどるか 下

More information

購買ポータルサイトyOASIS簡易説明書 b

購買ポータルサイトyOASIS簡易説明書 b 購 買 ポータルサイト yoasis 簡 易 説 明 書 横 河 電 機 株 式 会 社 本 書 は 購 買 ポータルサイト yoasis の 簡 易 的 な 基 本 操 作 について 記 載 してあります 詳 細 な 操 作 方 法 については 別 冊 の 購 買 ポータルサイト yoasis 操 作 説 明 書 をご 覧 下 さい 本 書 の 内 容 は 性 能 / 機 能 の 向 上 などにより

More information

Microsoft Word - TechSmith Deployment Tool Documentation.docx

Microsoft Word - TechSmith Deployment Tool Documentation.docx TechSmith Deployment Tool マニュアル TechSmith Deployment Tool は Snagit や Camtasia Studio の 組 織 全 体 への 展 開 を 担 当 する Windows IT 管 理 者 のために 設 計 されたツールです このツールのイン ターフェイスを 使 用 することで 効 率 的 かつエラーのない 方 法 で MST ( 変

More information

メール 受 信 画 面 のレイアウトを 変 更 することができます ここでは 初 期 設 定 のレイアウトで 表 示 されているボタ ンやマークについて 解 説 します メール 一 覧 画 面 には 受 信 したメールが 一 覧 表 示 されます メール 受 信 タブをクリックすると 受 信 箱 フ

メール 受 信 画 面 のレイアウトを 変 更 することができます ここでは 初 期 設 定 のレイアウトで 表 示 されているボタ ンやマークについて 解 説 します メール 一 覧 画 面 には 受 信 したメールが 一 覧 表 示 されます メール 受 信 タブをクリックすると 受 信 箱 フ .3 1...3 メール 受 信 タブのサブメニューから 直 接 受 信 箱 以 外 のフォルダを 表 示 することもできます 共 有 メー ルボックスのフォルダは 指 定 できません 3. 35 メール 受 信 画 面 のレイアウトを 変 更 することができます ここでは 初 期 設 定 のレイアウトで 表 示 されているボタ ンやマークについて 解 説 します メール 一 覧 画 面 には 受

More information

Mac OS Xでの利用設定 マニュアル

Mac OS Xでの利用設定 マニュアル Enterprise Architect on Mac OS X setup guide by SparxSystems Japan Mac OS X 環 境 での 利 用 設 定 マニュアル (2015/12/01 最 終 更 新 ) 1. はじめに このドキュメントでは Enterprise Architect を Mac OS X で 動 作 させるための 設 定 につ いて 説 明 したドキュメントです

More information

Microsoft Word - ML_ListManager_10j.doc

Microsoft Word - ML_ListManager_10j.doc メーリングリスト 利 用 の 手 引 き(リスト 管 理 者 編 ) for LyrisSynaptive ListManager 10j 第 5 版 目 次... 1 1. メーリングリストとは?... 2 2. メーリングリストの 開 設... 2 2-1 管 理 者 画 面 へのログイン... 2 2-2 リスト 管 理 者 自 身 のパスワードの 変 更... 4 3. メンバーの 登 録...

More information

WebMail ユーザーズガイド

WebMail ユーザーズガイド ニフティクラウド ビジネスメール メール 共 有 サービス ユーザーズガイド 第 1.1 版 平 成 26 年 5 月 19 日 ニフティ 株 式 会 社 目 次 はじめに... 3 1. 共 有 メールボックスとは... 4 2. 共 有 メールボックスを 表 示 する... 5 3. 閲 覧 履 歴 操 作 履 歴 を 表 示 する... 8 4. 共 有 メールボックスからメールを 送 信 する...

More information

<4D6963726F736F667420576F7264202D204F432D434F4D45548358835E815B8367834183628376837D836A83858341838B81698BA697CD89EF8ED09770816A2E646F6378>

<4D6963726F736F667420576F7264202D204F432D434F4D45548358835E815B8367834183628376837D836A83858341838B81698BA697CD89EF8ED09770816A2E646F6378> OC-COMET スタートアップマニュアル ( 協 力 会 社 用 ) ~Windows VISTA/7/8/8.1/10 編 ~ 第 13 版 2016 年 3 月 発 行 大 林 組 ECサポートセンター 改 訂 履 歴 第 1 版 2011 年 8 月 初 版 発 行 第 2 版 ~ 第 8 版 ( 省 略 ) 第 9 版 2014 年 4 月 Windows8/8.1 IE10/11 の 対

More information

技術報告会原稿フォーマット

技術報告会原稿フォーマット Web 情 報 共 有 サービス 利 用 マニュアル 1. ファイルの 保 存 ブラウザを 開 き https://webshare.kyokyo-u.ac.jp を 開 く.ログイン 画 面 が 表 示 されるので,ユーザ ID(メールの ID) とパスワードを 入 力 し,ログインボタンをクリックする( 図 2). ログインに 成 功 すると,TOP フォルダの 一 覧 が 表 示 される (

More information

V-CUBE One

V-CUBE One V-CUBE One Office 365 連 携 マニュアル ブイキューブ 2016/06/03 この 文 書 は V-CUBE One の Office 365 連 携 用 ご 利 用 マニュアルです 更 新 履 歴 更 新 日 内 容 2016/02/09 新 規 作 成 2016/03/11 Office 365 ID を 既 存 の One 利 用 者 と 紐 付 ける 機 能 に 関 する

More information

アプリケーション補足説明書(Office2003)

アプリケーション補足説明書(Office2003) 目 次 はじめに................................................... 2 1 Office 2003 について...................................... 4 プレインストールソフトウェア................................. 4 プレインストールソフトウェアの 起 動 について....................

More information

目 次 必 ずお 読 みください...2 1. 接 続 方 法...2 1-1 WEB ブラウザ 操 作 方 法... 3 1-2 閲 覧 用 PC で 直 接 ZERO 本 体 と 接 続 する 場 合... 3 2. 各 ページについて...3 2-1 発 電 状 況 画 面 表 示... 3

目 次 必 ずお 読 みください...2 1. 接 続 方 法...2 1-1 WEB ブラウザ 操 作 方 法... 3 1-2 閲 覧 用 PC で 直 接 ZERO 本 体 と 接 続 する 場 合... 3 2. 各 ページについて...3 2-1 発 電 状 況 画 面 表 示... 3 Solar Link ZERO WEB アプリケーション 取 扱 説 明 書 Ver1.2 株 式 会 社 ラプラス システム 2010 年 10 月 4 日 目 次 必 ずお 読 みください...2 1. 接 続 方 法...2 1-1 WEB ブラウザ 操 作 方 法... 3 1-2 閲 覧 用 PC で 直 接 ZERO 本 体 と 接 続 する 場 合... 3 2. 各 ページについて...3

More information

<4D6963726F736F667420576F7264202D20819B93FC97CD835683588365838082CC91808DEC95FB964081693230313589FC92F994C5816A>

<4D6963726F736F667420576F7264202D20819B93FC97CD835683588365838082CC91808DEC95FB964081693230313589FC92F994C5816A> 岡 山 大 学 情 報 データベースシステムの 操 作 方 法 1 インターネットブラウザの 設 定 まず ご 利 用 のブラウザ 環 境 に 応 じて 以 下 URL に 記 載 されている 設 定 を 行 ってください この 設 定 をしていない 場 合 岡 山 大 学 情 報 データベースシステムを 利 用 できない 場 合 があります Windows の Internet Explorer7.0

More information

目 次 1. 大 学 情 報 データベースシステムの 使 用 方 法 について... 1 1.1.EXCEL 一 括 登 録... 1 1.2.EXCEL ダウンロード... 2 1.2.1. 検 索 条 件 の 指 定 プレビュー... 3 1.2.2.EXCEL ダウンロード(データ 抽 出 あ

目 次 1. 大 学 情 報 データベースシステムの 使 用 方 法 について... 1 1.1.EXCEL 一 括 登 録... 1 1.2.EXCEL ダウンロード... 2 1.2.1. 検 索 条 件 の 指 定 プレビュー... 3 1.2.2.EXCEL ダウンロード(データ 抽 出 あ 大 学 情 報 データベースシステム EXCEL 一 括 登 録 マニュアル 目 次 1. 大 学 情 報 データベースシステムの 使 用 方 法 について... 1 1.1.EXCEL 一 括 登 録... 1 1.2.EXCEL ダウンロード... 2 1.2.1. 検 索 条 件 の 指 定 プレビュー... 3 1.2.2.EXCEL ダウンロード(データ 抽 出 あり)... 5 1.2.3.EXCEL

More information

治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.3 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバン

治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.3 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバン 2014 年 1 月 7 日 治 験 依 頼 者 各 位 新 潟 市 民 病 院 治 験 管 理 室 Excel 形 式 の 電 子 プロトコール 提 出 の 御 依 頼 当 院 では 効 率 的 で 正 確 な 治 験 の 実 施 のため 電 子 カルテ 内 に 専 用 の Excel 形 式 による 電 子 プロトコールを 導 入 しております つきましては 治 験 依 頼 の 際 に 下 記

More information

設定フロー ★印は必須の設定です

設定フロー ★印は必須の設定です AutoBiz StartUp Manual オートビズ 基 本 設 定 マニュアル ( 一 括 登 録 ~ メルマガ 配 信 編 ) 目 次 1. 登 録 用 アドレスリスト(CSV ファイル)の 作 成... 2 2.シナリオ 名 の 変 更...4 3. 登 録 ページ 作 成 でフォームを 作 成... 5 4. 完 了 ページ 作 成 で 解 除 完 了 ページの 設 定... 7 5.

More information

KI-VISA Library Guidebook J

KI-VISA Library Guidebook J KI-VISA Library VISA COM ガイドブック (KI-VISA 5.0.7 対応版 ) July 2012 Revision 2.4 KIKUSUI ELECTRONICS CORP. (This page is intentionally left blank) 2003-2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page

More information

AirStationPro初期設定

AirStationPro初期設定 AirStationPro 初 期 設 定 AirStationProの 検 索 1.エアステーション 設 定 ツールVer.2を 立 ち 上 げて 次 へ をクリックする 注 )エアステーション 設 定 ツールVer.2は 製 品 に 付 属 しているCD からインストールす るか http://buffalo.jp/do wnload/driver/lan/ai rnavilite.htmlにある

More information

6 システムを 入 れているパソコンを 入 れ 替 えたいが どうしたらいいのか 元 のパソコンから 新 しいパソコンに 昨 年 度 入 力 データを 移 行 します 手 順 は 次 のとおりです 1 元 のパソコンでシステムを 起 動 して メニュー 画 面 から バックアップ リカバリ を 選

6 システムを 入 れているパソコンを 入 れ 替 えたいが どうしたらいいのか 元 のパソコンから 新 しいパソコンに 昨 年 度 入 力 データを 移 行 します 手 順 は 次 のとおりです 1 元 のパソコンでシステムを 起 動 して メニュー 画 面 から バックアップ リカバリ を 選 システムについて 1 どのバージョンのシステムを 使 えばいいのか Ver3(Windows7 版 )をご 使 用 ください Ver2(WindowsXP 版 )の 場 合 データ 収 集 ができません Ver3(Windows7 版 )をご 使 用 ください WindowsXP 以 前 の 場 合 で システムを 入 れなおすことができない 場 合 は Ver2(WindowsXP 版 )のままで

More information

ez_meishi.ppt

ez_meishi.ppt 名 刺 登 録 名 刺 登 録 ~ 目 次 ~ 1. 名 刺 登 録 とは 3 2. 準 備 2-1.まず 最 初 に 確 認 5 2-2. 新 しいアプリの 作 成 6 2-3.アプリケーションのダウンロードとインストール 8 2-4.サービス 利 用 者 登 録 10 2-5. 所 有 者 管 理 DBの 発 行 設 定 12 3. 登 録 3-1. 名 刺 情 報 を 読 み 取 る 18 3-2.

More information

<4D6963726F736F667420576F7264202D20457863656C97F195CF8AB72091808DEC90E096BE8F912091E6312E313294C52E646F63>

<4D6963726F736F667420576F7264202D20457863656C97F195CF8AB72091808DEC90E096BE8F912091E6312E313294C52E646F63> Excel 列 変 換 Ver.1.0.3 操 作 説 明 書 第 1.1 版 Copyright (C) 2008 株 式 会 社 恒 河 沙 変 更 履 歴 版 作 成 日 作 成 者 主 な 変 更 点 第 1.0 版 2008/10/29 ( 株 ) 恒 河 沙 東 野 貴 行 新 規 作 成 第 1.1 版 2008/11/04 ( 株 ) 恒 河 沙 東 野 貴 行 - 2 - 目 次

More information

目 次 目 次... 本 書 の 見 かた... 2 商 標 について... 2 オープンソースライセンス 公 開... 2 はじめに... 3 概 要... 3 使 用 環 境 について... 4 対 応 している OS およびアプリケーション... 4 ネットワーク 設 定... 4 Googl

目 次 目 次... 本 書 の 見 かた... 2 商 標 について... 2 オープンソースライセンス 公 開... 2 はじめに... 3 概 要... 3 使 用 環 境 について... 4 対 応 している OS およびアプリケーション... 4 ネットワーク 設 定... 4 Googl Google ク ラ ウ ド プ リ ン ト ガイ ド 目 次 目 次... 本 書 の 見 かた... 2 商 標 について... 2 オープンソースライセンス 公 開... 2 はじめに... 3 概 要... 3 使 用 環 境 について... 4 対 応 している OS およびアプリケーション... 4 ネットワーク 設 定... 4 Google クラウド プリントの 設 定... 5 手

More information

Server と Lync Server の 使 用 が 含 まれます ユーザーは これらの 製 品 とともに 使 用 するのに 必 要 な Windows Server CAL と Exchange および/または Lync Server の 適 切 な CAL を 取 得 する 必 要 がありま

Server と Lync Server の 使 用 が 含 まれます ユーザーは これらの 製 品 とともに 使 用 するのに 必 要 な Windows Server CAL と Exchange および/または Lync Server の 適 切 な CAL を 取 得 する 必 要 がありま ボリューム ライセンス 簡 易 ガイド ベースおよび 追 加 クライアント アクセス ライセンス (CAL) この 簡 易 ガイドは すべてのマイクロソフト ボリューム ライセンス プログラムに 適 用 されます 目 次 概 要... 1 この 簡 易 ガイドの 更 新 内 容... 1 詳 細... 1 追 加 CAL... 2 2010 年 12 月 1 日 より 有 効 となる Microsoft

More information

Microsoft Word - i_navi.txt

Microsoft Word - i_navi.txt Internet Explorer 7 留 意 事 項 ======================================================================= Internet Navigware 製 品 を Internet Explorer 7.0 で 使 用 する 場 合 の 留 意 事 項 を 以 下 現 象 ごとに 記 述 しますので ご 利 用 の

More information

(Microsoft Word - FileZillaServer_\212\310\210\325FTP\203T\201[\203o_\216g\227p\203K\203C\203h_\216Q\215l\227p__JE000267.DOC)

(Microsoft Word - FileZillaServer_\212\310\210\325FTP\203T\201[\203o_\216g\227p\203K\203C\203h_\216Q\215l\227p__JE000267.DOC) はFileZilla のFileZilla 年 月 日 東 洋 電 機 製 造 株 式 会 社 を ためにFTPサーバを FileZilla 本 μturtle-monitorを 推 奨 しますが 簡 易 必 的 要 にFTPサーバ とします 使 用 するにあたり 実 機 運 能 用 を を 用 東 行 意 洋 う し ワイヤレス 際 運 はデータの 用 する 場 計 合 測 信 も システムからの

More information

Microsoft PowerPoint - 130522_リビジョンアップ案内_最終.pptx

Microsoft PowerPoint - 130522_リビジョンアップ案内_最終.pptx WaWaOfficeシリーズ バージョン8.2リビジョンアップ 2013 年 6 月 18 日 リリース 予 定 株 式 会 社 アイアットOEC ローカル 機 能 の 改 善 プレビュー 表 追 加 の 覧 表 にプレビュー 表 を 設 定 可 能 にしました 1 表 2 表 1 +プレビュー 表 から 選 択 設 定 法 個 設 定 個 設 定 基 本 設 定 PC 専 パラメータの 覧 表 時

More information

はじめに 本 プログラムファイルは Windows 版 Microsoft Office Excel で 作 成 されています 動 作 環 境 などは 下 記 を 参 照 ください 動 作 確 認 環 境 [Excel] Microsoft Office Excel 2010 Microsoft O

はじめに 本 プログラムファイルは Windows 版 Microsoft Office Excel で 作 成 されています 動 作 環 境 などは 下 記 を 参 照 ください 動 作 確 認 環 境 [Excel] Microsoft Office Excel 2010 Microsoft O 認 知 症 退 院 支 援 クリニカルパス ソフトウェア 操 作 説 明 書 Version 120312 対 応 版 はじめに 本 プログラムファイルは Windows 版 Microsoft Office Excel で 作 成 されています 動 作 環 境 などは 下 記 を 参 照 ください 動 作 確 認 環 境 [Excel] Microsoft Office Excel 2010 Microsoft

More information

GRIDY SFA カスタム 項 目 操 作 ガイド 用 本 書 はに 必 要 な 操 作 を 解 説 しております は GRIDY SFA ののことです GRIDY SFA へ 申 し 込 み 最 初 に 登 録 を 行 った 方 がそのままとなります カスタム 項 目 はの 方 のみ 操 作 可

GRIDY SFA カスタム 項 目 操 作 ガイド 用 本 書 はに 必 要 な 操 作 を 解 説 しております は GRIDY SFA ののことです GRIDY SFA へ 申 し 込 み 最 初 に 登 録 を 行 った 方 がそのままとなります カスタム 項 目 はの 方 のみ 操 作 可 GRIDY SFA カスタム 項 目 操 作 ガイド 2016 年 1 月 20 日 ナレッジスイート 株 式 会 社 1 GRIDY SFA カスタム 項 目 操 作 ガイド 用 本 書 はに 必 要 な 操 作 を 解 説 しております は GRIDY SFA ののことです GRIDY SFA へ 申 し 込 み 最 初 に 登 録 を 行 った 方 がそのままとなります カスタム 項 目 はの

More information

1

1 Excelファイルアクセス 1. 概 要 Excel ファイルアクセスコンポーネントは Microsoft Excel のファイルを 開 いてセルの 値 や 書 式 を 取 得 変 更 したり テーブル 全 体 を 新 しいファイルと して 保 存 したりするために 用 います Excel ファイルアクセスコンポーネントは アプリケーションビルダーのメニューから 以 下 のように 選 びます [コンポーネント

More information

01_07_01 データのインポート_エクスポート_1

01_07_01 データのインポート_エクスポート_1 データのインポート/エクスポートについて 概 要 スタッフエクスプレスでは 他 のソフトウェアで 作 成 されたスタッフデータ 得 意 先 データなどを 取 り 込 む(インポートする)ことができます また スタッフエクスプレスに 登 録 済 みのデータを Excel 形 式 CSV 形 式 で 出 力 (エクスポート)す ることができます 注 意 インポートできるデータは 次 の 条 件 を 満

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 創 薬 基 盤 推 進 研 究 事 業 (4 次 公 募 ) H27 年 度 公 募 に 係 る 府 省 共 通 研 究 開 発 管 理 システム (e-rad)への 入 力 方 法 について 1 目 次 1.はじめに 2. 実 際 の 応 募 手 続 き 3. 応 募 手 続 き 完 了 の 確 認 2 1-a. はじめに1 注 意 事 項 1. 平 成 27 年 度 の 創 薬 基 盤 推 進

More information

文科省様式3-2集計オプションマニュアル

文科省様式3-2集計オプションマニュアル 文 科 省 様 式 3-2 集 計 オプション 利 用 マニュアル 平 成 25 年 3 月 8 日 日 本 加 除 出 版 株 式 会 社 1 文 科 省 様 式 3-2 集 計 オプション とは 文 科 省 様 式 3-2 集 計 オプションは 日 本 加 除 出 版 株 式 会 社 発 行 の 小 学 校 理 科 教 育 等 設 備 台 帳 ( 平 成 23 年 度 ~ 平 成 34 年 度

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 履 修 履 歴 データベースの 仕 組 み 学 生 が 履 修 履 歴 を 登 録 して 企 業 へデータを 送 信 すると 企 業 担 当 者 が 履 修 履 歴 データを 見 られるようになります 不 特 定 の 企 業 に 履 修 履 歴 データが 閲 覧 されるわけではありません < 基 本 的 な 流 れ> A 社 データ ベース 応 募 企 業 へ データを 送 信 学 生 A 専

More information

経 理 上 くん db(version 8.001)の 変 更 点 概 要 Ⅰ. 消 費 税 /リバースチャージ 方 式 の 申 告 に 対 応 1 特 定 課 税 仕 入 特 定 課 税 仕 入 返 還 区 分 を 追 加 しました Ⅱ.その 他 の 改 良 修 正 詳 細 は 後 述 を 参 照

経 理 上 くん db(version 8.001)の 変 更 点 概 要 Ⅰ. 消 費 税 /リバースチャージ 方 式 の 申 告 に 対 応 1 特 定 課 税 仕 入 特 定 課 税 仕 入 返 還 区 分 を 追 加 しました Ⅱ.その 他 の 改 良 修 正 詳 細 は 後 述 を 参 照 経 理 上 手 くんdbNL(Vers 6.001) バージョンアップ 変 更 点 概 要 財 務 処 理 db 導 入 更 新 Version 8.001 当 プログラムは マイクロソフト 社 のサポート 対 応 終 了 に 伴 い Windows XP 搭 載 機 へのインストールは 不 可 と なっています 消 費 税 /リバースチャージ 方 式 の 申 告 に 対 応 特 定 課 税 仕 入

More information

養 老 保 険 の 減 額 払 済 保 険 への 変 更 1. 設 例 会 社 が 役 員 を 被 保 険 者 とし 死 亡 保 険 金 及 び 満 期 保 険 金 のいずれも 会 社 を 受 取 人 とする 養 老 保 険 に 加 入 してい る 場 合 を 解 説 します 資 金 繰 りの 都

養 老 保 険 の 減 額 払 済 保 険 への 変 更 1. 設 例 会 社 が 役 員 を 被 保 険 者 とし 死 亡 保 険 金 及 び 満 期 保 険 金 のいずれも 会 社 を 受 取 人 とする 養 老 保 険 に 加 入 してい る 場 合 を 解 説 します 資 金 繰 りの 都 平 成 22 年 4 月 1 日 現 在 の 法 令 等 に 準 拠 Up Newsletter 養 老 保 険 の 減 額 逓 増 定 期 保 険 の 取 扱 い 変 更 介 護 費 用 保 険 の 導 入 企 業 の 保 険 のポイント http://www.up-firm.com 1 養 老 保 険 の 減 額 払 済 保 険 への 変 更 1. 設 例 会 社 が 役 員 を 被 保 険 者

More information

マスタの 登 録 処 理 月 の 登 録 勤 怠 管 理 対 象 となる 処 理 月 を 設 定 します 1つのエクセルのファイル(ブック)で1ヵ 月 分 の 勤 怠 管 理 ができます 初 めてご 使 用 になる 場 合! 本 エクセルを 初 めてご 使 用 になる 場 合 は 処 理 月 を 設

マスタの 登 録 処 理 月 の 登 録 勤 怠 管 理 対 象 となる 処 理 月 を 設 定 します 1つのエクセルのファイル(ブック)で1ヵ 月 分 の 勤 怠 管 理 ができます 初 めてご 使 用 になる 場 合! 本 エクセルを 初 めてご 使 用 になる 場 合 は 処 理 月 を 設 タイムカード for Z170 操 作 説 明 目 次 タイムカードforZ170 について マスタの 登 録 処 理 月 の 登 録 勤 務 形 態 の 登 録 社 員 マスタの 登 録 データの 管 理 タイムレコーダとの 連 携 タイムカード 月 次 集 計 マスタ 未 登 録 データ 使 用 許 諾 条 件 および 著 作 権 タイムカードforZ170 について ソフト 名 タイムカード

More information

エ CarotDAV が 起 動 すると 次 のようなウィンドウが 表 示 されます メニューバーにある File から New Connection の WebDAV を 選 択 します オ 次 のような 設 定 画 面 が 表 示 されたら General タブでネットワークアドレスなどを 設

エ CarotDAV が 起 動 すると 次 のようなウィンドウが 表 示 されます メニューバーにある File から New Connection の WebDAV を 選 択 します オ 次 のような 設 定 画 面 が 表 示 されたら General タブでネットワークアドレスなどを 設 Windows7での WebDAV 接 続 Windows7 などでは ネットワークドライブの 割 り 当 て や ネットワークドライブの 割 り 当 て という 従 来 の 方 法 では 認 証 がうまく 通 らず WebDAV の 利 用 が 簡 単 に 利 用 できなくなってきました そこで ここでは 次 の フリーソフト CarotDAV の 利 用 についてご 紹 介 します ご 参 考

More information

表紙

表紙 インストールマニュアル(Windows 8) ( 第 4.0 版 ) 群 馬 県 国 民 健 康 保 険 団 体 連 合 会 改 訂 履 歴 版 数 日 付 改 訂 内 容 第 1.0 版 平 成 21 年 8 月 10 日 初 版 第 2.0 版 平 成 24 年 4 月 1 日 Windows 7(32bit/64bit) 対 応 受 給 者 情 報 コピー 機 能 追 加 第 2.1 版 平

More information

贈与税 faq

贈与税 faq 電 子 申 告 に 関 するよくあるお 問 い 合 わせ 贈 与 税 の 電 子 申 告 に 関 する 概 要 と よくあるお 問 い 合 わせについて 説 明 します 26 年 分 の 贈 与 税 の 電 子 申 告 について 2015 年 1 月 21 日 1 目 次 確 認 したい 項 目 の 場 所 でクリックしてください 例 ) 対 応 プログラム 対 応 帳 票 他 の 税 目 と 異

More information

改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記

改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記 代 理 店 様 向 け 業 務 支 援 システム Ke-web オペレーションマニュアル 05/0 ケニス 株 式 会 社 改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記 総 則 本 文 書 の 位 置 付 け 本 文 書 は 代 理 店 向 け 営 業 支 援 システム

More information

<4D6963726F736F667420576F7264202D208169959F93878CA797708F4390B3816A819A95CA8B4C976C8EAE91E682538B4C8DDA97E12E646F6378>

<4D6963726F736F667420576F7264202D208169959F93878CA797708F4390B3816A819A95CA8B4C976C8EAE91E682538B4C8DDA97E12E646F6378> ( 別 様 式 第 4の1-1/3-) 復 興 産 業 集 積 区 域 における 研 究 開 発 税 制 の 特 例 等 ( 法 第 39 条 ) 指 定 を 行 った 認 定 地 方 公 共 法 人 の 場 合 事 業 年 度 又 は 連 結 事 業 年 度 終 了 後 団 体 の 長 の 氏 名 を 載 してく 1か 月 以 内 に 提 出 し ださい 個 人 の 場 合 事 業 年 度 ( 暦

More information

電子証明書の更新

電子証明書の更新 < 電 子 証 明 書 更 新 マニュアル > 電 子 証 明 書 の 更 新 は 有 効 期 限 の 前 後 で 手 順 が 異 なります 下 図 をご 確 認 いただき 更 新 をお 願 いします 30 日 前 有 効 期 限 終 了 日 90 日 ログイン 後 電 子 証 明 書 更 新 ボタン から 更 新 します 電 子 証 明 書 取 得 ボタン から 更 新 します 再 発 行 の 申

More information

目 次 1 インストール 手 順... 3 1-1 プログラム データファイルのインストール... 3 1-2 Microsoft Access2013Runtime SP1(32bit) 版 のインストール... 5 2 基 本 操 作... 7 2-1 ログイン... 7 2-2 メニュー...

目 次 1 インストール 手 順... 3 1-1 プログラム データファイルのインストール... 3 1-2 Microsoft Access2013Runtime SP1(32bit) 版 のインストール... 5 2 基 本 操 作... 7 2-1 ログイン... 7 2-2 メニュー... 顧 客 営 業 管 理 システム マニュアル 目 次 1 インストール 手 順... 3 1-1 プログラム データファイルのインストール... 3 1-2 Microsoft Access2013Runtime SP1(32bit) 版 のインストール... 5 2 基 本 操 作... 7 2-1 ログイン... 7 2-2 メニュー... 7 2-3 パスワード 変 更... 8 2-4 画

More information

各 種 調 査 書 様 式 の 操 作 Q12 調 査 書 様 式 をダウンロードしようとしたが エラー 表 示 が 出 て 取 得 出 来 ません 調 査 書 様 式 の 公 開 直 後 は アクセスが 集 中 し ダウンロードの 際 に エラーが 出 ることがあります 時 間 をおいて 再 度

各 種 調 査 書 様 式 の 操 作 Q12 調 査 書 様 式 をダウンロードしようとしたが エラー 表 示 が 出 て 取 得 出 来 ません 調 査 書 様 式 の 公 開 直 後 は アクセスが 集 中 し ダウンロードの 際 に エラーが 出 ることがあります 時 間 をおいて 再 度 Q1 パソコン 基 本 設 定 Windows Vista 又 は Windows 7 は 利 用 できますか ご 利 用 できます ただし Windows 8 については 動 作 の 確 認 がされていないため ご 利 用 になれません また 2014 年 4 月 をもって Windows XP のサポート 期 間 が 終 了 しております なるべくご 利 用 はお 控 えください 編 Q2 Q3

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 関 数 この 章 では 日 付 と 時 刻 を 扱 う 関 数 や 検 索 条 件 に 一 致 するデータを 取 り 出 す 関 数 の 使 い 方 また 複 数 の 関 数 を 組 み 合 わせてエラー 値 を 非 表 示 にする 方 法 を 学 習 します STEP 1: 日 付 / 時 刻 関 数 TODAY 関 数 NOW 関 数 TODAY 関 数 は パソコンの 内 蔵 時

More information

1 林 地 台 帳 整 備 マニュアル( 案 )について 林 地 台 帳 整 備 マニュアル( 案 )の 構 成 構 成 記 載 内 容 第 1 章 はじめに 本 マニュアルの 目 的 記 載 内 容 について 説 明 しています 第 2 章 第 3 章 第 4 章 第 5 章 第 6 章 林 地

1 林 地 台 帳 整 備 マニュアル( 案 )について 林 地 台 帳 整 備 マニュアル( 案 )の 構 成 構 成 記 載 内 容 第 1 章 はじめに 本 マニュアルの 目 的 記 載 内 容 について 説 明 しています 第 2 章 第 3 章 第 4 章 第 5 章 第 6 章 林 地 ( 資 料 3) 林 地 台 帳 及 び 地 図 整 備 マニュアル( 案 ) 概 要 本 資 料 は 現 時 点 での 検 討 状 況 を 基 に 作 成 したものであり 今 後 事 務 レベルの 検 討 会 等 を 経 て 成 案 を 得 ることとしてい ます 平 成 28 年 7 月 林 野 庁 計 画 課 1 林 地 台 帳 整 備 マニュアル( 案 )について 林 地 台 帳 整 備 マニュアル(

More information

・モニター広告運営事業仕様書

・モニター広告運営事業仕様書 秋 田 市 新 庁 舎 動 画 広 告 放 映 事 業 仕 様 書 1 目 的 多 く の 市 民 の 目 に 触 れ る 市 役 所 の 特 性 を 活 か し 映 像 や 音 声 を 活 用 し た モ ニ タ ー に よ る 動 画 広 告 を 新 庁 舎 内 に 導 入 し 新 庁 舎 の 主 要 機 能 の 一 つ で あ る 情 報 発 信 拠 点 と し て の 役 割 を 果 た す

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Yahoo!ショッピング Amazon 商 品 複 製 マニュアル 1 在 庫 連 携 を 行 うためには 事 前 に 各 モールのコード 合 わせの 作 業 が 必 要 です 詳 しくは 各 モールとの 在 庫 連 携 に 必 要 なコード 連 携 マニュアルをご 覧 ください 2 楽 天 Yahoo!ショッピングの 仕 様 は 変 更 になっている 場 合 があります 各 モールの 仕 様 も

More information

続 に 基 づく 一 般 競 争 ( 指 名 競 争 ) 参 加 資 格 の 再 認 定 を 受 けていること ) c) 会 社 更 生 法 に 基 づき 更 生 手 続 開 始 の 申 立 てがなされている 者 又 は 民 事 再 生 法 に 基 づき 再 生 手 続 開 始 の 申 立 てがなさ

続 に 基 づく 一 般 競 争 ( 指 名 競 争 ) 参 加 資 格 の 再 認 定 を 受 けていること ) c) 会 社 更 生 法 に 基 づき 更 生 手 続 開 始 の 申 立 てがなされている 者 又 は 民 事 再 生 法 に 基 づき 再 生 手 続 開 始 の 申 立 てがなさ 簡 易 公 募 型 競 争 入 札 方 式 ( 総 合 評 価 落 札 方 式 )に 係 る 手 続 開 始 の 公 示 次 のとおり 指 名 競 争 入 札 参 加 者 の 選 定 の 手 続 を 開 始 します 平 成 28 年 9 月 20 日 分 任 支 出 負 担 行 為 担 当 官 東 北 地 方 整 備 局 秋 田 河 川 国 道 事 務 所 長 渡 邊 政 義 1. 業 務 概 要

More information

スライド 1

スライド 1 2014.10 版 Ver.5.04 遠 藤 照 明 設 計 支 援 ツール:Jobサポート 2 次 元 照 度 計 算 ソフト Luxsheet マニュアル ルクスシート 1 P 3 型 番 入 力 による 検 索 P 4 P 5 P 7 P 9 P10 P11 P12 P13 P14 P16 P17 P18 P19 P21 2 平 均 照 度 計 算 を 一 覧 表 で 簡 単 に 作 成 できます

More information

スライド 1

スライド 1 Android 版 目 視 録 運 用 操 作 マニュアル 作 成 2012/03/22 更 新 2014/09/26 目 視 録 とは 携 帯 またはパソコンで 施 工 写 真 を 登 録 確 認 できるシステムです ご 利 用 の 為 にはIDとパスワードが 必 要 です TEG ログインID ( ) パスワード ( ) https://teg.mokusiroku.com/

More information

確 定 申 告 書 作 成 システム 操 作 手 順 書 ~ 個 人 利 用 者 向 け 操 作 説 明 書 ~ 平 成 27 年 1 月 JA 長 野 県 営 農 センター ( 株 ) 長 野 県 協 同 電 算 目 次 1.システムの 起 動... 1 ... 1 ... 2 2.ログインとログアウト... 2 ... 3 ...

More information

1.2. ご 利 用 環 境 1.2.1. 推 奨 ブラウザ Internet Explorer 10 11 Google Chrome(バージョン 32 時 点 で 動 作 確 認 済 み) Mozilla Firefox(バージョン 26 時 点 で 動 作 確 認 済 み) Safari 7

1.2. ご 利 用 環 境 1.2.1. 推 奨 ブラウザ Internet Explorer 10 11 Google Chrome(バージョン 32 時 点 で 動 作 確 認 済 み) Mozilla Firefox(バージョン 26 時 点 で 動 作 確 認 済 み) Safari 7 1. アーカイブデータベースを 検 索 / 閲 覧 する 1.1. データの 検 索 方 法 東 京 アーカイブ では 以 下 に 分 類 されるカテゴリの 画 像 データ 資 料 データを 閲 覧 できます 江 戸 城 浮 世 絵 双 六 和 漢 書 江 戸 東 京 の 災 害 記 録 絵 葉 書 写 真 帖 近 代 の 地 図 東 京 府 東 京 市 関 係 資 料 番 付 建 築 図 面 書

More information

研究者総覧システム

研究者総覧システム 関 西 大 学 学 術 情 報 システム 操 作 マニュアル 検 索 用 第 1.5 版 2010/4/1 関 西 大 学 更 新 履 歴 版 数 作 成 日 内 容 1.0 2008/11/28 新 規 作 成 1.1 2009/04/08 画 像 の 変 更 ログイン 画 面 への 遷 移 を 追 加 キーワード 検 索 の 対 象 を 変 更 概 要 の 変 更 対 象 ブラウザの 追 加 1.2

More information

DN6(R04).vin

DN6(R04).vin page 1 / 2 DataNature6(R04)リリースノート 新 機 能 機 能 改 良 (1) 期 間 項 目 への 締 め 日 の 反 映 年 度 上 期 / 下 期 四 半 期 において 設 定 した 締 め 日 を 反 映 させるかどうかの 設 定 を 追 加 (2) 週 の 設 定 方 法 の 追 加 日 付 から 期 間 の 設 定 で 週 を 追 加 する 場 合 に 週 の"

More information

iStorage ソフトウェア VMware vSphere Web Client Plug-in インストールガイド

iStorage ソフトウェア VMware vSphere Web Client Plug-in インストールガイド istorage ソフトウェア VMware vsphere Web Client Plug-in インストールガイド はじめに このインストールガイドでは WebSAM Storage VMware vsphere Web Client Plug-in のインストールに 関 して 説 明 しています 本 製 品 は VMware vcenter Server VMware vsphere Web

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Android OS 向 け 新 規 インストールガイド 安 心 ネットセキュリティ このインストールガイド( 以 下 本 ガイド )に 従 い アプリケーションをインストールして ください ご 注 意 : 安 心 ネットセキュリティ( 以 下 本 製 品 )は インターネットからアプリケーションを ダウンロードしてインストールします 本 ガイド 中 に 記 載 されている ホームキー メニューキー

More information

ネットde記帳 平成24年度の申告について

ネットde記帳 平成24年度の申告について ネットde 記 帳 平 成 24 年 度 の 申 告 について 従 来 版 のネットde 記 帳 から 申 告 を 行 う 場 合 1 青 色 申 告 決 算 書 までは 従 来 と 変 わらない 手 順 で 出 力 します 従 来 版 のネットde 記 帳 からの 決 算 申 告 フロー 所 得 税 / 消 費 税 申 告 書 作 成 機 能 を 実 行 すると ネットde 記 帳 申 告 モ ジュール

More information

1 本 プログラムの 提 供 にあたっての 免 責 事 項 等... 3 2 使 用 方 法... 3 2.1 管 理 ファイル 名 選 択... 3 2.2 レーダーチャート 表 示... 5 2.3 レーダーチャート 設 定... 6 2.4 デフォルト 値 の 設 定... 7 2.5 Exc

1 本 プログラムの 提 供 にあたっての 免 責 事 項 等... 3 2 使 用 方 法... 3 2.1 管 理 ファイル 名 選 択... 3 2.2 レーダーチャート 表 示... 5 2.3 レーダーチャート 設 定... 6 2.4 デフォルト 値 の 設 定... 7 2.5 Exc 圃 場 情 報 表 示 プログラム マニュアル 中 央 農 業 総 合 研 究 センター 情 報 利 用 研 究 領 域 圃 場 情 報 表 示 プログラムマニュアル.doc 1 本 プログラムの 提 供 にあたっての 免 責 事 項 等... 3 2 使 用 方 法... 3 2.1 管 理 ファイル 名 選 択... 3 2.2 レーダーチャート 表 示... 5 2.3 レーダーチャート 設

More information

目 次 Ⅰ 集 計 支 援 ツールの 準 備 に 関 するQ&A 1 H27 集 計 支 援 ツール.zip ファイルを 展 開 して 作 成 した,1 ~4のフォルダはどのように 利 用 すればよいか? Ⅱ 必 要 なファイルの 準 備 に 関 するQ&A 1 解 答 回 答 状 況 ファイルや,

目 次 Ⅰ 集 計 支 援 ツールの 準 備 に 関 するQ&A 1 H27 集 計 支 援 ツール.zip ファイルを 展 開 して 作 成 した,1 ~4のフォルダはどのように 利 用 すればよいか? Ⅱ 必 要 なファイルの 準 備 に 関 するQ&A 1 解 答 回 答 状 況 ファイルや, 平 成 27 年 度 全 国 学 力 学 習 状 況 調 査 集 計 支 援 ツール Q&A 集 1 目 次 Ⅰ 集 計 支 援 ツールの 準 備 に 関 するQ&A 1 H27 集 計 支 援 ツール.zip ファイルを 展 開 して 作 成 した,1 ~4のフォルダはどのように 利 用 すればよいか? Ⅱ 必 要 なファイルの 準 備 に 関 するQ&A 1 解 答 回 答 状 況 ファイルや,

More information

<4D6963726F736F667420576F7264202D2090BF8B818AC7979D8B40945C91808DEC837D836A83858341838B2E646F63>

<4D6963726F736F667420576F7264202D2090BF8B818AC7979D8B40945C91808DEC837D836A83858341838B2E646F63> 電 子 申 請 支 援 システム 建 設 業 統 合 版 請 求 管 理 機 能 操 作 マニュアル ワイズ 公 共 データシステム 株 式 会 社 記 載 内 容 は 開 発 途 中 のものも 含 まれており 一 部 動 作 画 面 が 異 なることがあります < 目 次 > 1. 請 求 管 理 機 能 について... 1 システムの 特 徴... 1 導 入 方 法... 4 2. 請 求 管

More information

ことばを覚える

ことばを覚える 業 務 部 門 の 担 当 者 による 担 当 者 のための 業 務 アプリケーションの 作 り 方 (その1) 設 定 ウィザードを 用 いた 受 注 伝 票 管 理 ツールの 構 築 コンテキサー 操 作 演 習 コンテキサー チュートリアル(バージョン2.2 用 ) 20121113 コンテキサーのバージョンは 2.2.09 以 降 で 行 ってください 目 次 ステップ1 受 注 伝 票 パネルの

More information

目 次 1 個 人 基 本 情 報 個 人 基 本 情 報 入 力 画 面 の 分 散 4 申 告 区 分 および 申 告 種 類 の 選 択 方 法 5 繰 越 損 失 入 力 年 別 の 繰 越 損 失 額 入 力 に 対 応 6 作 成 手 順 作 成 手 順 の 流 れを 提 供 7 所 得

目 次 1 個 人 基 本 情 報 個 人 基 本 情 報 入 力 画 面 の 分 散 4 申 告 区 分 および 申 告 種 類 の 選 択 方 法 5 繰 越 損 失 入 力 年 別 の 繰 越 損 失 額 入 力 に 対 応 6 作 成 手 順 作 成 手 順 の 流 れを 提 供 7 所 得 所 得 税 R4 機 能 アップ 内 容 Ver.13.1 所 得 税 R4 主 な 機 能 アップ 内 容 についてご 説 明 いたします 当 資 料 は2014 年 3 月 時 点 のものです 内 容 や 画 像 は 予 告 なく 変 更 される 場 合 がございます Rev.1.1 1 目 次 1 個 人 基 本 情 報 個 人 基 本 情 報 入 力 画 面 の 分 散 4 申 告 区 分

More information

PC 移 行 は 以 下 の 流 れで 行 います 次 ページ 以 降 に 各 手 順 を 記 載 しますのでご 確 認 ください ( をクリックすると 該 当 の 説 明 にジャンプします ) 移 行 元 のPCでの 作 業 Step1 移 行 するデータをバックアップする (3ページ) [データ

PC 移 行 は 以 下 の 流 れで 行 います 次 ページ 以 降 に 各 手 順 を 記 載 しますのでご 確 認 ください ( をクリックすると 該 当 の 説 明 にジャンプします ) 移 行 元 のPCでの 作 業 Step1 移 行 するデータをバックアップする (3ページ) [データ 奉 行 i8/i シリーズ(スタンドアロン 版 ) PC 移 行 の 手 順 書 新 しいPCを 購 入 したので このPCで 奉 行 製 品 を 利 用 したい など 現 在 ご 利 用 のPCから 別 PCで 奉 行 製 品 をご 利 用 になる 場 合 の 移 行 手 順 を 説 明 します 次 ページに 各 作 業 の 流 れを 記 載 しますのでご 確 認 ください 移 行 元 のPC 1

More information

前 書 き 広 域 機 関 システム System for Organization for Cross-regional Coordination of Transmission Operators(OCCTO) 2016-01-00 商 標 類 Windows Office Excel Word

前 書 き 広 域 機 関 システム System for Organization for Cross-regional Coordination of Transmission Operators(OCCTO) 2016-01-00 商 標 類 Windows Office Excel Word 広 域 機 関 システム 操 作 マニュアル 系 統 情 報 公 表 ( 一 般 用 ) 2016-01-00 前 書 き 広 域 機 関 システム System for Organization for Cross-regional Coordination of Transmission Operators(OCCTO) 2016-01-00 商 標 類 Windows Office Excel

More information

1

1 精 華 町 個 人 情 報 保 護 条 例 改 正 に 向 けての 考 え 方 ( 案 ) 平 成 27 年 4 月 精 華 町 0 1 目 次 1 個 人 情 報 保 護 に 関 する 法 体 系 と 番 号 法 における 特 定 個 人 情 報 の 保 護 措 置... 1 2 番 号 法 と 精 華 町 個 人 情 報 保 護 条 例 における 個 人 情 報 の 定 義 上 の 差 異...

More information

<4D6963726F736F667420576F7264202D203193FA8AD45F95CA8E86325F89898F4B315F94F093EF8AA98D90939994AD97DF914F82CC8FEE95F182CC8EFB8F57814589C28E8B89BB2E646F63>

<4D6963726F736F667420576F7264202D203193FA8AD45F95CA8E86325F89898F4B315F94F093EF8AA98D90939994AD97DF914F82CC8FEE95F182CC8EFB8F57814589C28E8B89BB2E646F63> 1.ログイン 方 法 1-1: 県 域 統 合 型 GIS 総 合 ポータルから 研 修 用 のユーザID 及 びパスワードを 入 力 後 ログインする 1-2:ログイン 後 マップ 編 集 を 選 択 します 1-3:マップ 一 覧 から 編 集 したいマップを 選 ぶ 今 回 の 場 合 1. 避 難 勧 告 等 発 令 までの 情 報 収 集 可 視 化 ( 班 ) を 選 択 する 1 2.

More information

WEBメールシステム 操作手順書

WEBメールシステム 操作手順書 ひ む か ネ ッ ト WEB メールシステム 操 作 手 順 書 目 次 認 証 画 面 を 表 示 する 認 証 画 面 を 表 示 する 3 ID パスワードの 入 力 3 パスワードを 忘 れてしまった 場 合 の 認 証 方 法 4 メール 送 受 信 メールを 受 信 する 5 メールを 送 信 する 5 メールを 確 認 する メールを 全 選 択 する 7 メールを 削 除 する 7

More information

Microsoft Word - 教科書VBA_第1章2013_.doc

Microsoft Word - 教科書VBA_第1章2013_.doc 第 1 章 Excel のマクロ 機 能 VBA とは VBA(Visual Basic for Applications)は,Microsoft 社 の Word や Excel など,Microsoft Office ア プリケーションで 共 通 に 利 用 できるプログラミング 言 語 です. 例 えば Excel のようなアプリケーション で 作 成 された VBA プログラムは,そのアプリケーションのデータと

More information