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

Sac*_*mbe 3 env var sys capl difference

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

An *_*her 6

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

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

您可以使用@直接访问环境变量:

@EnvLightState
Run Code Online (Sandbox Code Playgroud)

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

CAPL功能概述»常规»getValue

CAPL功能概述»常规»putValue

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

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

你可以通过使用"直接"访问sysvar

 @Namespace1::ParameterArray[2];
 @Namespace1::Parameter2;
Run Code Online (Sandbox Code Playgroud)

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

从系统变量直接访问值

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

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" />
Run Code Online (Sandbox Code Playgroud)

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