SerialPortToolFX 是一款功能强大的跨平台开源串口调试工具,基于 JavaFX 开发。专为嵌入式开发、硬件调试和串口通信测试而设计,提供直观易用的图形界面和丰富的调试功能。支持中文、英文、日文三种语言界面,满足不同地区开发者的使用需求。
- 智能串口检测:实时自动检测并显示系统中所有可用的串口设备,支持热插拔识别
- 双格式数据处理:完整支持 ASCII 文本和 HEX 十六进制格式的数据收发,满足不同应用场景
- 精确数据统计:实时统计收发数据的字节数,便于性能分析和调试验证(点击数字即可快速清零)
- 可靠数据记录:支持将串口通信数据完整保存到本地文件,便于后续分析和问题追踪
- 高效多窗口操作:支持同时打开多个独立的串口调试窗口,可并行调试多个设备
- 智能设备模拟:通过 JSON 配置文件实现设备模拟功能,可根据接收数据自动发送预设回复,极大提升调试效率
- 完善国际化支持:内置中文、英文、日文界面,根据系统语言自动适配
- 性能优化设计:针对长时间大数据量测试进行优化,有效避免界面卡顿问题
设备模拟功能允许程序模拟成一个串口设备,当接收到特定数据时自动发送预设的回复。这对于测试上位机软件或模拟硬件设备响应非常有用。
JSON配置文件包含三个核心部分:
- 基础配置:定义数据编码格式和消息边界识别方式
- 模拟规则:定义接收数据与回复数据的对应关系
- 作用:指定配置文件中数据的编码格式
- 可选值:
"HEX"或"ASCII"(不区分大小写) - 说明:
"HEX":配置中的数据按十六进制格式解析(如:"01 02 03")"ASCII":配置中的数据按ASCII文本格式解析(如:"Hello")
方式一:packSize(固定长度)
- 作用:根据数据包固定长度判断消息完整性
- 格式:数字字符串(如:
"8"表示8字节长度) - 适用场景:协议中数据包长度固定的情况
方式二:delimiter(分隔符)
- 作用:根据特定分隔符判断消息完整性
- 格式:
- ASCII模式:直接输入分隔符(如:
"\r\n"表示回车换行) - HEX模式:十六进制格式(如:
"0D 0A"表示回车换行)
- ASCII模式:直接输入分隔符(如:
- 适用场景:协议中使用特定结束符的情况
重要规则:
packSize和delimiter必须指定其中一个,不能都为空- 如果同时指定,优先使用
packSize(除非packSize格式错误)
在基础配置之外,添加 "接收数据": "回复数据" 的键值对来定义模拟规则:
{
"encode": "HEX",
"packSize": "4",
"delimiter": "",
"01 02 03 04": "05 06 07 08",
"AA BB CC DD": "11 22 33 44"
}- 数据格式一致性:所有数据必须与
encode参数指定的格式一致 - 分隔符冲突:使用
delimiter时,避免在数据内容中包含相同的分隔符 - 字符串类型:JSON中所有键值都必须是字符串格式
- 单层结构:不支持嵌套的JSON结构
场景:模拟接收5字节ASCII命令并回复
{
"encode": "ASCII",
"packSize": "5",
"delimiter": "",
"HELLO": "WORLD",
"START": "OK...",
"RESET": "DONE."
}说明:当接收到5字节的"HELLO"时,自动回复"WORLD"
场景:模拟AT命令响应
{
"encode": "ASCII",
"packSize": "",
"delimiter": "\r\n",
"AT\r\n": "OK\r\n",
"AT+VERSION\r\n": "V1.0.0\r\n",
"AT+RESET\r\n": "RESETTING...\r\n"
}说明:接收以\r\n结尾的AT命令,返回对应响应
场景:模拟Modbus RTU设备
{
"encode": "HEX",
"packSize": "8",
"delimiter": "",
"01 03 00 00 00 01 84 0A": "01 03 02 00 64 B8 FA",
"01 06 00 00 00 64 C9 DB": "01 06 00 00 00 64 C9 DB"
}说明:模拟Modbus读取和写入操作的响应
场景:自定义协议,以特定字节序列结束
{
"encode": "HEX",
"packSize": "",
"delimiter": "0D 0A",
"AA BB 01 0D 0A": "AA BB 81 0D 0A",
"AA BB 02 0D 0A": "AA BB 82 0D 0A"
}说明:接收以0D 0A(回车换行)结尾的十六进制数据包
- 创建配置文件:根据需要模拟的设备协议创建JSON文件
- 加载配置:在软件中点击"设备模拟"按钮,选择配置文件
- 验证加载:观察指示灯状态(🟢成功 / 🔴失败)
- 开始测试:配置加载成功后,程序将根据配置自动回复
- Java 22+
- Gradle 8.0+
- 支持的操作系统:Windows 10+, macOS 10.14+, Linux (Ubuntu 18.04+)
# 清理构建目录
gradle clean
# 构建应用程序
gradle build
# 创建可分发的应用程序镜像
gradle jpackageImage
# 创建安装程序(可选)
gradle jpackage- 🌐 语言切换:点击地球图标切换中文/英文/日文界面
- 🎨 主题切换:点击主题图标切换亮色/暗色主题
- — 最小化:最小化窗口
- X 关闭:关闭应用程序
- 串口号:选择要连接的串口设备
- 波特率:设置通信速率(9600, 115200等)
- 数据位:设置数据位数(通常为8位)
- 停止位:设置停止位(1, 1.5, 2)
- 校验:设置校验方式(无、奇校验、偶校验等)
- 流控:设置流量控制方式
- 打开串口/关闭串口:连接或断开选定的串口设备
- 🟢 绿灯:串口已连接
- 🔴 红灯:串口未连接
- 清空显示:清除接收区域显示的所有数据
- 发送:将发送区的数据通过串口发送出去
- 清空输入:清除发送区域的用户输入内容
- 新窗口:创建一个新的串口调试窗口(复制当前配置)
- 设备模拟:加载JSON配置文件,模拟串口设备自动回复
- 🟢 绿灯:配置加载成功
- 🔴 红灯:配置加载失败
- 接收区域:显示从串口接收到的数据
- 发送区域:输入要发送的数据
- 实时显示:勾选后接收数据时实时在显示区显示,取消勾选则只计数不显示。为防止长时间大数据量测试时软件卡死(市面上大多数串口助手都存在此问题),建议在高频数据传输时关闭此选项
- HEX显示:将接收到的数据以十六进制格式显示,便于查看二进制数据内容
- HEX发送:将输入的数据按十六进制格式解析后发送,注意必须输入正确的十六进制格式(如:01 02 03 或 010203)
- 循环发送:周期性自动发送数据
- 间隔:设置发送间隔时间(毫秒)
- 保存接收:将接收到的数据保存到本地文件
- 保存发送:将发送出去的数据保存到本地文件
- 发送计数:显示已发送的字节数(点击数字可清零)
- 接收计数:显示已接收的字节数(点击数字可清零)
- 配置串口参数:选择串口号、波特率等参数
- 打开串口:点击"打开串口"按钮连接设备
- 发送数据:在发送区输入数据,点击"发送"按钮
- 查看接收:在接收区查看设备返回的数据
- 关闭串口:使用完毕后点击"关闭串口"断开连接
通过加载JSON配置文件,程序可以模拟各种串口设备的行为。当接收到配置中定义的特定数据时,会自动发送对应的回复数据。这个功能特别适用于:
- 上位机软件测试:无需真实硬件即可测试软件功能
- 协议验证:验证通信协议的正确性
- 自动化测试:构建自动化测试环境
- 设备仿真:模拟各种设备响应行为
点击"新窗口"可以创建多个独立的串口调试窗口,每个窗口可以连接不同的串口设备,提高调试效率。
勾选"保存接收"或"保存发送"可以将通信数据自动保存到本地文件,便于后续分析和记录。
- 克隆项目:
git clone https://github.com/yiaobang/SerialPortToolFX.git - 进入项目目录:
cd SerialPortToolFX - 运行应用:
gradle run

