话接上回,咱们继续唠。。。
二、控制类
on busOff
busOff在总线测试中是一个避不开的话题,也是CAN总线的一个重要功能,个人感觉有点类似于软件中的看门狗一样,不过看门狗是将软件重启;而CAN总线的busoff也是一样的功能,当CAN节点出现异常后,就会以一种特殊的方法进行计数,达到一定的程度将它禁言,然后恢复则将之前的计数慢慢递减,直至恢复正常,一次来保证整个CAN网络的正产通信;因此在CAN测试中,busOff一定是要有的,而今天我们也介绍一下其相关使用方法,给我们实现这部分测试提供一些思路;
以下是节点进入busoff后打印其Rx和Tx错误计数,并将时间和通道一并打印出来;然后对该通道进行重置的一个方法:
on busOff
{
int errRxCnt;
int errTxCnt;
int channel;
double timestamp; // [seconds]
timestamp = (double)timeNow() / (double)100000;
channel = this.can;
errRxCnt = this.errorCountRX;
errTxCnt = this.errorCountTX;
Write("Bus Off: time=%f channel=%d, errRxCnt=%d, errTxCnt=%d",
timestamp, channel, errRxCnt, errTxCnt);
resetCanEx(channel);
}
注意:this.errorCountRX和this.errorCountTX中任意一个计数器发生改变均会调用该事件;
on errorActive/on errorPassive/on warningLimit
同样我们也可以通过errorActive、errorPassive、warningLimit等关键字,来监测CAN总线控制器的状态,当它的错误计数器(errorCountRX、errorCountTX)发生改变时,即可触发该事件,我们根据具体的需求做出响应的处理,以此来验证当前设备的软件功能的完整性,保证产品的质量。
on errorActive
{
write("CAN Controller is in errorPassive state")
write(" errorCountTX = %d", this.errorCountTX);
write(" errorCountRX = %d", this.errorCountRX);
};
on errorPassive
{
write("CAN Controller is in errorPassive state")
write(" errorCountTX = %d", this.errorCountTX);
write(" errorCountRX = %d", this.errorCountRX);
};
on warningLimit
{
write("CAN Controller is in errorPassive state")
write(" errorCountTX = %d", this.errorCountTX);
write(" errorCountRX = %d", this.errorCountRX);
};
三、测试系统事件
测试系统事件可以在测量开始前、测量开始时和测量结束时调用。例如,on preStart,此处可以作为初始化变量,使用写入功能向write窗口输出启动报告,启动计时器或在测量结束后输出统计信息等。
1、on preStart
on-preStart:主要用在初始化变量、在“write”窗口中显示消息以及从文件中读取数据。在执行on-preStart程序时,不是所有的函数都可以放在该事件下的。例如,使用output函数想总线发送报文,这个是不可以使用的。
on preStart
{
write("Measurement started!");
msg_Count = 0;
}
on start
on start
{
write("start Node A");
setTimer(cycTimer,20);
CallAllOnEnvVar(); // CANoe only
}
2、on preStop/stopMeasurement
在请求测量停止后,会调用on-preStop处理程序。on-preStop功能一般用在执行终止曹组的时候,而且要求这些查找必须在实际测量停止前完成的工作。
on preStop
{
message ShutdownReq m;
output(m);
DeferStop(1000);
}
注意:如果某些操作(如设置环境)仅在StopMeasurement中启动,则不会产生任何影响。但是在需要更复杂的预停止操作,比如向连接的ECU发送关闭消息并且等待确认消息,则需要在on preStop功能中的DeferStop调用可能有助于进一步将测量停止推迟。