1. 项目概述:传感器程序开发的入门捷径
第一次接触PLC编程的工程师常会被各种专业术语和复杂环境吓退,但现代工业自动化工具已经大幅降低了入门门槛。这个10分钟快速教程将用最直接的方式,带您完成第一个传感器信号采集程序的完整开发流程。
我们选择西门子S7-1200系列PLC作为实操平台,这是目前中小型自动化项目的主流选择。整个开发过程只需要TIA Portal基础版软件和一台模拟器(或实体PLC),不需要额外硬件投入。通过这个练习,您将掌握:传感器信号接入的硬件配置、PLC编程的基本逻辑构建、以及在线调试的核心技巧。
2. 开发环境准备
2.1 软件安装与配置
TIA Portal V17(或更新版本)是必需的开发环境。安装时注意勾选以下组件:
- STEP 7 Professional(PLC编程套件)
- PLC SIM Advanced(高级仿真器)
- Startdrive(可选,用于驱动控制)
安装完成后首次启动时,建议在"选项→设置"中:
- 将项目存储路径改为非系统盘
- 启用"自动保存"功能(间隔设为15分钟)
- 在"编程语言"选项卡中勾选LAD(梯形图)和SCL(结构化文本)
注意:安装路径不要包含中文或特殊字符,否则可能导致插件加载异常。如果遇到许可证管理器报错,建议完全卸载后重新安装。
2.2 硬件组态创建
新建项目时选择:
- 设备类型:SIMATIC S7-1200
- CPU型号:CPU 1214C DC/DC/DC(6ES7 214-1AG40-0XB0)
- 版本:V4.2
在设备视图中添加SM 1231模拟量输入模块(6ES7 231-4HD32-0XB0),这是连接标准4-20mA工业传感器的通用接口。关键参数配置:
- 通道0:测量类型=电流(4-20mA)
- 滤波频率=10Hz(抑制工频干扰)
- 溢出响应=保持最后有效值
3. 传感器信号处理编程
3.1 变量定义与地址映射
在PLC变量表中创建以下标签:
plaintext复制名称 数据类型 地址 注释
Sensor_Raw INT %IW64 原始测量值
Sensor_Scaled REAL %MD100 工程单位值
Alarm_High BOOL %M0.1 高报警
对于模拟量输入模块,硬件地址通常从IW64开始(取决于模块安装位置)。通过右键点击模块选择"属性→I/O地址"可以查看具体分配。
3.2 量程转换编程
在OB1主循环组织块中插入SCL代码段:
scl复制// 量程转换公式:(实际值-4)/(20-4)*(上限-下限)+下限
"Sensor_Scaled" := NORM_X(
MIN := 4.0,
MAX := 20.0,
VALUE := INT_TO_REAL("Sensor_Raw"),
OUT_MIN := 0.0,
OUT_MAX := 100.0
);
// 高报警触发逻辑
"Alarm_High" := "Sensor_Scaled" > 90.0;
这里使用了TIA Portal内置的NORM_X标准化函数,比手动计算更可靠。如果是压力传感器(量程0-1MPa),只需修改OUT_MIN和OUT_MAX参数即可。
4. 在线调试技巧
4.1 仿真器配置
- 在项目树中右键PLC设备选择"开始仿真"
- 在PLC SIM Advanced中创建新实例
- 将PG/PC接口设置为"PLCSIM Virtual Eth. Adapter"
- 下载硬件配置和程序块
实操心得:仿真时建议勾选"仅下载更改的块"以节省时间。如果遇到下载失败,尝试重启仿真服务(任务管理器结束S7PLCSIM.exe进程)
4.2 强制监控实操
通过监控表进行信号模拟:
- 新建监控表并添加Sensor_Raw变量
- 右键变量选择"强制为值"
- 输入27648(对应20mA)观察Scaled值是否变为100.0
- 输入13824(对应12mA)验证中间值计算
调试过程中常用的快捷键:
- Ctrl+F7:在线诊断
- Ctrl+Alt+Q:切换写入模式
- F3:查找变量交叉引用
5. 工业传感器连接规范
5.1 接线示意图
二线制电流型传感器标准接法:
code复制传感器+ ----[250Ω]---- 24V+
传感器- ----[///]---- AI+
AI- ---- 24V-
警告:绝对禁止将传感器直接短路到地!屏蔽线应单端接地(通常在控制柜侧)
5.2 抗干扰措施
现场布线必须遵守:
- 信号线与动力线间距≥30cm
- 超过2米距离必须使用双绞屏蔽线
- 避免与变频器共用电缆桥架
- 柜内走线远离接触器线圈
常见干扰现象及对策:
- 数值跳变:增加RC滤波器(如100Ω+0.1μF)
- 固定偏移:检查接地环路
- 周期性波动:检查电源中性点
6. 程序优化进阶
6.1 添加滤波算法
在FB中创建自定义功能块实现移动平均滤波:
scl复制FUNCTION_BLOCK "AnalogFilter"
VAR_INPUT
RawValue : INT;
Reset : BOOL;
END_VAR
VAR_OUTPUT
Filtered : REAL;
END_VAR
VAR
Buffer : ARRAY[0..9] OF INT;
Index : UINT;
Sum : DINT;
END_VAR
IF "Reset" THEN
FOR #Index := 0 TO 9 DO
#Buffer[#Index] := 0;
END_FOR;
#Sum := 0;
ELSE
#Sum := #Sum - #Buffer[#Index];
#Buffer[#Index] := "RawValue";
#Sum := #Sum + "RawValue";
#Index := (#Index + 1) MOD 10;
"Filtered" := DINT_TO_REAL(#Sum) / 10.0;
END_IF;
调用示例:
scl复制"Filter_Instance"(
RawValue := "Sensor_Raw",
Reset := "FirstScan",
Filtered => "Sensor_Filtered"
);
6.2 报警延时功能
使用TON定时器实现报警延时触发:
lad复制Network 1:
LD "Sensor_Scaled" > 90.0
TON "AlarmDelayTimer", PT := T#5S
Network 2:
LD "AlarmDelayTimer".Q
= "Alarm_High"
这样只有当超限持续5秒以上才会触发报警,避免瞬时干扰导致的误报。
7. 工程文档规范
7.1 注释标准
优质程序应包含:
- 每个网络的行注释(描述功能意图)
- 复杂算法的公式说明
- 修改记录(日期/作者/变更内容)
示例:
scl复制// 量程转换公式:(Raw-5530)/(27648-5530)*(100.0-0.0)
// 其中5530对应4mA,27648对应20mA
// 最后修改:2023-08-20 by ZhangL
7.2 版本控制
推荐的项目结构:
code复制ProjectName/
├── Hardware/
├── Software/
│ ├── PLC/
│ │ ├── OB/ // 组织块
│ │ ├── FB/ // 功能块
│ │ └── DB/ // 数据块
│ └── HMI/
├── Documentation/
│ ├── Wiring/ // 接线图
│ └── Manual/ // 操作手册
└── Archives/ // 历史版本
使用TIA Portal的"项目归档"功能定期备份(.zap格式),建议命名规则:ProjectName_YYYYMMDD_Vx.zap
8. 常见故障排查指南
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 数值显示为零 | 传感器供电异常 | 1. 测量传感器端子电压 2. 检查保险丝 |
| 数值持续最大值 | 信号线断路 | 1. 短接AI+与AI-测试 2. 检查端子紧固 |
| 随机波动 | 电磁干扰 | 1. 启用软件滤波 2. 检查接地电阻 |
| 数值更新延迟 | 程序扫描周期过长 | 1. 查看OB1执行时间 2. 优化代码逻辑 |
当遇到通信故障时,首先检查:
- 模块LED状态(RUN/ERROR指示灯)
- 诊断缓冲区(在线→诊断→硬件诊断)
- 网络连接(ping测试PLC IP地址)
我调试过的一个典型案例:某流量计信号异常最终发现是配电柜内继电器线圈未安装续流二极管,导致反电动势干扰。这类问题往往需要结合电气图纸和现场工况综合分析。
