我在 CAPL 中制作了一个非常简单的状态机,它告诉我信号何时变高以及它在关闭之前保持开启的时间。现在我还有大约 70 个信号,我需要知道信号何时开始以及在进入 OFF 之前它保持 ON 的时间。我实现的代码在这里。
我的问题:有没有办法模板化这个状态机的功能,所以我不必在代码中的任何地方实现它。
on message x639
{
message x639 mil_obj;
mil_obj = this;
switch(mil_state)
{
case MIL_OFF:
{
if(mil_obj.iHwEcm_MILInput_flg == 1)
{
mil_start_time = (timeNow()/100000);
mil_state = MIL_ON;
}
else
{
mil_state = MIL_OFF;
}
break;
}
case MIL_ON:
{
if(mil_obj.iHwEcm_MILInput_flg == 0)
{
mil_stop_time = (timeNow()/100000);
mil_retval = writeCreate("MIL_STATUS");
writeLineEx(mil_retval,1," MIL turned ON at %ld seconds for a duration of %ld seconds ", mil_start_time, mil_stop_time - mil_start_time);
mil_stop_time =0;
mil_start_time =0;
mil_state = MIL_OFF;
}
else
{
mil_state = MIL_ON;
}
break;
}
default:
break;
}
output(mil_obj);
}