串口终端:RS-232 / RS-485 和 VT-100 的通信、记录和调试
最后更新于 作者 Oliver ReedSerialTool 是一款专业的跨平台软件(Windows, macOS 和 Linux),专为 连接到电子、工业和嵌入式设备的串口进行测试、调试和高级分析而设计。 它是目前最完整的串口通信解决方案,提供低级(面向字节) 和高级终端 (VT-100) 模式。
如果您需要通过串口连接设备,SerialTool 是不可或缺的工具: 它允许您专业地监控、记录、调试和分析 通信。
SerialTool 支持 VT-100 仿真, 这在专业和基础设施设备中广泛使用。 在这些场景中,串口终端通常是唯一可靠的“服务”访问通道,即使在网络瘫痪时仍然可用。
使用 VT-100 的设备典型示例:
在嵌入式电子世界中,使用终端进行固件调试是基础。 如果您使用诸如 Arduino, ESP32, STM32 或 Raspberry Pi 等平台, SerialTool 是监控输出和系统日志的理想工具。
普通的串口软件只是通过 TX(发送)、RX(接收)和地线 (GND) 传输和接收原始字节。在这种情况下,数据流不被解释为文本接口: 它只是“按原样”显示。
另一方面,VT-100 终端还必须解释 ANSI 转义序列 (ESC) 以正确管理光标、颜色、清屏和格式。在这里,打印字节是不够的:需要仿真。
两种终端类型之间的一个显著实际差异是,例如,在屏幕上创建新行。
在 VT-100 终端中,按照惯例,当收到字节序列 0x0D 0x0A 时插入新行,这告诉终端是时候向显示添加新行了。
在专有串口协议的情况下,不一定遵守此标准。
在工业 Modbus 通信协议中,由于数据是原始的且不用于 ASCII 显示,因此数据包不以特定序列结束。
由于这个原因,SerialTool 允许您使用下面截图中显示的可选“Packet Mode”(数据包模式)选项,在数据包到达时在经典终端中设置新行。
选择数据包模式下的经典终端模式
通过这样做,在从特定串口接收字节序列时,终端将在数据包结束时生成新行。
要确定数据包何时结束,重要的是在正在使用的串口屏幕中设置“Last Byte Timeout”(最后一个字节超时)(通常为 50ms)。
注意: 如果您打算使用下面提到的 VT-100 终端模式,则传入流量没有特定超时,并且取决于您连接的主设备。
出于这个原因,为了保持流畅的可视化,将“Last Byte Timeout”设置为 1ms 非常重要。在这种情况下,每个传入的字节流都会立即发送给 VT-100 终端进行解释。
如果超时保持在 50ms,虽然不会发生什么,但存在看到某些动画变慢或与开发人员预期的效果不符的风险。
一个例子是使用 ANSI 字符模拟进度条,如果超时过高,它将在屏幕上错误呈现。
这些示例是需要一些经验的小调整,但 SerialTool 专为使每种类型的串口操作成为可能而设计。因此,您有机会深入分析单个字节并评估串口运行的各种时序。
使用 SerialTool,可以使用经典终端在低级别监控、记录和调试串口流量, 显示传输中的实际字节。可视化可以是 ASCII、十六进制或组合 (ASCII + HEX)。
当需要以下操作时,此模式至关重要:
典型案例是 Modbus, 其中主站和从站设备通常通过 RS-485 以严格的帧进行通信。 在这种情况下,“纯”终端(仅 VT-100)并不理想:您需要查看和验证确切的字节,包括 CRC 和响应时间。
01 03 00 00 00 02 C4 0B
在经典模式下,SerialTool 使帧分析、地址/功能验证和逐字节分析变得即时。
当设备提供用户友好的交互(菜单、Shell、表格、高亮显示)时, 通常使用 VT-100 终端:数据通常是可读的 ASCII,并由 ESC 序列丰富。 这些序列通常以 ESC 字符 (0x1B) 开头并命令“图形”动作。
由 ESC 序列控制的典型动作:
\x1B[2J:清除整个屏幕。\x1B[H:将光标移动到左上角(Home)。\x1B[31m:将文本颜色更改为红色。\x1B[5;10H:将光标移动到特定坐标(第 5 行,第 10 列)。在此模式下,SerialTool 不仅显示字节:它还解释序列并按照 VT-100/ANSI 标准的预期向用户显示干净、 彩色和可导航的界面。
为了理解在同一软件中拥有这两种模式的实用性,请考虑两个相反的场景:
在 RS-485 网络中,主站查询从站。通信由二进制数据包(帧)组成,如:
01 03 00 00 00 02 C4 0B。
在这里,需要十六进制可视化、CRC 验证和逐字节分析。
解决方案: SerialTool 经典终端(面向字节)。
连接到路由器或嵌入式系统时,设备通过 ANSI/ESC 序列发送 ASCII 表格、菜单和颜色。
“基本”串口软件会显示充满 ^[ 的混乱字符串。
正确的 VT-100 终端会解释代码并按设计显示界面。
解决方案: SerialTool VT-100 模式(完全 ANSI 仿真)。
旧版软件如 PuTTY 或 Tera Term 几乎专为终端仿真而创建,因此不适合 Modbus 等协议的面向字节调试。 SerialTool 结合了两者的优点。
为了更好地理解根据所选 SerialTool 配置如何以不同方式显示相同数据,让我们通过调试端口分析 ESP32-S3 模块的启动。
在各种屏幕中,重复相同的标准启动序列(对于许多主设备来说很常见),这是使用 VT-100 终端进行可视化的理想选择。
为了比较,使用 SerialTool 的经典终端以及十六进制终端显示相同的序列。
首先,如下面的图像所示,从主菜单中选择终端模式。
选择终端可视化模式
从终端设置中选择 VT-100 终端模式。
选择 VT-100 终端模式
选择 VT-100 串口终端模式后,与 SerialTool 经典终端相关的选项将被禁用。
重置 ESP32 模块,我们观察到来自模块的传入引导加载程序流量。
VT-100 终端模式下的 ESP32-S3 启动
此时,让我们尝试通过 SerialTool 的经典终端进行可视化,执行相同的 ESP32 模块启动过程。
首先,选择经典终端模式并选择 ASCII 格式的字节表示。
与 SerialTool 经典终端相关的选项将重新出现。
选择经典 SerialTool 终端模式 - ASCII
重置 ESP32 模块,我们观察到来自模块的传入引导加载程序流量。
经典 SerialTool 终端模式下的 ESP32-S3 启动 - ASCII
让我们通过将数据显示模式设置为十六进制来使用十六进制流量可视化进行相同的实验。
选择经典 SerialTool 终端模式 - 十六进制
重置 ESP32 模块,我们观察到来自模块的传入引导加载程序流量。
经典 SerialTool 终端模式下的 ESP32-S3 启动 - 十六进制
作为最终测试,让我们使用 SerialTool 的另一种类型的串口终端,即纯十六进制终端。
在此表示中,串口流量在同一屏幕上的两个不同部分中同时以十六进制和 ASCII 显示。
当您需要同时清楚地看到字节(入站和出站)流量时,这种类型的可视化非常合适。
使用十六进制终端的选择通常面向嵌入式环境中的开发人员。
首先,从主屏幕选择十六进制终端。
选择十六进制终端模式
重置 ESP32 模块,我们观察到通过十六进制终端来自模块的传入引导加载程序流量。
HEX 终端中的 ESP32-S3 启动