シリアル通信を試す(仮想 COM ペアで計測器スタブ)

TCP/UDP と違い、シリアルには localhost がありません。このチュートリアルは仮想 COM ペアを作ってから、CommSim を計測器(RS-232C / USB-シリアル機器)の相手役として動かすまでを、実機なしで手順どおりに進めます。題材は SCPI 風の ASCII コマンド-レスポンス(*IDN? / MEAS? / RST)です。

SerialCOM10 ⇄ COM119600 8-N-1ASCII コマンド実機不要要 仮想 COM ペア

このページでできること

  • 仮想 COM ペア(com0com)を導入し、TCP/UDP の localhost に相当する「接続先」をシリアルで用意する。
  • CommSim を計測器(機器)役のスタブとして動かし、ASCII コマンドにオートメーション(パケット一致)で応答させる。
  • CommSim.Sample をアプリ役として COM ポート越しに接続し、実際にコマンドを送って応答を観察する。
  • COM が見つからない・応答がない場合の失敗診断の見方を押さえる。
シリアルの接続設定・プロキシ・失敗診断の網羅的な説明は シリアル通信 を参照してください。このページは手順に絞っています。

登場人物(役割)

実機は要りません。CommSim 本体=計測器役(COM11 を開いてコマンドに応答)CommSim.Sample=アプリ役(COM10 を開いてコマンドを送る)の 2 本と、両者をつなぐ仮想 COM ペア(com0com)で完結します。

CommSim.Sampleアプリ役:COM10 で送信
仮想COMペアcom0com(COM10⇄COM11)
CommSim 本体計測器役:COM11 で応答
CommSim.Sample で「動かすサンプル=計測器(シリアル・COM ポート)」を選ぶと、アプリ役のポート名が自動的に COM10 になります。仮想ペアの自分の環境のポート名が異なる場合は、① ペインの COM ポート欄で選び直してください。

用意するもの

ファイル/ツール内容
仮想 COM ペアドライバ(com0com 等)OS 標準では用意されないため別途導入する。導入手順は シリアル通信 §仮想 COM ペアの導入手順 を参照(SourceForge の公式配布のみ使用・他サイトは使わないこと)
serial-instrument/serial-instrument.commsim計測器役スタブのプロジェクト(Serial・既定 COM11・9600 8-N-1・*IDN?/MEAS?/RST の 3 オートメーション)
CommSim.Sampleアプリ役として実際にコマンドを送る動作確認用アプリ(CommSim に同梱・追加のインストールは不要)

serial-instrument.commsim は CommSim.Sample の実行フォルダ内 samples/serial-instrument/ に同梱されています。実機は不要ですが、仮想 COM ペアの導入だけは先に済ませてください

ステップA:仮想 COM ペアを作る

まだ仮想 COM ペアを導入していない場合は、シリアル通信 §仮想 COM ペア(com0com)の導入手順 の手順で COM10 ⇄ COM11(またはお使いの環境の空き番号)のペアを作成してください。Windows 11 ではドライバ署名(コード 52)で追加の手当てが必要になる場合があります。手順ページに対処法を記載しています。

ダウンロード元に注意:com0com は無料の OSS ですが、検索結果にはクラウドストレージのアカウント登録を要求する偽の配布サイトが紛れています。必ず SourceForge の公式プロジェクトページsourceforge.net/projects/com0com)から入手してください。

デバイスマネージャーで「com0com - serial port emulators」の下に警告アイコンなしでポートが 2 つ(既定 CNCA0/CNCB0)見えれば準備完了です。ポート名を COM10/COM11 に変更したい場合は、手順ページの「ポート名は先に決めておく」の注意に従ってください。

ステップB:CommSim を計測器役として起動する

  1. CommSim 本体で samples/serial-instrument/serial-instrument.commsim を開く(「ファイル」→「ファイルから開く…」/Ctrl+O)。
  2. セッション「計測器スタブ(シリアル)」の「接続」タブで、プロトコル=Serial・COM ポート=自分の仮想ペアの片方(既定は COM11。異なる場合はコンボから選び直す)になっていることを確認する。
  3. 起動」をクリックする。COM ポートが開けると即座に「接続中」(Serial は待受概念がないため open=接続扱い)になる。
  4. オートメーション」タブで、*IDN? / MEAS? / RST の 3 件(パケット一致トリガー)が有効になっていることを確認する。
CommSim 接続タブ:プロトコル Serial、COM ポート COM4、ボーレート 9600、データビット8・パリティNone・ストップビット1、状態=接続済み
「接続」タブ。プロトコル=Serial を選ぶと COM ポート・ボーレート等シリアル固有の設定行に切り替わる。「起動」で COM ポートを開くと状態は即座に「接続済み」になる(TCP/UDP の「待受中」に相当する状態はない)。画面は検証環境の仮想ペア(COM4)で撮影しており、既定の COM11 とは異なる(自分の環境のポート名を選べばよい)。

ステップC:アプリ役から送って観察する

  1. CommSim.Sample を起動し、上部の「動かすサンプル」で「計測器(シリアル・COM ポート)」を選ぶ。① ペインのプロトコルが Serial・COM ポートが COM10(既定)になる。
  2. 自分の仮想ペアのポート名が既定と異なる場合は、① ペインの COM ポート欄で選び直す(「再取得」で一覧を更新できる)。
  3. ① ペインの「起動」(接続)をクリックし、COM10 を開く。
  4. デモ送信」を押す。① が *IDN?MEAS?RST を順に送る。

観察できること

  • TX*IDN?① → 計測器役
  • RXCommSim,MODEL-100,SN12345,1.0機種名・S/N・バージョン
  • TXMEAS?
  • RXMEAS 23.5 degC50ms 遅延つき応答
  • TXRST
  • RXOK
CommSim.Sample のログ:TX *IDN? に対し RX CommSim,MODEL-100,SN12345,1.0、TX MEAS? に対し RX MEAS 23.5 degC、TX RST に対し RX OK
CommSim.Sample(① アプリ役)のログ。*IDN?/MEAS?/RST それぞれに対し、CommSim 本体(計測器役)からの応答が仮想 COM ペア越しに届く。
CommSim 本体側の「ログ」タブでも同じ往復が記録されます。応答の中身を変えたい場合は「オートメーション」タブの該当ステップ(送信データ)を編集してください(プログラム再起動は不要・保存すれば次回の一致から反映)。

自分のケースへの当てはめ方

このサンプルの流れを、自分のシリアル機器に応用するときの判断の糸口です。

問いはいいいえ
テスト対象アプリは特定の COM ポート名を指定して開くか?仮想ペアの片方をその名前に合わせる(com0com の Setup Command Prompt で changeアプリ側の設定でポート名を変えられるならどちらでもよい
実機が手元にあり、実機だけの不具合を調べたいか?プロキシ(中継)で 下流=仮想ペア ⇄ CommSim ⇄ 上流=実機 COM を組み、通信をそのまま記録する(シリアル通信 §プロキシスタブ単体(このチュートリアルの構成)で十分
応答が固定値でなく計算・状態を持つか?オートメーションをスクリプト応答に置き換える(スクリプトで動的応答を作るこのサンプルと同じ固定応答でよい

次に読む