Sequence Makerとcom0comを使ってシリアルポートに好きなデータを送る

## はじめに
Sequence MakerはExcelから測定器を制御可能にするアドインです。Sequence MakerはRS-232Cと呼ばれるシリアル通信に対応しています。COMポートを指定してデータを送信したり、受信したりすることが可能です。通常はシリアルポートを搭載している測定器との通信を行うのですが、今回はちょっと変わった使い方としてcom0comでデータを送る実験をしてみます。なお、Sequence Makerについての詳細は以下の記事を参照ください。

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

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

## ところでcom0comって何だ？
com0comはPC内に仮想的な（ソフトウェア的な）シリアルポートを作ることができ、またそのシリアルポート同士を内部で接続することができる（怪しい）ソフトウェアです。ハード的にイメージするなら、PCにRS232C-USB変換器を2つ接続し、シリアルポート同士をクロスケーブルで接続しているような状態をソフトで作れます。Qiitaにもいくつか記事があるので参考にしてみてください。

https://qiita.com/t13801206/items/b48b16f27210e821b542

## 何に使うの？
~~怪しいことに使います。~~ 例えば、シリアル通信で何かしらの測定器を制御するような便利なPCアプリがあったとします。最近はPCにシリアルポートが無いので、RS232C-USB変換器を使用して測定器と接続し、アプリではCOMポートの番号（COM1とかCOM2とか）を指定して通信を行います。通常はこれで事が済むのですが、ちょっといろいろな事情で、測定器の実機では無く、その測定器に成りすまして（オレオレ測定器になって）制御アプリと通信したいような場合があります。そんな時にcom0comを使うと、2つのシリアルポートがつながっている状態が作れるので、1つめのCOMポートにアプリを接続し、もう一つのCOMポートにTera Termなんかで接続すれば、アプリとTera Term間で任意のデータをやりとりすることができるようになります！！
また、別の用途としては、GPSレシーバーと接続して使用する地図アプリなんかに、同じようにcom0comを使って接続し、GPSレシーバーの代わりにダミーのGPSデータを送りつければ、位置情報を~~偽装~~エミュレートするなんてこともできます。

## com0comのインストール
~~怪しい~~便利なソフトなのですが、シリアルポートというコアな部分の仮想化をするため、インストールに若干クセがあります。一発でうまくいかない場合もあります。筆者はWindows11の23H2にて動作確認をしています。まずはダウンロードですが、現在の最新版はV3.0.0.0ですが、ちょとこのバージョンではうまくいかない場合があります。

たぶん、こんな感じに失敗します。黄色のビックリマークが付いているのでダメです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/7e88bbca-1c98-4003-00f5-948ab2f55b61.png)

オススメはV2.2.2.0です。
以下からダウンロードできます。

https://sourceforge.net/projects/com0com/files/com0com/2.2.2.0/

「com0com-2.2.2.0-x64-fre-signed.zip」というのをダウンロードして、インストールしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/86149b86-7e46-9d01-e460-7e8e96478479.png)

インストールしたら、デバイスマネージャーを確認します。「com0com - serial port emulators」というのが追加されて、仮想的なポートがいくつか追加されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/0d0dfb98-382e-0e81-00d3-18a55dec1e54.png)

## 最初の設定

スタートメニューのプログラムにもcom0comが追加されています。Setupを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/ac807b08-0b2e-c0c9-a5cd-2c9389bce861.png)

ここで、ポート名が「CNCA0」と「CNCB0」となっていますが、「COM50」と「COM60」などの適当なCOM番号に変更し「Apply」を押して反映します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/9a31de40-a509-7d66-0d30-ae38fca5573d.png)

↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/b207a885-55a7-1518-1073-be7ddb5e6e2b.png)

デバイスマネージャーで確認するとCOM50とCOM60が接続されていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/e7c5e867-b9fa-0852-dae3-f75db1348354.png)

ためしにTera Termで見てみると、ちゃんとCOM50とCOM60が認識されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/392002e1-82f6-41f7-99c4-702d9e34d67f.png)

::: note warn
Tera TermのV5系統ではcom0comの仮想COMポートがリストに表示されませんでした。V4系統を使いましょう。今回はV4.108を使用しています。
:::

とりあえずここまでできたら準備完了！

## 実際に通信してみる
Tera Termを2つ起動して、それぞれCOM50とCOM60に接続します。そして、片方から何かデータを送ると・・・
ほら、反対側にデータが届いた！相互にデータの送受信が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/8c31f735-bbb2-f999-0815-183b3c72eb93.png)

## Sequence Makerで通信してみよう
COMポートの準備もできたところで、Sequence Makerからデータを送ってみたいと思います。
Excelを起動して、インターフェイス#1で「RS-232C/USB」を選択してみると・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/8bd55985-23fe-e998-cb90-f87b7f3f79a2.png)

ポートが「 **見　つ　か　り　ま　せ　ん**」:frowning2:

なんと！Sequence Makerはcom0comの仮想COMポートを検出できないのです！

これでは困ります。

せっかく~~怪しい~~便利なcom0comをインストールしたのに・・・:scream:

## 安心してください:blush:VISAなら通信できる！
Sequence MakerはVISAでの通信にも対応しています。VISAはVISAアドレスさえ指定すれば、シリアル通信でもLAN通信でもGPIB通信でも何でも通信できてしまう優れものです。

VISAのインストールがまだの方はKeysight IOライブラリ・スイートあたりを入れてください。

https://www.keysight.com/jp/ja/lib/software-detail/computer-software/io-libraries-suite-downloads-2175637.html

またはNI-VISAとかでも良いです。

ではVISAの準備ができたら、早速COM50に接続するために、I.F.で「VISA」を選び、アドレスに「**ASRL50::INSTR**」と入れてみます。アドレスの数字の部分がCOM番号です。アドレスはテキストボックスなので、好きな番号を入力できるのです。VISA万歳！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/98832c84-a7a4-bf8f-bff5-c4d319afed76.png)

これで、COM60の方はTera Termで接続状態にしておきます。

Excelのセルに適当な文字を入力し「コマンド送受信」ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/977a5881-3310-b2b3-5d5f-fdb870a86382.png)

すると・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/fefc1f6c-34e7-f999-a4cd-926d31e01030.png)

Tera Term側にデータがキターーーーーーーーーーーーーーーーーーーーーーーーーーー

## もちろんSequence Makerだけでも通信できる
インターフェイス#1に「**ASRL50::INSTR**」、インターフェイス#2に「**ASRL60::INSTR**」を指定すれば、Sequence Maker内で通信できます。これでしりとりもできますね！

![レコーディング 2024-12-20 000746.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821782/3b0d3ccf-bdd6-42e4-4a87-123d7fb5a4fb.gif)

## 他にも・・・
いろいろとできそう。
今日は力尽きたのでここまで。

## まとめ
Sequence Makerとcom0comを組み合わせて、シリアル通信を自由自在に扱えることがわかりました。
VISAを使うのがポイントです！！ぜひ面白い使い方を考えてみてください。