シリアルポートの監視・スニッフ・デバッグ・ログ取得

このページでは、デバイス間(PC・コントローラ・組み込みボードなど)のシリアル通信を解析する 3 つの方法と、 SerialTool の COM Sniffer が多くの場合で最適な解決策となる理由を解説します。 ソフトウェアのみで動作し、配線不要透過的で、数日単位の連続 モニタ/スニッフ/デバッグ/ロガー用途にも対応できます。

このページでわかること

  • 第1章: COM ポートを 監視する とはどういうことか、バイト/ビットの構造と、 シリアルがどのように送信するか(スタート/データ/パリティ/ストップ)、そして TX/RXボーレート について。
  • 第2章: 2 台の USB↔シリアルアダプタによる古典的な 物理スニッフィング 手法。 それぞれのアダプタの RX を 2 つのデバイスの TX ラインにつなぎ、GND を共有します。 シンプルな モニタ/ロガーとして最適です。
  • 第3章: 同じコンセプトを、USB↔シリアル/RS-232/RS-485 コンバータを介して Master PCTarget デバイス と通信するケースに適用。 (プロトコルは同じで、物理レベルが異なるだけ)。Modbus RTU/ASCII や 産業/CNC/組み込み分野での(デバッグやファームウェア、リバースエンジニアリング)利用例も紹介します。
  • 第4章: SerialTool の COM Sniffer を使うメリット。 Windows カーネルドライバ ベースの シリアルポートモニタ で、 他ソフトがすでにオープンしているポートの データIOCTL信号各種パラメータ を傍受します。配線不要で、細かいフィルタ、 pcap/pcapng へのエクスポート(Wireshark など)、 長時間キャプチャに耐える安定性が特長です。

目的が「サードパーティソフトの動作を素早く解析したい」「自分のアプリケーションを継続的に監視したい」 であれば、まずは 第4章 – COM Sniffer から読むのがおすすめです。 追加のテストベンチを組まずに モニタスニッフデバッグログ取得 が行える最短ルートです。

第1章 – COM ポートからのデータ監視

1.1 「シリアルポートを監視する」とは

COM(シリアル)ポートを監視するとは、PC とデバイスの間を流れる通信ライン上の バイト を リアルタイムで観察することです。監視では通常、2 つの方向を区別します。 TX(PC からデバイスへの送信)と RX(デバイスから PC への受信)です。 良いモニタは、データを テキスト(ASCII/UTF-8 としての解釈)と 16 進数(HEX、つまり生のバイト列) の両方で表示できます。

何のために行うか
  • TX と RX が 正しいパラメータ(ボーレート、データビット、パリティ、ストップビット)で行われているか確認する。
  • テキストとして読めない場合でも、どのようなバイト列が送受信されているかを 1 バイトずつ把握する。
  • Modbus/RTU や独自プロトコルなどの設定ミス・プロトコルエラーを診断する。

1.2 バイトとビット:論理表現とシリアル送信の違い

たとえばテキスト Hello を送る場合、この 5 文字は 5 つの ASCII バイトに変換されます。 16 進表記では 48 65 6C 6C 6F です。SerialTool のような バイトビジュアライザ を使うと、 各バイト内部のビットを論理波形として視覚的に確認できます。

文字列 'Hello' のビット波形(SerialTool の ByteVisualizer による論理ビュー)

図 1 — Hello に対するビットの「論理」表現

それぞれの枠が 1 バイト(0x48, 0x65, 0x6C, 0x6C, 0x6F)を表します。各バイトの下には ASCII、HEX、10 進、2 進が表示されます。 このビューは、ソフトウェア内部で バイト がどのように保持・処理されているかを理解するのに役立ちます。

論理ビューでのバイトの読み方

  • グラフには各バイトについて 8 個の データビット(b7…b0)が表示されます。メモリ上では一般に MSB→LSB(最上位ビットから最下位ビット)として並べます。
  • この表現には、シリアルプロトコルの要素(スタートビット・パリティ・ストップビット)はまだ含まれておらず、 実際の伝送順序も反映していません。

シリアルポートでの送信時のバイト構造

物理的な RS-232/TTL ライン上では、各バイトは次のような シリアルフレーム として送信されます。

スタート(1 ビット、論理 “0”)データ(7/8 ビット、LSB ファースト)パリティ(任意)ストップ(1 ビット以上、論理 “1”)

  • アイドル状態: TX ラインは論理 “1”(マーク)で安定しています。スタートビットが来るまで 1 のままです。
  • スタートビット: “1” から “0”(スペース)への遷移がバイト開始を示します。
  • データビット: データビットは LSB ファースト(最下位ビットから)で送信されます。
  • ストップビット: “1” に戻り、1 ビットまたは複数ビット分維持されます。これによりアイドル状態が復元されます。
  • ボーレート: 各ビットの長さを決定します(例:9600 ボーなら 1 ビット ≒ 104.17µs)。
文字列 'Hello' のシリアルフレーム波形(SerialTool の ByteVisualizer による表示)

図 2 — 同じ Hello を、ライン上の シリアルフレーム として表示: 各バイトで アイドル → スタート → データ(LSB ファースト) → ストップ がわかります。

このビューは、送信順序と ボーレート で決まる一定のビット時間を視覚的に示します。

RS-232 と TTL の違いについての注意

  • TTL レベル(3.3V/5V の UART)では、“1” が High、“0” が Low です。
  • RS-232 では電圧レベルが反転し(論理 “1” ≒ 負電圧、論理 “0” ≒ 正電圧)、電圧範囲も異なりますが、 スタート/データ/ストップの順序自体は同じです。

簡単な例:「Hello」を送るのに必要な時間

8N1 設定(スタート 1、データ 8、ストップ 1)の場合、1 バイトあたり 10 ビット を使用します。 9600 ボーではおよそ 960 バイト/秒 となり、5 文字(“Hello”)の送信には約 5.21 ms かかります。

第2章 – 2 台の USB–シリアルアダプタでシリアル通信をモニタ/スニッフ/デバッグ/ロギングする

2 台の USB-シリアルアダプタでシリアル通信をスニッフィングする配線例

ハードウェアのパッシブ・タッピング 構成図

PC は 2 つのポート(COM5COM6)を開きます。 各 USB–シリアルアダプタは RX のみ を使用して、それぞれのデバイスが送信する内容を「傍受」します。 GND(グラウンド)は 共通 です。紫と青のラインは 2 つのデバイス間の通常の TX↔RX 接続です。

2.1 目的

Device 1Device 2 の間でやり取りされるバイト列を、 通信を中断させることなく 監視デバッグログ取得 するための 非侵襲なシリアル モニタ/スニッファ を構成します。

2.2 電気的接続(パッシブ・タッピング)

  • COM5(USB–シリアル #1): アダプタの RX ピンDevice 1 の TX に接続(Device 1 が 送信する データを監視)。
  • COM6(USB–シリアル #2): アダプタの RX ピンDevice 2 の TX に接続(Device 2 が 送信する データを監視)。
  • 共通 GND: 2 台の USB–シリアルアダプタと 2 つのデバイスの GND を共通に接続(論理レベルの基準を一致させる)。
  • アダプタ側の TX はバスに接続しない: リッスン専用の「ハイインピーダンス」状態とし、ラインを乱さないようにします。
  • アダプタの 5V/3.3V でデバイスを給電しない(タップ用途では VCC は使用しません)。

レベルに関する注意: この方法は UART/TTL(3.3/5V)や、それに対応したドライバを持つバスに適用できます。 RS-232(±12V) を TTL の RX に 直接接続してはいけません。必ず RS-232↔USB コンバータ や専用の RS-232 タップ/モニタ を用いてください。 つまり、RS-232 ラインを ログ したい場合は、適切なハードウェアを使用する必要があります。

2.3 ボーレートの確認と設定

データを正しく復号するには、ボーレート と各種パラメータをデバイス側と一致させる必要があります(例:9600/8N1)。 不明な場合は次のようにします。

  • デバイスまたはプロトコルのドキュメントを確認する。
  • 9600、19200、38400、57600、115200 など、よく使われるボーレートを順に試す。
  • オシロスコープ/ロジックアナライザで測定する:ビット長は Tbit=1/baud (例:9600 ボーなら 1 ビット ≒ 104.17µs)。

2.4 SerialTool で 2 つの COM ポートを開く

  1. アダプタを接続すると、OS 上に 2 つのポート(この例では COM5COM6)が見えるようになります。
  2. SerialTool2 つのセッション を開きます。
    • セッション A → COM5、デバイス側と同じボーレート/パリティ/ストップビットを設定(例:115200/8N1)。
    • セッション B → COM6、セッション A と同じ設定。
  3. 両方を モニタモード(RX のみ) にします:COM5 では Device 1 が 送信する バイト列、 COM6 では Device 2 が 送信する バイト列が見えるようになります。
  4. デバッグ 用には HEX 表示タイムスタンプ を有効にし、 ログ 用にはファイル(CSV/pcap/生データ)に保存して後から解析できるようにします。

この構成では、実質的に パッシブな物理的「Man-in-the-Middle」 として動作します。 電気的にデータをモニタ/スニッフしながら、信号そのものには影響を与えません。

2.5 この例で扱っていない制御線

上の図は TX/RX データにフォーカスしており、RTS/CTSDTR/DSRDCDRI などの制御ピンは監視していません。 多くの用途ではこれらは不要ですが、デバイス側が ハードウェアフロー制御 を使用している場合は、 専用のプローブでこれらのラインも「タップ」した方がよい場合があります。

参考リンク: RS-232 (Wikipedia)RS-232 – SignalsHardware flow controlUART

2.6 安定したモニタ/スニッファのための実践的なコツ

  • ケーブルはできるだけ短くし、確実な共通 GND を取る(グランドループを避ける)。
  • ほとんどの UART ドライバは、1 本の TX ラインに対して 2 つの RX 入力(ファンアウト)を許容しますが、 不要な負荷はかけないようにします。
  • 両方のセッションでポートパラメータ(ボーレート、データビット、パリティ、ストップビット)を揃える。
  • RS-485 や差動バスでは、専用アダプタや別のタップ方法が必要になります。

この手法を使えば、一般的な道具(2 台の USB–シリアルアダプタ + SerialTool)だけで、 2 つのデバイス間のシリアル通信を安定して 監視スニッフデバッグログ取得 できます。

第3章 – 「Master PC」と「Target デバイス」間のシリアルリンクをスニッフィング/監視する

2 台の USB-シリアルアダプタを利用して別 PC から Master PC と Target デバイス間をスニッフィングする例

ハードウェアデバイスと PC 間のシリアル通信のイメージ図

Master PC(右)は Target デバイスシリアル通信デバイス(一般的には USB↔シリアル コンバータ: UART/TTL、RS-232RS-485 など)を介して通信します。 Sniffing PC(左)は 2 つのポート(COM5COM6)を開き、 2 台の USB–シリアルアダプタでラインに パッシブに接続 します: COM5 の RXデバイス側 TX に、 COM6 の RXPC 側 TX に接続します。GND(共通グラウンド)も接続します。

3.1 目的と基本コンセプト

ここでの目的は、Master PC 上のソフトウェアと Target デバイスの間でやり取りされるバイト列を、 通信を邪魔することなく 監視スニッフィング することです。 これは典型的な パッシブな物理的 Man-in-the-Middle であり、 2 台の USB–シリアルアダプタをそれぞれ RX のみで接続し、双方向を監視します。 この手法は デバッグ、プロトコル解析、さらには ロガー としての利用 (監査やリバースエンジニアリング用途)に非常に有用です。

3.2 接続手順(ステップごと)

  1. COM5(Sniffing PC) → アダプタの RXデバイス側 TX に接続(Target が送信するものを傍受)。
  2. COM6(Sniffing PC) → アダプタの RXPC 側 TX に接続(Master PC が送信するコマンドを傍受)。
  3. 2 台のアダプタと 2 つのデバイスの GND を共通 に接続(基準電位を共有)。
  4. Sniffing PC 側アダプタの TX は接続しないリッスン専用(高インピーダンス)とし、ラインに影響を与えないようにします。

SerialTool では COM5COM6 の 2 つのセッションを開き、 双方のセッションで Master/Device と同じ ボーレートとフォーマット(例:115200-8N1)を設定します。 ボーレートが不明な場合は、一般的な値を試すか、ビット長をオシロスコープ/ロジックアナライザで測定します。

3.3 同じプロトコル・異なるレベル:UART/TTL・RS-232・RS-485

非同期シリアルプロトコル(スタートビット、L​​SB ファーストの 7/8 データビット、任意のパリティ、1 以上のストップビット)は同じです。 違うのは、ビットが乗る 物理レベル だけです。

  • UART/TTL(3.3V/5V): シングルエンド信号で、“1” が High、“0” が Low。
  • RS-232: 信号レベルが反転し、±電圧(一般に ±3〜±12V)のシングルエンド信号。
  • RS-485: A/B ペアを用いた 差動 信号で、しばしば 半二重・マルチドロップ構成。共通 GND を取ることが推奨されます。

したがって、使用する アダプタを正しく選ぶ ことが重要です。 UART なら USB↔TTL、RS-232 なら USB↔RS-232、RS-485 なら USB↔RS-485 を利用します。 フレーム構造は同じでも、電気的レベルやトポロジ(差動/終端など)は異なります。

3.4 利用分野(CNC・産業機器など)

この構成は、CNC産業機械、PLC/HMI、ロボット、 はかり、POS、各種センサー、計測器、ビルオートメーションなど、 PC や PLC がシリアル経由でデバイスを制御するあらゆるシステムでよく使われます。 ここで説明したスニッフ手法により、機能解析、障害診断、コマンドのトレース、検証などの目的で 通信を 監視/スニッフィング/デバッグ/ロギング できます。

3.5 シリアル上の Modbus

シリアルポートでは、産業分野で広く使用されているマスタ/スレーブ(現在はクライアント/サーバ)型プロトコルである Modbus RTU/ASCII が使われることも多くあります。 Master は コイルレジスタ の読み書き要求を送り、デバイスが応答します。 SerialTool には Modbus クライアント が統合されており、 レジスタのクイック読み出し(診断やテスト)に加えて、 生のフレーム(アドレス、ファンクションコード、データ、CRC)を確認するためのモニタ/HEX ビューも利用できます。

3.6 ファームウェア更新とパラメータ設定

組み込み の世界では、シリアルは ファームウェア更新パラメータ書き込み に頻繁に使われます。 例としては、自作ボード用ブートローダ、Arduino を始めとする各種マイコン向けエコシステムなどがあります。 ここで開発者には次の 2 つのニーズが生じます。

  1. Target と通信するアプリケーションを デバッグ したい (どのコマンドが、どのタイミングで、どのようなエラーとともに送受信されているか確認)。
  2. 既存プロトコルを リバースエンジニアリング したい (「ブラックボックス」な Master ソフトとボードがあり、 まずはスニッフしてメッセージ形式を理解し、その後自作ソフトで 再現 したい)。

3.7 実践的な注意点とツール

  • この構成では通常、2 台の PC(Master PC と Sniffing PC)と、 双方向スニッフィング用に 少なくとも 2 台の USB–シリアルコンバータ が必要です。
  • RS-232 の場合は RS-232 タップ/コンバータを使用し、 RS-485 の場合は A/B 端子に受信専用インタフェースを接続します (終端抵抗や極性に注意)。半二重 RS-485 では、タイミングや文脈から送信方向を判断することになります。
  • RTS/CTS、DTR/DSR、DCD、RI などの制御線はここでは扱っていません。 システムが ハードウェアフロー制御 を使う場合は、専用プローブでこれらも観測することを検討してください。
  • SerialTool では、HEX 表示 やタイムスタンプ、テキスト/CSV/pcap 形式での ロギング を有効にし、後から詳細解析することができます。

まとめると、シリアルプロトコル(非同期フレーム)は同じでも、 物理レベル(TTL/RS-232/RS-485)は異なります。 2 本の RX によるパッシブタッピングと SerialTool のようなソフトウェアを組み合わせることで、 Master PC と Target デバイス間の通信を、信頼性高く 監視スニッフィングデバッグログ取得 できます。

第4章 – COM Sniffer:配線なしで行うモニタ/スニッフィング/デバッグ/ログ取得

SerialTool COM Sniffer:物理的な配線を変更せずに、すでにソフトウェアが開いているシリアルポートをモニタリング

COM Sniffer - Serial Port Monitor

SerialTool – COM Sniffer を使えば、第 3 章で紹介したような配線は不要です。 Master PC(サードパーティ製のプロプライエタリソフト)と Target デバイス の間のトラフィックは、 システムによって 直接、しかも透過的かつ非侵襲的にキャプチャされます。

4.1 COM Sniffer が行うこと

COM Sniffer は、すでに他のプログラムによって オープンされている COM ポート上の通信を傍受し、 そのポートのトラフィック(TX/RX)を モニタスニッフィングデバッグログ取得 できる シリアルポートモニタ です。 その際、配線を一切いじらず、追加ハードも不要で、 Master PC や Target デバイスの動作を 変えることなく 解析できます。

4.2 動作原理:カーネルドライバ

中核となるのは Windows 用の カーネルモードドライバ で、 シリアルポートスタックの中にフックし、次のような情報を選択的に観測します。

  • データバッファ(TX ↔ RX):送信方向と受信方向を明確に分離して表示。
  • IOCTLInput/Output Control): ポートのオープン/クローズ、ボーレート・パリティ・ストップビット・タイムアウトの設定、 RTS/DTR/CTS/DSR/DCD/RI などの制御信号の設定・取得。
  • イベント/信号およびポート状態(ラインステータス、モデムステータス)。

ドライバ自体は 非常に強力 ですが、インターフェースは シンプル です。 種類(データのみ、設定 IOCTL のみ、信号のみなど)ごとに フィルタ をかけて、 必要な情報だけに絞り込めます。 また、長時間(数時間〜数日) のキャプチャを安定して行えるよう設計されており、 自作アプリはもちろんサードパーティ製アプリの挙動監視にも適しています。 なお、カーネルモードドライバに依存しているため、Windows 専用 です。 (詳しくは Windows カーネルドライバ を参照)

4.3 なぜ多くの場合、物理配線より COM Sniffer が有利なのか

  • 2 台の PC や 2 台の USB–シリアルアダプタを使った「ラボ構成」が不要で、 セットアップ時間を短縮 でき、故障要因も減らせます。
  • 電気的な負荷を一切追加しないため、ラインを劣化させたりグランドループを作る心配がありません。
  • アプリケーションとドライバの間で行われているすべてのやりとりを確認できます: データIOCTL信号 を、複数ポート同時に見ることも可能です。

4.4 プロトコル解析のためのログ取得とエクスポート

COM Sniffer は、テキスト/CSV 形式の ロガー として直接ファイルに保存できるほか、 pcap/pcapng 形式にエクスポートして Wireshark などで解析することもできます。 これは、Modbus RTU/ASCII のような産業用プロトコルを扱う際に特に有効です。 フレームとタイムスタンプから、タイミング・CRC・ファンクションコードの順序などを検証できます。

4.5 何が観測できるか

  • ASCIIHEX の両方で表示される TX/RX データ(方向別、タイムスタンプ付き)。
  • ソフトウェアが設定した ポートパラメータ(ボーレート、7/8 ビット、パリティ、ストップビット、タイムアウト)。
  • 制御信号IOCTL(RTS、DTR、CTS、DSR、DCD、RI)およびその状態変化。
  • ポートの オープン/クローズ、オーバーラン・フレーミング・パリティエラーなどの各種エラー。

4.6 どんな場面で使うか

  • 自作のシリアルアプリケーションを、コードや配線を変更せずに デバッグ したいとき。
  • サードパーティ製アプリケーションを長時間 監視 し、監査やトラブルシュートに活用したいとき。
  • (法的に許される範囲内で)プロプライエタリなプロトコルを リバースエンジニアリング し、 自作ソフトで同等機能を再現したいとき。
  • Modbus などの標準プロトコルや ハンドシェイク信号 の挙動を検証したいとき。

4.7 補足と参考リンク

COM Sniffer は、スタート/データ/パリティ/ストップからなる非同期シリアルプロトコルのロジックに基づいて、 システムレベルで動作します。 アプリケーションが UART/TTL・RS-232・RS-485 など異なる 物理レベル を使っていても、 キャプチャは電気レベルより 上位(Windows の COM ポートスタック内)で行われるため、同じ形式で取得できます。

参考リンク: Serial port · UART · RS-232 · RS-485 · IOCTL · Windows kernel drivers · Wireshark · Modbus

まとめると、SerialTool の COM Sniffer は、 他のプログラムによってオープンされているシリアルポートを モニタスニッフィングデバッグログ取得 するための 「ソフトウェアのみ」のソリューションです。 信頼性の高い カーネルドライバと柔軟なフィルタ、そして高度な解析のためのエクスポート機能を備えています。