Codesys飞锯控制的同步区计算
飞锯控制系统核心在于让锯切机构在运动中与连续流动的物料保持速度和位置完全一致,完成精确切割并返回。同步区的计算决定了切割的精度和锯切的稳定性。以下是在Codesys环境中计算和控制同步区的完整步骤。
1. 确立基础运动学模型
在编写代码前,必须明确物料与锯刀的位置关系。同步区的本质是一个位置窗口,在此窗口内,锯刀的位置误差必须小于允许值。
定义核心变量如下:
| 变量名称 | 类型 | 描述 | 单位 |
|---|---|---|---|
fMaterialSpeed |
REAL | 物料当前的实时线速度 | m/min |
lTargetCut |
REAL | 目标切割长度 | mm |
| lSyncWindowStart | REAL | 同步区起始位置(相对于零点) | mm |
lSyncWindowEnd |
REAL | 同步区结束位置(相对于零点) | mm |
rPosError |
REAL | 锯刀与物料的实时位置误差 | mm |
2. 计算同步区触发点
同步区并非一个固定值,而是根据当前物料速度动态调整的。为了保证锯刀能平稳追上物料,需要预留加减速距离。
计算同步区起点位置的逻辑如下:
$$ L_{start} = L_{target} - L_{decel} - L_{safe} $$
其中:
- $L_{target}$ 是设定的切割长度。
- $L_{decel}$ 是锯刀从最大速度减速到同步速度所需的距离。
- $L_{safe}$ 是安全缓冲距离,用于消除机械延迟或计算抖动。
在Codesys的 ST (结构化文本) 语言中,实现该计算逻辑:
(* 假设系统已获取当前物料速度 fMaterialSpeed *)
(* rAccel 为系统最大加速度,单位 mm/s^2 *)
(* rMaxSpeedDiff 为最大速度差,单位 mm/s *)
(* 计算减速所需距离 *)
rDecelDist := (rMaxSpeedDiff * rMaxSpeedDiff) / (2 * rAccel);
(* 计算同步区触发点,预留 50mm 的安全缓冲 *)
lSyncWindowStart := lTargetCut - rDecelDist - 50.0;
3. 构建同步判断逻辑
同步过程通常分为“捕获同步”、“保持同步”和“脱离同步”三个阶段。使用状态机可以有效管理这些逻辑。
graph TD
A["空闲状态: IDLE"] --> B["追击状态: CATCH_UP"]
B -- "位置差 < 阈值" --> C["同步状态: IN_SYNC"]
C -- "到达切割位置" --> D["切割完成: CUT_DONE"]
D --> E["返回状态: RETURN"]
E -- "回到原点" --> A
B -- "位置差 > 极限值" --> F["故障停机: ERROR"]
在Codesys中,编写状态切换代码,重点关注进入同步区的条件:
CASE CurrentState OF
0: (* 空闲 *)
IF bStartCommand THEN
CurrentState := 10;
END_IF
10: (* 追击 *)
(* 实时计算位置误差:物料位置 - 锯刀位置 *)
rPosError := fMaterialPos - fSawPos;
(* 判断是否进入同步区:误差在允许范围内 *)
IF ABS(rPosError) < rSyncTolerance THEN
CurrentState := 20;
END_IF
20: (* 同步中 *)
(* 保持位置跟随,执行切割逻辑 *)
IF fSawPos >= lTargetCut THEN
bDoCut := TRUE;
CurrentState := 30;
END_IF
END_CASE;
4. 优化同步区参数
实际运行中,机械惯性和编码器分辨率会影响同步效果。调整以下参数以获得最佳同步区:
-
调整
rSyncTolerance(同步容差):- 将该值设置为编码器分辨率的 2 到 5 倍。例如,若编码器分辨率为 0.1 mm,建议设置
rSyncTolerance为0.2至0.5mm。 - 容差过大会导致切割切口不平整;容差过小会导致锯刀频繁在同步区边缘震荡。
- 将该值设置为编码器分辨率的 2 到 5 倍。例如,若编码器分辨率为 0.1 mm,建议设置
-
补偿机械间隙:
- 在计算
lSyncWindowStart时,叠加一个反向间隙补偿值。若机械系统存在反向间隙,同步触发点应相应提前。 - 公式调整为:$L_{start} = L_{target} - L_{decel} - L_{safe} + L_{backlash}$。
- 在计算
5. 监控与调试
在Codesys的监视窗口中,添加以下变量进行实时监控,确保同步区计算准确:
-
观察
rPosError的变化曲线。- 在进入同步区瞬间,该曲线应平滑收敛至 0。
- 若曲线表现为正弦震荡,减小位置环的比例增益或增加积分时间常数。
-
验证同步触发时机。
- 记录进入同步状态瞬间(
CurrentState变为 20)的物料实际位置。 - 对比理论计算值
lSyncWindowStart,两者误差应控制在 ±1 mm 以内。
- 记录进入同步状态瞬间(
-
检查超时故障。
- 添加定时器逻辑。若状态在
CATCH_UP(追击) 停留时间超过预设值(如 5 秒),触发故障报警,防止锯刀一直加速飞车。
- 添加定时器逻辑。若状态在
(* 超时保护逻辑示例 *)
TON(IN := (CurrentState = 10), PT := T#5S, Q => bTimeout);
IF bTimeout THEN
CurrentState := 99; (* 跳转至故障态 *)
bError := TRUE;
wErrorCode := 16#0001; (* 同步超时错误代码 *)
END_IF
暂无评论,快来抢沙发吧!