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