Sequence Makerの仮想インターフェイスを使う

## はじめに
Sequence MakerはExcelから測定器を制御可能にするアドインです。Sequence MakerはV1.70から仮想インターフェイスというものが追加されました。これは、実際の測定器ではなく、Sequence Maker内にある仮想的な測定器（？）と通信するためのものです。この記事では実際に仮想インターフェイスと通信してみて、使い勝手を確認してみます。なお、Sequence Makerについての詳細は以下の記事を参照ください。

https://qiita.com/sequencemaker/items/8e6a370ab0a793a06a3b

:::note warn
***お断り***
本記事の内容はSequence Maker開発元の公式見解ではなく、あくまでも個人が趣味の範囲内で執筆しているものです。記事の内容について開発元へ問い合わせることはお控えください。ご質問・要望などは各記事のコメント欄へお願いいたします。
:::

## 仮想インターフェイス
仮想インターフェイスは、リボンのインターフェイス選択の中にあります。ここで「仮想」を選ぶだけですぐに使えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/e01c3755-f4bc-cb49-fd27-18bb3ca82cc9.png)

仮想インターフェイスに対しては、通常の測定器と同じようにコマンドの送受信が可能です。例えば、共通コマンドである「*IDN?」を送ってみると、ちゃんと応答が返ってきます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/583c2070-ea4d-c7de-b27a-7d2a3cdd984d.png)

他にも、「*ESR?」や「*OPC?」、「*TST?」といった共通コマンドにも応答を返します（応答する値は固定）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/95bb76b8-62ec-0a5b-7296-360a124a9d4c.png)


## 応答をカスタマイズ
応答内容はカスタマイズすることができます。「コマンド」ボタンを押すとコマンドを定義するウィンドウが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/616de287-ce4c-0385-89f5-6c407d88d05d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/50f2c3b9-0e57-e29d-a108-d0bfa00d43f8.png)

例えば、こんな感じにコマンドを定義します。なお「*IDN?」などはここで再定義すると、こちらが優先されます。また、SCPIに準拠した書き方ができるので、コマンドを大文字+小文字で書いておくと、大文字部分だけを省略形（ショートフォーム）として使用できます。
なお、このコマンドと応答の表は、範囲選択してコピペが可能です。定義をExcelのシートにコピペすることもできますし、逆にExcelのシートからこの表にコピペすることもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/cb9a296b-f16d-7c08-04b4-6d9ce94ec69c.png)

それでは、実際にコマンド送受信をしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/ed305548-3891-c2cd-e606-1d06f9f4e6d8.png)

定義した通りに応答が返ってきていますね。

## 特別な応答
ところで、デフォルトで入っている1行目の定義は何でしょうか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/c93efe58-ba1c-2e0d-4662-bb701901b717.png)

実は応答の「${INPUT}」は特殊な応答で、これを書いておくとシーケンス実行時に任意の応答を入力するウィンドウが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/65e40b16-6490-990d-7a0e-b04b827fee17.png)

適当に応答を入れると、セルに出力されます。状況に応じて応答を動的に変えたいような場合に使えますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/a9295a55-51d6-fdbc-68d2-7df4410cde12.png)


## 保存と読み込み
定義したコマンドは、ファイルとして保存したり、読み込んだりできます。先ほどの定義を保存してみるとこんな感じのXMLファイルとして出力されます。バックアップしたり、他のユーザーと共有したりできます。

::: note warn
定義を読み込むと、入力済みの内容はクリアされるので注意！
:::

```
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfVirtualCommand xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VirtualCommand>
    <Command>:INPUT?</Command>
    <Response>${INPUT}</Response>
  </VirtualCommand>
  <VirtualCommand>
    <Command>*IDN?</Command>
    <Response>HOGE,Piyopiyo,123,V1.00</Response>
  </VirtualCommand>
  <VirtualCommand>
    <Command>:FREQuency?</Command>
    <Response>100</Response>
  </VirtualCommand>
  <VirtualCommand>
    <Command>:VOLTage?</Command>
    <Response>200</Response>
  </VirtualCommand>
  <VirtualCommand>
    <Command>:SPEEd?</Command>
    <Response>FAST</Response>
  </VirtualCommand>
  <VirtualCommand>
    <Command>:RANGe?</Command>
    <Response>100mOhm</Response>
  </VirtualCommand>
  <VirtualCommand>
    <Command>:日本語も?</Command>
    <Response>大丈夫だよ。</Response>
  </VirtualCommand>
  <VirtualCommand>
    <Command />
    <Response />
  </VirtualCommand>
</ArrayOfVirtualCommand>
  ```

  ## SCPIの対応について
  これまでの説明で、共通コマンドの「*IDN?」は自分で定義しなくても応答が返ってくるとか、大文字＋小文字でコマンドを定義すればショートフォームにも対応するとか書きましたが、これらはSCPIに準拠した動きになっているためです。Sequence Makerの仮想インターフェイスは、デフォルトでSCPI準拠になっているのですが、これはデフォルトでSCPIの設定がONになっているためです。詳細設定の画面でSCPIの✅を外すと、SCPI準拠はOFFとなり、コマンド定義のテーブルには完全一致した場合のみ応答を返すようになります。

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/9bfa0412-123c-b8ae-a6c6-eea216f3bc09.png)


## ところで、仮想インターフェイスって何に使うの？
- 測定器の実機が無い状態で、シーケンスだけ先に組んでおきたいような場合のデバッグ用途
- 測定器は無いけれど、カメラ機能だけを使いたいとき
- 測定器は無いけれど、CONTECのデジタル入出力ユニットだけを使いたいとき
- etc...


## まとめ
今回は仮想インターフェイスについて紹介してみました。一般的な用途ではあまり使う機会が無いかもしれませんが、ふとしたときに便利な機能なので、ぜひお試しください。