首页 > 解决方案 > 是否可以将 XML 中定义的系统变量作为 CAPL 中的函数参数传递

问题描述

我将大约 20 条消息定义为一个结构,并且对于每条消息,我都有许多信号(不是 dbc 的确切信号名称),我在 XML 文件中将它们定义为系统变量。

在 CAPL 中,如果我搜索 @sysvar ,我会看到我的信号名称和名称空间(消息名称)都在显示。

现在我需要创建一个函数,在其中我需要更改信号的值。为此,我需要传递结构(命名空间)名称、其信号名称和要写入参数的值。

我无法做到这一点。

任何人都可以帮助我如何将 XML 中定义的名称空间和信号名称作为 CAPL 中的参数传递。

XML的格式是

<?xml version="1.0" encoding="utf-8"?>
<systemvariables version="4">
  <namespace name="" comment="" interface="">
    <namespace name="XYZ" comment="" interface="">
      <variable anlyzLocal="2" readOnly="false" valueSequence="false" unit="" name="ABC" comment="" bitcount="32" isSigned="false" encoding="65001" type="int" startValue="1" />

   </namespace> 
  </namespace>
</systemvariables>

我需要将名称和命名空间作为参数传递给 CAPL 函数吗?这可能吗

标签: xmlcapl

解决方案


选项 1 您是否只需要简单地设置您的 sysVar?

@<sys> = 12; //ex @XYZ::ABC = 1 OR @sysvar::<sys> = 12; //  @sysvar::XYZ::ABC

选项 2 你需要使用 sysvar 的函数吗?

//Function Definition
void FunctionWithSysVariableAsParameter(sysvarInt *sys,int valueToAssign)
{
  @sys = valueToAssign; 
}


//Usage Example
on start
{
  FunctionWithSysVariableAsParameter(sysvar::XYZ::ABC,12);
  write("%d",@XYZ::ABC);
}

选项 3 你需要使用 sysvar名称的函数吗?

为此,您可以使用内置函数lookupSysvar。

//Function Definition
void FunctionWithSysVariableNameAsParameter(char sysVarNamespace[],char variableName[],int valueToAssign)
{
  sysvarInt * myLocalSysvar;
  myLocalSysvar = lookupSysvarInt(sysVarNamespace,variableName);
  @myLocalSysvar = valueToAssign;
}
//Usage Example
on start
{
  FunctionWithSysVariableNameAsParameter("XYZ","ABC",15);
  write("%d",@XYZ::ABC);
}

推荐阅读