Configurare i dati per i blocchi FP-FNS.
La funzione FNS_InitConfigDataTable crea una ConfigDataTable dalla variabile ProcessDataTable, la quale può essere un tipo di dato monoelemento o un tipo di dato multielemento. Questa ConfigDataTable è necessaria per configurare il blocco FP-FNS utilizzando il Function Block FNS_ProfibusDP, FNS_DeviceNet, FNS_CANopen e FNS_ProfinetIO.
Ingresso
Ingresso e uscita delle variabili dei dati di processo
Uscita
Dati sulla configurazione per i blocchi FP-FNS. La dimensione array della variabile ConfigDataTable deve corrispondere al numero di elementi della variabile ProcessDataTable.
Assicurarsi che la dimensione della variabile ConfigDataTable corrisponda alla struttura della variabile ProcessDataTable, p.es. se ProcessDataTable è composto da tre elementi, ConfigDataTable deve essere un "Array[0..2] of WORD" la cui dimensione corrisponde al numero di elementi. Se ProcessDataTable presenta un solo elemento (p.es. WORD), allora ConfigDataTable deve essere un "Array[0..0] of WORD" (di dimensione 1).
I tipi di dati ammessi per l'ingresso di FNS_InitConfigDataTable sono tutti variabili a 16 bit (INT, WORD), 32 bit (DINT, DWORD, TIME (32 bit), REAL) e 64 bit o array di queste. Le variabili a 64 bit sono definite come array bidimensionali, p.es. "Array[0..0,0..3] of INT" è una variabile a 64 bit, mentre "Array[0..3] of INT" rappresenta un array con quattro elementi di variabili a 16 bit.
I tipi di dati BOOL, STRING e gli array di questi tipi NON sono ammessi all'ingresso della funzione FNS_InitConfigDataTable.
L'uscita ConfigDataTable della funzione deve essere un array di WORD.
La seguente tabella sintattica illustra come dichiarare le variabili a 16 bit, 32 bit e 64 bit e gli array di queste nel caso vengano utilizzate come ingresso ProcessDataTable per la funzione FNS_InitConfigDataTable.
Tipo di dato di ingresso |
Dimensione dell'ingresso |
Commento |
---|---|---|
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 |
Array bidimensionale; dimensione della seconda dimensione = 4 |
Array[a ..b] of INT/Array[a ..b] of WORD |
Array di 16 bit Dimensione = b-a+1 |
Array monodimensionale |
Array[a ..b] of DINT/Array[a ..b] of DWORD/ Array[a ..b] of REAL/Array[a ..b] of TIME |
Array di 32 bit Dimensione = b-a+1 |
Array monodimensionale |
Array[0..x,0..3] of INT Array[0..x,0..3] of WORD |
Array di 64 bit Dimensione = x+1 |
Array bidimensionale; dimensione della seconda dimensione = 4 |
Per ciascun elemento della DUT applicato a ProcessDataTable, un elemento nell'array WORD su ConfigDataTable viene generato secondo la seguente formula:
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 basso: codice tipo di dato richiesto per FNS
Byte alto: numero di elementi in caso di array
Nella lista variabili globali si definiscono variabili alle quali possono accedere tutti i POU del progetto.
In questo esempio, la variabile ProcessData è una DUT del tipo ProcessDataStructure avente la seguente struttura:
Poiché la DUT presenta tre elementi, la variabile di uscita ConfigData deve essere un array di WORD avente dimensione tre (p.es.: Array [0..2] of WORD).
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
VAR
ConfigData: ARRAY [0..2] OF WORD:=[3(0)];
END_VAR
VAR_EXTERNAL
ProcessData: ProcessDataStructure;
END_VAR
La dimensione della variabile ConfigDataTable deve corrispondere al numero di elementi della variabile di ingresso ProcessData.
Quando sys_bIsFirstScan è TRUE, ossia nel primo ciclo, la funzione viene eseguita. Il valore della variabile ConfigData corrisponde alla struttura della variabile di ingresso ProcessData, con il relativo numero e tipo di elementi.
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;