是否可以将XML中定义的系统变量作为CAPL中的函数参数传递

是否可以将XML中定义的系统变量作为CAPL中的函数参数传递,xml,capl,Xml,Capl,我有大约20条消息被定义为一个结构,对于每条消息,我有许多信号(不是dbc的确切信号名称),我在XML文件中定义为系统变量 在CAPL中,如果我搜索@sysvar,我会看到我的信号名和名称空间(消息名)都显示出来 现在我需要创建一个函数,其中我需要更改信号的值。为此,我需要将结构(名称空间)名称、其信号名称和值作为参数写入 我不能这样做 有谁能帮助我将XML中定义的名称空间和信号名作为CAPL中的参数传递给我吗 XML的格式是 <?xml version="1.0" e

我有大约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>

我需要将Name和namespace作为参数传递给CAPL中的函数?是否有可能

选项1只需设置sysVar即可

选项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);
}

非常感谢,先生!!它奏效了…完美的解决方案,我使用了选项3。我不知道“LoopUpSysValIt”。对你的知识感到敬佩。@阿卡什,如果答案是有用的,解决了你的问题,考虑接受它。
//Function Definition
void FunctionWithSysVariableAsParameter(sysvarInt *sys,int valueToAssign)
{
  @sys = valueToAssign; 
}


//Usage Example
on start
{
  FunctionWithSysVariableAsParameter(sysvar::XYZ::ABC,12);
  write("%d",@XYZ::ABC);
}
//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);
}