自用串口工具分享
自用串口工具分享粘土一个面向嵌入式调试的串口工具支持多串口同时连接、自定义常用命令、自动高亮匹配行、条件触发任务以及跨端口联动在 A 口检测到指定字符串时向 B 口发送预置命令。命令模板和匹配规则支持正则表达式与参数化并可接入大模型用自然语言生成配置。主界面每个串口一个页签底部选择端口/波特率连接中部为快捷命令按钮栏。深色主题工具栏 按钮切换。✨ 功能特性多串口并行每个串口一个标签页独立连接/收发/显示互不干扰。高亮显示按正则匹配整行着色前景/背景/粗体/斜体规则按顺序生效。条件触发收到匹配行后可用表达式过滤如m1 target_temp再执行动作。跨端口联动A 口匹配 → 向 B 口发送渲染后的命令核心特性。参数化命令模板支持正则捕获组${match.1}、内置变量${timestamp}/${date}/${time}/${port}、用户变量${var_name}以及字符串处理管道|upper |lower |hex |unhex |replace(a,b) |substr(0,4) |trim |pad(8,0)可链式。大模型助手OpenAI 兼容接口智谱 GLM / OpenAI / DeepSeek / 本地 Ollama 等自然语言描述需求 → 生成 YAML 配置 → 预览确认后合并保存。配置持久化所有端口、规则、变量、命令、LLM 设置存于config/config.yaml。快捷命令栏每个端口标签页底部显示指向该端口的常用命令按钮。 快速开始1. 安装依赖⚠️ 本机python指向 Windows Store 桩请使用pylauncher。py-mpipinstall-rrequirements.txt依赖PySide6、pyserial、PyYAML、openai2. 启动py main.py首次启动会加载config/default_config.yaml含示例两个端口、若干高亮/触发规则。界面修改后会自动写入config/config.yaml。3. 配置大模型首次使用 LLM 助手前确认⚙ 配置 → 大模型配置的连接参数。 使用说明设备管理页签每个设备对应主窗口中的一个页签工具栏左侧的➕ 新增设备可添加。页签支持完整的增删改与排序所有改动自动写入config/config.yaml。新增设备点工具栏➕ 新增设备会生成一个不重名的设备新设备、新设备2…默认参数为第一个可用 COM 口、115200 / 8 / N / 1。新建后该页签自动被选中可直接在页签顶部的下拉框里改端口 / 波特率点连接点波特率右侧的箭头展开数据位 / 校验 / 停止位默认折叠修改后 tooltip 会显示当前帧格式预览如8N1。下拉框中修改的连接参数会立即保存若设备已连接则保持当前连接新参数在下次连接时生效。复制设备右键设备页签 →复制设备→ 输入新名字默认「源名_副本」。复制时会一并带走连接参数COM 口、波特率、数据位、校验、停止位该设备在高亮 / 触发规则上的每设备启用状态快捷命令原本指向源设备的命令会同时指向新设备。重命名双击设备页签 → 输入新名字。校验不能为空、不能与其它设备重名、不能含特殊字符:、#、[、]、{、}、、*、!、|、、、、%、、。重命名会全局更新所有引用触发规则的source_device、动作的target_device、快捷命令的target_device、显示配置、规则启用状态以及已连接的串口 worker —— 因此重命名不会丢消息或错乱按钮状态。删除设备点页签右侧的X→ 确认后会断开连接并从配置中移除。拖动页签改变顺序设备页签可拖动按住页签左右拖动松手即改变位置VSCode 风格——拖动时原页签变半透明鼠标位置出现半透明的浮动页签副本插入位置由蓝色竖线指示。顺序在松手时才同步到配置里的devices列表拖动过程中不写盘下次启动保持一致。页签上的X 关闭按钮与圆点指示在拖动时也会跟随移动已自绘不会错位。页签选中色与连接指示当前选中的设备页签以主题主色蓝色整块填色并显示白字其余页签为中性灰底。页签左侧的圆点表示连接状态当前选中页签已连接 白色实心圆未连接 白色空心圆仅描边。非选中页签已连接 绿色实心圆未连接 灰色实心圆。连接串口每个设备标签页底部选择端口、波特率等参数点连接。日志区会实时显示接收数据带高亮底部输入框可发送命令Enter 发送ShiftEnter 换行。快捷命令每个设备页签中部有一排快捷命令按钮点击即发送预设命令。按钮只显示指向本设备的命令或设为「所有设备」的命令。命令模板支持变量和字符串管道见后文「命令模板可用变量」。新增 / 管理点页面左侧的➕打开「快捷命令管理」对话框上半部分列出系统中所有快捷命令勾选即加入本设备取消勾选即从本设备移除。「目标设备」列显示该命令当前归属哪些设备「所有设备」表示对全部设备可见。取消勾选一个「所有设备」命令时会自动转为「显式列出其它所有设备」不影响别的设备。下半部分可直接新增填写名称、发送字符串、可选的周期间隔 / 持续时长、按钮颜色点「添加到列表」。「快捷命令管理」对话框勾选控制命令在本设备的可见性下方可直接新增。编辑 / 删除右键任一按钮 →编辑…或删除。编辑对话框可修改名称、发送字符串、周期参数、颜色。拖动改顺序按住按钮拖动到目标位置释放即可调整顺序VSCode 风格拖动时原按钮半透明鼠标跟随一个半透明的放大预览图带阴影插入位置由蓝色竖线指示。顺序在松手时写回配置所有设备共享同一份命令列表。周期发送在周期间隔里填数字秒该命令按钮会带 ⏰ 前缀表示是周期命令点击启动周期发送立即发一次之后按间隔循环按钮变蓝高亮再次点击停止。「持续时长」留空或 0 无限循环填数字 持续若干秒后自动停止。按钮颜色新增 / 编辑时可给按钮选一种背景色。提供 10 种柔和预设色文字颜色会根据背景亮度自动取蓝色或同色相深色保证可读0 浅红1 浅橙2 浅黄3 浅黄绿4 浅绿5 浅青绿6 浅青7 浅蓝8 浅紫9 浅粉配置写法快捷命令存在config.yaml的quick_commands列表里可手编也可在⚙ 配置 → 快捷命令里表格化管理名称、目标设备、命令、周期、颜色quick_commands:-name:复位command:RESET\ntarget_device:调试口A# 单个设备留空所有设备也可写成列表-name:读温度command:GET TEMPtarget_device:[调试口A,设备口B]color:4# 0~9见上表省略默认无背景色interval:2.0# 周期间隔秒省略单次发送duration:30# 持续时长秒省略或 0无限高亮规则在⚙ 配置 → 高亮规则增删改。每条规则-name:错误pattern:(?i)error|fail|exception# Python 正则foreground:#FFFFFFbackground:#C62828bold:true⚙ 配置 → 高亮规则逐条编辑正则、前景/背景色、粗体。工具栏☰ 规则概览CtrlR可按当前设备勾选启用/停用每条规则无需打开配置对话框触发规则跨端口联动在⚙ 配置 → 触发规则配置。这是工具的核心-name:温度超限 - B口降速enabled:truesource_port:调试口A# 在此端口接收的行做匹配pattern:temp([0-9.])# 正则可带捕获组condition:m1 target_temp# 可选m0整行m1..捕获组可直接用变量名actions:-type:send# 跨端口发送target_port:设备口B# 可与 source_port 不同command:SET_FAN ${match.1} ON# ${match.N} 引用捕获组-type:log# 记录提示message:⚠ 温度 ${match.1} 超过阈值 ${target_temp}⚙ 配置 → 触发规则源设备 正则 条件 动作列表双击动作单元格可编辑。命令模板可用变量写法含义${match.0}整个匹配行${match.1}…${match.9}正则捕获组${timestamp}完整时间戳2026-08-08 14:30:05${date}/${time}日期 / 时间${port}来源端口名${变量名}用户自定义变量配置 → 变量变量在⚙ 配置 → 变量里维护键值对命令模板与条件表达式均可引用字符串处理管道可链式${match.1|upper} 转大写 ${match.1|lower} 转小写 ${match.1|trim} 去首尾空白 ${match.1|hex} 十进制转十六进制 ${match.1|unhex} 十六进制转十进制 ${match.1|replace(-,_)} 替换 ${match.1|substr(0,4)} 取子串 ${match.1|pad(8,0)} 左填充到 8 位用 0组合示例${match.1|trim|upper}条件表达式condition为可选布尔表达式使用安全求值白名单 AST禁危险函数。匹配组可用m0/m1/..变量直接用名字condition:m1 target_temp# 捕获组1 大于 变量condition:int(m1) 50# 显式取整比较condition:m1 in (OK, READY)# 成员判断condition:m1 50 and port A# 组合表达式中数值会自动尝试转换便于直接比较。动作类型actions支持四种动作可写多条依次执行type作用关键字段send向设备发送命令可跨设备target_device、commandlog在来源设备日志区显示一条提示warn 风格messageset_port_param运行时修改端口参数已连接即时生效并写入配置baudrate/bytesize/parity/stopbits/portmessage生成一条消息显示到「消息」面板并持久化content或messagemessage动作示例配合下文「消息面板」使用-name:温度告警记录enabled:truesource_device:调试口Apattern:temp([0-9.])condition:m1 target_tempactions:-type:messagecontent:⚠ 温度 ${match.1} 超过阈值 ${target_temp}# 显示在消息面板-type:sendtarget_device:设备口Bcommand:SET_FAN ${match.1} ON消息面板点工具栏 消息或CtrlM打开右侧的消息面板。它以表格形式收集并展示由触发规则生成的消息即type: message动作的输出适合用来集中查看各设备的告警、状态摘要等。界面构成工具条第一行设备过滤下拉框默认「全部设备」、自动滚动开关、当前消息计数。工具条第二行删除该设备 / 删除选中 / 清空全部。表格三列 —— 时间、设备、消息。整行选中不可直接编辑单元格。设备分色不同设备的消息行使用不同的浅色背景淡蓝、淡靛蓝、淡青、淡绿、淡橙、淡紫、淡粉、淡深紫 …按设备创建顺序循环便于在一堆消息里快速识别来源。设备过滤下拉框选某个具体设备则只显示该设备的消息。此时「删除该设备」按钮可用选「全部设备」时该按钮禁用。删除删除该设备删除当前过滤设备的全部消息需先在过滤里选定设备。删除选中删掉表格中选中可多选的行。清空全部删掉所有消息。以上操作均有二次确认。自动滚动「自动滚动」勾选时新消息到来会自动滚动到底部取消勾选则保持当前位置方便查阅历史。最多保留2000条超出后自动丢弃最早的。持久化消息会自动保存到config/messages.json防抖写入1 秒内多次改动只写一次。程序重启后自动加载历史消息所以关掉再打开面板之前的消息仍在退出程序时也会立即保存。消息面板默认隐藏需要时用工具栏按钮或CtrlM打开面板显示时会自动收窄到默认宽度避免把主窗口撑宽。大模型助手点击✨ LLM 助手或CtrlL用自然语言描述需求例如当调试口A 收到 temp 开头且数值大于 50 时向设备口B 发送 SET_FAN 加上该数值和 ON粘土助手左侧描述需求 → 流式生成 YAML → 确认后「应用合并到配置」。模型会生成对应 YAML 可手动编辑后点应用合并到配置并保存。生成过程流式显示出错会提示。️ 项目结构serial_tool/ ├── main.py # 入口 ├── requirements.txt ├── config/ │ ├── default_config.yaml # 默认模板只读 │ └── config.yaml # 用户配置运行时生成 ├── core/ │ ├── serial_worker.py # 单串口读写线程 │ ├── port_manager.py # 多端口生命周期 │ ├── highlight_engine.py # 高亮规则匹配 │ ├── command_engine.py # 命令渲染与触发 │ ├── config_store.py # YAML 读写校验 │ └── llm_service.py # OpenAI 兼容客户端 ├── ui/ │ ├── main_window.py # 主窗口 │ ├── port_tab.py # 端口标签页 │ ├── log_view.py # 高亮日志显示 │ ├── config_dialog.py # 配置编辑 │ └── llm_panel.py # LLM 助手 ├── utils/ │ ├── expression.py # 表达式/参数引擎 │ └── logger.py # 日志 └── README.md️ 架构要点线程模型每个串口一个SerialWorkerQObject.moveToThread读循环在子线程通过Signal(str)把整行回传主线程。绝不跨线程操作 GUI/串口对象。主线程集中处理高亮匹配、命令渲染、触发调度都在主线程完成避免锁。跨端口联动主窗口收到某端口的行 → 喂给CommandEngine→ 渲染动作 → 调目标端口的worker 发送worker 的send是 slotQt 自动排队跨线程。性能日志显示用QTimer50ms 批量 flushQPlainTextEdit.setMaximumBlockCount(5000)防内存膨胀。安全LLM 生成的配置预览确认后才写入配置保存前经validate校验。 打包成 exe可选py-mpipinstallpyinstaller py-mPyInstaller--noconsole--nameNento main.py# 产物在 dist/Nento/ 备注COM 口冲突同一物理口不能被两个程序同时打开。LLM 调用走外网请确保网络可达用 Ollama 则全程本地。日志文件在serial_tool/logs/serial_tool.log滚动 2MB×3。 下载点此进入下载页面