加入QQ群
售前咨询
18604058908
售后热线
13166668196
微信扫一扫
关注沈阳菲尔德
获取更多免费产品
 
Language

hart手操器在进行DD解析时用到的数组

 来源: |  阅读:1946次 |  2022/8/8 9:58:13

数组是hart手操器中进行dd解析时,用到的相同结构的DD项(如变量、集合或菜单)的列表模型。数组中的每个元素应具有相同的类型、尺寸和形状。在HART调制解调器中,通过DD描述技术,能够同时支持数值数组和引用数组。

  • 数值数组管理相对较大的数据集。数值数组通常建模或组织数据。可以将数值数组视为在主机或现场设备中实际分配的物理内存。这些数据可以是捆扎表、自定义传递函数或响应曲线。
  • 参考阵列允许通过阵列组织和访问同质集合。

引用数组不分配内存,而是组织对现有声明的访问。

通过数组标识符和元素从DD中的其他位置引用数组元素指数此引用使用方括号表示法。此引用的语法为:

array-name [ index ]

值数组

值数组是一个向量或值表。数组的长度由“NUMBER_OF_ELEMENTS”属性,值数组的每个元素都是“TYPE”明确规定。

ARRAY name {
LABELopt string;
HELPopt string;
VALIDITYopt boolean-specifier
TYPE type-reference;
NUMBER_OF_ELEMENTS integer;
}

每个值数组必须有一个类型和元素数。所有其他属性都是可选的。有关通用属性标签帮助和有效性的详细信息,请参见附录A。

元素个数

ELEMENTS属性将值数组的大小或长度指定为大于零的无符号整数。值数组中的元素数解析为整数常数

类型

TYPE属性是对DDL声明(例如变量、集合)的引用。此引用可以像变量一样简单(例如,数组是浮点数的向量)。如果类型为复杂(像一个集合),那么每个元素就像数据库表中的一行。在任何情况下引用中的属性应用于每个数组元素。

当使用变量引用时,值数组的类型是数组的每个元素由变量构造。如果数组有100个元素,且变量为浮点,则为个100浮点数(即,对于数组条目0-99),每个浮点数都具有被引用对象的相同属性创建变量。

如果集合引用指定了数组类型,则集合的成员定义数组分配的空间。例如,考虑以下因素:

VARIABLE xValue { TYPE FLOAT; }
VARIABLE yValue { TYPE FLOAT; }
VARIABLE quality {
TYPE enumerated { {0 , "Bad"}, {2 , "Poor"}, {3 , "Good"} }
}
COLLECTION point { MEMBERS { X, xValue; Y, yValue; QUALITY, quality; }
ARRAY dataSetArray { NUMBER_OF_ELEMENTS 100; TYPE point; }
}

这将创建100个包含3个变量的集合。换句话说,总共需要300个变量在数组中创建和存储。

在一种方法中:

dataSetArray [15] . X = 26.4 ;

将第16个数组元素的X的值设置为26.4。如果集合中的变量如果指定了DEFAULT_VALUES(默认值),那么数组中的每个元素也应该设置对应的默认值。

引用数组

引用数组是一组逻辑项(变量、命令等)。组中的每个项目都是分配了一个称为索引的数字。数组表示为:

ARRAY OF item-type name {
LABELopt string;
HELPopt string;
VALIDITYopt boolean-specifier
ELEMENTS {
index , item , descriptionopt , helpopt ;
index , item , descriptionopt , helpopt ;
}
}

数组的类型是DDL的任何基本类型,例如变量、菜单、编辑显示、数组等,每个数组必须有一个名称,并且可以在DD中的其他位置使用以引用大堆有四个数组属性:元素、有效性帮助和标签。每个数组必须具有元素。有效性、帮助和标签是可选的,有关它们的详细信息可在附录A中找到“项类型”指定数组中元素的类型;所有数组元素都必须是该类型。

数组的元素表示为:

ELEMENTS {

index , item , description , help ;

index , item , description , help ;

}

每个(索引、项、描述、帮助)四元组指定数组中的一个元素。索引指定可引用项目的编号。该描述提供了一个简短的示例项目的描述。帮助指定项目的帮助文本。每个数组元素必须有一个指数说明和帮助是可选的。考虑以下示例:

VARIABLE pressureValue { CLASS CORRECTION & DYNAMIC; TYPE FLOAT; }

VARIABLE pressureUnits { TYPE ENUMERATED (2) { ALL_UNITS } }

VARIABLE pressureLS { TYPE ENUMERATED { LIMIT_STATUS_CODES } }

VARIABLE pressureStatus { TYPE BIT_ENUMERATED { { 0x08, "0x08", MORE } } }

VARIABLE pressureUSL

VARIABLE pressureLSL { TYPE FLOAT; }

VARIABLE pressureMinimumSpan { TYPE FLOAT; }

VARIABLE pressureDampingValue { CONSTANT_UNIT [sec]; TYPE FLOAT; }

VARIABLE pressureClassificationCode {

TYPE ENUMERATED{{ 0, "Not Classified"},{65, [pressure_classification] }}

}

VARIABLE pressurePDQ {

TYPE ENUMERATED {

{0 , process_data_status(0)}, {1 , process_data_status(1)},

{2 , process_data_status(2)}, {3 , process_data_status(3)}

}

}

COLLECTION OF VARIABLE press {

 MEMBERS { DIGITAL_VALUE, pressureValue;

 DIGITAL_UNITS, pressureUnits;

 DATA_QUALITY, pressurePDQ;

 LIMIT_STATUS, pressureLS;

 DEVICE_FAMILY_STATUS, pressureStatus;

 CLASSIFICATION, pressureClassificationCode;

 UPPER_SENSOR_LIMIT, pressureUSL;

 LOWER_SENSOR_LIMIT pressureLSL;

 MINIMUM_SPAN, pressureMinimumSpan;

 DAMPING_VALUE, pressureDampingValue;

 }

}

ARRAY OF COLLECTION deviceVariables {

ELEMENTS { 0, press; 1, temperature;

}

}

COLLECTION OF COLLECTION primary_variable {

MEMBERS {

DEVICE_VARIABLE, deviceVariables[0];

RANGING, scaling;

DAQ, analog_io;

}

}

ARRAY OF COLLECTION dynamic_variables {

ELEMENTS {

0, primary_variable; 1, secondary_variable;

2, tertiary_variable; 3, quaternary_variable;

}

}

此示例允许构造如下所示的抽象命令定义:

COMMAND read_dynamic_variables_and_pv_current {

REDEFINE TRANSACTION {

REQUEST { }

REPLY {

response_code, device_status,

dynamic_variables[0].DAQ.ANALOG_VALUE,

dynamic_variables[0].DEVICE_VARIABLE.DIGITAL_UNITS,

dynamic_variables[0].DEVICE_VARIABLE.DIGITAL_VALUE

}

}

}

在本例中,dynamic_variables[0].DEVICE_VARIABLE.DIGITAL_VALUE引用的就是pressureValue。