是否可以将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中的函数吗?

解决方法

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

Set rs=c.Execute(“SELECT * FROM Customers" & _ 
WHERE Country='Germany' AND (City='Berlin' OR City='München');”)"

选项2 您是否需要使用sysvar的函数?

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

选项3 您是否需要使用sysvar 名称名称的功能?

要实现此目的,您可以使用内置函数lookupSysvar。

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


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