はじめに
MATLABでオシロの波形を取り込みたかったため、手持ちのRTC1002(Rohde&Schwarz)をPCに接続し、MATLABで波形をプロットするまでを実施した。
MATLABはIVIやVXIplug&play、汎用のSCPIコマンドに対応しているとのことだが、計測器のリモートコントロールの常識?について知らなかったため、環境構築として何をしたら良いか悩んだ。
MATLAB環境
・MATLAB R2021b 64bit
・MATLABツールボックス:Instrument Control Toolbox
実施環境
・ノートPC(windows10 64bit)
・オシロスコープ(RTC1002)
・ルータ(DHCPサーバ)
・LANケーブル
参考
・Rohde & Schwarz Instruments and MATLAB
・How to use Rohde & Schwarz Instruments in MATLAB - Application Note
手順1:RTC1002をwebブラウザ経由で操作
RTC1002はwebブラウザが搭載されており、正常にLANに接続できると、webブラウザでRTC1002のIPを入力することでRTC1002の操作ができる。詳細はRTC1002のユーザーズマニュアルの12章"Network Connections and Remote Operation"を参照。
RTC1000はデフォルトでDHCPクライアントとなっているので、DHCPサーバが立っている環境であれば、何も考えずにLANに接続し、SETUPボタンからRTC1002に振られたIPを確認するだけでよい。
手順2:ノートPCにR&Sの提供するVXI driverをインストール
RTC1000はSCPIコマンドによる制御、もしくはR&Sのwebページで配布されているVXIドライバーによる制御に対応している。IVIドライバーに対応していれば、Quick-Control Oscilloscopeによる制御が可能であるようだが、IVIドライバーの配布はない。VXIドライバーを使う方がSCPIコマンドを直接使うのにに比べてエラー処理等を実施しているというような記載がMATLABにあったため、VXIドライバーを使用することとした。
VXIplug&play x64 driver hmoをダウンロードしインストールする。
手順3:ノートPCにR&Sの提供するVISAをインストール
VISAは計測器とのインターフェースを提供するライブラリのようで、物理層の違いも吸収してくれる。RS VISA 5.12.3 Setup for Windowsをダウンロードしインストールする。
手順4:VISAに同梱されたアプリで動作確認
VISAをインストールすると、"R&S VISA⇒Tester 64bit"がインストールされるので、これを実行する。
左上の"Find Resource"タブをクリックし、"LXI(mDNS)"と"VXI-11"のチェックボックスをONにして、更新マーク?をクリックする。そうすると、LANで接続したRTC1002がResoucesとして"TCPIP0::192.168.0.6::inst0::INSTR"(環境によって中身は変わる)が発見されるので、これを選択して"OK"を押す(後に再度実施した際に何も発見されなかったが、"TCPIP0::192.168.0.6::inst0::INSTR"への接続はできた)。元の画面で"Connect"を押し、それっぽいログが表示されていればオシロがVISA経由で接続されている。
VISA経由の動作確認として、"Tests"タブのPreformance Testを実施する。
手順5:VXIドライバーのラッパーを作成
MATLAB上でVXIドライバーを使ってVISA経由でRTC1000に接続するが、VXIドライバーはインストールしたままでは使えず、MATLABとしてのラッパーを作成する必要がある。ラッパーの作成は、MATLAB上で
midedit
と入力し、上記でインストールしたVXIドライバーをインポートし、これを保存する(hmo.mddとした)ことでラッパーが作成される。詳細な手順はこちらのImporting with the MATLAB Instrument Driver Editor (midedit)を参照。
手順6:RTC1002の接続・波形プロット
以上で準備は終わりで、あとはMATLAB上で適宜関数を呼び出してRTC1002の波形を取り込み、データをプロットする。
%instrhwinfo('vxipnp')
%instrhwinfo('vxipnp','hmo')
deviceObj=icdevice('hmo.mdd','TCPIP0::192.168.0.6::inst0::INSTR')
connect(deviceObj)
%disp(deviceObj)
%get(deviceObj)
waveformArray = zeros(100000,1);
groupObj = get(deviceObj, 'Waveformacquisition');
[waveformArray, actualPoints, initialX, xIncrement] = invoke (groupObj, 'readwaveform', 1, length(waveformArray), 5000, waveformArray);
plot(waveformArray)
disconnect(deviceObj)
%delete(deviceObj)
RTC1000の外部出力機能で10kHz, 115mVppのsin波を出力し、これをch1に入力して上記コマンドでプロットされた波形は次の通り。配列の長さを100,000としたが、データ点数はそこまでないため途中で切れている。
関数の定義の確認方法
MATLABの"アプリ"タブをクリックし"Instrument Control"をクリックすると、"Test & Measurement Tool"が開く。前述のコマンドによりdeviceObjが生成されていると、"Instrument Object"⇒"Device Objects"⇒"VXIPnPInstrument-hmo"というのが生成される。これを選択すると関数やプロパティが選択でき、GUIで関数の実行やプロパティのSet/Getができる。また、実行した内容は"Session Log"のタブでコードと記載されるので、これを参考にコーディングできる。
VXIドライバーのHelpはVXIドライバーをインストールしたフォルダに"hmo_vxi.chm"と"hmo_attr.chm"が入っているので、これを参照する。ただし、このHelpはVXIドライバーのHelpであり、MATLABでVXIドライバーをラップした関数のHelpではないことに注意が必要。例えば、HelpにはdeviceObjを渡すように書いているが、MATLABのラッパーではdeviceObjの要素を適宜選択して渡すことになっている様子。
MATLABのVXIドライバーをラップした関数の説明はこちらを参照。
以上、参考になれば幸いです。