1. 项目概述
最近在调试一个工业自动化项目时,遇到了需要通过PLC控制变频器的需求。经过方案比选,最终采用了西门子S7-1200 PLC通过USS协议与V20变频器通讯的方案。这个方案最大的优势在于布线简单,只需要一根屏蔽双绞线就能实现多台变频器的控制,相比传统的硬接线方式节省了大量IO点和接线工作量。
在实际项目中,我们需要实现两个核心功能:一是周期性读取变频器的运行参数(电流、电压等);二是能够远程修改变频器的加速时间参数。这两个功能在生产线速度调节和设备保护方面都非常关键。
2. 硬件准备与连接
2.1 硬件选型清单
- PLC:西门子S7-1214C DC/DC/DC(6ES7 214-1AG40-0XB0)
- 通讯模块:CM1241 RS485(6ES7 241-1CH32-0XB0)
- 变频器:西门子V20(6SL3210-5BE15-5UV0)
- 连接线缆:带屏蔽层的双绞线(推荐型号:LIYCY 2×0.5mm²)
2.2 硬件连接示意图
code复制PLC(CM1241)
│
├── 端子3(RS485+)→ 变频器P+
├── 端子8(RS485-)→ 变频器N-
└── 端子1(屏蔽层)→ 变频器PE
重要提示:务必确保屏蔽层单端接地,通常在PLC端接地。如果通讯距离超过50米,建议在两端都加装终端电阻(120Ω)。
2.3 硬件连接注意事项
-
线序检查:RS485通讯对极性敏感,P+必须接P+,N-必须接N-。接反会导致通讯失败。
-
屏蔽处理:屏蔽层要可靠接地,这是抗干扰的关键。我们曾经因为屏蔽层接触不良导致通讯时断时续,排查了很久才发现问题。
-
终端电阻:当通讯距离较长(>50m)或波特率较高(>19.2kbps)时,需要在最远端的设备上加装终端电阻。V20变频器内部已经集成了终端电阻,通过参数P2021可以启用。
3. 软件配置详解
3.1 博图(TIA Portal)配置步骤
-
添加硬件设备:
- 新建项目后,在"项目视图"中双击"添加新设备"
- 选择对应的PLC型号(本例为S7-1214C)
- 在设备视图中,将CM1241模块拖放到PLC的插槽上
-
配置通讯模块参数:
- 双击CM1241模块进入属性设置
- 在"常规"→"接口"中,选择"RS485"操作模式
- 波特率设置为9600(与变频器一致)
- 数据位8位,停止位1位,无奇偶校验
- 流控制选择"无"
-
USS协议配置:
- 在项目树中打开"工艺对象"→"通信"→"USS通信"
- 新建USS主站,选择连接的CM1241模块
- 设置站地址为1(必须与变频器设置一致)
- 配置轮询时间间隔(建议100ms以上)
3.2 V20变频器参数设置
通过变频器操作面板设置以下关键参数:
| 参数号 | 参数名称 | 设置值 | 说明 |
|---|---|---|---|
| P0700 | 命令源选择 | 5 | 选择USS通讯控制 |
| P1000 | 频率设定值选择 | 5 | 频率通过USS通讯给定 |
| P2010 | USS波特率 | 6 | 对应9600bps |
| P2011 | USS站地址 | 1 | 必须与PLC设置一致 |
| P2021 | RS485终端电阻 | 1 | 启用终端电阻(可选) |
调试技巧:设置完参数后,建议先断电再上电,确保参数生效。我们遇到过参数修改后不生效的情况,断电重启后问题解决。
4. PLC程序设计
4.1 建立数据块
首先需要创建用于USS通讯的数据块:
pascal复制DATA_BLOCK "USS_DB"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
NON_RETAIN
VAR
// 控制命令区
Start : Bool; // 启动命令
Stop : Bool; // 停止命令
FaultAck : Bool; // 故障确认
SpeedSetpoint : Real := 50.0; // 速度设定值(%)
// 状态反馈区
Running : Bool; // 运行状态
Fault : Bool; // 故障状态
Current : Real; // 输出电流(A)
Voltage : Real; // 输出电压(V)
Frequency : Real; // 输出频率(Hz)
// 通讯状态
CommError : Bool; // 通讯错误
ErrorCode : Word; // 错误代码
END_VAR
BEGIN
END_DATA_BLOCK
4.2 主程序(OB1)实现
pascal复制ORGANIZATION_BLOCK "Main"
BEGIN
// USS通讯控制指令
"USS_CTRL"(
REQ := "MainCycle", // 每个周期都执行
PORT := "CM1241", // 通讯端口
BAUD := 9600, // 波特率
USS_DB := "USS_DB", // 数据块
DONE => , // 完成标志
ERROR => "CommError",// 错误标志
STATUS => "ErrorCode"); // 状态码
// 读取电流电压
IF "ReadTimer".Q THEN
"USS_READ"(
REQ := TRUE,
PORT := "CM1241",
ParamIndex := 16#2001, // 电流参数索引
USS_DB := "USS_DB",
Value => "Current");
"USS_READ"(
REQ := TRUE,
PORT := "CM1241",
ParamIndex := 16#2002, // 电压参数索引
USS_DB := "USS_DB",
Value => "Voltage");
END_IF;
// 写入加速时间
IF "WriteAccelTime" THEN
"USS_WRITE"(
REQ := TRUE,
PORT := "CM1241",
ParamIndex := 16#2205, // 加速时间参数索引
USS_DB := "USS_DB",
Value := "AccelTimeSetpoint",
DONE => "WriteDone",
ERROR => "WriteError");
END_IF;
END_ORGANIZATION_BLOCK
4.3 定时轮询设计
为了实现周期性读取,需要配置一个循环中断OB:
pascal复制ORGANIZATION_BLOCK "CyclicInterrupt"
VAR_TEMP
"CycleCount" : INT;
END_VAR
BEGIN
"CycleCount" := "CycleCount" + 1;
// 每100ms触发一次读取
IF "CycleCount" >= 10 THEN
"CycleCount" := 0;
"ReadTimer"(IN := TRUE, PT := T#100MS);
END_IF;
END_ORGANIZATION_BLOCK
5. 功能测试与调试
5.1 通讯测试步骤
-
基本通讯测试:
- 在OB1中临时添加一个测试程序段,周期性切换一个输出点
- 用万用表测量CM1241模块的RS485端子(3和8脚)之间电压
- 正常通讯时应该能看到电压变化(±2V左右)
-
状态监控:
- 在线连接PLC,监控USS_DB数据块
- 观察CommError和ErrorCode状态
- 如果出现错误,参考下表排查:
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| 16#7001 | 波特率不匹配 | 检查PLC和变频器波特率设置 |
| 16#7002 | 站地址错误 | 确认P2011参数与PLC设置一致 |
| 16#7003 | 校验错误 | 检查线缆质量和连接可靠性 |
| 16#7004 | 超时 | 增加轮询间隔时间 |
5.2 参数读写验证
-
读取验证:
- 启动变频器,让其运行在20Hz
- 在PLC监控表中观察Frequency值
- 应该能看到接近20.0的值(可能有0.1-0.3的偏差)
-
写入验证:
- 在监控表中修改AccelTimeSetpoint值为10.0(单位:秒)
- 触发WriteAccelTime信号
- 观察WriteDone信号变为TRUE表示写入成功
- 通过变频器面板查看P1120参数,应该已经变为10.0
6. 常见问题与解决方案
6.1 通讯不稳定问题
现象:通讯时断时续,ErrorCode频繁变化。
可能原因及解决:
-
干扰问题:
- 检查屏蔽层是否完好接地
- 确保通讯线远离动力线(至少30cm间距)
- 在干扰严重场合,可考虑使用光纤转换器
-
终端电阻问题:
- 长距离通讯时,确保只有末端设备启用终端电阻
- 通过P2021参数控制V20的终端电阻
-
波特率过高:
- 对于长距离(>100m),建议降低波特率到4800甚至2400
6.2 参数读写失败
现象:能够通讯但某些参数无法读写。
解决方案:
- 确认参数索引号正确(参考V20参数手册)
- 检查参数是否可读写(有些参数是只读的)
- 确保变频器不在运行状态(某些参数运行时不可修改)
6.3 实际应用技巧
-
轮询优化:
- 非关键参数(如温度)可以降低读取频率(如1秒1次)
- 关键参数(如电流)保持较高读取频率(100ms)
-
错误处理:
- 实现三级错误处理:立即重试→延时重试→报警
- 记录错误历史,方便后期分析
-
参数保存:
- 重要参数修改后,通过USS发送保存命令(P0971=1)
- 或者定期自动保存参数
7. 项目总结与扩展
通过这个项目,我们成功实现了S7-1200与V20变频器的稳定通讯。相比传统的硬接线方式,USS通讯节省了约60%的接线工作量,同时提供了更丰富的监控和控制功能。
在实际应用中,我们还扩展了以下功能:
- 通过HMI实现参数集中设置和监控
- 增加电流过载保护逻辑(当电流>额定值1.2倍时自动降速)
- 实现多台变频器的轮询控制(最多31台)
一个特别实用的技巧是:在PLC中建立一个变频器参数镜像区,所有操作都针对这个镜像区进行,然后通过后台任务同步到实际变频器。这样既提高了响应速度,又能避免频繁的通讯操作。
