CANoe的CAPL编程基础(3)

来源:互联网 发布:乎的用法 编辑:程序博客网 时间:2024/05/17 04:56

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

CheckId=ChkStart_NodeBabbling(CAN::PT_MCU,0);//立即开始检查总线状态testWaitForTimeout(2000);//延时2sChkControl_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
原创粉丝点击