监控、嗅探、调试和记录串行端口

在本页中,您将学习三种分析设备间(PC、控制器、嵌入式板卡)串行通信的方法,以及为什么 SerialTool 的 COM 嗅探器 通常是最佳解决方案:纯软件无需接线透明,并且适合监控/嗅探/调试/记录使用,甚至可持续数天。

您将了解的内容

  • 第 1 章监控 COM 端口的含义,字节/位 的结构以及串行如何发送它们(起始位/数据位/校验位/停止位),外加 TX/RX波特率
  • 第 2 章:使用两个 USB↔串口适配器进行 物理嗅探 的经典方法:仅将 RX 连接到两个设备的 TX 线路并共享地线。非常适合简单的 监控/记录器
  • 第 3 章:将相同的概念应用于通过 USB↔串口/RS-232/RS-485 转换器(相同的协议,不同的物理电平)进行通信的 主 PC目标设备。包括 Modbus RTU/ASCII 概述以及工业/CNC/嵌入式用例(调试、固件、逆向工程)。
  • 第 4 章:为什么使用 SerialTool 的 COM 嗅探器 通常是值得的:这是一个基于 Windows 内核驱动程序串行端口监视器,可拦截已被其他软件打开的端口的 数据IOCTL信号参数无需电缆,精确过滤,导出为 pcap/pcapng(例如,用于 Wireshark),并且稳定性足以进行 长时间捕获

如果您的目标是快速分析第三方软件或持续监控您的应用程序, 请从 第 4 章 – COM 嗅探器 开始:这是在无需搭建测试台的情况下进行 监控嗅探调试记录 的最快方法。

第 1 章 – 监控来自 COM 端口的数据

1.1 “监控串行端口”的含义

监控 COM(串行)端口意味着实时观察 PC 与设备之间通信线路上传输的 字节。在监控中,我们通常区分两个方向: TX(从 PC 到设备的传输)和 RX(从设备到 PC 的接收)。 一个好的监视器会以文本(ASCII/UTF-8 解释)和十六进制(HEX,即原始字节)两种形式显示数据。

用途
  • 验证 TX 和 RX 是否以正确的参数(波特率、数据位、校验位、停止位)发生。
  • 理解发送/回复的内容,逐字节地,即使文本不可读。
  • 诊断配置或协议错误(例如 Modbus/RTU、专有命令等)。

1.2 字节和位:逻辑表示与串行传输

当我们写入文本 Hello 时,这五个字符被转换为五个 ASCII 字节: 十六进制为 48 65 6C 6C 6F。像 SerialTool 的字节可视化器这样的字节查看器可以让您看到 每个字节内各个位的逻辑波形。

字符串 'Hello' 的位波形(SerialTool 字节可视化器中的逻辑视图)

图 1 — Hello 的“逻辑”位表示

每个框高亮显示一个字节(0x48, 0x65, 0x6C, 0x6C, 0x6F)。每个字节下方是 ASCII、HEX、十进制和二进制。此视图有助于理解软件存储和处理时的字节内容。

如何在逻辑视图中读取字节

  • 图表为每个字节高亮显示 8 个数据位(b7…b0)。在内存中,我们可以将它们列为 MSB→LSB(最高有效位到最低有效位)。
  • 此表示包含串行协议元素(起始位、校验位、停止位),也不反映线缆上的传输顺序。

字节如何在串行端口上传输

在物理的 RS-232/TTL 线路上,每个字节都根据 串行帧 进行封装:

起始位(1 位,逻辑“0”)数据位(7/8 位,LSB 优先发送)校验位(可选)停止位(1 位或多位,逻辑“1”)

  • 空闲:TX 线路稳定在逻辑“1”(标记状态)。因此信号保持为 1,直到起始位到达。
  • 起始位:跳变到“0”(空号)表示字节的开始。
  • 数据位:数据位以 LSB 优先 的顺序传输(最低有效位先发送)。
  • 停止位:返回“1”并持续 1 位或多位;确保恢复空闲状态。
  • 波特率:决定每个位的持续时间(例如,9600 波特时,每位持续约 104.17 µs)。
字符串 'Hello' 的位波形(SerialTool 字节可视化器中的逻辑视图)

图 2 — 相同的 Hello 字节作为线路上的串行帧: 对于每个字节,您可以看到空闲 → 起始位 → 数据位(LSB 优先)→ 停止位

此视图突出了传输顺序以及由波特率决定的固定位定时。

关于 RS-232 与 TTL 的说明

  • TTL 电平(3.3 V/5 V 的 UART)下,“1”为高电平,“0”为低电平。
  • RS-232 电平下,电压电平是反转的(逻辑“1”≈负电压,逻辑“0”≈正电压),但起始位/数据位/停止位的序列保持相同。

快速示例:传输“Hello”所需时间

使用 8N1 配置(1 个起始位,8 个数据位,1 个停止位),每个字节在线路上使用 10 位。 在 9600 波特下,约为 960 字节/秒。对于 5 个字节(“Hello”),大约需要 5.21 毫秒

第 2 章 – 使用两个 USB 转串口适配器监控/嗅探、调试和记录串行通信

使用两个 USB 转串口适配器嗅探串行通信的物理接线图

硬件被动分接 示意图

PC 打开两个端口(COM5COM6)。 每个 USB 转串口适配器仅使用 RX 来“监听”每个设备发送的内容。 地线(GND)是共用的。紫色和蓝色线是两个设备之间正常的 TX↔RX 连接。

2.1 目标

创建一个非侵入式的串行监视器/嗅探器,以观察、调试记录 设备 1设备 2 之间交换的字节,而不会中断 它们的通信。

2.2 电气连接(被动分接)

  • COM5 (USB 转串口 #1):将适配器的 RX 引脚 连接到 设备 1 的 TX(嗅探设备 1 发送 的数据)。
  • COM6 (USB 转串口 #2):将适配器的 RX 引脚 连接到 设备 2 的 TX(嗅探设备 2 发送 的数据)。
  • 共地:将两个 USB 转串口适配器的地线连接到两个设备的地线(共享逻辑电平参考)。
  • 不要将适配器的 TX 连接到总线:我们保持“高阻抗”只听模式,因此不会干扰线路。
  • 不要从适配器的 5V/3.3V(VCC 在分接中不使用)为设备供电。

电平注意:此方法适用于 UART/TTL(3.3/5 V)或具有兼容驱动器的总线。 对于 RS-232 (±12 V)请勿直接连接 TTL RX:您需要 RS-232↔USB 转换器 或专用的 RS-232 分接器/监视器。换句话说, 如果您想记录 RS-232 线路,请使用合适的硬件。

2.3 查找和设置波特率

要正确解码数据,波特率 和参数必须与设备的参数匹配(例如 9600/8N1)。 如果未知:

  • 检查设备或协议文档。
  • 尝试最常见的波特率(9600、19200、38400、57600、115200...)。
  • 使用示波器/逻辑分析仪测量:位持续时间是 T=1/波特率 (例如,9600 波特时,每位约 104.17 µs)。

2.4 使用 SerialTool 打开两个 COM 端口

  1. 连接适配器:系统将识别两个端口(本例中为 COM5COM6)。
  2. SerialTool 中,打开 两个会话
    • 会话 A → COM5,设置与设备相同的波特率/校验位/停止位(例如 115200/8N1)。
    • 会话 B → COM6,参数与会话 A 相同。
  3. 将两者置于 监视(仅 RX)模式:在 COM5 上您将看到设备 1 发送 的字节,在 COM6 上看到设备 2 发送的字节。
  4. 对于 调试,使用 HEX 视图和时间戳;对于 记录,保存到文件(CSV/pcap/原始格式)以供后续分析。

在此场景中,您充当一个 被动物理中间人:您在电气层面上监控/嗅探数据,而不会 改变信号。

2.5 本示例中排除的控制引脚

示意图侧重于 TX/RX 数据,不监控控制引脚(例如 RTS/CTSDTR/DSRDCDRI)。 对于许多应用来说,它们是不必要的;但是,如果设备使用硬件流控制,您可能需要使用专用探头“分接”这些线路。

延伸阅读: RS-232 (维基百科), RS-232 – 信号, 硬件流控制, UART.

2.6 稳定监视器/嗅探器的实用技巧

  • 使用短电缆和稳固的共地;避免地环路。
  • 大多数 UART 驱动器容忍一个 TX 线路上有两个 RX 输入(扇出),但应避免不必要的负载。
  • 始终在两个会话中对齐端口参数(波特率、数据位、校验位、停止位)。
  • 对于 RS-485 或差分总线,您需要特定的适配器和不同的分接规则。

使用此技术,您可以可靠地 监控嗅探调试记录 两个设备之间的串行通信,使用常用工具:两个 USB 转串口适配器 + SerialTool。

第 3 章 – 嗅探/监控“主 PC”与“目标设备”之间的串行链路

使用第二台 PC 上的两个 USB 转串口适配器嗅探主 PC 和目标设备之间的通信

硬件设备与 PC 通过串行通信

主 PC(右侧)通过串行通信设备(通常是 USB↔串口 转换器: UART/TTL、RS-232RS-485)与 目标设备 通信。嗅探 PC(左侧) 打开两个端口(COM5COM6),并使用两个 USB 转串口适配器, 被动监听 线路:在 COM5 上将 RX 连接到 设备的 TX, 在 COM6 上将 RX 连接到 PC 的 TX。地线(GND)是共用的。

3.1 目的和概念

我们希望 监控嗅探 在主 PC 上的软件与目标设备之间传输的字节, 而不干扰通信。这是一个典型的被动物理中间人: 两个仅连接 RX 的 USB 转串口适配器分别“读取”每个方向。 这对于 调试、协议分析以及作为审计或逆向工程的 记录器 非常有用。

3.2 连接(逐步)

  1. COM5 (嗅探 PC) → 将适配器的 RX 连接到 设备的 TX(监听目标发送的内容)。
  2. COM6 (嗅探 PC) → 将适配器的 RX 连接到 PC 的 TX(监听主 PC 的命令)。
  3. 共地 于两个适配器和两个设备之间(共享参考点)。
  4. 不要连接嗅探 PC 适配器的 TX:我们保持只听模式(高阻抗),不干扰线路。

SerialTool 中打开两个会话:COM5COM6。在两者中,设置 与主设备/设备使用的 波特率和格式 相同(例如 115200-8N1)。如果您不知道波特率, 尝试常见值或使用示波器/逻辑分析仪测量位持续时间。

3.3 相同协议,不同电平:UART/TTL、RS-232、RS-485

异步串行协议(起始位、7/8 个数据位 LSB 优先发送、可选校验位、1+ 停止位)是相同的。 只有比特传输的物理电平发生变化:

  • UART/TTL (3.3 V/5 V)单端信号,“1”为高电平 / “0”为低电平。
  • RS-232:反转且为 ± 电压电平(通常为 ±3…±12 V),仍然是单端。
  • RS-485:在 A/B 对上为差分,通常是半双工多节点;建议使用公共参考地。

因此请使用 正确的适配器: USB↔TTL 用于 UART,USB↔RS-232 用于 RS-232,USB↔RS-485 用于 RS-485。帧保持不变,但电气电平和拓扑(差分/终端)不同。

3.4 应用领域(CNC、工业等)

此设置常见于 CNC工业机械、PLC/HMI、机器人、 秤、POS、传感器、仪器、楼宇自动化以及任何 PC/PLC 通过串行控制设备的系统。 此处描述的嗅探方法让您能够 监控/嗅探/调试/记录 流量, 以进行功能分析、故障诊断、命令跟踪和验证。

3.5 基于串行的 Modbus

串行端口通常承载 Modbus RTU/ASCII,这是工业中广泛使用的主/从(现为客户端/服务器)协议。 主站发送请求(读/写线圈寄存器),设备回复。 SerialTool 包含一个 Modbus 客户端 用于快速查询寄存器(诊断和测试), 以及用于查看原始帧(地址、功能、数据、CRC)的监视器/十六进制查看器。

3.6 固件更新和参数化

嵌入式 领域,串行广泛用于 固件更新 或向目标 传递参数。 示例:自定义板卡上的引导程序、Arduino 等生态系统、各种微控制器。这里的开发者可能有两个需求:

  1. 调试 与目标通信的应用程序(检查命令、时序、错误)。
  2. 逆向工程 现有协议(有一个“封闭的”主软件与板卡通信; 我通过嗅探来理解其消息,然后用我自己的软件复现它们)。

3.7 实用说明和工具

  • 此设置通常需要 两台 PC(主 PC 和嗅探 PC)和 至少两个 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)。 通过被动双 RX 分接和像 SerialTool 这样的软件,您可以可靠地 监控嗅探调试记录 主 PC 与目标设备之间的通信。

第 4 章 – COM 嗅探器:无需物理接线的监控/嗅探/调试/记录器

SerialTool COM 嗅探器:监控已被软件打开的串行端口,无需物理连接

COM 嗅探器 - 串行端口监视器

使用 SerialTool – COM 嗅探器,您不需要第 3 章中的连接: 主 PC(第三方专有软件)与目标设备之间的流量由系统 直接 捕获,透明且非侵入式。

4.1 COM 嗅探器的功能

COM 嗅探器是一个 串行端口监视器,它拦截已被其他程序打开的 COM 端口上的通信, 允许您 监控嗅探调试记录 整个流量(TX/RX),无需触碰电缆、 无需额外硬件,并且 不会影响 主 PC 或目标设备的操作。

4.2 工作原理:内核驱动程序

其核心是一个用于 Windows 的 内核驱动程序,它将自己插入到串行端口堆栈中并 选择性地观察:

  • 读/写的数据缓冲区(TX ↔ RX),具有清晰的方向分离;
  • IOCTL (输入/输出控制): 打开/关闭、波特率/校验位/停止位设置、超时、控制信号(RTS/DTR/CTS/DSR/DCD/RI)等;
  • 事件/信号和端口状态(线路状态、调制解调器状态)。

该驱动程序功能强大,但界面简单:您可以 按类型过滤(仅数据、仅配置 IOCTL、仅信号等)以专注于重要内容。 它专为长期捕获(数小时/数天)而设计,稳定地监控您的应用程序或第三方程序。 注意:它仅适用于 Windows,因为它依赖于 内核模式 驱动程序。

4.3 为什么它(在许多情况下)比物理接线更好

  • 无需两台 PC + 两个 USB 转串口的“实验室”:节省时间并减少故障点。
  • 零电气影响:您不会给线路增加负载,没有地环路风险。
  • 查看应用程序与驱动程序之间的一切:数据、IOCTL、信号,甚至可以同时查看多个端口。

4.4 记录和导出以进行协议分析

您可以直接保存到文件作为 记录器(文本/CSV)或导出到 pcap/pcapng 以在 Wireshark 中进行分析。 这对于像 Modbus RTU/ASCII 这样的工业协议非常有用: 借助帧和时间戳,您可以验证时序、CRC、功能序列等。

4.5 您可以观察的内容

  • 单独的 TX/RX 数据,以ASCIIHEX 格式显示,带时间戳;
  • 软件设置的端口参数(波特率、7/8 位、校验位、停止位、超时);
  • 控制信号IOCTL(RTS、DTR、CTS、DSR、DCD、RI)以及状态变化;
  • 打开/关闭 事件和错误(溢出、帧错误、校验错误)。

4.6 使用时机

  • 调试 您的串行应用程序,无需更改代码/接线;
  • 对第三方应用程序进行长期监控以进行审计/诊断;
  • 逆向工程 专有协议(在法律允许的情况下)以用您自己的软件复现功能;
  • 验证标准协议(例如 Modbus)和 握手信号

4.7 说明和延伸阅读

COM 嗅探器在系统级别工作,遵循异步串行协议的逻辑(起始位/数据位/校验位/停止位)。 如果应用程序使用不同的物理电平(UART/TTL、RS-232、RS-485),捕获结果仍然相同,因为它发生在 电气电平之上,在 Windows COM 端口堆栈内部。

有用链接: 串行端口 · UART · RS-232 · RS-485 · IOCTL · Windows 内核驱动程序 · Wireshark · Modbus.

简而言之:SerialTool 的 COM 嗅探器 是一个“纯软件”解决方案,用于 监控嗅探调试记录 被其他程序打开的串行端口, 具有 可靠 的内核驱动程序、定向过滤器和用于高级分析的导出功能。