Configurar datos de los bloques FP-FNS
La función FNS_InitConfigDataTable crea una tabla ConfigDataTable del tipo ProcessDataTable, que puede ser un tipo simple de datos o una DUT. Esta ConfigDataTable es necesaria para configurar el bloque FP-FNS utilizando el bloque de función FNS_ProfibusDP, FNS_DeviceNet, FNS_CANopen y FNS_ProfinetIO.
Entrada
Variables de los datos de entrada y salida del proceso
Salida
Datos de configuración de los bloques FP-FNS. El tamaño del array de la variable ConfigDataTable se tiene que corresponder con el número de elementos de la variable ProcessDataTable.
Comprobar que el tamaño de la variable ConfigDataTable corresponde a la estructura de la variable ProcessDataTable, p.ej., si ProcessDataTable tiene tres entradas, entonces ConfigDataTable debe ser un "Array[0..2] of WORD" con un tamaño que coincida con el número de entradas. Si ProcessDataTable tiene solo una entrada (p.ej., WORD), entonces ConfigDataTable debe ser un "Array[0..0] of WORD" (de tamaño 1).
Los tipos de datos de entrada permitidos en la tabla FNS_InitConfigDataTable son todos de 16 bits (INT, WORD), 32-bit (DINT, DWORD, TIME (32 bits), REAL) y variables de 64 bits o arrays de estos tipos de datos. Las variables de 64-bits se definen como arrays bidimensionales, por ejemplo, "Array[0..0,0..3] of INT" es una variable de 64-bit , mientras que "Array[0..3] of INT" representa un array con cuatro variables de 16-bits.
Los tipos de datos BOOL, STRING y los arrays de estos tipos NO están pemitidos como entrada de la función FNS_InitConfigDataTable.
La salida ConfigDataTable debe ser un array de tipo WORD.
La siguiente tabla muestra cómo se declaran las variables de 16-bit, 32-bit y 64-bit y sus arrays cuando se utiliza ProcessDataTable como entrada de la función FNS_InitConfigDataTable.
Tipo de datos de entrada |
Tamaño de la entrada |
Comentario |
---|---|---|
INT, WORD |
16 bits |
|
DINT, WORD, REAL, TIME |
32 bits |
|
Array[0..0,0..3] of INT Array[0..0,0..3] of WORD |
64 bits |
array de 2-dimensiones; tamaño de la segunda dimensión = 4 |
Array[a ..b] of INT/Array[a ..b] of WORD |
Array de 16 bits Tamaño = b-a+1 |
array de 1-dimensión; |
Array[a ..b] of DINT/Array[a ..b] of DWORD/ Array[a ..b] of REAL/Array[a ..b] of TIME |
Array de 32 bits Tamaño = b-a+1 |
array de 1-dimensión; |
Array[0..x,0..3] of INT Array[0..x,0..3] of WORD |
Array de 64 bits Tamaño= x+1 |
array de 2-dimensiones; tamaño de la segunda dimensión = 4 |
Para cada elemento de la DUT aplicado en ProcessDataTable, se genera un elemento del array WORD en ConfigDataTable de acuerdo con la siguiente fórmula:
enum class enumFnsDataTypeCode : int
{
INVALID = -1,
SIGNED_16 = 0x02,
SIGNED_32 = 0x03,
UNSIGNED_16 = 0x05,
UNSIGNED_32 = 0x06,
UNSIGNED_64 = 0x11,
REAL_32 = 0x12
};
Byte de menor peso: código de tipo de datos requerido para FNS
Byte de mayor peso: número de elementos en el caso de un array
En la Lista de Variables Globales, se definen las variables a las que pueden acceder todas las POUs del proyecto.
En este ejemplo, la variable ProcessData es una DUT del tipo ProcessDataStructure con la siguiente estructura:
Puesto que la DUT tiene tres elementos, la variable de salida ConfigData tiene que ser un array de tipo WORD con un tamaño de tres (por ejemplo: Array [0..2] of WORD).
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
VAR
ConfigData: ARRAY [0..2] OF WORD:=[3(0)];
END_VAR
VAR_EXTERNAL
ProcessData: ProcessDataStructure;
END_VAR
El tamaño de la variable ConfigDataTable se tiene que corresponder con el número de elementos de la variable de entrada ProcessData.
Cuando sys_bIsFirstScan pasa a TRUE se ejecuta la función. El valor de la variable ConfigData se corresponde con la estructura de la variable de entrada ProcessData, su número y tipo de elementos.
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;