基于博途1200PLC+HMI交通灯/红绿灯控制系统仿真 程序: 1、任务:PLC.人机界面控制交通灯 2、系统说明: 系统设有手动模式、自动模式、时钟读取、时钟设置、时钟分段模式、故障模拟模式、时段数据显示等可选择模式运行 交通灯博途仿真工程配套有博途PLC程序+IO点表+PLC接线图+主电路图+控制流程图, 交通灯训练任务指导书(仅供参考,不与仿真程序配套)。 博途V16+HMI 可直接模拟运行 程序简洁、精炼,注释详细
十字路口的红绿灯控制看起来简单,实际要考虑的工况比想象中复杂得多。最近用博途V16给西门子1200PLC做了一套交通灯仿真系统,支持六种运行模式,HMI界面直接能玩转各种骚操作。
手动模式最带劲
直接上硬核代码,看看怎么用SCL实现点动控制:
// HMI按钮触发手动模式 IF "HMI_Manual_Mode" THEN CASE "HMI_Manual_Select" OF 1: // 南北直行红 "NS_Straight_Red" := TRUE; 2: // 东西左转绿闪 "WE_Left_Green" := NOT "WE_Left_Green"; TON("Flash_Timer", T#500MS); END_CASE; END_IF;这段代码的精髓在于绿色闪烁的实现——用定时器做500ms周期翻转,比起用系统时钟更稳定。HMI上设置选择开关对应不同场景,调试时特别方便。
自动模式藏着时间玄机
核心逻辑用GRAPH语言编写,时序控制一目了然:
// 交通灯阶段转换 ACTION Phase1: "NS_Straight_Green" := 1; "WE_Straight_Red" := 1; TON("Phase1_Timer", T#30S); END_ACTION每个阶段配独立定时器,HMI里直接能改时间参数。实测发现定时器预设值超过120秒会导致PLC扫描周期报警,这个坑得特别注意。
时钟分段模式玩真的
系统读取PLC内部时钟自动切换时段:
// 读取RTC时间 "ReadClock"(REQ := "Clock_Read_Trig", NDR => , ERROR => , YEAR => , MONTH => , DAY => , HOUR => CurrentHour); // 时段判断 IF CurrentHour >= 6 AND CurrentHour <22 THEN "Day_Mode" := TRUE; ELSE "Night_Mode" := TRUE; END_IF;这里用了系统自带的时钟读取功能块,HMI上同步显示当前时间。夜间模式会自动延长黄灯时间,实测发现时区设置错误会导致时段判断翻车。
故障模拟最刺激
触发信号闪烁故障的代码有点意思:
// 模拟信号灯故障 IF "Fault_Sim_Enable" THEN "NS_Straight_Red" := "Fault_NS_Red"; "WE_Left_Green" := "Fault_WE_Green" & S_PULSE; END_IF;S_PULSE是自定义的1Hz脉冲发生器,模拟灯光频闪效果。HMI上的故障复位按钮联动所有输出强制复位,这个功能在联机调试时救过我的命。
整套程序IO表只用了32个点,OB1里塞了五个FB块。最骚的是控制流程图用Visio重绘后,发现和PLC程序扫描顺序完全吻合——这说明结构优化到位了。想要源码的兄弟可以去工控论坛搜关键词"TIA Traffic Light",记得用V16以上版本打开,仿真时建议关闭电脑杀毒软件,博途有时候会误报系统文件。