【CANoe之CAPL基础学习_函数用法3】

文章介绍了CANoe中CAPL语言的基础功能,包括监控总线异常如节点故障,使用定时器获取时间点,多总线测试,定时发送报文,信息操作与发送,节点上下线管理以及错误帧的检查。这些内容对于理解和运用CAPL进行CAN网络测试至关重要。
摘要由CSDN通过智能技术生成

【CANoe之CAPL基础学习_函数用法3】

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);0

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

4、定时器函数

- 函数使用介绍

CAPL中的定时器使用很频繁,不如当你测试时需要向纵向定时发送某条CAN报文时就需要用到定时器;
定时器的声明:
msTimer  myTimer1;//声明了一个ms定时器,定时单位是毫秒
timer    myTimer2;//声明了一个以秒为单位的定时器;
设置定时器:
setTimer(myTimer1,500;//设置定时器myTimer1为一个500ms定时器;
setTimerCyclic(myTimer2,1);//设置定时器myTimer2为一个1s为周期的循环定时器;
设置定时器定时事件,即当定时器计时时间到时将要执行的操作:
on timer myTimer1
{
     .......
}

5、信息的操作和发送

- 函数使用介绍

message 0x7ff Msg;//声明一个message,ID=0x7ff
Msg.dlc=8;//设置其DLC=8;
Msg.id=0x100;//更改其ID=0x100;
Msg.byte(0)=55;//设置数据场的第一个字节为55
output(Msg);//发送Msg

6、节点上下线操作

- 函数使用介绍

节点时在dbc文件中定义的节点,如VCU,BMS,MCU等,有时需要将它们离线,离线后不再向总线上发送报文,在线时,可以向总线上发送报文。
节点上线:
void testSetEcuOnline(dbNode aNode);
void testSetEcuOnline(char aNodeName[]);
节点下线:
void testSetEcuOffline(dbNode aNode);
void testSetEcuOffline(char aNodeName[]);

7、检查错误帧

- 函数使用介绍

进行CAN通讯的测试时,检查错误帧是很常见的,要用CAPL脚本实现自动检测错误帧也不困难,它的核心就是调用错误检查函数ChkStart_ErrorFrameOccured();该函数一旦被调用,CANoe就会从此函数被调用时开始持续检测总线上有没有出现错误帧。
dword chechId;
dword numCheckEvents;
checkId=ChkStart_ErrorFrameOccured();//开始检测错误帧
TestAddCondition(checkId);//添加检测条件,如果出现了错误帧,则输出报告中会记录下来
TestWaitForTimeout(5000);//持续检测5s
checkControl_Stop(checkId);//停止检测错误帧
numCheckEvents=ChkQuery_NumEvents(checkId);//对5s内的检测情况进行获取,若函数返回0则没有出现错误帧
if(numCheckEvents>0)
     TestStepFail("Error Frames Occured");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车端域控测试工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值