Vector - CAPL - 实时时间on *(续1)

话接上回,咱们继续唠。。。

二、控制类

  1. 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中任意一个计数器发生改变均会调用该事件;

  1. 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调用可能有助于进一步将测量停止推迟。

Supongo que te gusta

Origin blog.csdn.net/weixin_54581097/article/details/129700572
Recomendado
Clasificación