シリアル通信

CommSim は TCP / UDP に加え、シリアル(RS-232C / USB-シリアル変換 / RS-485)で通信するアプリ・機器の相手役(スタブ)/中継(プロキシ)になれます。組み込み・FA・計測機器の分野では依然シリアルが主流で、「実機がないと試験できない」制約を CommSim で解消できます。

プロトコル選択で Serial を選ぶと、既存のオートメーション・構造体応答・障害注入・録画リプレイ・ログ解析がそのままシリアルでも使えます(TCP/UDP と同一の操作感)。

手を動かして試すなら → 同梱サンプル 計測器コマンド応答(シリアル)。仮想 COM ペア越しに *IDN? / MEAS? / RST に応答します。

まず理解する:アプリの接続先をどう CommSim にするか

TCP/UDP は localhost(127.0.0.1) で同じ PC 内の 2 プロセスを OS がつないでくれます。ところがシリアルには localhost がありませんCOM3 は通常その先の物理ハードに 1 対 1 で張り付いていて、テスト対象アプリが COM3 を開いても、CommSim が同じ COM3 に「なる」ことはできません。

そこで、2 つの COM ポートを連結する仕組みを用意して、テスト対象アプリの接続先を CommSim にします。方法は 3 つです。

テスト対象アプリCOM10 を開く
仮想COMペアcom0com が連結
CommSimCOM11 を開く

① 仮想 COM ペア(ソフトのみ・おすすめ)

  • ① 仮想 COM ペア(ソフトのみ・おすすめ)com0com 等の仮想シリアルドライバで、連結された仮想ペア(例 COM10 ⇄ COM11)を作ります。片方に書いたバイトがもう片方に出ます。同一 PC 内でハード無しにスタブを試せ、CI/開発機に向きます。
  • ② ヌルモデムケーブル(物理):USB-シリアル変換を 2 本挿し、COM3(アプリ)と COM4(CommSim)を TX↔RX をクロスした配線でつなぎます。仮想ドライバを入れられない環境向け。
  • ③ プロキシ(中継):CommSim が 2 ポート(下流=アプリの接続先/上流=実機の COM)を持ち、間に挟まって記録します(後述)。
CommSim がやること/やらないこと:CommSim は「用意された COM ポートを開いて読み書きする」だけです。仮想ペアを作るのは外部ツール(com0com 等)の役割で、CommSim は同梱しません(ライセンス・署名・環境差のため)。導入手順は次節を参照してください。

仮想 COM ペア(com0com)の導入手順

ダウンロード元に注意:com0com は無料の OSS ですが、検索結果にはクラウドストレージのアカウント登録を要求する偽の配布サイトが紛れています。必ず開発者本人(Vyacheslav Frolov)がホストする SourceForge の公式プロジェクトページからダウンロードしてください。アカウント登録は不要です。
  1. SourceForge から入手するhttps://sourceforge.net/projects/com0com/ を開き、com0com/3.0.0.0/ フォルダから com0com-3.0.0.0-i386-and-x64-signed.zip をダウンロードする(他サイトは使わない)。
  2. 展開して中の Setup_com0com_v3.0.0.0_W7_x64_signed.exe(64bit 環境用)を実行し、インストールする。ポート名は既定の CNCA0 / CNCB0 のままで進めてよい。
Windows 11 で「コード 52」(署名を検証できません)が出た場合:このインストーラのドライバは Windows 7 向けの古い署名のため、Windows 11 では読み込みがブロックされることがあります。次の手順で Microsoft 署名版に置き換えると解消します。
  1. Microsoft Update カタログでドライバーを入手するhttps://www.catalog.update.microsoft.com/Search.aspx?q=com0com を開き、「Vyacheslav Frolov - Ports - 10/10/2015 - 3.0.0.0」の中からサイズ 113KB(x64 版)を 1 つダウンロードする(Ports 表記・CNCPorts 表記のどちらでも中身は同一。104KB は x86 版のため 64bit 環境では不要)。
  2. cab ファイルを展開する(コマンドプロンプトで):
    expand ダウンロードしたファイル名.cab -F:* C:\com0com_driver
  3. デバイスマネージャーで手動適用する:「com0com - serial port emulators」配下にある次の 4 つのデバイスすべてに、同じ手順を繰り返す。
    • com0com - bus for serial port pair emulator
    • com0com - bus for serial port pair emulator 1
    • com0com - serial port emulator(× 2)
    各デバイスを右クリック →「ドライバーの更新」→「コンピューターを参照してドライバーを検索」→ C:\com0com_driver を指定 → インストール。Windows が展開フォルダ内から適切な inf を自動選択し、Microsoft 署名済みドライバーに置き換わってコード 52 の警告が消える。
ポート名は先に決めておく:ペアのポート名(COM 番号)を後から変更すると署名が再度崩れることがあるため、変更するならスタートメニューの「Setup Command Prompt」(com0com 同梱)を管理者として開き、最初にまとめて設定しておくと手戻りが少ない。
change CNCA0 PortName=COM10
change CNCB0 PortName=COM11

Windows Update の「オプションの更新プログラム」に自動で出てこない場合が多いため、上記の Microsoft Update カタログ経由の手動適用が確実です。

接続設定

セッションの「接続」タブでプロトコルに Serial を選ぶと、次の項目が表示されます(サーバ/クライアントの区別はシリアルには無いため非表示になります)。

  • COM ポート:一覧から選ぶか、未列挙のポート名(例 COM11)を直接入力できます。「再取得」で最新の一覧に更新します。
  • ボーレート:一般値(4800〜115200)から選ぶか直接入力。
  • パリティ / データビット / ストップビット / フロー制御:相手機器の仕様に合わせます。
両端の設定は一致させる:ボーレートやパリティが送受で食い違うと文字化けになります(通信自体はできているのに内容が読めない状態)。CommSim は受信バイト列を HEX でログに表示するので、文字化けの原因調査ができます。

起動すると指定した COM ポートを開いて待受状態(接続済み)になります。あとはオートメーション・構造体応答などが TCP/UDP と同じように動作します。

プロキシ(中継)

上流(転送先)のプロトコルにも Serial を選べます。これで「下流=仮想ペア ⇄ CommSim ⇄ 上流=実機の COM」の中継ができ、実機でしか出ない不具合の往復を記録できます。

テスト対象アプリCOM10
CommSim下流 COM11 / 上流 COM5
実機COM5

「接続」タブで転送先を有効にし、上流プロトコルを Serial にすると、上流側にも COM ポート・通信パラメータの入力欄が現れます。下流=仮想ペア、上流=実機の COM を割り当てます。

実機なしで手順どおりに試したい場合は シリアルのプロキシ(中継)を試す を参照してください。仮想 COM ペアを 2組(下流・上流)使い、上流の実機役を CommSim.Sample の②ペインが演じます。

つながらないとき(失敗診断)

接続に失敗すると、CommSim は原因が分かるメッセージをログに出します。

症状主な原因と対処
「COMxx が見つかりません」仮想 COM ドライバ(com0com 等)が未導入、または仮想ペア未作成。ポート名の打ち間違いも確認。
「COMxx は他のアプリが使用中です」ターミナルソフトなど別アプリがそのポートを開いています。閉じてから再試行。
「通信設定の値が不正です」ボーレート・データビット等が範囲外。値を見直してください。
受信できるが内容が文字化け両端のボーレート/パリティ等の不一致。HEX 表示のログで受信バイトを確認し、設定を合わせます。

なぜターミナルでなく CommSim か

シリアルターミナル(Tera Term 等)は通信を「見る」ツールです。CommSim は実機の代わりに能動的に応答し・異常系を注入し・再現するツールです。

  • オートメーション:コマンド受信→応答、接続あいさつ、周期送信をシリアルでも。
  • 構造体応答:STX/長さ駆動のバイナリフレームを条件応答。
  • 障害注入:遅延・パケットロス・切断でタイムアウト/リトライを検証。
  • 録画リプレイ:実機との往復を録画し、実機なしで決定論的に再生。

これらは TCP/UDP と同一の操作感で、シリアルにもそのまま使えます。

次に読む