环境变量和系统变量相同点:
都可以作为ECU、面板和CAPL程序相连接的媒介。例如,在CAPL程序中,通过改变或监控某一环境变量的值可以触发特定的动作,同样,环境变量的值也可以与面板上控制控件或显示控件相关联。
历史原因:
1、CANoe V6.0版本之前,只能采用环境变量传输软件仿真过程中的数据。
2、在CANoe V6.0版本之后,不仅仿真CAN网络,还支持LIN、FlexRay等其他类型总线的仿真。而环境变量一般通过DBC定义,但DBC一般仅用于CAN网络。在非CAN网络的配置工程中,也需要因此添加额外的DBC专门用于存储环境变量。为了变量的统一管理,引入系统变量,系统变量存储于CANoe配置工程(cfg文件)中,这意味着系统变量独立于任何一种总线及其数据库。
3、环境变量在CANoe V12.0版本之后不适用,不能再新建环境变量。
环境变量和系统变量不同点:
1、支持总线类型
- 系统变量:任意总线类型
- 环境变量:仅CAN总线
2、定义位置
- 系统变量:Environment窗口-SysVar
- 环境变量:DBC
3、保存位置
- 系统变量:CANoe配置工程(cfg文件)、独立的外部XML
- 环境变量:DBC文件
4、数据类型
- 系统变量:有数组,有32位无/有符号整型
- 环境变量:没有数组,无32位无符号整型
在脚本中使用:
1、系统变量
在系统变量被定义好了之后,相当于定义了一个全局变量。可以通过CAPL内自带的函数来完成使用。
// 处理系统变量svSwitch的响应
on sysvar sysvar::MyNamespace::svSwitch
{
// 声明一个CAN报文变量,用于报文发送
message Msg1 msg;
// 读取当前的系统变量svSwitch的值,并赋值给报文的bsSwtich信号
msg.bsSwitch = sysGetVariableInt(sysvar::MyNamespace::svSwitch);
// 将报文输出到总线上
output(msg);
write("当前系统变量svSwitch=%d", @this);
}
2、环境变量
在环境变量被定义好之后,相当于定义了一个局部变量。可以通过CAPL内自带的函数来完成使用。
// 处理环境变量evSwitch的响应
on envvar evSwitch
{
// 声明一个CAN报文变量,用于报文发送
message Controller msg;
// 读取当前的环境变量evSwitch的值,并赋值给报文的Stop信号
msg.Stop = getvalue(this);
// 将报文输出到总线上
output(msg);
}
标签:变量,CANoe,总线,报文,系统,车载,环境变量
From: https://www.cnblogs.com/laoluoits/p/17412746.html