Daten für FP-FNS-Funktionsbausteine konfigurieren
Die Funktion FNS_InitConfigDataTable erstellt ConfigDataTable aus der Variablen ProcessDataTable, bei der es sich um einen Datentyp aus einem oder mehreren Elementen handeln kann. ConfigDataTable ist notwendig, um den FP-FNS-Baustein mit den Funktionsbausteinen FNS_ProfibusDP, FNS_DeviceNet, FNS_CANopen und FNS_ProfinetIO zu konfigurieren.
Eingang
Eingangs- und Ausgangsprozessdatenvariablen
Ausgang
Konfigurationsdaten für FP-FNS-Funktionsbausteine. Die Arraygröße der Variablen ConfigDataTable muss der Anzahl der Elemente der Variablen ProcessDataTable entsprechen.
Stellen Sie sicher, dass die Größe der Variablen ConfigDataTable der Struktur der Variablen ProcessDataTable entspricht, d. h. wenn ProcessDataTable aus drei Einträgen besteht, muss ConfigDataTable ein Array[0..2] of WORD sein, dessen Größe der Anzahl der Einträge entspricht. Wenn ProcessDataTable nur einen Eintrag besitzt (z.B. WORD), muss die Variable ConfigDataTable ein Array[0..0] of WORD (mit der Größe 1) sein.
Für die Eingabe in FNS_InitConfigDataTable zulässige Datentypen sind alle Variablen mit 16-Bit (INT, WORD), 32-Bit (DINT, DWORD, TIME (32 Bit), REAL) und 64-Bit oder Arrays von diesen. 64-Bit-Variablen sind als zweidimensionale Arrays definiert, z.B. Array[0..0,0..3] of INT ist eine 64-Bit-Variable, während Array[0..3] of INT einen Array mit vier Elementen der 16-Bit-Variablen darstellt.
Die Datentypen BOOL, STRING und Arrays dieser Typen sind bei der Eingabe der Funktion FNS_InitConfigDataTable NICHT zulässig.
Die Ausgabe ConfigDataTable der Funktion muss ein Array von WORD sein.
Die folgende Syntaxtabelle zeigt, wie die 16-Bit-, 32-Bit- und 64-Bit-Variablen und die Arrays davon deklariert werden, wenn sie als ProcessDataTable-Eingang für die Funktion FNS_InitConfigDataTable verwendet werden sollen.
Eingangsdatentyp |
Eingangsgröße |
Kommentar |
---|---|---|
INT, WORD |
16-bit |
|
DINT, WORD, REAL, TIME |
32-bit |
|
Array[0..0,0..3] of INT Array[0..0,0..3] of WORD |
64-bit |
zweidimensionaler Array; Größe der zweiten Dimension = 4 |
Array[a ..b] of INT/Array[a ..b] of WORD |
Array of 16-bit Größe = b-a+1 |
eindimensionaler Array |
Array[a ..b] of DINT/Array[a ..b] of DWORD/ Array[a ..b] of REAL/Array[a ..b] of TIME |
Array of 32-bit Größe = b-a+1 |
eindimensionaler Array |
Array[0..x,0..3] of INT Array[0..x,0..3] of WORD |
Array of 64-bit Größe = x+1 |
zweidimensionaler Array; Größe der zweiten Dimension = 4 |
Für jedes Element des SDT, das bei ProcessDataTable, angewendet wird, wird ein Element im WORD-Array bei ConfigDataTable nach der folgenden Formel erzeugt:
enum class enumFnsDataTypeCode : int
{
INVALID = -1,
SIGNED_16 = 0x02,
SIGNED_32 = 0x03,
UNSIGNED_16 = 0x05,
UNSIGNED_32 = 0x06,
UNSIGNED_64 = 0x11,
REAL_32 = 0x12
};
Niederwertiges Byte: Datentypcode für FNS erforderlich
Höherwertiges Byte: Anzahl von Elementen im Fall eines Arrays
In der globalen Variablenliste können Sie Variablen festlegen, die von allen POEs des Projekts verwendet werden können.
In diesem Beispiel ist die Variable ProcessData ein SDT des Typs ProcessDataStructure mit der folgenden Struktur:
Da der SDT aus drei Einträgen besteht, muss die Ausgangsvariable ConfigData ein Array of WORD mit der Größe 3 sein (z.B.: Array [0..2] of WORD).
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
ConfigData: ARRAY [0..2] OF WORD:=[3(0)];
END_VAR
VAR_EXTERNAL
ProcessData: ProcessDataStructure;
END_VAR
Die Arraygröße der Variablen ConfigDataTable muss der Anzahl der Elemente der Variablen ProcessData entsprechen.
Wenn sys_bIsFirstScan TRUE ist, d.h. im ersten Zyklus, wird die Funktion ausgeführt. Der Wert der Variablen ConfigData entspricht der Struktur der Eingangsvariablen ProcessData sowie der Anzahl und Typen der Elemente.
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;