1. 项目概述:基于S7-1200的智能交通灯控制系统
去年在工业区做自动化改造时,接了个交通灯控制的项目。用西门子S7-1200 PLC搭配KTP700触摸屏,在博途V15环境下开发,整个系统从硬件配置到软件调试用了三天搞定。最核心的部分是通过比较指令实现多时段控制逻辑,触摸屏上还能实时调整红绿灯时长。这种方案比传统继电器控制稳定多了,故障率直接降了90%。
这个系统特别适合用在厂区内部道路、物流园区等需要灵活调整信号灯的场景。相比市面上的成品交通控制器,PLC方案有三个明显优势:一是编程自由度大,可以按实际需求定制逻辑;二是后期维护方便,直接通过触摸屏就能修改参数;三是成本可控,用最基础的1200系列PLC就能满足要求。
2. 硬件配置与软件环境
2.1 核心设备选型
我用的这套配置经过多次项目验证,性价比最高:
- PLC:西门子S7-1214C DC/DC/DC(6ES7 214-1AG40-0XB0)
- 选这款是因为它有14点数字量输出,刚好满足十字路口12个信号灯(东西南北各3灯)控制需求
- 自带2个通信口,一个接触摸屏,一个预留用于上位机监控
- 触摸屏:KTP700 Basic(6AV2 123-2GB03-0AX0)
- 7寸屏足够显示所有信号状态和参数设置界面
- 支持Profinet通信,与S7-1200即插即用
- 信号灯:选用24V LED交通信号灯组
- 每组含红黄绿三色,带铝合金防护罩
- 每盏灯功率约5W,PLC输出直接驱动中间继电器控制
2.2 软件环境搭建
博途V15的安装有几个关键点要注意:
- 务必关闭所有杀毒软件再安装,否则可能卡在.NET框架安装环节
- 安装路径不要有中文,建议直接默认路径
- 安装完成后先升级到最新补丁包(当时用的是V15.1 Update5)
- 首次打开时要选择"新建项目",勾选"S7-1200"和"WinCC"组件
重要提示:博途V15不支持Windows 11系统,如果用的是新电脑,建议装V17版本。不过V15对S7-1200的支持最稳定,项目紧急时还是建议用Win10系统。
3. PLC程序设计详解
3.1 信号灯时序逻辑设计
十字路口的典型控制时序如下表:
| 相位 |
东西方向 |
南北方向 |
持续时间(s) |
| 1 |
绿灯 |
红灯 |
30 |
| 2 |
黄灯 |
红灯 |
5 |
| 3 |
红灯 |
绿灯 |
25 |
| 4 |
红灯 |
黄灯 |
5 |
实现这个逻辑的核心是使用比较指令配合定时器。具体步骤:
- 在OB1主循环中放置TON定时器(我用的DB1.DBD0存储当前时间值)
- 用MOV指令将定时器当前值传送到MW100
- 通过CMP比较指令判断时间范围:
STL复制L MW100
L 300 // 30秒
<I
= Q0.0 // 东西绿灯
L MW100
L 300
>=I
L 350 // 30+5秒
<I
= Q0.1 // 东西黄灯
- 南北方向逻辑同理,注意时间偏移量
3.2 多时段控制实现
实际项目中经常需要分时段调整红绿灯时长,比如:
- 早高峰(7:00-9:00):东西向绿灯延长至40秒
- 晚高峰(17:00-19:00):南北向绿灯延长至35秒
- 夜间模式(22:00-6:00):切换为黄灯闪烁
实现方法:
- 在DB块中创建时段参数数组:
SCL复制"TimeSettings".MorningStart := 7.0;
"TimeSettings".MorningEnd := 9.0;
"TimeSettings".EveningStart := 17.0;
"TimeSettings".EveningEnd := 19.0;
- 用S7-1200的系统时钟指令读取当前时间(RD_LOC_T)
- 通过比较指令判断当前所处时段
- 根据时段选择不同的定时器预设值
4. 触摸屏界面开发技巧
4.1 基本画面布局
KTP700的界面设计有几个实用技巧:
- 状态显示区:顶部20%区域用交通灯实际造型的图形控件,颜色绑定PLC变量
- 红灯:Q0.2(东西)和Q0.5(南北)
- 绿灯:Q0.0和Q0.3
- 黄灯:Q0.1和Q0.4
- 参数设置区:中间部分放置数值输入框,关联DB块中的时间参数
- 操作按钮区:底部放置"自动/手动"切换按钮和紧急停止按钮
4.2 高级功能实现
-
密码保护:
- 在用户管理中设置3级权限
- 关键参数修改需要输入操作员密码
- 用"Area Pointer"功能限制不同用户的可见区域
-
趋势图显示:
- 添加一个趋势视图控件
- 绑定定时器当前值变量
- 设置X轴为0-65秒(一个完整周期)
-
报警记录:
- 配置报警文本:"东西向绿灯故障"
- 触发条件:Q0.0=1但电流检测信号=0
- 报警级别设置为"Error"
5. 现场调试经验分享
5.1 PLC程序调试
调试时最容易出问题的几个点:
- 定时器不工作:检查TON指令的EN端是否持续得电
- 输出点不动作:先强制输出测试硬件是否正常
- 比较指令失效:注意数据类型要一致(都是INT或都是DINT)
我的调试步骤一般是:
- 先用PLCSIM Advanced做基本逻辑测试
- 连接真实PLC后,先单步执行观察变量变化
- 最后整体运行时用Trace功能抓取关键变量波形
5.2 触摸屏联调
常见问题及解决方法:
- 通信连接失败:
- 检查IP地址设置(PLC和HMI要在同一网段)
- Profinet名称要正确(在博途的网络视图中配置)
- 变量不更新:
- 检查变量地址是否正确
- 确认通信周期设置(默认1s可能不够,可改为500ms)
- 画面切换卡顿:
- 减少同时显示的图形数量
- 压缩图片资源(用PNG格式替代BMP)
6. 系统优化与扩展
6.1 性能优化建议
-
程序结构优化:
- 将时序逻辑封装到FB功能块中
- 使用SCL语言编写复杂判断逻辑
- 添加注释块说明各段程序功能
-
通信优化:
- 设置合理的通信周期(非关键变量可设为2s更新一次)
- 启用通信压缩功能(在HMI连接属性中设置)
6.2 功能扩展方向
这个基础框架还可以扩展:
- 车流量检测:加装地感线圈,通过DI点输入,自动调整绿灯时长
- 远程监控:通过S7-1200的Web服务器功能实现手机查看
- 故障自诊断:添加输出电流检测,发现灯组故障自动报警
实际项目中我在PLC程序里预留了这些扩展接口,只需要在DB块中添加对应变量即可。比如车流量检测的计数器变量"TrafficFlow_East"已经定义好,后续加装传感器后直接关联就行。