如何在CX-Programmer中用梯形逻辑实现PLC三速度输入互斥功能?
解决HMI多速度选择的单选互斥问题
HMI端直接实现单选互斥
- 把三个Speed按钮放进同一个单选组(Radio Group):绝大多数HMI组态工具(WinCC、TIA Portal、iFix这类)都自带单选组控件,把Speed1、Speed2、Speed3加进去,默认就会自动实现“选一个就取消另外两个”的效果,这是最简单的方案。
- 要是没法用单选组,就手动写按钮点击脚本:
- 拿TIA Portal举例,给Speed1加点击事件:
' 点Speed1时,强制取消另外两个的选中状态 HMI_Speed2.Checked = False HMI_Speed3.Checked = False HMI_Speed1.Checked = True ' 同步把选择结果写到PLC变量里 SetTag "PLC_Speed_Select", 1 - Speed2和Speed3的脚本照葫芦画瓢,把对应的选中状态和变量值改了就行(比如Speed2对应2,Speed3对应3)。
- 拿TIA Portal举例,给Speed1加点击事件:
PLC层加双重保障(防HMI异常)
- 写一段单选判断逻辑,就算HMI端出问题传了多选中信号,PLC也能自动修正成唯一选择:
// 假设Speed1、Speed2、Speed3是HMI传过来的BOOL变量 // 先初始化最终选中的速度编号 L 0 T "Final_Speed_Select" // 检测Speed1选中的情况 A "Speed1" JNB _001 L 1 T "Final_Speed_Select" // 强制取消另外两个信号 SET R "Speed2" R "Speed3" _001: NOP 0 // 检测Speed2选中的情况 A "Speed2" JNB _002 L 2 T "Final_Speed_Select" SET R "Speed1" R "Speed3" _002: NOP 0 // 检测Speed3选中的情况 A "Speed3" JNB _003 L 3 T "Final_Speed_Select" SET R "Speed1" R "Speed2" _003: NOP 0 // 后面的二进制输出逻辑只认Final_Speed_Select的值 - 这样不仅能保证逻辑正确,还能把修正后的状态同步回HMI,让界面显示和实际PLC逻辑保持一致。
替换原错误系统的被动逻辑
- 别再用“选多个就不执行输出”的被动处理了,改成主动阻止多选中:
- 在HMI加个状态提示框,脚本实时判断三个按钮的选中状态,一旦发现多个选中,直接弹出提示并自动取消多余的选中项,用户体验更直观。
内容的提问来源于stack exchange,提问作者Jasper
相关产品推荐
相关产品推荐

