
简介针对工业现场多触摸屏操作冲突问题这份配套资料给出了基于威纶通HMI的两屏互锁完整实现思路适合自动化工程师、电气调试人员参考。核心逻辑围绕操作权切换展开任一侧离开主画面即触发另一侧锁屏被锁屏侧点击“获取操作权”后可重新接管确保同一时刻仅单屏可操作避免误触与数据冲突。压缩包共16个文件以HTML页面、CSS样式、JavaScript下载脚本及二维码文件为主体积仅1.06MB内容为从逻辑说明、步骤分解到EasyBuilder Pro编程要点的整理便于快速理解互锁机制和事件触发设置。已有296人学习下载对正在设计双屏HMI联锁方案或希望规范操作权限管理的开发者有一定参考价值。 两台威纶通触摸屏控制同一台设备听上去无非是加一块屏的事真正在产线上跑过才知道没那么简单。参数画面两边都能进前面的人刚改完配方后面又写了一遍到底谁的最后生效设备还在跑着屏幕互锁做不好操作员在车间里能吵起来。这个需求几乎每个双屏项目都会碰到但网上能查到的完整案例少得可怜。这篇文章把我实际做过的双屏互锁方案拆开讲从选型对比、EBPro组态细节到把锁位改丢的翻车记录一次性说清楚。1. 双触摸屏系统为什么需要互锁先弄清你要锁的是什么1.1 两台屏同控一台设备常见部署场景最典型的场景是一条设备前后各装一台操作屏比如产线中间的某台专机正面是主操作位背面或侧边还有一台给后面工序的人看状态、偶尔操作。两台屏通常连同一台PLC威纶通MT8071iE这类带以太网口的型号走网线直连或者经交换机进PLC都很常见。这种布局的好处是省了操作员来回跑坏处是两个人同时操作同一台设备这件事从概率问题变成了日常。你在这边把参数画面打开准备调节那边也在参数画面里改着同一个数值两边写下去的都是自己的值后写覆盖先写。等到设备动作不对了互相都不知道是对方动过手。1.2 屏幕互锁不是禁止跳页而是防止两个操作员打架屏幕互锁这个叫法容易让人误解成锁住屏幕不让切页面实际要解决的是资源独占某些画面——参数设定、配方编辑、手动调试、软元件强制——同一时刻只允许一台屏进入另一台屏要么弹提示要么只能看不能写。互锁的对象不同做法完全不同。如果只是不想让两台屏同时进入同一画面那叫画面级互锁如果连启动、急停复位、气缸手动点动这类操作都要保证同一时刻只有一边能发出命令那就上升到操作级互锁了。文章后面会讲到这两种级别的可靠性要求和实现成本差很多先别急着写宏把自己要锁的东西列清楚。1.3 互锁的需求边界只锁该锁的别锁监视画面我的建议是互锁范围宁窄勿宽。主画面、状态监视、报警列表这类只读画面不需要锁锁了反而让另一侧的操作员每次切页都被弹回几分钟后就会有人骂娘。真正需要锁的是会写PLC数据的、发表单的、动工艺参数的画面。另外要考虑等待体验。操作员在A屏占用参数画面B屏的操作员点了同一个入口如果只是按钮没反应他大概率会认为是触摸屏失灵又要喊你过来看。一定要有明确的提示告诉他对面正在操作参数画面。这一条在设计互锁提示时会反复提到。2. 互锁方案三选一PLC信号量、HMI直连与PLC仲裁2.1 方案APLC寄存器当信号量最简单也最常用两台屏都连同一台PLC那就直接在PLC里开一个寄存器当信号量。比如参数画面用D100约定0代表空闲1代表1号屏占用2代表2号屏占用。A屏进入参数画面之前先读D100是0就写1再切屏B屏同样先读D100是0就写2再切屏。谁先进去另一个就被挡在外面。退出画面时把D100写回0。这个方案不增加任何硬件逻辑直观PLC扫描周期本来就是毫秒级双屏之间感知占用状态基本上感觉不到延迟。它的缺点是检查和置位不是原子操作。两边同时读到0、同时写入理论上存在双双进入的极小概率。对画面级互锁来说这个概率在真实操作中基本可以接受但如果是安全相关的操作互锁这个方案就不够了。2.2 方案BHMI之间直连不占用PLC资源如果不方便在PLC里开寄存器——比如PLC程序是设备厂家加密的、或者不想动原程序——可以让其中一台威纶通触摸屏做MODBUS TCP服务器把本地LW地址映射出去另一台屏作为MODBUS TCP客户端读取对方的LW状态。威纶通EBPro工程里自带MODBUS服务器功能把HMI的LW0映射成保持寄存器40001另一台屏就能像读一台普通MODBUS从站一样读到这个字。这种方案的优势是完全不动PLC纯组态层面解决劣势是依赖两台屏之间以太网通讯如果网线断了、某台屏重启了互锁就不可靠了。2.3 方案CPLC梯形图统一仲裁适合安全相关操作画面级互锁用方案A就够但涉及安全相关的操作互锁我会把仲裁逻辑写进PLC梯形图。具体做法是HMI侧的按钮不再直接置位输出而是发一个请求位PLC收到后在梯形图里做判断——如果当前没有另一侧正在执行同类操作才给出允许位并保持否则把请求清掉。这样哪怕两个操作员在同一毫秒按下按钮PLC按扫描周期顺序处理也只会有一个请求被响应不存在方案A那种同时写入的竞态。代价是PLC程序多写几行逻辑调试周期长一点。设备停机的风险高不高决定了你要不要上这个方案。2.4 三种方案的选型对照对比项方案APLC信号量方案BHMI直连方案CPLC仲裁实现难度低中中高是否改PLC程序只需加寄存器不动逻辑完全不改需要写仲裁逻辑竞态风险极小但存在较高无通讯中断影响取决于PLC本身互锁直接失效失效但可按安全策略处理适用场景画面级互锁常规操作客户不让动PLC程序安全相关操作、联锁要求高3. 方案A落地MT8071iE与S7-200 SMART的参数页互锁全流程3.1 组态前的IP规划与端口确认以两台MT8071iE加一台西门子S7-200 SMART为例。MT8071iE背后就一个RJ45以太网口两个COM口COM1走RS232COM2走RS485/RS422做互锁走以太网最省事PLC、交换机、两台屏都配到192.168.1.x同一网段。我习惯这样分PLC占192.168.1.11号屏192.168.1.102号屏192.168.1.11子网掩码255.255.255.0。在同一台交换机下跑互锁通讯速度不是问题。EBPro组态时两台HMI工程里都要新增设备选S7-200 SMART驱动填上PLC的IP地址站号按驱动要求设置。这里提醒一句如果现场走的是WiFi或者跨交换机互锁的实时性会变差。屏幕互锁的占用判定一般要求秒级以内但操作互锁必须用有线以太网别迷信无线。3.2 在EBPro里建好占用标志位打开EasyBuilder Pro新建两个工程先在两台屏各自的工程里建立相同的PLC标签。PLC设备建好后新建一个16位字地址标签名字叫参数页占用地址指向S7-200 SMART的D100。再建一个位标签互锁提示地址用M10.0给提示弹窗用。软件版本我用的V6.08.02.702不同版本界面略有差异但设备表和标签的入口都差不多。D100在S7-200 SMART里默认不是掉电保持的这正好符合我们想要的行为设备断电重启后互锁自动释放不会出现屏A停机后屏B永远进不去的情况。当然如果你的工艺要求断电能保持谁占用的状态那就在系统块里把D100设成保持区这个要看现场需求。3.3 窗口打开/关闭宏占位与释放核心逻辑写在画面的窗口宏里。以1号屏的参数画面为例假设这个画面在工程里的窗口编号是5打开宏里写// 进入参数画面置位占用标志 short v; GetData(v, PLC, D100, 1); // 读当前占用状态 if (v 0) // 空闲才置位 { SetData(1, PLC, D100, 1); }2号屏的同一个参数画面打开宏逻辑完全一样只是把置位值从1改成2表示2号屏占用。关闭宏才是重点。在窗口属性里找到关闭时宏写// 离开参数画面释放占用标志 SetData(0, PLC, D100, 1);关键点来了EBPro的窗口关闭宏无论这个窗口是通过返回按钮关闭的还是通过其他窗口切换顶掉的都会被触发。也就是说只要画面设计了关闭宏释放逻辑基本能兜住不容易出现进去出不来的永久锁死。前提是你在窗口属性的宏设置里确实把关闭时这个宏挂上了这一步最容易漏。3.4 导航按钮的检测逻辑与提示窗口光有窗口打开宏还不够操作员在B屏按参数画面按钮时应该立刻知道他进不去而不是画面闪一下又被弹回来。所以在导航按钮上再挂一个按下宏先检查再决定是否切屏// 导航按钮检查占用空闲才允许进 short v; GetData(v, PLC, D100, 1); if (v 0) { OpenWindow(5); // 打开参数画面 } else { SetData(1, 本机, LW9000, 1); // 触发提示弹窗 }提示弹窗的做法是用间接窗口。在基础画面上放一个间接窗口对象控制地址设为本机LW9000再单独做一个小窗口内容是另一侧正在操作参数画面请稍候。LW9000被置1时小窗口弹出来置0时消失。为了让操作员看清楚小窗口务必做成不透明、带边框的模态提示点任意空白处或加个确认按钮把LW9000清掉。这里注意本机这个设备名中文版EBPro有时叫本机英文版叫Local HMI以你工程里实际的本地节点名为准。LW是断电即失的掉电内存用来做提示这类非安全用途正合适。4. 方案B落地不占PLC资源的HMI直连互锁4.1 主机屏开MODBUS TCP服务器并映射LW客户不让你动PLC程序的时候方案B就是救命稻草。把1号屏作为MODBUS TCP服务器把自己的LW0映射成保持寄存器400012号屏作为客户端去读这个寄存器。在1号屏的EBPro工程里系统参数-设备列表-新增设备制造商选MODBUS设备类型选MODBUS TCP Server绑定本地以太网口。然后在服务器的地址映射表里把LW0对应到保持寄存器40001。保存后编译下载到1号屏它就开始对外提供MODBUS服务了从外部看就是一台站号1、IP为192.168.1.10的MODBUS从站。4.2 从机屏添加客户端设备与远程标签在2号屏的工程里同样新增设备这次选MODBUS TCP目标IP填192.168.1.10端口默认502站号为1。建一个标签叫对方占用字地址填4000116位字格式。这样2号屏的宏里就能直接读写1号屏的LW0了。要注意威纶通HMI做MODBUS服务器时LW映射的寄存器偏移规则和具体型号有关MT8071iE这类比较常规的型号LW0就是40001LW1是40002。下载前可以用MODBUS调试工具先读一遍验证别等联调时才发现地址对不上这一步花五分钟能省半天。4.3 双向互斥的占位写法与抢占处理单向占位好写双向互斥要小心。约定1号屏占用自己的LW02号屏占用自己的LW1。1号屏进参数画面时宏里先把自己的LW0置1再去读2号屏的LW1如果LW1是0说明对方没占用正常进入如果LW1是1说明对方已经占用了把自己LW0清回0同时弹提示。// 1号屏进入参数画面前的互斥检查 short peer; SetData(1, 本机, LW0, 1); // 先宣告自己占用 GetData(peer, MODBUS TCP, 远程占用字, 1); // 读对方LW1 if (peer 0) { OpenWindow(5); } else { SetData(0, 本机, LW0, 1); // 对方占用撤回宣告 SetData(1, 本机, LW9000, 1); // 弹提示 }先置自己的位再查对方的位这个顺序是故意设计的它能把两台屏同时进入的概率压到最低。但极端情况下两边同时置位、同时读到对方也是1结果就是两边都撤回、都不进操作员再按一次就行这叫活锁变重试虽然体验一般但不会出现两边同时进去的危险状态。如果你想让体验更好一点可以约定固定优先级比如IP地址较小的屏在冲突时强制等待500ms后自动重试进入另一台屏直接弹提示。这个规则要写进宏里并且要在现场和操作员讲清楚不然两边同时按只有一侧能进另一侧会以为屏坏了。5. 真正让人翻车的不是组态而是这些边界场景5.1 宏的执行时机按钮宏先跑还是窗口宏先跑EBPro的宏触发时机有很多坑。导航按钮上的按下宏是在手指松开那一刻执行的而窗口打开宏是在窗口真正切过去之后才执行。按钮宏里OpenWindow(5)先执行切屏完成后再触发5号窗口的打开宏。所以按钮宏负责检查并置位打开宏负责任何途径进入该窗口时兜底置位这个职责划分要想清楚。我见过有人把置位写在按钮宏里结果操作员不是按按钮进去的而是通过窗口切换、间接窗口等方式进到参数画面占用位根本没置上互锁形同虚设。兜底逻辑必须放在窗口打开宏才能覆盖所有路径。5.2 占位标志释放不干净导致的死锁方案A有个经典翻车场景1号屏的占位宏和释放宏都写在按钮上操作员在参数画面里直接断电关机按钮的释放宏根本没机会执行D100一直停在1。等1号屏重新开机2号屏再看D100还是1永久锁死只能手动复位PLC寄存器。解决办法是双保险释放逻辑放到窗口关闭宏里同时占位值写一个超时判断。比如在PLC里加一个定时器D100置位超过10分钟自动清零。参数画面这种操作10分钟足够完成一次修改超时清零不会误伤正常使用但能救回大部分异常场景。5.3 通讯中断、屏断电重启时的互锁行为方案B的互锁状态存在HMI的LW里LW是易失的屏重启后自动清零从锁死的角度看反而是好事。但这里有个更严重的问题如果2号屏读取1号屏时通讯超时GetData返回失败你宏里读到的值是不可信的。我的处理原则是互锁判断时GetData执行要检查返回值失败时一律按对方可能正在操作处理不允许进参数画面。宁可误报一次也不能在通讯异常的时候双屏同时进去。这在写宏的时候要多写几行short peer, ret; ret GetData(peer, MODBUS TCP, 远程占用字, 1); if (ret 0) // 读取失败按占用处理 { SetData(1, 本机, LW9000, 1); return; }5.4 双人同时点击的竞态处理前面说了方案A存在理论上的竞态窗口现场真实测一下就知道两个操作员同时按下按钮的间隔一般在几十毫秒以上而PLC一个扫描周期只要几毫秒方案A在实际操作中很难撞上。但你要是不放心或者这台设备涉及人身安全那就直接把方案C搬出来PLC梯形图里做请求/应答仲裁两个HMI侧只发请求、不直接置位执行标志。PLC梯形图仲裁还有个好处操作记录、报警联动都在PLC侧统一处理后续排查问题不用翻两套屏的程序。6. 联调验收与生产环境里的使用经验6.1 模拟器能测什么、不能测什么EBPro自带的离线模拟能跑单个工程的宏逻辑但双屏互锁这种需要两台屏在线的场景模拟器只能帮你验证单屏侧的宏语法和弹窗逻辑。真正常见的故障——通讯超时、体会不执行、LW掉电变化——模拟器统统测不出来。这台屏的MODBUS服务器功能模拟器也能开但和实物屏的端口占用、映射行为有差别别省这一步直接在实物上联调。6.2 联调流程从单屏到双屏的测试顺序我的习惯是先在单屏上把打开宏、关闭宏、提示弹窗都过一遍确认没有占位不释放、弹窗不消失的问题再做双屏联调。具体顺序是1号屏进入参数画面确认D100变成12号屏按同一导航按钮确认弹提示、画面不切换1号屏退出参数画面确认D100变成02号屏再进入确认D100变成21号屏此时尝试进入确认被挡拔掉2号屏网线1号屏尝试进入确认行为符合预期1号屏在参数画面里断电重启恢复后确认2号屏没有被锁死。整套走完没问题再放到车间里让操作员实际用两天我一般还会在验收前一天故意制造几次双人抢按观察现场反馈。6.3 验收清单和我踩过的几个坑最后整理一份我在现场验收用的清单占位标志是否随画面打开和关闭稳定变化非占用侧进入是否有明确提示通讯中断时是否安全可靠地拦截屏断电重启后能否自动恢复提示文案操作员一眼能看懂设备要出口的提示文案做进威纶通的多语言切换功能里别写死在画面上。第一次做双屏互锁时我把占位位写在了屏自己的本地LW里结果没同步到PLC一台屏重启后另一台被锁得死死的车间里设备停了十分钟那台屏的程序被我反复重下了好几遍。后来统一改成PLC里做信号量才彻底消停。再分享一个小技巧给每台屏在提示信息里显示自己的编号1号屏正在操作参数画面和2号屏正在操作参数画面写清楚。操作员看到是哪一边占用的直接对讲机喊一句就行省得两个人隔着设备猜来猜去。本文还有配套的精品资源点击获取