preStart-->start-->preStop-->stopMeasurement
关于系统事件的定义格式如下:
on preStart /*系统事件,初始化时执行*/
{
resetCan(); /*CAPL接口函数,用于复位CAN控制器*/
}
on start /*系统事件,工程开始时执行*/
{
write(“Just A Try”); /*write()函数将字符串信息在”write”窗口输出*/
}
on preStop /*系统事件,工程预备停止时执行;发生在stopMeasurement事件前面*/
{
write("The Project Will Stop!”);
}
on stopMeasurement /*系统事件,工程停止时执行*/
{
write("The End!\n");
}
2.2、CAN控制器事件
on busOff /*CAN控制器事件:硬件检测到BusOff时执行*/
{
write("BusOff Error!");
}
2.3、CAN消息事件
on message 123 /*接收到123(10进制)这个ID的报文时执行*/
on message 0x441 /*接收到0x441(16进制)这个ID的报文时执行*/
on message BCM /*接收到BCM(工程dbc文件中的报文名)这个报文时执行*/
on message* /*接收到任意报文时都执行(注意*与message之间没有空格)*/
on message 0x300-0x444 /*接收到这个范围内的ID报文时执行*/
{
write(“Received %x”,this.id); /*打印接收到的报文id*/
write(“Received Message %d in total!”,count);
}
void TxMsg_VoiceStatus(void)
{
message VoiceStatus msg; /*将工程中dbc中定义的VoiceStatus这条报文取名为msg*/
msg.VoiceType = @VoiceType; /*对应赋值给到报文的信号,通过报文别名"msg."调出*/
msg.VoiceOperation = @VoiceOperation;
output(msg); /*通过output指令发送该报文*/
}
也可以直接通过后接数据类型(msg.byte(0)这样)去操作,此时操作如下:
void TxMsg_VoiceStatus(void)
{
message VoiceStatus msg; /*将工程中dbc中定义的VoiceStatus这条报文取名为msg*/
msg.byte(0) = ; /*报文第1个数据字节*/
msg.word(1) = ; ; /*报文从第1个字节开始的一个字(2个字节)*/
output(msg); /*通过output指令发送该报文*/
}
2.4、键盘事件
on key ‘a’ /*在小写输入法下,按下键盘的’A’键时执行*/
on key ‘A’ /*在大写输入法下,按下键盘的’A’键时执行*/
on key ‘ ’ /*按下键盘的空格键时执行,注意单引号中间是有空格的*/
on key 0x20 /*按下键盘的空格键时执行*/
on key F2 /*按下键盘的’F2’键时执行*/
on key CtrlF3 /*同时按下键盘的’Ctrl’键和’F3’键时执行*/
on key* /*按下键盘的任意键时都会执行(注意*与key之间没有空格) */
{
write(“The Key Is Press”);
}
2.5、时间事件
variables
{
msTimer Timer1; /*在variables中声明一个以ms为单位的定时器变量Timer1*/
}
on start
{
setTimer(Timer1,100); /*将Timer1的定时时间设定为100ms,并启动它*/
}
on timer Timer1 /*定义的Timer1时间事件,每100ms执行一次*/
{
setTimer(Timer1,100); /*启动下一个周期循环*/
}
on key ‘a‘ /*键盘事件,按下键盘’A’键时执行*/
{
cancelTimer(Timer1); /*停止Timer1这个100ms执行一次的定时器*/
}
on errorFrame /*错误帧事件:硬件检测到错误帧时执行*/
{
write("The error has occur");
}
on envVar BCM_HightBeamAlarm /*环境变量事件:指定的环境变量值有输入时执行*/
{
byte num=0;
num = getValue(this); /*可以使用getValue(环境变量名/this关键字)获取指定的环境变量的值*/
if(num == 1)
{
write("The envVar is %d",@BCM_HightBeamAlarm);
}
else
{
putValue(this,1);/*使用putValue(环境变量名/this关键字,设定的值)改变指定的环境变量的值;直接赋值的话,格式是@BCM_HightBeamAlarm = 1; */
write("Change envVar to %d",@BCM_HightBeamAlarm);
}
}
Ps:关于环境变量的定义是在dbc文件中完成的;CANoe工程导入该dbc文件即可使用其定义的环境变量了。环境变量的创建如下:
2.8、系统变量事件
通过”on sysvar”定义系统变量事件;该事件会在指定的系统变量值有新的输入时执行,其格式及使用方法与前一小节的环境变量基本一致;差别只在于环境变量是在dbc文件中定义的;而系统变量的定义如下:
关于系统变量事件的定义格式示例如下:
on sysvar SysVar1 /*系统变量事件:指定的系统变量值有新的输入时执行*/
{
write("The SysVar1 is %d",@SysVar1);
}
————————————————
阅读原文,关注作者博客
推荐阅读
关于CAN时间同步的理解
关于cdd文件的配置
dbc文件的格式以及创建详解
大众ID.4X的ECU接口梳理
浅析J1939协议 |附下载
大众ID.4 X网络架构详解
学习笔记——NVM数据处理机制
学习笔记——AUTOSAR NVM基础知识
浅析特斯拉Model 3的热管理策略
基于UDS的Bootloder详解
关于整车上下电流程的理解
一文详解奥迪e-tron内部系统 |附下载
ID.3 和大众的电气化平台 |附下载
一文详解CAN总线错误帧|附下载
DoIP协议介绍,资料分享!
详解车载网络 OTA系统的开发|文末附下载
一文了解汽车嵌入式AUTOSAR架构|附下载
特斯拉Autopilot系统安全研究|附dbc下载