Configurer des données pour les blocs FP-FNS.
La fonction FNS_InitConfigDataTable crée une variable ConfigDataTable à partir de la variable ProcessDataTable qui peut être d’un type de données à un ou plusieurs éléments. ConfigDataTable est nécessaire pour configurer les blocs FP-FNS avec les blocs fonctions FNS_ProfibusDP, FNS_DeviceNet, FNS_CANopen et FNS_ProfinetIO.
Entrée
Variables des données d’entrée et sortie du process
Sortie
Configuration des données pour les blocs FP-FNS. La taille des tableaux de variables ConfigDataTable doit correspondre au nombre d’éléments de la variable ProcessDataTable.
Veillez à ce que la taille de la variable ConfigDataTable corresponde à la structure de la variable ProcessDataTable, c.-à-d. si ProcessDataTable comporte trois entrées, ConfigDataTable doit être un tableau "Array[0..2] of WORD", dont la taille correspond au nombre d’entrées. Si ProcessDataTable n’a qu’une entrée (par ex. WORD), alors ConfigDataTable doit être un tableau "Array[0..0] of WORD" (de taille 1).
Les types de données autorisés pour l’entrée de FNS_InitConfigDataTable sont tous des variables 16 bits (INT, WORD), 32 bits (DINT, DWORD, TIME (32 bits), REAL) et 64 bits ou des tableaux (arrays) des mêmes types de données. Les variables 64 bits sont définies en tant que tableaux (arrays) à deux dimensions, par ex. "Array[0..0,0..3] of INT" est une variable 64 bits, tandis que "Array[0..3] of INT" représente un tableau (array) avec quatres éléments de variables de 16 bits.
Les types de données BOOL, STRING et les tableaux (arrays) de ces types de données NE SONT PAS autorisés en entrée de la fonction FNS_InitConfigDataTable.
La sortie ConfigDataTable de la fonction doit être un tableau (array) de données de type WORD.
Le tableau de syntaxe suivant présente comment déclarer des variables et des tableaux de 16 bits, 32 bits et 64 bits lorsqu’ils sont utilisés en tant qu’entrées ProcessDataTable pour la fonction FNS_InitConfigDataTable.
Type de données d’entrée |
Taille des entrées |
Commentaire |
---|---|---|
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 |
Tableau (array) à 2 dimensions ; Taille de la seconde dimension = 4 |
Array[a ..b] of INT/Array[a ..b] of WORD |
Tableau (array) de 16 bits Taille = b-a+1 |
Tableau (array) à 1 dimension |
Array[a ..b] of DINT/Array[a ..b] of DWORD/ Array[a ..b] of REAL/Array[a ..b] of TIME |
Tableau (array) de 32 bits Taille = b-a+1 |
Tableau (array) à 1 dimension |
Array[0..x,0..3] of INT Array[0..x,0..3] of WORD |
Tableau (array) de 64 bits Taille = x+1 |
Tableau (array) à 2 dimensions ; Taille de la seconde dimension = 4 |
Pour chaque élément du DUT appliqué à ProcessDataTable, un élément du tableau WORD (array) dans ConfigDataTable est généré selon la formule suivante :
enum class enumFnsDataTypeCode : int
{
INVALID = -1,
SIGNED_16 = 0x02,
SIGNED_32 = 0x03,
UNSIGNED_16 = 0x05,
UNSIGNED_32 = 0x06,
UNSIGNED_64 = 0x11,
REAL_32 = 0x12
};
Octet de poids faible : code du type de données requis pour FNS
Octet de poids fort : nombre d’éléments dans le cas d’un tableau (array)
Dans la liste des variables globales, vous définissez des variables qui sont accessibles par tous les POU dans le projet.
Dans cet exemple, la variable ProcessData est un DUT de type ProcessDataStructure avec la structure suivante :
Les données de type DUT ayant trois entrées, la variable de sortie ConfigData doit être de type Array of WORD avec une taille de trois éléments (par ex. : Array [0..2] of WORD).
Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.
VAR
ConfigData: ARRAY [0..2] OF WORD:=[3(0)];
END_VAR
VAR_EXTERNAL
ProcessData: ProcessDataStructure;
END_VAR
La taille de la variable ConfigDataTable doit correspondre au nombre d’entrées de la variable d’entrée ProcessData.
Lorsque sys_bIsFirstScan est TRUE, c.-à-d. dans le premier cycle, la fonction est exécutée. La valeur de la variable ConfigData correspond à la structure de la variable d’entrée ProcessData, à son nombre et type d’éléments.
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;