ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

威纶通HMI断电保存:RW寄存器与宏指令实战解析

威纶通HMI断电保存:RW寄存器与宏指令实战解析 做设备调试这些年现场最怕遇到的不是程序逻辑写不出来而是用户一句“怎么一断电参数就全没了”。温度设定、压力上限、计数值辛辛苦苦调了大半天闸刀一拉全回解放前。威纶通HMI的项目里这种问题尤其多因为很多新手习惯把所有中间变量放到LW寄存器里LW属于易失的内存区掉电必丢。其实威纶通早给你留了解决办法RW寄存器配合宏指令就能把关键参数在掉电后留住。RW寄存器不是什么玄学它和PLC里的保持数据差不多但用法有讲究。这篇我从实际项目里扒出来的内容专门讲清楚RW寄存器怎么当“断电保险箱”宏指令怎么写才稳当顺带把最近群里问爆的“hmi(174)未定义导致无法开启工程文件”问题也一并处理掉。做HMI编程、现场设备维护的朋友尤其值得停下来看完。1. 寄存器类型没搞清断电保存就是空谈1.1 先把LB、LW、RW三个概念放一张表里威纶通EBPro里的数据地址按功能分好几个区。LB是位地址代表一个0或1的开关量LW是字地址存放16位的数值量RW也是字地址但用途偏“保持型”底层存储方式不一样。平时操作界面上的数值输入框如果直接指向LW那就等于写在临时内存上断电清零是必然的。我用下面这张表帮助自己记忆寄存器单位掉电后典型用途我的看法LB位丢报警位、按钮按下标志、宏触发开关适合做瞬时信号不适合做长期状态LW字丢画面显示值、运算中间值、报警当前值临时存储最方便但没有断电保障RW字保留配方参数、设定值、开机需要恢复的数据断电保存的主力但要控制写入频率RB位保留配方状态、批处理步骤用得少能用RW字代替就别再开一条线路不同型号的HMI这些寄存器的地址范围可能不太一样动手之前建议先在EBPro的地址表里确认一下当前机型支持多少RW。否则程序做完了才发现RW地址超出范围编译能过运行起来数据却写不进去排查会很费劲。1.2 为什么掉电后LW会“光速清零”HMI上电后不管是画面操作还是宏处理读写LW/LB都发生在内存里。内存的特点就是读写快但依赖供电维持内容供电一断数据跟着清零。RW的存储机制不同HMI内部会把写进RW的数据同步到非易失存储介质上所以断电后数据还在。这也意味着一个很残酷的现实你把一台机器调到最佳状态的工艺参数只要存在LW里就等于寄存在一块临时板上。设备一旦非正常断电操作工第二天过来看到的可能就是一组默认值。更麻烦的是很多设备是带PLC的PLC的保持区没配好或者压根没使能HMI和PLC两头都丢数据这种问题在现场重复出现用户就会觉得你的程序“不稳定”。2. RW寄存器妙用它不是让你随便写的2.1 RW真正适合的业务场景RW最合适的场景是那些“低频变化、但断电后必须记住”的数据。我在项目里主要用它存四类东西设备工艺参数温度设定、压力上限、时间参数、补偿值。生产累计量当日产量、运行时长、完成批次。当前运行状态手动/自动模式、当前配方号、当前流程步骤。用户操作留痕最后一次保存的参数组号、操作人编号。这些数据的特点是不是每秒钟都在变但每一次变化都可能很重要。把它们单独划到RW区上电后由宏自动恢复到LW显示区既保证画面操作流畅又保证断电不丢。2.2 直接让输入框绑RW我劝你冷静有些人知道RW能断电保存以后非常兴奋把画面里数值输入元件的LW地址全部改成RW。这绝对是个坑。RW的写入介质有寿命限制虽然理论上有几十万次擦写但如果现场操作工一天反复调参数几十次HMI一开机又自动写入一次寿命消耗会比你想象中快。另一个问题是你改数值的时候每按一次键都往RW里写宏执行和画面刷新会互相抢时间体感就是画面卡、输入延迟。我的原则很简单**画面和运算层只用LW确认保存时才写RW。**这样RW的写入频率被压到很低数据也安全操作还流畅。2.3 标准套路只有三步HMI上电时启动宏把RW里的备份值读到LW。运行过程中操作、显示、运算全部用LW。需要记住当前状态时由按钮或信号触发宏把LW写进RW。这套三步走的思路逻辑清楚后期维护也省事。因为RW地址规划固定了宏函数也简单换人维护时不容易改出问题。3. 宏指令怎么和RW配合三套可直接抄的写法3.1 宏指令的基本姿势GetData和SetDataEBPro的宏里最常用的就是GetData和SetData。很多人第一次用会搞混参数顺序其实记住一句话就行GetData是把设备地址里的数据读进变量SetData是把变量写进设备地址。macro_command main() short value GetData(value, Local HMI, LW, 0, 1) // 把LW0读入value SetData(value, Local HMI, RW, 0, 1) // 把value写入RW0 end macro_command第一个参数是HMI内部的变量名第二个是设备对象在系统参数里通常叫Local HMI第三个是地址类型第四个是起始地址第五个是读取长度。宏里声明变量时short对应16位整数如果你的数值可能超过32767要改用int或者根据实际精度用float否则数据会溢出。3.2 开机恢复宏解决一上电参数就打回原形我一般会规划一块固定区域专门做断电保存比如RW100开始。每次开机时用启动宏把RW100附近的数据搬到LW显示区。macro_command main() short speed short temperature short alarmTh GetData(speed, Local HMI, RW, 100, 1) GetData(temperature, Local HMI, RW, 101, 1) GetData(alarmTh, Local HMI, RW, 102, 1) SetData(speed, Local HMI, LW, 0, 1) SetData(temperature, Local HMI, LW, 1, 1) SetData(alarmTh, Local HMI, LW, 2, 1) end macro_command这段宏要挂到HMI的启动宏里也就是EBPro里工程属性中的“启动宏”位置。宏执行时先把RW里上次保存的工艺参数读出来然后覆盖到LW显示区画面上的数值元件自然就会显示正确值。注意启动宏执行的时候画面元件可能还没完全刷新完。如果你发现上电瞬间数值闪一下默认值再变成正确值可以在画面切换或者窗口打开宏里再做一次强制刷新从视觉上消除跳变。3.3 手动保存宏点一下保存按钮才写RW出参数设定页面通常需要手动确认比如“保存参数”按钮。这时候用触发式宏把LW的值统一写进RW。macro_command main() short speed short temperature GetData(speed, Local HMI, LW, 0, 1) GetData(temperature, Local HMI, LW, 1, 1) SetData(speed, Local HMI, RW, 100, 1) SetData(temperature, Local HMI, RW, 101, 1) SetData(1, Local HMI, RW, 200, 1) // 写一个保存标志 end macro_command按钮的“触发宏”只选“按下时执行”不要选“释放时执行”更不要用带自锁的按钮否则宏可能被触发两次。保存完成后画面弹一个“保存成功”的小窗口操作工心里才有底。3.4 断电抢写的工程实现到底靠不靠谱经常有人问能不能检测到断电瞬间让宏把LW里最后的值抢写到RW。这个问题要分两层看。HMI不是PLC掉电瞬间留给程序的时间非常短。你在宏里做一堆判断、循环、字符串拼接电没了数据也写了个半截反而更糟。比较可靠的现场方案是在DC24V侧做储能让HMI断电后还能再坚持50到100毫秒同时由PLC或外部电源检测模块给出一个“掉电信号”。HMI检测到这个信号后立即执行一个精简宏把最关键的几个LW地址写入RW。这个宏里只保存真正重要的数据能少写一个字就少写一个字。不要在这个宏里做画面切换不要做报警记录不要遍历所有地址否则抢写窗口很容易浪费在无关操作上。4. 威纶通hmi(174)未定义导致无法开启工程文件的解决办法RW寄存器写得再漂亮工程文件打不开前面全白搭。最近很多人在问这个报错威纶通hmi(174)未定义导致无法开启工程文件。我也踩过这个坑处理起来不算难但思路要对。4.1 报错原因设备编号在当前EBPro版本里“断了线”EBPro保存工程时工程里的HMI型号、PLC驱动都会有一个内部编号。打开工程的时候软件根据编号去自己的设备库找对应定义。如果当前安装的EBPro版本比较低或者设备库里没有编号174对应的型号就会提示“未定义”工程窗口直接卡住。174这个数字看起来像是报错代码但本质上更像一个内部数据库索引。它对应的具体型号在不同版本里可能有差异所以不要死记“174就是某某机型”重点是把设备定义从旧工程迁移到当前软件能识别的状态。4.2 五步处理流程先备份工程文件不要拿着原文件反复折腾。打开EBPro用“打开工程”的方式选择文件不要双击文件。如果当前软件版本太旧先升级EBPro到较新版本再用高版本打开工程。打开后进入系统参数里的HMI属性检查HMI型号是否显示问号如果有就用“替换设备”重新选当前软件支持的对应型号。重新编译工程如果还报174检查宏、报警、资料取样里有没有引用异常地址把异常部分删掉再编译。很多项目的实际原因是别人把工程发过来你电脑上的EBPro版本和原电脑不一致。高版本打开低版本工程一般问题不大但如果低版本打开高版本工程就容易出现这种未定义情况。所以收到工程先问对方用的什么版本再决定自己要不要升级。4.3 避免下次打不开的三条建议第一工程文件名上尽量带版本号比如包装线V2.1.0.emtp发给别人之前先备注EBPro版本。第二不要跨大版本乱升级之后直接回退保存容易把设备定义搞乱。第三项目里用到的HMI型号、驱动型号、EBPro版本写进项目说明文档和设备接线图放一起后期维护能少走很多弯路。5. 现场调试记录RW断电保存的常见坑5.1 现象一开机后画面显示0但RW里明明有值这个问题的原因八成是启动宏没挂上或者启动宏挂的位置不对。宏写好了不代表会自动执行必须到工程属性里确认启动宏已经选中。还有一种可能是HMI的LW区被PLC通过以太网或串口反复写入启动宏刚把RW数据恢复进LWPLC一扫描又把LW覆盖成0。处理办法是先用EBPro的在线模拟看RW里到底有没有值再确认启动宏有没有执行最后检查PLC侧的程序看LW0到LW2是否被外部写入。必要时可以把LW显示区换到PLC不访问的空闲地址彻底避开冲突。5.2 现象二宏里SetData写RW没反应先检查设备对象名是不是写成了别的名字宏里的Local HMI必须和系统参数里的设备名完全一致。然后检查地址类型LW不要写成LW0RW不要写成RW0这是EBPro宏的固定格式起始地址单独传参。最后看你的HMI型号是否支持宏直接读写RW地址个别老型号的配方区需要通过“资料取样”或“配方数据库”访问宏指令不一定能直接操作。5.3 现象三保存按钮按一次数据却跳了两次这个通常不是RW的问题而是按钮触发方式没设好。如果你的按钮用了“切换开关”功能同时又挂了触发宏按下时位状态变了宏也执行了释放时状态再变一次宏又执行一次数据自然会出现二次跳跃。解决方案很简单按钮只用来触发宏不绑定任何位地址宏触发条件只勾选“按下时”。如果确实需要保存成功标志在宏里用SetData写一个专门的RW位不要直接用按钮的开关位。5.4 现象四频繁写RW后HMI明显变慢RW写入会占用底层存储资源如果宏里一次写几十个甚至几百个字HMI处理过程中画面刷新会受影响。尤其是把RW当LW用、每个数值框都直连RW的情况卡顿几乎是必然的。我的做法是把RW写入控制在“用户确认保存”和“断电抢写”两个时机。即使要做定时备份也建议至少间隔一分钟以上并且只写变化过的数据。宏里不要用循环一次遍历大范围RW尽量用连续的SetData按段写入读写效率会高很多。最后再分享一个个人习惯我会把所有RW地址的用途写成一个注释文档比如RW100到RW109是温度参数RW200是保存标志RW300是产量累计。宏脚本里也把注释写全下次维护或者换人接手的时候只要一看注释就知道这个坑是怎么填的。用RW做断电保存硬件本身不复杂真正决定成败的是你对地址规划、写入频率和触发时机的控制。
返回列表