Vector CANoe 15.1 DEMO版ignition为0/1时onTimer不工作故障咨询
问题根因
- 逻辑结构错误:ignition为0/1分支下的两个
if判断是独立执行的,当开启危险报警灯时(hazardWarning=1,此时turnlights=0),每次50ms调用fMain()时都会先触发第一个if分支,将flag3重置为0 - 定时器被反复重置:紧接着第二个
if判断hazardWarning == 1 && flag3==0条件满足,会反复执行setTimer(HazardCyclic,1000),导致危险报警灯定时器永远无法触发1s的溢出事件,同时每次都会强制将左右信号灯设为1,最终表现为LED常亮 - else分支逻辑错误:原有else分支会在
flag3=1时直接关闭所有灯并取消定时器,进一步破坏闪烁逻辑
修复方案
把ignition为0/1的分支逻辑改为互斥的if-else结构,优先判断危险报警灯状态,避免重复重置标志和定时器,完全符合「ignition为0/1时仅开启危险报警灯功能」的需求,修改后的代码段如下:
if (ignition == 0 || ignition == 1) { if (hazardWarning == 1) { // 危险报警灯开启时仅执行闪烁逻辑 if (flag3 == 0) { @IPC::LeftSignal=1; @IPC::RightSignal=1; setTimer(HazardCyclic,1000); flag1=0; flag2=0; flag3=1; cancelTimer(TurnLeftCyclic); cancelTimer(TurnRightCyclic); } } else { // 危险报警灯关闭时所有灯熄灭,清空状态 @IPC::LeftSignal=0; @IPC::RightSignal=0; flag1=0; flag2=0; flag3=0; cancelTimer(TurnLeftCyclic); cancelTimer(TurnRightCyclic); cancelTimer(HazardCyclic); } }
内容的提问来源于stack exchange,提问作者PerryMOFO
相关产品推荐
相关产品推荐

