<< 点击显示目录 >> 主页 PVI通信 > PVI帮助信息 > PVI base system > PVICOM interface > Process data > 过程数据属性 > 数据格式 > Structure variable |
原则上,在指定结构时,可以定义或不定义结构元素。如果没有定义结构元素,则必须指定可变长度(VL参数)。如果定义了结构元素,那么变量长度将根据设定的对齐方式(AL参数)自动计算。
不含结构元素的结构的语法。
VT=struct VL=<VariableLength> [VN=<NumberOfArrayElements>] [VS=<AdditionalSpecifications>]
带有结构元素的结构的语法:
VT=struct [VN=<NumberOfArrayElements>] [VS=<AdditionalSpecifications>] [AL=<Alignment>] { <Element1> } { <Element2> } ...
<Element>: { <Nesting> VT=<VariableType> [VL=<VariableLength>] [VN=<NumberOfArrayElements>] [VS=<AdditionalSpecifications>] }
每个结构元素(<Element>)都在大括号(弧形括号"{...}")内指定。<嵌套深度>由小括号中每个表达式开头的若干"."(句号)定义。结构元素的定义也以句号开始。如果在一个结构内定义了第二个结构,那么嵌套深度将增加一个。因此,在定义第二个结构的元素时,必须指定两个句号。嵌套深度最多可以增加到64。可以选择在每个"."(句号)字符后面指定一个元素名称。对于PVI来说,只有最后的'.'字符之后的名称才是重要的。元素名称存储在过程变量对象中,可以使用访问类型 POBJ_ACC_TYPE_INTERN读取 。输入元素名称对变量数据的处理方式没有影响。
结构变量的例子:
"VT=struct AL=4 {. VT=i16} {. VT=struct VN=2}
{.. VT=string VL=24} {.. VT=i32} {. VT=u32}"
Same data format, however specified with element names:
"VT=struct AL=4 {.Level VT=i16} {.Msg VT=struct VN=2}
{.Msg.Text VT=string VL=24} {.Msg.Number VT=i32} {.Temp VT=u32}"
or
"VT=struct AL=4 {.Level VT=i16} {.Msg VT=struct VN=2}
{..Text VT=string VL=24} {..Number VT=i32} {.Temp VT=u32}"
All variants correspond to the following C structure with Alignment 4:
struct
{
short Level;
struct
{
char Text[24];
long Number;
} Msg[2];
unsigned long Temp;
}
Structure alignment:
如果在程序中对大于一个字节的结构元素进行寻址,可以通过将结构元素设置为一个数据字限制来加速处理器的内存访问。为了做到这一点,"填充字节 "被添加到相应的结构元素中。然而,这些填充字节需要使用更多的内存。
结构对齐 ,然后定义了结构元素被映射的数据字限制的大小。
Alignment = 1 ....最小的内存需求和最大的处理器访问时间
对齐 = 8 ....最大的内存需求和最小的处理器访问时间
在VC++中,对齐方式可以在项目设置中全局定义,也可以使用Pragma语句 "#pragma pack "局部定义。对于VB6.0,对齐方式被固定为4。
结构元素的对齐要求由结构元素的大小和对齐规范决定。以下规则适用:
<AlignmentRequirement> = min (<AlignmentSpecification>, sizeof (<StructureElement>))
结构内结构的规则:
sizeof (<LargestStructureElement>)
结构元素的偏移量是通过以下公式确定的:
<Offset> % <AlignmentRequirement> == 0
在定义一个结构的数据格式时,可以指定对齐方式(AL参数)。然后,该变量对象的过程数据将根据该设置进行对齐。