自制工业控制系统:机床界面实战——从启动LOGO到锁定解锁的七块屏
Contents
起因
基础篇收官时,图形系统那篇留下的东西是"零件":渲染原语、点阵字库、控件、事件分发。但操作工坐在机床前面对的不是零件,是一块块整屏:开机看到什么、程序在哪儿编、怎么在屏幕里先走一遍、切割时盯什么、参数谁改、维护看哪儿、锁住了怎么办。这篇把应用层的界面定下来——七块屏:启动 LOGO、编程、仿真、运行、设置、维护、锁定/解锁。
界面在机床行业有个别的行业没有的分量:老师傅判断一台新机床好不好用,前三分钟就看界面。操作面板是跟着显示技术一路长过来的:最早一排 LED 数码管加拨码开关,坐标要一位一位翻;后来单色字符屏能列菜单了;CRT 图形终端一来,“在屏幕上把轨迹画出来"才成为可能——HF 那种整屏图形界面在当年就是奢侈品。HF 那套 DOS 界面朴素了三十年,但一代线切割工人的肌肉记忆全在上面——坐标在哪儿、规准在哪儿、断丝了弹什么。自研界面的目标不是炫,是让干了二十年的老师傅十分钟内找到所有他习惯的东西,然后发现坐标字更大、报警是中文整句、断丝后的处置是一键的。
一、七块屏与切换模型
先列清单,每一屏的存在理由都是"有一类人有一个时段只干一件事”:
| 屏 | 谁看 | 干什么 |
|---|---|---|
| 启动 LOGO | 所有人 | 开机前几秒,“机器活着"的指示 |
| 编程 | 编程员 | 3B/G 程序的编辑与管理 |
| 仿真 | 编程员/操作工 | 上机前在屏幕里把轨迹走一遍 |
| 运行 | 操作工 | 加工主屏,信息密度最高 |
| 设置 | 工艺员/厂家 | 参数、权限、locale |
| 维护 | 维修工/服务商 | 计数器、日志、版本、校准 |
| 锁定/解锁 | 所有人 | 所有权与合规状态的呈现 |
切换模型一个 enum 加一个 shell,没有窗口栈、没有层叠——工控界面切屏是整屏换,一年也就切几万次,整屏标脏重绘(1024×768 一次 3MB,几 ms)比维护一套局部刷新的切屏逻辑便宜得多:
|
|
两条铁律:
- Lock 屏优先级最高:合规状态字(合规篇)每 tick 检查,任何屏在任何时刻可以被强制切到 Lock,用户按键切不走
- 顶栏和底栏不属于任何屏:由 shell 统一绘制。机床状态、报警、权限级别这三样跨屏跳变是最坑操作工的——换一块屏状态灯换了位置,车间里是要出事的
导航放顶栏:编程/仿真/运行/设置/维护五个入口常驻,当前项高亮。切屏原因记日志(操作审计):用户点击、报警自动切换、锁定强制切换,三种来源分开记——事后翻日志能还原"断丝报警时操作工在设置屏改参数"这类事故现场。
二、启动 LOGO:从选择器到内核的无缝衔接
开机画面有两个阶段,资产两份、内容同一张图:
- 选择器阶段(固件篇的 BOOTX64.EFI,ExitBootServices 之前):GOP 还能调
Blt,从 ESP 读 logo.bmp 直接画。BMP 解码二十行代码——本质就是上下颠倒的 BGRA 行数据,选 32bpp 无压缩格式存,别给自己找 RLE8 调色板的麻烦。ESP 是 FAT32、由固件 SimpleFileSystem 读(固件篇口径:FAT32 我们自己一个字节不写),logo.bmp 当配置文件一样放 - 内核阶段:logo 不能再依赖 ESP 和固件,跟字库一条路——离线导出成行程编码包([像素数 u16, 颜色 u32] 重复),
include_bytes!进内核。1024×768 的 logo 背景大片同色,RLE 后典型几十 KB;裸 BGRA 是 3MB,编进内核太肥
衔接上有个白捡的效果:ExitBootServices 不清屏。真帧缓冲的内容在固件退场后原样留着继续扫描,选择器画的 logo 会一直亮到内核第一帧画出来。要守的纪律是内核侧别急着动真帧缓冲——后备缓冲(内核堆里那块)随便 memset,真帧缓冲在第一帧内容就绪前一个字节别碰,logo 就是天然的无花屏过渡。
LOGO 屏不是广告位,是"还活着"的指示,所以它必须跟 POST(自检篇)同屏:logo 占中间,底下一条自检进度——九项逐项打勾,FATAL 项先出结论(先要命后费时),右下角版本号加槽位(A/B,固件篇)。USB 枚举是 3 秒预算的大头,这项没完成之前进度条不许走到头——把"卡在哪儿"显示出来,比进度条丝滑重要。
POST 完成后不是直接进主界面:参数篇定过,检测到有效加工快照要先弹恢复询问(续切/回退/重来三选),对话框叠在 logo 上,确认后才进运行界面的手动子模式。断电重启的机床,操作工第一眼该看到的是"现场还在”,不是冷启动桌面。
三、编程界面:列表编辑器与程序管理
布局左窄右宽:左侧程序列表两个 tab(机内 DATA 区 / U 盘),右侧程序内容。编辑器是行式列表不是自由文本——3B 程序天然是行的(B X B Y B J G Z),G 代码也是。行式列表换来的是当前行高亮、行号、错误行跳转、上下键滚动,全部复用图形篇的列表控件,不需要通用文本编辑器那套自由光标模型。
行内编辑更进一步按字段拆开:选中一行,编辑框组按 3B 的字段分成 X/Y/J 三个数值框加计数方向、加工指令两个选择框。字段化比自由文本少一整类错误——G 和 Z 手滑打成小写、全角,在自由文本里要等解析器骂人,字段化之后非法输入根本进不来。程序头信息(工件名/图号/日期/切割次数)单独一块表单。
程序管理:U 盘导入(exFAT,U 盘篇)、复制、改名、删除二次确认。老 U 盘的 GB2312 坑:市面上流通的 3B 程序几乎全是 GB2312(HF 时代的遗产),文件名和内容都是。导入时转一次 UTF-8——查表法,码表 vendor 进内核,这是全系列唯一保留的 GB2312 场景(图形篇定 Unicode 口径时留的边界)。导出可选转回 GB2312(给还在用 HF 的同行拷程序),GB2312 里没有的字符用 “?” 替换并计数提示。
语法检查:保存即过解析器(解析器是应用篇下一篇的主角,这里只吃它的结果),错误行标红加错误码(报警码体系的程序段),回车跳下一处。
规准挂接:程序按切割次数分段,每段挂规准组号。中走丝多次切割,一刀粗、二到四刀修,每刀的脉宽/脉间/电流/丝速/留量是一组——组号在编程界面选、在运行界面显示、数据在参数系统存,三处一个源。
底部状态行放总行数和 J 累计:3B 的 J 是计数长度,全程序加起来就是轨迹总长——编程时就知道这活儿切多长,估工时、估钼丝消耗都从它来。
四、仿真:上机前在屏幕里走一遍
数据源是解析器的输出段表(直线/圆弧的端点坐标+方向),跟实切时插补吃的是同一张表——仿真和实切共用一个解析器,否则"仿真没问题实切超行程"的锅没法查。渲染直接用图形篇的原语:轮廓 Bresenham,圆弧按弦长离散成折线(0.05mm 弦长在整图缩放下视觉上已是圆)。
屏幕内容:轨迹图占主体(坐标网格、起割点绿色三角、当前仿真位置十字线、已走轨迹加粗未走细线两色区分),侧栏当前段信息(段号/类型/终点坐标/该段规准/该段长度),底部播放控制(单步/连续/速度倍率)。
仿真真正的价值不是"看形状",是预检,三项硬检查每次仿真必跑:
- 软限位:每段终点(圆弧要取包络极值)对比各轴行程,超界段标红——装夹完才发现超行程,工件得重新装
- 锥度校验:锥形段的 U/V 摆动量按机床参数(上下导轮距等,设置篇的厂家级参数)反算,超摆角范围报警
- 空行程标注:非切割段(快速定位)单独统计长度——空走太多说明起割点选得不好
空走(干跑)是仿真的实机版:机床按程序实走、不开高频不开工作液,装夹后最后确认用。它本质是运行界面的一个模式,但入口放仿真屏——“仿真正常 → 空走确认 → 实切"是工序流。3D 过程模拟排在这块屏的应用篇队列里。
五、运行界面:信息密度最高的一屏
操作工一天八小时盯的就是它。布局按"扫一眼分区"设计(1024×768 举例):
|
|
坐标显示 mm 三位小数(µm 分辨率),但内部永远是 µm 整数——国际化篇"内部一套单位"的口径落在 UI 上就是:换算只发生在显示这一层,英制切换也只动这一层。
三个分区三条数据通路,UI 全部是消费方:
- 坐标/进度:状态回传 SPSC 环(调度篇)→ 15Hz 刷新(图形篇节律)
- 平均电流/短路率:放电统计由运动卡累计回传,UI 画模拟条和百分数——短路率连续走高是进给太快或工作液脏的前兆,老师傅看这个数字比等报警早
- 倍率/暂停/单段:UI 只把命令投进下发队列,永远不直接摸卡的寄存器——命令经卡适配层下去,执行结果下一拍从回传环读回来。UI 直写寄存器等于绕过两级调度,这是设计红线
报警处置流以断丝为例(中走丝最高频的事故):底栏报警栏变红 + 蜂鸣器响(GPIO,平台篇)+ 运行自动转暂停 → 处置菜单三选(穿丝后原地继续 / 回退 N 段重切 / 停止)。报警码(u32,国际化篇)驱动文本,确认只消音不消警,未处置的报警顶栏挂旗。
坑:加工中的键盘锁不是可选功能。 车间里抹布扫过键盘、手肘压住按键都是真事。运行界面在切割进行中默认锁键盘(锁图标常显),解锁用组合键(单键够不着的组合,如 Ctrl+L);锁的是无关输入,暂停类操作永远不锁——急停更是硬件回路,不走这套 UI,这条调度篇钉过。
手动子模式(点动/手轮/找正)是运行屏的一个子页。找边、找孔中心是线切割装夹的基本功,自动找中心一跑几十秒,过程要有独立状态显示(当前方向/次数/偏差值)——没有状态显示,操作工分不清机器是在找中心还是死机了。
六、设置:三级权限与参数组
| 级别 | 谁用 | 改什么 | 门槛 |
|---|---|---|---|
| 操作工 | 所有人 | 语言/单位/亮度/时钟 | 无 |
| 工艺员 | 工厂工艺 | 规准库/丝径补偿/留量/切割策略 | 密码 |
| 厂家 | 我们/服务商 | 轴行程/螺距补偿/反向间隙/驱动参数 | 厂家授权码(绑指纹,合规篇) |
权限不是界面的装饰,是参数系统的分组视图:三组参数都走参数篇的双副本世代提交,差别在谁能改、改完要不要重启生效。改完必须提示生效条件(“螺距补偿已保存,回零后生效”)——工控参数改了不生效是事故源:操作工以为改了,机器还在用旧值。
locale 切换走国际化篇的机制:重载字符串表 + 全控件标脏,当场生效不重启。
厂家级里有一块要明示的雷区:合规配置(GPS 选配、租期、授权状态)不在这屏改——它由签名的出厂配置和授权链管理(合规篇),界面上只读显示,厂家密码也改不了。能从设置屏改合规配置,等于给出厂状态留了伪造口子。
螺距补偿表给一个表格控件(编辑框网格,轴 × 段位),数据来自激光干涉仪标定,录入完生成校验和存参数区。这张表错了机床切出来的是斜的,录入界面要做二次确认。
七、维护:计数器、日志与版本
维护屏是机器的健康档案,四块:
- 寿命计数:丝筒换向次数/运行时长、导轮、导丝嘴、滤芯、离子交换树脂(按工作液电导率趋势判断)、钼丝消耗(按切割周长累计)。到期黄色提示加处置动作(确认复位计数),不强制停机——维护提示是提醒不是锁
- 日志:按时间/级别/模块过滤(日志篇 24B 记录头的字段正好是过滤维度),导出 CSV 到 U 盘给远程分析(德语区分隔符坑,国际化篇)
- 版本:A/B 槽状态、bootcount、当前激活槽(固件篇),升级入口(U 盘/OTA)与恢复出厂(二次确认 + GPS 选配不变)
- 校准:UV 垂直度、丝张力标定、电导率标定,维护级权限
再加一页"服役档案”:总加工时长、总切割面积(mm² 累计——中走丝的核心效率指标 mm²/min 就从这两个数来)、断丝总次数、开机次数。卖二手时这一页就是机器的里程表,作不了假——计数器在参数区双副本里,清零要厂家级权限。
参数整包备份:把参数区镜像导出到 U 盘(参数篇的二进制格式原样,外面加一层 CRC 和版本头),恢复时校验版本和机床型号。跨机床恢复参数是事故:别人的螺距补偿表灌进你的机器,切三个月才发现所有工件尺寸漂了 0.02。
八、锁定/解锁:两种锁别混
这台机器有两种"锁",混在一个设计里会两头出错:
- 操作锁:运行界面的键盘锁(第五节),防误触,操作工一天锁解锁几十次
- 所有权锁:合规体系的执行结果(合规篇)——GPS 越区、丢星宽限到期、租期届满、授权缺失
所有权锁的 UI 只做一件事:把判定层的结果说清楚。锁屏三要素:
- 锁定图标红色——报警闪烁、锁屏常亮,锁不是紧急事件是状态,不该用紧急的视觉语言
- 原因码 + 人话文本(报警码体系合规段的码,国际化篇模板渲染:“租期届满,请联系 XXX”——服务商联系方式从授权数据里来,不是写死的字符串)
- 剩余宽限倒计时(丢星 30 分钟宽限期的可见化:室内车间 GPS 断续是常态,宽限期内顶栏黄旗提示不锁,归零才锁)
解锁路径按合规篇的体系:授权码输入(离线激活码绑指纹,软键盘加实体键盘都收,输错限流)、4G 远程下发(离线队列,机器下次联网收到)、服务商到场。锁屏保留维护屏的日志导出——服务商到场第一件事是导日志判断锁因,全锁死他只能拆盘。
加工中触发锁定的策略合规篇定过:走安全停机路径(复用 0xF0 安全联锁的 ISR,不在插补中段硬切),锁屏显示"已完成安全停机"而不是瞬间黑屏——锁的是下一次启动和继续加工,不是把正在运动的轴就地断电,后者是急停回路的职责,两套语义不共用。
UI 侧最后一条纪律:锁屏上没有"稍后再说"、没有"跳过"——它不是对话框,是墙。渲染层没有判定权(判定在 service-core,执行在 boot gate 加每 tick 检查),UI 改不了锁状态,最多让这堵墙好看一点。
总结
实战清单:七屏 enum + shell 统一顶栏底栏 + Lock 最高优先级;LOGO 双阶段资产(ESP 的 BMP 给选择器、RLE 编进内核)+ ExitBootServices 不清屏的无缝衔接 + POST 同屏 + 恢复询问前置;行式加字段化的 3B 编辑器 + GB2312 导入边界;仿真与实切共用解析器 + 软限位/锥度/空行程三项预检;运行屏三分区三通路(回传环消费、命令队列下发、不摸寄存器红线)+ 断丝处置流 + 加工中键盘锁;三级权限矩阵 + 生效条件提示 + 合规配置只读;维护四块 + 服役档案 + 参数整包备份防跨机;两种锁的区分 + 锁屏三要素 + 安全停机语义。跑通标志:老师傅不看说明十分钟内完成"导入程序 → 仿真 → 空走 → 实切 → 断丝处置"全流程;切语言全屏跟随不重启;拔 GPS 后宽限倒计时可见、归零锁屏、授权码解锁走通;维护屏导出的 CSV 在客户的 Excel 里不挤成一列。
下一篇进程序本身:G 代码/3B 代码的解析器——编程界面和仿真屏吃的那张段表,从哪儿来。
参考链接
- 本系列:图形系统实战(控件、脏矩形与事件分发)、中断驱动的硬实时层与协作式主循环(状态回传 SPSC 环)、参数系统与断电恢复实战(快照三选与双副本)、开机自检与固件更新实战(POST 与 A/B 槽)、日志系统实战(过滤维度)、国际化实战(报警码、locale 与单位口径)、合规与安全控制实战(判定/执行分离、宽限期与授权链)
Author 软件开发大郭
LastMod 2026-09-11