嵌套循环执行异常:步进电机往返动作重复问题排查
步进电机往返循环问题修复
问题根源
- 外层循环的计数器
i递增语句i = i + 1写在了while i < reps循环块之外,导致i始终为初始值0,外层循环无限执行;同时第一次内层循环跑完后,n的值等于steps,后续外层循环直接跳过前进逻辑,只重复执行退回动作。 - 内层循环计数器
n未在每次外层循环开始时重置,第一次完成steps步前进后,n不再满足n < steps的条件,后续循环无法触发前进动作。
修复后的代码
def steptofull(reps, steps, speed, axis, distance): i = 0 strecke = distance # rdistance = 0 while i < reps: n = 0 # 每次往返开始时重置内层步数计数器 while n < steps: distance = strecke // steps # 按步数拆分总距离(整除) # mod = strecke % steps # 可保留此逻辑处理剩余距离误差 fahren(speed, axis, distance) time.sleep(1) flushbuffer() n = n + 1 print(n) # 用初始总距离执行退回,避免变量混淆 fahren(speed, axis, -strecke) time.sleep(1) i = i + 1 # 外层循环计数器移到循环内部递增
补充优化提示
- 原代码退回时误用了被拆分后的
distance变量,改用初始的strecke更准确,避免因变量重赋值导致的逻辑错误 - 如果总距离无法被
steps整除,可利用mod = strecke % steps计算剩余距离,在最后一次前进时将剩余距离补上,提升步进精度
内容的提问来源于stack exchange,提问作者mugnuff
相关产品推荐
相关产品推荐

