No.103.基于博途的PLC三种模式通行时间可调的复杂路口交通灯程序设计与仿真,带登录系统登...
No.103.基于博途的PLC三种模式通行时间可调的复杂路口交通灯程序设计与仿真,带登录系统登录、监控、倒计时是数码管,非计数器显示
老铁们今天带大家整点硬核的——用博途V17搞个能调三种通行模式的路口交通灯,带用户登录和数码管倒计时的那种。这玩意儿可比学校实训课的小红绿灯带劲多了,咱们直接上实战!
No.103.基于博途的PLC三种模式通行时间可调的复杂路口交通灯程序设计与仿真,带登录系统登录、监控、倒计时是数码管,非计数器显示
先说说登录系统怎么玩的。在HMI画面上做了个九宫格键盘,操作工得输6位工号+动态密码(别问为啥不是指纹识别,甲方爸爸给的预算就够买五个按钮)。PLC这边用了个骚操作——DB块里存了32组账号密码,验证的时候直接玩数组索引:
IF "登录按钮" THEN FOR #i := 0 TO 31 DO IF "用户DB".账号[#i] = #输入账号 AND "用户DB".密码[#i] = #输入密码 THEN "登录状态" := TRUE; EXIT; END_IF; END_FOR; END_IF;重点来了!三种通行模式切换才是精髓。在FB300功能块里塞了个模式选择器,早高峰模式给南北方向疯狂加时到60秒,平峰模式自动切45秒,晚高峰则是东西方向王者。关键代码长这样:
CASE "当前模式" OF 1: // 早高峰 #南北绿灯时间 := T#60s; #东西绿灯时间 := T#30s; 2: // 平峰 #南北绿灯时间 := T#45s; #东西绿灯时间 := T#45s; 3: // 晚高峰 #南北绿灯时间 := T#30s; #东西绿灯时间 := T#60s; END_CASE;数码管倒计时显示坑最多!用S7-1200的PLC_1秒脉冲配合移位寄存器搞事情。注意这里不能用普通计数器,得把剩余时间转成BCD码输出到QB区域。举个栗子:
// 南北方向倒计时处理 "南北剩余时间" := "南北绿灯时间" - "南北定时器".ET; "数码管输出" := INT_TO_BCD("南北剩余时间") << 8 | INT_TO_BCD("东西剩余时间");监控画面更是骚操作连发。用WinCC画了四个方向的灯组仿真,实时显示倒计时数值。重点是要在PLC里做状态互锁——黄灯亮的时候要是检测到两个方向都绿灯,直接触发紧急停车模式,这个用了个异或判断:
IF ("南北绿灯" AND "东西绿灯") THEN "故障标志" := TRUE; // 双绿报警 // 强制切全红模式 "全红定时器".IN := TRUE; END_IF;仿真时发现个鬼畜现象:模式切换瞬间如果刚好在黄灯期,倒计时会抽风。解决办法是在模式切换指令后面插了个立即输出的指令,再配合中断OB块处理状态同步。实测下来反应速度从原来的2秒缩短到200ms以内,稳如老狗。
最后说个隐藏功能:长按HMI上的模式键5秒能进工程师菜单,可以微调各个模式的基准时间。这个在程序里用了个累加定时器配合边沿检测,代码看起来像这样:
IF "模式按键" THEN "长按计时器".IN := TRUE; ELSE "长按计时器".IN := FALSE; END_IF; IF "长按计时器".Q AND NOT "上次长按状态" THEN "工程师模式" := NOT "工程师模式"; END_IF;这个项目最爽的是用PLCSIM Advanced搞联合仿真,看着虚拟路口车流跟着PLC程序走,比玩模拟城市还有成就感。下次考虑加个公交车优先通行功能,有搞过的老铁欢迎评论区唠唠!
