1. 项目概述:PLC+HMI广告屏流水灯控制系统
这个项目是我当年学习西门子S7-1200 PLC和精智HMI时啃过的经典案例,特别适合刚接触博途软件的新手练手。它用PLC控制广告屏的灯光效果,中间7个霓虹灯字循环点亮,四周24个流水灯分组流动,通过HMI界面可以实时控制启停和调节速度。
提示:这个项目的最大优势是可以在博途V16中完全仿真运行,不需要实际硬件设备,特别适合自学PLC的小伙伴在家练习。
我在实际开发过程中,整理了完整的工程文件包,包含:
- 博途V16工程文件(PLC程序+HMI界面)
- IO点表与接线图
- 主电路图与控制流程图
- 详细的操作指导书
2. 系统设计与硬件配置
2.1 系统架构设计
整个系统采用典型的PLC+HMI架构:
- PLC部分:负责逻辑控制,处理输入信号,控制输出点
- HMI部分:提供人机交互界面,可以启停系统、调节速度
- 仿真环境:在博途软件中模拟实际硬件运行
2.2 IO分配表
我设计了一个简洁高效的IO分配方案:
| 输入点 | 功能说明 |
|---|---|
| I0.0 | 启动按钮 |
| I0.1 | 停止按钮 |
| 输出点 | 功能说明 |
|---|---|
| Q0.0~Q0.6 | 控制中间7个霓虹灯字 |
| Q1.0~Q3.7 | 控制四周24个流水灯(6组×4个) |
这样分配有几个好处:
- 中间7个字正好占用一个字节(QB0)的低7位
- 24个流水灯刚好占满3个字节(QB1~QB3)
- 地址连续,便于使用移位指令统一控制
2.3 定时器配置
为了实现灯光的不同速度效果,我配置了两个定时器:
| 定时器 | 预设值 | 控制对象 | 效果说明 |
|---|---|---|---|
| T0 | 200ms | 中间7个霓虹灯 | 切换速度较慢,更醒目 |
| T1 | 100ms | 四周24个流水灯 | 切换速度较快,有流动感 |
注意:定时器预设值在HMI界面可调,范围建议设为50-500ms,调试时可以直接看到效果变化。
3. PLC程序设计详解
3.1 主控制逻辑
我用梯形图(LAD)编写了PLC程序,这是最直观的PLC编程语言,特别适合初学者理解。程序主要分为以下几个网络:
3.1.1 启动停止联锁控制
lad复制// Network 1: 启动停止联锁
A "启动按钮"(I0.0) // 检测启动按钮
FP M0.0 // 上升沿检测
= "运行标志位"(M0.1) // 置位运行标志
A "停止按钮"(I0.1) // 检测停止按钮
FP M0.0
R "运行标志位"(M0.1, 1) // 复位运行标志
这个网络实现了:
- 按下启动按钮(I0.0)时,置位运行标志(M0.1)
- 按下停止按钮(I0.1)时,复位运行标志
- 使用上升沿检测(FP),确保按钮按下时只触发一次
3.1.2 中间字灯控制
lad复制// Network 2: 中间字循环定时触发
TON "字灯定时"(T0, 200) // 200ms定时
A "运行标志位"(M0.1)
FP "字灯移位触发"(M0.2)
// Network 3: 中间7字循环移位
L "字灯移位触发"(M0.2)
CALL SHR_BYTE, "中间字状态字节"(QB0) // 右移QB0的低7位
A "运行标志位"(M0.1)
FP M0.3
JNB _001
T 2#0000001, QB0 // 初始只亮第一个字灯
_001: NOP 0
这部分实现了:
- 每200ms触发一次移位(SHR_BYTE)
- QB0的低7位控制7个霓虹灯,每次右移一位
- 当移到最后一位时,重新初始化只亮第一个灯
3.1.3 四周流水灯控制
lad复制// Network 4: 流水灯定时触发
TON "流水灯定时"(T1, 100) // 100ms定时
A "运行标志位"(M0.1)
FP "流水灯移位触发"(M0.4)
// Network 5: 24位流水灯循环移位
L "流水灯移位触发"(M0.4)
CALL ROL_DWORD, "流水灯状态双字"(MD10, 24) // 循环左移24位
T "流水灯状态双字"(MD10), QB1_QB3 // 赋值给Q1-Q3
这部分的特点是:
- 使用双字(MD10)的低24位存储所有流水灯状态
- 循环左移指令(ROL_DWORD)实现灯光流动效果
- 每100ms移位一次,比字灯快,形成层次感
3.2 程序设计技巧
在实际编程中,我总结了几点重要经验:
-
定时器分开使用:最初我错误地共用一个定时器,导致所有灯同步闪烁,效果很差。分开使用两个定时器后,灯光效果更有层次。
-
使用双字移位:对于24个流水灯,如果单独控制每组会很麻烦。使用双字移位可以一次性处理所有灯的状态,代码更简洁。
-
合理注释:每个网络都添加详细注释,说明功能和使用到的寄存器,方便后期维护和他人理解。
-
初始化处理:移位到最后一位时,要有复位机制,确保灯光循环效果连贯。
4. HMI界面设计
4.1 界面布局设计
我在精智HMI上设计了一个简洁实用的操作界面,包含以下元素:
- 启停按钮:绑定PLC的I0.0和I0.1,可以直接控制系统的运行状态
- 速度调节滑块:两个滑块分别绑定T0和T1的预设值,范围50-500ms
- 状态显示:文本域显示"运行中"或"已停止",绑定M0.1状态
4.2 HMI组态步骤
- 创建HMI设备:在博途项目中添加精智HMI设备
- 建立连接:使用S7连接协议,自动连接S7-1200 PLC
- 拖放控件:从工具箱拖放按钮、滑块、文本域等控件
- 变量绑定:将控件与PLC变量关联(I/O点、定时器、标志位等)
- 下载测试:下载到仿真器测试功能
注意:HMI与PLC的通信协议要选择正确,S7-1200默认使用S7连接,不需要额外配置。
4.3 HMI设计技巧
- 控件命名规范:使用有意义的名称,如"btnStart"、"sldSpeedLight"等
- 操作反馈:按钮按下时改变颜色,提供视觉反馈
- 数值显示:在滑块旁边显示当前数值,方便用户精确调节
- 界面简洁:避免过多复杂元素,突出核心功能
5. 仿真与调试
5.1 博途仿真环境配置
- 在博途软件中创建新项目,选择S7-1200 PLC和精智HMI
- 编写完PLC程序和HMI界面后,点击"开始仿真"按钮
- 博途会启动PLCSIM和HMI仿真器,完全模拟硬件运行
5.2 常见调试问题
在实际仿真调试中,我遇到过以下典型问题及解决方法:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| HMI无法连接PLC | 通信协议设置错误 | 检查是否使用S7连接协议 |
| 灯光不按预期移动 | 移位指令使用错误 | 确认使用SHR_BYTE和ROL_DWORD |
| 定时器不工作 | 定时器使能条件不满足 | 检查运行标志位M0.1是否置位 |
| 移位到最后不循环 | 缺少复位逻辑 | 添加移位完成后的初始化代码 |
5.3 调试技巧
- 使用变量表监控:在博途中添加变量表,实时监控关键变量状态
- 分段调试:先测试启动停止功能,再单独测试字灯和流水灯
- 修改即时生效:在仿真运行时可以直接修改程序,下载后立即看到效果
- 保存多个版本:每完成一个功能就保存一个版本,方便回溯
6. 项目扩展与进阶
这个基础项目完成后,还可以进一步扩展功能:
- 增加多种灯光模式:通过HMI选择不同的灯光效果模式
- 添加音乐同步:根据音频输入实时调整灯光节奏
- 联网控制:通过PROFINET或OPC UA实现远程控制
- 异常报警:检测灯光故障并报警提示
- 节能模式:根据时间段自动调节亮度
对于想深入学习的小伙伴,我建议:
- 先完全理解这个基础项目的每个细节
- 尝试自己重新编写程序,不使用现成的代码
- 添加一些自己的创新功能
- 研究更复杂的移位算法和定时器组合
这个项目虽然简单,但涵盖了PLC编程的多个核心概念:
- 输入输出处理
- 定时器使用
- 移位指令应用
- HMI基本组态
- 仿真调试技巧
掌握这些基础后,再学习更复杂的PLC应用会容易很多。我在实际工作中发现,很多复杂的自动化系统,其核心逻辑都可以分解为类似这样的基础功能模块。