BYSerial 是一款基于 C# WPF (.NET Framework 4.8) 开发的 Windows 单文件串口调试工具,集成了通用串口调试与多种工业协议调试功能,适用于嵌入式开发、工业自动化联调、设备维护等场景。由 LvYiWuHen 开发维护,遵循 MIT 许可证开源分发。
项目地址:https://gitee.com/LvYiWuHen/byserial
当前版本:V3.0.2
运行平台:Windows 10/11(自带 .NET Framework 4.8),Windows 7 需手动安装运行时
部署方式:单文件免安装,双击 BYSerial.exe 即可运行
bycfg/fastcmds.cfg,下次启动自动加载YYYYMMDD_HHMMSS_端口号.log 格式自动生成文件名| 协议类别 | 支持协议/设备 | 主要功能 |
|---|---|---|
| Modbus | Modbus RTU / ASCII / TCP | 读/写线圈、离散量、保持寄存器、输入寄存器;支持功能码 0x01-0x10;支持从站 ID 扫描 |
| 西门子 PLC | S7-200/300/400/1200/1500 (S7Comm) | DB 块读写、位/字节/字/双字/实数类型、变量地址解析 |
| 三菱 PLC | FX/Q/L/iQ-R 系列 (MC 协议) | 批量读写软元件、位/字设备、支持 3E/4E 帧 |
| 罗克韦尔 PLC | ControlLogix/CompactLogix (CIP/EtherNet/IP) | Tag 读写、数组/结构体支持、路径配置 |
| 欧姆龙 PLC | CJ/CS/NJ 系列 (FINS 协议) | 内存区读写、网络地址路由 |
| MQTT | v3.1.1 / v5.0 | 连接/订阅/发布、QoS 0/1/2、遗嘱/保留消息、SSL/TLS |
| BACnet | BACnet/IP | 设备发现、对象属性读写、Who-Is/I-Am |
| TCP/UDP | 客户端/服务端 | 原始报文收发、自动重连、心跳保活 |
| 文件 | 用途 | 格式 |
|---|---|---|
bycfg/fastcmds.cfg | 快捷命令配置 | JSON |
bycfg/his.cfg | 发送历史记录 | 纯文本(每行一条) |
bycfg/my.cfg | 用户个性化设置(窗口位置、主题、默认串口参数等) | INI/JSON |
| 库 | 许可证 | 用途 |
|---|---|---|
| Newtonsoft.Json | MIT | JSON 序列化 |
| Costura.Fody | MIT | 单文件嵌入依赖 |
| System.IO.Ports | MIT | 串口通讯 |
| NModbus4 | MIT | Modbus 协议栈 |
| S7.Net.Plus | MIT | 西门子 S7 通讯 |
| MqttNet | MIT | MQTT 客户端 |
| HslCommunication | LGPLv3 | 多厂商 PLC 协议(三菱/欧姆龙/罗克韦尔等) |
注意:HslCommunication 采用 LGPLv3,单文件打包时已满足动态链接要求,分发时需保留其许可证声明。
| 场景 | 优势 |
|---|---|
| 嵌入式串口调试 | 单文件免安装、启动快、编码自动识别、历史命令保存 |
| Modbus 设备联调 | 可视化寄存器表、功能码全覆盖、从站扫描、报文原始查看 |
| 多品牌 PLC 联调 | 一站式支持西门子/三菱/罗克韦尔/欧姆龙,无需切换工具 |
| MQTT/BACnet 物联网调试 | 内置 Broker 连接、主题树、QoS 测试、证书配置 |
| 长期数据采集 | 自动分卷日志、曲线实时监控、断电自动恢复 |
| 现场运维 | 便携单文件、U 盘即插即用、配置自带、无管理员权限需求 |
双击 BYSerial.exe 即可运行,无需安装。首次运行自动生成 bycfg/ 配置目录。
界面语言默认中文,顶部菜单:文件 设置 工具 帮助
COM口 → 点击刷新图标 → 选择目标 COM 口(如 COM3)9600(默认,按设备手册修改)81None打开串口 按钮 → 状态灯变绿、按钮变为 关闭串口HEX 模式01 03 00 00 00 01(标准 Modbus 读保持寄存器示例)发送 → 接收区显示返回报文成功标志:接收区出现绿色 RX 数据行,含时间戳、HEX 内容
| 模式 | 适用场景 | 发送输入示例 | 接收显示示例 |
|---|---|---|---|
| HEX | Modbus RTU、二进制协议 | 01 03 00 00 00 01 | 01 03 02 00 64 B9 8E |
| ASCII | 文本协议、AT 指令 | AT\r\n | OK\r\n |
| UTF-8 文本 | 中文/多语言文本 | 你好设备 | 设备就绪 |
发送区/接收区独立切换,互不影响。HEX 模式自动过滤空格/换行,仅保留 0-9 A-F
| 功能 | 操作 | 说明 |
|---|---|---|
| 暂停/继续 | 点击 暂停 按钮 | 冻结显示,后台仍收数 |
| 自动滚动 | 勾选 自动滚动 | 新数据自动滚到底部 |
| 显示模式 | 下拉:按行/按时间/按方向 | 分栏对比 TX/RX |
| 关键字高亮 | 右键 高亮设置 → 输入关键字/正则 | 红色标记匹配行 |
| 清空 | 点击 清空 | 仅清界面,不影响日志文件 |
| 导出当前视图 | 右键 导出 → 当前视图.txt | 含时间戳/方向/数据 |
| 功能 | 操作 | 说明 |
|---|---|---|
| 多行编辑 | 发送区右键 多行模式 | 支持换行、批量粘贴 |
| 发送历史 | 上/下方向键 / 下拉框 | 最近 50 条自动记忆 |
| 追加换行 | 勾选 追加 \r\n | AT 指令必选 |
| 发送间隔 | 设置 发送间隔(ms) | 批量发送时逐条延时 |
快捷命令 → 管理(或 F2)新建 → 填写:
读温度(显示在按钮上)01 03 00 01 00 01(HEX,空格分隔)HEX0(单次发送)确定 → 主界面快捷栏出现 读温度 按钮移动到分组 → 新建分组: 环境传感器管理 窗口 → 导出 → commands_my.json(分享给同事)导入 → 选择 JSON 文件 → 合并/覆盖现有命令快捷命令管理 中设置 循环间隔(ms) = 1000停止 状态、按钮变红工具 → 定时任务 → 新建任务每分钟巡检周期 / 每日固定时间 / 启动时60000 ms保存 → 任务列表显示 运行中、下次触发时间前置条件(Lua 表达式):last_rx:match("01 03 02") ~= nil设置 → 数据记录 → 勾选 自动保存接收数据logs/(相对程序目录)或绝对路径YYYYMMDD_HHMMSS_COM3.log10 MB(超限自动新建 ..._part2.log)HEX文本 / 原始二进制 / ASCII文本logs/
├─ 20260115_083000_COM3.log # HEX文本,每行: [08:30:01.123] RX: 01 03 02 00 64
├─ 20260115_083000_COM3_part2.log # 分卷文件
└─ index.json # 索引:开始/结束时间、行数、字节数
工具 → 日志分析 → 选择多个 .log 文件视图 → 实时曲线(或 F3)→ 独立可停靠窗口添加通道 → 配置:
温度接收解析 / 手动输入 / 脚本推送01 03 02 (.. ..) → 提取第 1 组,类型 INT16/UINT16/FLOAT32,字节序 大端/小端,缩放 系数 0.01 偏移 0,单位 °C确定 → 曲线实时绘制| 操作 | 方法 |
|---|---|
| 缩放 | 滚轮 / 右键拖拽框选 |
| 平移 | 中键拖拽 / Shift+右键 |
| 读数 | 悬停显示十字光标、数值框 |
| 暂停 | 工具栏 暂停 按钮 |
| 截图 | 导出 PNG |
| 导出数据 | 导出 CSV(时间、通道1、通道2...) |
Modbus(或菜单 工控工箱 → Modbus)| 参数 | 设置示例 |
|---|---|
| 模式 | RTU / ASCII / TCP |
| 串口/TCP | 复用主界面串口 / 新建 TCP 连接 192.168.1.50:502 |
| 从站ID | 1(可扫描 1-247) |
| 超时(ms) | 1000 |
| 重试次数 | 3 |
读取寄存器:
读取 标签03 保持寄存器 / 04 输入寄存器 / 01 线圈 / 02 离散量0(十进制)或 0x0000,数量:10读取 → 结果表格显示地址、十六进制、十进制、浮点数、字符串写入寄存器:
写入 标签06 单寄存器 / 10 多寄存器 / 05 单线圈 / 0F 多线圈写入点表管理 → 从 Excel 导入(模板:地址、类型、名称、单位、缩放)批量读取、批量写入、周期轮询(间隔可配)扫描从站 → 设置 ID 范围 1-247 → 并发数 5| 厂商 | 关键参数 | 示例 |
|---|---|---|
| 西门子 S7 | IP、机架、槽号、CPU型号 | 192.168.0.1、Rack=0、Slot=1、S7-1200 |
| 三菱 MC | IP、端口(5007)、帧类型(3E/4E)、网络/站号 | 192.168.0.2、3E帧、网络0、站号255 |
| 罗克韦尔 CIP | IP、槽号、路径 | 192.168.0.3、Slot=0、1,0 |
| 欧姆龙 FINS | IP、端口(9600)、网络/节点/单元 | 192.168.0.4、网络1、节点2、单元0 |
点击 连接 → 状态显示 已连接、CPU 信息(型号/固件/模式)
| 类型 | 语法示例 | 说明 |
|---|---|---|
| 西门子 | DB10.DBW0 DB10.DBD10 M100.0 I0.0 Q0.0 | DB块/位/字/双字 |
| 三菱 | D100 M10 X0 Y0 W0 R0 | 数据寄存器/继电器/输入/输出/链接/文件 |
| 罗克韦尔 | Motor.Speed Recipe.Temp[0] Program:MainProgram.Tag | Tag 名、数组、程序作用域 |
| 欧姆龙 | D100 W100 H100 CIO100 DM100 | 数据区/工作区/保持区/IO/扩展数据 |
MQTT → 配置连接:
mqtt.example.com:1883 / ssl://mqtt.example.com:8883BYSerial_001(留空自动生成)连接 → 状态栏显示 Connected、会话信息factory/line1/temp/# → QoS 0/1/2 → 订阅factory/line1/cmd + Payload(JSON/文本/HEX) → 发布BACnet → 配置:本地设备ID 1001、端口 47808发现设备 → Who-Is 广播 → 列表显示在线设备Analog Input、实例 1、属性 Present Value → 读取TCP → Client 模式 → 目标 IP:Port 192.168.1.100:8080 → 连接Server 模式 → 监听端口 8080 → 开始监听9000 → 目标 IP:Port 192.168.1.200:9000239.0.0.1、TTL 设置工具 → CRC 校验(或 F4)CRC-16 Modbus / CRC-16 CCITT / CRC-32 / CRC-32 MPEG2 / 自定义01 03 00 00 00 01 或 文本 Hello计算 → 显示结果(HEX/十进制/二进制)自定义 → 配置:多项式 0x1021、初始值 0xFFFF、输入反转/输出反转/异或值保存为预设 → 下次直接在下拉框选择BYSerial/
├─ BYSerial.exe
├─ bycfg/
│ ├─ fastcmds.cfg # 快捷命令 (JSON)
│ ├─ his.cfg # 发送历史 (纯文本)
│ └─ my.cfg # 个性化设置 (窗口位置/主题/默认串口参数)
└─ logs/ # 数据日志 (自动创建)
文件 → 导出配置 → 包含 bycfg/ 全部文件 + logs/index.json导入配置 → 选择备份包 → 覆盖/合并| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 串口打不开 | 端口被占用/不存在/无权限 | 1. 设备管理器确认 COM 口 2. 关闭其他占用软件 3. 以管理员运行 |
| 收到乱码 | 波特率/校验/编码不匹配 | 1. 对照设备手册核对参数 2. 尝试常见组合: 9600/8/N/1 3. HEX模式查看原始字节 |
| 发送无响应 | 线序错误/从站ID错/功能码不支持 | 1. 检查接线 TX-RX/GND 2. Modbus面板扫描从站ID 3. 抓包对比标准报文 |
| 曲线不显示 | 解析规则错误/数据源未选中 | 1. 检查正则是否匹配 2. 确认通道"启用"勾选 |
| 配置丢失 | 程序异常退出/杀毒软件拦截 | 1. 手动备份 bycfg/2. 白名单程序目录 |
| TCP连不上 | 防火墙/IP错/端口错 | 1. ping 目标IP2. telnet IP PORT 测试3. netstat -an 确认监听 |
| 快捷键 | 功能 |
|---|---|
F1 | 打开帮助/在线文档 |
F2 | 快捷命令管理 |
F3 | 实时曲线窗口 |
F4 | CRC 校验工具 |
Ctrl+O | 打开串口 |
Ctrl+Shift+O | 关闭串口 |
Enter | 发送数据 |
Ctrl+Enter | 发送并清空发送区 |
Ctrl+S | 保存当前接收日志 |
Ctrl+L | 清空接收区 |
Ctrl+F | 搜索接收区 |
Alt+1~9 | 触发快捷命令 1-9 |
提示:本教程基于 BYSerial V3.0.2 编写,界面细节可能随版本微调。遇到未覆盖场景,请参考程序内 帮助 → 在线文档 或 GitHub Issues: https://gitee.com/LvYiWuHen/byserial/issues