车载测试:CANoe中环境变量和系统变量的区别

目录

环境变量和系统变量相同点:

环境变量和系统变量不同点:


环境变量和系统变量相同点:

都可以作为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);
}

 

猜你喜欢

转载自blog.csdn.net/manbskjabgkb/article/details/131775902