|
|
|
@@ -269,12 +269,11 @@ static void PlsrRunControlEnterPostWaitOrNext(void) |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if ((seg->wait_type == PLSR_WAIT_EXT) || |
|
|
|
(seg->wait_type == PLSR_WAIT_EXT_OR_DONE)) |
|
|
|
if (seg->wait_type == PLSR_WAIT_EXT) |
|
|
|
{ |
|
|
|
/* |
|
|
|
* EXT 脉冲发完后等待:停表,输出已经是 0。 |
|
|
|
* 下一段从配置起速(0 则起跳)重新规划;不是接着本段 f_end 往下跑。 |
|
|
|
* 纯 EXT:脉冲发完后仍要等 EXT 沿才跳转。 |
|
|
|
* 停表,下一段从起速/起跳重新规划。 |
|
|
|
*/ |
|
|
|
PlsrPulseDriverStop(); |
|
|
|
s_follow_cont = 0U; |
|
|
|
@@ -294,6 +293,10 @@ static void PlsrRunControlEnterPostWaitOrNext(void) |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* EXT_OR_DONE:脉冲先发完 = 条件已满足,立刻下一段(不再等 EXT)。 |
|
|
|
* EXT 先到:RUN 里已 CutSegToNext,走不到这里。 |
|
|
|
*/ |
|
|
|
PlsrRunControlGotoNextOrFinish(s_cur_seg); |
|
|
|
} |
|
|
|
|
|
|
|
@@ -392,17 +395,15 @@ static uint8_t PlsrRunControlBlocksFollowKeep(uint16_t cur_seg) |
|
|
|
PlsrSeg_t *seg = PlsrParamGetSeg(cur_seg); |
|
|
|
|
|
|
|
/* |
|
|
|
* WAIT时间/信号/ACT:禁止后续无缝衔接(发完后停表等条件)。 |
|
|
|
* EXT/EXT_OR_DONE:脉冲发完之前 EXT 可能尚未触发,发完后进等待态, |
|
|
|
* 此时 PWM 必须停;所以也禁止无缝衔接。 |
|
|
|
* (EXT 触发时若脉冲还在跑,由 CutSegToNext 判断 keep, |
|
|
|
* 那条路不走 BlocksFollowKeep。) |
|
|
|
* WAIT时间/信号/ACT:发完后停表等条件,禁止后续无缝衔接。 |
|
|
|
* EXT:发完后仍等 EXT 沿,必须停表。 |
|
|
|
* EXT_OR_DONE:脉冲先完则条件已满足,允许后续衔接; |
|
|
|
* EXT 先到由 CutSegToNext 自行判断 keep。 |
|
|
|
*/ |
|
|
|
if ((seg->wait_type == PLSR_WAIT_TIME) || |
|
|
|
(seg->wait_type == PLSR_WAIT_SIGNAL) || |
|
|
|
(seg->wait_type == PLSR_WAIT_ACT) || |
|
|
|
(seg->wait_type == PLSR_WAIT_EXT) || |
|
|
|
(seg->wait_type == PLSR_WAIT_EXT_OR_DONE)) |
|
|
|
(seg->wait_type == PLSR_WAIT_EXT)) |
|
|
|
{ |
|
|
|
return 1U; |
|
|
|
} |
|
|
|
@@ -458,8 +459,9 @@ static uint8_t PlsrRunControlResolveSegCallIo(uint16_t seg_0, uint32_t f_tgt, |
|
|
|
|
|
|
|
/* |
|
|
|
* ---------- 终止频率 ---------- |
|
|
|
* 完成方式 / 真末段 / 发完后要停表等(WAIT时间/信号):本段规划到止速。 |
|
|
|
* ACT/EXT 中途打断时剩余减速本来就会丢弃,不影响「进不进减速」。 |
|
|
|
* 完成方式 / 真末段 / 发完后要停表等(WAIT时间/信号/纯EXT/ACT): |
|
|
|
* 本段规划到止速。 |
|
|
|
* EXT_OR_DONE:脉冲先完可衔接下一段;EXT 先到则丢弃剩余减速。 |
|
|
|
* 后续方式且无门禁:过渡到下一段目标。 |
|
|
|
*/ |
|
|
|
next0 = PlsrPathPlanNextSeg(seg_0); |
|
|
|
@@ -1177,8 +1179,7 @@ void PlsrRunControlTickMs(void) |
|
|
|
if (s_wait_is_signal != 0U) |
|
|
|
{ |
|
|
|
seg = PlsrParamGetSeg(s_cur_seg); |
|
|
|
if ((seg->wait_type == PLSR_WAIT_EXT) || |
|
|
|
(seg->wait_type == PLSR_WAIT_EXT_OR_DONE)) |
|
|
|
if (seg->wait_type == PLSR_WAIT_EXT) |
|
|
|
{ |
|
|
|
if (PlsrSignalIoTakeExtFalling() != 0U) |
|
|
|
{ |
|
|
|
|