
做HMI项目这一年多我最大的感悟是很多人明明技术和工艺都清楚项目却总是做到晚上十二点卡在画面上。一个7寸威纶通触摸屏项目设备启停、参数设置、报警、趋势、用户管理这些页面有80%是重复的但很多人每次开工都从空白工程开始拖控件。见过太多人在页面排版、颜色调整、变量地址重新命名上反复消耗时间而用一套成熟的工业级UI模板半天就能把框架搭完剩下时间全花在真正的设备逻辑调试上。这篇文章就把我做威纶通7寸屏项目沉淀下来的模板思路、设计规范和踩坑经验全部分享出来想提效的朋友可以直接照着做。1. 为什么说UI模板是HMI项目开发的提速核心1.1 工业HMI界面的八二法则做过几个项目后你会发现一个规律不管设备是什么触摸屏上的页面结构基本都是那几类。手动画面、自动画面、参数设定、报警记录、历史趋势、系统设置、用户登录换汤不换药。不同的只是设备名称、点位地址、工艺参数数量。拿一个典型的7寸屏项目来说30个页面里通常有25个左右是通用型页面。设备启停页面就是一个启动按钮一个停止按钮加一个运行状态灯参数设置页面就是数值显示加数值输入报警页面就是表格加确认按钮。如果每个项目都从零开始拖控件、调颜色、对位置这不是在开发这是在重复劳动。把这25个通用页面沉淀成模板新项目进来后只需要改文字标签、绑变量地址、调一下参数范围。页面尺寸帮你定好了按钮大小帮你定好了字体颜色帮你定好了连窗口间跳转逻辑都是通的。这就是模板存在的意义。1.2 模板带来的三笔效率账第一笔是时间账。我做过对比从空白工程开始做一个7寸屏的30页项目熟悉工程软件的前提下单纯画界面至少需要两到三个工作日用模板改半天到一天能完成全部页面搭建剩下的时间可以放在PLC逻辑联调上。第二笔是质量账。模板里的页面布局是经过多个项目验证过的按钮不会重叠文字不会溢出报警条不会遮挡内容。新项目的界面拿出来不管是客户看还是自己看整体一致性都很好不会出现这个页面按钮靠左、那个页面按钮居中的混乱感。第三笔是维护账。项目交出去之后客户往往会在几个月后提需求这个页面加一个数值那个按钮挪个位置。模板的变量命名规范、页面编号约定如果足够清晰你远程看一个截图就能定位到具体窗口和控件改起来非常快。1.3 什么样的人最适合直接抄模板如果你是刚接触威纶通HMI开发模板的价值是正确范例。照着模板的页面结构做一遍你会知道状态栏放哪些东西、报警条怎么复用、窗口切换怎么配置这些经验自己摸索可能需要好几个项目才能攒齐。如果你已经做过几个项目但一直从零开始模板的价值是流程固化。把自己的风格沉淀成一套固定做法每次开工不用再想配色用什么、按钮多大、放哪个位置直接按约定执行效率提升非常明显。2. 模板动工前先把这三件事钉死2.1 屏选型同是7寸开发资源差一倍威纶通的7寸屏型号很多入门级和中高端的内存、CPU、功能支持差距明显直接决定了你的模板能做到什么程度。我最早在TK6071iP上做模板做基础页面完全没问题但一旦涉及宏指令较多、画面切换频繁、历史数据缓存要求高运行就有点吃力。后来换到MT8071iP内存和CPU提升了一截运行明显更流畅还能支持更复杂的功能比如多段历史趋势、大容量配方、更细腻的动画效果。选型建议如果你的项目只是简单的启停、监控、报警TK系列够用模板可以做得轻量如果项目有大量数据记录、配方管理、多语言切换、复杂宏指令就选MT系列或者cMT系列模板可以放开做。同一个模板在不同型号间迁移时要注意画面数量、宏指令复杂度、存储空间这三个维度内存小的屏跑不动大工程这是硬约束。2.2 软件版本与工程文件的兼容关系威纶通的工程软件主要是EB Pro版本迭代比较频繁。这里有一个非常现实的坑高版本的工程文件低版本软件打不开低版本工程用高版本打开保存之后不回退。网上很多人反馈威纶通HMI未定义导致无法开启工程文件这个报错本质就是工程文件版本和软件版本不匹配或者工程里引用了当前软件版本不支持的组件定义。我吃过这个亏同事用新版本软件做了一个模板发给我我这边还是旧版本一打开就报未定义工程直接进不去。做模板之前建议先去威纶通官网把EB Pro更新到当前最新的稳定版本并且在整个团队内统一版本号。如果别人给你发工程文件先确认对方的软件版本别急着打开。版本不一致的情况下宁可让对方导出低版本格式也别硬用高版本工程去兼容低版本软件后者基本无解。2.3 分辨率与像素是模板的物理边界7寸屏的主流分辨率是800x480横向800像素纵向480像素。这个数字是模板的物理边界所有设计都必须在480像素的高度内完成多一像素都会被裁掉。设计模板时我习惯把纵向空间做三段式切分顶部状态栏占40到50像素底部导航区占55到60像素中间留给主显示区大概370到385像素。这个比例在7寸屏上视觉最舒服按钮高度一般做到40到48像素既能保证手指误触率低又不会显得按钮太大压住太多内容。很多新手做模板失败不是不会拖控件而是没有像素意识。放置一个按钮时横向位置、纵向位置、宽度、高度都要心里有数而不是凭感觉摆放。模板里的每一个控件位置都应该是设计过的不是随手拖出来的。3. 把框架定好再放部件配色、字号与变量名规划3.1 工业场景下的视觉规范工业触摸屏的使用环境往往伴随强光、粉尘、震动操作工可能戴着油污手套在嘈杂环境中瞥一眼屏幕判断设备状态。这决定了界面设计不能用互联网产品那套清淡高级灰而是要高对比度、大色块、状态颜色含义明确。我模板里的配色固定为背景深灰RGB 40,40,40或者浅灰蓝RGB 220,225,230正常状态用绿色RGB 0,150,0报警状态用红色RGB 220,0,0设备停止或待机用黄色RGB 255,180,0。绿色代表运行红色代表故障黄色代表待机这是国内工业现场约定俗成的认知不要试图改变它。文字颜色上标题用白色或亮灰色正文用浅灰色数值显示用亮绿色或白色。按钮文字用白色加粗背景用深蓝色RGB 30,80,160。这套配色的核心逻辑是在任何环境光下状态颜色都能第一时间被识别而不是让操作工盯着屏幕猜这个颜色到底算不算报警。3.2 字号的四个层级字号规划是模板里最容易被忽略的细节。很多HMI工程打开后文字被截断、按钮放不下标签、标题和正文分不清层级九成是字号没有体系化。我在模板里固定四个层级一级标题24号字用于页面顶部标题比如1号生产线参数设置加粗白色二级标题20号字用于页面内的分组框标题比如温度控制压力监控正文标签16号字用于按钮文字、参数名称比如启动停止设定温度数值显示20号字或24号字用于实时数值比如温度和压力的当前值必须清晰可读如果你做多语言模板还要考虑中文字符宽度问题。同样是16号字中文标签比英文标签宽不少按钮宽度设计时要预留出中文的显示余量。我一般按钮最小宽度做到80像素标签文字左侧留至少8像素的边距这样中文不会顶到按钮边缘。3.3 变量规划决定后续三个月的心情页面画得再漂亮变量规划乱了联调阶段一样崩溃。我见过最痛苦的情况画面上的每个按钮都直接绑定PLC地址M100、M101、M102满天飞项目做完三个月后客户要改功能打电话问你哪个M地址是哪个电机的启动信号你对着工程文件翻半天也理不清。模板里我强制自己用完整的变量命名规范。以7号窗口的设备控制页面为例变量名格式统一为设备名_功能_类型比如Motor1_Start_Button表示1号电机启动按钮对应的位地址Motor1_Start_Feedback表示1号电机启动反馈输入Tank1_Level_Value表示1号罐液位的数值变量。每个变量在EB Pro里添加注释注明对应PLC地址和物理含义。地址分配也要有规律。比如D区模拟量从D100开始分配M区数字量从M0到M199是输出从M200到M399是输入中间预留扩充段。这样后期增加点位时不会跟已有地址冲突排查问题也能按区段快速定位。4. 7寸屏页面分区与导航逻辑4.1 800x480的三段式布局前面提过三段式布局这里展开讲具体怎么做。打开EB Pro新建工程选择7寸屏型号分辨率自动就是800x480。我画模板的第一步不是拖控件而是先把背景结构搭出来。顶部状态栏是固定不动的放了一个40像素高的矩形区域深蓝色背景。这个区域我放四个东西左侧是当前页面标题文字中间偏左是当前日期和时间右侧是当前登录用户等级最右侧是一个圆形通信状态指示灯绿色表示PLC通信正常红色表示通信断开。状态栏用共用窗口实现也就是所有页面都显示同一份顶部改一处全部生效。底部导航区固定60像素高我放了四个主菜单按钮首页、监控、参数、系统。这四个按钮分别通过切换基本窗口功能跳转到对应页面。主菜单按钮在整个项目中是全局的所以也放在共用窗口里。中间370像素左右是主显示区每个功能页面放置各自的控件。这样用户不管在哪一页顶部信息永远可见底部导航永远可达不会迷路。4.2 窗口编号与页面调用的约定威纶通的窗口管理有基本窗口和公共窗口之分。公共窗口就是前面说的状态栏和导航栏所在窗口所有页面叠加显示。基本窗口则是每一个独立的页面。窗口编号我喜欢按功能模块分段规划。1到10号放系统级页面1号开机画面、2号主菜单、3号用户登录、4号系统参数、5号报警总览、6号历史趋势、7号设备控制总页。10到20号放工艺相关页面20到30号放各设备详细控制页面。这个编号约定在模板里固定下来新项目加页时按模块顺延后期找页面一目了然。关于热词里很多人搜的7号窗口怎么设置其实就是窗口编号的规划问题。我在模板里把7号窗口固定为设备控制总页在公共窗口的菜单按钮里通过切换基本窗口指向7号窗口然后在7号窗口里放置进入各设备控制子页面的快捷按钮。设置方法就是在EB Pro的窗口列表里直接添加窗口给窗口命名然后在按钮属性里设置切换目标窗口编号。4.3 模板里的上一级逻辑没人愿意在一个三级子页面里找不到返回路径。模板里我在每个子页面的左上角固定放一个返回按钮按钮上方返回当前模块的上一级页面而不是直跳首页。比如从7号设备控制总页进入3号泵控制页左上角返回按钮跳回7号页从7号页再返回则跳到2号主菜单。这个逻辑用EB Pro的切换基本窗口可以轻松实现关键是每个返回按钮的跳转目标必须按层级约定配置别图省事全部返回首页操作工用起来会很别扭。在模板固化阶段我会把所有返回按钮按层级逐一设定并检查一遍是否有页面丢失返回入口。检查方法很简单把所有页面按导航层级画成树状图逐个页面看有没有返回上一级和去下一级的出口没有就打补丁。5. 公共元素的一次性资产5.1 状态栏时间、用户、通讯状态一屏搞定状态栏四个元素的实现方式模板里我全部用系统寄存器完成不需要PLC写任何数据。时间日期在EB Pro里直接用系统时间控件属性里勾选显示格式文本内容会自动刷新不需要额外写宏。用户等级显示用LW-9042当前用户等级字寄存器或者直接放一个用户等级标签配合系统登录功能使用。EB Pro支持用户等级设置从等级1到等级9等级越高权限越大。状态栏显示当前登录用户名用系统寄存器LW-9040区域读取。通信状态指示灯的变量我绑定到LW-9500PLC1通讯状态字正常值是0断开时非0。这个寄存器是威纶通系统保留区专门表示各PLC通道的连接状态不需要PLC程序控制。指示灯用多状态指示灯元件0状态显示绿色非0状态显示红色几秒钟自动刷新一次通信断了马上就能看到。5.2 报警条与报警页面报警是工业HMI的标配功能。模板里我做了两层报警展示一层是悬浮在所有页面底部的报警条一层是独立的报警总览页面。报警条放在公共窗口中位置在状态栏下方高度30像素。正常情况下显示当前最新一条报警的文本内容文字颜色红色并闪烁无报警时显示系统运行正常字样绿色。这个效果用EB Pro的报警条元件实现关联报警事件数据库属性里勾选滚动显示最新报警。报警总览页面则是完整的事件登录表格包含报警时间、恢复时间、报警内容、当前状态。历史报警数据默认存储在HMI内部存储器中掉电不丢失。模板里我在系统设置页面加了一个清除报警记录按钮带权限校验只有等级5以上的用户才能操作防止操作工误清。5.3 复用组件怎么做到改一处处处生效公共窗口为什么能成为模板的核心本质是改一处处处生效。状态栏和导航栏放在公共窗口整个项目任何页面调用公共窗口时都会看到同一份内容。需要改导航按钮文字只改公共窗口一个位置所有页面同步更新不需要逐个页面去改。这个思路还能继续延展。比如设备控制页面里有一个通用的电机控制区块包含启动按钮、停止按钮、运行状态灯、故障状态灯这个区块可以做成一个独立的窗口用间接窗口功能在多个页面上引用。EB Pro里比较灵活的做法是做一个电机控制模板窗口在窗口中用索引变量区分控制的到底是几号电机这样10台电机只需要做10个窗口实例复用同一个模板窗口结构。不过要提醒一点间接窗口引用的窗口内容中的所有变量地址在模板窗口本身中已经写死的话无法通过索引动态修改。要实现多台电机复用同一套控件布局且绑定不同地址需要灵活使用索引寄存器功能和地址偏移逻辑这一块建议在模板设计阶段就规划好做起来会更顺。6. 让画面动起来动画、宏指令与数据换算6.1 位状态切换动画的三个使用段位工业触摸屏的动不是花哨的转场而是直接反映设备状态的动态反馈。我惯用的有三个段位第一段是位状态指示灯绑定一个Bit地址0显示灰色1显示绿色这是最基础的状态反馈。比如电机运行信号M200为ON电机图标就变绿OFF就变灰。第二段是数值显示加百分比填充。比如3号罐液位液位值存在D120中范围0到100画面里放一个垂直填充块填充百分比关联D120同时旁边放一个数值显示控件。这样操作工一眼就能看出罐子快满了还是快空了不用读数字。第三段是动画移动。比如皮带输送机的物料流动效果用位移动画绑定一个计数器地址配合循环宏指令让物料图标缓缓移动。这个效果在7寸屏上性能还可以但注意别滥用页面上的动画元件太多会拖慢刷新速度操作工点击按钮感觉卡顿就麻烦了。6.2 宏指令处理线性换算内插法的经典用法HMI拿到的PLC原始数据往往不是工程单位。模拟量模块采集的数值范围是0到4095或者0到27648需要转换到实际的温度、压力、流量值。这个时候就要用宏指令做线性换算也就是工业现场常说的内插法。假设液位变送器输出4到20mA信号PLC读取到的原始整数值范围是800到4000假设量程映射对应实际液位0到100%。在EB Pro中新建一个宏指令用类似这样的脚本macro_command main() short raw float actual GetData(raw, Local HMI, LW, 100, 1) actual (raw - 800) * 100 / (4000 - 800) SetData(actual, Local HMI, LW, 101, 1) end macro_command宏指令按周期执行比如每500毫秒执行一次。实际项目里我在模板中就把常用的线性换算封装成标准宏像4到20mA转工程值0到4095转百分比热电偶毫伏值转温度这些新项目只需要改原始地址段和目标地址段换算公式不用重新写。做换算宏时要特别注意数据类型。GetData拿到的原始数据是short型做减法、乘法时如果不小心溢出结果会是负数或者乱码。我习惯先把原始值转成float再参与运算最后输出到浮点地址中稳妥很多。6.3 心跳位、通讯状态标志位怎么维护HMI和PLC通讯有一个经典问题怎么判断对方还活着HMI自身可以通过LW-9500读取通讯状态但PLC侧也需要判断HMI是否在线这对安全联锁很重要。模板里我在PLC程序中写了一段心跳逻辑用一个定时器每500毫秒把M500翻转一次HMI的画面上绑定M500做成一个闪烁的心跳显示或者在HMI宏里把M3010HMI运行标志位写为ON让PLC读取。当PLC连续几秒没有检测到心跳变化就认为HMI掉线或者通讯中断触发安全停机或者报警提示。实际项目里我还习惯在HMI宏里定期写入一个时间戳到LW寄存器PLC通过读取这个时间戳判断HMI是否还在更新数据。HMI一旦死机或者通讯断开PLC侧很快就知道这是确保现场安全的稳健手段。7. 模板落地时的五个常见坑7.1 工程文件打不开的软件版本陷阱热搜词里威纶通HMI未定义导致无法开启工程文件几乎每个月都有人搜。我总结下来这个问题的来源主要是三种情况第一种是工程文件是由更高版本的EB Pro创建的当前版本打不开。第二种是工程中引用了其他型号的底座文件底版本环境没集成对应机种描述文件。第三种是工程文件损坏下载不完整。应对办法不要在网上随意找来路不明的所谓修复工具和工程恢复工具最稳妥的做法是确认原始软件的版本号安装同版本或更高版本官方软件打开。如果工程文件损坏回忆一下最近一次正常保存是什么时候用EB Pro的自动备份文件恢复。EB Pro在工程属性里可以设置自动备份时间间隔模板项目一定要开启这个功能我一般设成每5分钟自动备份一次备份文件保存在工程目录的Backup文件夹中出问题时恢复成本极低。7.2 仿真按钮无反应EB Pro的离线仿真功能很好用不用连接实物PLC就能模拟画面。但很多人遇到一个典型问题仿真状态下点击按钮没有反应界面不切换变量不变动。这个问题的第一嫌疑是按钮的操作属性没有配置。很多新手拖了按钮元件改了外观文字却忘了在按钮属性里配置操作动作。按钮不是标签必须在操作属性里指定按下时执行的切换窗口动作或者位地址置位动作否则点了就是没反应。第二个嫌疑是变量类型不匹配。比如按钮绑定了一个Word地址但操作方式选的是切换状态针对Bit地址仿真时自然没反应。第三个嫌疑是多状态元件切换时状态数配置错了目标状态号超出范围。排查方法很简单先在工程里检查按钮的操作属性确认有动作然后用离线仿真打开直接窗口查看当前按钮对应的地址值有没有变化如果地址值在变但画面上没反应就是元件的显示属性或者状态关联地址配置出了问题。7.3 7号窗口设置与功能窗口调用错误前面提到7号窗口在模板里作为设备控制总页这里重点讲窗口调用中容易出错的点。在EB Pro中按钮跳转页面的方式有两种一种是切换基本窗口直接替代当前主窗口内容另一种是弹出窗口在当前位置浮出一个子窗口。很多新手分不清两者的区别把弹出窗口当成页面跳转用结果页面叠了一层又一层关都关不掉。模板里的约定是一级页面之间的跳转全部用切换基本窗口参数设置、确认弹窗、子功能列表用弹出窗口。弹出窗口需要设置窗口类型为弹出窗口并且在窗口内提供关闭按钮或者点击空白区关闭功能。7号窗口作为设备控制总页它到子页面之间我用的也是切换基本窗口保持页面层级干净。7.4 中文显示为乱码或字号溢出威纶通工程软件对中文字体的支持总体没问题但有几个坑。一是字体选择不对有些字体不支持中文显示出来是方框乱码。模板里字体固定用宋体或微软雅黑避开英文手写体、花体等特殊字体。二是字库存储空间不足。7寸屏内置字库容量有限如果工程里用了多种字体、多种字号的中文文字编译时可能报字库空间不足。解决办法是统一字体层级减少字号种类模板里固定四种字号就够了不要每页都换一种。三是文字溢出。按钮宽度80像素文字内容却超过5个汉字显示就会被截断。排查时我把所有按钮和标签都过一遍把文字内容长度和控件宽度做匹配检查中文字符宽度按字号大小约等于字号数值16号字一个汉字约16像素需要80像素就至少放得下4个汉字多余的字要想办法精简。7.5 与PLC通讯时好时坏通讯不稳定是现场最磨人的问题。模板能解决的是通讯参数配置的一致性解决不了接线和干扰问题。在模板的说明书里我专门写了一段通讯参数推荐表比如西门子S7-1200的以太网连接方式、三菱FX系列的232BD板通讯格式、Modbus RTU从站地址分配规则等新项目直接对照配置。如果现场出现通讯时好时坏先看HMI和PLC之间的网络连接水晶头有没有松动、屏蔽层是否接地再用EB Pro的在线监控功能查看通讯状态寄存器LW-9500的值稳定为0表示正常偶尔跳非0说明有偶发干扰最后核对通讯参数波特率、数据位、停止位、校验位只要有一项对不上数据就是乱的。另外提醒一下HMI和PLC的站号冲突也是常见原因同一总线上两个设备站号相同通讯就会踩踏。模板里我固定用一套站号规划表HMI站号1PLC站号2变频器站号3仪表站号4起步新增设备时按表分配不随意改动。8. 模板的扩展和维护8.1 多项目复用的正确姿势模板里的所有页面结构和组件布局都面向通用性设计但变量地址必须按项目重新定义。我最常用的方式是把模板工程文件复制一份另存为新项目名称然后只改动以下内容窗口标题文字、变量地址映射、PLC连接配置、配方初始值、用户密码初始值。有一个细节容易被忽略模板中我放了占位用的测试页面和示例变量复用时要清理干净否则编译后工程里会残留大量无用地址和页面既占存储空间也容易被误调用。我在模板文件的页面名称前统一加ZZZ_前缀标记为待删除项新项目保存前先批量删除带这个前缀的页面。8.2 模板文档化代码要有注释UI模板也要有文档。我的模板工程里放了一个专门的工程说明页面页面上写了窗口编号规划表、变量命名规范、地址分配表、通讯参数配置、字体和配色约定、常用宏指令说明。这页面向的是委托你开发项目的维护人员。模板交付时我还会额外附一份Word版的《模板使用说明》内容包括如何新建项目、如何替换页面内容、如何分配新变量地址、如何处理常见报错。这个文档前期花半天写后期省下的沟通成本远超半天。8.3 后续可以加的东西模板做到一定程度后还可以往更高效率的方向扩展。比如威纶通支持配方功能可以把参数设定页面的多组参数用配方数据库管理一键调用和切换配方非常适合注塑机、灌装机这类需要频繁更换工艺参数的产品设备。再比如用户权限的精细化把操作工、班长、工程师、厂家四层权限分别映射到不同页面和按钮上。操作工只能启停设备班长可以修改参数工程师才能进入系统设置厂家维护高等级页面。这套权限矩阵在模板里一次性搭好新项目只需要调整用户名和密码即可。我在实际项目里最满意的改进是把数据导出功能做进了模板。威纶通支持把历史趋势和历史报警数据导出到U盘操作工在系统设置页面插上U盘点一个按钮就把一个班次的生产数据和报警记录全部导出来做报表效率提升很多。这个功能在7寸屏设备上很实用值得做进模板里。模板这东西做一次花功夫用起来就是复利。每次新项目都能站在上一次项目的肩膀上而不是从打地基重新开始。希望这篇文章能帮你少走一些我走过的弯路。