From a86180eb6b1075b302da87b6984c802e5ad14d39 Mon Sep 17 00:00:00 2001 From: hanyongwei <2043702190@qq.com> Date: Wed, 19 Aug 2026 10:08:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=AD=89=E5=BE=85=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=EF=BC=9AEXT=E6=88=96=E8=80=85=E8=84=89=E5=86=B2?= =?UTF-8?q?=E5=8F=91=E5=AE=8C=EF=BC=8C=E6=94=B9=E4=B8=BA=E5=85=88=E5=88=B0?= =?UTF-8?q?=E5=85=88=E5=88=87=EF=BC=8C=E5=93=AA=E4=B8=AA=E5=85=88=E6=BB=A1?= =?UTF-8?q?=E8=B6=B3=E5=B0=B1=E6=8C=89=E7=85=A7=E5=93=AA=E4=B8=AA=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E5=88=87=E6=AE=B5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hanyongwei <2043702190@qq.com> --- plsr/param/plsr_param.h | 4 ++-- plsr/run_control/plsr_run_control.c | 31 +++++++++++++++-------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/plsr/param/plsr_param.h b/plsr/param/plsr_param.h index 1fd79bd..753eab6 100644 --- a/plsr/param/plsr_param.h +++ b/plsr/param/plsr_param.h @@ -84,8 +84,8 @@ typedef enum { PLSR_WAIT_TIME = 0, /* 发完后等 wait_ms,再跳转 */ PLSR_WAIT_SIGNAL = 1, /* 发完后等 WAIT 口下降沿(EXTI),再跳转 */ PLSR_WAIT_ACT = 2, /* ACT:满 act_ms 从当前频率切下一段;脉冲先完则等到点 */ - PLSR_WAIT_EXT = 3, /* 运行中 EXT 下降沿中途切段并立即跳转 */ - PLSR_WAIT_EXT_OR_DONE = 4 /* EXT 沿或脉冲发完,先到先跳转 */ + PLSR_WAIT_EXT = 3, /* 运行中 EXT 下降沿中途切段;发完后仍等 EXT */ + PLSR_WAIT_EXT_OR_DONE = 4 /* EXT 沿或脉冲发完,先到先切段 */ } PlsrWaitType_e; /** 公共运行参数(运动侧只读此映像,不直接啃寄存器) */ diff --git a/plsr/run_control/plsr_run_control.c b/plsr/run_control/plsr_run_control.c index 7f4bf6f..2b154a5 100644 --- a/plsr/run_control/plsr_run_control.c +++ b/plsr/run_control/plsr_run_control.c @@ -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) {