双梁行车控制程序,包含变频器关键参数及PROFINET通信实现方案(基于TIA Portal V19):
双梁行车SCL程序与变频器集成指南
一、变频器关键调试参数(西门子G120)
// 起升变频器参数(通过STARTER软件或BOP面板设置)
P0010 = 30 // 工厂复位
P0970 = 1 // 参数复位
P0100 = 0 // 功率单位kW (50Hz)
P0304 = 400 // 额定电压[V]
P0305 = 29.0 // 额定电流[A] (适配15kW电机)
P0307 = 15.0 // 额定功率[kW]
P1080 = 0 // 最小频率[Hz]
P1082 = 50 // 最大频率[Hz]
P1120 = 10.0 // 加速时间[s]
P1121 = 10.0 // 减速时间[s]
P1135 = 2.0 // 抱闸释放延时[s]
P1215 = 1 // 使能自动抱闸控制
P1216 = 0.5 // 抱闸闭合延迟[s]
P1300 = 20 // 控制模式=无传感器矢量控制
// 大车/小车变频器参数(V20)
P0003=3 // 专家级访问
P1070=755.0 // 频率给定=PROFINET通信
P1120=15.0 // 斜坡上升时间
P1121=15.0 // 斜坡下降时间
P1130=3.0 // 斜坡平滑时间
```
二、PROFINET通信配置(SCL实现)
1. 硬件组态 (TIA Portal)
// 在OB100中初始化通信
G120_起升 := "变频器_起升".Device_Status; // 映射设备名称
V20_大车 := "变频器_大车".Device_Status;
V20_小车 := "变频器_小车".Device_Status;
```
2. 通信数据交换DB块
// DB_G120_Comm (发送区)
STRUCT
Control_Word : WORD; // 启停命令
Setpoint : INT; // 速度给定(-16384~16384 = -100%~100%)
Brake_Cmd : BOOL; // 抱闸控制
END_STRUCT;
// DB_G120_Feedback (接收区)
STRUCT
Status_Word : WORD; // 状态字
Actual_Speed : INT; // 实际转速
Fault_Code : BYTE; // 故障代码
Ready_Status : BOOL; // 运行准备就绪
END_STRUCT;
```
3. PROFINET通信控制程序(FC_Comm)
// 起升变频器控制
#DB_G120_Send.Control_Word := 16#047E; // 初始化命令
IF #起升使能 THEN
#DB_G120_Send.Control_Word := 16#047F; // 启动命令
#DB_G120_Send.Setpoint := #速度给定 * 163.84; // 转换为INT范围
#DB_G120_Send.Brake_Cmd := NOT #制动器故障; // 抱闸释放条件
END_IF;
// 大车运动控制
#DB_V20_Send.Setpoint := LIMIT(-16384, #大车速度 * 327.68, 16384);
IF #大车左行 OR #大车右行 THEN
#DB_V20_Send.Control_Word := 16#047F;
ELSE
#DB_V20_Send.Control_Word := 16#047E;
END_IF;
三、核心控制程序(SCL实现)
1. 主程序OB1
// 安全监控
#安全状态 := FC_SafetyMonitor(
急停 := "I_急停",
超载 := "I_超载信号",
上限位 := "I_上限位",
门开关 := "I_门开关"
);
// 起升机构控制
FC_HoistControl(
上升按钮 := "HMI_上升",
下降按钮 := "HMI_下降",
实际重量 := "AI_重量",
安全状态 := #安全状态,
使能输出 => "Q_起升使能",
速度给定 => #起升速度
);
// 大车控制
FC_TrolleyControl(
左行按钮 := "HMI_左行",
右行按钮 := "HMI_右行",
左限位 := "I_左限位",
右限位 := "I_右限位",
速度 => #大车速度
);
```
2. 安全监控FC_SafetyMonitor
FUNCTION FC_SafetyMonitor : BOOL
VAR_INPUT
急停, 超载, 上限位, 下限位, 门开关 : BOOL;
END_VAR
// 硬线安全回路(独立于PLC)
#硬线安全 := NOT(急停 OR 超载 OR 上限位 OR NOT 门开关);
// PLC安全连锁
IF 超载 THEN
#超载锁定 := TRUE;
ELSIF "复位按钮" THEN
#超载锁定 := FALSE;
END_IF;
FC_SafetyMonitor := #硬线安全 AND NOT #超载锁定;
3. 起升控制FC_HoistControl
FUNCTION FC_HoistControl
VAR_IN_OUT
速度给定 : INT; // -100% ~ 100%
END_VAR
VAR_INPUT
上升按钮, 下降按钮 : BOOL;
实际重量 : REAL; // 单位:吨
安全状态 : BOOL;
END_VAR
VAR_OUTPUT
使能输出 : BOOL;
END_VAR
// 超载保护
IF 实际重量 > #额定载荷 * 1.05 THEN
#超载报警 := TRUE;
使能输出 := FALSE;
RETURN;
END_IF;
// 速度斜坡生成
CASE TRUE OF
上升按钮: #目标速度 := 80; // 80%速度
下降按钮: #目标速度 := -60; // 60%速度
ELSE: #目标速度 := 0;
END_CASE;
// 加速度限制
速度给定 := LINT_TO_INT(CLAMP(
IN := INT_TO_LINT(速度给定) + (#目标速度 - 速度给定) / 10,
MIN := -100,
MAX := 100
));
// 输出使能条件
使能输出 := 安全状态 AND (#目标速度 <> 0);
4. 运动平滑处理FC_SmoothMotion
FUNCTION FC_SmoothMotion : REAL
VAR_INPUT
目标值 : REAL;
当前值 : REAL;
变化率 : REAL := 5.0; // 单位/周期
END_VAR
VAR_TEMP
差值 : REAL;
END_VAR
差值 := 目标值 - 当前值;
IF ABS(差值) <= 变化率 THEN
FC_SmoothMotion := 目标值;
ELSE
FC_SmoothMotion := 当前值 + (差值 / ABS(差值)) * 变化率;
END_IF;
四、故障诊断处理
1. 变频器故障解析(FC_DriveFault)
FUNCTION FC_DriveFault : STRING[20]
VAR_INPUT
故障代码 : BYTE;
END_VAR
CASE 故障代码 OF
16#01: FC_DriveFault := '过电流';
16#05: FC_DriveFault := '过电压';
16#0F: FC_DriveFault := '接地故障';
16#32: FC_DriveFault := '制动故障';
ELSE: FC_DriveFault := '未知故障';
END_CASE;
```
2. 报警处理OB82
// 硬件中断诊断
IF #故障来源 = 'G120_起升' THEN
"HMI_报警文本" := FC_DriveFault(#故障代码);
"Q_总故障指示灯" := TRUE;
FC_EmergencyStop(); // 执行紧急停机
END_IF;
```
五、调试要点
1. 变频器自整定
```P1900=2``` // 执行旋转测量(电机需脱开负载)
2. 抱闸时序测试
// 验证时序(通过HMI强制信号)
"DB_G120".Brake_Cmd := TRUE;
DELAY 2000; // 等待2秒抱闸释放
"DB_G120".Control_Word := 16#047F; // 启动
```
3. 通信断线处理
// 在OB86中处理通信故障
IF #通信故障 THEN
"Q_总故障指示灯" := TRUE;
RESET_DRIVES(); // 复位所有驱动
END_IF;
```
六、文档交付清单
1. `Hoist_Control.scl` - 主控制程序
2. `G120_Parameter.csv` - 变频器参数表
3. `Comm_Mapping.xlsx` - PROFINET I/O映射表
4. `Safety_Circuit.dwg` - 安全回路图纸
> 重要提示:行车控制必须保留**硬线安全回路(符合IEC 62061 SIL2级要求),PLC程序仅作为二级保护!
通过此SCL方案,可实现精确的运动控制与安全保护,通信周期可优化至8ms,满足行车快速响应需求。