一、限位保护的核心逻辑
以下是实现限位保护功能的关键代码,集成在主控制程序中:
//=====================================================================
// 限位保护处理 - 集成在主程序中
//=====================================================================
FOR i := 1 TO 6 DO
// 读取限位状态(从变频器状态字获取)
Lifts[i].UpperLimit := (Lifts[i].StatusWord AND 16#0001) <> 0; // 上极限信号
Lifts[i].LowerLimit := (Lifts[i].StatusWord AND 16#0002) <> 0; // 下极限信号
// 极限保护逻辑
IF Lifts[i].UpperLimit THEN
// 上极限触发,禁止上升,但允许下降
IF Lifts[i].SpeedRef > 0 THEN // 上升方向
Lifts[i].SpeedRef := 0; // 强制设为0,禁止上升
Lifts[i].ControlWord := 16#0000; // 停止命令
END_IF;
ELSIF Lifts[i].LowerLimit THEN
// 下极限触发,禁止下降,但允许上升
IF Lifts[i].SpeedRef < 0 THEN // 下降方向
Lifts[i].SpeedRef := 0; // 强制设为0,禁止下降
Lifts[i].ControlWord := 16#0000; // 停止命令
END_IF;
END_IF;
// 极限触发时的故障处理
IF Lifts[i].UpperLimit OR Lifts[i].LowerLimit THEN
Lifts[i].Fault := TRUE;
Lifts[i].FaultCode := CASE TRUE OF
Lifts[i].UpperLimit: 1001; // 上极限故障
Lifts[i].LowerLimit: 1002; // 下极限故障
ELSE: 0;
END_CASE;
// 记录极限触发事件
LogLimitTrigger(i, Lifts[i].FaultCode);
END_IF;
END_FOR;
// 全局极限连锁保护
VAR AnyUpperLimit := FALSE;
VAR AnyLowerLimit := FALSE;
FOR i := 1 TO 6 DO
AnyUpperLimit := AnyUpperLimit OR Lifts[i].UpperLimit;
AnyLowerLimit := AnyLowerLimit OR Lifts[i].LowerLimit;
END_FOR;
// 任意上极限触发时,禁止所有升降台上升
IF AnyUpperLimit THEN
FOR i := 1 TO 6 DO
IF Lifts[i].SpeedRef > 0 THEN
Lifts[i].SpeedRef := 0;
Lifts[i].ControlWord := 16#0000;
END_IF;
END_FOR;
END_IF;
// 任意下极限触发时,禁止所有升降台下降
IF AnyLowerLimit THEN
FOR i := 1 TO 6 DO
IF Lifts[i].SpeedRef < 0 THEN
Lifts[i].SpeedRef := 0;
Lifts[i].ControlWord := 16#0000;
END_IF;
END_FOR;
END_IF;
二、限位保护的增强功能
1. 软限位功能
在硬限位基础上增加软限位,提供双重保护:
// 软限位设置(在数据结构中添加)
TYPE LiftStruct :
STRUCT
// 新增软限位参数
SoftUpperLimit : REAL := 95.0; // 软上限位置(米)
SoftLowerLimit : REAL := 5.0; // 软下限位置(米)
SoftLimitMargin : REAL := 2.0; // 软限位余量(米)
END_STRUCT
END_TYPE
// 软限位检查
FOR i := 1 TO 6 DO
IF Lifts[i].ActualPos >= Lifts[i].SoftUpperLimit - Lifts[i].SoftLimitMargin THEN
// 接近软上限,限制上升速度
IF Lifts[i].SpeedRef > 0 THEN
Lifts[i].SpeedRef := MAX(Lifts[i].SpeedRef, 10.0); // 限制最大上升速度为10%
END_IF;
ELSIF Lifts[i].ActualPos <= Lifts[i].SoftLowerLimit + Lifts[i].SoftLimitMargin THEN
// 接近软下限,限制下降速度
IF Lifts[i].SpeedRef < 0 THEN
Lifts[i].SpeedRef := MIN(Lifts[i].SpeedRef, -10.0); // 限制最大下降速度为10%
END_IF;
END_IF;
END_FOR;
2. 限位触发后的恢复机制
// 限位故障恢复逻辑
FUNCTION_BLOCK LimitRecovery
{ S7_Optimized_Access = 'TRUE' }
VERSION : 1.0
VAR_INPUT
Enable : BOOL; // 使能恢复功能
LiftIndex : INT; // 升降台编号
Direction : BOOL; // 恢复方向(TRUE=上升,FALSE=下降)
END_VAR
VAR_OUTPUT
RecoveryComplete : BOOL; // 恢复完成标志
FaultCleared : BOOL; // 故障已清除
END_VAR
VAR
LiftRef : POINTER TO LiftStruct; // 指向升降台结构体的指针
RecoverySpeed : REAL := 20.0; // 恢复速度(%)
RecoveryTimeout : TON; // 恢复超时定时器
RecoveryDistance : REAL := 0.5; // 恢复移动距离(米)
InitialPos : REAL; // 初始位置
IsRecovering : BOOL; // 正在恢复标志
END_VAR
// 恢复逻辑实现
LiftRef := ADR(Lifts[LiftIndex]);
IF Enable THEN
// 检查是否有限位触发
IF LiftRef^.UpperLimit OR LiftRef^.LowerLimit THEN
// 开始恢复过程
IF NOT IsRecovering THEN
InitialPos := LiftRef^.ActualPos;
IsRecovering := TRUE;
RecoveryTimeout(IN := TRUE, PT := T#10s); // 设置10秒超时
END_IF;
// 根据方向设置恢复速度
IF Direction THEN
// 上升恢复
LiftRef^.SpeedRef := RecoverySpeed;
RecoveryComplete := LiftRef^.ActualPos >= InitialPos + RecoveryDistance;
ELSE
// 下降恢复
LiftRef^.SpeedRef := -RecoverySpeed;
RecoveryComplete := LiftRef^.ActualPos <= InitialPos - RecoveryDistance;
END_IF;
// 恢复完成或超时处理
IF RecoveryComplete OR RecoveryTimeout.Q THEN
LiftRef^.SpeedRef := 0.0;
IsRecovering := FALSE;
RecoveryTimeout(IN := FALSE);
// 清除故障标志
IF RecoveryComplete THEN
LiftRef^.Fault := FALSE;
FaultCleared := TRUE;
END_IF;
END_IF;
ELSE
// 没有限位触发,直接完成
RecoveryComplete := TRUE;
FaultCleared := TRUE;
END_IF;
ELSE
// 禁用恢复功能
IsRecovering := FALSE;
RecoveryComplete := FALSE;
FaultCleared := FALSE;
LiftRef^.SpeedRef := 0.0;
END_IF;
END_FUNCTION_BLOCK
三、限位保护的调试与验证
1. 调试步骤
单台测试:
- 触发上极限,验证升降台无法上升但可下降
- 触发下极限,验证升降台无法下降但可上升
- 测试软限位功能,确保接近限位时速度被限制
多台连锁测试:
- 触发任意一台的上极限,验证所有升降台无法上升
- 触发任意一台的下极限,验证所有升降台无法下降
- 测试极限恢复功能,确保可按指定方向移动
2. 参数推荐值
参数 | 推荐值 | 说明 |
---|---|---|
软限位余量 | 1.0-2.0 米 | 距离硬限位的安全距离 |
接近软限位速度限制 | 10-20% 额定速度 | 接近软限位时的最大允许速度 |
恢复速度 | 15-30% 额定速度 | 限位触发后的恢复移动速度 |
恢复距离 | 0.3-1.0 米 | 限位恢复时的移动距离 |
恢复超时时间 | 5-15 秒 | 防止无限恢复的超时保护 |
四、注意事项
硬件连接:
- 极限开关建议使用常闭触点,确保线路断开时触发保护
- 考虑使用冗余限位开关,提高安全性
机械设计:
- 硬限位应安装在软限位之后,形成双重保护
- 确保限位开关安装牢固,避免振动导致误触发
故障处理:
- 限位触发后,系统应记录事件并报警
- 设计清晰的故障恢复流程,避免误操作
通过以上方案,可实现对六台升降台的完善限位保护,确保在极限触发时,系统能正确限制运动方向,保障设备和人员安全。