FNS_InitConfigDataTable

配置FP-FNS块数据

FNS_InitConfigDataTable函数从变量ProcessDataTable(可以是单元素数据类型或多元素数据类型)创建ConfigDataTable。需要此ConfigDataTable以使用功能块FNS_ProfibusDPFNS_DeviceNet, FNS_CANopenFNS_ProfinetIO配置FP-FNS块。

参数

输入

ProcessDataTable (INT, WORD, DINT, DWORD, REAL, TIME)和这些类型的数组

过程数据变量的输入和输出

输出

ConfigDataTable (ARRAY of WORD)

配置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位(INTWORD)、32位(DINTDWORDTIME(32位)、REAL)和64位变量或其数组。64位变量定义为二维数组,例如,“Array[0..0,0..3] of INT”为64位变量,而“Array[0..3] of INT”表示具有16位变量四个元素的数组。

  • 在输入函数FNS_InitConfigDataTable时不允许使用数据类型BOOLSTRING和这些类型的数组。

  • 函数的输出ConfigDataTable必须为WORD的数组。

ProcessDataTable

  • 以下语法表显示如何在将其用作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

  • 对于在ProcessDataTable中应用的DUT的每个元素,都将根据以下公式在ConfigDataTable的WORD数组中生成一个元素:

    enum class enumFnsDataTypeCode : int
    
          {
                INVALID     = -1,
                SIGNED_16   = 0x02,
                SIGNED_32   = 0x03,
                UNSIGNED_16 = 0x05,
                UNSIGNED_32 = 0x06,
                UNSIGNED_64 = 0x11,
                REAL_32     = 0x12
          };
    • 低字节:FNS所需的数据类型代码

    • 高字节:数组中的元素数

示例

全局变量

在全局变量列表中,定义项目中所有POU都可以访问的变量。

DUT

在此示例中,变量ProcessData为具有以下结构的ProcessDataStructure类型的DUT:

因为DUT有三个条目,所以输出变量ConfigData必须为大小为3的WORD数组(例如:Array [0..2] of WORD)。

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。

	VAR
		ConfigData: ARRAY [0..2] OF WORD:=[3(0)];
	END_VAR
	VAR_EXTERNAL
		ProcessData: ProcessDataStructure;
	END_VAR

变量ConfigDataTable的大小必须与输入变量ProcessData的条目数量相对应。

POU本体

sys_bIsFirstScanTRUE,即在第一个循环中时,将执行此函数。变量ConfigData的值与输入变量ProcessData的结构、数量和元素类型相对应。

LD本体

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

ST本体

If sys_bIsFirstScan then
    ConfigData:=FNS_InitConfigDataTable(ProcessData);
    end_if;

最后更新日期: 2025-01-10此页面上的反馈松下热线