CAPL脚本中系统变量和环境变量之间有什么区别?

时间:2016-03-18 06:02:07

标签: var difference sys env capl

CAPL脚本中的系统变量和环境变量之间的区别是什么?

2 个答案:

答案 0 :(得分:5)

环境变量必须用作节点的输入/输出,大多数都属于指定的ECU。它们由以下系统参数定义:

  • 访问指定的ECU(r,w,rw,unrestricted =>每个ECU可以访问)
  • datatype:int(32bit),string(ascii),float,data + data length
  • 单元/尺寸
  • 初始值,最小值,最大值
  • 可以定义值表(可能只对int数据类型?)

您可以使用@:

直接访问环境变量
@EnvLightState

但你不能只为int或float这样做。可以使用以下两个简单函数访问任何数据类型:

  

CAPL功能概述»常规»getValue

     

CAPL功能概述»常规»putValue

系统变量被CANoe组件广泛使用,其中许多是自动生成的,无法编辑。它们属于定义的命名空间。 sysvars的值仅在测量运行时可用,因此您不希望将它们用于例如UI-面板。

  • datatype:int(32,64),double,string,data,int数组,double数组,预定义结构(不允许用户定义)
  • 可以定义初始值
  • 可以为int数据类型
  • 定义值表

您可以使用

“直接”访问sysvar
 @Namespace1::ParameterArray[2];
 @Namespace1::Parameter2;

然而,这种方式无法访问整个数组或字符串(数据未在帮助中提及,但可能是同样的事情)。您也无法使用@访问XML-Test模块中定义的任何sysvar,请在帮助中阅读:

  

从系统变量直接访问值

为系统变量定义了CAPL函数(SysGet ...,SysSet ...,SysDefine ...,SysUndefine ......以及其他一些),请查看帮助:

  

CAPL功能概述»系统变量CAPL功能

这里是一个来自XML测试函数 Set 的例子,其中两个都被使用,你可以在CANoe帮助中找到这个例子

<!-- Context of this test function is e.g. a testcase, other contexts are possible -->    
<set title="Set">
    <cansignal name="CrashDetected"> 0 </cansignal>
    <linsignal name="MotorControl"> 0 </linsignal>
    <flexraysignal name="BreakLight"> 0 </flexraysignal>
    <envvar name="EnvAccelerate"> 0 </envvar>
    <sysvar name="SysFrontLight_Right" namespace="Lights">0</sysvar>
</set>
<wait time="200" title="Swing in time for system" />

如果您知道/发现任何其他差异,请延长

答案 1 :(得分:0)

根据我自己创建CANoe模拟的经验,“On EnvVar”回调存在限制,即如果将相同的值应用于环境变量,则其中的代码将不会执行,例如

variables
{
  mstimer tLoop;
  int i;
}

on start
{
  i = 0;
  setTimerCyclic(tLoop, 1000);
}

on envVar Env_Number 
{
  write("Env_Number is %d", @this); 
}

on sysvar_update Sys_Number 
{
  write("Sys_Number is %d", @this);
}

on timer tLoop
{
  write("%d", ++i);
  @Env_Number = 0x1;
  @sysvar::Sys_Number = 0x2;
}

在此示例中,环境变量的值被写入一次,因为这是变量值更改的唯一时间。

CAPL / .NET 1
CAPL / .NET Env_Number is 1
CAPL / .NET Sys_Number is 2
CAPL / .NET 2
CAPL / .NET Sys_Number is 2
CAPL / .NET 3
CAPL / .NET Sys_Number is 2
CAPL / .NET 4
CAPL / .NET Sys_Number is 2
CAPL / .NET 5
CAPL / .NET Sys_Number is 2
CAPL / .NET 6
CAPL / .NET Sys_Number is 2
CAPL / .NET 7
CAPL / .NET Sys_Number is 2
CAPL / .NET 8
CAPL / .NET Sys_Number is 2
CAPL / .NET 9
CAPL / .NET Sys_Number is 2
CAPL / .NET 10
CAPL / .NET Sys_Number is 2

使用'on sysvar_update'即使应用了相同的值,也会写入变量值。如果您需要与'on envvar'相同的行为但使用系统变量,则使用'on sysvar'代替。