1. 项目概述:PLC流水灯控制的工业场景价值
在工业自动化领域,流水灯控制看似简单,却是理解PLC基础编程逻辑的经典案例。这个基于西门子S7-1200 PLC和HMI的仿真项目,通过博途(TIA Portal)平台实现了灯光序列的循环控制,其核心价值在于:
- 掌握FC函数块封装:将重复使用的逻辑封装成可调用的功能块,这是工业级PLC编程的必备技能
- 循环移位指令实战:学习如何用ROL/ROR指令高效实现流水灯效果,比传统位操作更简洁
- HMI交互设计:通过触摸屏控制灯光模式/速度,模拟真实产线操作面板
- 仿真调试技巧:在不连接实体PLC的情况下验证程序逻辑,大幅缩短开发周期
提示:建议使用TIA Portal V16或更高版本,本文示例基于S7-1214C DC/DC/DC型号PLC,但核心逻辑适配所有S7-1200系列
2. 硬件组态与软件环境搭建
2.1 博途项目创建步骤
- 新建项目时选择"Empty project",命名为"Light_Sequence"
- 设备组态中添加S7-1200 CPU(本文使用6ES7 214-1AG40-0XB0)
- 添加精简系列HMI(如KTP700 Basic PN)
- 配置PLC与HMI的以太网连接,确保IP在同一网段
2.2 关键硬件配置参数
| 模块类型 | 型号 | 关键参数 |
|---|---|---|
| CPU | 1214C | 工作内存75KB,集成14点I/O |
| HMI | KTP700 | 7寸触摸屏,分辨率800x480 |
| 仿真器 | PLCSIM | 需单独安装TIA PLCSIM Advanced |
注意:若使用PLCSIM Advanced V3.0以上版本,需要先在控制面板中启用"允许PUT/GET通信"
3. PLC程序设计核心逻辑
3.1 循环移位指令的工程实现
在OB1主循环中建立以下网络:
STL复制// 网络1:初始化
L 16#0001 // 初始灯位(二进制0000 0001)
T MW100 // 存储到中间变量
// 网络2:循环左移
L MW100
ROL 3 // 循环左移3位(根据实际灯数调整)
T MW100
MOVE MW100, PQW100 // 输出到Q区
移位位数计算:假设控制8个灯,每次亮3个,则ROL 3可实现流水效果。实际工程中需考虑:
- 移位方向(ROL左移/ROR右移)
- 边界处理(用MOVE指令重置初始值)
- 移位速度(通过定时器控制)
3.2 FC函数块封装技巧
创建FC1(命名为Light_Control)时的关键参数:
SCL复制FUNCTION "Light_Control" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Start : Bool; // 启动信号
Direction : Int; // 1=左移 -1=右移
Speed : Time; // 移位间隔时间
END_VAR
VAR_OUTPUT
Light_Pattern : Word; // 当前灯位状态
END_VAR
VAR_TEMP
Timer_Done : Bool;
END_VAR
最佳实践:
- 使用SCL语言编写更易维护
- 为每个参数添加中文注释(在"Properties > Comment"中填写)
- 启用优化块访问(减少内存占用)
4. HMI界面设计与变量绑定
4.1 控件布局方案
-
模式选择:添加3个按钮组成Radio Group
- 单灯流水
- 双灯交替
- 全灯呼吸
-
速度调节:使用Slider控件(0-10档对应T#100ms-T#1000ms)
-
状态显示:用8个圆形指示灯对应PLC的Q0.0-Q0.7
4.2 变量连接规范
| HMI控件 | PLC变量 | 数据类型 | 备注 |
|---|---|---|---|
| 启动按钮 | M0.0 | Bool | 上升沿触发 |
| 模式选择 | MW20 | Int | 1-3对应不同模式 |
| 速度滑块 | MW30 | Int | 值越大速度越慢 |
| 灯状态 | PQW100 | Word | 只读显示 |
经验:在HMI变量表中为每个变量添加"起始值",避免仿真时出现未初始化错误
5. 仿真调试全流程实录
5.1 PLCSIM Advanced配置要点
-
在项目树中右键PLC选择"Start simulation"
-
在仿真器界面:
- 设置PG/PC接口为"PLCSIM Virtual Eth. Adapter"
- 勾选"Enable access from remote PG/PC"
-
下载硬件配置时选择"Search"找到虚拟PLC
5.2 典型问题排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| HMI无法连接PLC | IP地址冲突 | 在仿真器重置IP为192.168.0.1 |
| 灯位显示错乱 | 变量类型不匹配 | 检查Word/Int类型转换 |
| 移位速度不稳定 | 定时器未自复位 | 在FC中添加TONR定时器 |
| 触摸屏无响应 | HMI运行时未激活 | 右键HMI选择"Start runtime" |
6. 工程优化与进阶技巧
6.1 移位算法的三种实现对比
- 传统位操作(适合新手理解)
LAD复制 MOVE 16#01 to MB10
SHL MB10 // 左移一位
JNB _001
MOVE 16#01 to MB10 // 循环复位
_001: NOP 0
- 循环移位指令(代码最简洁)
STL复制 L MW100
ROL 1
T MW100
- 数组索引法(适合复杂模式)
SCL复制#Light_Pattern := "Light_Array"[#Index];
#Index := #Index MOD 8 + 1;
6.2 工业级设计建议
- 添加急停功能(直接复位Q区输出)
- 使用DB块存储配方(不同灯光模式参数)
- 在OB30循环中断中处理移位逻辑(更精确的时序控制)
- 为每个输出点添加熔断保护(防止过载)
我在实际项目中总结的黄金法则:先仿真后实机,先功能后优化。建议先用PLCSIM验证所有逻辑,再下载到实体PLC测试。曾经有个项目因为直接使用实体PLC调试,导致输出点短路烧毁,损失了宝贵的开发时间。
