
1. 为什么设备运行记录值得在触摸屏上单独做一套很多做自动化项目的朋友尤其是刚接触西门子 HMI 的第一反应是运行记录这东西PLC 里存一下不就行了。我早年也这么想直到有一次客户半夜打电话说设备白天莫名停机要我查原因我打开电脑连上 PLC 一看——数据区早被新周期覆盖了什么线索都没留下。那次之后我就养成了一个习惯凡是涉及设备启停、故障、参数变更这类需要事后追溯的信息一律在 HMI 侧做一套独立的运行记录。这套东西的价值在于三点。第一它是给人看的不是给机器看的。PLC 里的数据是给逻辑用的格式紧凑、可读性差HMI 上的记录是给操作工、维修工、班组长看的时间、事件、状态一目了然。第二它独立于 PLC 的扫描周期。PLC 数据区会被循环覆盖而 HMI 的记录是追加式的只要存储空间够几个月前的记录都能翻出来。第三它天然带时间戳和操作上下文。谁在什么时候按了启动、设备在什么状态下报的警这些信息组合起来才是完整的运行档案。这篇内容我打算把西门子触摸屏以博途 WinCC 和精智/精简系列面板为主上做运行记录的完整流程拆开讲重点放在报警视图的配置上因为这是最多人卡壳的地方。适合两类人看一是刚上手博途、想把 HMI 功能做扎实的初学者二是做过一些项目、但运行记录总是做得能用但不好用的进阶者。我会把每一步为什么这么做讲清楚也会把我在现场踩过的坑一并倒出来。提示本文以博途 TIA Portal 环境下的 WinCC 组态为主精智面板Comfort Panel和精简面板Basic Panel在功能上有差异涉及差异处我会单独标注。2. 运行记录的数据从哪来先理清 PLC 与 HMI 的分工2.1 记录的本质是事件不是数据流很多人一上来就问运行记录怎么组态其实更该先问我要记什么。运行记录的本质是离散事件不是连续数据流。设备启动是一个事件设备停止是一个事件故障报警是一个事件参数被修改也是一个事件。每个事件有几个要素发生时刻、事件类型、事件描述、可能还有事件值。想清楚这一点后面的组态思路就顺了。你不需要把 PLC 里所有变量都往 HMI 上搬只需要把值得记录的事件对应的触发条件整理出来。我一般会列一张表左边是事件名称右边是触发条件哪个变量、什么变化、什么值这张表就是后面组态的蓝图。事件名称触发变量触发条件记录内容设备启动DB1.StartCmd上升沿操作员、时间设备停止DB1.StopCmd上升沿操作员、时间电机过载DB1.MotorOverload变为 1时间、故障码温度超限DB1.TempHigh变为 1时间、当前温度参数修改DB1.ParamChanged上升沿操作员、参数名2.2 触发逻辑放 PLC 还是放 HMI这是个经典问题。我的经验是判断逻辑放 PLC记录动作放 HMI。原因很简单PLC 的扫描周期稳定、逻辑可靠做边沿检测、条件判断是它的强项而 HMI 的记录、显示、存储是它的强项。让 HMI 去做复杂的逻辑判断一来响应慢二来不同面板性能差异大容易出幺蛾子。具体做法是在 PLC 里为每个需要记录的事件建一个事件触发位用上升沿或置位逻辑产生一个短脉冲比如一个扫描周期HMI 侧用这个位的上升沿来触发记录。这样职责清晰调试也方便——PLC 里能监控触发位有没有正常产生HMI 里能监控记录有没有正常写入。2.3 变量连接里最容易忽略的细节在博途里把 PLC 变量连到 HMI 时有几个细节新手特别容易翻车。第一连接要选对。一个 HMI 可能同时连多个 PLC变量必须挂在正确的连接下否则读到的永远是 0。第二采集周期要匹配。事件触发位这种短脉冲采集周期必须设得足够快比如 100ms否则 HMI 根本采不到记录就丢了。第三数据类型要对齐。PLC 里是 BoolHMI 里也必须是 Bool别搞成 Int 再转换多此一举还容易错。注意精简面板Basic Panel不支持脚本和部分高级记录功能如果你的项目用的是 KTP 系列运行记录的实现方式要简化后面第 5 节会专门讲。3. 报警视图配置运行记录的核心载体3.1 为什么用报警系统而不是自己画表格很多人第一反应是我自己画个表格用脚本往里填数据不就行了。理论上可行但实际项目里我不推荐原因有三个。第一报警系统自带时间戳、确认、归档机制这些你手写要写一大堆代码还容易出 bug。第二报警系统的显示控件是现成的报警视图、报警窗口、报警指示器拖过来配一下就能用省时省力。第三报警系统支持归档历史记录能存到 U 盘或 SD 卡这是手写表格很难做到的。所以我的做法是把运行记录当成离散报警来做。设备启动、停止、参数修改这些本质上和报警没区别都是某个时刻发生了某件事只是严重程度不同而已。用报警系统来承载是最省事也最稳的方案。3.2 离散报警的组态步骤在博途里新建离散报警路径是HMI 报警 离散报警 添加。每条报警需要配几个关键字段触发变量选前面 PLC 里做好的事件触发位。触发位如果是用字的某一位触发这里要选对位号如果是单独的 Bool 变量选位 0 即可。报警文本这是显示给操作工看的要写人话。比如设备已启动而不是StartCmd Rising。报警类别这个很关键后面会细说。确认方式运行记录类的事件我一般设成无需确认因为它是记录不是报警不需要操作工去点确认。这里有个坑要提醒报警文本里可以插入变量。比如设备启动操作员%s这个 %s 可以关联一个字符串变量显示当前登录的用户名。这个功能做运行记录特别有用能记录谁干的但新手往往不知道白白浪费了。3.3 报警类别的划分逻辑报警类别决定了报警的颜色、确认行为、归档行为。默认有错误警告系统几类但做运行记录时我建议自定义类别。比如我会建这么几类类别名称用途颜色是否归档操作记录启停、参数修改蓝色是故障记录设备故障红色是提示信息一般提示灰色可选这样在报警视图里操作工一眼就能区分这是正常操作还是这是出故障了。颜色别乱用红色留给真正的故障蓝色或绿色给正常操作灰色给提示这是行业里比较通用的约定。3.4 报警视图控件的关键属性报警视图Alarm View拖到画面上之后属性里有一堆设置我挑几个最关键的讲。显示模式有当前报警历史报警当前历史几种。运行记录一般用当前历史这样操作工既能看到刚发生的事也能往前翻。列配置默认列可能只有时间、日期、文本。我一般会加上类别确认状态持续时间这几列。持续时间特别有用能看出某个故障持续了多久。排序方式按时间倒序排最新的在最上面符合人的阅读习惯。行数别设太多一屏显示 10 到 15 行比较合适太多了字太小看不清。字体大小这是现场反馈最多的问题。默认字体往往偏小操作工站在设备前看不清。我一般会把报警文本字号调到 14 到 16时间字号可以小一点。提示报警视图的列宽要手动调默认列宽经常把文本截断。调完之后记得在仿真里看一眼实际效果别等到了现场才发现显示不全。4. 让记录真正可用归档、查询与操作员上下文4.1 报警归档的存储位置选择报警不归档重启就没了这是运行记录的大忌。归档位置有几个选项HMI 内部存储、SD 卡、U 盘。我的建议是短期记录几天内放内部存储读写快。长期记录几个月放 SD 卡或 U 盘容量大。重要记录建议同时导出到 U 盘方便拿走去分析。归档的容量要算一下。假设每天产生 200 条记录每条记录占 200 字节一年就是 200 × 200 × 365 ≈ 14.6 MB。这个量不大一张 8G 的 SD 卡能存几百年。但要注意归档文件是循环覆盖的要设好覆盖策略别把重要记录冲掉了。4.2 历史报警的查询与筛选光有记录不行还得能查。报警视图支持筛选可以按时间范围、按类别、按文本内容筛。我一般会在画面上放几个筛选按钮比如只看故障只看今天只看操作记录操作工点一下就能过滤。如果项目要求更高可以用报警视图 脚本做自定义查询。比如输入一个时间段脚本去归档文件里捞数据显示在自定义的表格里。这个做法灵活但复杂一般项目用不上报警视图自带的筛选够用了。4.3 记录谁操作的用户管理与变量关联运行记录如果不记录操作员价值要打对折。西门子 HMI 自带用户管理可以建用户、设权限、做登录画面。关键是怎么把当前登录用户关联到报警文本里。做法是在 HMI 里建一个内部变量类型是字符串比如叫CurrentUser。然后在用户管理的登录事件里用脚本把用户名写进这个变量。报警文本里用 %s 引用这个变量就能显示操作员张三。这个功能在精智面板上很好实现精简面板上脚本支持有限可能要用别的方式绕。如果用的是精简面板可以考虑让 PLC 侧记录操作员编号HMI 只负责显示。4.4 时间同步别让记录时间对不上这是现场最容易被忽视、出问题又最头疼的地方。HMI 的时间和 PLC 的时间如果不一致记录的时间戳就是错的事后分析全是坑。解决办法是让 HMI 做时间主站PLC 从 HMI 同步或者反过来但一定要统一。在博途里HMI 的连接属性里有时间同步选项勾上之后PLC 和 HMI 的时间会定期同步。我一般设成 HMI 为主因为 HMI 通常有电池供电的实时时钟断电也能走时。同步周期设成 1 分钟一次足够用了。注意如果设备联网还可以让 HMI 从网络时间服务器同步。但工业现场网络往往不通外网这个方案要看实际情况。5. 精简面板与精智面板的差异处理5.1 精简面板的功能边界精简面板Basic Panel如 KTP400、KTP700价格便宜用量大但功能有阉割。做运行记录时主要限制在不支持脚本或者只支持极有限的脚本所以登录时写用户名到变量这类操作做不了。报警归档能力弱有些型号不支持归档到外部存储。报警数量有限制具体看型号一般几百条。所以用精简面板做运行记录思路要调整把更多逻辑放到 PLC 侧。比如操作员信息让 PLC 记录事件触发让 PLC 产生HMI 只做显示和简单归档。5.2 精智面板的进阶玩法精智面板Comfort Panel如 TP700、TP1200功能完整可以玩的花样多脚本支持完整可以用 VBS 或 C 脚本做复杂的记录逻辑。归档能力强支持归档到 SD 卡、U 盘支持 ODBC 导出。支持自定义报表可以把运行记录导出成 Excel 或 PDF。如果项目预算允许做运行记录我强烈建议用精智面板省下来的调试时间远超那点差价。5.3 跨面板移植时的注意事项项目做大了经常遇到这个画面要从 KTP700 移植到 TP700的情况。移植时要注意报警编号、变量连接、脚本都要重新检查。精简面板上能跑的组态到精智面板上不一定直接能用反之亦然。我一般会在移植后做一次完整的仿真测试把所有记录功能走一遍确认没问题再下载到实际面板。6. 现场调试中那些文档不会写的事6.1 报警刷屏记录太多也是灾难有次做一个包装线项目运行记录做得太全设备每动作一次就记一条结果一开机报警视图疯狂刷新操作工根本看不清还以为是故障。后来我把记录粒度调粗只记批次开始批次结束故障这几类世界就清净了。经验运行记录不是越全越好要记有意义的事件。判断标准是这条记录事后会不会有人去看如果没人看就别记。6.2 触发位没复位导致的重复记录用上升沿触发记录时如果触发位在 PLC 里没复位HMI 可能会重复记录。我遇到过 PLC 程序里触发位置位后忘了复位结果同一条记录刷了几百遍。解决办法是触发位用脉冲方式产生一个扫描周期后自动复位或者 HMI 侧做去重逻辑。6.3 归档文件损坏的预防SD 卡或 U 盘在工业现场容易出问题归档文件损坏是常事。预防措施用工业级存储卡别用普通消费级卡定期导出备份别把宝全押在卡上HMI 断电前先停止归档避免写入过程中断电。6.4 操作工不看的记录等于没做这是最扎心的一条。记录做得再漂亮操作工不看就是白做。怎么让他们看我的做法是把关键记录做成报警指示器有故障时闪烁提示把常用查询做成大按钮一点就能看培训时专门讲怎么查记录别指望他们自己摸索。7. 一套可复用的运行记录组态模板思路7.1 模板的结构设计做了几个项目之后我总结出一套可复用的模板结构分享出来供参考PLC 侧建一个事件记录DB里面放若干触发位和辅助变量。每个事件一个触发位命名规范统一比如 Evt_Start、Evt_Stop、Evt_Fault01。HMI 侧建一个运行记录画面放报警视图、筛选按钮、导出按钮。报警类别按前面说的分三类。用户管理建操作员、维修工、工程师三级用户权限分开。归档配置内部存储 SD 卡双备份归档周期设成每天一个文件。7.2 模板的复用与调整这套模板复用时主要改三处事件触发位的数量和命名、报警文本的内容、归档容量和周期。改完之后做一次仿真确认记录能正常产生、显示、归档就可以下载了。7.3 后续可以扩展的方向如果项目要求更高这套模板还能往几个方向扩展接入 MES 系统把运行记录实时上传做数据分析统计设备稼动率、故障率做远程查看通过 Web 或手机看记录。这些扩展都建立在基础记录做扎实的前提上基础不牢扩展都是空中楼阁。我个人在实际项目中的体会是运行记录这东西做的时候多花一天事后省下一周。设备出问题时一份清晰的运行记录能让你少走无数弯路。而报警视图的配置是这套东西的核心配好了整个记录系统就活了。最后再分享一个小技巧在报警视图旁边放一个导出到 U 盘的按钮操作工遇到问题可以自己导出记录发给工程师省得你跑现场。这个按钮用系统函数就能实现不用写脚本值得加上。