浏览器串口调试工具(基于 Web Serial API)。
Web Serial API 目前仅桌面端 Chromium 内核浏览器支持:
| 浏览器 | 最低版本 | 备注 |
|---|---|---|
| Chrome (桌面) | 89+ | ✅ 推荐 |
| Edge (桌面) | 89+ | ✅ 推荐 |
| Opera (桌面) | 75+ | ✅ |
| Brave / Vivaldi / 其他 Chromium 桌面版 | 89+ | ✅ 理论上兼容 |
不支持:
- ❌ Android Chrome(Google 暂未在移动端实现)
- ❌ iOS 所有浏览器(iOS 上 Chrome/Edge 等均强制使用 WebKit)
- ❌ Firefox(Mozilla 明确表示不会实现)
- ❌ Safari(WebKit 未实现)
使用前请确认在桌面端 Chrome/Edge 中打开本工具。
desktop/ 是基于 Tauri 2 的桌面客户端,功能与网页版一致,串口由原生层打开(不依赖浏览器的 Web Serial),选口时列出设备名、厂商、口名(如 cu.usbserial-0001)、VID:PID 与序列号。需要 Node.js 与 Rust 工具链:
cd desktop
npm install
npm run dev # 开发运行
npm run build # 生成 .app 与 .dmg(desktop/src-tauri/target/release/bundle/)- 起本地静态服务后在 Chrome / Edge 打开(见下方「本地运行」)
- 左侧栏切换视图:串口调试、固件打包、功耗分析
- 串口调试:选择串口与参数后打开,顶栏选择日志解析协议;中间为收发日志,底部发送 HEX / TEXT
- 工具以面板形式停靠在右栏或底栏,最右侧停靠栏负责开合;底部状态栏显示连接时长、收发字节和运行中的后台任务
快捷键:Ctrl/Cmd + K 打开命令面板。
- 串口连接:参数可配、本地记忆;插拔自动重连
- 日志:HEX / TEXT / ANSI 彩色显示格式可组合,切换后历史日志按新格式重绘;自动滚动;清空 / 复制 / 导出
- 发送:HEX 或 TEXT、追加 CRLF、循环发送、发送历史与字节计数
- 快捷发送:分组管理、导入导出
- 配置:导入导出,便于迁移
- 主题:跟随系统 / 浅色 / 深色
- 版本更新提示:网页检测到新版本时左下角版本号变为刷新入口;macOS / Windows 客户端在配置菜单或原生帮助菜单检查应用更新,下载签名包后安装并重启,任务运行中暂缓安装
- 协议解析:顶栏选择 SEK、188 协议、188 协议(超声)、W-MBUS、工装通信协议、hostProto 模组
- 日志「解析」格式逐帧解析收发帧、底部结构化解析面板
- HEX 字节悬停字段提示
- AES-ECB 加解密(ASCII / HEX 密钥)
- 各协议的下行预设指令;188 协议支持标准校时(A015)与可选 FE FE FE 前导码
- 随机读写测试(SEK):真随机读/写/查询交错,seed 可复现;写后可恢复原值;结束输出失败 / 不支持 / 跳过报告(不含开猫、复位及表号/IP/时间等敏感项)
- 批量配置写入(SEK):从预设中组出写入列表,按超时与间隔依次写入
- 固件升级:PCP 协议升级流程;可直接导入原始包 / 压缩包 / 差分包升级;导入原始固件时自动升级——先查设备版本,本机固件库里有设备当前那份原固件就自动生成差分包,没有就自动生成压缩包,升级包只在内存里生成、不输出文件;差分包被设备拒收时自动改用压缩包重来;导入过的原始固件自动存进本机固件库;可关闭读取固件信息并手填当前版本号
- 固件打包:生成原始包、压缩包与双向差分包,可打成一个 ZIP 下载
- 功耗分析:连接 BLU 电流计,实时波形(min/max 包络、均值带、±1σ)、窗口/选区统计、Y 轴锁定、全屏
- STS 模拟:经 hostProto 模组模拟表端或 CIU;单路、双路各自独立配置,双路可并排同时查看,支持 CIU + 表端或同时模拟两路表端
在工具停靠栏打开「STS 模拟」。单路和双路是不同的串口:单路模式只显示「单路」一套面板,双路模式显示 A路、B路两套面板,三套面板各自独立保存角色与配置,互不共用。双路模式下分别连接 A路/B路的 hostProto 模组(115200 8N1),两路各自设置角色(表端 / CIU)并分别启动,支持 CIU + 表端或两路表端;切换主发口或串口模式不会改变模拟器的收发串口。打开面板时顶栏协议自动切到 hostProto,关闭后恢复打开前的协议;面板打开期间手动换过协议则不恢复。不要让其他工具同时操作同一个串口,运行期间保持页面在前台。
双路面板容器宽度不小于 720px 时 A路在左、B路在右并排,窄栏时上下堆叠,并在顶部显示常驻的双路摘要条,点击某一路会展开并滚动到对应面板。每路头部一行放显示名(「A路」「B路」,串口标签改成自定义名时附上,如「A路 · COM3」)、角色、启停与状态,点击名称可折叠该路(折叠状态按会话记住)。启动成功后配置区自动折叠,停止后不会自动展开。
刷新保留各会话的启动意图,待对应串口重连后自动重新启动;模组暂时无应答时以 5、10、20、30 秒退避重试。手动停止或取消等待/重试后不再自动启动,配置或认证错误需手动处理。重新启动使用配置初值,不恢复运行值、充值记录、阀门保持期或在飞事务。PAK 不保存,需要认证时重新输入并手动启动。
CIU 面板的「模拟令牌」可生成测试用令牌,用于在没有真实 STS 令牌时检查模组链路与表端处理是否正确。模拟令牌是明文测试格式,不是 STS 令牌,只对本工具的表端模拟器有意义:20 位 = 77 + 类型 2 位 + 序号 4 位 + 数据 10 位 + 校验 2 位(前 18 位按 1、3 交替加权求和 mod 97)。表端模拟器识别后按类型给出 STS 结果块并执行对应动作:01 充值(数据 = 充值量。体积模式按 STS 令牌单位 0.1 m³ = 100 L 计,与真实令牌的最小粒度一致,表端换算成协议的 dL(×1000)落账;金额模式按 10^-d 货币单位,不换算;结果码 0x01 + MODE1)、02 清余额、03 设预付费、04 设后付费、05 开阀、06 关阀、07 清除窃水、08 设置参数、10 / 11 换钥第一 / 第二步(两枚都回换钥结果:第一步 0x02、第二步 0x03)、20 表计测试(数据 = 位图,MODE256)、90 指定结果码(数据 = 1/2/3/6/255,不做任何动作)。同一令牌在去重深度(5 笔)内再输回放上次结果,超出后再输得 USED。标识或校验不符的令牌按普通令牌处理,结果由表端配置的「普通令牌结果」决定。表端的「余额上限」(0 = 只受 i32 限制)对充值令牌和「已执行(充值)」的普通令牌都生效:充值后超出上限返回结果码 0x81 + MODE3 OVER,令牌不执行、不记为已用,余额降下来后重输会重新判定。
CIU 的「固件信息」按需单读寄存器 0x26,显示固件版本号与 8 位大写十六进制校验码,不加入连接握手或状态刷新。该寄存器为固定 20 字节复合结构(0xF0 + 长度 0x14):16 字节可见 ASCII 版本号,不足尾随补空格,加 4 字节大端 u32 校验码;校验码仅供生产和售后比对,不判定固件有效性。模拟表端返回 SIM-1.0 与 12345678;协议版本仍为 2。块读 0x20–0x28 的全部 TLV 共 61 字节,超过单帧 58 字节上限,CIU 会按最后收到的寄存器继续读取;固件信息建议单独查询。
告警区默认展示已选告警的码和名称,展开「选择告警」可修改预置项或填写其他码;运行告警修改立即生效。日志最新在前,每路最多保留 500 条。
# 无需安装依赖
python3 -m http.server 8000open index.html 走 file:// 只适合快速看布局,部分能力受限。
版本号见 js/version.js 的 window.APP_VERSION。
同一套页面按平台画像裁剪功能:web 与 Windows / macOS 客户端功能一致(可多开);Android / iOS 只保留 SEK 协议设置与下发、固件升级(自动差分 / 压缩,或直接导入升级包,不输出中间产物),单路,经蓝牙 BLE 透传连接(Android 的经典蓝牙与 USB 串口由原生客户端接入,尚未提供)。在桌面浏览器里给地址加 ?platform=android 或 ?platform=ios 可预览移动端画像。
客户端安装包与应用更新由 GitHub Releases 分发,正式版和预览版分别检查 main / dev 通道。Windows 仅提供 NSIS EXE 安装器,允许选择安装目录,首次默认 D:\project files\Serial Debug,后续升级保留已有目录;没有 D 盘时回退标准目录。Windows 串口列表同时显示系统设备名称与 COM 口号,窗口顶部菜单栏隐藏,快捷键仍可使用。签名配置、发布步骤和验证限制见 客户端分发说明。
协议与模拟器回归,仅用合成数据,无需串口:
node tests/cjt188-protocol.cjs
node tests/sts-ciu-protocol.cjs
node tests/hostproto-protocol.cjs
node tests/sts-sim.cjs
node tests/sts-sim-panel.cjsUI 与串口相关改动需在浏览器中连接真实或虚拟串口手动验证。
欢迎通过 Issues 反馈问题与建议,也欢迎 PR。