CPAL脚本自动化测试 ———— System Variables 系列函数

文章目录

General Functions

sysDefineNamespace

使用方法

在这里插入图片描述

函数作用

 定义名称空间。具体的返回值有如下情况:
  0:无错误,功能成功
  1:未找到名称空间或第二次尝试定义相同的名称空间
  2:变量未找到或第二次尝试定义相同的变量
  3:对于可用的命名空间没有书写权
  4:变量没有适合函数的类型

sysUndefineNamespace

使用方法

在这里插入图片描述

函数作用

 删除名称空间。 此外,此命名空间中的所有变量都会自动删除。具体的返回值有如下情况:
  0:无错误,功能成功
  1:未找到名称空间或第二次尝试定义相同的名称空间
  2:变量未找到或第二次尝试定义相同的变量
  3:对于可用的命名空间没有书写权
  4:变量没有适合函数的类型

sysUndefineVariable

使用方法

在这里插入图片描述

函数作用

 删除一个系统变量。具体的返回值有如下情况:
  0:无错误,功能成功
  1:未找到名称空间或第二次尝试定义相同的名称空间
  2:变量未找到或第二次尝试定义相同的变量
  3:对于可用的命名空间没有书写权
  4:变量没有适合函数的类型

Define Variables

sysDefineVariableData

使用方法

在这里插入图片描述

函数作用

 定义数据类型的变量。使用此函数定义的变量只能使用 sysGetVariable…/sysSetVariable… 函数访问,其中命名空间和变量名称作为字符串参数给出。 只能使用可用命名空间创建变量。 命名空间可以用 sysDefineNamespace 创建。

sysDefineVariableFloat

使用方法

在这里插入图片描述

函数作用

 定义浮点型变量。使用此函数定义的变量只能使用 sysGetVariable…/sysSetVariable… 函数访问,其中命名空间和变量名称作为字符串参数给出。只能使用可用命名空间创建变量。命名空间可以用 sysDefineNamespace 创建。

sysDefineVariableFloatArray

使用方法

在这里插入图片描述

函数作用

 定义 float[] 类型的变量。使用此函数定义的变量只能使用 sysGetVariable…/sysSetVariable… 函数访问,其中命名空间和变量名称作为字符串参数给出。变量只能使用 可用的命名空间。 命名空间可以用 sysDefineNamespace 创建。

sysDefineVariableInt

使用方法

在这里插入图片描述

函数作用

 定义一个 int 类型的变量。使用此函数定义的变量只能使用 sysGetVariable…/sysSetVariable… 函数访问,其中命名空间和变量名称作为字符串参数给出。变量只能是 使用可用的命名空间创建。 命名空间可以用 sysDefineNamespace 创建。

sysDefineVariableIntArray

使用方法

在这里插入图片描述

函数作用

 定义字符串 (char[]) 类型的变量。使用此函数定义的变量只能使用 sysGetVariable…/sysSetVariable… 函数访问,其中命名空间和变量名称作为字符串参数给出。变量只能是 使用可用的命名空间创建。 命名空间可以用 sysDefineNamespace 创建。

sysDefineVariableString

使用方法

在这里插入图片描述

函数作用

 定义字符串 (char[]) 类型的变量。使用此函数定义的变量只能使用 sysGetVariable…/sysSetVariable… 函数访问,其中命名空间和变量名称作为字符串参数给出。变量只能是 使用可用的命名空间创建。 命名空间可以用 sysDefineNamespace 创建。

Return Data of a Variable

sysGetOrigTimeNS

使用方法

在这里插入图片描述

函数作用

 返回上次更新变量值的原始时间戳,在时间同步可能已经改变它之前。自测量开始以来以纳秒为单位的最后更新变量值的原始时间戳。

示例

int64 timeStamp;
timeStamp = sysGetOrigTimeNS(sysvar::MyNamespace::FloatVar);

sysGetVariableArrayLength

使用方法

在这里插入图片描述

函数作用

 返回系统变量数组的长度。直接访问系统变量中的值。 使用此变体无法访问整个数组。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。

 对于数据类型的系统变量,返回值的当前大小(以字节为单位)。
 对于 long 或 float 数组类型的系统变量,返回数组中的元素数。
 对于字符串类型的系统变量,返回字符串的长度,不包括终止字符 0。
 对于 long 或 float 类型的系统变量,返回 1。

示例

// calculate the norm of a vector
dword length, i;
double element, sum, norm;
sum = 0.0;
length = sysGetVariableArrayLength(sysvar::MyVariables::MyVector);
for (i = 0; i < length; ++i) 
{
   element = @sysvar::MyVariables::MyVector[i];
   sum += element * element;
}
norm = sqrt(sum);

sysGetVariableData

使用方法

在这里插入图片描述

函数作用

 返回数据、字符串、结构或通用数组类型的变量的值。该函数还可用于结构或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果直接将元素名称提供给函数而不是使用字符串,则在名称之前添加 sysvarMember:: 而不是 sysvar::。对于字符串类型的变量,将返回字符串的原始字节。 该值以 UTF-8 编码或以计算机的当前活动代码页编码,具体取决于 CANoeOptions 对话框(字符串编码)中的设置。 字节包括终止的 0。

示例

on key 'e'
{
  sysvarData * svData1;
  char valueSysVarData[100];
  byte buf[2];
  long size = 2;
  long copiedBytes;
  byte data[2] = {0xAF, 0xEF};
  svData1 = getSysVarData(0);
  sysGetVariableData(svData1, buf, copiedBytes);
  write("Variable is %s, Value is %x", svData1.name, buf[0]);
  sysSetVariableData(svData1, data, size);
  sysGetVariableData(svData1, buf, copiedBytes);
  write("Variable is %s, Value is now: %x", svData1.name, buf[0]);
  svData1 = getSysVarData(1);
  sysGetVariableData(svData1, buf, copiedBytes);
  write("Variable is %s, Value is %x", svData1.name, buf[0]);
  svData1 = getSysVarData(2);
  sysGetVariableData(svData1, buf, copiedBytes);
  write("Variable is %s, Value is %x", svData1.name, buf[0]);
}

sysvarData * getSysVarData(int eKey)
  {
  switch (eKey)
  {
  case 0:
    return sysvar::FMW1::KeyData;
  case 1:
    return sysvar::DCM::SpeedSignalData;
  default:
    return sysvar::Engine::EngineStateData;
  }
}

sysGetVariableDescriptionForValue

使用方法

在这里插入图片描述

函数作用

 检索 long 或 long array 类型的系统变量的值的描述。 这样就可以访问系统变量的值表了。

示例

char buffer[20];
sysGetVariableDescriptionForValue("Dynamic", "IntVar", 0, buffer, elcount(buffer));

sysGetVariableDWord

使用方法

在这里插入图片描述

函数作用

 返回类型为无符号 32 位整数的变量的值。直接访问系统变量中的值。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。

示例

sysGetVariableDWord(sysvar::MyNamespace::UInt32Var);

sysGetVariableFloat

使用方法

在这里插入图片描述

函数作用

 返回double类型变量的值。直接从系统变量中获取值。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。

示例

on key 'b'
{
  double value;
  value = SysGetVariableFloat(sysvar::MyNamespace::FloatVar);
  write("Value of FloatVar is %g", value);
}

on key 'c'
{
  sysvarFloat * svFloat1; //defines a local system variable 'sv1Float' with the system variable type 'sysvarFloat'
  float valueSysVar;
  svFloat1 = getSysVarFloat(0);
  //@svFloat1 = 1.5;
  write("Variable is %s, Value is %7.3f", svFloat1.name, @svFloat1);
  //@svFloat1 = @svFloat1*2.5;
  sysSetVariableFloat(svFloat1, @svFloat1*2.5);
  write("Variable is %s, Value is higher: %7.3f", svFloat1.name, @svFloat1);
  svFloat1 = getSysVarFloat(1);
  write("Variable is %s, Value is %7.3f", svFloat1.name, @svFloat1);
  svFloat1 = getSysVarFloat(2);
  valueSysVar = sysGetVariableFloat(svFloat1);
  write("Variable is %s, Value is %d", svFloat1.name, valueSysVar);
}

sysvarFloat * getSysVarFloat(int cKey)
{
  switch (cKey)
  {
  case 0:
    return sysvar::FMW1::KeyFloat;
  case 1:
    return sysvar::DCM::SpeedSignalFloat;
  default:
    return sysvar::Engine::EngineFloat;
  }
}

sysGetVariableFloatArray

使用方法

在这里插入图片描述

函数作用

 如果系统变量的实际数组大小大于作为参数给出的数组大小,则 values 数组中直到作为参数给出的数组大小的所有元素都将接收系统变量的当前值。 values 数组中超出作为参数给出的数组大小的元素将保持不变。如果系统变量的实际数组大小小于作为参数给出的数组大小,则 values 数组中的其他元素将被设置为 0。 超出作为参数给出的数组大小的值数组将保持不变。切勿将大于值数组实际大小的数组大小作为参数提供,这将导致不可预测的行为。

示例

on key 'g'
{
  sysvarFloatArray * sv1;
  float fVarArr [5] = {7.3, 7.3, 7.3, 7.3, 7.3};
  sv1 = getSysVarFloatArray(0);
  write("Variable is %s%s, Value is %2.1lf", sv1.name, "[0]", @sv1[0]);
  sysSetVariableFloatArray(sv1,fVarArr, elcount(fVarArr));
  write("Variable is %s%s, Value is: %2.1lf", sv1.name, "[0]",@sv1[0]);
  sv1 = getSysVarFloatArray(1);
  write("Variable is %s%s, Valgue is %2.1lf", sv1.name, "[0]", @sv1[0]);
  sv1 = getSysVarFloatArray(2);
  sysGetVariableFloatArray (sv1, fVarArr, elcount(fVarArr));
  write("Variable is %s%s, Value is %2.1lf", sv1.name, "[0]",fVarArr[0]);
}

sysvarFloatArray * getSysVarFloatArray (int gKey)
{
  switch (gKey)
  {
  case 0:
    return sysvar::FMW1::KeyFloatArray;
  case 1:
    return sysvar::DCM::SpeedSignalFloatArray;
  default:
    return sysvar::Engine::EngineFloatArray;
  }
}

sysGetVariableInt

使用方法

在这里插入图片描述

函数作用

 返回 32 位整数类型变量的值。直接访问系统变量中的值。该函数还可用于 struct 或泛型数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接给函数提供元素名称而不是使用字符串,在名称前面加上 sysvarMember:: 而不是 sysvar::。该函数也可以用于无符号整数类型的变量。 也可以简单地将结果转换为 dword。

示例

on key 'a'
{
  sysvarInt * sv1; //defines a local system variable 'sv1' with the system variable type 'sysvarInt'
  int valueSysVar;
  sv1 = getSysVar(0);
  write("Variable is %s, Value is %d", sv1.name, @sv1);
  //@sv1++;
  sysSetVariableInt(sv1, @sv1+1);
  write("Variable is %s, Value is higher: %d", sv1.name, @sv1);
  sv1 = getSysVar(1);
  write("Variable is %s, Value is %d", sv1.name, @sv1);
  sv1 = getSysVar(2);
  valueSysVar = sysGetVariableInt(sv1);
  write("Variable is %s, Value is %d", sv1.name, valueSysVar);
}

sysvarInt * getSysVar(int aKey)
{
  switch (aKey)
  {
  case 0:
    return sysvar::FMW1::Key;
  case 1:
    return sysvar::DCM::SpeedSignal;
  default:
    return sysvar::Engine::EngineStateSwitch;
  }
}

sysGetVariableLongArray

使用方法

在这里插入图片描述

函数作用

 如果系统变量的实际数组大小大于作为参数给出的数组大小,则 values 数组中直到作为参数给出的数组大小的所有元素都将接收系统变量的当前值。 values 数组中超出作为参数给出的数组大小的元素将保持不变。如果系统变量的实际数组大小小于作为参数给出的数组大小,则 values 数组中的其他元素将被设置为 0。超出作为参数给出的数组大小的值数组将保持不变。切勿将大于值数组实际大小的数组大小作为参数提供,这将导致不可预测的行为。

示例

on key 'f'
{
  sysvarIntArray * sv1;
  long lVarArr [5] = {7, 7, 7, 7, 7};
  sv1 = getSysVarIntArray(0);
  write("Variable is %s%s, Value is %d", sv1.name, "[0]", @sv1[0]);
  sysSetVariableLongArray(sv1,lVarArr, elcount(lVarArr));
  write("Variable is %s%s, Value is: %d", sv1.name, "[0]",@sv1[0]);
  sv1 = getSysVarIntArray(1);
  write("Variable is %s%s, Value is %d", sv1.name, "[0]", @sv1[0]);
  sv1 = getSysVarIntArray(2);
  sysGetVariableLongArray (sv1, lVarArr, elcount(lVarArr));
  write("Variable is %s%s, Value is %d", sv1.name, "[0]",lVarArr[0]);
}

sysvarIntArray * getSysVarIntArray (int fKey)
{
  switch (fKey)
  {
  case 0:
    return sysvar::FMW1::KeyIntegerArray;
  case 1:
    return sysvar::DCM::SpeedSignalIntegerArray;
  default:
    return sysvar::Engine::EngineIntegerArray;
  }
}

sysGetVariableLongLong

使用方法

在这里插入图片描述

函数作用

 返回 64 位整数类型变量的值。直接访问系统变量中的值。该函数还可用于 struct 或泛型数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接给函数提供元素名称而不是使用字符串,在名称前面加上 sysvarMember:: 而不是 sysvar::。该函数也可以用于无符号整数类型的变量。 你可以简单地将结果转换为 dword。

示例

sysGetVariableLongLong(sysvar::MyNamespace::Int64Var);

sysGetVariableMax

使用方法

在这里插入图片描述

函数作用

 检索变量的最大值。直接访问系统变量中的值。该函数还可用于结构类型或泛型数组的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接给函数提供元素名称而不是使用字符串,在名称前面加上 sysvarMember:: 而不是 sysvar::。该函数也可以用于无符号整数类型的变量。

sysGetVariableMin

使用方法

在这里插入图片描述

函数作用

 检索整数或整数数组类型变量的最小值。 直接访问系统变量的值。该函数还可用于结构类型或泛型数组的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接给函数提供元素名称而不是使用字符串,在名称前面加上 sysvarMember:: 而不是 sysvar::。该函数也可以用于无符号整数类型的变量。

sysGetVariableQWord

使用方法

在这里插入图片描述

函数作用

 返回无符号 64 位整数类型变量的值。直接访问系统变量中的值。该函数还可用于结构类型或泛型数组的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接给函数提供元素名称而不是使用字符串,在名称前面加上 sysvarMember:: 而不是 sysvar::。该函数也可以用于无符号整数类型的变量。

示例

sysGetVariableQWord(sysvar::MyNamespace::UInt64Var);

sysGetVariableString

使用方法

在这里插入图片描述

函数作用

 返回字符串 (char[]) 类型变量的值。直接访问系统变量中的值。 使用此变体无法访问整个字符串。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。

示例

on key 'd'
{
  sysvarString * svString1;
  char valueSysVarString[100];
  char buf[100];
  svString1 = getSysVarString(0);
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable is %s, Value is %s", svString1.name, buf);
  sysSetVariableString(svString1, "OFF");
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable is %s, Value is now: %s", svString1.name, buf);
  svString1 = getSysVarString(1);
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable is %s, Value is %s", svString1.name, buf);
  svString1 = getSysVarString(2);
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable is %s, Value is %s", svString1.name, buf);
}

sysvarString * getSysVarString(int cKey)
{
  switch (cKey)
  {
  case 0:
    return sysvar::FMW1::KeyString;
  case 1:
    return sysvar::DCM::SpeedSignalString;
  default:
    return sysvar::Engine::EngineStateString;
  }
}

sysGetVariableSVType

使用方法

在这里插入图片描述

函数作用

 获取编码为长整数的系统变量的类型。具体的返回值如下:
  0: Invalid
  1: Double (64 Bit)
  2: Integer (32 Bit)
  3: String
  4: Double Array
  5: Integer Array
  6: Integer (64 Bit)
  7: Data

示例

long t1, t2;
t1 = sysGetVariableSVType(lookupSysvar("mysysvar"));
t2 = sysGetVariableSVType(sysvar::mysysvar);

sysGetVariableTimeNS

使用方法

在这里插入图片描述

函数作用

 返回上次更新变量值的时间戳。直接访问系统变量中的值。

示例

int64 timeStamp;
timeStamp = sysGetVariableTimeNS(sysvar::MyNamespace::FloatVar);

sysGetVariableValueForDescription

使用方法

在这里插入图片描述

函数作用

 检索 long 或 long array 类型的系统变量的值描述的值。 这样就可以访问系统变量的值表了。

示例

long val;
sysGetVariableValueForDescription("Dynamic", "IntVar", "Zero", val);

Set Value of a Variable

sysSetAnalysisOnlyVariable

使用方法

在这里插入图片描述

函数作用

 确定变量是否旨在用于分析目的。如果这是真的(anlyzLocal 设置为 1),并且变量在测量设置的 CAPL 程序中更改,则值更改不会传输到实时部分 CANoe,但在分析部分立即使用。 这是默认值。如果为false(anlyzLocal 设置为0),则始终将值更改传输到实时部分。

示例

sysSetAnalysisOnlyVariable(sysvar::MyNamespace::StringVar, 1);

sysSetVariableData

使用方法

在这里插入图片描述

函数作用

 设置数据、字符串、结构或通用数组类型的变量的值。该函数还可用于结构或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接将元素名称提供给函数而不是使用字符串,则在名称之前添加 sysvarMember:: 而不是 sysvar::。对于字符串类型的变量,将设置字符串的原始字节。 字符串值必须以 UTF-8 编码或以计算机的当前活动代码页编码,具体取决于 CANoeOptions(字符串编码)中的设置。 终止 0 是可选的。

示例

on key 'e'
{
  sysvarData * svData1;
  char valueSysVarData[100];
  byte buf[2];
  long size = 2;
  long copiedBytes;
  byte data[2] = {0xAF, 0xEF};
  svData1 = getSysVarData(0);
  sysGetVariableData(svData1, buf, copiedBytes);
  write("Variable is %s, Value is %x", svData1.name, buf[0]);
  sysSetVariableData(svData1, data, size);
  sysGetVariableData(svData1, buf, copiedBytes);
  write("Variable is %s, Value is now: %x", svData1.name, buf[0]);
  svData1 = getSysVarData(1);
  sysGetVariableData(svData1, buf, copiedBytes);
  write("Variable is %s, Value is %x", svData1.name, buf[0]);
  svData1 = getSysVarData(2);
  sysGetVariableData(svData1, buf, copiedBytes);
  write("Variable is %s, Value is %x", svData1.name, buf[0]);
}

sysvarData * getSysVarData(int eKey)
  {
  switch (eKey)
  {
  case 0:
    return sysvar::FMW1::KeyData;
  case 1:
    return sysvar::DCM::SpeedSignalData;
  default:
    return sysvar::Engine::EngineStateData;
  }
}

sysSetVariableDescriptionForValue

使用方法

在这里插入图片描述

函数作用

 为 long 或 long array 类型的系统变量的特定值设置描述。 通过这种方式,可以为使用sysDefineVariableInt/sysDefineVariableIntArray 创建的变量定义值表。

示例

sysSetVariableDescriptionForValue("Dynamic", "IntVar", 0, "Zero");

sysSetVariableDWord

使用方法

在这里插入图片描述

函数作用

 设置类型为无符号 32 位整数的变量的值。 从系统变量直接访问值。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果您直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。

示例

sysSetVariableDWord(sysvar::MyNamespace::UInt32Var, 1);

sysSetVariableFloat

使用方法

在这里插入图片描述

函数作用

 设置双精度型变量的值。直接访问系统变量中的值。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果您直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。

示例

on key 'c'
{
  sysvarFloat * svFloat1; //defines a local system variable 'sv1Float' with the system variable type 'sysvarFloat'
  float valueSysVar;
  svFloat1 = getSysVarFloat(0);
  //@svFloat1 = 1.5;
  write("Variable is %s, Value is %7.3f", svFloat1.name, @svFloat1);
  //@svFloat1 = @svFloat1*2.5;
  sysSetVariableFloat(svFloat1, @svFloat1*2.5);
  write("Variable is %s, Value is higher: %7.3f", svFloat1.name, @svFloat1);
  svFloat1 = getSysVarFloat(1);
  write("Variable is %s, Value is %7.3f", svFloat1.name, @svFloat1);
  svFloat1 = getSysVarFloat(2);
  valueSysVar = sysGetVariableFloat(svFloat1);
  write("Variable is %s, Value is %d", svFloat1.name, valueSysVar);
}

sysvarFloat * getSysVarFloat(int cKey)
{
  switch (cKey)
  {
  case 0:
    return sysvar::FMW1::KeyFloat;
  case 1:
    return sysvar::DCM::SpeedSignalFloat;
  default:
    return sysvar::Engine::EngineFloat;
  }
}

sysSetVariableFloatArray

使用方法

在这里插入图片描述

函数作用

 设置 float[] 类型变量的值。只有当作为参数给出的数组大小等于系统变量的实际数组大小时,调用才会成功(您不能动态更改该大小)。 系统变量的当前值将被设置为值数组中的元素,范围从 0 到 arraySize。永远不要将大于值数组实际大小的数组大小作为参数提供,这会导致不可预测的行为。

示例

on key 'g'
{
  sysvarFloatArray * sv1;
  float fVarArr [5] = {7.3, 7.3, 7.3, 7.3, 7.3};
  sv1 = getSysVarFloatArray(0);
  write("Variable is %s%s, Value is %2.1lf", sv1.name, "[0]", @sv1[0]);
  sysSetVariableFloatArray(sv1,fVarArr, elcount(fVarArr));
  write("Variable is %s%s, Value is: %2.1lf", sv1.name, "[0]",@sv1[0]);
  sv1 = getSysVarFloatArray(1);
  write("Variable is %s%s, Valgue is %2.1lf", sv1.name, "[0]", @sv1[0]);
  sv1 = getSysVarFloatArray(2);
  sysGetVariableFloatArray (sv1, fVarArr, elcount(fVarArr));
  write("Variable is %s%s, Value is %2.1lf", sv1.name, "[0]",fVarArr[0]);
}

sysvarFloatArray * getSysVarFloatArray (int gKey)
{
  switch (gKey)
  {
  case 0:
    return sysvar::FMW1::KeyFloatArray;
  case 1:
    return sysvar::DCM::SpeedSignalFloatArray;
  default:
    return sysvar::Engine::EngineFloatArray;
  }
}

sysSetVariableInt

使用方法

在这里插入图片描述

函数作用

 设置 32 位整数类型变量的值。直接访问系统变量中的值。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果你直接给函数提供元素名称而不是使用字符串,在名称前面加上 sysvarMember:: 而不是 sysvar::。该函数也可以用于无符号整数类型的变量。 您可以简单地将该值转换为 long。

示例

on key 'a'
{
  sysvarInt * sv1; //defines a local system variable 'sv1' with the system variable type 'sysvarInt'
  int valueSysVar;
  sv1 = getSysVar(0);
  write("Variable is %s, Value is %d", sv1.name, @sv1);
  //@sv1++;
  sysSetVariableInt(sv1, @sv1+1);
  write("Variable is %s, Value is higher: %d", sv1.name, @sv1);
  sv1 = getSysVar(1);
  write("Variable is %s, Value is %d", sv1.name, @sv1);
  sv1 = getSysVar(2);
  valueSysVar = sysGetVariableInt(sv1);
  write("Variable is %s, Value is %d", sv1.name, valueSysVar);
}

sysvarInt * getSysVar(int aKey)
{
  switch (aKey)
  {
  case 0:
    return sysvar::FMW1::Key;
  case 1:
    return sysvar::DCM::SpeedSignal;
  default:
    return sysvar::Engine::EngineStateSwitch;
  }
}

sysSetVariableLongArray

使用方法

在这里插入图片描述

函数作用

 设置 int[] 类型变量的值。只有当作为参数给出的数组大小等于系统变量的实际数组大小时,调用才会成功(您不能动态更改该大小)。 系统变量的当前值将被设置为值数组中的元素,范围从 0 到 arraySize。永远不要将大于值数组实际大小的数组大小作为参数提供,这会导致不可预测的行为 .

示例

on key 'f'
{
  sysvarIntArray * sv1;
  long lVarArr [5] = {7, 7, 7, 7, 7};
  sv1 = getSysVarIntArray(0);
  write("Variable is %s%s, Value is %d", sv1.name, "[0]", @sv1[0]);
  sysSetVariableLongArray(sv1,lVarArr, elcount(lVarArr));
  write("Variable is %s%s, Value is: %d", sv1.name, "[0]",@sv1[0]);
  sv1 = getSysVarIntArray(1);
  write("Variable is %s%s, Value is %d", sv1.name, "[0]", @sv1[0]);
  sv1 = getSysVarIntArray(2);
  sysGetVariableLongArray (sv1, lVarArr, elcount(lVarArr));
  write("Variable is %s%s, Value is %d", sv1.name, "[0]",lVarArr[0]);
}

sysvarIntArray * getSysVarIntArray (int fKey)
{
  switch (fKey)
  {
  case 0:
    return sysvar::FMW1::KeyIntegerArray;
  case 1:
    return sysvar::DCM::SpeedSignalIntegerArray;
  default:
    return sysvar::Engine::EngineIntegerArray;
  }
}

sysSetVariableLongLong

使用方法

在这里插入图片描述

函数作用

 设置 64 位整数类型变量的值。直接访问系统变量中的值。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果您直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。 该函数还可用于无符号 64 位整数类型的变量。 您可以简单地将该值转换为 int64。

示例

int64 llVar;
sysSetVariableLongLong(sysvar::MyNamespace::Int64Var, llVar);

sysSetVariableQWord

使用方法

在这里插入图片描述

函数作用

 设置类型为无符号 64 位整数的变量的值。直接访问系统变量中的值。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果您直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。

示例

sysSetVariableQWord(sysvar::MyNamespace::UInt64Var, 1);

sysSetVariableString

使用方法

在这里插入图片描述

函数作用

 设置字符串 (char[]) 类型变量的值。直接访问系统变量中的值。 该函数还可用于结构类型或通用数组类型的系统变量的特定元素。 为此,将元素添加到变量的名称中。 如果您直接将元素名称提供给函数而不是使用字符串,请在名称前加上 sysvarMember:: 而不是 sysvar::。

示例

on key 'd'
{
  sysvarString * svString1;
  char valueSysVarString[100];
  char buf[100];
  svString1 = getSysVarString(0);
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable is %s, Value is %s", svString1.name, buf);
  sysSetVariableString(svString1, "OFF");
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable is %s, Value is now: %s", svString1.name, buf);
  svString1 = getSysVarString(1);
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable is %s, Value is %s", svString1.name, buf);
  svString1 = getSysVarString(2);
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable is %s, Value is %s", svString1.name, buf);
}

sysvarString * getSysVarString(int cKey)
{
  switch (cKey)
  {
  case 0:
    return sysvar::FMW1::KeyString;
  case 1:
    return sysvar::DCM::SpeedSignalString;
  default:
    return sysvar::Engine::EngineStateString;
  }
}

Structs of System Variable

sysBeginVariableStructUpdate

使用方法

在这里插入图片描述

函数作用

 开始更新 struct 或泛型数组类型的系统变量的多个元素。使用此函数和相应的 sysEndVariableStructUpdate 同时更改多个元素,而变量不具有中间值,其中仅更改了某些元素。 每次调用后都必须调用 sysEndVariableStructUpdate,否则变量值不会改变。

示例

sysBeginVariableStructUpdate(sysvar::XCP::ECU_2::KL2);

sysEndVariableStructUpdate

使用方法

在这里插入图片描述

函数作用

 结束对 struct 或泛型数组类型的系统变量的多个元素的更新。使用此函数和相应的 sysBeginVariableStructUpdate 同时更改多个元素,而变量不具有中间值,其中仅更改了某些元素。

示例

sysEndVariableStructUpdate(sysvar::XCP::ECU_2::KL2);

sysGetVariableMemberPhys

使用方法

在这里插入图片描述

函数作用

 检索结构或泛型数组类型变量的特定元素的物理值。

示例

double val;
sysGetVariableMemberPhys(sysvarMember::XCP::ECU_2::KL2.Curve2[0], val);

sysSetVariableMemberPhys

使用方法

在这里插入图片描述

函数作用

 设置结构或泛型数组类型变量的特定元素的物理值。

示例

sysSetVariableMemberPhys(sysvarMember::XCP::ECU_2::KL2.Curve2[0], 1.2);

Variable filters

sysCreateVariableFilter

使用方法

在这里插入图片描述

函数作用

 在调用函数的节点后面创建一个新的变量过滤器。 如果未提供 filterName,则创建具有空名称的默认过滤器。

示例

long result;
//create the default filter as a Stop Filter.
result = sysCreateVariableFilter(0);

sysFilterAddNamespace

使用方法

在这里插入图片描述

函数作用

 向变量过滤器添加命名空间。 如果没有给出 filterName,命名空间被添加到默认过滤器中。

示例

long result;
//create the default filter as a Stop Filter
result = sysCreateVariableFilter(0);
//add a namespace to the filter.
result = sysFilterAddNamespace(“myNamespace”);

sysFilterAddVariable

使用方法

在这里插入图片描述

函数作用

 添加一个变量一个变量过滤器。 如果没有给出 filterName,该变量将被添加到默认过滤器中。

示例

long result;
//create default filter as Stop Filter
result = sysCreateVariableFilter(0);
//add a variable that should be stopped by the filter
result = sysFilterAddVariable(sysvar::myNamespace::myVariable);

sysFilterRemoveNamespace

使用方法

在这里插入图片描述

函数作用

 从变量过滤器中删除命名空间。 如果未给出 filterName,则名称空间将从默认过滤器中删除。

示例

long result;
//remove a namespace from the default filter.
result = sysFilterRemoveNamespace(“myNamespace”);

sysFilterRemoveVariable

使用方法

在这里插入图片描述

函数作用

 从变量过滤器中删除变量。 如果未给出 filterName,则该变量将从默认过滤器中删除。

示例

long result;
//remove a variable from the default filter
result = sysFilterRemoveVariable(sysvar::myNamespace::myVariable);

sysSetVariableFilterActive

使用方法

在这里插入图片描述

函数作用

 激活或停用变量过滤器。 如果未给出 filterName,则默认过滤器会受到影响。

示例

long result;
//create the default filter as a Stop Filter.
result = sysCreateVariableFilter(0);
//deactivate the default filter.
result = sysSetVariableFilterActive(0);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小趴菜_自动驾驶搬砖人

谢谢大爷赏饭吃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值