在工业自动化现场,西门子S7-200PLC和V20变频器的组合堪称经典CP。这对搭档通过USS协议建立的通讯连接,就像两个经验丰富的工人用专业暗语交流。USS(Universal Serial Interface)协议是西门子专为驱动设备设计的串行通讯协议,采用主从式轮询机制,一个PLC主站最多可以带31个变频器从站。
协议底层的工作机制就像工厂里的班组长巡查:PLC主站手持点名册,按照预设顺序依次询问各变频器从站的状态和需求。每个从站必须分配唯一的站地址(1-31),这个地址相当于变频器的工号牌。实际项目中我习惯从1开始顺序编号,这样在程序里做位运算时更直观。
通讯参数的匹配是建立连接的基础条件,就像对讲机必须调到相同频道:
这些参数必须在PLC和变频器两端严格一致,否则就会出现"鸡同鸭讲"的情况。曾经有个项目因为变频器端波特率被误设为19200bps,导致通讯完全中断,排查了半天才发现是这个基础参数不匹配。
在编写程序之前,正确的物理连接是通讯基础。USS协议使用RS485接口,接线时要注意:
特别注意:通讯距离超过50米时,建议增加RS485中继器。曾经有个纺织车间的项目,因150米距离未加中继导致信号衰减严重,出现随机通讯中断。
USS协议的初始化就像给PLC安装驱动程序,这段代码通常放在第一个网络段:
stl复制// S7-200 USS协议初始化
LD SM0.1 // 上电首次扫描脉冲
CALL USS_INIT:EN
PORT:= 0 // 使用Port0通讯口
BAUD:= 16#40 // 9600bps对应16进制40
ACTIVE:= 16#1 // 激活站地址1
几个关键点解析:
在V20变频器端,需要设置以下参数:
USS协议通过控制字(Control Word)来指挥变频器动作,这个16位二进制数就像特工密码本:
stl复制// 典型控制命令
MOVW 16#047F, VW100 // 正转启动
MOVW 16#047E, VW100 // 停机
MOVW 16#0C7F, VW100 // 反转启动
控制字的各位含义如下(从低位到高位):
完整的启停控制程序段如下:
stl复制// 变频器启停控制
LDN SM0.0 // 常通触点
MOVW 16#047F, VW100 // 准备启动控制字
MOVW 500, VW102 // 设定频率50.0Hz(0.1Hz单位)
CALL USS_CTRL:EN
RUN:= I0.0 // 启动按钮信号
OFF2:= I0.1 // 自由停车按钮
OFF3:= I0.2 // 快速停车按钮
SPEED:= &VW102 // 频率设定值指针
CTRL:= &VW100 // 控制字指针
实操经验:
为避免通讯拥堵,建议采用分时轮询策略。我的常用方法是:
stl复制// 分时读取不同参数
LD SM0.5 // 0.5Hz时钟脉冲
EU // 上升沿触发
INCB VB20 // 计数器递增
LDW= VB20, 1
MOVW 16#2001, VW110 // 准备读取电流参数
LDW= VB20, 2
MOVW 16#200B, VW110 // 准备读取电压参数
LDW= VB20, 3
MOVW 16#2028, VW110 // 准备读取能耗参数
MOVB 0, VB20 // 计数器复位
LD SM0.5
CALL USS_READ:EN
XMT_REQ:= SM0.5
Param:= VW110 // 参数索引
Value:= &VD200 // 存储地址
Error:= &VB210 // 错误代码
V20变频器的参数与USS地址对应关系:
| 参数功能 | 参数号 | USS地址 | 单位 | 数据格式 |
|---|---|---|---|---|
| 输出频率 | r0021 | 16#2001 | 0.1Hz | WORD |
| 输出电压 | r0027 | 16#200B | 0.1V | WORD |
| 输出电流 | r0031 | 16#201F | 0.01A | WORD |
| 能耗统计 | r0040 | 16#2028 | 0.01kWh | DWORD |
技巧:在数据块中建立结构体变量,将读取的参数按工程单位转换后存储,便于HMI显示。
stl复制// 报警状态监控
LD SM0.5
EU
CALL USS_READ:EN
XMT_REQ:= SM0.5
Param:= 16#3BFF // r0947故障代码
Value:= &VD300
Error:= &VB310
// 故障复位处理
LD I0.3 // 复位按钮
CALL USS_WRITE:EN
XMT_REQ:= I0.3
Param:= 16#203C // P2100故障复位
Value:= 1 // 触发复位
Error:= &VB320
| 故障代码 | 含义 | 排查要点 |
|---|---|---|
| F0001 | 过流 | 检查电机电缆、负载是否卡死 |
| F0003 | 欠压 | 检查进线电压、主回路接触器 |
| F0004 | 过压 | 检查制动电阻、减速时间 |
| F0041 | 电机过热 | 检查冷却风扇、环境温度 |
| F0070 | USS通讯故障 | 检查接线、终端电阻 |
经验分享:
stl复制// 平滑加减速控制
LD SM0.0
MOVW 100, VW500 // 加速时间10秒(0.1s单位)
CALL USS_WRITE:EN
XMT_REQ:= M10.0
Param:= 16#205B // P1120加速时间
Value:= &VW500
Error:= &VB510
MOVW 80, VW502 // 减速时间8秒
CALL USS_WRITE:EN
XMT_REQ:= M10.1
Param:= 16#205C // P1121减速时间
Value:= &VW502
Error:= &VB511
当需要控制多个变频器时,可以采用以下策略:
stl复制MOVW 16#3, VW400 // 同时激活地址1和2
CALL USS_INIT:EN
ACTIVE:= VW400
stl复制// 主频率计算
LD SM0.0
MOVW 600, VW600 // 主设定频率60Hz
// 从站1控制
MOVW VW600, VW610
CALL USS_CTRL:EN
Drive:= 1
SPEED:= &VW610
// 从站2控制(偏移5Hz)
LD SM0.0
MOVW VW600, VW620
-I +50, VW620 // 从站2频率低5Hz
CALL USS_CTRL:EN
Drive:= 2
SPEED:= &VW620
通讯不稳定排查步骤:
参数保存要点:
stl复制// 保存参数到EEPROM
MOVW 1, VW700
CALL USS_WRITE:EN
Param:= 16#209F // P0971参数存储
Value:= &VW700
修改关键参数后必须执行存储操作,否则断电后会丢失设置。
调试模式建议:
在多年的工控现场实践中,我发现USS协议虽然简单,但细节决定成败。特别是在电磁环境复杂的场合,做好接地和屏蔽往往能解决90%的通讯问题。对于关键设备,建议额外增加硬线备用控制回路,当通讯中断时至少能保证设备安全停机。