电话/手机:联系客服
我不是加停顿时间,而是加计数,每个扫描周期加一的那种。
计数结果等于1或2(看计数和下一个轴控运动指令谁在前,先扫描到谁)的时候,再执行下一个运动指令。
优质评论内容
问题:连续执行多个位置点,若不插停顿时间,伺服会在中途停一下;目前用“扫描计数=1/2”再发下条指令,效率低且不稳。
// 变量示意
Positions : ARRAY[1..100] OF LREAL; // 目标位置表
i, iNext : INT := 1;
preQueued : BOOL := FALSE;
vel:=200.0; acc:=1000.0; dec:=1000.0;
Move1(Execute:=Trig1, Position:=Positions[i], Velocity:=vel, Acceleration:=acc,
Deceleration:=dec, BufferMode:=mcBlending, Done=>done1, Busy=>busy1, Error=>err1);
// Busy 期间预送下一段(关键)
IF busy1 AND NOT preQueued AND (i+1 <= 100) THEN
Move2(Execute:=TRUE, Position:=Positions[i+1], Velocity:=vel, Acceleration:=acc,
Deceleration:=dec, BufferMode:=mcBlending);
preQueued := TRUE;
END_IF;
// 完成后推进索引
IF Move2.Done THEN
i := i + 2;
preQueued := FALSE;
Trig1 := TRUE; // 下一波只需1个周期的上升沿
END_IF;
// 执行沿单周期脉冲
IF Trig1 THEN Trig1 := FALSE; END_IF;
适用于大量重复点位、节拍要求更高的场景。
| 现象 | 典型原因 | 处理 |
|---|---|---|
| 段与段之间明显刹停 | BufferMode=Abort/Overwrite;下一段未预排队 | 改mcBuffered/mcBlending;Busy时预送下一段 |
| 未到位就“停” | 重复触发导致上一条被中断(Abort) | Execute改上升沿;忙时禁止再触发同段 |
| 必须等InPosition才继续,导致顿挫 | 以InPosition做节拍信号(带窗口/延时) | 以FB的Done或队列完成为条件;Busy期预发下一条 |
| 两轴不同步 | 参数不一致、触发不同时刻 | 统一Vel/Acc/Dec;统一上升沿;必要时用群组或齿轮/凸轮 |
把你当前的轴控FB名称/截图(MC_或汇川自带命名)、两轴触发逻辑的一小段代码发我,我按你的平台直接给出: