配置FP-FNS块数据
FNS_InitConfigDataTable函数从变量ProcessDataTable(可以是单元素数据类型或多元素数据类型)创建ConfigDataTable。需要此ConfigDataTable以使用功能块FNS_ProfibusDP、FNS_DeviceNet, FNS_CANopen和FNS_ProfinetIO配置FP-FNS块。
输入
过程数据变量的输入和输出
输出
配置FP-FNS块数据。变量ConfigDataTable的数组大小必须与ProcessDataTable变量的元素数量相对应。
确保变量ConfigDataTable的大小与ProcessDataTable的结构相对应,例如,如果ProcessDataTable包含三个条目,则ConfigDataTable变量应为“Array[0..2] of WORD”,其大小与条目数量匹配。如果ProcessDataTable变量仅有一个条目(例如,WORD),则ConfigDataTable变量应为“Array[0..0] of WORD”(大小为1)。
允许使用的FNS_InitConfigDataTable输入数据类型为所有16位(INT、WORD)、32位(DINT、DWORD、TIME(32位)、REAL)和64位变量或其数组。64位变量定义为二维数组,例如,“Array[0..0,0..3] of INT”为64位变量,而“Array[0..3] of INT”表示具有16位变量四个元素的数组。
在输入函数FNS_InitConfigDataTable时不允许使用数据类型BOOL、STRING和这些类型的数组。
函数的输出ConfigDataTable必须为WORD的数组。
以下语法表显示如何在将其用作FNS_InitConfigDataTable函数的ProcessDataTable输入时声明16位、32位和64位变量和数组。
输入数据类型 |
输入大小 |
注释 |
---|---|---|
INT, WORD |
16位 |
|
DINT, WORD, REAL, TIME |
32位 |
|
Array[0..0,0..3] of INT Array[0..0,0..3] of WORD |
64位 |
二维数组; 第二维度大小 = 4 |
Array[a ..b] of INT/Array[a ..b] of WORD |
16位数组 大小 = b-a+1 |
一维数组 |
Array[a ..b] of DINT/Array[a ..b] of DWORD/ Array[a ..b] of REAL/Array[a ..b] of TIME |
32位数组 大小 = b-a+1 |
一维数组 |
Array[0..x,0..3] of INT Array[0..x,0..3] of WORD |
64位数组 大小 = x+1 |
二维数组; 第二维度大小 = 4 |
在全局变量列表中,定义项目中所有POU都可以访问的变量。
在此示例中,变量ProcessData为具有以下结构的ProcessDataStructure类型的DUT:
因为DUT有三个条目,所以输出变量ConfigData必须为大小为3的WORD数组(例如:Array [0..2] of WORD)。
所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。
VAR
ConfigData: ARRAY [0..2] OF WORD:=[3(0)];
END_VAR
VAR_EXTERNAL
ProcessData: ProcessDataStructure;
END_VAR
变量ConfigDataTable的大小必须与输入变量ProcessData的条目数量相对应。
sys_bIsFirstScan为TRUE,即在第一个循环中时,将执行此函数。变量ConfigData的值与输入变量ProcessData的结构、数量和元素类型相对应。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,ProcessData,11,2,13,4,);
B(B_VAROUT,,ConfigData,29,2,31,4,);
B(B_F,E_FNS_InitConfigDataTable!,,13,0,29,4,,?DEN?dProcessDataTable?AENO?cConfigDataTable);
B(B_CONTACT,,sys_bIsFirstScan,5,1,7,3,);
L(1,2,5,2);
L(7,2,13,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If sys_bIsFirstScan then
ConfigData:=FNS_InitConfigDataTable(ProcessData);
end_if;