CANoe的CAPL编程基础(3)

很久没有更新博客了,既然写了CAPL编程,就把自己知道了都写出来吧。
1、监视总线的情况,这一般会用在查看一段时间内,总线上有没有出现通讯异常的情况。需要使用函数ChkStart_NodeBabbling( ).
如,检测一段时间内总线有没有出现停止通讯的情况:

CheckId=ChkStart_NodeBabbling(CAN::PT_MCU,0);//立即开始检查总线状态
testWaitForTimeout(2000);//延时2s
ChkControl_Stop(CheckId);//停止检测
QueryNumberEvents=ChkQuery_NumEvents(CheckId);//如果在2s内总线停止通讯,则QueryNumberEvents!=0

2、关于获取关键时间点的的总结
(1)CANoe中获取定时器当前计时值的函数为:timerToElapse();该函数原型如下:

long timerToElapse(timer);
long timerToElpase(msTimer);

(2)获取等待某个事件的时间,需要使用函数TestGetLastWaitElapsedTimeNS(),其原型如下:

float TestGetLastWaitElapsedTimeNS();

(3)获取当前的仿真时间点:

float timeNowFloat();

(4)等待指定报文:

long TestWaitForMessage(dbMessage aMessage,dword aTimeout);
long TestWaitForMessage(dword aMessageId,dword aTimeout);

若在aTimeout时间内等到了指定ID的报文,函数返回1,否则返回0;
(5)获取报文的数据,等到了报文之后,如果想知道报文的具体内容可以使用函数:

message msg;
long result;
result=TestGetWaitEventMsgData(msg);
.....处理msg.....

3、多总线测试
设置总线背景,一般都总线测试都会有两路及以上的CAN,这时若要通过CAPL脚本获取某个CAN通道上的报文时,就需要先设置好总线背景,即将总线设置为值监听某一路的CAN通道。下面是一个例子:

void BusContextConfiguration(char yBus[])
{
   yBusContext=GetBusNameContext(yBus);//这里的yBusContext为全局变量
   SetBusContext(yBusContext);
}
//使用:
BusContextConfiguration("CAN1");//将总线监听设为CAN1

此时等待某一路的CAN报文可是这样实现:

res=testWaitForMessage(CAN1::NM_IPU,600);//等待CAN1上的名称为NM_IPU的报文,等待事件为600ms

猜你喜欢

转载自blog.csdn.net/shuoyueqishilove/article/details/78429676