Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
INDICE
1 - LogicLab.................................................................................................................................................................... 8
2 - Risorse del sistema................................................................................................................................................... 9
2.1 - Architettura memoria.......................................................................................................................................... 10
2.2 - Memoria di backup (Retain)............................................................................................................................... 11
2.3 - Accesso alla memoria........................................................................................................................................ 12
3 - Definizione tipo dati................................................................................................................................................. 13
3.1 - FILEP, file pointer............................................................................................................................................... 13
3.2 - SYSSERIALMODE, modo comunicazione porta seriale....................................................................................13
3.3 - SYSCANMESSAGE, messaggio CAN............................................................................................................... 13
4 - Variabili di sistema................................................................................................................................................... 14
4.1 - Variabili sola lettura (System variables)............................................................................................................. 15
4.2 - Variabili lettura e scrittura (System variables).................................................................................................... 17
4.3 - ID univoco prodotto............................................................................................................................................ 18
5 - Definizioni dati......................................................................................................................................................... 21
5.1 - Variable types definition, definizione tipo variabili.............................................................................................. 21
5.2 - Task ID definition, identificatore di task PLC...................................................................................................... 21
5.3 - TermIO definition, definizioni per terminale di I/O............................................................................................... 22
5.4 - FSeek origin definition, definizioni per seek su file............................................................................................ 22
5.5 - Serial mode definition, definizioni modo seriale................................................................................................. 22
5.6 - CAN bit rate definition, definizioni bit rate CAN.................................................................................................. 22
5.7 - Digital input mode, definizioni modo acquisizione ingressi digitali.....................................................................23
5.8 - Digital output mode, definizioni modo gestione uscite digitali............................................................................23
5.9 - Analog to digital mode, definizioni modo acquisizione ingressi analogici...........................................................24
5.10 - Digital to analog mode, definizioni modo gestione uscite analogiche..............................................................25
5.11 - Spy mode, definizioni modo spionaggio dati.................................................................................................... 25
5.12 - Find mode, definizioni modo esecuzione ricerca............................................................................................. 25
5.13 - Check type, definizioni tipo di pattern controllo da calcolare............................................................................25
5.14 - Operating system IDs, definizioni ID variabili sistema operativo......................................................................26
6 - Funzioni definite da LogicLab.................................................................................................................................. 27
6.1 - Funzioni matematiche e trigonometriche........................................................................................................... 28
6.2 - Funzioni stringa................................................................................................................................................. 30
7 - Funzioni ed FB......................................................................................................................................................... 31
- Funzioni.................................................................................................................................................................. 31
- Function Blocks...................................................................................................................................................... 31
7.0.1 - Funzioni ed FB embedded......................................................................................................................... 31
7.0.2 - Librerie....................................................................................................................................................... 32
7.0.3 - Import libreria............................................................................................................................................. 32
7.0.4 - Importazione libreria.................................................................................................................................. 33
7.0.5 - Importazione oggetti da libreria.................................................................................................................. 34
7.0.6 - Considerazioni su link a libreria e su import oggetti...................................................................................35
1 LogicLab
LogicLab è un compilatore PLC IEC61131-3 che supporta tutti i 5 linguaggi dello standard, la facilità e l'immediatezza
d'uso degli editor grafici e testuali, le funzioni di drag & drop estese a tutti i contesti del framework, le diverse utility
integrate ed i debugger grafici e testuali rendono LogicLab un ambiente di sviluppo efficiente e particolarmente
gradevole da utilizzare.
Il compilatore di LogicLab genera direttamente il codice macchina per il processore del sistema target, garantendo una
alta efficienza prestazionale.Il tool è stato sviluppato da Axel, una azienda italiana con pluriennale esperienza nella
produzione di software per automazione industriale, e personalizzato per l'utilizzo con i nostri dispositivi.
DB Dimensione Descrizione
IX0 32 Bytes Ingressi logici modulo 00 (R)
IX1 32 Bytes Ingressi logici modulo 01 (R)
IX2 32 Bytes Ingressi logici modulo 02 (R)
IX3 32 Bytes Ingressi logici modulo 03 (R)
IX4 32 Bytes Ingressi logici modulo 04 (R)
IX5 32 Bytes Ingressi logici modulo 05 (R)
IX6 32 Bytes Ingressi logici modulo 06 (R)
IX7 32 Bytes Ingressi logici modulo 07 (R)
IX8 32 Bytes Ingressi logici modulo 08 (R)
IX9 32 Bytes Ingressi logici modulo 09 (R)
IX10 32 Bytes Ingressi logici modulo 10 (R)
IX11 32 Bytes Ingressi logici modulo 11 (R)
IX12 32 Bytes Ingressi logici modulo 12 (R)
IX13 32 Bytes Ingressi logici modulo 13 (R)
IX14 32 Bytes Ingressi logici modulo 14 (R)
IX15 32 Bytes Ingressi logici modulo 15 (R)
IX255 32 Bytes Ingressi logici modulo CPU (R)
QX0 32 Bytes Uscite logiche modulo 00 (R/W)
QX1 32 Bytes Uscite logiche modulo 01 (R/W)
QX2 32 Bytes Uscite logiche modulo 02 (R/W)
QX3 32 Bytes Uscite logiche modulo 03 (R/W)
QX4 32 Bytes Uscite logiche modulo 04 (R/W)
QX5 32 Bytes Uscite logiche modulo 05 (R/W)
QX6 32 Bytes Uscite logiche modulo 06 (R/W)
QX7 32 Bytes Uscite logiche modulo 07 (R/W)
QX8 32 Bytes Uscite logiche modulo 08 (R/W)
QX9 32 Bytes Uscite logiche modulo 09 (R/W)
QX10 32 Bytes Uscite logiche modulo 10 (R/W)
QX11 32 Bytes Uscite logiche modulo 11 (R/W)
QX12 32 Bytes Uscite logiche modulo 12 (R/W)
QX13 32 Bytes Uscite logiche modulo 13 (R/W)
QX14 32 Bytes Uscite logiche modulo 14 (R/W)
QX15 32 Bytes Uscite logiche modulo 15 (R/W)
QX255 32 Bytes Uscite logiche modulo CPU (R/W)
MX0 512 Bytes Variabili di sistema sola lettura (R)
MX1 512 Bytes Variabili di sistema lettura/scrittura (R/W)
MX100 4096 Bytes Memoria utente (R/W). Da indirizzo 2048 a 4095 i dati sono ritentivi.
Come si vede dalla foto la variabile Var2 è dichiarata con l'attributo RETAIN e manterrà il suo valore anche allo
spegnimento del sistema. La variabile Var5 allocata nella memoria utente MD100.2048 pur essendo ritentiva non
necessita dell'attributo RETAIN in quanto è implicito dalla sua allocazione.
Nella finestra di navigazione progetto, tutte le variabili globali sono suddivise in base
alla loro definizione, e come si nota nella cartella delle variabili ritentive figureranno
solo le variabili mnemoniche Var2 e non le variabili allocate nella memoria utente
Var5 pur essendo anch'essa di tipo ritentivo.
MB100.0 MB100.0
LSB MSB
LSB MSB
Attenzione! SlimLine è basato su architettura ARM e questo tipo di architettura assume che:
Le variabili a 16 bits, WORD, INT, UINT siano allocate in memoria ad indirizzi divisibili per 2. Quindi una variabile a 16
bits potrà assere allocata ad esempio ad indirizzo MW100.32 ma non ad indirizzo MW100.33.
Le variabili a 32 bits DWORD, DINT, UDINT, REAL siano allocate ad indirizzi divisibili per 4. Quindi una variabile a 32
bits potrà assere allocata ad esempio ad indirizzo MD100.32 ma non ad indirizzo MD100.33, MD100.34, MD100.35.
Questa regola viene applicata automaticamente dal compilatore di LogicLab anche per quanto riguarda le strutture
dati, quindi nella definizione di una struttura dati composta da variabili di tipo eterogeneo LogicLab inserirà
automaticamente dei bytes di spaziatura per allineare correttamente le variabili di a 16 bits ed a 32 bits.
4 Variabili di sistema
Con l'ambiente di sviluppo LogicLab vengono pubblicate variabili di sistema che possono essere referenziate nel
programma per accedere ad informazioni sul sistema. Le variabili sono visualizzate da LogicLab nella finestra delle
librerie.
Se la finestra non è visualizzata, occorre abilitarne la visualizzazione dalla voce di menù Wiew → Tool windows →
Library. Attivando il Tab Target variables verrà visualizzato un elenco con tutte le variabili pubblicate suddivise in
cartelle. Un doppio click del mouse sulla cartella System variables si aprirà la cartella visualizzando tutte le variabili
pubblicate (Vedi foto a destra).
0076 MPS050B330 SlimLine ARM7 Compact Static CPU (Full CAN v.)
0077 MPS050B400 SlimLine ARM7 Compact SSR ZC CPU (Lite vers.)
0078 MPS050B410 SlimLine ARM7 Compact SSR ZC CPU (Base vers.)
0079 MPS050B420 SlimLine ARM7 Compact SSR ZC CPU (Full RS485 v.)
0080 MPS050B430 SlimLine ARM7 Compact SSR ZC CPU (Full CAN v.)
0081 MPS054A000 SlimLine Cortex M7 CPU (Lite)
0082 MPS054A100 SlimLine Cortex M7 CPU (RS485)
0083 MPS054A110 SlimLine Cortex M7 CPU (Extended RS485)
0084 MPS054A200 SlimLine Cortex M7 CPU (CAN)
0085 MPS054A210 SlimLine Cortex M7 CPU (Extended CAN)
0086 PCB137B000 SlimLine Cortex M7 CPU Board (Lite)
0087 PCB137B100 SlimLine Cortex M7 CPU Board (RS485)
0088 PCB137B110 SlimLine Cortex M7 CPU Board (Extended RS485)
0089 PCB137B200 SlimLine Cortex M7 CPU Board (CAN)
0090 PCB137B210 SlimLine Cortex M7 CPU Board (Extended CAN)
5 Definizioni dati
Oltre alle cartelle delle variabili di sistema sono presenti anche cartelle con identificatori di tipo dati che permettono di
identificare in modo unifico un dato di sistema.
PCB122
PCB126
PCB099
Define Type Value Description
PCB122
PCB126
PCB099
Define Type Value Description
Esempio LD
Esempio IL
LD Minuend
SUB Subtrahend
ST Result
Esempio ST
Result:=SUB(Minuend, Subtrahend); (* Subtraction using SUBB *)
Result:Minuend-Subtrahend; (* Subtraction as before *)
LN ANY_REAL LN(ANY_REAL)
Calcola logaritmo naturale (Base "e" 2,71828) di un numero.
Result:=LN(10.0); (* Result is 2.30259 *)
7 Funzioni ed FB
Funzioni
Le funzioni hanno numero di variabili in ingresso variabile e sempre una sola variabile in uscita. Per utilizzarle basta
inserirle nei programmi LD ed FBD e connetterle alle variabili. Nei programmi IL devono essere chiamate con
l'istruzione CAL, nei programmi ST basta indicarne il nome per essere eseguite.
Function Blocks
Le FB a differenza delle funzioni allocano nel programma una variabile che contiene tutte le variabili di input e di output
gestite dal blocco funzione. Per utilizzarle basta inserirle nei programmi LD ed FBD e connetterle alle variabili. Nei
programmi IL devono essere chiamate con l'istruzione CAL, nei programmi ST basta indicarne il nome per essere
eseguite.
7.0.2 Librerie
In aggiunta alle funzioni ed FB embedded sono fornite delle librerie che contengono una serie di funzioni e blocchi
funzioni che possono essere utilizzati nel proprio programma. Le librerie fornite con LogicLab si trovano nella directory
di installazione programma Programmi\Elsist\IEC61131Suite\LogicLab2p0\Libraries, ma è possibile anche utilizzare
librerie fornite successivamente o di cui si è eseguito il download dal sito. Esistono due possibilità per utilizzare le
librerie:
Import libreria: In questo modo vengono importati nel proprio programma tutti gli oggetti presenti nella libreria, gli
oggetti possono così essere utilizzati nel programma. Questa è una buona soluzione. La controindicazione è quella di
aumentare la dimensione del file di progetto LogicLab (*.ppjs), in quanto deve contenere oltre al proprio programma
anche tutti gli oggetti della libreria importata. Il programma eseguibile generato conterrà comunque solo gli oggetti
utilizzati.
Import oggetti: In questo modo è possibile importare da una libreria solo gli oggetti (Funzioni, FB, ecc) che
interessano, i quali diverranno parte integrante del proprio progetto.
Agendo sul tasto Add si aprirà una finestra di browser del disco. Scegliere la directory dove si trova la libreria, e
selezionare i files di libreria da importare.
Agendo sul tasto Close, nella finestra Library di
LogicLab (Ctrl-L) verranno visualizzati dei tabs
aggiuntivi, uno per ogni libreria importata.
Basta trascinare l'oggetto desiderato nel proprio
progetto per poterlo utilizzare.
Programma ST
(* Check the protection codes. *)
(* [End of file] *)
Normalmente le funzioni ed i blocchi funzioni protetti possono funzionare in modo demo per un certo periodo di tempo
dalla loro prima esecuzione dopo l'accensione del sistema. Terminato il tempo di prova termina il funzionamento e viene
generato un errore che è rilevabile con la funzione SysGetLastError.
Questo blocco funzione attiva l'uscita Q per un loop di programma sul fronte di disattivazione dell'ingresso
di clock CLK.
CLK (BOOL) Clock, sul fronte di disattivazione del segnale, viene attivata l'uscita Q per un loop di programma.
Q (BOOL) Uscita, attiva per un loop di programma sul fronte di disattivazione dell'ingresso di clock CLK.
Esempi
Sul fronte di disattivazione dell'ingresso digitale Di00M00 viene attivata per un loop di programma l'uscita digitale
Do00M00.
Definizione variabili
Esempio IL
CAL FBF_TRIG (* Call the F_TRIG function block *)
LD Di00M00
ST FBF_TRIG.CLK (* Transfer the digital input to the function block clock *)
LD FBF_TRIG.Q
ST Do00M00 (* On the falling edge of digital input the output is set *)
Esempio ST
FBF_TRIG(); (* Call the F_TRIG function block *)
Type Library
7.1.2 R_TRIG, Raising edge trigger
FB eLLabStdLib_B100
Questo blocco funzione attiva l'uscita Q per un loop di programma sul fronte di attivazione dell'ingresso di
clock CLK.
CLK (BOOL) Clock, sul fronte di attivazione del segnale, viene attivata l'uscita Q per un loop di programma.
Q (BOOL) Uscita, attiva per un loop di programma sul fronte di attivazione dell'ingresso di clock CLK.
Esempi
Sul fronte di attivazione dell'ingresso digitale Di00M00 viene attivata per un loop di programma l'uscita digitale
Do00M00.
Definizione variabili
Esempio IL
CAL FBR_TRIG (* Call the R_TRIG function block *)
LD Di00M00
ST FBR_TRIG.CLK (* Transfer the digital input to the function block clock *)
LD FBR_TRIG.Q
ST Do00M00 (* On the raising edge of digital input the output is set *)
Esempio ST
FBR_TRIG(); (* Call the R_TRIG function block *)
Type Library
7.1.3 RS, Reset/Set flip flop
FB eLLabStdLib_B100
Questo blocco funzione su attivazione del comando di set S attiva l'uscita Q1 che rimane attiva anche
quando il comando viene disattivato. Per disattivare l'uscita occorre attivare il comando di reset R1.
Il comando di reset R1 è prioritario sul comando di set S.
S (BOOL) Set, su attivazione del segnale, viene attivata l'uscita Q1 che rimane attiva anche quando il comando viene
disattivato.
R1 (BOOL) Reset, su attivazione del segnale, viene disattivata l'uscita Q1 è prioritario sul comando di set S.
Q1 (BOOL) Uscita, si attiva e disattiva in funzione dei comandi di S set e R1 reset.
Esempi
Sulla attivazione dell'ingresso digitale Di00M00 viene attivata l'uscita digitale Do00M00 che rimane attiva anche quando
l'ingresso digitale Di00M00 viene disattivato. Per disattivare l'uscita digitale Do00M00 occorre attivare l'ingresso digitale
Di01M00.
Nota! L'ingresso digitale Di01M00 ha la priorità sull'ingresso digitale Di00M00.
Definizione variabili
Esempio IL
CAL FBRS (* Call the RSG function block *)
LD Di00M00
ST FBRS.S (* Transfer the digital input to the set command *)
LD Di01M00
ST FBRS.R1 (* Transfer the digital input to the reset command *)
LD FBRS.Q1
ST Do00M00 (* The function block output is copied to digital output *)
Esempio ST
FBRS(); (* Call the RS function block *)
Type Library
7.1.4 SR, Set/Reset flip flop
FB eLLabStdLib_B100
Questo blocco funzione su attivazione del comando di set S1 attiva l'uscita Q1 che rimane attiva anche
quando il comando di set viene disattivato. Per disattivare l'uscita occorre attivare il comando di reset R.
Il comando di set S1 è prioritario sul comando di reset R.
S1 (BOOL) Set, su attivazione del segnale, viene attivata l'uscita Q1 che rimane attiva anche quando il comando viene
disattivato. Il comando è prioritario sul comando di reset R.
R (BOOL) Reset, su attivazione del segnale, viene disattivata l'uscita Q1.
Q1 (BOOL) Uscita, si attiva e disattiva in funzione dei comandi di S set e R reset.
Esempi
Sulla attivazione dell'ingresso digitale Di00M00 viene attivata l'uscita digitale Do00M00 che rimane attiva anche quando
l'ingresso digitale Di00M00 viene disattivato. Per disattivare l'uscita digitale Do00M00 occorre attivare l'ingresso digitale
Di01M00.
Nota! L'ingresso digitale Di00M00 ha la priorità sull'ingresso digitale Di01M00.
Definizione variabili
Esempio IL
CAL FBSR (* Call the SR function block *)
LD Di00M00
ST FBRS.S1 (* Transfer the digital input to the set command *)
LD Di01M00
ST FBRS.R (* Transfer the digital input to the reset command *)
LD FBRS.Q1
ST Do00M00 (* The function block output is copied to digital output *)
Esempio ST
FBSR(); (* Call the SR function block *)
Questo blocco funzione esegue la temporizzazione sulla disattivazione, attivando l'ingresso IN l'uscita Q si
attiva immediatamente ed il tempo in uscita ET si azzera. Disattivando l'ingresso IN inizia il conteggio e
dopo il tempo definito PT espresso in mS, si disattiva l'uscita Q. Sulla uscita ET viene ritornato il tempo
trascorso dalla disattivazione dell'ingresso espresso in mS.
IN (BOOL) Ingresso timer, attivandolo l'uscita Q si attiva immediatamente ed il tempo in uscita ET si azzera.
Disattivandolo inizia il conteggio e dopo il tempo definito in PT, si disattiva l'uscita Q.
PT (UDINT) Preset tempo, definisce il tempo di ritardo dalla disattivazione dell'ingresso IN alla disattivazione dell'uscita
Q, espresso in mS.
Q (BOOL) Uscita timer, si attiva su attivazione ingresso IN, e si disattiva dopo il tempo definito in PT dalla
disattivazione dell'ingresso IN.
ET (UDINT) Tempo timer, si azzera su attivazione ingresso IN ed inizia conteggio da disattivazione ingresso IN.
Raggiunto tempo impostato in PT si arresta conteggio, espresso in mS.
Esempi
Il timer è presettato a 1 secondo (1000 mS). Attivando l'ingresso digitale Di00M00 si attiva immediatamente l'uscita
digitale Do00M00 ed il valore di tempo nella variabile VarOut è azzerato.
Disattivando l''ingresso digitale Di00M00 il timer inizia il conteggio del tempo, il valore di tempo trascorso dalla
disattivazione è trasferito nella variabile VarOut. Trascorso il tempo l'uscita digitale Do00M00 si disattiva.
Definizione variabili
Esempio IL
CAL FBeTOF (* Call the eTOF function block *)
LD Di00M00
ST FBeTOF.IN (* Transfer the digital input to timer input *)
LD 1000
ST FBeTOF.PT (* Set the delay time *)
LD FBeTOF.Q
ST Do00M00 (* When time is passed the digital output is set *)
LD FBeTOF.ET
ST OutValue (* The counting time is copied to variable *)
Type Library
7.2.2 eTON, Timer On
FB eLLabStdLib_B000
Questo blocco funzione esegue la temporizzazione sulla attivazione, attivando l'ingresso IN inizia il
conteggio e dopo il tempo definito PT espresso in mS, si attiva l'uscita Q. Sulla uscita ET viene ritornato il
tempo trascorso dalla attivazione dell'ingresso espresso in mS. Disattivando l'ingresso IN l'uscita Q si
disattiva istantaneamente ed il valore di tempo su uscita ET si azzera.
IN (BOOL) Ingresso timer, attivandolo inizia il conteggio e dopo il tempo definito in PT, si attiva l'uscita Q.
Disattivandolo l'uscita Q si disattiva immediatamente ed il tempo in uscita ET si azzera.
PT (UDINT) Preset tempo, definisce il tempo di ritardo dalla attivazione dell'ingresso IN alla attivazione dell'uscita Q,
espresso in mS.
Q (BOOL) Uscita timer, si attiva dopo il tempo definito in PT dalla attivazione dell'ingresso IN e si disattiva su
disattivazione ingresso IN.
ET (UDINT) Tempo timer, inizia conteggio da attivazione ingresso IN, raggiunto tempo impostato in PT si arresta
conteggio. Si azzera su disattivazione ingresso IN, espresso in mS.
Esempi
Su attivazione dell'ingresso digitale Di00M00 dopo 1 S (1000 mS) viene attivata l'uscita digitale Do00M00. Disattivando
l'ingresso digitale Di00M00 l'uscita digitale Do00M00 si disattiva immediatamente.
Definizione variabili
Esempio IL
CAL FBeTON (* Call the eTON function block *)
LD Di00M00
ST FBeTON.IN (* Transfer the digital input to timer input *)
LD 1000
ST FBeTON.PT (* Set the delay time *)
LD FBeTON.Q
ST Do00M00 (* When time is passed the digital output is set *)
LD FBeTON.ET
ST OutValue (* The counting time is copied to variable *)
Esempio ST
FBeTON(PT:=1000); (* Call the eTON function block *)
Type Library
7.2.3 eTP, Timer pulse
FB eLLabStdLib_B000
Questo blocco funzione esegue la temporizzazione su impulso di attivazione, attivando l'ingresso IN l'uscita
Q si attiva, in uscita ET è ritornato il tempo trascorso (in mS) dall'impulso di attivazione. Raggiunto il tempo
impostato PT (in mS), indipendentemente dallo stato dell'ingresso IN, l'uscita Q si azzera, mentre il tempo
in uscita su ET si azzera solo se ingresso IN non è più attivo.
IN (BOOL) Ingresso timer, attivandolo si attiva l'uscita Q ed inizia il conteggio, dopo il tempo definito in PT
indipendentemente dallo stato dell'ingresso IN, l'uscita Q si azzera.
PT (UDINT) Preset tempo, definisce il tempo di attivazione dell'uscita Q, espresso in mS.
Q (BOOL) Uscita timer, si attiva all'attivazione dell'ingresso IN per il tempo definito in PT.
ET (UDINT) Tempo timer, inizia conteggio da attivazione ingresso IN, raggiunto tempo impostato in PT si arresta
conteggio, espresso in mS.
Esempi
Il timer è presettato a 5 secondi (5000 mS). Attivando l'ingresso digitale Di00M00 si attiva immediatamente l'uscita
digitale Do00M00 ed il valore di tempo nella variabile VarOut inizia il conteggio. Raggiunto il tempo definito 5 secondi,
l'uscita Do00M00 si azzera mentre il valore di tempo nella variabile VarOut rimane bloccato sul valore di preset (5000
mS) sino alla disattivazione dell'ingresso Di00M00.
Disattivando l'ingresso digitale Di00M00 durante la temporizzazione non si hanno ripercussioni nè sullo stato dell'uscita
Do00M00, nè sul valore della variabile VarOut.
Definizione variabili
Esempio IL
CAL FBeTP (* Call the eTP function block *)
LD Di00M00
ST FBeTP.IN (* Transfer the digital input to timer input *)
LD 5000
ST FBeTP.PT (* Set the delay time *)
LD FBeTP.Q
ST Do00M00 (* When time is passed the digital output is set *)
LD FBeTP.ET
ST OutValue (* The counting time is copied to variable *)
Esempio ST
FBeTP(PT:=5000); (* Call the eTP function block *)
Questo blocco funzione esegue la gestione di un counter in decremento. Agendo sull'ingresso di load LD è
possibile in qualsiasi momento trasferire il valore di preset definito su PV nel counter CV. Ad ogni fronte di
attivazione dell'ingresso CD, il valore del counter CV viene decrementato, quando il valore raggiunge 0,
l'uscita Q viene settata ed il conteggio si arresta. Solo agendo sull'ingresso di load LD è possibile
presettare il counter e fare ripartire un nuovo conteggio.
L'ingresso di load LD è prioritario sull'ingresso di decremento CD.
CD (BOOL) Comando decremento counter, ad ogni fronte attivazione il valore del counter CV si decrementa.
LD (BOOL) Comando di load, attivando l'ingresso il valore di preset PV, viene trasferito nel valore del counter CV.
PV (INT) Valore di preset, attivando l'ingresso di load LD, viene trasferito nel valore del counter CV.
Q (BOOL) Uscita counter, attiva se il valore del counter CV raggiunge il valore 0.
CV (INT) Valore counter, valore di conteggio counter, quando raggiunge il valore 0, l'uscita Q si attiva ed il counter
non si decrementa più.
Esempi
Il counter è presettato a 10 ed il suo valore in uscita CV è copiato nella variabile OutValue. Attivando l'ingresso digitale
Di01M00 il counter viene presettato ed il suo valore in uscita CV è posto a 10, resettando anche l'uscita Q.
Sul fronte di attivazione dell'ingresso digitale Di00M00 il counter è decrementato di 1, quando il valore di conteggio si
azzera, il conteggio si arresta e viene attivata l'uscita del counter Q che attiva l'uscita digitale Do00M00. Per fare
ripartire il conteggio occorre attivare l'ingresso digitale Di01M00 che presetta il counter.
Definizione variabili
Esempio IL
CAL FB_CTD (* Call the CTD function block *)
LD 10
ST FB_CTD.PV (* Preset value *)
LD Di00M01
ST FB_CTD.CD (* On the raising edge of digital input the counter count down *)
LD Di01M00
ST FB_CTD.LD (* If the digital input is set the PV value is loaded *)
LD FB_CTD.Q
ST Do00M00 (* If the counter value is 0 the digital output is set *)
LD FB_CTD.CV
ST OutValue (* The counter value is copied to the variable *)
Esempio ST
FB_CTD(PV:=10); (* Call the CTD function block and preset counter *)
FB_CTD.CD:=Di00M00; (* On the raising edge of digital input the counter count down *)
FB_CTD.LD:=Di01M00; (* If the digital input is set the PV value is loaded *)
Do00M00:=FB_CTD.Q; (* If the counter value is 0 the digital output is set *)
OutValue:=FB_CTD.CV; (* The counter value is copied to the variable *)
Type Library
7.3.2 CTU, Counter Up
FB eLLabStdLib_B000
Questo blocco funzione esegue la gestione di un counter in incremento. Agendo sull'ingresso di reset R è
possibile in qualsiasi momento azzerare il valore del counter CV. Ad ogni fronte di attivazione dell'ingresso
CU, il valore del counter CV viene incrementato. Quando il valore del counter CV raggiunge il valore di
preset, definito su PV, l'uscita Q viene settata ed il conteggio si arresta. Solo agendo sull'ingresso di reset
R si potrà resettare il counter e fare ripartire un nuovo conteggio.
L'ingresso di reset R è prioritario sull'ingresso di incremento CU.
CU (BOOL) Comando incremento counter, ad ogni fronte attivazione il valore del counter CV si incrementa.
R (BOOL) Comando di reset, attivando l'ingresso il valore del counter CV si resetta.
PV (INT) Valore di preset, quando il valore del counter CV raggiunge questo valore l'uscita Q si attiva ed il counter
non si incrementa più.
Q (BOOL) Uscita counter, attiva se il valore del counter CV raggiunge il valore definito in preset PV.
CV (INT) Valore counter, valore di conteggio counter, quando raggiunge il valore di preset PV, l'uscita Q si attiva ed il
counter non si incrementa più.
Esempi
Il counter è presettato a 10 ed il suo valore in uscita CV è copiato nella variabile OutValue. Attivando l'ingresso digitale
Di01M00 il counter viene resettato ed il suo valore in uscita CV è posto a 0, resettando anche l'uscita Q.
Sul fronte di attivazione dell'ingresso digitale Di00M00 il counter è incrementato di 1, quando il valore di conteggio
raggiunge il valore di preset, il conteggio si arresta e viene attivata l'uscita del counter Q che attiva l'uscita digitale
Do00M00. Per fare ripartire il conteggio occorre attivare l'ingresso digitale Di01M00 che resetta il counter.
Definizione variabili
Esempio IL
CAL FBCTU (* Call the CTU function block *)
LD 10
ST FBCTU.PV (* Preset counter *)
LD Di00M00
ST FB_CTU.CU (* On the raising edge of digital input the counter count up *)
LD Di01M00
ST FB_CTU.R (* If the digital input is set the counter is reset *)
LD FBCTU.Q
ST Do00M00 (* If the counter value has reached the preset the digital output is set *)
LD FB_CTU.CV
ST OutValue (* The counter value is copied to the variable *)
Type Library
7.3.3 CTUD, Counter Up/Down
FB eLLabStdLib_B000
Esempi
Il counter è presettato a 10 ed il suo valore in uscita CV è copiato nella variabile VarOut. Attivando l'ingresso digitale
Di02M00 il counter viene resettato ed il suo valore in uscita CV è posto a 0, resettando anche l'uscita QU. Attivando
l'ingresso digitale Di03M00 il counter viene presettato ed il suo valore in uscita CV è posto a 10, resettando anche
l'uscita QD.
Sul fronte di attivazione dell'ingresso digitale Di00M00 il counter è incrementato di 1, quando il valore di conteggio
raggiunge il valore di preset, il conteggio si arresta e viene attivata l'uscita del counter QU che attiva l'uscita digitale
Do00M00. Per fare ripartire il conteggio occorre attivare l'ingresso digitale Di02M00 che resetta il counter.
Sul fronte di attivazione dell'ingresso digitale Di01M00 il counter è decrementato di 1, quando il valore di conteggio si
azzera, il conteggio si arresta e viene attivata l'uscita del counter QD che attiva l'uscita digitale Do01M00. Per fare
ripartire il conteggio occorre attivare l'ingresso digitale Di03M00 che presetta il counter.
Definizione variabili
Esempio IL
CAL FB_CTUD (* Call the CTUD function block *)
LD 10
ST FB_CTUD.PV (* Preset value *)
LD Di00M00
ST FB_CTUD.CU (* On the raising edge of digital input the counter count up *)
LD Di01M00
ST FB_CTUD.CD (* On the raising edge of digital input the counter count down *)
LD Di02M00
ST FB_CTUD.R (* If the digital input is set the counter is reset *)
LD Di03M00
ST FB_CTUD.LD (* If the digital input is set the PV value is loaded *)
LD FB_CTUD.QU
ST Do00M00 (* If the counter value has reached the preset the digital output is set *)
LD FB_CTUD.QD
ST Do01M00 (* If the counter value is 0 the digital output is set *)
LD FB_CTUD.CV
ST OutValue (* The counter value is copied to the variable *)
Esempio ST
FB_CTUD(PV:=10); (* Call the CTD function block and preset counter *)
Parametri funzione:
Variable (UDINT) Variabile in cui testare il bit.
Bit (USINT) Numero del bit da testare (Range da 0 a 31).
La funzione ritorna:
(BOOL)
Stato bit indicato.
Esempi
Lo stato del bit 4 della variabile VarInp viene trasferito sull'uscita digitale Do00M00.
Definizione variabili
Esempio LD
Esempio IL
LD VarInp (* Variable input *)
VBitTest 4 (* Variable bit test *)
ST Do00M00 (* Transfer bit status to digital output *)
Esempio ST
Do00M00:=VBitTest(VarInp, 4); (* Variable bit test *)
Type Library
7.4.2 VBitSet, Variable bit set
Function eLLabUtyLib_C030
Parametri funzione:
Value (BOOL) Valore bit da settare.
Variable (UDINT) Variabile in cui settare il bit.
Bit (USINT) Numero del bit da settare (Range da 0 a 31).
La funzione ritorna:
(UDINT)
Valore variabile dopo il set del bit.
Esempi
Lo stato dell'ingresso digitale Di00M00 è trasferito nel bit 8 della variabile VarOut.
Definizione variabili
Esempio LD
Esempio IL
LD Di00M00 (* Variable input *)
VBitSet VarOut, 8 (* Variable bit set *)
ST VarOut (* Transfer result to variable *)
Esempio ST
VarOut:=VBitSet(Di00M00, VarOut, 8); (* Variable bit set *)
Type Library
7.4.3 BitToByte, Bit to byte conversion
FB eLLabUtyLib_C030
Questo blocco funzione permette di convertire 8 variabili BOOL in una variabile BYTE.
Esempi
Gli 8 ingressi digitali del modulo 0 sono trasferiti nella variabile VarOut. Attivando il solo ingresso digitale Di00M00 la
variabile VarOut assumerà valore 1, attivando il solo ingresso digitale Di01M00 la variabile VarOut assumerà valore 2,
e così via fino all'ingresso Di07M00 attivando il quale la variabile VarOut assumerà valore 128. Attivando più ingressi
contemporaneamente la variabile VarOut assumerà valore pari alla somma degli ingressi attivati.
Per semplicità negli esempi IL e ST non vengono riportati tutti i bit.
Definizione variabili
LD Di07M00
ST FBData.b7 (* Transfer digital input to input bit *)
LD FBData.Out
ST VarOut (* Transfer the result to variable *)
Type Library
7.4.4 ByteToBit, Byte to bit conversion
FB eLLabUtyLib_C030
Questo blocco funzione permette di convertire una variabile BYTE in 8 variabili BOOL.
Esempi
Lo stato del bit 0 della variabile VarInp viene trasferito sull'uscita digitale Do00M00 lo stato del bit 1 della variabile
VarInp viene trasferito sull'uscita digitale Do01M00 e così via fino allo stato del bit 7 della variabile VarInp viene
trasferito sull'uscita digitale Do07M00. Per semplicità negli esempi IL e ST non vengono riportati tutti i bit.
Definizione variabili
LD FBData.b0
ST Di00M00 (* Transfer output bit to digital output *)
Type Library
7.4.5 ByteToWord, Byte to word conversion
FB eLLabUtyLib_C030
Questo blocco funzione permette di convertire due variabili BYTE in una variabile WORD.
Esempi
Le due variabili MSBByte e LSBByte sono uniti nella variabile VarOut in uscita.
Definizione variabili
LD LSBByte
ST FBData.LSB (* Transfer the LSB variable to input *)
LD FBData.Out
ST VarOut (* Transfer output to variable *)
Type Library
7.4.6 WordToByte, Word to byte conversion
FB eLLabUtyLib_C030
Questo blocco funzione permette di convertire una variabile WORD in due variabili BYTE.
Esempi
Le variabile VarInp è divisa nelle due variabili MSBByte e LSBByte.
Definizione variabili
LD FBData.MSB
ST MSBByte (* Transfer the MSB output to variable *)
LD FBData.LSB
ST LSBByte (* Transfer the LSB output to variable *)
Type Library
7.4.7 DoubleToWord, Double to word conversion
FB eLLabUtyLib_C030
Questo blocco funzione permette di convertire una variabile DWORD in due variabili WORD.
Esempi
Le variabile VarInp è divisa nelle due variabili MSBWord e LSBWord.
Definizione variabili
LD FBData.MSW
ST MSBWord (* Transfer the MSW output to variable *)
LD FBData.LSW
ST LSBWord (* Transfer the LSW output to variable *)
Type Library
7.4.8 WordToDouble, Word to double conversion
FB eLLabUtyLib_C030
Questo blocco funzione permette di convertire due variabili WORD in una variabile DWORD.
Esempi
Le due variabili MSBWord e LSBWord sono uniti nella variabile VarOut in uscita.
Definizione variabili
LD LSBWord
ST FBData.LSW (* Transfer the LSW variable to input *)
LD FBData.Out
ST VarOut (* Transfer output to variable *)
Type Library
7.4.9 LEArrayToVar, Little endian array to variable conversion
Function eLLabUtyLib_C030
Questa funzione acquisisce il valore da un array little endian (MSB - LSB) Source e lo
trasferisce nella variabile di destinazione Destination in base al tipo Type di variabile
definito.
Parametri funzione:
Type (USINT) Tipo di variabile destinazione come definito nella tabella Variable types definition.
Destination (@USINT) Indirizzo variabile di destinazione.
Source (@USINT) Indirizzo array sorgente.
La funzione ritorna:
(BOOL)
FALSE: Errore tipo dati, TRUE: Conversione eseguita.
Esempi
Il valore presente nell'array LEArray “1, 2, 3, 4” viene convertito nella variabile Variable, eseguita la conversione la
variabile avrà il valore 16#01020304.
Definizione variabili
Esempio LD
Type Library
7.4.10 BEArrayToVar, Big endian array to variable conversion
Function eLLabUtyLib_C030
Questa funzione acquisisce il valore da un array big endian (LSB - MSB) Source e lo
trasferisce nella variabile di destinazione Destination in base al tipo Type di variabile
definito.
Parametri funzione:
Type (USINT) Tipo di variabile destinazione come definito nella tabella Variable types definition.
Destination (@USINT) Indirizzo variabile di destinazione.
Source (@USINT) Indirizzo array sorgente.
La funzione ritorna:
(BOOL)
FALSE: Errore tipo dati, TRUE: Conversione eseguita.
Esempi
Il valore presente nell'array BEArray “4, 3, 2, 1” viene convertito nella variabile Variable, eseguita la conversione la
variabile avrà il valore 16#01020304.
Definizione variabili
Esempio LD
Type Library
7.4.11 VarToLEArray, variable to little endian array conversion
Function eLLabUtyLib_C030
Questa funzione trasferisce il valore di una variabile Source in base al tipo Type definito,
in un array Destination utilizzando il formato little endian (MSB - LSB).
Parametri funzione:
Type (USINT) Tipo di variabile come definito nella tabella Variable types definition.
Destination (@USINT) Indirizzo array di destinazione.
Source (@USINT) Indirizzo variabile sorgente.
La funzione ritorna:
(BOOL)
FALSE: Errore tipo dati, TRUE: Conversione eseguita.
Esempi
Il valore presente nella variabile Source viene convertito nell'array Destination di tipo little endian (MSB – LSB).
Nell'esempio è riportata anche la finestra di Watch con i valori visualizzati.
Definizione variabili
Esempio FBD
Type Library
7.4.12 VarToBEArray, variable to big endian array conversion
Function eLLabUtyLib_C030
Questa funzione trasferisce il valore di una variabile Source in base al tipo Type definito,
in un array Destination utilizzando il formato big endian (LSB - MSB).
Parametri funzione:
Type (USINT) Tipo di variabile come definito nella tabella Variable types definition.
Destination (@USINT) Indirizzo array di destinazione.
Source (@USINT) Indirizzo variabile sorgente.
La funzione ritorna:
(BOOL)
FALSE: Errore tipo dati, TRUE: Conversione eseguita.
Esempi
Il valore presente nella variabile Source viene convertito nell'array Destination di tipo big endian (LSB – MSB).
Nell'esempio è riportata anche la finestra di Watch con i valori visualizzati.
Definizione variabili
Esempio FBD
Type Library
7.4.13 IEE754DoubleToFloat, IEE754 double to float
Function eLLabUtyLib_C040
Parametri funzione:
Value (@BYTE) Pointer all'array valore IEE da convertire.
La funzione ritorna:
(REAL)
Valore variabile convertita.
Esempi
Viene eseguita la conversione del valore double IEE754 “3FFB88CE703AFB7F” e si ottiene come risultato il valore
REAL “1.7209”.
Definizione variabili
Esempio LD
Questa funzione ritorna il tempo di sistema espresso in μS. E' possibile definire con il valore
di Cmd se si vuole avere il tempo di sistema attuale (Cmd:=TRUE) oppure quello
memorizzato con la precedente esecuzione della funzione (Cmd:=FALSE). Il valore di
conteggio parte da 0 e dopo 4294 Secondi si resetta.
Parametri funzione:
Cmd (BOOL) Indica il valore di tempo che deve essere ritornato.
TRUE: Viene salvato e ritornato il valore attuale di tempo.
FALSE: Viene ritornato il tempo salvato dalla precedente chiamata con Cmd:=TRUE.
La funzione ritorna:
(UDINT)
Tempo di sistema espresso in μS.
Esempi
Viene calcolato il tempo in cui l'ingresso digitale Di00M00 rimane nella condizione di attivo.
Definizione variabili
END_IF;
Calcolo timeout
Essendo il valore di tempo di sistema ritornato dalla funzione un numero UDINT che si incrementa ogni μS, ed al valore
massimo esegue overflow a zero, non è possibile effettuare comparazioni dirette con il tempo di riferimento ma occorre
sempre eseguire la differenza.
Nel seguente esempio viene attivato Timeout se l'ingresso Di00M00 rimane attivo per più di un secondo.
IF NOT(Di00M00) THEN TimeBf:=SysGetSysTime(TRUE);
ELSE IF ((SysGetSysTime(TRUE)-TimeBf) >= 1000000) THEN Timeout:=TRUE; END_IF;
END_IF;
Semplice cronometro
Questo esempio realizza un semplice cronometro per misurare il tempo che intercorre tra un comando di start ed il
comando di stop. Utilizzando ad esempio due fotocellule una sulla linea di start ed una sulla linea di stop di un percorso
è possibile calcolare il tempo di percorrenza espresso in μS.
Attivando l'ingresso di start Di00M00 viene salvato il tempo di sistema allo start nella variabile StartTime, attivando
l'ingresso di stop Di01M00 viene calcolato il tempo trascorso tra il tempo salvato allo start ed il tempo nel momento di
stop. Il tempo calcolato è salvato nella variabile DelayTime.
Definizione variabili
Esempio LD (PTP119A000)
Type Library
7.5.2 SysGetUTCDateTime, get the system Date/Time on UTC
Function XTarget_12_0
Type Library
7.5.3 SysSetUTCDateTime, set the system Date/Time on UTC
Function XTarget_12_0
Type Library
7.5.4 SysTimeZoneAdj, adjust date and time
Function XTarget_12_0
Parametri funzione:
UTCDateTime (UDINT) Valore di Date/Time in epoch time (UTC).
TimeZone (SINT) Fuso orario numero che indica la differenza in ore dell'ora locale rispetto al Tempo Coordinato
Universale (UTC) riferito al meridiano di Greenwich. Per l'Italia il valore da definire è +1.
DaylightZone (USINT) Zona di cambio ora legale, il sistema provvede automaticamente al cambio di ora in base alla
zona definita. Le zone sono 3 (Per l'Italia occorre impostare 1).
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9940100 Errore TimeZone
9940110 Errore Daylight
Esempi
Ad ogni secondo viene calcolato il valore di Data/Ora locale per l'Italia.
Definizione variabili
Type Library
7.5.5 Sysmemset, memory set
Function XTarget_12_0
Questa funzione riempie l'area di memoria definita in Buf con il dato definito in Ch. In Size
occorre definire la dimensione dell'area da riempire.
La funzione ritorna l'indirizzo dell'area di memoria da riempire.
Parametri funzione:
Buf (@USINT) Indirizzo dell'area di memoria da riempire.
Ch (INT) Dato di riempimento.
Size (UDINT) Dimensione dell'are da riempire.
La funzione ritorna:
(@USINT) Indirizzo dell'area di memoria da riempire.
Codici di errore
In caso di errore la funzione torna NULL e con SysGetLastError è possibile rilevare il codice di errore.
9931100 Pointer Buff non valido.
Esempi
Attivando Cmd viene scritto tutto l'array Buffer con il dato 16#55.
Definizione variabili
Type Library
7.5.6 Sysmemmove, memory move
Function XTarget_12_0
Questa funzione copia l'area di memoria definita in Src nell'area di memoria definita in
Dest per la dimensione definita in Size. Le due aree di memoria possono anche
sovrapporsi.
La funzione ritorna l'indirizzo dell'area di memoria di destinazione.
Parametri funzione:
Dest (@USINT) Indirizzo dell'area di memoria di destinazione.
Src (@USINT) Indirizzo dell'area di memoria di origine.
Size (UDINT) Dimensione dell'are da copiare.
La funzione ritorna:
(@USINT) Indirizzo dell'area di memoria di destinazione.
Codici di errore
In caso di errore la funzione torna NULL e con SysGetLastError è possibile rilevare il codice di errore.
9930100 Pointer Dest non valido.
Esempi
Attivando Cmd vengono trasferiti i primi 10 bytes di Source in Destination.
Definizione variabili
Type Library
7.5.7 Systolower, converts a given letter to lowercase
Function XTarget_12_0
Questa funzione converte un carattere dal formato maiuscolo nel corrispondente carattere in
formato minuscolo.
Parametri funzione:
Ch (INT) Carattere da convertire.
La funzione ritorna:
(INT)
Carattere nel formato minuscolo.
Esempi
La variabile Upper viene convertita nel corrispondente valore minuscolo e trasferita in Lower. Il valore di
inizializzazione 16#41 che corrisponde alla lettera A, viene convertito nel valore 16#61 che corrisponde alla lettera a.
Definizione variabili
Esempio LD
Esempio IL
LD Upper (* Uppercase letter *)
Systolower (* Uppercase to lowercase letter conversion *)
ST Lower (* Lowercase letter *)
Esempio ST
Lower:=Systolower(Upper); (* Uppercase to lowercase letter conversion *)
Type Library
7.5.8 Systoupper, Lowercase to uppercase letter conversion
Function XTarget_12_0
Questa funzione converte un carattere dal formato minuscolo nel corrispondente carattere in
formato maiuscolo.
Parametri funzione:
Ch (INT) Carattere da convertire.
La funzione ritorna:
(INT)
Carattere nel formato maiuscolo.
Esempi
La variabile Lower viene convertita nel corrispondente valore maiuscolo e trasferita in Upper. Il valore di
inizializzazione 16#61 che corrisponde alla lettera a, viene convertito nel valore 16#41 che corrisponde alla lettera A.
Definizione variabili
Esempio LD
Esempio IL
LD Lower (* Lowercase letter *)
Systoupper (* Lowercase to uppercase letter conversion *)
ST Upper (* Lowercase letter *)
Esempio ST
Upper:=Systoupper(Lower); (* Lowercase to uppercase letter conversion *)
Type Library
7.5.9 SysSetTaskLpTime, set task loop time
Function XTarget_07_0
Questa funzione permette di impostare il tempo di esecuzione delle tasks PLC. Esistono due tasks eseguite a tempo la
task slow ID_TASK_SLOW e la task fast ID_TASK_FAST, ad ognuna di queste task può essere assegnato un tempo di
esecuzione.
Se il tempo impostato non è compreso nel range definito o se il rapporto tra i tempi di esecuzione della task fast rispetto
alla slow non sono coerenti la funzione non modifica i tempi di esecuzione e ritorna FALSE. Di seguito sono riportati i
range di tempo definibili per le varie tasks.
ID_TASK_FAST Range da 100 μS a 10 mS
ID_TASK_SLOW Range da 1 a 100 mS
Parametri funzione:
TaskID (USINT) Identifica la task a cui si vuole definire il tempo di esecuzione secondo le definizioni in Task ID.
Time (UDINT) Indica il valore di tempo di esecuzione task espresso in μS.
La funzione ritorna:
(BOOL)
TRUE: Se funzione eseguita correttamente
FALSE: In caso di errore esecuzione, esempio parametri errati.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9948990 Non implementata nel simulatore.
Esempi
Attivando l'ingresso Di00M00 viene impostato un tempo di esecuzione di 5 ms per la task PlcFast.
Attenzione! Per aumentare i tempi di esecuzione delle tasks dal valore di default occorre eseguire la funzione nella
task di boot.
Definizione variabili
Esempio ST
Enabled:=Di00M00; (* Function enabled *)
IF Di00M00 THEN
ExecutionOk:=SysSetTaskLpTime(TaskID:=ID_TASK_FAST, Time:=5000); (* Function execution ok *)
END_IF;
Type Library
7.5.10 SysGetRandom, get random number
Function XTarget_07_0
Questa funzione ritorna un numero random compreso tra 0.0 e 1.0. E' possibile definire con
il valore di Cmd se si vuole avere un nuovo numero random (Cmd:=TRUE) oppure quello
memorizzato con la precedente esecuzione della funzione (Cmd:=FALSE).
Parametri funzione:
Cmd (BOOL) Indica il numero random ritornato.
TRUE: Viene salvato e ritornato un nuovo numero random.
FALSE: Viene ritornato il numero salvato dalla precedente chiamata con Cmd:=TRUE.
La funzione ritorna:
(REAL)
Un numero random compreso nel range da 0.0 a 1.0.
Esempi
Attivando l'ingresso digitale Di00M00 viene inviato sulla porta seriale COM0 una sequenza di 10 numeri random.
Definizione variabili
IF (Di00M00) THEN
Collegando un terminale seriale alla porta COM0 impostato a 115200,e,8,1 vedremo un elenco del tipo:
Rn:437
Rn:488
Rn:898
...
Rn:261
Rn:944
Type Library
7.5.11 SysGetLastError, get last error
Function XTarget_07_0
Questa funzione ritorna il numero dell'ultimo errore rilevato da una funzione e/o da un
blocco funzione. Occorre eseguire la funzione su abilitazione del bit di fault in uscita
dalla funzione e/o blocco funzione da controllare. E' possibile definire con il valore di
Cmd se si vuole avere il valore attuale dell'ultimo errore (Cmd:=TRUE) oppure quello
memorizzato con la precedente esecuzione della funzione (Cmd:=FALSE).
Parametri funzione:
Cmd (BOOL) Indica il numero di errore ritornato.
TRUE: Viene ritornato l'ultimo valore di errore.
FALSE: Viene ritornato il numero salvato dalla precedente chiamata con Cmd:=TRUE.
La funzione ritorna:
(UDINT)
Il numero dell'ultimo errore rilevato
Esempi
Viene salvato l'eventuale errore durante l'esecuzione del blocco funzione SysGetPhrDI. In caso di errore il numero di
errore è trasferito nella variabile Error.
Definizione variabili
Esempio LD
Type Library
7.5.12 SysOSIDValue, get or set an operative system variable
Function XTarget_12_0
Questa funzione permette di leggere e/o impostare variabili del sistema operativo. In
OSID occorre specificare la variabile su cui operare.
In caso di lettura Wr:=FALSE il valore della variabile sarà trasferito nel buffer di memoria
indicato in Val. In caso di scrittura lettura Wr:=TRUE il valore presente nel buffer di
memoria indicato in Val sarà trasferito nella variabile.
Occorre dimensionare il buffer coerentemente con il tipo di dato relativo all'OSID definito.
In uscita dalla funzione avremo TRUE se funzione eseguita correttamente, FALSE in caso di errore e con la
SysGetLastError è possibile acquisire l'errore.
Parametri funzione:
Wr (BOOL) Tipo di operazione da eseguire
FALSE: Lettura, il valore della variabile è trasferito nel buffer definito in Val.
TRUE: Scrittura, il valore del buffer definito in Val è trasferito nella variabile.
OSID (UDINT) Identificativo variabile, vedi tabella.
Val (@USINT) Pointer al buffer di memoria che contiene il valore della variabile.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione.
TRUE: Funzione eseguita correttamente.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9924100 Scrittura non consentita.
9924110 Lettura non consentita.
9924120 OSID non valido.
9926990 Non presente nel simulatore
Esempi
Viene acquisito l'indirizzo IP impostato sull'interfaccia di rete Ethernet dello SlimLine. Il valore è ritornato in IP.
Definizione variabili
Esempio LD (PTP116B000,LD_SysOSIDValue)
Type Library
7.5.13 SysPCodeAccept, accepts the protection code
Function XTarget_07_0
Alcune funzioni di programma e/o blocchi funzione possono essere protetti da un codice che deve essere ordinato
separatamente. Per abilitare l'esecuzione della funzione e/o del blocco funzione occorre sbloccarlo definendone il
codice con questa funzione.
La funzione controlla il codice fornito e ritorna TRUE se codice accettato. Vedere capitolo Protezione funzioni e
blocchi funzione per ulteriori informazioni.
Parametri funzione:
Code (STRING[20]) Codice di protezione.
La funzione ritorna:
(BOOL)
TRUE: Codice verificato ID relativo sbloccato. FALSE: Codice non verificato.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9991100 Valore di Code non corretto.
9991990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue il controllo sul codice di sblocco “abcdefghijklmnopqrst“. Se il codice
è corretto viene attivata la variabile CodeAccepted.
Definizione variabili
Esempio LD (PTP116A000,LD_SysPCodeAccept)
Esempio ST
(* Check the protection code. *)
Type Library
7.5.14 SysGetCheck, gets the check
Function XTarget_12_0
Questa funzione funzione esegue il calcolo del pattern di controllo su di un'area dati. Il
calcolo è effettuato secondo il tipo indicato nel parametro Type.
Occorre passare alla funzione l'indirizzo del buffer di memoria Buf ed il numero di bytes
ByteNr su cui eseguire il calcolo. Occorre anche indicare un valore di inizializzazione
del calcolo che cambia in funzione del tipo di pattern di controllo calcolato.
Parametri funzione:
Buf (@USINT) Indirizzo dell'area di memoria su cui eseguire il calcolo.
ByteNr (UDINT) Numero di bytes su cui eseguire il calcolo a partire dall'indirizzo definito in Buf.
Init (UDINT) Valore di inizializzazione del calcolo.
Type (UISNT) Tipo di calcolo da eseguire (Vedi tabella).
La funzione ritorna:
(UDINT)
Valore pattern di controllo calcolato.
Codici di errore
In caso di errore viene ritornato 0 e con SysGetLastError è possibile rilevare il codice di errore.
9938100 Tipo calcolo errato.
Esempi
Viene calcolato il CRC di un frame Modbus RTU per il comando di lettura registri Read holding registers. Il valore del
CRC calcolato è 17466 (16#443A).
Definizione variabili
Type Library
7.5.15 SysMAlloc, memory allocation
Function XTarget_07_0
Questa funzione esegue l'allocazione di uno spazio di memoria della dimensione in byte definita
da parametro Size. La funzione ritorna il puntatore allo spazio di memoria allocato.
La memoria è allocata nella memoria di sistema e quindi non utilizza la memoria a disposizione
del programma utente. Nel caso in cui non vi sia spazio in memoria per l'allocazione del buffer definito, la funzione
ritorna 0.
Parametri funzione:
Size (UDINT) Dimensione in bytes dell'area da allocare.
La funzione ritorna:
(@USINT)
Indirizzo allocazione buffer. NULL se non vi è spazio per allocare il buffer.
Codici di errore
In caso di errore la funzione torna NULL e con SysGetLastError è possibile rilevare il codice di errore.
9947990 Non implementata nel simulatore.
Esempi
Su fronte attivazione ingresso Di00M00 viene incrementata la variabile Counter e la stampa del suo valore trasferita
nell'array StringOut. Il valore presente in StringOut viene poi inviato sulla porta seriale COM0.
Definizione variabili
IF (SysFirstLoop) THEN
StringOut:=SysMAlloc(16); (* String output pointer *)
Fp:=Sysfopen('COM0', 'rw'); (* Port COM0 file pointer *)
END_IF;
IF (Di00M00) THEN
Counter:=Counter+1; (* Counter *)
NrOfChars:=SysVarsnprintf(StringOut, 32, 'Counter:%04d$r$n', UDINT_TYPE, ADR(Counter));
Type Library
7.5.16 SysRMAlloc, relocatable memory allocation
Function XTarget_12_0
Questa funzione esegue l'allocazione di uno spazio di memoria della dimensione in byte
definita da parametro Size. L'indirizzo alla memoria allocata è salvato nella variabile DataPtr.
La funzione ritorna FALSE se errore allocazione e TRUE se memoria allocata.
La memoria è allocata nella memoria di sistema e quindi non utilizza la memoria a
disposizione del programma utente. La memoria allocata viene automaticamente rilocata dal sistema operativo per
ottimizzare lo spazio. Quindi prima di utilizzarla occorre sempre fare riferimento all'indirizzo memorizzato in DataPtr.
Parametri funzione:
Size (UDINT) Dimensione in bytes dell'area da allocare.
DataPtr (UDINT) Buffer indirizzo memoria allocata.
La funzione ritorna:
(BOOL)
FALSE: Errore allocazione memoria, TRUE: Memoria allocata
Codici di errore
In caso di errore la funzione torna NULL e con SysGetLastError è possibile rilevare il codice di errore.
9933100 Funzione eseguita in task fast.
9933110 Valore di Size errato.
9933990 Non implementata nel simulatore.
Esempi
Su fronte attivazione ingresso Di00M00 viene incrementata la variabile Counter e la stampa del suo valore trasferita
nell'array StringOut. Il valore presente in StringOut viene poi inviato sulla porta seriale COM0.
Definizione variabili
IF (Di00M00) THEN
Counter:=Counter+1; (* Counter *)
Type Library
7.5.17 SysRMFree, relocatable memory free
Function XTarget_12_0
Codici di errore
In caso di errore la funzione torna NULL e con SysGetLastError è possibile rilevare il codice di errore.
9934100 Funzione eseguita in task fast.
9934990 Non implementata nel simulatore.
Esempi
Vedere esempio fornito con funzione SysRMAlloc.
Type Library
7.5.18 SysGetEndianness, get the system endianness
Function XTarget_12_0
Type Library
7.5.19 SysSpyData, system spy data
Function XTarget_11_0
Questa funzione permette di inviare dati alla console di spionaggio (Accessibile da Telnet con il
comando SpyData). É possibile definire sia il modo di visualizzazione dei dati spiati Mode che
abbinare una etichetta nella stringa spiata Label.
Con il parametro TFlags è possibile definire un pattern di 32 bits che viene usato come trigger
per la visualizzazione dei dati spiati nella console di spionaggio Telnet.
Eseguendo la funzione con tutti i parametri a “0” viene eseguito il controllo sullo spazio nella
console di spionaggio Telnet. La funzione ritorna TRUE se vi è spazio per salvare il record spiato e FALSE se la
console è occupata.
Parametri funzione:
Mode (USINT) Definisce il modo di visualizzazione dei dati spiati, Spy mode.
TFlags (UDINT) Definisce i bits di trigger per la visualizzazione dei dati spiati.
Label (@USINT) Etichetta riportata nella stringa spiata.
DPtr (@USINT) Puntatore alla stringa dati da spiare.
La funzione ritorna:
(BOOL)
TRUE: Spionaggio possibile. FALSE: Console di spionaggio occupata.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9950100 Funzione eseguita in task fast o slow.
9950200 Errore allocazione memoria funzione.
9950990 Non implementata nel simulatore.
Record di spy
Il record di spy visualizzato nella console di spionaggio ha lunghezza totale di 80 caratteri, tipicamente è un record del
tipo:
00:00:00(0000)|Label|Spy data string--------------------------------------------
I campi ora e ritardo dallo spy record precedente sono di lunghezza costante (15 Caratteri). Il campo Label con i dati di
spionaggio possono raggiungere in totale 65 caratteri.
Esempi
Ecco un esempio di programma che invia ad ogni secondo tre records alla console di spionaggio.
Definizione variabili
Console di spionaggio
Per attivare la console di spionaggio occorre accedere al sistema in Telnet, (Fare riferimento al Manuale riferimento
comandi Telnet CPU SlimLine). Con il comando SpyData si attiva la console di spionaggio e sono visualizzati i vari
records dati.
Questo blocco funzione esegue la conversione della data espressa in epoch time. Occorre
fornire al blocco funzione la data espressa nel formato epoch ime come presente nella
variabile di sistema SysDateTime, in uscita dal blocco funzione avremo i valori di data espressi
nel formato Giorno/Mese/Anno ed Ora:Minuti:Secondi.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9986050 Errore allocazione blocco funzione.
9986060 Errore versione blocco funzione.
Esempi
Viene convertito il valore di data ed ora espresso in epoch time dalla variabile SysDateTime e viene ritornato il valore di
anno, mese e giorno nelle tre variabili definite.
Definizione variabili
LD SysDateTime
ST FB_SysETimeToDate.EpochTime
LD FB_SysETimeToDate.Year
ST Year
LD FB_SysETimeToDate.Month
ST Month
LD FB_SysETimeToDate.Day
ST Day
FB_SysETimeToDate.EpochTime:=SysDateTime;
FB_SysETimeToDate();
Year:=FB_SysETimeToDate.Year; (* Year *)
Month:=FB_SysETimeToDate.Month; (* Month *)
Day:=FB_SysETimeToDate.Day; (* Day *)
Type Library
7.6.2 SysDateToETime, date to epoch time conversion
FB XTarget_07_0
Questo blocco funzione esegue la conversione della data-ora in epoch time. Occorre fornire al
blocco funzione la data e l'ora ed in uscita dal blocco funzione avremo un valore in epoch time.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9987050 Errore allocazione blocco funzione.
9987060 Errore versione blocco funzione.
9987200 Errore durante l'esecuzione del blocco funzione.
Esempi
Viene convertito il valore di data ed ora in epoch time. Esempio definendo il valore di data 9/4/2010 e ora 14:20:15
avremo in uscita il valore 1270822815.
Definizione variabili
LD Year
ST FB_SysDateToEtime.Year
LD Month
ST FB_SysDateToEtime.Month
LD Day
ST FB_SysDateToEtime.Day
LD FB_SysDateToEtime.EpochTime
ST EpochTime
FB_SysDateToEtime.Year:=Year;
FB_SysDateToEtime.Month:=Month;
FB_SysDateToEtime.Day:=Day;
FB_SysDateToEtime(); (* Call the SysDateToEtime function block *)
EpochTime:=FB_SysDateToEtime.EpochTime; (* Epoch time *)
Questa funzione permette l'apertura del collegamento tra la risorsa indicata dal parametro
FName, ed un flusso di dati stream da impiegare nelle successive chiamate alle funzioni di
I/O. La funzione ritorna il pointer alla risorsa.
Se la risorsa indicata è già aperta oppure il nome della risorsa è errato, la funzione ritorna
NULL. Se si sta aprendo un file su disco per crearlo, accertarsi che il disco sia formattato.
Parametri funzione:
FName (STRING[20]) E' il nome della risorsa da utilizzare.
Name Resource
Mode (STRING[4]) Indica il modo in cui la risorsa è aperta: r=read; w=write ; a=append. Per le porte seriali definire 'rw'.
Per creare un file su disco, occorre eseguire l'apertura in 'w' o 'a'.
L'apertura in 'w' su un file esistente, provoca la cancellazione del contenuto.
L'apertura in 'r' o 'w' posizionano l'indicatore di posizione dello stream all'inizio del file, l'apertura in 'a'
lo posiziona alla fine.
La funzione ritorna:
(FILEP) Pointer alla risorsa.
NULL: In caso di errore.
Codici di errore
In caso di errore la funzione torna con NULL e con SysGetLastError è possibile rilevare il codice di errore.
9996100 Nome risorsa FName ha lunghezza errata.
9996110 Nome risorsa FName ha lunghezza errata.
9996200~2 Impossibile utilizzare porta da programma utente.
9996990 Non implementata nel simulatore.
Esempi
Viene aperta la porta seriale in read/write.
Definizione variabili
Esempio LD
Type Library
7.7.2 SysFIsOpen, get the file open status
Function XTarget_12_0
Codici di errore
In caso di errore la funzione torna con EOF e con SysGetLastError è possibile rilevare il codice di errore.
9973990 Non implementata nel simulatore.
Esempi
Viene aperta e successivamente chiusa la porta seriale COM0. Se la porta è correttamente chiusa viene attivata l'uscita
Do01M00.
Definizione variabili
IF (SysFIsOpen(Fp)) THEN
Do01M00:=(Sysfclose(Fp) <> EOF); (* Output is set if port is closed *)
END_IF;
Type Library
7.7.3 Sysfclose, file close
Function XTarget_07_0
Questa funzione permette la chiusura del collegamento alla risorsa indicata dal parametro File,
precedentemente aperto dalla funzione Sysfopen.
In caso di errore chiusura, la funzione ritorna EOF.
Parametri funzione:
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(INT)
0: Se esecuzione corretta.
EOF: In caso di errore.
Codici di errore
In caso di errore la funzione torna con EOF e con SysGetLastError è possibile rilevare il codice di errore.
9973100 Terminale di I/O usato in task fast o slow.
9973200 Errore nella chiusura della risorsa.
9973990 Non implementata nel simulatore.
Esempi
Viene aperta e successivamente chiusa la porta seriale COM0. Se la porta è correttamente aperta viene attivata l'uscita
Do00M00. Se la porta è correttamente chiusa viene attivata l'uscita Do01M00.
Definizione variabili
Type Library
7.7.4 Sysfgetc, get character from file
Function XTarget_07_0
Questa funzione ritorna un carattere dal flusso dati stream indicato dal parametro File,
precedentemente aperto dalla funzione Sysfopen.
La funzione ritorna il carattere letto dallo stream. In caso di errore o se nessun dato dallo stream, la
funzione ritorna EOF. Per essere certi che vi siano caratteri dallo stream è possibile utilizzare la
funzione SysGetIChars che ne ritorna il numero.
Parametri funzione:
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(INT)
Carattere letto dal flusso di dati.
EOF: In caso di errore o se nessun dato dallo stream.
Codici di errore
In caso di errore la funzione torna con EOF e con SysGetLastError è possibile rilevare il codice di errore.
9972100 Terminale di I/O usato in task fast o slow.
9972990 Non implementata nel simulatore.
Esempi
Viene eseguita apertura porta seriale COM0 e controllato se caratteri disponibili dalla porta. Se almeno un carattere è
disponibile ne viene eseguita lettura ed il carattere letto è trasferito nella variabile Ch.
Definizione variabili
Type Library
7.7.5 Sysfputc, put character to file
Function XTarget_07_0
Questa funzione invia un carattere sul flusso dati stream indicato dal parametro File,
precedentemente aperto dalla funzione Sysfopen.
La funzione ritorna il carattere scritto sullo stream. In caso di errore o se lo stream non accetta il
dato, la funzione ritorna EOF. Per essere certi che vi sia spazio sullo stream per accettare il
carattere, è possibile utilizzare la funzione SysGetOSpace che ritorna lo spazio disponibile.
Parametri funzione:
Ch (INT) Carattere da inviare sul flusso dati.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(INT)
Carattere scritto sul flusso di dati. EOF: In caso di errore o se lo stream non accetta il dato.
Codici di errore
In caso di errore la funzione torna con EOF e con SysGetLastError è possibile rilevare il codice di errore.
9971100 Terminale di I/O usato in task fast o slow.
9971990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue l'eco dei caratteri ricevuti dalla porta seriale COM0. Viene eseguita
apertura porta seriale COM0 e controllato se caratteri disponibili dalla porta. Se almeno un carattere è disponibile ne
viene eseguita lettura e successiva ritrasmissione.
Definizione variabili
Utilizzando le funzioni di gestione terminale di I/O è possibile realizzare un semplice programma che esegue l'echo del
carattere ricevuto dalla porta seriale COM0. La porta viene aperta con ed impostata a 19200 e, 8, 1. Tutti i caratteri
ricevuti dalla porta sono ritrasmessi.
Definizione variabili
Type Library
7.7.6 Sysfread, read data from file
Function XTarget_07_0
Questa funzione esegue la lettura di un numero definito di stringhe di lunghezza definita dal flusso
dati stream indicato dal parametro File, precedentemente aperto dalla funzione Sysfopen.
La funzione ritorna il numero di stringhe dati lette. Se nello stream non ci sono abbastanza
stringhe da soddisfare i parametri, viene ritornato un numero minore di stringhe lette rispetto al
valore definito.
Parametri funzione:
Buf (@STRING) Indirizzo della stringa dove trasferire le stringhe lette.
Size (INT) Lunghezza in caratteri delle stringhe da leggere.
Count (INT) Numero di stringhe da leggere.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(INT)
Numero di stringhe lette, se il valore ritornato è minore di Count, significa che non vi erano abbastanza
dati nello stream.
Codici di errore
In caso di errore la funzione torna con 0 e con SysGetLastError è possibile rilevare il codice di errore.
9970100 Terminale di I/O usato in task fast o slow.
9970990 Non implementata nel simulatore.
Esempi
Vengono attesi almeno 5 caratteri ricevuti dalla porta seriale e quando ricevuti viene letta una stringa di 5 caratteri (5
stringhe di 1 carattere), la stringa letta è trasferita nella variabile RxString. La stringa letta viene poi ritrasmessa sulla
porta seriale, notare come anche nella trasmissione è trasmessa una stringa di 5 caratteri (1 stringa di 5 caratteri) .
Definizione variabili
(* Here wait until at least 5 chars are received and echoes them. *)
Type Library
7.7.7 Sysfwrite, write data to file
Function XTarget_07_0
Questa funzione esegue la scrittura di un numero definito di stringhe di lunghezza definita nel
flusso dati stream indicato dal parametro File, precedentemente aperto dalla funzione Sysfopen.
La funzione ritorna il numero di stringhe dati scritte. Se nello stream non c'è abbastanza spazio
per contenere il numero di stringhe definito, viene ritornato un numero minore di stringhe scritte
rispetto al valore definito.
Parametri funzione:
Buf (@STRING) Indirizzo della stringa da scrivere.
Size (INT) Lunghezza in caratteri delle stringhe da scrivere.
Count (INT) Numero di stringhe da scrivere.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(INT)
Numero di stringhe scritte, se valore ritornato minore di Count, non vi era abbastanza spazio nello
stream.
Codici di errore
In caso di errore la funzione torna con 0 e con SysGetLastError è possibile rilevare il codice di errore.
9969100 Terminale di I/O usato in task fast o slow.
9969990 Non implementata nel simulatore.
Esempi
Vengono attesi almeno 5 caratteri ricevuti dalla porta seriale e quando ricevuti viene letta una stringa di 5 caratteri (5
stringhe di 1 carattere), la stringa letta è trasferita nella variabile RxString. La stringa letta viene poi ritrasmessa sulla
porta seriale, notare come anche nella trasmissione è trasmessa una stringa di 5 caratteri (1 stringa di 5 caratteri) .
Definizione variabili
Esempio ST
(* Here the COM0 port is opened in read/write. *)
(* Here wait until at least 5 chars are received and echoes them. *)
Type Library
7.7.8 SysFGetIChars, get input available characters from file
Function XTarget_12_0
Codici di errore
In caso di errore la funzione torna con 0 e con SysGetLastError è possibile rilevare il codice di errore.
9968100 Terminale di I/O usato in task fast o slow.
9968990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue l'eco dei caratteri ricevuti dalla porta seriale COM0. Viene eseguita
apertura porta seriale COM0 e controllato se caratteri disponibili dalla porta. Se almeno un carattere è disponibile ne
viene eseguita lettura e successiva ritrasmissione.
Definizione variabili
Esempio ST
(* Here the COM0 port is opened in read/write. *)
Type Library
7.7.9 SysFGetOSpace, get output available space on file
Function XTarget_12_0
Codici di errore
In caso di errore la funzione torna con 0 e con SysGetLastError è possibile rilevare il codice di errore.
9967100 Terminale di I/O usato in task fast o slow.
9967990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue l'eco dei caratteri ricevuti dalla porta seriale COM0. Viene eseguita
apertura porta seriale COM0 e controllato se caratteri disponibili dalla porta. Se almeno un carattere è disponibile ne
viene eseguita lettura e successiva ritrasmissione.
Definizione variabili
Esempio ST
(* Here the COM0 port is opened in read/write. *)
Type Library
7.7.10 SysFGetIBfSize, get file Rx input buffer size
Function XTarget_12_0
Codici di errore
In caso di errore la funzione torna con 0 e con SysGetLastError è possibile rilevare il codice di errore.
9966100 Terminale di I/O usato in task fast o slow.
9966990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che ritorna la dimensione del buffer di input (Ricezione) della porta seriale COM2. Il
valore ritornato espresso in numero di caratteri (Bytes), è trasferito nella variabile Space.
Definizione variabili
Esempio LD
Type Library
7.7.11 SysFGetOBfSize, get file Tx output buffer size
Function XTarget_12_0
Codici di errore
In caso di errore la funzione torna con 0 e con SysGetLastError è possibile rilevare il codice di errore.
9965100 Terminale di I/O usato in task fast o slow.
9965990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che ritorna la dimensione del buffer di output (Trasmissione) della porta seriale
COM2. Il valore ritornato espresso in numero di caratteri (Bytes), è trasferito nella variabile Space.
Definizione variabili
Esempio LD
Type Library
7.7.12 SysFIBfClear, file input buffer clear
Function XTarget_07_0
Questa funzione elimina tutti i caratteri in lettura presenti sul flusso dati stream indicato dal
parametro File, precedentemente aperto dalla funzione Sysfopen.
La funzione ritorna FALSE in caso di errore.
Parametri funzione:
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione.
TRUE: Funzione eseguita correttamente.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9964100 Terminale di I/O usato in task fast o slow.
9964990 Non implementata nel simulatore.
Esempi
Se è attivo l'ingresso Di00M00 tutti i caratteri in ingresso dalla porta seriale saranno cancellati e l'uscita Do00M00
attivata.
Definizione variabili
Esempio ST
(* Here the COM0 port is opened in read/write. *)
Type Library
7.7.13 SysFOBfClear, file output buffer clear
Function XTarget_07_0
Questa funzione elimina tutti i caratteri in uscita presenti sul flusso dati stream indicato dal
parametro File, precedentemente aperto dalla funzione Sysfopen.
La funzione ritorna FALSE in caso di errore.
Parametri funzione:
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione.
TRUE: Funzione eseguita correttamente.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9963100 Terminale di I/O usato in task fast o slow.
9963990 Non implementata nel simulatore.
Esempi
Se è attivo l'ingresso Di00M00 tutti i caratteri in uscita dalla porta seriale saranno cancellati e l'uscita Do00M00 attivata.
Definizione variabili
Esempio ST
(* Here the COM0 port is opened in read/write. *)
Type Library
7.7.14 SysFOBfFlush, file output buffer flush
Function XTarget_07_0
Questa funzione forza l'uscita immediata dei caratteri presenti sul flusso dati stream indicato
dal parametro File, precedentemente aperto dalla funzione Sysfopen, sulla risorsa connessa.
La funzione ritorna FALSE in caso di errore.
Parametri funzione:
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione.
TRUE: Funzione eseguita correttamente.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9962100 Terminale di I/O usato in task fast o slow.
9962990 Non implementata nel simulatore.
Esempi
Se è attivo l'ingresso Di00M00 tutti i caratteri presenti nel buffer di uscita della porta seriale saranno trasmessi e l'uscita
Do00M00 attivata.
Definizione variabili
Esempio ST
(* Here the COM0 port is opened in read/write. *)
Type Library
7.7.15 SysVarfprintf, variable print to file
Function XTarget_07_0
Questa funzione esegue la stampa formattata di una variabile sullo stream collegato al
parametro File, precedentemente aperto dalla funzione Sysfopen.
La stringa Format specifica il formato con il quale stampare la variabile. Mentre in VarType
è indicato il tipo di variabile ed in VarAdd il suo indirizzo.
La funzione ritorna il numero di caratteri trasferiti nello stream, EOF in caso di errore.
Parametri funzione:
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Format (STRING[80]) Ha due tipi di argomenti, i caratteri ordinari che vengono copiati nello stream di uscita, e le
specifiche di conversione, contraddistinte dal simbolo percentuale (%) e da un carattere che
specifica il formato con il quale stampare la variabile definita.
VarType (USINT) Tipo variabile, come indicato nella tabella Variable types definition.
La funzione ritorna:
(INT)
Numero di caratteri trasferiti nello stream. EOF: Errore esecuzione.
Codici di errore
In caso di errore la funzione torna con EOF e con SysGetLastError è possibile rilevare il codice di errore.
9998010 Valore di File non definito.
9968100 Terminale di I/O usato in task fast o slow.
9998200 Tipo variabile non gestito, controllare VarType.
9998990 Non implementata nel simulatore.
Esempi
Su fronte attivazione ingresso Di00M00 viene incrementata la variabile Counter ed il suo valore inviato sulla porta
seriale COM0. Nella variabile NrOfChars viene caricato il numero di caratteri inviati in uscita sulla porta seriale.
Definizione variabili
IF (Di00M00) THEN
Counter:=Counter+1; (* Counter *)
NrOfChars:=SysVarfprintf(Fp, 'Counter:%04d$r$n', UDINT_TYPE, ADR(Counter));
END_IF;
END_IF;
END_IF;
Type Library
7.8.1 Sysremove, file remove
Function XTarget_07_0
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9961100 Funzione richiamata in task fast o slow.
9961150 Errore nella dichiarazione del nome file.
9961160 Directory non accessibile da utente “Admin”.
9961200 Errore nella cancellazione del file.
9961990 Non implementata nel simulatore.
Esempi
Sul fronte di attivazione dell'ingresso digitale Di00M00 viene eliminato il file File.txt presente nella directory Storage.
Definizione variabili
Esempio LD
Type Library
7.8.2 Sysrename, file rename
Function XTarget_07_0
Questa funzione esegue il cambiamento del nome di un file. In OldName occorre definire il
nome del file da rinominare specificando l'intero percorso (Esempio Storage/OldFile.txt), in
NewName occorre definire il nuovo nome del file specificando l'intero percorso (Esempio
Storage/NewFile.txt).
Se l'operazione di rinomina va a buon fine la funzione ritorna TRUE, in caso di errore viene
ritornato FALSE.
Parametri funzione:
OldName (STRING[32]) Nome del file da rinominare.
NewName (STRING[32]) Nuovo nome da dare al file.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione.
TRUE: Ok esecuzione.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9960100 Funzione richiamata in task fast o slow.
9960150 Errore nella dichiarazione OldName.
9960160 Directory file OldName non accessibile da utente “Admin”.
9960170 Errore nella dichiarazione NewName.
9960180 Directory file NewName non accessibile da utente “Admin”.
9960200 Errore nella rinominazione del file.
9960990 Non implementata nel simulatore.
Esempi
Sul fronte di attivazione dell'ingresso digitale Di00M00 viene rinominato il file OldFile.txt presente nella directory
Storage. Il file assumerà il nuovo nome di NewFile.txt.
Definizione variabili
Esempio LD
Type Library
7.8.3 Sysfilelength, file lengh
Function XTarget_07_0
Questa funzione ritorna la lunghezza in bytes di un file. In Name occorre definire il nome del file
di cui si vuole conoscere la lunghezza specificando l'intero percorso (Esempio Storage/File.txt).
Se il file indicato non è presente, la funzione ritorna -1.
Parametri funzione:
Name (STRING[32]) Nome del file di cui si vuole conoscere la lunghezza.
La funzione ritorna:
(DINT)
Lunghezza file (Bytes). EOF se file non presente.
Codici di errore
In caso di errore la funzione torna EOF e con SysGetLastError è possibile rilevare il codice di errore.
9959100 Funzione richiamata in task fast o slow.
9959990 Non implementata nel simulatore.
Esempi
Sul fronte di attivazione dell'ingresso digitale Di00M00 viene ritornata la lunghezza del file File.txt presente nella
directory Storage.
Definizione variabili
Esempio LD
Type Library
7.8.4 Sysfseek, file seek
Function XTarget_07_0
Questa funzione permette di cambiare l'indicatore di posizione dello stream collegato al parametro
File, precedentemente aperto dalla funzione Sysfopen.
Offset specifica il numero di bytes dall'origine dove andrebbe posizionato l'indicatore di posizione.
Origin specifica la posizione di origine rispetto alla quale spostare l'indicatore di posizione.
La funzione ritorna il valore attuale dell'indicatore di posizione. In caso di errore di posizionamento,
l'indicatore di posizione rimane inalterato e la funzione ritorna EOF.
Parametri funzione:
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Offset (DINT) Numero di bytes dall'origine dove posizionare l'indicatore di posizione
Origin (INT) Occorre specificare la posizione di origine, FSeek origin definition.
La funzione ritorna:
(DINT)
Valore attuale dell'indicatore di posizione. EOF se errore.
Codici di errore
In caso di errore la funzione torna EOF e con SysGetLastError è possibile rilevare il codice di errore.
9958100 Funzione richiamata in task fast o slow.
9958990 Non implementata nel simulatore.
Esempi
Sul fronte di attivazione dell'ingresso Di00M00 viene posizionato l'indicatore di posizione all'inizio del file File.txt
presente nella directory Storage.
Definizione variabili
Esempio LD
Type Library
7.8.5 SysDirListing, directory listing
FB XTarget_10_0
Questo blocco funzione esegue il listing di tutti i files contenuti in una directory, occorre
passare il nome della directory di cui eseguire il listing in PathName. Attivando l'ingresso Init
si inizializza la lista dei files e viene ritornato il primo file trovato. Ad ogni comando Next si
esegue la ricerca di un nuovo file nella directory selezionata.
Se file trovato l'uscita Found si attiva per un loop e ne viene rtornato il nome in FileName.
Terminato l'elenco di tutti i files presenti nella directory su comando Next non viene più
attivata l'uscita Found e FileName è abblencato. L'uscita IsDir si attiva se il nome del file
ritornato è quello di una sottodirectory.
Init (BOOL) Alla attivazione viene inizializzato l'indice dei files nella directory indicata e viene ritornato il
nome del primo file trovato.
Next (BOOL) Alla attivazione viene ritornato il nome del file puntato dall'indice nella directory indicata.
L'indice si incrementa puntando il successivo file.
PathName (STING[32]) Definizione directory di cui eseguire il listing. E' possibile definire anche eventuale filtro di
ricerca (Esempio Storage\*.log).
Found (BOOL) Si attiva per un loop se su comando Init o Next è stato trovato un nuovo file da listare.
Fault (BOOL) Si attiva per un loop se errore esecuzione.
IsDir (BOOL) Attiva se il nome di file ritornato appartiene ad una sottodirectory.
Size (UDINT) Dimensione in bytes del file.
Time (UDINT) Data ultima modifica del file in Epoch time (UTC).
FileName (STING[16]) Nome del file comprensivo di eventuale estensione.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9952050 Errore allocazione blocco funzione.
9952060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9952070 Errore versione blocco funzione.
9952100 FB richiamata in task fast o slow.
9952200 Errore esecuzione directory listing.
9952990 Non implementata nel simulatore.
Esempi
Sul fronte di attivazione dell'ingresso digitale Di00M00 viene inizializzato il puntatore ai files presenti nella directory
Storage. Ad ogni attivazione dell'ingresso digitale Di01M00 viene ritornato il nome del file presente nella directory. Se
file presente si attiva per un loop Ok, se si tratta di una sottodirectory si attiva per un loop Dir.
Definizione variabili
Esempio LD
Type Library
7.9.1 SysSerialPort, manage serial port
FB XTarget_12_0
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9946050 Errore allocazione blocco funzione.
9946060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9946070 Errore versione blocco funzione.
9946100 Dimensione buffers o flush time errati.
9946110 Errore impostazione porta seriale.
9946120 Errore baudrate.
9946121 Errore parity.
9946122 Errore data bits.
9946123 Errore stop bits
9946124 Errore DTR
9946140 Errore definizione porta 'COMx'
9946990 Non implementata nel simulatore.
Esempi
Nell'esempio è attivato un server in ascolto sulla porta seriale. Connettendosi in seriale alla COM0 inviando un carattere
se ne riceve l'echo.
Definizione variabili
IF (SysFirstLoop) THEN
Serial.COM:=ADR('COM0'); (* COM port definition *)
Serial.Baudrate:=19200; (* Baudrate *)
Serial.Parity:='E'; (* Parity *)
Serial.DataBits:=8; (* Data bits *)
Serial.StopBits:=1; (* Stop bits *)
Serial.DTRManagement:=DTR_AUTO_WO_TIMES; (* DTR management *)
Serial.DTRComplement:=FALSE; (* DTR complement *)
Serial.EchoFlush:=FALSE; (* Received echo flush *)
Serial.DTROnTime:=0; (* DTR On time delay (mS) *)
Serial.DTROffTime:=0; (* DTR Off time delay (mS) *)
Serial.FlushTm:=0; (* Flush time (mS) *)
Serial.RxSize:=0; (* Rx buffer size *)
Serial.TxSize:=0; (* Tx buffer size *)
END_IF;
IF (SysFIsOpen(Fp)) THEN
IF (TO_BOOL(SysGetIChars(Fp)) AND TO_BOOL(SysGetOSpace(Fp))) THEN
i:=Sysfputc(Sysfgetc(Fp), Fp); (* Character echo *)
END_IF;
END_IF;
Type Library
7.9.2 SysGetSerialMode, get serial mode
Function XTarget_07_0
Questa funzione ritorna il modo di comunicazione impostato sulla porta seriale connessa
al parametro File, precedentemente aperto dalla funzione Sysfopen.
Nel parametro Mode occorre definire l'indirizzo della struttura SYSSERIALMODE in cui
dovrà essere trasferito il modo seriale attualmente impostato sulla porta. La funzione
ritorna FALSE in caso di errore.
Parametri funzione:
Mode (@SYSSERIALMODE) Indirizzo struttura SYSSERIALMODE in cui trasferire il modo letto.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione. TRUE: Funzione eseguita correttamente.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9995010 Valore di File non definito.
9995020 Indirizzo struttura SYSSERIALMODE non corretto, verificare Mode.
9995100 ÷ 1 Errore esecuzione funzione.
9995990 Non implementata nel simulatore.
Esempi
Su fronte attivazione ingresso Di00M00 viene salvato il modo impostato sulla porta seriale COM0 nella variabile Sm e
viene attivata l'uscita Do00M00.
Definizione variabili
IF (Di00M00) THEN
Do00M00:=SysGetSerialMode(ADR(Sm), Fp);
END_IF;
END_IF;
END_IF;
Type Library
7.9.3 SysGetSerialCTS, get serial CTS signal status
Function XTarget_07_0
Questa funzione ritorna lo stato del segnale CTS della porta seriale connessa al parametro
File, precedentemente aperto dalla funzione Sysfopen.
Parametri funzione:
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(BOOL)
FALSE: Segnale CTS non attivo. TRUE: Segnale CTS attivo.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9993010 Valore di File non definito.
9993990 Non implementata nel simulatore.
Esempi
Lo stato del segnale CTS della porta seriale COM0 è appoggiato sull'uscita Do01M00.
Definizione variabili
Esempio LD
Type Library
7.9.4 SysSetSerialDTR, set DTR signal status
Function XTarget_07_0
Questa funzione imposta lo stato del segnale DTR della porta seriale connessa al
parametro File, precedentemente aperto dalla funzione Sysfopen.
Per poter gestire il segnale DTR occorre avere definito sulla porta seriale il valore
DTR_OFF nella variabile DTRManagement nella struttura SYSSERIALMODE.
Parametri funzione:
Status (BOOL) Stato segnale DTR su porta seriale
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione. TRUE: Ok esecuzione.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9992010 Valore di File non definito.
9992990 Non implementata nel simulatore.
Esempi
Lo stato dell'ingresso Di00M00 viene trasferito sul segnale DTR della porta seriale COM0.
Definizione variabili
Esempio LD
Type Library
7.10.1 SysCANSetMode, set the CAN controller mode
Function XTarget_07_0
Questa funzione imposta il modo sul controller CAN. E' possibile definire il valore di bit
rate, il filtro e la maschera di accettazione pacchetti.
La funzione ritorna TRUE se eseguita correttamente, FALSE se errore.
Parametri funzione:
BitRate (USINT) Valore definizione bit rate CAN bus, CAN bit rate definition.
Filter (UDINT) Valore di filtro pacchetti CAN.
Mask (UDINT) Valore di maschera filtro pacchetti CAN.
La funzione ritorna:
(BOOL)
TRUE: Eseguita correttamente.
FALSE: In caso di errore esecuzione, esempio parametri errati.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9957005 Funzione non supportata.
9957990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue l'impostazione del controller CAN con bit rate a 125 Kbit. Tutti i
pacchetti in arrivo sono ricevuti dal controller.
Definizione variabili
Esempio LD
Type Library
7.10.2 SysIsCANRxTxAv, checks if CAN Rx or Tx is available
Function XTarget_07_0
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9956005 Funzione non supportata.
9956990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue il controllo se un messaggio CAN è stato ricevuto, ne esegue la
ricezione ed invia in console di spionaggio il messaggio ricevuto.
Definizione variabili
IF (SysFirstLoop) THEN
i:=SysCANSetMode(CAN_250KBIT, 16#00000000, 16#00000000);
END_IF;
(* Read a CAN message (No filters so all received messages are read). *)
Type Library
7.10.3 SysCANRxMsg, receives a CAN message
Function XTarget_07_0
Questa funzione riceve un messaggio CAN e lo trasferisce nella variabile il cui indirizzo è
definito in Msg. E' possibile definire un Mask ed un ID per ricevere i soli messaggi CAN
desiderati.
La funzione ricerca nello stack dei messaggi un messaggio il cui ID posto in AND con Mask
coincide con ID messo in AND con Mask. La funzione ritorna TRUE se messaggio ricevuto.
Parametri funzione:
Mask (UDINT) Codice maschera ID messaggio.
ID (UDINT) ID check ID messaggio.
Msg (@SYSCANMESSAGE) Indirizzo buffer messaggio ricevuto.
La funzione ritorna:
(BOOL)
TRUE: Messaggio ricevuto.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9955005 Funzione non supportata.
9955990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue il controllo se un messaggio CAN è stato ricevuto, ne esegue la
ricezione ed invia in console di spionaggio il messaggio ricevuto.
Definizione variabili
IF (SysFirstLoop) THEN
i:=SysCANSetMode(CAN_250KBIT, 16#00000000, 16#00000000);
END_IF;
(* Read a CAN message (No filters so all received messages are read). *)
Type Library
7.10.4 SysCANTxMsg, transmit a CAN message
Function XTarget_07_0
Questa funzione trasmette un messaggio CAN, occorre creare il messaggio e poi passarne alla
funzione l'indirizzo in Msg.
La funzione ritorna TRUE se messaggio trasmesso.
Parametri funzione:
Msg (@SYSCANMESSAGE) Indirizzo buffer messaggio da trasmettere.
La funzione ritorna:
(BOOL)
TRUE: Messaggio trasmesso.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9954005 Funzione non supportata.
9954990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue la trasmissione di un messaggio CAN.
Definizione variabili
Esempio ST
(* Here check if there is a space in Tx buffer and send a CAN message. *)
IF (SysIsCANRxTxAv(TRUE)) THEN
CANMsg.RmReq:=FALSE; (* eFALSE:Data frame, eTRUE:Remote request *)
CANMsg.Length:=2; (* Data length *)
CANMsg.MsgID:=16#00000000; (* Message ID (FF:Bit 31) (11 or 29 Bit) *)
CANMsg.Data[0]:=16#01; (* Message data *)
CANMsg.Data[1]:=16#00; (* Message data *)
TxOk:=SysCANTxMsg(ADR(CANMsg)); (* Transmission Ok *)
END_IF;
Questa funzione ritorna la lunghezza (Espressa in numero di caratteri) della stringa definita in
Str.
Parametri funzione:
Str (@USINT) Pointer alla stringa di cui calcolare lunghezza.
La funzione ritorna:
(UDINT)
Numero di caratteri della stringa.
Esempi
Viene calcolata la lunghezza della stringa 'Hello!' ed il numero di caratteri che compongono la stringa viene trasferito
nella variabile Length. Il risultato del calcolo è 6.
Definizione variabili
Esempio LD
Type Library
7.11.2 SysStrFind, string find
Function XTarget_12_0
Questa funzione cerca la stringa Needle in Haystack , la ricerca è effettuata in base alla
definizione di Mode.
Se la stringa Needle è trovata nella stringa Haystack, viene ritornato il puntatore
all'indirizzo di Haystack dove si trova. In base alla definizione di Mode può essere
ritornato l'indirizzo del primo carattere coincidente oppure l'indirizzo del carattere
successivo all'ultimo carattere coincidente.
Se stringa non trovata o errore viene ritornato NULL.
Parametri funzione:
Haystack (@USINT) Pointer alla stringa dove effettuare la ricerca.
Needle (@USINT) Pointer alla stringa da ricercare.
Mode (USINT) Definizione modo in cui effettuare la ricerca (Vedi tabella).
La funzione ritorna:
(@USINT)
Posizione dove la stringa Needle è stata trovata. NULL se non trovata.
Codici di errore
In caso di errore e con SysGetLastError è possibile rilevare il codice di errore.
9926100 Pointer non valido.
9926110 Dimensione stringa Needle non valida.
9926115 Valore di Mode non supportato.
Esempi
Viene eseguita la ricerca della stringa 'World' nella stringa presente in Str 'HelloWorld!, helloworld!' con diversi modi
di ricerca. Dal pointer ritornato viene sottratto l'indirizzo di allocazione di Str in modo da ottenere la posizione relativa
della stringa trovata nella stringa di ricerca. Vediamo i vari risultati.
Ptr[0]: 5, La ricerca parte dall'inizio e ritorna la posizione di inizio della prima occorrenza.
Ptr[1]: 10, La ricerca parte dall'inizio e ritorna la posizione successiva alla fine della prima occorrenza.
Ptr[2]: 18, La ricerca parte dalla fine e ritorna la posizione di inizio della prima occorrenza.
Ptr[3]: 23, La ricerca parte dalla fine e ritorna la posizione successiva alla fine della prima occorrenza.
Definizione variabili
Type Library
7.11.3 SysMemFind, memory find
Function XTarget_12_0
Questa funzione cerca il pattern di byte definito in Needle nel buffer di memoria
definita in Haystack , la ricerca è effettuata in base alla definizione di Mode.
Se il pattern Needle è trovato nel buffer di memoria Haystack, viene ritornato il
puntatore all'indirizzo di Haystack dove si trova. In base alla definizione di Mode può
essere ritornato l'indirizzo del primo byte coincidente oppure l'indirizzo del byte
successivo all'ultimo byte coincidente.
Se pattern non trovato o errore viene ritornato NULL.
Parametri funzione:
Haystack (@USINT) Pointer al buffer di memoria dove effettuare la ricerca.
HSize (UDINT) Dimensione del buffer di memoria
Needle (@USINT) Pointer al pattern da ricercare.
HSize (UDINT) Dimensione del pattern da ricercare.
Mode (USINT) Definizione modo in cui effettuare la ricerca (Vedi tabella).
La funzione ritorna:
(@USINT)
Posizione dove il pattern Needle è stata trovato. NULL se non trovato.
Codici di errore
In caso di errore e con SysGetLastError è possibile rilevare il codice di errore.
9925100 Pointer non valido.
9925105 Valore impostato in HSize non valido.
9925110 Valore impostato in NSize non valido.
9925115 Valore di Mode non supportato.
Esempi
Viene eseguita la ricerca del pattern 16#04, 16#05, 16#06 nel buffer di memoria definito in Mem con diversi modi di
ricerca. Dal pointer ritornato viene sottratto l'indirizzo di allocazione di Mem in modo da ottenere la posizione relativa
del pattern nel buffer di memoria. Vediamo i vari risultati.
Ptr[0]: 3, La ricerca parte dall'inizio e ritorna la posizione di inizio della prima occorrenza.
Ptr[1]: 6, La ricerca parte dall'inizio e ritorna la posizione successiva alla fine della prima occorrenza.
Ptr[2]: 3, La ricerca parte dalla fine e ritorna la posizione di inizio della prima occorrenza.
Ptr[3]: 6, La ricerca parte dalla fine e ritorna la posizione successiva alla fine della prima occorrenza.
Definizione variabili
Esempio ST
Ptr[0]:=SysMemFind(ADR(Mem), SIZEOF(Mem), ADR('$04$05$06'), 3, FIND_DEFAULT)-ADR(Mem);
Ptr[1]:=SysMemFind(ADR(Mem), SIZEOF(Mem), ADR('$04$05$06'), 3, FIND_GET_END)-ADR(Mem);
Ptr[2]:=SysMemFind(ADR(Mem), SIZEOF(Mem), ADR('$04$05$06'), 3, FIND_FROM_END)-ADR(Mem);
Ptr[3]:=SysMemFind(ADR(Mem), SIZEOF(Mem), ADR('$04$05$06'), 3, FIND_FROM_END OR FIND_GET_END)-ADR(Mem);
Type Library
7.11.4 SysVarsnprintf, variable print to string
Function XTarget_08_0
Codici di errore
In caso di errore la funzione torna con EOF e con SysGetLastError è possibile rilevare il codice di errore.
9997100 Tipo variabile non gestito, controllare VarType.
9997200 Il valore di Size limita la formattazione della stringa in uscita.
Esempi
Su fronte attivazione ingresso Di00M00 viene incrementata la variabile Counter e la stampa del suo valore trasferita
nell'array StringOut. Il valore presente in StringOut viene poi inviato sulla porta seriale COM0. Nella variabile
NrOfChars viene caricato il numero di caratteri trasferiti in StringOut ed inviati in uscita sulla porta seriale.
Definizione variabili
IF (Di00M00) THEN
Counter:=Counter+1; (* Counter *)
NrOfChars:=SysVarsnprintf(ADR(StringOut), 32, 'Counter:%04d$r$n', UDINT_TYPE, ADR(Counter));
In questo esempio viene eseguito il merge tra le stampe del valore di due variabili. Eseguire il merge può essere molto
utile per avere un unica stringa contenente la stampa del valore di piu variabili.
Mettendo in debug la variabile Result vedremo la stringa Var[0]:12 Var[1]:34. Avendo bloccato la stampa a 12 caratteri
il valore di Var[0] sarà stampato correttamente fino ad un massimo di 4 cifre (7 caratteri stringa, 4 caratteri valore più
terminatore stringa '\0'). Per valori di Var[0] superiori a 9999 non saranno più stampate le cifre meno significative.
Il valore di Var[1] sarà stampato immediatamente dopo il valore di Var[0]. Da notare l'offset decrementato di 1 per
sovrascrivere il terminatore stringa '\0'. Per garantire la stampa di un massimo di 4 anche per Var[1] è stato definito un
Size di 13, la stringa di testo inizia infatti con un carattere di space per separarla dalla stampa del valore della variabile
precedente.
Definizione variabili
Esempio ST
(* -------------------------------------------------------------------------- *)
(* EXECUTE A VARIABLES PRINT MERGE *)
(* -------------------------------------------------------------------------- *)
(* Print the variable values, merging them into a single string. *)
(* [End of file] *)
Type Library
7.11.5 SysLWVarsnprintf, variable print to string with append
Function XTarget_12_0
Codici di errore
In caso di errore la funzione torna con EOF e con SysGetLastError è possibile rilevare il codice di errore.
9993100 Tipo variabile non gestito, controllare VarType.
9932110 Lunghezza stringa è maggiore di Size (Impossibile eseguire la funzione).
9993200 Il valore di Size limita la formattazione della stringa in uscita.
Esempi
Vedere esempi della funzione SysVarsnprintf.
Type Library
7.11.6 SysVarsscanf, extracts values from string
Function XTarget_08_0
Questa funzione legge la stringa String e ne interpreta il contenuto basandosi sul parametro
Format.
La stringa Format specifica il formato con il quale interpretare la variabile, in VarType è
indicato il tipo di variabile ed in VarAdd il suo indirizzo.
La funzione ritorna TRUE se valore variabile trovato, in caso contrario FALSE.
Parametri funzione:
String (@USINT) Pointer alla stringa da leggere.
Format (STRING[80]) Ha due tipi di argomenti, i caratteri ordinari che vengono controllati nella variabile String da leggere
e le specifiche di conversione, contraddistinte dal simbolo percentuale (%) e da un carattere che
specifica il formato con il quale stampare la variabile definita. Vedi capitolo definizione.
VarType (USINT) Tipo variabile, come indicato nella tabella Variable types definition.
VarAdd (UDINT) Indirizzo variabile.
La funzione ritorna:
(BOOL)
TRUE: Valore variabile acquisito.
Codici di errore
In caso di errore la funzione torna con FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9999100 Tipo variabile non gestito, controllare VarType.
9999110 Pointer a variabile VarAdd errato.
Esempi
E' riportato un programma che esegue la lettura di una stringa InputString valorizzata con il testo Value:123. Su fronte
attivazione ingresso Di00M00 sono eseguite tre diverse funzioni SysVarsscanf tutte sulla stringa InputString ma con
diverse definizioni di Format. Le prime due hanno esito positivo e le variabili Variable[0] e Variable[1] saranno
valorizzate con il valore 123. La terza avrà esito negativo, la variabile Variable[2] sarà azzerata.
Definizione variabili
IF (Di00M00) THEN
Result[0]:=SysVarsscanf(ADR(InputString), 'Value:%d', UDINT_TYPE, ADR(Variable[0]));
Result[1]:=SysVarsscanf(ADR(InputString)+6, '%d', UDINT_TYPE, ADR(Variable[1]));
Result[2]:=SysVarsscanf(ADR(InputString), '%d', UDINT_TYPE, ADR(Variable[2]));
END_IF;
END_IF;
Questa funzione esegue l'acquisizione di informazioni dai moduli periferici. Viene trasferita nella
variabile stringa il cui indirizzo è passato in Info, l'informazione indicata da InfoID relativa al
modulo indicato in Module.
La funzione ritorna TRUE se correttamente eseguita, in caso contrario FALSE.
Parametri funzione:
Module (USINT) Occorre specificare l'indirizzo di modulo da cui eseguire l'acquisizione (Range da 0 a 15). Il valore 0
indica il primo modulo di estensione, 1 il secondo e così di seguito.
InfoID (USINT) Occorre specificare l'ID della informazione richiesta.
Value Description
0 Ritorna codice prodotto
Codici di errore
In caso di errore la funzione torna con FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9990100 Il modulo indirizzato in Module non è presente.
9990110 Il valore di InfoID non è corretto.
9990200 L'informazione richiesta non è supportata dal modulo.
9990210 Errore durante la richiesta della informazione dal modulo.
9990990 Non implementata nel simulatore.
Esempi
E' riportato un programma che esegue la lettura del codice prodotto dal modulo di estensione con indirizzo 0. Il codice
ritornato è trasferito nella variabile Info. Il ritorno della funzione è trasferito sull'uscita Do01M00.
Definizione variabili
Esempio LD
Type Library
7.12.2 SysGetPhrDI, get peripheral digital input
FB XTarget_07_0
Questo blocco funzione esegue l'acquisizione degli ingressi digitali dai moduli periferici. Il blocco
funzione ritorna lo stato degli ingressi digitali dal modulo indicato in Address in base al comando di
Mode definito.
Per acquisire gli ingressi digitali presenti sul modulo CPU occorre definire Address 255 e Mode
DI_8_LL.
Address (USINT) Occorre specificare l'indirizzo di modulo da cui eseguire l'acquisizione degli ingressi digitali (Range
da 0 a 255). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. L'indirizzo
255 indica il modulo CPU.
Mode (USINT) Occorre specificare il modo di acquisizione ingressi digitali, Digital input mode.
Done (BOOL) Dato acquisito, viene attivato se acquisizione ingressi digitali terminata.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
Value (UDINT) Ritorna lo stato degli ingressi digitali acquisiti.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9985050 Errore allocazione blocco funzione.
9985070 Errore versione blocco funzione.
9985100 Il modulo indirizzato in Address non è presente.
9985110~24 Il modo acquisizione definito in Mode non è corretto.
9985200~13 Errore durante l'esecuzione della lettura ingressi dal modulo periferico.
Esempi
Viene acquisito lo stato degli 8 ingressi bassi (Da Inp 0 a Inp 7) del modulo di con indirizzo 0. Se dato valido viene
attivata la variabile FBDone se errore di acquisizione viene attivata la variabile FBFault. Il valore acquisito nel range da
0x00 a 0xFF è trasferito nella variabile InpValue.
Definizione variabili
LD 0
ST FBData.Address
LD DI_8_LL
ST FBData.Mode
CAL FBData
LD FBData.Value
ST InpValue
Questo esempio è una evoluzione dell'esempio precedente. Utilizzando il blocco funzione ByteToBit lo stato degli 8
ingressi bassi (Da Inp 0 a Inp 7) del modulo con indirizzo 0, è appoggiato su di un array di BOOL.
Definizione variabili
Type Library
7.12.3 SysSetPhrDO, set peripheral digital output
FB XTarget_11_0
Questo blocco funzione esegue impostazione delle uscite digitali sui moduli periferici indirizzati con
Address ed in base al comando di Mode definito.
Per non perturbare la gestione delle uscite logiche eseguita dall'immagine di processo, in Mask è
possibile definire su quali output si desidera operare. In pratica l'FB opererà solo sugli output il cui
relativo bit di mask è attivo.
Per gestire le uscite digitali presenti sul modulo CPU occorre definire Address 255 e Mode
DO_8_LL.
Address (USINT) Occorre specificare l'indirizzo del modulo su cui eseguire l'impostazione delle uscite digitali (Range
da 0 a 255). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. L'indirizzo
255 indica il modulo CPU.
Mode (USINT) Occorre specificare il modo di gestione uscite digitali, Digital output mode.
Value (UDINT) Impostare il valore da trasferire sulle uscite digitali.
Mask (UDINT) Maschera outputs da gestire.
Done (BOOL) Dato settato. Viene attivato per un loop al termine del settaggio delle uscite digitali.
Fault (BOOL) Errore. Viene attivato in caso di errore nella sequenza di settaggio.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9984050 Errore allocazione blocco funzione.
9984060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9984070 Errore versione blocco funzione.
9984100 Il modulo indirizzato in Address non è presente.
9984110~8 Il modo gestione definito in Mode non è corretto.
9984200~6 Errore durante l'esecuzione gestione uscite digitali sul modulo periferico.
Esempi
Viene trasferito il valore della variabile OutValue sulla uscita Out 0 del modulo con indirizzo 0.
Definizione variabili
LD 0
ST FBData.Address
LD DO_8_LL
ST FBData.Mode
LD OutValue
LD FBData.Value
LD 16#00000001
LD FBData.Mask
CAL FBData
Type Library
7.12.4 SysGetAnInp, get analog input
FB XTarget_07_0
Questo blocco funzione esegue l'acquisizione dell'ingresso analogico dal modulo di acquisizione.
Il blocco funzione gestisce vari modi di acquisizione in funzione del modulo analogico a cui fa
riferimento.
Per acquisire gli ingressi digitali presenti sul modulo CPU occorre definire Address 255 e Mode
AD_VOLT_0_10_COMMON.
Address (USINT) Occorre specificare l'indirizzo di modulo da cui eseguire l'acquisizione degli ingressi analogici
(Range da 0 a 255). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito.
L'indirizzo 255 indica il modulo CPU.
Channel (USINT) Occorre specificare l'indirizzo del canale sul modulo (Range da 0x00 a 0x0F). Se viene settato un
indirizzo di canale non presente, si interrompe l'esecuzione e viene settato il bit di Fault.
Mode (USINT) Occorre specificare il modo di acquisizione analogica, Analog to digital mode.
Done (BOOL) Dato analogico acquisito, viene attivato al termine della acquisizione analogica.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
Value (REAL) Ritorna il valore di acquisizione espresso nella unità definita dal modo di acquisizione. Potrebbe
essere un valore NaN (Not A Number) ad indicare un problema nell'acquisizione, tipicamente
sensore rotto.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9983050 Errore allocazione blocco funzione.
9983060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9983070 Errore versione blocco funzione.
9983080 Impossibile inizializzare il modulo.
9983100 Il modulo indirizzato in Address non è presente.
9983110~1 Il modulo indirizzato non supporta i comandi acquisizione analogica.
9983150 Il valore ritornato dal modulo analogico non è corretto.
9983200 Il modo di acquisizione definito in Mode non è gestito dal modulo.
9983210 Errore nella acquisizione analogica dal modulo.
9983300 Il canale definito in Channel non è gestito dal modulo.
Esempi
Viene eseguita l'acquisizione analogica dal canale 0 del modulo 0 in modo 0-10 Volt. Se dato valido viene attivata
l'uscita digitale Do00M00 se errore di conversione viene attivata l'uscita digitale Do01M00. Il dato analogico acquisito
nel range da 0.000 a 9.999 è trasferito nella variabile AnaInp.
Definizione variabili
LD 0
ST FBData.Address (* Set module address *)
LD 0
ST FBData.Channel (* Set channel *)
LD AD_VOLT_0_10_COMMON
ST FBData.Mode (* Set acquisition mode *)
LD FBData.Done
ST Do00M00 (* The output is active if data is acquired *)
LD FBData.Fault
ST Do01M00 (* The output is active if execution fault *)
LD FBData.Value
ST AnaInp (* Store the acquired value *)
Type Library
7.12.5 SysSetAnOut, set analog output
FB XTarget_07_0
Questo blocco funzione esegue il set del valore sull'uscita analogica sul modulo di uscita. Il
blocco funzione gestisce vari modi di uscita in funzione del modulo analogico a cui fa riferimento.
Address (USINT) Occorre specificare l'indirizzo del modulo su cui settare il valore analogico (Range da 0x00 a 0x0F).
Il valore 0x00 indica il primo modulo di estensione, 0x01 il secondo e così di seguito.
Channel (USINT) Occorre specificare l'indirizzo del canale sul modulo (Range da 0x00 a 0x0F). Se viene settato un
indirizzo di canale non presente, si interrompe l'esecuzione e viene settato il bit di Fault.
Mode (USINT) Occorre specificare il modo di gestione uscita analogica, Digital to analog mode.
Value (REAL) Occorre specificare il valore di uscita espresso nella unità definita dal modo di gestione.
Done (BOOL) Dato settato. Viene attivato per un loop al termine del settaggio dell'uscita analogica.
Fault (BOOL) Errore. Viene attivato in caso di errore nella sequenza di settaggio.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9982050 Errore allocazione blocco funzione.
9982060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9982070 Errore versione blocco funzione.
9982080 Impossibile inizializzare il modulo.
9982100 Il modulo indirizzato in Address non è presente.
9982110~1 Il modulo indirizzato non supporta i comandi uscita analogica.
9982150 Il valore da impostare sul modulo analogico non è corretto.
9982200 Il modo di gestione definito in Mode non è gestito dal modulo.
9982210 Errore nella gestione uscita analogica sul modulo.
Esempi
Viene eseguita l'uscita analogica dal canale 0 del modulo 0 in modo 0-10 Volt. Se dato valido viene attivata l'uscita
digitale Do00M00 se errore di conversione viene attivata l'uscita digitale Do01M00. Il dato analogico da impostare in
uscita nel range da 0.000 a 9.999 è presente nella variabile AnaOut.
Definizione variabili
LD 0
ST FBData.Address (* Set module address *)
LD 0
ST FBData.Channel (* Set channel *)
LD DA_VOLT_0_10
ST FBData.Mode (* Set management mode *)
LD AnaOut
ST FBData.Value (* Store the output value *)
LD FBData.Done
ST Do00M00 (* The output is active if data is set *)
LD FBData.Fault
ST Do01M00 (* The output is active if execution fault *)
Type Library
7.12.6 SysGetCounter, get counter
FB XTarget_07_0
Questo blocco funzione esegue la lettura di un contatore. Il blocco funzione può essere utilizzato per
acquisire il valore del contatore presente sul modulo CPU SlimLine e dai moduli che gestiscono la
funzione contatore.
E' prevista la gestione del reset valore di conteggio e della inversione conteggio. In base alla
definizione di Mode è possibile gestire conteggio su fronte positivo, negativo o su entrambi i fronti
dell'ingresso clock del contatore. Se il modulo che gestisce il contatore lo prevede è possibile anche
definire comandi hardware (Ingressi logici) di reset conteggio e di inversione conteggio.
Address (USINT) Occorre specificare l'indirizzo di modulo da cui eseguire l'acquisizione counter (Range da 0 a 255). Il
valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito.
L'indirizzo 255 indica il modulo CPU.
Se viene settato un indirizzo di modulo non presente, si interrompe l'esecuzione e viene settato il bit
di Fault.
Channel (USINT) Occorre specificare l'indirizzo del canale sul modulo (Range da 0 a 15).
Se viene settato un indirizzo di canale non presente, si interrompe l'esecuzione e viene settato il bit
di Fault.
Mode (UDINT) Modo acquisizione, espresso su 32 bit secondo lo schema riportato.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Se viene settato un valore non corretto, si interrompe l'esecuzione e viene settato il bit di Fault.
RCount (BOOL) Reverse counting, attivando questo ingresso Value viene decrementato ad ogni variazione di
conteggio.
Reset (BOOL) Attivando questo ingresso si ha il reset del valore di conteggio Value.
Done (BOOL) Dato counter acquisito, viene attivato per un loop al termine della acquisizione counter.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
Value (UDINT) Valore contatore.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9981050 Errore allocazione blocco funzione.
9981060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9981070 Errore versione blocco funzione.
9981080 Impossibile inizializzare il modulo.
9981100 Il modulo indirizzato in Address non è presente.
9981110 Il canale definito in Channel non è gestito.
9981200~4 Il modo di gestione definito in Mode non è gestito dal modulo.
9981300~2 Errore nella gestione lettura counter dal modulo.
9981990 Non implementata nel simulatore.
Esempi
Viene eseguita l'acquisizione del contatore dal modulo CPU di SlimLine, viene eseguito il conteggio su entrambi i fronti
dell'ingresso di clock. Il valore di conteggio è trasferito nella variabile Value. Su fine conversione viene attivata l'uscita
digitale Do01M00 se errore di conversione viene attivata l'uscita digitale Do02M00.
Attivando l'ingresso Di00M00 viene eseguita l'inversione del conteggio ad ogni variazione dell'ingresso di clock viene
decrementato il valore di Value in uscita.
Attivando l'ingresso Di01M00 viene eseguito il reset del conteggio il valore di Value in uscita è resettato.
Definizione variabili
Esempio LD
Type Library
7.12.7 SysGetEncoder, get encoder input
FB XTarget_07_0
Questo blocco funzione esegue la lettura di un canale encoder. Il blocco funzione può essere
utilizzato solo su sistemi che hanno moduli in grado di acquisire encoders incrementali.
E' prevista la gestione della tacca di zero e la possibilità di acquisire valori di quota all'interno di un
segnale logico di gate.
Address (USINT) Occorre specificare l'indirizzo di modulo da cui eseguire l'acquisizione encoder (Range da 0 a 15). Il
valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito.
Se viene settato un indirizzo di modulo non presente, si interrompe l'esecuzione e viene settato il bit
di Fault.
Channel (USINT) Occorre specificare l'indirizzo del canale sul modulo (Range da 0 a 15).
Se viene settato un indirizzo di canale non presente, si interrompe l'esecuzione e viene settato il bit
di Fault.
RCount (BOOL) Reverse counting, attivando questo ingresso si inverte l'incremento di quota EQuote in funzione
della direzione di rotazione encoder.
ZeroEn (BOOL) Attivando questo ingresso si ha il reset della quota EQuote al passaggio della tacca di zero encoder.
GateEn (BOOL) Attivando questo ingresso sul fronte di variazione dell'ingresso di Gate viene trasferito il valore di
EQuote in GQuote.
RGate (BOOL) Attivando questo ingresso viene gestito il fronte di disattivazione dell'ingresso Gate.
Done (BOOL) Dato encoder acquisito, viene attivato per un loop al termine della acquisizione encoder.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
ZeroD (BOOL) Tacca di zero encoder acquisita, viene settata su acquisizione tacca di zero encoder, si resetta
disattivando l'ingresso ZeroEn.
GateD (BOOL) Segnale di Gate acquisito, viene attivato per un loop alla acquisizione del segnale Gate.
GQuote (UINT) Quota di gate, valore di quota encoder EQuote memorizzata sul fronte selezionato del segnale
Gate.
EQuote (UINT) Quota encoder, valore di quota encoder, al raggiungimento del valore minimo o massimo viene
eseguito il roll over.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9980050 Errore allocazione blocco funzione.
9980060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9980070 Errore versione blocco funzione.
9980100 Il modulo indirizzato in Address non è presente.
9980110~2 Il modulo indirizzato non supporta i comandi acquisizione encoder.
9980200 Il modo di gestione definito in Mode non è gestito dal modulo.
9980210~2 Errore nella gestione lettura encoder dal modulo.
9980990 Non implementata nel simulatore.
Esempi
Viene eseguita l'acquisizione dell'ingresso encoder dal canale 0 del modulo 0, il valore di quota encoder è trasferito
nella variabile EncoderQte. Su fine conversione viene attivata l'uscita digitale Do00M00 se errore di conversione viene
attivata l'uscita digitale Do01M00.
Definizione variabili
LD 0
ST FBData.Address (* Set module address *)
LD 0
ST FBData.Channel (* Set channel *)
LD FALSE
ST FBData.RCount (* Reverse counting *)
ST FBData.GateEn (* Gate enable *)
ST FBData.RGate (* Reverse gate *)
LD FBData.Done
ST Do00M00 (* The output is active if data is acquired *)
LD FBData.Fault
ST Do01M00 (* The output is active if execution fault *)
LD FBData.GQuote
ST GateQte (* Gate quote *)
LD FBData.EQuote
ST EncoderQte (* Encoder quote *)
IF (SysFirstLoop) THEN
Encoder.Address:=1; (* Module address *)
Encoder.Channel:=0; (* Module channel *)
Encoder.RCount:=FALSE; (* Reverse count *)
Encoder.ZeroEn:=FALSE; (* Zero pulse enable *)
Encoder.GateEn:=FALSE; (* Gate enable *)
Encoder.RGate:=FALSE; (* Reset gate *)
END_IF;
(* Beyond this point the quote value can be modified (Reset or preset) *)
(* as desired. *)
Type Library
7.12.8 SysSetPWMOut, set PWM output
FB XTarget_07_0
Questo blocco funzione esegue l'impostazione del valore di frequenza Frequency e di duty cycle
Duty sul generatore PWM indicato. Il range dei valori di frequenza e duty cycle dipendono dalla
scheda utilizzata.
Impostando il valore di Frequency a 0 viene disabilitato il PWM e l'uscita viene forzata in base al
valore di Duty.
Duty < 50: L'uscita viene settata a FALSE.
Duty >= 50: L'uscita viene settata a TRUE.
Address (USINT) Occorre specificare l'indirizzo di modulo su cui eseguire la gestione del PWM (Range da 0 a 15). Il
valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. Il valore 255 indica il
modulo CPU. Occorre verificare che il modulo disponga della funzione PWM ouput.
Se viene settato un indirizzo di modulo non presente, si interrompe l'esecuzione e viene settato il bit
di Fault.
Channel (USINT) Occorre specificare l'indirizzo del canale sul modulo (Range da 0 a 15).
Se viene settato un indirizzo di canale non presente, si interrompe l'esecuzione e viene settato il bit
di Fault.
Frequency (REAL) Valore di frequenza in uscita (Per i limiti fare riferimento al manuale hardware della scheda
utilizzata). Il valore è espresso in Hz.
Duty (REAL) Valore di duty cycle del segnale in uscita (Per i limiti fare riferimento al manuale hardware della
scheda utilizzata). Il valore è espresso in %.
Done (BOOL) Generatore PWM correttamente impostato.
Fault (BOOL) Errore nella esecuzione.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9951050 Errore allocazione blocco funzione.
9951070 Errore versione blocco funzione.
9951100 Il modulo indirizzato in Address non è presente.
9951110 Numero di canale non presente.
9951500 Errore esecuzione.
9951990 Non implementata nel simulatore.
Esempi
Viene impostata l'uscita Out 0 del modulo CPU per generare un segnale PWM a 100 Hz con duty cycle 50 %.
Definizione variabili
Esempio LD
Type Library
7.12.9 SysPhrVRd, read variable from peripheral module
Function XTarget_07_0
Questa funzione esegue la lettura di una variabile dal modulo periferico di estensione.
Occorre definire l'indirizzo di modulo Module, l'indirizzo della variabile da leggere sul modulo
periferico RdAdd, il tipo di variabile VarType e l'indirizzo del buffer dove trasferire il valore letto
VarAdd.
Parametri funzione:
Module (USINT) Occorre specificare l'indirizzo di modulo da cui eseguire la lettura (Range da 0 a 15). Il valore 0
indica il primo modulo di estensione, 1 il secondo e così di seguito.
RdAdd (UINT) Indirizzo variabile da leggere come allocata sul modulo periferico.
VarType (USINT) Tipo variabile, come indicato nella tabella Variable types definition.
VarAdd (UDINT) Indirizzo variabile.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione. TRUE: Funzione eseguita correttamente.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9989100 Il modulo indirizzato in Module non è presente.
9989110 Il tipo variabile definito in VarType non è corretto.
9989200 Errore durante l'esecuzione della lettura della variabile dal modulo periferico.
9989990 Non implementata nel simulatore.
Esempi
Attivando l'ingresso Di00M00 viene eseguita la lettura della variabile UDINT da indirizzo 16 dal modulo periferico 0. Il
valore della variabile è trasferito nella DB100 ad offset 8.
Definizione variabili
Esempio LD
Type Library
7.12.10 SysPhrVWr, write variable to peripheral module
Function XTarget_07_0
Questa funzione esegue la scrittura di una variabile sul modulo periferico di estensione.
Occorre definire l'indirizzo di modulo Module, l'indirizzo della variabile da scrivere sul modulo
periferico WrAdd, il tipo di variabile VarType e l'indirizzo del buffer dove si trova il valore da
scrivere VarAdd.
Parametri funzione:
Module (USINT) Occorre specificare l'indirizzo di modulo su cui eseguire la scrittura (Range da 0 a 15). Il valore 0
indica il primo modulo di estensione, 1 il secondo e così di seguito.
WrAdd (UINT) Indirizzo variabile da scrivere come allocata sul modulo periferico.
VarType (USINT) Tipo variabile, come indicato nella tabella Variable types definition.
VarAdd (UDINT) Indirizzo variabile.
La funzione ritorna:
(BOOL)
FALSE: Errore esecuzione. TRUE: Funzione eseguita correttamente.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9988100 Il modulo indirizzato in Module non è presente.
9988110 Il tipo variabile definito in VarType non è corretto.
9988200 Errore durante l'esecuzione della scrittura della variabile sul modulo periferico.
9988990 Non implementata nel simulatore.
Esempi
Attivando l'ingresso Di00M00 viene eseguita la scrittura della variabile UDINT ad indirizzo 16 sul modulo periferico 0. Il
valore da scrivere è presente nella DB100 ad offset 8.
Definizione variabili
Esempio LD
Type Library
7.12.11 SysI2CWrRd, writes/reads on I2C extension bus
Function XTarget_07_0
Questa funzione gestisce la scrittura/lettura sul bus I2C di estensione. L'utilizzo di questa
funzione permette di poter gestire qualsiasi componente I2C connesso al bus di estensione.
Attenzione, siccome il bus I2C è utilizzato per l'accesso ai moduli di estensione per
non rallentarne l'accesso si consiglia di eseguire comandi I2C non più lunghi di 4
bytes in scrittura e lettura. Nel caso serva gestire più bytes si consiglia di spezzare il
comando in più comandi consecutivi.
Parametri funzione:
Address (USINT) Indirizzo dispositivo I2C range da 16#00 a 16#7F.
WrBytes (USINT) Numero di bytes dati da scrivere. 0 se solo lettura.
WrBuffer (@USINT) Indirizzo buffer memoria che contiene i dati da scrivere. NULL se solo lettura.
RdBytes (USINT) Numero di bytes dati da leggere. 0 se solo scrittura.
RdBuffer (@USINT) Indirizzo buffer memorizzazione dati letti. NULL se solo scrittura.
La funzione ritorna:
(BOOL)
TRUE: Comando eseguito correttamente.
Codici di errore
In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.
9953100 Indirizzo I2C fuori range (Valore superiore a 16#7F).
9953105 Indirizzo I2C utilizzato da un modulo di estensione.
9953990 Non implementata nel simulatore.
Esempi
E' riportato un semplice programma che esegue la lettura e scrittura di un chip I/O expander PCF9670 su bus I2C. Il
chip ha indirizzo 16#38.
Definizione variabili
Esempio LD
Type Library
7.12.12 StrainGaugeAcq, strain gauge acquisition
FB eLLabUtyLib_C030
Codici di errore
In caso di errore viene attivato per un loop Fault e con SysGetLastError è possibile rilevare il codice di errore.
10045100 Valore di Mode acquisizione non corretto.
Esempi
Nell'esempio viene acquisita una cella di carico con fondo scala da 20 Kg e 1.956 mv/V. La cella viene tarata con un
peso di riferimento da 400 grammi. Attivando Di00M00 viene abilitata l'acquisizione, gli ingressi Di01M00 e Di02M00
permettono di calibrare la cella (Attenzione le variabili OfsCalibration e FSCalibration devono essere definite
RETAIN). Nella variabile Weight viene ritornato il peso. Avendo definito SGaugeFullScale in Kg anche Value sarà
espresso in Kg.
Definizione variabili
Esempio LD
Questo blocco funzione gestisce una uscita lampeggiante con tempo di ciclo definibile.
Attivando l'ingresso ENABLE l'uscita OUT inizia a lampeggiare con tempi di ciclo alto e basso
definiti.
ENABLE (BOOL) Abilitazione blocco funzione, attivandolo viene gestita l'uscita OUT lampeggiante. Disattivandolo
l'uscita OUT viene resettata.
TIMELOW (UDINT) Definisce il tempo in cui l'uscita OUT rimane nello stato logico low, espresso in mS.
TIMEHIGH (UDINT) Definisce il tempo in cui l'uscita OUT rimane nello stato logico high espresso in mS.
OUT (BOOL) Stato uscita lampeggiante.
Esempi
Viene impostato un lampeggio con 100 mS di tempo On e 1000 mS di tempo Off. Attivando l'ingresso digitale Di00M00
l'uscita digitale Do00M00 lampeggia con i tempi definiti.
Disattivando l'ingresso digitale Di00M00 l'uscita digitale Do00M00 si azzera immediatamente.
Definizione variabili
LD Di00M00
ST FB_BLINK.ENABLE (* Transfer the digital input to enable input *)
LD 1000
ST FB_BLINK.TIMELOW (* Set the time low *)
LD 100
ST FB_BLINK.TIMEHIGH (* Set the time high *)
LD FB_BLINK.OUT
ST Do00M00 (* Copy FB output to logic output *)
Type Library
7.13.2 BlinkValue, blink out value
FB eLLabUtyLib_C030
Questo blocco funzione gestisce una uscita lampeggiante con possibilità di definire il numero di
lampeggi. Attivando l'ingresso Enable e definendo il numero di lampeggi in BlinkNr, l'uscita OutBit
inizia a lampeggiare con il numero di lampeggi definito.
Il numero di lampeggi è definito in decine ed unità, il valore delle decine è riportato con un lampeggio
lento (1 Sec), mentre il numero delle unità è riportato con un lampeggio veloce (250 mS). Una pausa
di 3 Sec separa le sequenze di lampeggio.
Enable (BOOL) Abilitazione blocco funzione, attivandolo viene gestita l'uscita OutBit lampeggiante. Disattivandolo
l'uscita viene resettata.
BlinkNr (USINT) Definisce il numero di lampeggi dell'uscita OutBit. Definendo tempo 0 l'uscita si disattiva.
OutBit (BOOL) Stato uscita lampeggiante.
Esempi
Attivando l'ingresso digitale Di00M00 l'uscita digitale Do00M00 lampeggia con 2 lampeggi lenti (1 Sec), 3 lampeggi
veloci (250 mS) ed una pausa di 3 Sec.
Disattivando l'ingresso digitale Di00M00 l'uscita digitale Do00M00 si azzera immediatamente.
Definizione variabili
LD Di00M00
ST FBData.Enable (* Transfer the digital input to enable input *)
LD 23
ST FBData.BlinkNr (* Set the number of blink *)
LD FBData.OutBit
ST Do00M00 (* Copy FB output to logic output *)
Type Library
7.13.3 ModbusMaster, modbus master
FB eLLabUtyLib_C030
Questo blocco funzione esegue la gestione del protocollo modbus master, con Type è
possibile selezionare il tipo di protocollo RTU, Ascii ed over IP. Con File è possibile definire il
terminale di I/O su cui effettuare la comunicazione.
Attivando Enable sul terminale di I/O viene inviato un frame per eseguire la funzione modbus
definita in Fcode sul nodo definito in Node. Terminata l'esecuzione del comando viene
attivata l'uscita Done. Se l'esecuzione comando ha esito positivo si attiva per un loop di
programma l'uscita Ok. Disattivando Enable si azzera Done e l'eventuale Fault, per eseguire
nuovamente il comando occorre riabilitare l'ingresso Enable. L'ingresso SpyOn se attivo
permette di spiare il funzionamento della FB.
Se FCode è una funzione di lettura, il valore delle variabili a partire dall'indirizzo definito in
Address per il numero di variabili definito da Points, viene letto dal sistema slave e trasferito
nelle variabili indirizzate da Buffer.
Se FCode è una funzione di scrittura, il valore delle variabili presenti nel buffer di memoria
indirizzato da Buffer per il numero di variabili definito da Points, è inviato al dispositivo slave
che lo trasferirà nelle sue variabili a partire dall'indirizzo definito in Address.
In caso di errore esecuzione o tempo di esecuzione comando superiore al tempo definito in
Timeout, viene attivata per un loop di programma l'uscita Fault ed incrementato il valore in Errors.
Enable (BOOL) Comando abilitazione esecuzione comando modbus. Per rieseguire il comando disabilitare e poi
riabilitare questo ingresso.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Type (USINT) Tipo di protocollo modbus. 0:RTU, 1:Ascii, 2:TCP
Node (USINT) Numero di nodo modbus su cui effettuare il comando (Range da 0 a 255).
FCode (USINT) Codice funzione modbus da eseguire nel comando (Range da 0 a 255).
Codice Descrizione
16#01 Read coil status (Massimo 250 coils)
16#02 Read input status (Massimo 125 inputs)
16#03 Read holding registers (Massimo 125 registri)
16#04 Read input registers (Massimo 125 registri)
16#05 Force Single Coil
16#06 Preset single register
16#0F Force multiple coils (Massimo 250 coils)
16#10 Preset multiple registers (Massimo 32 registri)
16#41 Read memory bytes (User function) (Massimo 250 bytes)
16#42 Write memory bytes (User function) (Massimo 250 bytes)
Address (UINT) Indirizzo di allocazione variabili su sistema slave. In accordo alle specifiche modbus l'indirizzo inviato
nel frame dati è (Address-1) (Range da 16#0001 a 16#FFFF).
Points (USINT) Numero di variabili consecutive su cui opera il comando.
Buffer (@USINT) Indirizzo buffer dati letti o da scrivere.
IFTime (UDINT) Tempo ricezione caratteri (μS), se comunicazione su porta seriale il tempo deve essere definito in
base al baud rate. Nel caso di comunicazione su rete ethernet è possibile definire il valore minimo.
Timeout (UINT) Tempo massimo esecuzione comando espresso in mS. Se il comando non termina nel tempo
definito viene abortito ed attivata l'uscita Fault.
Delay (UINT) Tempo di pausa dopo l'esecuzione del comando modbus espresso in mS.
Done (BOOL) Si attiva al termine della esecuzione comando.
Ok (BOOL) Attivo per un loop se esecuzione comando corretta.
Fault (BOOL) Attivo per un loop se errore esecuzione comando.
Errors (UDINT) Numero di errori, incrementato ad ogni nuovo errore, raggiunto valore massimo riparte da 0.
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 Tx: Invio frame comando modbus.
16#00000002 Rx: Ricezione frame risposta modbus.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10007010 Valore di File non definito.
10007050 Timeout esecuzione.
10007060 Errore esecuzione.
10007080 Errore definizione Type.
10007100 Codice funzione definito in Function non gestito.
10007120 Valore di Points errato.
10007200~2 Errore trasmissione frame comando.
10007500~7 Errore in ricezione frame risposta (Carattere errato, lunghezza errata, CRC).
Esempi
Viene presentato un esempio di lettura da un sistema SlimLine slave. Viene eseguita la lettura di 8 registri a partire da
indirizzo 40000 dal nodo modbus 1. Il valore dei registri letti è trasferito nell'array RxData. Terminata la lettura si attiverà
per un loop l'uscita logica Done.
Definizione variabili
Type Library
7.13.4 ModbusSlave_v1, modbus slave
FB eLLabUtyLib_C030
Sui sistemi SlimLine il protocollo modbus slave è già implementato dal sistema operativo,
pertanto non occorre inserire blocchi funzione appositi nel programma utente. Questo
blocco esegue l'override della gestione di sistema operativo e si utilizza in casi particolari,
dove non è possibile utilizzare la gestione implementata nel sistema operativo. Per esempio
quando si vuole consentire l'accesso ad un propria area di memoria diversa dalla DB100.
Questo blocco funzione esegue la gestione del protocollo modbus slave con Type è
possibile selezionare il tipo di protocollo RTU, Ascii ed over IP. Con File è possibile definire
il terminale di I/O su cui effettuare la comunicazione.
Occorre definire il nodo modbus Node, e l'eventuale offset di indirizzo frame modbus
Offset. I comandi modbus ricevuti operano sul buffer di memoria il cui indirizzo è definito in
Buffer e la dimensione in bytes è definita in Size.
In IFTime occorre definire il tempo di interframe dei comandi modbus, cioè il tempo che
intercorre tra la ricezione di un comando ed il comando successivo. Su linea seriale questo
tempo coincide con il tempo di ricezione di 3 caratteri al baud rate definito.
Alla ricezione di ogni comando modbus corretto si attiva per un loop l'uscita Done, in caso di errore comando viene
attivata per un loop l'uscita Fault ed incrementato il valore in Errors.
Enable (BOOL) Comando di abilitazione blocco funzione.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Type (USINT) Tipo di protocollo modbus. 0:RTU, 1:Ascii, 2:TCP
Node (USINT) Numero di nodo modbus (Range da 0 a 255).
Offset (UINT) Offset su indirizzo modbus ricevuto nel frame dati (Range da 16#0000 a 16#FFFF).
Buffer (@USINT) Indirizzo buffer dati su cui operano i comandi modbus.
Size (UINT) Dimensione in byte del buffer dati su cui operano i comandi modbus.
IFTime (UDINT) Tempo ricezione caratteri (μS), se comunicazione su porta seriale il tempo deve essere definito in
base al baud rate. Nel caso di comunicazione su rete ethernet è possibile definire il valore minimo.
Comandi supportati
Il blocco funzione supporta solo alcuni comandi previsti dal protocollo modbus, i comandi supportati sono:
Codice Descrizione
16#01 Read coil status (Massimo 250 coils)
16#02 Read input status (Massimo 250 coils)
16#03 Read holding registers (Massimo 125 registri)
16#04 Read input registers (Massimo 125 registri)
16#05 Force single coil
16#06 Preset single register
16#08 Loopback diagnostic test
16#0F Force multiple coils (Massimo 250 coils)
16#10 Preset multiple registers (Massimo 125 registri)
16#41 Read memory bytes (User function) (Massimo 250 bytes)
16#42 Write memory bytes (User function) (Massimo 250 bytes)
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore. In caso di
eccezione su comando modbus viene riportato il codice di errore ma non viene attivata l'uscita Fault.
10038010 Valore di File non definito.
10038050 Errore di timeout esecuzione.
10038060 Errore esecuzione.
10038080 Errore definizione Type.
10038100 Modbus Ascii, ricevuto carattere errato.
10038101 Ricevuto frame troppo lungo.
10038102 Modbus RTU, ricevuto frame troppo corto.
10038103 Modbus RTU, errore CRC nel frame ricevuto.
10038104 Modbus Ascii, manca <LF> in frame ricevuto.
10038105 Modbus Ascii, ricevuto frame troppo corto.
10038106 Modbus Ascii, errore LRC nel frame ricevuto.
10038107 Modbus TCP, ricevuto frame troppo corto.
10038108 Modbus TCP, protocol identifier errato in frame ricevuto.
10038109 Modbus TCP, length errato in frame ricevuto.
10038110 Richiesto numero di elementi errato.
10038200~2 Errore trasmissione frame risposta.
10038501 Eccezione 01.Illegal function, comando ricevuto non è tra quelli gestiti.
10038502 Eccezione 02. Illegal data address, comando ricevuto ha indirizzo o numero dati fuori range.
10038503 Eccezione 03. Illegal data value, comando ricevuto ha campo dati fuori range.
10038504 Eccezione 04.Failure in associated device, comando ricevuto contiene imprecisioni.
Esempi
Viene gestito il protocollo modbus slave su porta seriale COM0, si utilizza le impostazioni seriali di default 115200, e, 8,
1. I comandi modbus possono agire sull'array di WORD DArray.
Definizione variabili
Type Library
7.13.5 OnOffCycle_v1, on/off cycle with random times
FB eLLabUtyLib_C030
Questo blocco funzione esegue la temporizzazione di un ciclo On/Off con tempi random di
On e di Off definibili tra valori minimo e massimo. Il massimo valore di tempo gestito è di
oltre 1193 ore.
Attivando il comando di Enable l'uscita Out esegue un lampeggio On/Off con tempi random
compresi tra i valori minimo e massimo definiti. Disabilitando l'ingresso l'uscita Out si
disattiva. La variabile Delay ritorna il valore di ritardo attualmente attivo, mentre in Time è
ritornato il countdown del tempo.
Impostando 0 nei tempi Min e Max si ottiene una uscita impulsiva (Un loop) sulla relativa
temporizzazione. Su attivazione abilitazione viene calcolato il tempo di delay random, quindi è possibile disabilitare il
FB su attivazione uscita per avere una nuova temporizzazione di Off.
Enable (BOOL) Comando di abilitazione.
MinOffTime (UDINT) Valore minimo di tempo off comando (mS).
MaxOffTime (UDINT) Valore massimo di tempo off comando (mS).
MinOnTime (UDINT) Valore minimo di tempo on comando (mS).
MaxOnTime (UDINT) Valore massimo di tempo on comando (mS).
Out (BOOL) Stato comando On/Off in uscita.
Delay (UDINT) Valore di tempo attualmente in temporizzazione (mS).
Time (UDINT) Countdown tempo in temporizzazione (mS).
Esempi
Viene eseguito il lampeggio della uscita Do00M00 con tempi random variabili tra i 2 ed i 4 secondi.
Definizione variabili
LD Di00M00
ST FBData.Enable (* Transfer the digital input to Enable input *)
LD 2000
ST FBData.MinOffTime (* Set the minimum off time *)
LD 4000
ST FBData.MaxOffTime (* Set the maximum off time *)
LD 2000
ST FBData.MinOnTime (* Set the minimum on time *)
LD 4000
ST FBData.MaxOnTime (* Set the maximum on time *)
LD FBData.Out
ST Do00M00 (* Copy the Out value to logic output *)
LD FBData.Delay
ST VarOut (* The Delay time is copied to variable *)
Type Library
7.13.6 PIDMng_v1, PID management
FB eLLabUtyLib_C030
Questo blocco funzione esegue la regolazione PID. E' prevista la possibilità di abilitare
singolarmente i vari tipi di azione (P)roporzionale (I)ntegrativa, (D)erivativa.
Un comando di Reverse permette di invertire il segno del segnale in uscita Out.
Nella versione (v1) sono stati inseriti i due ingressi OMin e OMax per la definizione del valore
minimo e massimo in uscita dalla regolazione.
PIDEnable (BOOL) Abilitazione regolazione PID, attivando l'ingresso si abilita la regolazione. Disattivando l'ingresso si
azzera il valore in uscita Out.
IEnable (BOOL) Abilitazione regolazione integrativa, attivando l'ingresso si abilita la regolazione integrativa.
DEnable (BOOL) Abilitazione regolazione derivativa, attivando l'ingresso si abilita la regolazione derivativa.
Reverse (BOOL) Inversione segno su valore in uscita Out.
SetPoint (REAL) Set point, il valore è espresso nell'unità di misura del processo da controllare.
PValue (REAL) Valore acquisito dal processo, il valore è espresso nell'unità di misura del processo da controllare.
PBand (REAL) Banda proporzionale, questo valore definisce il valore di errore oltre al quale la regolazione viene
disabilitata forzando l'uscita Out al massimo ±100%. Il valore è espresso nell'unità di misura del
processo da controllare.
ST (REAL) Tempo di scansione, occorre impostare il tempo in cui si desidera vengano eseguite le regolazioni
integrativa e derivativa se abilitate, il valore è in mS.
KP (REAL) Costante proporzionale, si ricorda che più è elevato il valore più è pronta è la regolazione con un
conseguente aumento del valore di overshot. Il valore è un numero.
IT (REAL) Tempo integrativo, si ricorda che più è elevato il valore meno è veloce la regolazione integrativa a
recuperare l'errore. Il valore è espresso in Sec.
DT (REAL) Tempo derivativo, si ricorda che più è elevato il valore più è veloce la regolazione derivativa a
recuperare l'errore. Il valore è espresso in Sec.
OMin (REAL) Valore minimo dell'uscita PID Il valore è espresso in %.
OMax (REAL) Valore massimo dell'uscita PID Il valore è espresso in %.
Enabled (BOOL) Regolazione PID abilitata.
Error (BOOL) Errore nella esecuzione.
OUT (REAL) Valore di correzione in uscita dalla regolazione PID. Questo valore deve essere utilizzato per il
comando del processo. Il valore è espresso in %.
Codici di errore
In caso di errore si attiva l'uscita Error, con SysGetLastError è possibile rilevare il codice di errore.
10012050 Non è stato definito valore di ST.
Esempi
Nell'esempio è gestita una regolazione di temperatura su di un termoriscaldatore. Viene acquisita la sonda di
temperatura da una Pt100 e viene gestita una uscita PWM Do00M00 per il comando. Le costanti del loop PID sono
allocate in memoria backup e sono mantenute allo spegnimento, inoltre sono accessibili da modbus.
Definizione variabili
Type Library
7.13.7 PWMOut, PWM output management
FB eLLabUtyLib_C030
Enable (BOOL) Abilitazione gestione uscita PWM, attivando l'ingresso si abilita la gestione. Disattivando l'ingresso si
azzera l'uscita Out.
SET (REAL) Valore di set PWM, il valore è espresso in %.
TCycle (REAL) Tempo di di ciclo PWM, il valore è espresso in S.
TMin (REAL) Tempo minimo comando uscita Out, il valore è espresso in S.
Out (BOOL) Uscita PWM.
Esempi
Nell'esempio è gestita una uscita PWM definendo un tempo di ciclo di 5 secondi con un tempo minimo di 0.5 secondi.
Impostando come set point il valore 50% attivando l'ingresso Di00M00 avremo che l'uscita Do00M00 sarà attivata per
2.5 secondi e disattivata per 2,5 secondi.
Definizione variabili
Type Library
7.13.8 SysDMXMng, DMX management
FB XTarget_07_0
Questo blocco funzione esegue la gestione del protocollo DMX, questo è un blocco funzione protetto
per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi
funzione. E' comunque possibile utilizzarlo liberamente in modo test per 15 Min.
Attivando l'ingresso di Start viene inviato sulla porta seriale identificata da File un frame DMX che
inizia con il valore di Status e segue con il valore di preset dei dispositivi definiti da Devices. Il valore
di preset dei vari dispositivi deve essere caricato in un array di dati il cui indirizzo è passato in
DataPtr. Mantenendo sempre attivo l'ingresso Start verranno inviati consecutivamente frames DMX.
Al termine dell'invio del comando DMX si attiverà per un loop di programma l'uscita Done.
Start (BOOL) Comando di invio frame DMX su porta seriale, si resetta automaticamente all'invio del frame.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Status (USINT) Valore byte di stato inviato nel protocollo DMX prima dei byte di preset dispositivi.
Devices (UINT) Numero di dispositivi connessi al bus DMX.
Delay (UINT) Tempo di pausa trasmissione frames DMX (mSec)
DataPtr (@USINT) Pointer all'array dati valori di preset dispositivi DMX.
Done (BOOL) Attivo per un loop al termine dell'invio frame DMX del comando
Fault (BOOL) Attivo in caso di errore nella gestione.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
9979050 Errore allocazione blocco funzione.
9979060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9979070 Errore versione blocco funzione.
9979085 FB protetta, terminato tempo funzionamento in modo demo.
9979200 Protocollo DMX non supportato dal dispositivo definito in File.
9979990 Non implementata nel simulatore.
Esempi
Dovendo gestire puntatori a memoria è preferibile utilizzare il blocco funzione all'interno di un programma ST,
nell'esempio viene attivato il protocollo DMX sulla porta seriale COM1. Vengono gestiti 5 dispositivi con indirizzi da 1 a
5. Il frame DMX è continuamente inviato ai dispositivi.
Attivando l'ingresso digitale Di00M00 viene impostato il valore 0, su tutti i dispositivi. Attivando l'ingresso digitale
Di01M00 su dispositivo 1 viene impostato il valore 10, sul 2 il valore 20, e così via fino al quinto in cui viene impostato il
valore 50.
Definizione variabili
Esempio ST
(* -------------------------------------------------------------------------- *)
(* ESEGUO APERTURA PORTA SERIALE *)
(* -------------------------------------------------------------------------- *)
(* Here the COM1 port is opened in read/write. *)
(* -------------------------------------------------------------------------- *)
(* ESEGUO ATTIVAZIONE COMANDI *)
(* -------------------------------------------------------------------------- *)
(* Attivazione comandi su input Di00M00. *)
DiPls[0](CLK:=Di00M00);
IF (DiPls[0].Q) THEN
DMXData[0]:=0; (* Preset dispositivo con indirizzo 1 *)
DMXData[1]:=0; (* Preset dispositivo con indirizzo 2 *)
DMXData[2]:=0; (* Preset dispositivo con indirizzo 3 *)
DMXData[3]:=0; (* Preset dispositivo con indirizzo 4 *)
DMXData[4]:=0; (* Preset dispositivo con indirizzo 5 *)
FBDMX.Start:=TRUE; (* Start *)
END_IF;
DiPls[1](CLK:=Di01M00);
IF (DiPls[1].Q) THEN
DMXData[0]:=10; (* Preset dispositivo con indirizzo 1 *)
DMXData[1]:=20; (* Preset dispositivo con indirizzo 2 *)
DMXData[2]:=30; (* Preset dispositivo con indirizzo 3 *)
DMXData[3]:=40; (* Preset dispositivo con indirizzo 4 *)
DMXData[4]:=50; (* Preset dispositivo con indirizzo 5 *)
FBDMX.Start:=TRUE; (* Start *)
END_IF;
(* -------------------------------------------------------------------------- *)
(* ESEGUO GESTIONE PROTOCOLLO DMX *)
(* -------------------------------------------------------------------------- *)
(* Gestione protocollo DMX. *)
(* [End of file] *)
Type Library
7.13.9 IOEncoder, incremental encoder over I/O
FB eLLabUtyLib_C030
Questo blocco funzione esegue la lettura di un encoder incrementale connesso agli ingressi logici.
Basta appoggiare sui due ingressi APhase e BPhase del blocco funzione i due ingressi di
acquisizione del canale A e del canale B di un encoder incrementale. Il blocco funzione esegue la
quadratura dei segnali, il controllo della direzione di rotazione e gestisce il valore di Quote in
uscita.
La quadratura dei segnali esegue la moltiplicazione per 4 delle tacche encoder quindi il valore di
Quote al termine di un giro completo dell'encoder è pari al numero di tacche encoder moltiplicato
per 4.
Enable (BOOL) Abilitazione gestione conteggio encoder.
Reset (BOOL) Comando di reset quota encoder. Attivando l'ingresso si azzera il valore di Quote.
APhase (BOOL) Ingresso canale A encoder.
BPhase (BOOL) Ingresso canale B encoder.
Enabled (BOOL) Conteggio encoder abilitato.
Error (BOOL) Attivo per un loop su errore acquisizione encoder. Si attiva se la frequenza di ingresso dei segnali
encoder è maggiore rispetto al tempo di esecuzione del blocco funzione.
Quote (UDINT) Valore di quota encoder espresso in impulsi. Numero tacche giro encoder moltiplicato per 4.
Esempi
Nell'esempio è gestita l'acquisizione di un encoder incrementale connesso agli ingressi del modulo CPU. Ruotando di
un giro l'encoder, il valore di Quote verrà incrementato se la rotazione è oraria (CW) oppure decrementato se la
rotazione è antioraria (CCW), del numero di tacche giro moltiplicato per 4.
Definizione variabili
Esempio LD
Type Library
7.13.10 GetISO1155Crc, calculate CRC according ISO1155
Function eLLabUtyLib_C030
Questa funzione esegue il calcolo del CRC Cyclic Redundancy Check, (Controllo Ciclico di
Ridondanza) su di un'area dati. Il calcolo è effettuato secondo le specifiche ISO 1155.
Occorre passare alla funzione l'indirizzo del buffer di memoria Buffer ed il numero di bytes
ByteNr su cui eseguire il calcolo del CRC.
Buffer (@USINT) Indirizzo dell'area di memoria su cui eseguire il calcolo del CRC.
ByteNr (UINT) Numero di bytes su cui eseguire il calcolo del CRC a partire dall'indirizzo definito in Buffer.
(UINT)
Valore CRC calcolato.
Esempi
Viene calcolato il CRC di una richiesta di lettura del registro 1.8.1 da un contatore di energia elettrica secondo lo
standard IEC 62056-2. Il frame di richiesta è '<SOH>R1<STX>1.8.1()<ETX><CRC>'.
Il valore del CRC ritornato in CRCValue è 16#5A (90 decimale).
Definizione variabili
Esempio ST
(* ************************************************************************** *)
(* IEC1155 CRC CALCULATION *)
(* ************************************************************************** *)
(* Register read command '<SOH>R1<STX>1.8.1()<ETX><CRC>'. *)
Type Library
7.13.11 IODataExchange, exchange data by using logic I/O
FB eLLabUtyLib_C030
Questo blocco funzione permette lo scambio di dati tra due sistemi, uno master ed uno slave,
utilizzando una connessione tramite I/O logici. Sono utilizzati due ingressi e due uscite digitali per
ogni sistema, è possibile definire il numero di bytes di dati da scambiarsi.
Occorre connettere l'uscita digitale OStrobe di un sistema con l'ingresso digitale IStrobe dell'altro
sistema e l'uscita OData con l'ingresso digitale IData dell'altro.
Il trasferimento dati è bidirezionale, i dati presenti nel buffer TxData di un sistema sono trasferiti
nel buffer RxData dell'altro sistema e viceversa, per il numero di bytes definito in ByteNr. La
comunicazione è verificata mediante l'invio di un CRC secondo lo standard ISO 1155.
Ad ogni fine trasferimento dati si attiva per un loop l'uscita Done, sulla sua attivazione occorre
provvedere a trasferire i dati da trasmettere nel buffer di trasmissione e leggere i dati dal buffer di
ricezione.
In caso di errore nella comunicazione si attiva per un loop l'uscita Fault, ed i due sistemi si risincronizzano per
riprendere una nuova trasmissione.
Enable (BOOL) Abilitazione gestione comunicazione.
IsMaster (BOOL) TRUE: Modo master, FALSE: Modo slave.
IStrobe (BOOL) Occorre appoggiare l'ingresso digitale di strobe.
IData (BOOL) Occorre appoggiare l'ingresso digitale di dato.
RxData (UDINT) Indirizzo buffer dati ricevuti.
TxData (UDINT) Indirizzo buffer dati da trasmettere.
ByteNr (USINT) Numero bytes da scambiare con altro sistema (Da 1 a 30).
TrigDelay (UINT) Tempo attesa tra uscita dato OData ed uscita strobe OStrobe (Da 0 a 30 mS).
OStrobe (BOOL) Da appoggiare su uscita digitale di strobe.
OData (BOOL) Da appoggiare su uscita digitale di dato.
Done (BOOL) Si attiva per un loop al termine dello scambio dati.
Fault (BOOL) Si attiva per un loop in caso di errore su scambio dati.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10011080 Errore definizione valore ByteNr.
10011082 Errore definizione valore TrigDelay.
10011100~1 Timeout attesa attivazione segnale IStrobe.
10011110~1 Timeout attesa disattivazione segnale IStrobe.
10011200~1 Errore CRC dati ricevuti.
Esempi
Utilizzando due sistemi attivando modo master (Di01M00 attivo) su di un sistema e modo slave (Di01M00 disattivo)
sull'altro, è possibile eseguire lo scambio di 4 bytes di memoria tra i sistemi. I 4 bytes allocati ad indirizzo MD100.0 di
un sistema saranno trasferiti su 4 bytes allocati ad indirizzo MD100.16 dell'altro sistema.
Al termine del trasferimento, i dati ricevuti dalla memoria MD100.0 sono trasferiti nella variabile RxData, mentre la
variabile TxData è trasferita in memoria MD100.16.
Definizione variabili
Esempio LD (Ptp121A000)
Type Library
7.13.12 Average, value average
FB eLLabUtyLib_C030
Esempi
Viene eseguita una acquisizione analogica dall'ingresso 0 del modulo con indirizzo 0, in modo 0÷10 volt. Il valore
acquisito viene mediato e poi trasferito nella variabile AnaValue.
Definizione variabili
Type Library
7.13.13 HIDClkDtaReader, HID RFID clock/data reader
FB eLLabUtyLib_C030
Questo blocco funzione esegue l'acquisizione di un lettore HID tipo clock e dato. La gestione
del lettore deve essere eseguita almeno ogni 400 uSec, quindi si consiglia di utilizzarlo in un
programma eseguito nella task fast, definendo il tempo di esecuzione della task a 400 uS
tramite la funzione SysSetTaskLpTime.
Il blocco funzione può acquisire tags RFID con codice di lunghezza fino ad 8 bytes, il codice
letto viene trasferito nel buffer indirizzato da CData, occorre definire la lunghezza del codice in
CDLength.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10039050 Errore definizione valore CDLength.
10039060 Errore esecuzione.
10039100~2 Errore lettura dati tag RFID.
Esempi
Viene gestita la lettura di un reader della HID clock e dato connesso agli ingressi digitali del modulo CPU. Ricordo che il
programma deve essere eseguito almeno ogni 400 uS quindi si consiglia di eseguilo nella task Fast impostando il
tempo di esecuzione a 400 uS. Il valore di codice letto dal TAG RFID è trasferito nell'array CData.
Definizione variabili
Type Library
7.13.14 Linearize, linearize a non linear value
Function eLLabUtyLib_C030
Esempi
Viene eseguita tramite una acquisizione analogica la lettura di un livello di un serbatoio di forma irregolare, tramite la
funzione viene ritornato il valore dei litri presenti nel serbatoio. Il valore di livello viene mediato per avere una lettura piu
regolare.
Ad 1 volt corrispondono 1000 litri, a 2 volt corrispondono 4000 litri, a 3 volt corrispondono 6000 litri.
Definizione variabili
Type Library
7.13.15 ValueScale, scales a value
Function eLLabUtyLib_C030
Questa funzione esegue la messa in scala di un valore. E' possibile definire il limite minimo e
massimo del valore in ingresso da scalare (ILow, IHigh) ed il valore minimo e massimo del
valore in uscita scalato (OLow, OHigh).
L'utilizzo di questa funzione è particolarmente indicato per convertire valori acquisiti da sensori
in corrente (4-20 mA) nella corrispondente unità di misura rilevata dal trasduttore.
Esempi
Viene eseguita una acquisizione analogica di un sensore di temperatura con uscita in corrente 4-20 mA, il sensore ha
come valore in uscita la corrente di 4 mA a -50 °C e la corrente di 20 mA a 150 °C. Utilizzando la funzione si esegue
direttamente la conversione in gradi centigradi del valore acquisito.
Definizione variabili
Type Library
7.13.16 GetPolynomialCRC, polynomial CRC calculation
Function eLLabUtyLib_C030
Questa funzione esegue il calcolo del CRC su di un array di dati in accordo allo standard
CCITT.
In Data occorre indicare l'indirizzo dell'array di dati su cui calcolare il CRC, Length indica la
lunghezza dell'array in byte. In CRC è ritornato il valore del CRC calcolato.
Data (@USINT) Indirizzo array dati su cui eseguire il calcolo del CRC.
Length (USINT) Lunghezza array in bytes.
(WORD)
Valore CRC calcolato.
Esempi
Viene eseguito il calcolo del CRC su di un array di dati. Supponendo di avere un array di 8 bytes allocato in DB100
all'indirizzo 16 che contiene i valori 16#04, 16#3B, 16#1B, 16#00, 16#00, 16#00, 16#00, 16#00 , il CRC calcolato sarà
16#5AF0.
Definizione variabili
Type Library
7.13.17 LRamp, linear ramp
FB eLLabUtyLib_C030
Questo blocco funzione esegue una rampa lineare sul valore di ingresso. Il valore Out in uscita
segue il valore di ingresso In con li valori di pendenza definiti. Il valore UPSlope imposta la
pendenza in salita mentre DWSlope quella in discesa. Disabilitando il blocco funzione l'uscita si
azzera.
I valori di pendenza sono definiti in unità al secondo, ad esempio con UPSlope settato a 1 (1 unità
al secondo), ipotizzando uno step di 10 in ingresso In, avremo l'uscita Out che raggiunge il valore
10 in 10 secondi.
Enable (BOOL) Abilitazione al blocco funzione.
In (REAL) Valore in ingresso su cui viene effettuata la rampa.
UPSlope (REAL) Valore di pendenza rampa in salita (Unit/Second)
DWSlope (REAL) Valore di pendenza rampa in discesa (Unit/Second)
Enable (BOOL) Blocco funzione abilitato.
Out (REAL) Valore di rampa in uscita.
Esempi
Viene eseguita una rampa sul valore di Source con pendenza di salita di 1 e discesa di 2. Supponendo uno step in
Source di 10 avremo Destination che raggiunge il valore in 10 scendi. Mentre portando a 0 il valore di Source avremo
Destination che si azzera i 5 secondi.
Definizione variabili
Esempio FBD
Type Library
7.13.18 VaPotentiometer, voltage acquisition potentiometer
Function eLLabUtyLib_C030
Esempi
AOxxv
AOxxi
AGnd
AIxx+
AIxx-
FIELD
PLC
Viene acquisito il valore ohmico alla posizione del cursore di un potenziometro da
5 KOhm alimentato con tensione di 10 Volt. Il valore è acquisito tramite un modulo
P5
P4
di ingresso analogico.
FIELD
PLC
RSeries
Rx
Definizione variabili
Type Library
7.13.19 ResistorValue, resistor value acquire
Function eLLabUtyLib_C030
Questa funzione esegue la lettura del valore ohmico di una resistenza acquisendo il
valore di tensione su di un partitore resistivo.
In PVoltage occorre indicare la tensione di alimentazione del partitore resistivo, in
RSeries il valore in Ohm della resistenza serie. Fornendo in AVoltage il valore di
tensione acquisito ai capi della resistenza da misurare il blocco funzione calcola il valore
della resistenza.Per compensare l'errore di lettura dovuto alla impedenza di ingresso del
canale di acquisizione della tensione occorre definirla in AImpedance.
PVoltage (REAL) Tensione di alimentazione partitore resistivo (V).
RSeries (REAL) Valore resistivo della resistenza serie (Ohm).
AVoltage (REAL) Valore di tensione acquisita ai capi della resistenza da misurare (V).
AImpedance (REAL) Valore di impedenza di ingresso del canale di acquisizione (Ohm).
(REAL) Valore resistenza (Ohm).
Esempi
AOxxv
AOxxi
AGnd
AIxx+
AIxx-
FIELD
PLC
Viene acquisito il valore ohmico di una resistenza inserita in un partitore con una
resistenza da 4,7KOhm. Il partitore viene alimentato con una tensione di 10 Volt. Il
P5
P4
valore è acquisito tramite un modulo di ingresso analogico. Il valore acquisito
FIELD
PLC
viene poi filtrato con una FB Average per avere un valore stabile.
RSeries
Rx
Definizione variabili
Type Library
7.13.20 BufferModified, checks if a buffer has been modified
FB eLLabUtyLib_C040
Questo FB controlla se vi è stata una variazione nel contenuto di un buffer di memoria. In Buffer
occorre definire l'indirizzo ed in Size la dimensione del buffer di memoria da controllare.
Abilitando il FB viene allocato automaticamente al suo interno un buffer di comparazione e si
attiva l'uscita Ready. Ad ogni esecuzione viene comparato il contenuto del buffer con il buffer di
comparazione interno, e se differenza si attiva per un loop l'uscita Modified.
Variando l'indirizzo del buffer e/o la sua dimensione l'FB automaticamente rialloca un nuovo
buffer di riferimento.
Enable (BOOL) Abilitazione FB, disattivando il bit viene anche rilasciata la memoria del bufffer interno.
Buffer (@BYTE) Indirizzo del buffer da controllare.
Size (UDINT) Dimensione del buffer da controllare.
Ready (BOOL) Attivo se FB stà eseguendo il controllo.
Modified (BOOL) Attivo per un loop se il contenuto del buffer si è modificato.
Esempi
Viene eseguito il controllo sul contenuto del buffer Data. Se vi sono variazioni viene attivato Modifed. Occorrerà agire
da debug per resettarlo.
Definizione variabili
Type Library
7.14.1 IEC62056_21Rd, IEC62056-21 protocol read
FB eLLabUtyLib_C030
Questo blocco funzione esegue la gestione della lettura di registri da sistemi di metering
utilizzando il protocollo IEC62056-21.Questo è un blocco funzione protetto per utilizzarlo
occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi funzione. E'
comunque possibile utilizzarlo liberamente in modo test per 30 Min.
Occorre in SerialNr definire il numero seriale del contatore (Utilizzato come chiave di accesso
alla lettura) e in Register l'indirizzo del registro da leggere secondo la normativa OBIS. Se la
lettura ha esito positivo viene attivata l'uscita Done e le variabili MeterCode, Password e
Value sono valorizzate con i dati letti dal contatore.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10016010 Valore di File non definito.
10016020 FB protetta, terminato tempo funzionamento in modo demo.
10016050 Timeout esecuzione.
10016070 Errore case gestione.
10016100~1 Errore ricezione tipo da contatore.
10016110~2 Errore ricezione password da contatore.
10016120~2 Errore ricezione valore parametro da contatore.
10016200 Overflow ricezione stringa da contatore.
Esempi
E' disponibile un programma di esempio Ptp122*000 che esegue la lettura da un contatore di energia di 3 registri. A
titolo indicativo diamo un esempio di massima per la lettura di un registro.
Su attivazione dell'ingresso digitale Di00M00 viene eseguita la lettura del registro 1.8.0 (Potenza in Kw). Se la lettura
ha esito positivo si attiva per un loop l'uscita digitale Di00M00. Le variabili MeterCode, Password e Value, saranno
valorizzate con i valori letti dal contatore.
Definizione variabili
Type Library
7.15.1 ModemCore_v4, modem core management
FB eModemLib_E200
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 'Rx' Ricezione stringa da modem
16#00000002 'R>' Stringa ricevuta da modem troppo lunga
16#00000004 'Tx' Trasmissione stringa verso modem
16#00000010 'Mr' Ricezione messaggio SMS
16#01000000 '--' Etichette di segnalazione operazioni modem
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10002010 Valore di File non definito.
10002020 FB protetta, terminato tempo funzionamento in modo demo.
10002050 Timeout esecuzione.
10002080 Errore case gestione.
10002100 FB eseguita in task diversa da quella di background.
10002200~3 Errore ricezione CLIP.
10002300~4 Errore nelle sequenze power on del modem.
10002400~15 Errore nelle sequenze di controllo del modem.
10002500~7 Errore nella ricezione del messaggio SMS.
Esempi
Nell'esempio è gestito un modem connesso alla porta seriale “COM1”, per la definizione delle variabili e per una
migliore comprensione del funzionamento si rimanda agli esempi successivi.
Definizione variabili
Type Library
7.15.2 ModemSMSReceive, receive a SMS message
FB eModemLib_E000
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10003010 ModemID non definito.
10003020 ModemID non corretto.
Esempi
Nell'esempio è gestita la ricezione di un messaggio SMS dal modem definito nella variabile ModemID.
Definizione variabili
Type Library
7.15.3 ModemSMSRxCmd_v1, receive a SMS command
FB eModemLib_E000
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10004010 ModemID non definito.
10004020 ModemID non corretto.
Esempi
Nell'esempio è gestito un comando di Accensione/Spegnimento di una uscita logica su ricezione messaggio SMS dal
modem definito nella variabile ModemID.
Definizione variabili
Type Library
7.15.4 ModemSMSSend_v2, send a SMS message
FB eModemLib_E000
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10005010 ModemID non definito.
10005020 ModemID non corretto.
10005080 Errore case gestione.
10005100~3 Errore gestione invio SMS.
Esempi
Nell'esempio attivando l'ingresso Di00CPU viene eseguito l'invio di un messaggio SMS sul modem definito nella
variabile ModemID.
Definizione variabili
Type Library
7.15.5 ModemPhoneCall_v1, executes a phone call
FB eModemLib_E000
Questo blocco funzione esegue una chiamata telefonica al numero indicato, si collega al
blocco funzione di gestione modem ModemCore, occorre passare il ModemID in uscita
dal blocco funzione di gestione modem.
Su fronte attivazione ingresso di Call viene prenotata l'esecuzione della chiamata, non
appena sarà possibile verrà eseguita la chiamata al numero definito in Number.
Terminato il tempo definito in Time la chiamata verrà terminata. Se non vi sono problemi
verrà attivata per un loop di programma l'uscita Done.
Call (BOOL) Sul fronte di attivazione comanda 'esecuzione della chiamata. Attenzione! La chiamata verrà
eseguita non appena il modem è libero.
ModemID (UDINT) ID modem fornito in uscita dalla ModemCore.
Number (@USINT) Pointer al numero di telefono da chiamare.
Time (UINT) Tempo di durata chiamata (Sec).
Done (BOOL) Attivo per un loop al termine della esecuzione chiamata.
Fault (BOOL) Attivo per un loop se errore esecuzione chiamata.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10037010 ModemID non definito.
10037020 ModemID non corretto.
10037080 Errore case gestione.
10037100~3 Errore gestione chiamata telefonica.
Esempi
Nell'esempio è gestita una chiamata al numero indicato. Dopo 15 secondi la chiamata viene conclusa.
Definizione variabili
Type Library
7.15.6 ModemHTTPGet, executes a HTTP Get request
FB eModemLib_E000
Questo blocco funzione esegue una richiesta HTTP inserendo in linea dei parametri GET, si
collega al blocco funzione di gestione modem ModemCore, occorre passare il ModemID in
uscita dal blocco funzione di gestione modem.
Su fronte attivazione ingresso Send viene eseguita la connessione al Server HTPP sulla porta
Port, e richiesta la pagina Page. La pagina viene richiesta con i parametri GET definiti nel buffer
puntato da GETPars. La pagina ricevuta dal server viene trasferita nel buffer puntato da
RxBuffer, i dati ricevuti che superano la dimensione del buffer RxSpace sono scartati.
Terminata la ricezione della pagina richiesta si attiva per un loop l'uscita Done, se pagina non è
ritornata nel tempo definito in TimeOut l'esecuzione termina con errore.
Send (BOOL) Sul fronte di attivazione comanda richiesta pagina HTTP. Attenzione! La richiesta verrà
eseguita non appena il modem è libero.
ModemID (UDINT) ID modem fornito in uscita dalla ModemCore.
Server (@USINT) Pointer alla stringa di definizione del server HTTP.
Port (UINT) Porta su cui effettuare la connessione.
Page (@USINT) Pointer alla stringa di definizione pagina richiesta.
GETPars (@USINT) Pointer alla stringa parametri GET da inserire nella richiesta (Max 512 caratteri).
RxBuffer (@USINT) Pointer al buffer di ricezione pagina richiesta (Max 360 caratteri).
RXSpace (UINT) Dimensione in bytes del buffer di ricezione pagina.
TimeOut (UINT) Tempo massimo attesa ricezione pagina (mS).
Done (BOOL) Attivo per un loop al termine della ricezione pagina.
Fault (BOOL) Attivo per un loop se errore ricezione pagina.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10042010 ModemID non definito.
10042020 ModemID non corretto.
10042080 Errore case gestione.
10042100~8 Errore gestione richiesta pagina da server HTTP.
10042200 Stringa GET parametri troppo lunga.
Esempi
L'utilizzo tipico di questa FB è di collegarsi ad un server HTTP dove sono eseguite pagine script (ASP, PHP, Phyton,
ecc) richiedendo la pagina fornendo in linea alla chiamata dei parametri in GET. Lo script della pagina potrà eseguire
operazioni con i dati passati in linea e ritornare dei valori come risultato.
Definizione variabili
IF (SysFirstLoop) THEN
HTTP.ModemID:=ModemID; (* Modem ID *)
HTTP.Server:=ADR('slimline.altervista.org'); (* HTTP server *)
HTTP.Page:=ADR('Mdp095a000/Ptp118b200/Division.php'); (* Page name *)
HTTP.Port:=80; (* HTTP port *)
HTTP.TimeOut:=5000; (* Connection timeout (mS) *)
HTTP.GETPars:=ADR(TxBuffer); (* GET parameters pointer *)
HTTP.RxBuffer:=ADR(RxBuffer); (* Rx buffer pointer *)
HTTP.RxSpace:=30; (* Rx buffer space *)
END_IF;
IF (HTTP.Send) THEN
i:=SysVarsnprintf(ADR(TxBuffer), SIZEOF(TxBuffer), 'Dividend=%.3f', REAL_TYPE, ADR(Dividend));
i:=SysLWVarsnprintf(ADR(TxBuffer), SIZEOF(TxBuffer), '&Divisor=%.3f', REAL_TYPE, ADR(Divisor));
END_IF;
HTTP();
HTTP.Send:=FALSE;
IF (HTTP.Fault) THEN HTTPCECtr:=HTTPCECtr+1; END_IF;
IF (HTTP.Done) THEN
IF NOT(SysVarsscanf(SysStrFind(ADR(RxBuffer), ADR('The result is:'), FIND_GET_END), '%f', REAL_TYPE,
ADR(Result))) THEN
Result:=0.0; (* Division result *)
END_IF;
END_IF;
(* [End of file] *)
Vediamo di spiegare come funziona il programma, sul fronte di attivazione dell'ingresso Di00CPU viene effettuata la
connessione al server www.slimline.altervista.org e richiesta l pagina Mdp095a000/Ptp118b200/Division.php. In
linea alla chiamata della pagina sono posti i campi GET Dividend=200.0&Divisor=10.0.
Sul server è presente una pagina con uno script PHP che esegue la divisione e ritorna il risultato. Il funzionamento dello
script si può testare con un comune browser digitando l'indirizzo:
http:\\www.slimline.altervista.org\Mdp095a000/Ptp118b200/Division.php?Dividend=200.0&Divisor=10.0
Se lo script funziona nella pagina del browser verrà visualizzato:
The result is: 20
Lo script PHP sul server è del tipo:
<?php
echo "The result is: ".($_REQUEST["Dividend"]/$_REQUEST["Divisor"]);
?>
Come si vede lo script invia in echo il risultato della divisione. I parametri posti in GET alla richiesta sono
automaticamente trasferiti negli statements $_REQUEST['Dividend'] e $_REQUEST['Divisor']. Come si vede è quindi
possibile passare in GET allo script tutti i valori che si desiderano.
Il valore di ritorno dallo script definito con lo statement echo verrà trasferito nel buffer RxBuffer del nostro programma e
quindi è possibile operare su di esso con le istruzioni di gestione stringa.
Type Library
7.16.1 sOWireMng, One-Wire management
FB ePLC1WireLib_C000
Enable (BOOL) Abilitazione blocco funzione, attivandolo viene gestito il convertitore Seriale/One-Wire.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
OnWork (BOOL) Function block attivata ed in lavoro.
Activity (BOOL) Attivo se attività sul bus One-Wire.
Fault (BOOL) Attivo se errore gestione bus One-Wire.
MngID (UDINT) One-Wire management ID, da passare alle FB collegate (Esempio sOWRdIdentifier,
sOWRdTemperature, ecc.).
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10008010 Valore di File non definito.
10008200 Timeout invio stringa comando.
10008300~9 Errore nelle configurazione convertitore.
10008400~1 Errore nella verifica configurazione.
10008500~2 Errore nelle sequenze indirizzamento device One-Wire.
10008600 Errore risposta a comando di reset pulse.
10008601 Bus One-Wire in cortocircuito.
10008602 Errore dispositivi su bus One-Wire.
10008603 Nessun dispositivo su bus One-Wire.
Type Library
7.16.2 sOWRdIdentifier, One-Wire read ROM identifier
FB ePLC1WireLib_C000
Questo blocco funzione esegue la lettura del codice di identificazione di un dispositivo One-Wire,
si collega al blocco funzione sOWireMng di gestione convertitore Seriale/One-Wire. Occorre
passare MngID in uscita dal blocco funzione di gestione convertitore.
Attivando Enable, viene eseguita la lettura del ROM ID dal dispositivo connesso al bus One-Wire
Attenzione! Bisogna avere un solo dispositivo connesso al bus. Al termine della lettura del
codice si attiva l'uscita Done. Se la lettura ha esito positivo si attiva per un loop di programma
l'uscita Ok. Gli 8 bytes del ROM ID sono trasferiti nell'array indirizzato da IDCode. Disattivando Enable si azzera Done
e l'eventuale Fault, per eseguire una nuova lettura occorre riabilitare l'ingresso Enable.
Enable (BOOL) Abilita il blocco funzione.
MngID (UDINT) One-Wire management ID, fornito in uscita dal blocco funzione sOWireMng.
IDCode (@USINT) Puntatore array memorizzazione ROM ID, deve essere almeno 8 bytes.
Done (BOOL) Si attiva al termine della esecuzione lettura del ROM ID.
Ok (BOOL) Attivo per un loop se lettura ROM ID eseguita correttamente.
Fault (BOOL) Attivo se errore lettura ROM ID.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10009010 MngID non definito.
10009020 MngID non corretto.
10009030 IDCode non definito.
10009100 FB OWireMng, gestione convertitore Seriale/One-Wire, impegnata.
10009200~2 Errore gestione sequenze One-Wire lettura ID.
Esempi
Ecco un semplice esempio di gestione di dispositivi iButton per il riconoscimento
personale. Inserendo il TAG nel lettore viene eseguita la lettura del ROM identifier, il
valore acquisito è trasferito in un array di 8 bytes ROMID.
Ciclicamente viene eseguita l'acquisizione, se un TAG è inserito nel lettore viene
attivato TAGInserted.
Per semplicità nel programma non viene eseguito alcun controllo sull'ID letto, ma in
un sistema di controllo accessi ad esempio è possibile dall'ID letto identificare la
persona ed abilitare o no l'accesso.
Definizione variabili
Type Library
7.16.3 sOWRdTemperature, One-Wire read temperature
FB ePLC1WireLib_C000
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10010010 MngID non definito.
10010020 MngID non corretto.
10010100 FB OWireMng, gestione convertitore Seriale/One-Wire, impegnata.
10010200~5 Errore nelle sequenze acquisizione temperatura.
Esempi
Viene eseguita la lettura della temperatura da un dispositivo One-Wire. Non essendo definito IDCode viene acquisito
qualsiasi dispositivo presente sul bus One-Wire Attenzione! Deve essere presente un solo dispositivo sul bus. Se
esecuzione corretta viene attivata l'uscita Do00M00 ed il valore acquisito è trasferito nella variabile Temperature.
Definizione variabili
Type Library
7.16.4 sOWRdHumidity, One-Wire read humidity
FB ePLC1WireLib_C000
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10015010 MngID non definito.
10015020 MngID non corretto.
10015100 FB OWireMng, gestione convertitore Seriale/One-Wire, impegnata.
10015200~3 Errore nelle sequenze conversione temperatura.
10015300~8 Errore nelle sequenze acquisizione tensione alimentazione sensore.
10015400~8 Errore nelle sequenze acquisizione sensore umidità.
Esempi
Viene eseguita la lettura della temperatura ed umidità da un dispositivo One-Wire. Non essendo definito IDCode viene
acquisito qualsiasi dispositivo presente sul bus One-Wire Attenzione! Deve essere presente un solo dispositivo sul
bus. Se acquisizione corretta viene attivata l'uscita Do00M00 ed i valori acquisiti sono trasferiti nelle variabili
Temperature e Humidity.
Definizione variabili
Type Library
7.17.1 SysTCPServer, accepts TCP/IP connections
FB XTarget_12_0_0
Questa function block gestisce la comunicazione con protocollo TCP/IP in modalità server. Occorre fornire l'indirizzo di
un array di flussi dati streams al parametro FilesArr. Occorre definire la porta TCP da porre in ascolto ed il numero di
connessioni contemporanee accettate.
Attivando il comando Enable il server TCP viene posto in ascolto sulla porta indicata, sulla connessione di un client
viene incrementato il numero di ConnPeers ed uno degli stream definiti in FileArr viene valorizzato ed aperto. Sullo
stream aperto è possibile utilizzare le funzioni di TermIO per gestire la comunicazione.
Per modificare i parametri occorre disattivare e poi riabilitare il comando Enable.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
9942005 Blocco funzione non supportato.
9942050 Errore allocazione blocco funzione.
9942060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9942070 Errore versione blocco funzione.
9942100 Blocco funzione eseguito in task diversa da Back.
9942110 File pointer non null
9942115 Errore apertura socket.
9942120 Errore set socket option.
9942125 Errore definizione IP locale.
9942130 Errore bind.
9942990 Non implementata nel simulatore.
Esempi
Nell'esempio è attivato un server TCP in ascolto sulla porta 1000. Il server accetta massimo 2 connessioni.
Connettendosi in telnet alla porta 1000 inviando un carattere se ne riceve l'echo.
Definizione variabili
IF (SysFirstLoop) THEN
TCPServer.FilesArr:=ADR(Fp); (* Files array *)
TCPServer.LocalAdd:=ADR('0.0.0.0'); (* Local address *)
TCPServer.LocalPort:=1000; (* Local port *)
TCPServer.MaxConn:=2; (* Accepted connections *)
TCPServer.FlushTm:=50; (* Flush time (mS) *)
TCPServer.LifeTm:=0; (* Life time (S) *)
TCPServer.RxSize:=128; (* Rx buffer size *)
TCPServer.TxSize:=128; (* Tx buffer size *)
END_IF;
IF (SysFIsOpen(Fp[j])) THEN
IF (TO_BOOL(SysGetIChars(Fp[j])) AND TO_BOOL(SysGetOSpace(Fp[j]))) THEN
i:=Sysfputc(Sysfgetc(Fp[j]), Fp[j]); (* Character echo *)
END_IF;
END_IF;
END_FOR;
Type Library
7.17.2 SysTCPClient, opens a TCP/IP connection
FB XTarget_12_0_0
Questa function block gestisce la comunicazione con protocollo TCP/IP in modalità client.
Occorre definire l'indirizzo IP PeerAdd e la porta TCP PeerPort del sistema server a cui
ci si vuole connettere. Attivando il comando Connect viene aperta la connessione con il
sistema server. Se la connessione và a buon fine viene attivato Connected e sull'uscita
File viene ritornato lo stream da utilizzarsi per lo scambio dati con il sistema server.
In LocalAdd e LocalPort è possibile definire l'indirizzo IP e la porta della interfaccia di
rete da cui effettuare la connessione.
Se la connessione non è possibile viene generato Fault.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
9941005 Blocco funzione non supportato.
9941050 Errore allocazione blocco funzione.
9941060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9941070 Errore versione blocco funzione.
9941100 Blocco funzione eseguito in task diversa da Back.
9941115 Errore apertura socket.
9941120 Errore set socket option.
9941125 Errore definizione IP locale.
9941130 Errore bind.
9941135 Errore risoluzione indirizzo
9941140 Errore connect.
9941990 Non implementata nel simulatore.
Esempi
Nell'esempio è attivata una connessione verso un server TCP in ascolto sulla porta 1000. Eseguita la connessione i
caratteri ricevuti dal server sono reinviati in echo. La porta locale è fissata a 1000.
Definizione variabili
Un esempio identico al precedente in linguaggio ST Nell'esempio ho lasciato il client libero di scegliersi la porta.
Definizione variabili
IF (SysFirstLoop) THEN
TCPClient.PeerAdd:=ADR('192.168.0.77'); (* Peer address *)
TCPClient.PeerPort:=1000; (* Peer port *)
TCPClient.LocalAdd:=ADR('0.0.0.0'); (* Local address *)
TCPClient.LocalPort:=0; (* Local port *)
TCPClient.FlushTm:=50; (* Flush time (mS) *)
TCPClient.LifeTm:=20; (* Life time (S) *)
TCPClient.RxSize:=128; (* Rx buffer size *)
TCPClient.TxSize:=128; (* Tx buffer size *)
END_IF;
IF (SysFIsOpen(Fp)) THEN
IF (TO_BOOL(SysGetIChars(Fp)) AND TO_BOOL(SysGetOSpace(Fp))) THEN
i:=Sysfputc(Sysfgetc(Fp), Fp); (* Character echo *)
END_IF;
END_IF;
Type Library
7.17.3 SysUDPServer, accepts UDP connections
FB XTarget_12_0
Questa function block gestisce la comunicazione con protocollo UDP in modalità server.
Occorre fornire l'indirizzo di un array di flussi dati streams al parametro FilesArr. Occorre
definire la porta UDP da porre in ascolto ed il numero di connessioni contemporanee
accettate.
Attivando il comando Enable il server UDP viene posto in ascolto sulla porta indicata,
sulla connessione di un client viene incrementato il numero di ConnPeers ed uno degli
stream definiti in FileArr viene valorizzato ed aperto. Sullo stream aperto è possibile
utilizzare le funzioni di TermIO per gestire la comunicazione.
Per modificare i parametri occorre disattivare e poi riabilitare il comando Enable.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
9944005 Blocco funzione non supportato.
9944050 Errore allocazione blocco funzione.
9944060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9944070 Errore versione blocco funzione.
9944100 Blocco funzione eseguito in task diversa da Back.
9944110 File pointer non NULL.
9944115 Errore apertura socket.
9944120 Errore set socket option.
9944125 Errore definizione IP locale.
9944130 Errore bind.
9944990 Non implementata nel simulatore.
Esempi
Nell'esempio è attivato un server UDP in ascolto sulla porta 2000. Il server accetta massimo 2 connessioni.
Connettendosi in telnet alla porta 1005 inviando un carattere se ne riceve l'echo.
Definizione variabili
IF (SysFirstLoop) THEN
UDPServer.FilesArr:=ADR(Fp); (* Files array *)
UDPServer.LocalAdd:=ADR('0.0.0.0'); (* Local address *)
UDPServer.LocalPort:=1000; (* Local port *)
UDPServer.MaxConn:=2; (* Accepted connections *)
UDPServer.FlushTm:=50; (* Flush time (mS) *)
UDPServer.LifeTm:=0; (* Life time (S) *)
UDPServer.RxSize:=128; (* Rx buffer size *)
UDPServer.TxSize:=128; (* Tx buffer size *)
END_IF;
IF (SysFIsOpen(Fp[j])) THEN
IF (TO_BOOL(SysGetIChars(Fp[j])) AND TO_BOOL(SysGetOSpace(Fp[j]))) THEN
i:=Sysfputc(Sysfgetc(Fp[j]), Fp[j]); (* Character echo *)
END_IF;
END_IF;
END_FOR;
Type Library
7.17.4 SysUDPClient, opens a UDP connection
FB XTarget_12_0
Questa function block gestisce la comunicazione con protocollo UDP in modalità client.
Occorre definire l'indirizzo IP PeerAdd e la porta TCP PeerPort del sistema server a cui ci
si vuole connettere. Attivando il comando Connect viene aperta la connessione con il
sistema server. Se la connessione và a buon fine viene attivato Connected e sull'uscita
File viene ritornato lo stream da utilizzarsi per lo scambio dati con il sistema server.
Se la connessione non è possibile viene generato Fault.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
9943005 Blocco funzione non supportato.
9943050 Errore allocazione blocco funzione.
9943060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9943070 Errore versione blocco funzione.
9943100 Blocco funzione eseguito in task diversa da Back.
9943115 Errore apertura socket.
9943120 Errore set socket option.
9943125 Errore definizione IP locale.
9943130 Errore bind.
9943135 Errore risoluzione indirizzo
9943145 Errore apertura file.
9943990 Non implementata nel simulatore.
Esempi
Nell'esempio è attivata una connessione verso un server TCP in ascolto sulla porta 1000. Eseguita la connessione i
caratteri ricevuti dal server sono reinviati in echo.
Definizione variabili
IF (SysFirstLoop) THEN
UDPClient.PeerAdd:=ADR('192.168.0.77'); (* Peer address *)
UDPClient.PeerPort:=1000; (* Peer port *)
UDPClient.LocalAdd:=ADR('0.0.0.0'); (* Local address *)
UDPClient.LocalPort:=1000; (* Local port *)
UDPClient.FlushTm:=50; (* Flush time (mS) *)
UDPClient.LifeTm:=20; (* Life time (S) *)
UDPClient.RxSize:=128; (* Rx buffer size *)
UDPClient.TxSize:=128; (* Tx buffer size *)
END_IF;
(* ---------------------------------------------------------------------- *)
(* ECHO LOOP *)
(* ---------------------------------------------------------------------- *)
(* Execute the echo loop. *)
IF (SysFIsOpen(Fp)) THEN
IF (TO_BOOL(SysGetIChars(Fp)) AND TO_BOOL(SysGetOSpace(Fp))) THEN
i:=Sysfputc(Sysfgetc(Fp), Fp); (* Character echo *)
END_IF;
END_IF;
Type Library
7.17.5 SysGetIpInfos, returns IP infos
FB XTarget_12_0
Questo blocco funzione ritorna le informazioni della connessione. Passando al blocco funzione
un File di tipo TCP o UDP è possibile avere in uscite le informazioni relative.
Esempi
Nell'esempio sono visualizzate le informazioni di connessione al socket.
Definizione variabili
Type Library
7.17.6 SysIPReach, IP address is reachable
FB XTarget_07_0
Questo blocco funzione esegue controllo se un indirizzo IP è raggiungibile, viene eseguito l'invio
del comando Ping al sistema e se si ottiene risposta viene attivato Done.
La variabile Refresh ritorna la percentuale di tempo trascorsa dall'ultima esecuzione del
comando Ping sul sistema. Raggiunto il 50% del tempo circa 25 Secondi viene eseguito un
nuovo comando Ping.
Enable (BOOL) Abilitazione blocco funzione, attivandolo viene eseguito un ping ogni 25 Sec
PeerIP (STRING[15]) Stringa di definizione indirizzo IP di cui eseguire la ricerca.
Done (BOOL) Attivo se indirizzo IP è raggiungibile (Risposta da Ping).
Fault (BOOL) Attivo per un loop di programma se errore gestione.
Refresh (USINT) Percentuale di tempo da ultima esecuzione Ping.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
9974005 Blocco funzione non supportato.
9974050 Errore allocazione blocco funzione.
9974060 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
9974070 Errore versione blocco funzione.
9974100 Blocco funzione eseguito in una task diversa da Back.
9974110 Errore indirizzo IP definito PeerIP.
9974200 Errore invio richiesta Ping.
9974250 Errore risposta a richiesta Ping.
9974990 Non implementata nel simulatore.
Esempi
Nell'esempio viene controllato se l'indirizzo IP 8.8.8.8 è raggiungibile, in tal caso si attiva l'uscita Done.
Definizione variabili
Type Library
7.17.7 UDPDataTxfer, UDP data transfer
FB eLLabNetworkLib_A000
Questo blocco funzione esegue il trasferimento di un blocco di memoria tra due sistemi
utilizzando una connessione UDP su rete ethernet. Occorre passare alla FB un flusso dati
stream indicato dal parametro File, precedentemente aperto dalla funzione Sysfopen ed il
socket deve essere stato posto in condizione di listening dalla FB SysSktListen.
Il parametro PeerIP indica l'indirizzo IP del sistema con cui avviene il trasferimento dati,
Port indica la porta tramite la quale il trasferimento avviene (Deve assumere lo stesso
valore su entrambi i sistemi).
Il parametro Timeout definisce il tempo massimo per il trasferimento dei dati, l'invio dei dati
si conclude con la ricezione di un acknowledge da parte dell'altro sistema, un ciclo di invio
dati e ricezione acknowledge richiede 2 loop di esecuzione programma. Se dopo l'invio non
viene ricevuto Ack entro un tempo pari a Timeout/4, viene effettuato un altro invio e cosi di
seguito fino allo scadere del tempo definito. Per garantire almeno 3 retries si consiglia di impostare come tempo di
timeout un valore pari a 10 volte il tempo massimo di loop (Scegliendo quello maggiore tra i due sistemi in
comunicazione).
L'invio dei dati è automatico sulla variazione di uno qualsiasi dei bytes del buffer di trasmissione, per garantire il
controllo sul collegamento tra i due sistemi, ogni tempo pari a Timeout viene comunque eseguito un invio del buffer di
memoria.
Se i due sistemi sono in comunicazione si attiva l'uscita Done, RxDataOk si attiva per un loop ad ogni ricezione del
buffer dati dall'altro sistema, mentre TxDataSent si attiva per un loop al termine della trasmissione del buffer dati verso
l'altro sistema.
Enable (BOOL) Abilitazione blocco funzione.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
PeerIP (STRING[15]) Stringa di definizione indirizzo IP del sistema con cui avviene il trasferimento dati.
Port (UINT]) Porta tramite la quale avviene il trasferimento dati (Stesso valore su entrambi i sistemi).
RxDBuffer (@USINT]) Puntatore al buffer dove devono essere trasferiti i dati ricevuti.
TxDBuffer (@USINT]) Puntatore al buffer dove sono presenti i dati da trasmettere.
ByteNr (UDINT]) Numero di bytes scambiati.
Timeout (UINT]) Tempo massimo per il trasferimento del buffer dati (mS).
Done (BOOL) Attivo se i due sistemi sono in comunicazione tra di loro.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
RxDataOk (BOOL) Attivo per un loop di programma su ricezione buffer dati da altro sistema.
TxDataSent (BOOL) Attivo per un loop di programma al termine trasmissione buffer dati verso altro sistema.
Errors (UINT]) Numero di errori, incrementato ad ogni nuovo errore, raggiunto valore massimo riparte da 0.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10014050 Valore di File non definito.
10014100 Terminato spazio memoria rilocabile, non è possibile eseguire l''FB.
10014200~2 Errore ricezione frame dati blocco di memoria.
10014300~2 Errore ricezione frame acknowledge.
10014400 Ricevuto comando non gestito.
10014500~1 Errore sequenze di trasmissione.
10014600 Timeout invio frame dati blocco di memoria.
Esempi
Nell'esempio viene scambiato un blocco di memoria di 16 bytes verso il sistema con IP 192.168.0.126.
Definizione variabili
Type Library
7.17.8 DataStreamExch, exchanges data between two I/O streams
Function eLLabNetworkLib_A000
Questo blocco funzione esegue lo scambio data tra due stream di I/O. Definendo uno stream
come socket TCP e l'altro come seriale è possibile realizzare un convertitore Ethernet/Seriale.
In FpA ed FpB occorre indicare il file pointer in uscita dalla funzione Sysfopen di apertura dello
stream di I/O. Il FB riceve i dati da uno stream li bufferizza in un buffer di dimensione DBSize e
quando non riceve più dati per il tempo definito in DDelay li invia sull'altro stream.
Se sono ricevuti più dati della dimensione definita del buffer i dati sono immediatamente inviati
sull'altro stream e viene generato un errore.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10048100 Errore allocazione buffer dati.
10048200 Buffer pieno su ricezione dati da stream (A).
10048250 Buffer pieno su ricezione dati da stream (B).
Esempi
Semplice convertitore Ethernet/Seriale, accetta connessione TCP su porta 2000 e utilizza la porta seriale COM2.
Definizione variabili
IF (SysFirstLoop) THEN
(* ------------------------------------------------------------------------ *)
(* DATA STREAM EXCHANGE *)
(* ------------------------------------------------------------------------ *)
(* Execute the data stream exchange. *)
(* [End of file] *)
Type Library
7.17.9 ModbusTCPGateway, modbus TCP gateway
FB eLLabNetworkLib_A000
Questo blocco funzione opera come gateway Modbus tra una connessione modbus TCP
ed una connessione seriale Modbus RTU. In FpTCP occorre passare lo stream di I/O da
cui arrivano le richieste Modbus TCP. In FpRTU occorre passare lo stream verso cui
sono inviate le richieste convertite in Modbus RTU.
In IFTime occorre definire il tempo di pausa su ricezione caratteri da porta seriale
(Modbus RTU). In Timeout si definisce il tempo massimo di esecuzione di un comando
Modbus TCP (Da quando il comando viene ricevuto a quando dopo la conversione in
RTU viene ritornata la risposta).
L'ingresso SpyOn se attivo permette di spiare il funzionamento della FB. In caso di errore
esecuzione o tempo di esecuzione superiore al tempo definito in Timeout, viene attivata
per un loop di programma l'uscita Fault.
Enable (BOOL) Abilitazione blocco funzione.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
FpTCP (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
FpRTU (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
IFTime (UDINT) Tempo ricezione caratteri (μS), deve essere definito in base al baud rate.
Timeout (UINT) Tempo massimo esecuzione comando espresso in mS. Se il comando non termina nel tempo
definito viene abortito ed attivata l'uscita Fault.
Enabled (BOOL) Blocco funzione abilitato.
Fault (BOOL) Attivo per un loop di programma in caso di errore.
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 Tx: Invio frame comando modbus RTU.
16#00000002 Rx: Ricezione frame risposta modbus RTU.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10053050 Timeout esecuzione.
10053100~1 Errori gestione frame Modbus TCP.
10053200~1 Errori gestione frame Modbus RTU.
Esempi
Semplice gateway Modbus TCP/RTU, accetta connessione TCP su porta 2000 e utilizza la porta seriale COM2.
Definizione variabili
IF (SysFirstLoop) THEN
(* ------------------------------------------------------------------------ *)
(* MODBUS TCP/RTU GATEWAY *)
(* ------------------------------------------------------------------------ *)
(* Execute the Modbus TCP/RTU gateway. *)
(* [End of file] *)
Type Library
7.17.10 SNTPRequest, sends a SNTP request
FB eLLabNetworkLib_A100
Questo blocco funzione esegue la lettura da un server di tempo del valore di UTC.
Attivando il comando di Query viene eseguita la richiesta del valore di tempo dal server il
cui indirizzo IP è passato in NTPServer.
L'FB interroga il server e se riceve risposta corretta ritorna in UTCTime il valore di tempo
UTC in Epoch. In Offset viene ritornata la differenza in mS tra il valore UTC ritornato e
l'orologio NTP di riferimento.
Terminata l'esecuzione si attiva l'uscita Done, per effettuare una nuova lettura di tempo
occorre disattivare e poi riattivare l'ingresso Query. In RTDelay è ritornato il tempo
necessario all'invio della richiesta ed alla ricezione della risposta dal server NTP.
Query (BOOL) Comando attivazione richiesta.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB
NTPServer (@USINT) Pointer definizione server NTP. Può essere definito sia l'IP che l'URL.
Done (BOOL) Attivo a fine esecuzione, si attiva anche in caso di Fault.
Ok (BOOL) Attivo per un loop di programma se query eseguita correttamente.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
RTDelay (REAL) Round trip delay, tempo per inviare la richiesta e ricevere la risposta dal server (mS).
UTCTime (UDINT) Data/Ora in UTC espressa in Epoch time.
Offset (REAL]) Differenza tra il valore UTC ritornato e l'orologio NTP di riferimento (mS).
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 '--' Informazioni stato richiesta NTP.
16#00000002 '--' Report di tutte le operazioni eseguite.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10052010 FB eseguita in una task diversa dalla task di background.
10052110 Errore connessione UDP. Se attivo Spy viene ritornato in Spy numero di errore connessione UDP.
10014200~2 Errore nelle sequenze di gestione.
Esempi
Nell'esempio attivando l'ingresso Di00M00 viene richiesto il tempo dal server ntp1.inrim.it ed aggiornato il real time
clock del sistema
Definizione variabili
Definizione variabili
Esempio ST
(* Check if time theshold to perform synchronization (Every 60 Sec). *)
IF (SNTPReq.Done) THEN
SNTPReq.Query:=FALSE; (* Query On *)
IF (SNTPReq.Ok) THEN i:=SysSetUTCDateTime(SNTPReq.UTCTime); END_IF;
END_IF;
Type Library
7.17.11 DNSRequest, sends a DNS request
FB eLLabNetworkLib_A000
Questo blocco funzione invia una richiesta DNS. Indicando in DNSServerIP l'indirizzo
IP di un server DNS (Esempio quello di Google 8.8.8.8) è possibile effettuare la
richiesta di risoluzione di un dominio. Viene ritornato l'indirizzo IP ed il tempo di vita
dell'URL.
Attivando l'ingresso Enable viene effettuata la richiesta di risoluzione dell'URL al
server DNS. Se il server risolve l'URL viene attivata l'uscita Done e su DomainIP
viene ritornato l'IP relativo.
Se Enable rimane attivo il FB controlla in tempo di vita della voce DNS ed esegue il
riaggiornamento automatico dell'indirizzo IP. L'ingresso SpyOn se attivo permette di
spiare il funzionamento del FB.
Enable (BOOL) Comando abilitazione esecuzione. Per rieseguire il comando disabilitare e poi riabilitare
questo ingresso.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
DNSServerIP (STRING[15]) Stringa di definizione IP server DNS.
Domain (@USINT) Indirizzo stringa definizione URL di cui si desidera risolvere l'IP.
QType (UINT) Tipo di query.
Codice Descrizione
16#0001 A record (host addresses).
16#0002 Name servers (NS) records (Not managed).
16#000F Mail server (MX).
Done (BOOL) Si attiva al termine della esecuzione comando.
Fault (BOOL) Attivo per un loop se errore esecuzione comando.
Domain (STRING[15]) Stringa di definizione IP trovato.
RTime (UDINT) Tempo riferimento per controllo sul tempo di vita richiesta (uS).
TTL (UDINT) Tempo di vita richiesta (S).
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 Tx: Invio richiesta DNS.
16#00000002 Rx: Ricezione risposta DNS.
16#10000000 Lg: Messaggio di log.
16#20000000 Wr: Messaggio di warning.
16#40000000 Er: Messaggio di errore.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10055010 FB eseguita in una task diversa dalla task di background.
10055020 File non corretto.
10055100 Errore lunghezza nome dominio da risolvere.
10055200 Timeout risposta da server.
10055210~5 Formato pacchetto ricevuto non corretto.
10055800 Errore esecuzione.
Esempi
Nell'esempio attivando Di00CPU viene richiesto l'indirizzo IP di “elsist.it” al server DNS di Google.
Definizione variabili
Type Library
7.17.12 HTTPGetPage, get a web page with HTTP protocol
FB eLLabNetworkLib_A000
Questo blocco funzione esegue la richiesta di una pagina web con il protocollo HTTP. Su
fronte attivazione ingresso Enable viene inviata la richiesta HTTP della pagina definita in
Page all'indirizzo URL del server definito in Host. La pagina viene richiesta con i
parametri definiti nel buffer Request. Ricevuta la pagina si attiva per un loop di
programma l'uscita Ok.
La pagina richiesta viene ritornata nel buffer definito in PBuffer. la cui lunghezza deve
essere definita in PBLength. In PLength è ritornata la lunghezza della pagina ricevuta,
mentre in PLTime il tempo necessario per l'intera richiesta.
In caso di errore esecuzione o tempo di esecuzione comando superiore al tempo definito
in Timeout, viene attivata per un loop di programma l'uscita Fault.
L'uscita Done si attiva al termine della esecuzione della richiesta e su errore.Per acquisire
nuovamente la pagina occorre disabilitare e poi riabilitare l'ingresso Enable.
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 'Tx' Invio dati verso server HTTP
16#00000002 'Rx' Ricezione dati da server HTTP
16#00000004 'Rq' Stringa richiesta
16#00000008 'Rc' Stringa ricevuta
16#10000000 'Lg' Log dati di esecuzione
16#40000000 'Er' Errori di esecuzione
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10054020 FB eseguita in una task diversa dalla task di background.
10054100 Host ha chiuso la connessione.
10054110 Timeout richiesta pagina.
10054200 Campo Request troppo lungo.
10054300~2 Errore ricezione lunghezza pagina.
Esempi
Nell'esempio attivando Di00CPU viene eseguita la richiesta di una pagina sul sito altervista, sono passati in GET 2
parametri Dividend e Divisor. La pagina ruichiesta è uno script PHP che esegue la divisione tra i valori passati. E'
possibile testare il funzionamento dello script digitando in un browser l'indirizzo:
http:\\www.slimline.altervista.org/Mdp095a000/Ptp119b000/Division.php?Dividend=500&Divisor=10
Se lo script è attivo viene ritornata una pagina con:
The result is: 50
La stessa stringa ritornata nel browser è visibile nella variabile PContent.
Definizione variabili
Come si vede lo script invia in echo il risultato della divisione. I parametri posti in GET alla richiesta sono
automaticamente trasferiti negli statements $_REQUEST['Dividend'] e $_REQUEST['Divisor']. Come si vede è quindi
possibile passare in GET allo script tutti i valori che si desiderano.
Il valore di ritorno dallo script definito con lo statement echo verrà trasferito nel buffer PContent del nostro programma
e quindi è possibile operare su di esso con le istruzioni di gestione stringa. Ecco un esempio in linguaggio ST.
Definizione variabili
IF (SysFirstLoop) THEN
HTTPPr.SpyOn:=TRUE; (* Activate the spy *)
HTTPPr.PeerAdd:=ADR('www.slimline.altervista.org'); (* Server URL *)
HTTPPr.Host:=HTTPPr.PeerAdd; (* Hostname *)
HTTPPr.PeerPort:=80; (* Server port *)
HTTPPr.Page:=ADR('/Mdp095a000/Ptp119b000/Division.php'); (* Web page *)
HTTPPr.Request:=ADR(Request); (* GET parameters *)
HTTPPr.PBuffer:=ADR(PContent); (* Return page buffer *)
HTTPPr.PBLength:=SIZEOF(PContent); (* Page buffer length *)
HTTPPr.Timeout:=5000; (* Execution timeout *)
END_IF;
(* ------------------------------------------------------------------------ *)
(* GET THE PAGE *)
(* ------------------------------------------------------------------------ *)
(* Check if the get command is active. *)
HTTPPr(); (* FB execution *)
HTTPPr.Enable:=FALSE; (* HTTP get page enable *)
IF (HTTPPr.Ok) THEN
i:=SysVarsscanf(SysStrFind(ADR(PContent), ADR('The result is:'), FIND_GET_END), '%f', REAL_TYPE,
ADR(Result));
END_IF;
(* [End of file] *)
Type Library
7.17.13 FTPClient, connect to a FTP server
FB eLLabNetworkLib_A200
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 Tx: Comandi inviati al server FTP.
16#00000002 Rx: Stati risposta dal server FTP.
16#10000000 Lg: Messaggio di log.
16#40000000 Er: Messaggio di errore.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10063020 FB eseguita in una task diversa dalla task di background.
10063050 Timeout esecuzione.
10063100~3 Errore ricezione indirizzo IP passive connection.
10063110~1 Errore ricezione porta passive connection.
10063200 Errore apertura file locale su comando Store.
10063210 Errore 553 da server FTP, non è possibile aprire il file remoto su comando Store.
10063300 Errore apertura file locale su comando Retrieve.
10063310 Errore 550 da server FTP, on è possibile aprire il file remoto su comando Retrieve.
10063390 Errore scrittura file locale su comando Retrieve.
10063500 Ricezione stringa troppo lunga da server FTP.
Esempi
Nell'esempio attivando Di00CPU viene eseguito un comando di Store, il file locale Storage/MyForm.bin viene
trasferito sul server FTP con il nome MyForm.bin.
Attivando Di01CPU viene eseguito un comando di Retrieve, il file MyForm.bin viene trasferito dal server FTP verso il
file locale Storage/MyForm.bin.
Definizione variabili
IF (SysFirstLoop) THEN
FTP.SpyOn:=TRUE; (* Spy active *)
FTP.FTPServer:=ADR('myserver'); (* Server FTP *)
FTP.User:='myuser'; (* User *)
FTP.Password:='mypassword'; (* Password *)
FTP.CnAliveTm:=10; (* Connection alive time (S) *)
END_IF;
CASE (CaseNr) OF
0:
FTP.Connect:=FALSE; (* Abilitazione connessione *)
IF (Di00CPU) THEN CaseNr:=10; RETURN; END_IF;
IF (Di01CPU) THEN CaseNr:=20; RETURN; END_IF;
(* Connessione al server. *)
10:
FTP.Connect:=TRUE; (* Connect to server *)
CaseNr:=CaseNr+1; (* Program case *)
11:
IF NOT(FTP.Connected) THEN RETURN; END_IF;
FTP.LocalFile:=ADR('Storage/MyForm.bin');
FTP.RemoteFile:=ADR('MyForm.bin');
FTP.Store:=TRUE; (* Store command *)
CaseNr:=CaseNr+1; (* Program case *)
12:
IF NOT(FTP.Done) THEN RETURN; END_IF;
FTP.Store:=FALSE; (* Store command *)
CaseNr:=0; (* Program case *)
(* Connessione al server. *)
20:
FTP.Connect:=TRUE; (* Connect to server *)
CaseNr:=CaseNr+1; (* Program case *)
21:
IF NOT(FTP.Connected) THEN RETURN; END_IF;
FTP.LocalFile:=ADR('Storage/MyForm.bin');
FTP.RemoteFile:=ADR('MyForm.bin');
FTP.Retrieve:=TRUE; (* Retrieve command *)
CaseNr:=CaseNr+1; (* Program case *)
22:
IF NOT(FTP.Done) THEN RETURN; END_IF;
FTP.Retrieve:=FALSE; (* Retrieve command *)
CaseNr:=0; (* Program case *)
END_CASE;
Type Library
7.18.1 STESnmpAcq, STE termometer acquisition over SNMP
FB eHwGSpLib_B000
Questo blocco funzione gestisce l'acquisizione del valore di temperatura delle due sonde
connesse al termometro IP STE. La connessione tra il termometro e lo SlimLine avviene su rete
ethernet utilizzando il protocollo SNMP.
Occorre passare alla FB un flusso dati stream indicato dal parametro File, precedentemente
aperto dalla funzione Sysfopen come socket UDP e posto in ascolto con il blocco funzione
SysSktListen.
Su fronte attivazione del comando Acquire, viene effettuata la lettura SNMP dal termometro
STE definito da indirizzo IP PeerIP, su porta PeerPort (Di default la porta SNMP è la 161). Se il
comando Acquire è mantenuto attivo, la lettura viene effettuata in modo ciclico.
L'uscita Done si attiva per un loop al termine della acquisizione dei due valori di temperatura.
Enable (BOOL) Abilitazione blocco funzione.
Acquire (BOOL) Comando acquisizione termometro STE. Sul fronte di attivazione si esegue la lettura del
valore di temperatura. Mantenuto attivo la lettura viene effettuata in modo ciclico.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
PeerIP (STRING[15]) Stringa di definizione indirizzo IP del termometro IP.
PeerPort (UINT]) Porta utilizzata per la connessione (Di default la porta SNMP è la 161).
Done (BOOL) Attivo per un loop di programma su fine lettura dati.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
Sensor1 (REAL) Valore di temperatura letto dal sensore 1 (°C).
Sensor2 (REAL) Valore di temperatura letto dal sensore 2 (°C).
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10013010 Valore di File non definito.
10013050 Timeout esecuzione.
10013060 Errore case gestione lettura.
10013100 Errore controllo indirizzo IP del dispositivo STE.
10013120 Errore ricezione dati da dispositivo STE.
10013200~1 Errore lettura sensore 1.
10013300~1 Errore lettura sensore 2.
Esempi
Nell'esempio è gestita l'acquisizione dei due valori di temperatura da un termometro STE ogni secondo. Il valore di
temperatura in gradi centigradi è ritornato sulle variabili Temperature[0] e Temperature[1]. L'uscita logica Do00M00 si
attiva alla prima esecuzione della acquisizione, mentre l'uscita logica Do01M00 si attiva in caso di errore di
acquisizione.
Definizione variabili
Type Library
7.18.2 sHWgSProtocol, HW group serial protocol
FB eHwGSpLib_B000
Questo blocco funzione gestisce la lettura di dispositivi HW group con il protocollo seriale RS485.
Occorre passare alla FB il puntatore al file di porta seriale stream indicato dal parametro File,
precedentemente aperto dalla funzione Sysfopen.
Attivando l'ingresso Enable viene effettuata la lettura del valore dal dispositivo connesso alla
porta seriale definita, terminata l'esecuzione si attiva l'uscita Done. Se il comando ha avuto esito
positivo si attiva l'uscita Ok, in caso contrario si attiva l'uscita Fault.
Per seguire nuovamente il comando occorre riabilitare l'ingresso Enable, Il blocco funzione è
stato realizzato per permetterne la connessione in cascata. In pratica è possibile connettere al
Done di un FB l'Enable di un'altro e così di seguito.
Enable (BOOL) Abilitazione blocco funzione.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Address (STRING[1]) Stringa di definizione indirizzo dispositivo.
Done (BOOL) Si attiva al termine della esecuzione comando.
Ok (BOOL) Si attiva se acquisizione valore riuscita.
Fault (BOOL) Si attiva su errore gestione.
Errors (UDINT) Numero di errori, incrementato ad ogni nuovo errore, raggiunto valore massimo riparte da 0.
TxFrame (STRING[8]) Contiene il frame inviato al dispositivo, può essere utilizzato in debug.
RxFrame (STRING[16]) Contiene il frame ricevuto dal dispositivo, può essere utilizzato in debug.
Value (REAL) Valore acquisito dal dispositivo.
Codici di errore
In caso di errore si attiva l'uscita Fault, il valore di Errors si incrementa e con SysGetLastError è possibile rilevare il
codice di errore.
10032010 Valore di File non definito.
10032050 Timeout esecuzione.
10032060 Errore case gestione.
10032100 FB usata in task fast o slow.
10013200~1 Errore nella gestione del protocollo di comunicazione.
10032300 Errore lettura valore.
Esempi
Nell'esempio è gestita l'acquisizione del valore di temperatura e di umidità da un HTemp.
Definizione variabili
Type Library
7.19.1 NMEASInterface, NMEA system interface
FB eNMEALib_B000
Questo blocco funzione gestisce l'interfaccia verso un dispositivo che invia sentenze NMEA
connesso al dispositivo di I/O definito in File, questo è un blocco funzione protetto per utilizzarlo
occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi funzione. E'
comunque possibile utilizzarlo liberamente in modo test per 30 Min.
L'FB riceve le sentenze NMEA dal dispositivo, ne controlla il prefisso comparandolo con la
stringa definita in DID, controlla se la sentenza ricevuta è corretta (Controllo sul CRC). L'uscita
Done si attiva per un loop ad ogni ricezione di sentenza NMEA corretta.
L'FB ritorna un NMEAID che deve essere passato alle FB collegate (FB di gestione sentenze NMEA). L'uscita
RxString riportano la stringa ricevuta dal dispositivo, in questo modo è possibile visualizzare in debug la
comunicazione con il dispositivo permettendo di visualizzare eventuali errori.
Enable (BOOL) Abilitazione blocco funzione.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
DID (STRING[2]) Stringa di definizione prefisso dispositivo.
Done (BOOL) Attivo per un loop di programma su ricezione sentenza corretta.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
NMEAID (UDINT) ID interfaccia con sistema NMEA da passare alle FB collegate.
RxString (STRING[82]) Contiene la stringa ricevuta dal dispositivo, può essere utilizzato in debug per verificare le
sentenze ricevute.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10017010 Valore di File non definito.
10017020 FB protetta, terminato tempo funzionamento in modo demo.
10017050 Timeout esecuzione.
10017070 Errore case gestione.
10017100~4 Errore ricezione sentenza NMEA.
Type Library
7.19.2 GLLSentence, Geographic Position sentence
FB eNMEALib_B000
Questo blocco funzione esegue la ricezione della sentenza GLL Geographic Position, si
collega al blocco funzione NMEASInterface di gestione dispositivo NMEA. Occorre
passare NMEAID in uscita dal blocco funzione di gestione dispositivo.
La sentenza GLL contiene le informazioni di latitudine, longitudine ora e fix, esempio di
sentenza $IIGLL,4419.0173,N,00829.6653,E,084550.00,A,2*09.
L'FB controlla correttezza dei campi della sentenza e ne estrae le informazioni di latitudine,
longitudine e tempo. L'uscita Done si attiva per un loop ad ogni ricezione di sentenza GLL
corretta.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10018010 NMEAID non definito.
10018020 NMEAID non corretto.
10018100~2 Errore nel valore di latitudine.
10018200~2 Errore nel valore di longitudine.
10018300~2 Errore nel valore ora UTC.
Esempi
E' disponibile un programma di esempio Ptp123*000 che gestisce l'interfaccia verso un navigatore satellitare con
l'interpretazione di alcune sentenze NMEA.
Nell'esempio riportato è gestita la ricezione di una sentenza GLL.
Definizione variabili
Esempio LD
Type Library
7.19.3 MWVSentence, Wind Speed and Angle sentence
FB eNMEALib_B000
Questo blocco funzione esegue la ricezione della sentenza MWV wind speed and angle, si
collega al blocco funzione NMEASInterface di gestione dispositivo NMEA. Occorre passare
NMEAID in uscita dal blocco funzione di gestione dispositivo.
La sentenza MWV contiene le informazioni di velocità e direzione del vento, esempio di sentenza
$IIMWV,120.09,R,4.53,N,A*35.
L'FB controlla correttezza dei campi della sentenza e ne estrae le informazioni di velocità e
direzione. L'uscita Done si attiva per un loop ad ogni ricezione di sentenza MWv corretta.
Enable (BOOL) Abilitazione blocco funzione.
NMEAID (UDINT) ID interfaccia con sistema NMEA fornito in uscita dal blocco funzione NMEASInterface.
Done (BOOL) Attivo per un loop di programma su ricezione sentenza MWV corretta.
Fault (BOOL) Attivo per un loop di programma se errore sentenza.
WSpeed (REAL) Valore di velocità del vento (Nodi).
WPAngle (REAL) Valore angolo polare (Relative) direzione vento.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10020010 NMEAID non definito.
10020020 NMEAID non corretto.
10020100 Errore nel valore di velocità vento.
Type Library
7.20.1 AuroraDSPMeasure, Aurora measure request to DSP
FB eLLabPowerOneLib_B100
Questo blocco funzione esegue la lettura delle misure dal DSP di un inverter Aurora della
Power One, connesso al dispositivo di I/O definito in File. Questo è un blocco funzione
protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e
blocchi funzione. E' comunque possibile utilizzarlo liberamente in modo test per 30 Min.
Viene utilizzata la funzione GetPolynomialCRC per il calcolo del CRC dei frame dati da e
verso l'inverter.
La connessione con gli inverters è in RS485 multidrop, occorre definire in Address l'indirizzo
dell'inverter con cui si vuole dialogare. In Measure occorre indicare il codice della misura da
leggere (Vedi codici misura).
Attivando l'ingresso Start viene eseguita la lettura della misura indicata, terminata la lettura viene attivata per un loop
l'uscita Done, in caso di errore esecuzione viene attivata per un loop l'uscita Fault ed incrementato il valore in Errors.
Enable (BOOL) Comando di abilitazione blocco funzione.
Start (BOOL) Comando di esecuzione lettura misura.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Address (USINT) Indirizzo inverter (Range da 0 a 255).
Measure (USINT) Tipo misura da effettuare su inverter (Vedi codici misura).
Done (BOOL) Attivo per un loop al termine della esecuzione del comando.
Fault (BOOL) Attivo per un loop su errore esecuzione del comando.
Value (REAL) Valore misura acquisito da inverter (E' nella relativa unità di misura).
Errors (UDINT) Numero di errori, incrementato ad ogni nuovo errore, raggiunto valore massimo riparte da 0.
Codici misura
Nella variabile Measure occorre definire il codice della misura da effettuare dall'inverter secondo la tabella.
Codice Descrizione Um
1 Grid Voltage (For three-phases systems is the mean) V
2 Grid Current (For three-phases systems is the mean) A
3 Grid Power (For three-phases systems is the mean) W
4 Frequency (For three-phases systems is the mean) Hz
5 Vbulk (For Inverter with more Bulk is the sum) V
6 Ileak (Dc/Dc) A
7 Ileak (Inverter) A
21 Inverter Temperature °C
22 Booster Temperature °C
23 Input 1 Voltage (Input Voltage for single channel module) V
25 Input 1 Current (Input Current for single channel module) A
26 Input 2 Voltage (Input Voltage for single channel module) V
27 Input 2 Current (Input Current for single channel module) A
28 Grid Voltage (Dc/Dc) V
29 Grid Frequency (Dc/Dc) Hz
Codice Descrizione Um
30 Isolation Resistance (Riso)
31 Vbulk (Dc/Dc) V
32 Average Grid Voltage (VgridAvg) V
33 VbulkMid V
34 Power Peak W
35 Power Peak Today W
36 Grid Voltage neutral V
37 Wind Generator Frequency Hz
38 Grid Voltage neutral-phase V
39 Grid Current phase r A
40 Grid Current phase s A
41 Grid Current phase t A
42 Frequency phase r Hz
43 Frequency phase s Hz
44 Frequency phase t Hz
45 Vbulk + V
46 Vbulk - V
47 Supervisor Temperature °C
48 Alim. Temperature °C
49 Heat Sink Temperature °C
61 Grid Voltage phase r V
62 Grid Voltage phase s V
63 Grid Voltage phase t V
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10030010 Valore di File non definito.
10030020 FB protetta, terminato tempo funzionamento in modo demo.
10030050 Timeout esecuzione.
10030070 Errore case gestione.
10030100 Errore CRC risposta da inverter Aurora.
10030200 Errore ricezione “Transmission state” da inverter Aurora.
10030251 Errore da inverter Aurora “Command is not implemented”.
10030252 Errore da inverter Aurora “Variable does not exist”.
10030253 Errore da inverter Aurora “Variable value is out of range”.
10030254 Errore da inverter Aurora “EEprom not accessible”.
10030255 Errore da inverter Aurora “Not Toggled Service Mode”.
10030256 Errore da inverter Aurora “Can not send the command to internal micro”.
10030257 Errore da inverter Aurora “Command not Executed”.
10030258 Errore da inverter Aurora “The variable is not available, retry”.
Esempi
Viene eseguita la lettura della misura 21 (Inverter Temperature) dall'inverter con indirizzo 4, il valore ritornato è trasferito
nella variabile Value. Di default la porta seriale và impostata a 19200, n 8, 1.
Definizione variabili
Esempio LD
Type Library
7.20.2 AuroraCEnergy, Aurora cumulated energy reading
FB eLLabPowerOneLib_B100
Questo blocco funzione esegue la lettura della energia generata da un inverter Aurora della
Power One, connesso al dispositivo di I/O definito in File. Questo è un blocco funzione
protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e
blocchi funzione. E' comunque possibile utilizzarlo liberamente in modo test per 30 Min.
Viene utilizzata la funzione GetPolynomialCRC per il calcolo del CRC dei frame dati da e
verso l'inverter.
La connessione con gli inverters è in RS485 multidrop, occorre definire in Address l'indirizzo
dell'inverter con cui si vuole dialogare. In Parameter occorre indicare il parametro da leggere
(Vedi codici parametro).
Attivando l'ingresso Start viene eseguita la lettura della misura indicata, terminata la lettura viene attivata per un loop
l'uscita Done, in caso di errore esecuzione viene attivata per un loop l'uscita Fault ed incrementato il valore in Errors.
Enable (BOOL) Comando di abilitazione blocco funzione.
Start (BOOL) Comando di esecuzione lettura misura.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Address (USINT) Indirizzo inverter (Range da 0 a 255).
Parameter (USINT) Codice parametro da acquisire da inverter (Vedi codici parametro).
Done (BOOL) Attivo per un loop al termine della esecuzione del comando.
Fault (BOOL) Attivo per un loop su errore esecuzione del comando.
Value (UDINT) Valore parametro acquisito da inverter (E' nella relativa unità di misura).
Errors (UDINT) Numero di errori, incrementato ad ogni nuovo errore, raggiunto valore massimo riparte da 0.
Codici parametro
Nella variabile Parameter occorre definire il codice del parametro da leggere dall'inverter secondo la tabella.
Codice Descrizione Um
0 Daily energy Kw
1 Weekly Energy Kw
3 Month Energy (Energy from the first day of current calendar month) Kw
4 Year Energy (Energy from the first day of current calendar year) Kw
5 Total Energy (Total lifetime) Kw
6 Partial Energy (Cumulated since reset) Kw
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10031010 Valore di File non definito.
10031020 FB protetta, terminato tempo funzionamento in modo demo.
10031050 Timeout esecuzione.
10031060 Codice parametro errato.
10031070 Errore case gestione.
10031100 Errore CRC risposta da inverter Aurora.
Esempi
Viene eseguita la lettura del totale energia prodotta dall'inverter con indirizzo 1, il valore ritornato è trasferito nella
variabile Value. Di default la porta seriale và impostata a 19200, n 8, 1.
Definizione variabili
Esempio LD
Facility codes
0 Kernel messages
1 User-level messages
2 Mail system
3 System daemons
4 Security/authorization messages
5 Messages generated internally by syslogd
6 Line printer subsystem
7 Network news subsystem
8 UUCP subsystem
9 Clock daemon
10 Security/authorization messages
11 FTP daemon
12 NTP subsystem
Severity codes
0 Emergencies Sistema inutilizzabile
1 Alerts Richiede intervento immediato
2 Critical Condizioni critiche
3 Errors Condizione d'errore
4 Warnings Condizioni di warning
5 Notifications Condizioni di anomalia non critici (bugs)
6 Informational Messaggi informativi
7 Debugging Messaggi di debug
Il messaggio prosegue poi con l'indicazione di data e ora, del nome del dispositivo che ha inviato il messaggio
Hostname ed il testo del messaggio Message.
Server Syslog
Un server SYSLOG è un punto centrale dove far arrivare tutti i messaggi di errore dei vari apparati hardware e software
di una rete quali router, switch, server, stampanti ecc... per avere un controllo centralizzato degli errori degli apparati.
SYSLOG è particolarmente diffuso in unix e conseguentemente sotto linux, in ambiente windows esistono programmi
freeware e/o a pagamento per la gestione del server. Il server può selezionare (filtrare) i messaggi in arrivo in base a
diversi criteri, ad ogni selezione corrisponde almeno una azione.
In pratica si tratta di stabilire dei criteri di selezione e l’azione da intraprendere in funzione della provenienza e tipo di
messaggio
Il criterio di selezione può essere ad esempio:
Priorità, Indirizzo IP del mittente del messaggio, Nome del Host, Testo (o parte di esso) del messaggio, Intervallo di
tempo di uno o più giorni della settimana.
Le azioni possono essere ad esempio:
Nessuna (ignorare il messaggio), Visualizzarlo nel programma di monitoraggio, Inviarlo ad un altro Syslog server,
Emettere un suono di allarme, Eseguire un programma, Inviare un E-mail, Memorizzare il messaggio in un Database
(esempio MySQL), Memorizzare il messaggio in un logfile, Eseguire uno script, ecc...
Per le mie necessità ho utilizzato Syslog Watcher (Sito http://www.snmpsoft.com), un ottimo programma gratuito, di
seguito uno screenshot con la visualizzazione di notifiche inviate da un sistema SlimLine.
Come si vede le varie notifiche sono suddivise con colori in base alla loro importanza e nel testo del messaggio è
possibile riportare qualsiasi informazione ad esempio il codice operatore che ha avuto accesso all'ingresso rilevato da
un lettore RFID.
Type Library
7.21.1 SysLogReport, send a report to Syslog server
FB eLLabLogLib_B000
Questo blocco funzione esegue l'invio di messaggi di notifica ad un server Syslog il cui
indirizzo IP è definito in SyslogIP e la porta in SyslogPort. Questo è un blocco funzione
protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e
blocchi funzione. E' comunque possibile utilizzarlo liberamente in modo test per 30 Min.
E' possibile impostare sia il codice di impianto Facility che di gravità Severity oltre al nome
del sistema host Hostname.
Attivando l'ingresso Send viene inviata la notifica al server Syslog, eseguito l'invio viene
attivata per un loop l'uscita Done, in caso di errore esecuzione viene attivata per un loop
l'uscita Fault.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10034020 FB protetta, terminato tempo funzionamento in modo demo.
10034080 FB usata in task fast o slow.
10034100 Server Syslog non raggiungibile, il server non risponde al ping.
Esempi
Nel seguente esempio, utilizzando i due ingressi del modulo CPU è possibile eseguire l'invio di un messaggio di notifica
al server Syslog con IP 192.168.0.81 sulla porta 514 in UDP.
Definizione variabili
Type Library
7.21.2 StringToLogFile_v1, salva una stringa in un file di log
FB eLLabLogLib_B100
Questo blocco funzione (Può essere utilizzato come una funzione, ha esecuzione
atomica) effettua il log della stringa StringToLog nel file su disco di nome
Filename. Ogni riga viene terminata con CR-LF. Al raggiungimento di
MaxRowsInFile righe nel file, se Circular è settato, si riprende a salvare dall'inizio
del file sovrascrivendo le righe già presenti. Se Circular non è settato non viene più
effettuato il log segnalando errore. La variabile MaxRowsLen permette di limitare la
lunghezza massima di ciascuna riga presente nel file di log.
Se Circular è settato se la lunghezza di StringToLog è inferiore a MaxRowsLen,
vengono aggiunti degli spazi sino ad avere lunghezza definita. In RowIndexPtr
occorre inserire l'indirizzo della variabile usata come indice della successiva riga in
cui fare log. Normalmente deve essere una variabile tamponata per permettere di
scrivere nel punto giusto anche dopo uno spegnimento-accensione del sistema. Se
invece non si usa una variabile tamponata, ad ogni spegnimento-accensione, si ripartirà a scrivere dall'inizio del file.
Quindi si può scegliere il comportamento voluto.
Questo è un blocco funzione protetto. Per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni
e blocchi funzione. E' comunque possibile utilizzarlo liberamente in modo test per 30 Min.
Attivando l'ingresso Write viene salvata su disco la stringa StringToLog. Eseguito il salvataggio, viene attivata per un
loop l'uscita Done. In caso di errore esecuzione viene attivata per un loop l'uscita Fault.
Enable (BOOL) Comando di abilitazione blocco funzione.
Write (BOOL) Comando di scrittura di StringToLog nel file.
StringToLog (@USINT) Puntatore a stringa di cui fare log.
Filename (STRING[32]) Percorso e nome del file in cui fare log (es.: 'SDCard/MyFile.txt').
Circular (BOOL) Indica se effettuare il riporto circolare delle righe di log.
MaxRowLen (USINT) Numero massimo di caratteri costituenti la singola riga del file di log.
MaxRowsInFile (UDINT) Numero massimo di righe nel file.
RowIndexPtr (@UDINT) Pointer alla variabile usata come indice della successiva riga di log.
Enabled (BOOL) Attivo su abilitazione blocco funzione.
Done (BOOL) Attivo per un loop se la scrittura nel file è riuscita.
Fault (BOOL) Attivo per un loop su errore esecuzione del comando.
Codici di errore
In caso di errore si attiva l'uscita Fault e con SysGetLastError è possibile rilevare il codice di errore.
10035020 FB protetta. Terminato il tempo di funzionamento in modo demo.
10035080 FB usata in task fast o slow.
10035100 Il valore di MaxRowLen è troppo grande.
10035110 Raggiunto il massimo numero di righe di log.
10035120 Errore apertura file.
10035130 Errore posizionamento nel file.
10035140 Errore scrittura nel file.
10035150 Errore chiusura file.
Esempi
Nel seguente esempio ad ogni attivazione dell'input Di00M00, viene salvata la stringa presente in Str nel file di nome
Storage/MyLog.txt. Avendo impostato Circular uguale TRUE, al raggiungimento di 100 log viene sovrascritto il primo.
La variabile LogIndex è una variabile mappata nell'area delle variabili tamponate (Vedi definizione nel riquadro rosso).
Definizione variabili
Type Library
7.21.3 FIFOFile, gestisce registro FIFO su file
FB eLLabLogLib_B100
Questo blocco funzione effettua la gestione di un registro FIFO su di un file (Può essere
eseguito in un solo loop di programma come una funzione). Attivando In i dati nel
buffer puntato da DIn per la dimensione indicata in LIn sono inseriti nel registro FIFO.
Attivando l'ingresso Out il primo record inserito nel registro viene trasferito nel buffer di
uscita puntato da DOut. Se la dimensione del buffer di uscita indicata in SOut è minore
della lunghezza del record FIFO il record viene troncato.
In LOut è ritornata la lunghezza reale del record FIFO. Quindi la condizione LOut >
SOut indica che il record è stato troncato.
In UTCTime è ritornato il valore di Data/Ora in UTC di inserimento nel registro FIFO del
record letto.
In FIFOIDx occorre fornire l'indirizzo di un array di 2 UDINT che devono essere allocati
dal programma. Se si desidera che la situazione dei dati nel FIFO sia mantenuta allo
spegnimento del sistema occorre allocare questo array in una memoria tampone.
L'uscita DataOn se attiva indica la presenza di almeno un record nel registro FIFO. In FIFOSpace viene ritornato lo
spazio disponibile. L'uscita Done si attiva per un loop di programma ad ogni esecuzione di un comando se l'esecuzione
ha esito positivo. In caso di errore esecuzione viene attivata per un loop l'uscita Fault.
In (BOOL) Comando di inserimento record nel registro FIFO.
Out (BOOL) Comando di lettura record dal registro FIFO.
FIFOIDx (@UDINT) Pointer alla variabile indice di gestione FIFO (Deve essere un array di 2 UDINT).
FIFOFile (STRING[32]) Percorso e nome del file in cui fare log (es.: 'SDCard/FIFO.bin').
FIFOSize (UDINT) Lunghezza massima del file FIFO.
DIn (@USINT) Pointer ai dati da inserire nel registro FIFO.
LIn (UDINT) Lunghezza record dati da inserire nel registro FIFO.
DOut (@USINT) Pointer al buffer per la memorizzazione dati letti dal registro FIFO.
SOut (UDINT) Lunghezza buffer per la memorizzazione dati letti dal registro FIFO.
Done (BOOL) Attivo per un loop se comando riuscito.
Fault (BOOL) Attivo per un loop su errore esecuzione comando.
DataOn (BOOL) Attivo se almeno un record dati è presente nel FIFO.
FIFOSpace (UDINT) Spazio disponibile nel file FIFO.
LOut (UDINT) Lunghezza record letto da FIFO. La condizione LOut > SOut indica che il record è stato
troncato.
UTCTime (UDINT) Data/Ora in UTC di inserimento nel FIFO del record letto.
Codici di errore
In caso di errore si attiva l'uscita Fault e con SysGetLastError è possibile rilevare il codice di errore.
10056050 Non è indicato il valore di FIFOIDx.
10056100 FB usata in task fast o slow.
10056200 Lunghezza record da inserire in FIFO LIn errata.
10056201 Non c'è spazio in FIFO per contenere record.
10056201 Lunghezza record da inserire in FIFO errata.
1005621 (0~4) Errori nell'inserimento del record nel registro FIFO.
10056300 Dimensione buffer memorizzazione dati record letti da FIFO LOut errata.
10056301 Non vi sono dati nel registro FIFO.
1005631 (0~7) Errori nella lettura del record dal registro.
Esempi
Nel seguente esempio sul fronte di variazione dell'input Di00CPU sono inseriti più records nel registro FIFO. Ad ogni
attivazione dell'ingresso Di01CPU viene letto ed eliminato dal registro FIFO il record inserito più datato.
Definizione variabili
IF (SysFirstLoop) THEN
FIFO.FIFOFile:='Storage/FIFO.bin'; (* Filename *)
FIFO.FIFOIDx:=ADR(FIFOIDx); (* FIFO indexes *)
FIFO.FIFOSize:=1000; (* FIFO file size *)
END_IF;
Counter:=Counter+1; (* Counter *)
i:=SysVarsnprintf(ADR(FIFOData), SIZEOF(FIFOData), 'Counter=%d', UDINT_TYPE, ADR(Counter));
FIFO(In:=TRUE, DIn:=ADR(FIFOData), LIn:=LEN(FIFOData)); (* Write record on FIFO *)
END_IF;
END_IF;
(* [End of file] *)
Ecco lo screenshot del programma di esempio in esecuzione. Come si vede le due variabili FIFOIDx assumono lo
stesso valore quando il registro FIFO è vuoto.
Se FIFOIDx è dichiarato RETAIN è possibile mantenere i dati registrati nel FIFO anche a sistema spento.
Type Library
7.21.4 FileMemoryDump, dump memoria su file
FB eLLabLogLib_B000
Questo blocco funzione effettua il dump di una zona di memoria memoria a partire da
indirizzo definito in MBufferPtr per il numero di bytes definito in MBufferSize su di un file
su disco di nome Filename.
Con un comando impulsivo su ingresso Write viene creato il file ed il contenuto della
memoria viene scritto nel file. Con un comando impulsivo su ingresso Read viene letto il
file ed il suo contenuto trasferito in memoria.
Terminato il comando viene attivata per un loop l'uscita Done, in caso di errore esecuzione
viene attivata per un loop l'uscita Fault.
Il file di dump su disco è un file ascii quindi è possibile editarlo con un qualsiasi text editor, ecco un esempio di file.
00000000: 00 AB 12 34 00 00 00 00 | 00 00 00 12 00 0F 0A CC
00000010: 02 00 00 00 00 00 00 00 | EF C0 DD 00 00 00 01 00
Codici di errore
In caso di errore si attiva l'uscita Fault e con SysGetLastError è possibile rilevare il codice di errore.
10036070 Errore case gestione.
10036100 FB usata in task fast o slow.
10036200 Errore apertura file su comando di lettura.
10036210 Errore posizionamento file su comando di lettura.
10036220 Errore lettura da file su comando di lettura.
10036230 Errore chiusura file su comando di lettura.
10036240~4 Errore dati presenti su file di dump su comando di lettura.
10036400 Errore apertura file su comando di scrittura.
10036410 Errore posizionamento file su comando di scrittura.
10036420 Errore scrittura su file su comando di scrittura.
10036430 Errore chiusura file su comando di scrittura.
Esempi
Nel seguente esempio sul fronte di attivazione dell'input Di02M00 viene eseguito il dump del buffer di memoria
DumpBuffer nel file Storage/Dump.txt. Dopo aver eseguito il dump attivando l'input Di01M00 è possibile rileggere i
dati dal file di dump e ritrasferirli nel buffer di memoria.
Definizione variabili
PLC Node 2
MMasterDataTxfer
2 MyNode
DataTxferClient
0 ToNode
DataTxferClient
1 ToNode
DataTxferClient
3 ToNode
Radio Modem
Radio Modem
DataTxferClient DataTxferClient
1 ToNode 1 ToNode
DataTxferClient DataTxferClient
2 ToNode 2 ToNode
PLC Node 1
MMasterDataTxfer
BroadcastDataSend
1 MyNode
DataTxferClient
0 ToNode
DataTxferClient
2 ToNode
DataTxferClient
3 ToNode
Type Library
7.22.1 MMasterDataTxfer, multimaster data transfer
FB eMMasterDTxferLib_C000
Questo blocco funzione esegue l'interfaccia con il terminale di I/O definito in File per
gestire la comunicazione multimaster su rete multidrop. Questo è un blocco funzione
protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni
e blocchi funzione. E' comunque possibile utilizzarlo liberamente in modo test per 30 Min.
Il blocco funzione agisce da server di comunicazione gestendo il dispositivo di I/O,
verranno poi connessi dei blocchi funzione client che gestiscono lo scambio dati tra i
sistemi. L'FB ritorna un MMDtTxfID che deve essere passato alle FB client (Esempio
DataTxferClient).
In MyNode occorre definire il numero di nodo del sistema, in una rete il numero di nodo
deve essere univoco. Tutti i messaggi che hanno come nodo di destinazione il valore di
MyNode saranno ricevuti dalla FB che li passerà alle FB clients per la verifica.
La comunicazione multimaster si basa sul controllo del canale di comunicazione libero e sulla gestione delle collisioni, i
parametri per questa gestione sono impostabili in MinFreeTm e MaxFreeTm. In questi parametri occorrerà definire
tempi piccoli per comunicazioni su linea seriale e tempi più lunghi nel caso di comunicazione via radiomodem.
In MinChkTm e MaxChkTm è possibile impostare un tempo per l'invio di un messaggio di controllo verso gli altri
sistemi della rete. L'FB abiliterà a turno sequenzialmente le varie FB clients per uno scambio dati con il peer con cui
l'FB dialoga controllando la connessione. Se uno o entrambi i valori sono impostati a 0 il controllo non viene
eseguito.
In RxErrors è ritornato il conteggio degli errori di ricezione, l'FB monitora continuamente il canale di comunicazione e
se i dati ricevuti sono in errore viene incrementato il contatore. Errori possono manifestarsi in caso di collisioni sul
canale di comunicazione. In caso di errore esecuzione viene attivata per un loop l'uscita Fault.
Enable (BOOL) Comando di abilitazione blocco funzione.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
MyNode (USINT) Nodo identificativo del sistema (Range da 0 a 250).
Timeout (UDINT) Tempo attesa frame di acknowledge dal sistema peer (mS).
MinFreeTm (REAL) Tempo minimo attesa canale di comunicazione libero (S).
MaxFreeTm (REAL) Tempo massimo attesa canale di comunicazione libero (S).
MinChkTm (REAL) Tempo minimo attesa invio frame controllo verso sistema peer (S).
MaxChkTm (REAL) Tempo massimo attesa invio frame controllo verso sistema peer (S).
Enabled (BOOL) Attivo su abilitazione blocco funzione.
Fault (BOOL) Attivo per un loop su errore esecuzione.
MMDtTxfID (UDINT) ID server multimaster da passare alle FB clients (Esempio DataTxferClient).
RxFrames (UDINT) Counter frame dati ricevuti. Sono conteggiati tutti i frames corretti indipendentemente se diretti
a questo nodo.
TxFrames (UDINT) Counter frame dati trasmessi.
RxErrors (UDINT) Counter errori frame dati ricevuti.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10040010 Valore di File non definito.
10040020 FB protetta, terminato tempo funzionamento in modo demo.
10040050 Timeout esecuzione.
10040070 Errore case gestione.
Type Library
7.22.2 DataTxferClient, Data transfer client
FB eMMasterDTxferLib_C000
Questo blocco funzione esegue lo scambio dati con un altro sistema su canale di
comunicazione. Si collega al blocco funzione MMasterDataTxfer di gestione dispositivo di
comunicazione, occorre passare MMDtTxfID in uscita dal blocco funzione server.
Il blocco funzione scambia i dati con il sistema definito in ToNode. In pratica il valore di
ToNode deve coincidere con il valore di MyNode della FB MmasterDataTxfer dell'altro
sistema.
In RxData ed in TxData occorre definire l'indirizzo del buffer dati che si vuole scambiare con il
sistema peer. In DLen la dimensione in bytes del buffer dati in scambio (I buffers RxData e
TxData devono avere la stessa dimensione). L'FB controlla se vi è una variazione dei dati nel
buffer TxData e ne esegue immediatamente l'invio al sistema peer che risponde con i dati del
proprio buffer TxData che saranno trasferiti nel buffer RxData.
L'uscita PeerOk è attiva se la comunicazione con il sistema peer è operativa, in caso di errori di comunicazione l'uscita
si disattiva. In RxFrames e TxFrames è ritornato il conteggio dei frames dati ricevuti ed inviati dalla FB verso il sistema
peer, in AckErrors il numero di errori di acknowledge da parte del sistema peer. In caso di errore esecuzione viene
attivata per un loop l'uscita Fault.
Enable (BOOL) Comando di abilitazione blocco funzione.
MMDtTxfID (UDINT) ID server multimaster in uscita dalla FB server (MmasterDataTxfer).
ToNode (USINT) Nodo identificativo del sistema peer con cui scambiare i dati (Range da 0 a 250).
RxData (@USINT) Puntatore al buffer dove devono essere trasferiti i dati ricevuti.
TxData (@USINT) Puntatore al buffer dove sono presenti i dati da trasmettere.
DLen (UDINT) Numero di bytes scambiati (Max 32).
Enabled (BOOL) Attivo su abilitazione blocco funzione.
Fault (BOOL) Attivo per un loop su errore esecuzione.
RxOk (BOOL) Attivo per un loop ad ogni ricezione dati da sistema peer.
PeerOk (BOOL) Attivo se scambio dati con sistema peer è Ok.
RxFrames (UDINT) Counter frame dati ricevuti.
TxFrames (UDINT) Counter frame dati trasmessi.
AckErrors (UDINT) Counter errori acknowledge dati da sistema peer.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10041010 MMDtTxfID non definito.
10041020 MMDtTxfID non corretto.
10041050 Valore DLen errato.
10041200 Frame dati ricevuto da sistema peer ha lunghezza errata. Verificare DLen sistema peer.
Esempi
Nell'esempio è gestito lo scambio di 8 BOOL con il sistema peer nodo 1 (MyNode=1).
Definizione variabili
Esempio LD
Type Library
7.22.3 BroadcastDataSend, broadcast data send
FB eMMasterDTxferLib_C000
Questo blocco funzione esegue l'invio di dati in modo broadcast. Si collega al blocco funzione
MMasterDataTxfer di gestione dispositivo di comunicazione, occorre passare MMDtTxfID in
uscita dal blocco funzione server.
Il blocco funzione invia i dati presenti nel buffer puntato da TxData con indirizzo di broadcast
16#FF. Tutti i sistemi che eseguono la FB DataTxferClient che hanno ToNode uguale al
valore di Node definito nella MMasterDataTxfer riceveranno i dati inviati.
In TxData occorre definire l'indirizzo del buffer ed in DLen la dimensione in bytes del buffer
dati che si vuole scambiare con i sistemi peer Ad ogni attivazione dell'ingresso Enable viene eseguito l'invio dei dati in
broadcast, terminato l'invio si attiva l'uscita Done che rimane attiva sino alla disattivazione dell'ingresso Enable. Per
effettuare una nuova trasmissione occorre disattivare e poi riattivare l'ingresso Enable.
Enable (BOOL) Comando di abilitazione blocco funzione.
MMDtTxfID (UDINT) ID server multimaster in uscita dalla FB server (MmasterDataTxfer).
TxData (@USINT) Puntatore al buffer dove sono presenti i dati da trasmettere.
DLen (UDINT) Numero di bytes scambiati (Max 32).
Done (BOOL) Attivo al termine dell'invio dei dati, rimane attivo fino alla disabilitazione di Enable.
Fault (BOOL) Attivo per un loop su errore esecuzione.
TxFrames (UDINT) Counter frame dati trasmessi.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10044010 MMDtTxfID non definito.
10044020 MMDtTxfID non corretto.
10044050 Valore DLen errato.
Come si vede ad ogni messaggio è associato del testo ed eventuali variabili da visualizzare. Nel messaggio possono
essere visualizzate tutte le variabili globali.
Nella compilazione del progetto LogicLab crea ed istanzia per ogni HMI un blocco funzione di tipo
HMIBuiltInMessages, con il nome assegnato all'HMI, nell'esempio soprariportato MyHMI. Questo FB provvede alla
gestione dei messaggi e delle variabili ma per la visualizzazione occorre collegare al FB una FB di gestione terminale.
Type Library
7.23.1 HMIBuiltInMessages, HMI built in messages
FB eHMIBuiltInLib_B000
Questo blocco funzione esegue la gestione dei messaggi così come definiti da LogicLab.
Anche se ne riporto la raffigurazione a differenza degli altri blocchi funzione è
automaticamente istanziato da LogicLab e non và quindi inserito dall'utente nel
proprio programma. Per l'utente è importante fare riferimento alle sole variabili di
ingresso ed uscita dal FB, variabili che possono essere utilizzate nel proprio
programma.
Il parametro ALevel configura il livello di accesso ai messaggi, settando i bits della variabile si permette di visualizzare
solo i messaggi che hanno lo stesso bit definito in Access Level.
CmdDisable (BOOL) Disabilitazione comandi terminale. Attivandolo non è possibile eseguire operazioni.
ViewMID (UINT) Visualizza messaggio con ID definito.
ALevel (BYTE) Pattern livello accesso utente.
DEntryOk (BOOL) Attivo per un loop al termine della inputazione di una variabile.
MsgID (UINT) ID del messaggio attualmente visualizzato.
HMIBuildInID (UDINT) ID messaggi da passare alle FB collegate.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10046010 Tabella messaggi generata da LogicLab non supportata.
10046020~2 Non è possibile allocare memoria per l'esecuzione.
10046100 Blocco funzione non eseguito in task di background (Back).
10046200 Messaggio con ID richiesto in ViewMID non trovato.
10046100 Spazio insufficente per visualizzazione variabile.
Type Library
7.23.2 HMIBuiltInNetlog, Netlog HMI management
FB eHMIBuiltInLib_B000
Questo blocco funzione esegue la gestione del terminale (Display e tastiera) integrato nel
sistema NetlogIII, deve essere eseguito in task Back. Si collega al blocco funzione
HMIBuiltInMessages di gestione messaggi, occorre passare HMIBuildInID in uscita dal
blocco funzione.
Attivando l'ingresso Enable si attiva l'uscita Enabled e viene gestito il terminale
visualizzando i messaggi definiti nel terminale da LogicLab. Nell'ingresso File occorre
passare lo stream del dispositivo di I/O utilizzato per la gestione (Ritornato dalla funzione
Sysfopen).
Il FB ritorna in uscita lo stato di tutti i tasti del terminale, e questo permette di utilizzarli nel
proprio programma come comandi. L'ingresso SpyOn se attivo permette di spiare il
funzionamento della FB.
In caso di errore esecuzione viene attivata per un loop l'uscita Fault.
Enable (BOOL) Comando di abilitazione blocco funzione.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
TFlags Description
16#00000001 Rx: Ricezione dati da terminale.
16#00000002 Tx: Trasmissione comandi display.
16#00000004 Tx: Trasmissione dati display.
16#00000008 Tx: Trasmissione comando inputazione dati.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
ALevel (USINT) Livello di accesso ai messaggi.
HMIBuiltInID (UDINT) ID gestione messaggi in uscita dalla FB (HMIBuiltInMessages).
Enabled (BOOL) Attivo su abilitazione blocco funzione.
Ready (BOOL) Attivo se l'hardware display è pronto.
Fault (BOOL) Attivo per un loop su errore esecuzione.
KeyUP (BOOL) Stato tasto UP del terminale.
KeyDW (BOOL) Stato tasto DW del terminale.
KeyLEFT (BOOL) Stato tasto LEFT del terminale.
KeyRIGHT (BOOL) Stato tasto RIGHT del terminale.
KeyFUN (BOOL) Stato tasto FUN del terminale.
KeyENT (BOOL) Stato tasto ENT del terminale.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10047010 HMIBuildInID non definito.
10047020 HMIBuildInID non corretto.
10047100 Blocco funzione non eseguito in task di background (Back).
Esempi
Nell'esempio è gestito il terminale di un sistema NetlogIII, i messaggi sono stati definiti nel programma LogicLab con il
nome MyHMI.
Definizione variabili
Esempio ST
(* Here open the terminal communication port. *)
IF (SysFirstLoop) THEN
HMI.File:=Sysfopen('PCOM0.1', 'rw'); (* File pointer *)
END_IF;
Type Library
7.23.3 HMIPicoface, Picoface HMI management
FB eHMIBuiltInLib_B200
Questo blocco funzione esegue la gestione del terminale Picoface, il terminale può essere
connesso al sistema su bus di estensione I2C oppure in seriale sia in configurazione
FullDuplexRS232 che in configurazione HalfDuplex RS485. Il parametro CType definisce il
tipo di comunicazione utilizzata
Il FB deve essere eseguito in task Back. Si collega al blocco funzione
HMIBuiltInMessages di gestione messaggi, occorre passare HMIBuildInID in uscita dal
blocco funzione.
Attivando l'ingresso Enable si attiva l'uscita Enabled e viene gestito il terminale
visualizzando i messaggi definiti nel terminale da LogicLab. Nell'ingresso File occorre
passare lo stream del dispositivo di I/O utilizzato per la gestione (Ritornato dalla funzione
Sysfopen).
Attivando i bits in ingresso è possibile comandare i LEDs e le uscite sul terminale, in uscita è
ritornato lo stato dei tasti e degli ingressi del terminale. Questo permette di utilizzarli nel
proprio programma come comandi.
E' prevista la gestione di un dispositivo One Wire, il FB ritorna in OneWireData un array del
tipo.
Dove:
DP: Device Protocol.
DF: Device family.
L'ingresso SpyOn se attivo permette di spiare il funzionamento della FB.
In caso di errore esecuzione viene attivata per un loop l'uscita Fault.
Comando di abilitazione blocco funzione.
Enable (BOOL)
CType (BOOL) Tipo comunicazione. FALSE: Full duplex (Default), TRUE: Half duplex
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
TFlags Description
16#00000001 Rx: Ricezione frame dati da terminale.
16#00000002 Tx: Trasmissione frame dati verso terminale.
16#10000000 Wn: Messaggio di warning (Su anomalia di comunicazione).
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen. Per il terminale di default connesso in
I2C definire PCOM15.1.
HMIBuiltInID (UDINT) ID gestione messaggi in uscita dalla FB (HMIBuiltInMessages).
FLed0~6 (BOOL) Comando LED tasti funzione da [0] a [6].
Backlight (BOOL) Comando accensione backlight display.
Out0~1 (BOOL) Comando uscite logiche.
Enabled (BOOL) Attivo su abilitazione blocco funzione.
Ready (BOOL) Attivo se l'hardware display è pronto.
Fault (BOOL) Attivo per un loop su errore esecuzione.
OneWireOk (BOOL) Attivo se almeno un dispositivo One-Wire è connesso al connettore del terminale.
OneWireTrig (BOOL) Attivo per un loop di programma, da usare come trigger sull'array OneWireData.
OneWireData (BYTE[16]) Ritorna i dati letti dal dispositivo One Wire connesso al connettore del terminale.
FKey0~9 (BOOL) Stato tasti funzione da [0] a [9].
KeyFUN (BOOL) Stato tasto FUN del terminale.
KeyESC (BOOL) Stato tasto ESC del terminale.
KeyCLR (BOOL) Stato tasto CLR del terminale.
KeyENT (BOOL) Stato tasto ENT del terminale.
KeyUP (BOOL) Stato tasto UP del terminale.
KeyDOWN (BOOL) Stato tasto DOWN del terminale.
Inp0~1 (BOOL) Stato ingressi digitali.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10049010 HMIBuildInID non definito.
10049020 HMIBuildInID non corretto.
10049100 Blocco funzione non eseguito in task di background (Back).
Esempi
Nell'esempio è gestito un terminale Picoface, i messaggi sono stati definiti nel programma LogicLab con il nome
MyHMI.
Definizione variabili
Esempio ST
(* Here open the terminal communication port. *)
IF (SysFirstLoop) THEN
HMI.File:=Sysfopen('PCOM15.1', 'rw'); (* File pointer *)
END_IF;
12Vdc 12Vdc
2k2 10k 1k
BC847 BC847
10k
Bidirectional data
(CCTalk)
GND (CCTalk)
Type Library
7.24.1 ccTalkProtocol, manages ccTalk protocol
FB eCCTalkProtoLib_A000
Questo blocco funzione esegue la gestione del protocollo, deve essere connesso ad una
porta seriale File a cui si connettono i dispositivi ccTalk. Questo è un blocco funzione
protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione
funzioni e blocchi funzione. E' comunque possibile utilizzarlo liberamente in modo test
per 15 Min.
L'FB ritorna un CCTalkProtoID che deve essere passato alle FB collegate di gestione
dei vari dispositivi ccTalk. L'ingresso SpyOn se attivo permette di spiare il funzionamento della FB.
L'uscita Fault si attiva per un loop di programma in caso di errori di gestione.
Enable (BOOL) Abiltazione gestione protocollo.
SpyON (BOOL) Se attivo permette di spiarne il funzionamento.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
Enabled (BOOL) Si attiva su comando di Enable.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
CCTalkProtoID (UDINT) ID protocollo da passare alle FB collegate.
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 'Tx' Trasmissione frame comando ccTalk.
16#00000002 'Rx' Ricezione frame risposta ccTalk.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10050010 Valore di File non definito.
10050020 FB eseguita in task diversa da quella di background.
10050030 FB protetta, terminato tempo funzionamento in modo demo.
10050100 Timeout comunicazione.
10050200~4 Errore sequenze invio comando.
10050300~4 Errore nelle sequenze di ricezione risposta.
Type Library
7.24.2 AlbericiAL66, Alberici AL66 coin acceptor
FB eCCTalkProtoLib_A000
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
10051010 HMIBuildInID non definito.
10051020 HMIBuildInID non corretto.
10051030 Blocco funzione non eseguito in task di background (Back).
10051040 Non è possibile allocare FB, troppe FB connesse alla FB di gestione protocollo.
10051100 Errore comunicazione con dispositivo.
Esempi
Nell'esempio è gestita una gettoniera elettronica Alberici AL66V con protocollo ccTalk. Il
protocollo ccTalk opera su di un bus ad un filo gestito in open collector dai vari dispositivi
connessi in multidrop sul bus. Per interfacciare il bus ccTalk con la porta seriale RS232 dello
SlimLine viene utilizzato un apposito convertitore.
Il programma di esempio definisce le monete da accettare ed esegue il conteggio delle monete
accettate in base al loro valore.
Definizione variabili
Esempio ST
(* ---------------------------------------------------------------------- *)
(* INIZIALIZZAZIONI *)
(* ---------------------------------------------------------------------- *)
(* Eseguo inizializzazioni. *)
IF (SysFirstLoop) THEN
i:=SysGetSerialMode(ADR(Sm), Fp);
Sm.Baudrate:=9600; (* Baud rate *)
Sm.Parity:='N'; (* Parity *)
Sm.DataBits:=8; (* Data bits *)
Sm.StopBits:=1; (* Stop bits *)
Sm.DTRManagement:=DTR_AUTO_WO_TIMES; (* DTR management *)
Sm.DTRComplement:=FALSE; (* DTR complement *)
Sm.EchoFlush:=FALSE; (* Echo flush *)
Sm.DTROffTime:=0; (* DTR off time *)
Sm.DTROnTime:=0; (* DTR on time *)
i:=SysSetSerialMode(ADR(Sm), Fp);
(* ---------------------------------------------------------------------- *)
(* GESTIONE PROTOCOLLO CCTALK *)
(* ---------------------------------------------------------------------- *)
(* Gestione del protocollo ccTalk. *)
(* ---------------------------------------------------------------------- *)
(* GESTIONE ACCETTATORE ALBERICI *)
(* ---------------------------------------------------------------------- *)
(* Gestione accettatore Alberici. *)
Acpt.CCTalkProtoID:=CCTalk.CCTalkProtoID; (* Protocol ID *)
(* ---------------------------------------------------------------------- *)
(* ---------------------------------------------------------------------- *)
(* CALCOLO DENARO INSERITO *)
(* ---------------------------------------------------------------------- *)
(* Controllo se moneta acettatta da accettatore. *)
IF (Acpt.CoinOk) THEN
NrOfCoins:=NrOfCoins+1; (* Numero di monete inserite *)
CASE (Acpt.CAccepted) OF
16#0001: Credit:=Credit+200; (* 2 Euro *)
16#0002: Credit:=Credit+100; (* 1 Euro *)
16#0004: Credit:=Credit+50; (* 50 Centesimi *)
16#0008: Credit:=Credit+20; (* 20 Centesimi *)
16#0010: Credit:=Credit+10; (* 10 Centesimi *)
16#0020: Credit:=Credit+5; (* 5 Centesimi *)
16#0040: Credit:=Credit+2; (* 2 Centesimi *)
16#0080: Credit:=Credit+1; (* 1 Centesimo *)
END_CASE;
END_IF;
(* [End of file] *)
Type Library
7.25.1 RESTWSvcClient, connects to a REST web service
FB eLLabRESTSvcLib_A220
Questo blocco funzione gestisce la connessione verso un server REST con protocollo
HTTP. Per garantire il buffering dei dati su eventi molto rapidi, il servizio utilizza uno stack
FIFO su di un file. In FIFOFile ed in FIFOSize si può definire quale file utilizzare per
appoggiare lo stack FIFO e che dimensione dare allo stack.
E' prevista la gestione dell'invio di un messaggio di heartbeat verso il server ad ogni
intervallo di tempo definito in HBitTime. Questo permette di controllare il corretto
funzionamento del servizio anche in assenza di messaggi da inviare al server. L'uscita
RSvcOn se attiva indica che il servizio è attivo.
Non essendo possibile gestire all'interno di un FB variabili ritentive, e dovendo gestire i
registri dello stack FIFO mantenendoli allo spegnimento del sistema, occorre fornire in
RESTSvcBck l'indirizzo di una variabile di tipo RESTSERVICEBACKUP che dovrà
essere allocata in area ritentiva.
conteggio riprende da 0.
Resyncs (UDINT) Counter resincronizzazioni con il server REST. Raggiunto il valore massimo il conteggio
riprende da 0.
I messaggi scambiati tra FB e server hanno un identificativo che ne permette il controllo. In
caso di disallineamento (Perdita di un messaggio) viene eseguita una resincronizzazione.
Errors (UDINT) Counter errori comunicazione con il server REST. Raggiunto il valore massimo il conteggio
riprende da 0.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10057020 FB eseguita in una task diversa dalla task di background.
10057030 RESTSvBck non è stato definito.
10057050 Errore richiesta HTTP.
10057100~7 Errore lettura da file FIFO.
10057110 Errore dato letto da file FIFO. Il file FIFO viene reinizializzato.
10057200 Messaggio in FIFO da inviare al server più lungo di BLength (Il messaggio è cancellato).
10057210 Messaggio heartbeat da inviare al server più lungo di BLength (Il messaggio non viene inviato).
10057300 Errore ricezione risposta HTTP da server REST.
10057310 Messaggio ricevuto da server non ha identificativo messaggio “MID”.
10057311 Messaggio ricevuto da server non ha numero parametri “RP”.
10057312 Messaggio ricevuto da server non ha dati pagina “Page”.
10057500 Host ha chiuso la connessione.
10057510 Timeout richiesta pagina.
10057520 Campo Request troppo lungo.
10057550~2 Errore ricezione lunghezza pagina.
Type Library
7.25.2 RESTSendFct, sends a REST message
FB eLLabRESTSvcLib_A220
Questo blocco funzione può essere eseguito come una funzione, permette di inserire un
messaggio nel buffer FIFO del client REST (FB RESTWSvcClient) collegato. Il collegamento di
questo FB con il FB client avviene con il parametro RSvID a cui bisogna fornire il valore in
uscita del corrispondente parametro del FB RESTSvcClient.
In Add occorre indicare l'indirizzo della stringa messaggio da inviare, eseguendo il FB il
messaggio viene inserito immediatamente nel buffer FIFO di inoltro ed il client REST provvederà ad inviarlo al server
appena possibile.
Add (@USINT) Indirizzo stringa messaggio da inviare.
RSvID (UDINT) REST service ID. Identificativo servizio REST, occorre passare alle FB collegate al servizio.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10058020 FB eseguita in una task diversa dalla task di background.
10058030 RSvID non è stato definito.
10058040 RSvID non è corretto.
10058100 Il messaggio da inviare è troppo lungo, supera dimensione BLength di FB RESTWSvcClient. Il
messaggio viene troncato alla lunghezza definita.
10058110 Non vi è più spazio in buffer FIFO per contenere il messaggio, il messaggio viene perso.
10058200~4 Errore scrittura in file FIFO.
Esempio ST
(* ---------------------------------------------------------------------- *)
(* ESEGUO INIZIALIZZAZIONI *)
(* ---------------------------------------------------------------------- *)
(* Eseguo inizializzazione variabili. *)
IF (SysFirstLoop) THEN
REST.SpyOn:=TRUE;
REST.RESTSvBck:=ADR(RESTSvBck); (* REST service backup pointer*)
REST.FIFOFile:='Storage/REST.bin'; (* Path and name of file where to log *)
REST.FIFOSize:=10000; (* FIFO file size *)
(* ---------------------------------------------------------------------- *)
(* GESTIONE SERVIZIO REST *)
(* ---------------------------------------------------------------------- *)
(* Eseguo gestione servizio REST. *)
(* ---------------------------------------------------------------------- *)
(* INVIO INGRESSI DIGITALI AL SERVER CLOUD *)
(* ---------------------------------------------------------------------- *)
(* Eseguo compattazione ingressi su byte. *)
END_IF;
(* ---------------------------------------------------------------------- *)
(* RICEZIONE USCITE DIGITALI DA SERVER CLOUD *)
(* ---------------------------------------------------------------------- *)
(* Su ricezione Ok da servizio REST controllo l'Ok ricevuto. *)
(* [End of file] *)
Come si vede viene parametrizzato il FB REST con i parametri per la connessione al nostro server cloud di prova.
REST.Host:=ADR('www.slimline.altervista.org'); (* Hostname servizio REST *)
REST.Page:=ADR('/Mdp095a100/Ptp135a000/RESTSvc.php'); (* Pagina servizio REST *)
REST.Port:=80; (* Porta servizio REST *)
Il FB REST invia un messaggio al server cloud ogni tempo definito in HbitTime. Su variazione stato ingressi digitali il
FB RESTSend comanda l'invio al server cloud dello stato degli ingressi.
Ad ogni ricezione di un messaggio REST il server cloud registra i dati ricevuti in un file ini di appoggio ed invia al
sistema il valore di comando delle uscite. Riporto di seguito listato del file RESTSvc.php a cui si connette il FB REST
anche se il file sorgente si trova nel programma dimostrativo.
<?php
// *****************************************************************************
// FUNZIONI CONVERSIONE DATI RICEVUTI
// *****************************************************************************
// Funzioni per conversione dati.
// -----------------------------------------------------------------------------
// INCLUSIONE FILES
// -----------------------------------------------------------------------------
// Inclusione files.
// -----------------------------------------------------------------------------
// CONTROLLO RICHIESTA IN ARRIVO
// -----------------------------------------------------------------------------
// La richiesta deve contenere i campi, MID, UID, MV, RP. Se errore esco.
// Per ogni sistema (Riconoscibile dal suo "UID") esiste un file dati ne eseguo
// lettura e compilazione array globale.
// -------------------------------------------------------------------------
// CONTROLLO ID MESSAGGIO
// -------------------------------------------------------------------------
// Controllo se ricevuto l'acknowledge dallo SlimLine del messaggio REST
// inviato precedentemente dal server. Controllo se il MID ricevuto è
// corretto (Successivo al MID del messaggio precedente).
if ((($_REQUEST['MID']-$GLOBALS['Dt']['MID'])&0xFFFF) == 1)
{
// Ricevuto MID successivo messaggio corretto (Nessun messaggio è
// andato perso) utilizzo MID ricevuto.
$GLOBALS['Dt']['MID']=$_REQUEST['MID']; //Message ID
}
else
{
// Errore ricezione messaggi, occorre eseguire una resincronizzazione
// sistema, viene inviato un numero random che sarà utilizzato dal
// sistema come prossimo MID.
// -----------------------------------------------------------------------------
// ACQUISIZIONE INFORMAZIONI DAL MESSAGGIO DATI
// -----------------------------------------------------------------------------
// Un messaggio dati contiene un campo "Data" composto da diversi campi, ogni
// byte occupa due caratteri ascii. I dati sono in Big endian, MSB ... LSB.
// +---+---+-+-+-+-+-+-+-+...+-+
// | Length|0|0| Epoch | Value |
// +---+---+-+-+-+-+-+-+-+...+-+
//
// Length: Lunghezza record (2 byte)
// Epoch: Epoch time (4 byte)
// Value: Stringa con valore (Lunghezza variabile)
// -----------------------------------------------------------------------------
// Se messaggio ricevuto contiene campo "Data" eseguo acquisizione dati campo.
// Nel campo "Value" il sistema SlimLIne invia le variabili indicandole nel modo
// "Var11=Valore|Var2=Valore|..." controllo che vi sia almeno un "=".
// Nel nostro esempio vi sarà una sola variabile "DInp=xx".
// -------------------------------------------------------------------------
// INVIO DATI AL SISTEMA
// -------------------------------------------------------------------------
// Eseguo scrittura file per storicizzare i dati sul server.
SENDDATA:
WriteINIFile($_REQUEST['UID']); //Scrittura dile ini
// -----------------------------------------------------------------------------
// RITORNO PAGINA AL CLIENT
// -----------------------------------------------------------------------------
// Compilo messaggio di risposta che inizia con il MID. Il valore ritornato
// è calcolato sommando il valore di UID. In questo modo si garantisce che
// il sistema che riceve il messaggio possa verificalo utilizzando il suo
// unique ID.
Come si vede dal listato ho volutamente realizzato una gestione molto semplice utilizzando per l'appoggio un file ini, ma
in realtà chi ha dimestichezza con applicazioni web troverà molto più efficiente appoggiarsi ad un database.
Come si vede vi è un avvertimento di utilizzare il servizio a solo scopo didattico in quanto sono assenti
password di accesso ed altre protezioni. Quindi risulta evidente che inserendo UID di sistema a caso è
possibile trovare l'UID del vostro sistema e comandarne le uscite.
Tutto questo è stato fatto volutamente per limitare la complessità del dimostrativo, se si desidera utilizzarlo è
certamente possibile partendo dai programmi sorgenti inserire più funzioni e password di accesso.
Ricordo che l'UniqueID (UID) del sistema si può visualizzare in debug da LogicLab ma è anche visibile dalla pagina
web.
Come dicevo la pagina htm utilizza JQuery ed è aggiornata in tempo reale con chiamate Ajax. Non mi dilungo sulla
spiegazione dei TAGs html in quanto sono facilmente intuibili. Quasi interamente la pagina si basa su campi div che
sono aggiornati da Javascript ecco ll sorgente.
// -------------------------------------------------------------------------
// FUNZIONE ESEGUITA SU LOAD PAGINA
// -------------------------------------------------------------------------
// Sul load della pagina attivo ajax.
$(document).ready(function()
{
AjaxCall(); //Eseguo chiamata ajax su load pagina
setInterval(AjaxCall, 5000); //Imposto chiamata ciclica ajax
});
// -------------------------------------------------------------------------
// RICHIESTA AJAX
// -------------------------------------------------------------------------
// Viene eseguita la richiesta ajax. Eseguo lo script "AjaxSvc.php" passando
// i parametri in POST.
function AjaxCall()
{
// Compongo byte di gestione comando output.
$.ajax(
{
type:"POST",
url:"/Mdp095a100/Ptp135a000/AjaxSvc.php",
data:"UID="+$("#UID").val()+"&DOut="+DOut,
dataType:"html",
success:function(Answer)
{
// Copio stringa ricevuta da script php per visualizzazione.
$("div#Answer").html(urldecode(Answer));
var VArray=AArray[i].split('=');
$("div#"+VArray[0]).html(urldecode(VArray[1]));
}
$("#Di00CPU").prop("checked", ($("div#DInp").html()&0x01?true:false));
$("#Di01CPU").prop("checked", ($("div#DInp").html()&0x02?true:false));
$("#Di02CPU").prop("checked", ($("div#DInp").html()&0x04?true:false));
$("#Di03CPU").prop("checked", ($("div#DInp").html()&0x08?true:false));
$("#Di04CPU").prop("checked", ($("div#DInp").html()&0x10?true:false));
$("#Di05CPU").prop("checked", ($("div#DInp").html()&0x20?true:false));
},
error: function()
{
$("div#Answer").html("Call error");
}
});
}
// -------------------------------------------------------------------------
// DECODIFICA CARATTERI URL
// -------------------------------------------------------------------------
// Per evitare che nel campo valore vi siano caratteri "=" che possono dare
// fastidio nello split converto campo dati in entit� URL e con questa
// funzione ne eseguo la decodifica.
E' interessante notare che le variabili stringa per evitare il problema di trovarsi caratteri “=” all'interno sono state
codificate come richieste URL dallo script php e quindi devono essere decodificate da Javascript.
// -----------------------------------------------------------------------------
// CONTROLLO RICHIESTA IN ARRIVO
// -----------------------------------------------------------------------------
// La richiesta deve contenere i campi, UID, DOut. Se errore esco.
// -----------------------------------------------------------------------------
// ESEGUO LETTURA FILE DATI DI SISTEMA
// -----------------------------------------------------------------------------
// Per ogni sistema (Riconoscibile dal suo "UID") esiste un file dati ne eseguo
// lettura e compilazione array globale.
WriteINIFile($_REQUEST['UID']);
// -----------------------------------------------------------------------------
// RITORNO DATI A PAGINA WEB
// -----------------------------------------------------------------------------
// Ritorno dati a pagina web. Per evitare che nel campo valore vi siano
// caratteri "=" che danno fastidio nello split converto stringhe in entità URL.
$Return="MID={$GLOBALS['Dt']['MID']}"; //Message ID
$Return.="|MV={$GLOBALS['Dt']['MV']}"; //Message version
$Return.="|RP={$GLOBALS['Dt']['RP']}"; //Received parameters
$Return.="|Length={$GLOBALS['Dt']['Length']}"; //Lunghezza record dati
$Return.="|Epoch={$GLOBALS['Dt']['Epoch']}"; //Epoch time relativo al record dati
$Return.="|Value=".urlencode($GLOBALS['Dt']['Value']); //Stringa valore record dati
$Return.="|DInp={$GLOBALS['Dt']['DInp']}"; //Stato ingressi digitali
$Return.="|DOut={$GLOBALS['Dt']['DOut']}"; //Comando uscite digitali
$Return.="|RxMessage=".urlencode($GLOBALS['Dt']['RxMessage']); //Messaggio ricevuto
$Return.="|TxMessage=".urlencode($GLOBALS['Dt']['TxMessage']); //Messaggio trasmesso
$Return.="|Resyncs={$GLOBALS['Dt']['Resyncs']}"; //REST resyncronizations
$Return.="|PollTime={$GLOBALS['Dt']['PollTime']}"; //Tempo poll sistema
$Return.="|Heartbeat={$GLOBALS['Dt']['Heartbeat']}"; //Data/Ora ultimo heartbeat (UTC)
echo $Return;
In Tx le stringhe inviate al server ed in Rx quelle ricevute, a fianco di ogni riga vi è il tempo trascorso dalla esecuzione
della riga precedente. I dati inviati sono etichettati con Rq in Rc quelli ricevuti.
Attivando il trigger sul comando di spionaggio SpyData -t 0x0000000C<CR>, visualizzeremo solo i dati inviati e ricevuti
senza visualizzare tutte le stringhe di gestione del protocollo HTTP.
Dalla analisi vederemo che normalmente ogni 5 secondi viene inviato un pacchetto di heartbeat, ma quando si ha la
variazione di un ingresso digitale viene immediatamente inviato un messaggio con il campo Data che contiene lo stato
degli ingressi.
Type Library
7.26.5 SNMPAgent, manages the SNMP Agent
FB eLLabSNMPLib_A000
Questo blocco funzione esegue la gestione del protocollo SNMP agendo come Agent.
Attivando l'FB si pone in ascolto l'agente sulla porta definita, sono accettate il numero di
connessioni contemporanee definite in Connections.
In Community occorre definire l'indirizzo della stringa di definizione della comunità
accettata dall'Agent.
Per la definizione delle variabili gestite dall'Agent è definita nella libreria una apposita
struttura dati. La struttura SNMPVARIABLEDEFS permette di definire le variabili su cui
l'Agent può operare. In VDefs occorre fornire l'indirizzo di allocazione della struttura di
definizione variabili ed in VNr occorre definire il numero delle variabili definite.
Il FB gestisce autonomamente il comando SnmpWalk permettendo di “camminare” tra
tutte le variabili definite.
Enable (BOOL) Comando attivazione SNMP Agent.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
Port (UINT) Porta UDP su cui porre in ascolto l'Agent. Solitamente si utilizza la porta 161.
Connections (USINT) Numero di connessioni contemporanee gestite dal FB (Da 1 a 4).
Community (@USINT) Indirizzo allocazione stringa definizione Community.
VDefs (@SNMPVARIABLEDEFS) Indirizzo allocazione struttura SNMPVARIABLEDEFS.
VNr (USINT) Numero di variabili definite.
Timeout (UINT) Timeout esecuzione query SNMP (mS).
Enabled (BOOL) Blocco funzione abilitato.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10059020 FB eseguita in una task diversa dalla task di background.
10059030 Connections non impostato correttamente.
10059080 Timeout esecuzione.
10059090 Errore interno.
10059100~2 Errore ricezione intestazione frame SNMP da Manager.
10059110 PDU type ricevuto non gestito.
10059200~99 Errore nella decodifica del comando SNMP ricevuto da Manager.
10059300~99 Errore nella codifica della risposta SNMP verso Manager.
Esempi
Nell'esempio viene gestito un agente SNMP, l'agente opera su due variabili.
Definizione variabili
IF (SysFirstLoop) THEN
(* [End of file] *)
Type Library
7.26.6 SNMPManager, sends a SNMP message
FB eLLabSNMPLib_A000
Questo blocco funzione esegue la gestione del protocollo SNMP agendo come Manager.
Attivando l'FB viene inviato un pacchetto SNMP con il valore di PDUType indicato.
Eseguito l'invio e ricevuta la richiesta dall'Agent viene attivata l'uscita Done. Per inviare un
nuovo pacchetto occorre disabilitare e poi riabilitare Enable.
Attivando Enable viene inviato all'Agent con indirizzo Address sulla porta Port il
messaggio SNMP di tipo PDUType con OID definito.
Se il messaggio è di tipo lettura, al termine, nella variabile indicata sarà trasferito il valore
della variabile acquisita dall'Agent.
Se il messaggio è di tipo scrittura, al termine il valorte della variabile definita sarà stato
trasferito nell'Agent.
In Community occorre definire l'indirizzo della stringa di definizione della comunità
accettata dall'Agent.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10060020 FB eseguita in una task diversa dalla task di background.
10060080 Timeout esecuzione.
10060090 Errore interno.
10060100~99 Errore nella codifica del comando SNMP verso Agent.
10060200~2 Errore ricezione intestazione frame risposta SNMP da Agent.
10060300~99 Errore nella decodifica della risposta SNMP ricevuta da Agent.
10060400~9 Errore dati nella risposta SNMP ricevuta da Agent.
10060410~9 Errore impostazione VType.
10060420~9 Errore impostazione VLength.
Esempi
Nell'esempio viene eseguita una richiesta SNMP verso un Agent su un altro sistema SlimLine. Attivando Di00CPU
viene richiesto l'OID 1.3.6.1.4.1.36955.2 su di un sistema SlimLine dove è in esecuzione il programma Agent. L'agente
risponderà inviando una variabile stringa con contenuto “Hello!”.
Definizione variabili
IF (SysFirstLoop) THEN
SNMPMng.Port:=161; (* Peer port *)
SNMPMng.SpyOn:=TRUE; (* Spy command *)
SNMPMng.PDUType:=16#A0; (* PDU type *)
SNMPMng.Community:=ADR('public'); (* Community *)
SNMPMng.Timeout:=1000; (* Execution timeout (mS) *)
(* SNMP manager. *)
SNMPMng.Enable:=Di00CPU;
SNMPMng(); (* SNMP manager *)
(* Check if the answer from Agent has been received and manage it. *)
IF (SNMPMng.Ok) THEN
Ok:=TO_BOOL(SysStrFind(ADR(Str), ADR('Hello!'), FIND_DEFAULT) = ADR(Str));
(* [End of file] *)
Type Library
7.27.2 TCPDataExchServer, TCP data exchange (Server)
FB eLLabDataExchLib_A000
Questo blocco funzione gestisce lo scambio dati su rete TCP agendo come server. Attivando
l'FB si pone in ascolto il server sulla sulla porta definita in Port, il server accetta il numero
contemporaneo di connessioni dai client definite in Connections.
In DEDefs occorre definire l'indirizzo dell'array di strutture TCPDEXCHNODEDEFS che
identificano i nodi slave che possono connettersi al server.
Alla connessione di un client viene cercato nell'array indicato da DEDefs il NodeID del
messaggio ricevuto e se il MsgID corrisponde i due sistemi si “legano” per lo scambio dati ed
il bit Active della rispettiva struttura verrà attivato.
Su ricezione di dati da un sistema client avremo il bit RxOk attivo nella relativa struttura dati. Per inviare i dati ad un
sistema client occorre attivare il bit TxData della relativa struttura.
Enable (BOOL) Comando attivazione server.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento.
Port (UINT) Porta TCP su cui porre in ascolto il server.
Connections (USINT) Numero di connessioni contemporanee gestite.
DEDefs (@TCPDEXCHNODEDEFS) Indirizzo allocazione array struttura TCPDEXCHNODEDEFS di definizione nodi client.
Enabled (BOOL) Blocco funzione abilitato.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 Rx: Sequenze ricezione frame.
16#00000002 Tx: Sequenze trasmissione frame.
16#40000000 Er: Errore gestione.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10061020 FB eseguita in una task diversa dalla task di background.
10061025 DEDefs non impostato correttamente.
10061030 Connections non impostato correttamente.
10061100 Timeout esecuzione.
10061110 Errore case gestione.
10061120 Il client ha chiuso la connessione.
10061200~1 Errore sequenze ricezione frame da client.
10061300~3 Errore ricezione frame di sincronizzazione da client.
10061400~3 Errore ricezione frame dati da client.
10061500~1 Errore ricezione frame heartbeat da client.
10061600~1 Errore trasmissione frame dati verso client.
Esempi
Nell'esempio viene gestito un server che gestisce lo scambio con due sistemi client.
Definizione variabili
Esempio ST
(* Program initialization *)
IF (SysFirstLoop) THEN
DEDefs[0].NodeID:=1; (* Node ID *)
DEDefs[0].MsgID:=16#4567; (* Message identifier *)
DEDefs[0].RxBuffer:=ADR(C1RxBuffer); (* Rx buffer address *)
DEDefs[0].RxLength:=SIZEOF(C1RxBuffer); (* Rx buffer length *)
DEDefs[0].TxBuffer:=ADR(C1TxBuffer); (* Tx buffer address *)
DEDefs[0].TxLength:=SIZEOF(C1TxBuffer); (* Tx buffer length *)
DEDefs[1].NodeID:=2; (* Node ID *)
DEDefs[1].MsgID:=16#1234; (* Message identifier *)
DEDefs[1].RxBuffer:=ADR(C2RxBuffer); (* Rx buffer address *)
DEDefs[1].RxLength:=SIZEOF(C2RxBuffer); (* Rx buffer length *)
DEDefs[1].TxBuffer:=ADR(C2TxBuffer); (* Tx buffer address *)
DEDefs[1].TxLength:=SIZEOF(C2TxBuffer); (* Tx buffer length *)
(* Server configuration. *)
(* [End of file] *)
Type Library
7.27.3 TCPDataExchClient, TCP data exchange (Client)
FB eLLabDataExchLib_A000
Questo blocco funzione gestisce lo scambio dati su rete TCP agendo come client. Su
attivazione l'FB si connette al server definito in SAddress alla porta definita in SPort.
In DEDefs occorre definire l'indirizzo della struttura TCPDEXCHNODEDEFS che identifica il
nodo slave nella connessione con il server.
Se la connessione al server viene stabilita (Il NodeID ed il MsgID corrispondono con quelli
accettati dal server) i due sistemi si “legano” per lo scambio dati ed il bit Active della struttura
dati verrà attivato.
Su ricezione di dati da un sistema server avremo il bit RxOk attivo nella struttura dati. Per
inviare i dati ad un sistema server occorre attivare il bit TxData.
Enable (BOOL) Comando attivazione SNMP Manager.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento.
SAddress (@USINT) Indirizzo IP o URL del server a cui connettersi.
SPort (UINT) Porta TCP a cui connettersi sul server.
DEDefs (@TCPDEXCHNODEDEFS) Indirizzo allocazione struttura TCPDEXCHNODEDEFS di definizione nodo.
Heartbeat (REAL) Tempo di invio frame di heartbeat (S).
Enabled (BOOL) Blocco funzione abilitato.
Fault (BOOL) Attivo per un loop di programma se errore gestione.
Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di spiare il funzionamento della FB. Sono
previsti vari livelli di triggers.
TFlags Descrizione
16#00000001 Rx: Sequenze ricezione frame.
16#00000002 Tx: Sequenze trasmissione frame.
16#40000000 Er: Errore gestione.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10062020 FB eseguita in una task diversa dalla task di background.
10062025 DEDefs non impostato correttamente.
10062100 Timeout esecuzione.
10062110 Errore case gestione.
10062200 Header frame ricevuto da server con lunghezza errata.
10062201 Header frame ricevuto da server di tipo errato.
10062202 Header frame ricevuto da server ID nodo errato.
10062203 Header frame ricevuto da server ID messaggio errato.
10062204 Header frame ricevuto da server lunghezza dati errata.
10062400 Data frame ricevuto da server con lunghezza errata.
10061600~1 Errore trasmissione frame dati verso server.
Esempi
Nell'esempio viene gestito un client che gestisce lo scambio con un sistema server.
Definizione variabili
Esempio ST
(* Program initialization *)
IF (SysFirstLoop) THEN
DEDefs.NodeID:=1; (* Node ID *)
DEDefs.MsgID:=16#4567; (* Message identifier *)
DEDefs.RxBuffer:=ADR(RxBuffer); (* Rx buffer address *)
DEDefs.RxLength:=SIZEOF(RxBuffer); (* Rx buffer length *)
DEDefs.TxBuffer:=ADR(TxBuffer); (* Tx buffer address *)
DEDefs.TxLength:=SIZEOF(TxBuffer); (* Tx buffer length *)
(* Client configuration. *)
(* [End of file] *)
Type Library
7.28.1 MCReader, magnetic card reader
FB eLLabDevicesLib_A000
Questo blocco funzione gestisce l'acquisizione della traccia 2 o della traccia 3 da una carta
magnetica tramite un lettore connesso a due ingressi digitali di un modulo CPU.
Sugli ingressi Strobe e Data occorre appoggiare lo stato dei due ingressi digitali di
acquisizione dei rispettivi segnali in uscita dal lettore di carta magnetica
In BData ed in BDLength occorre definire l'indirizzo e la dimensione in bytes del buffer di
appoggio dei dati letti dalla carta magnetica.
Inserendo la carta magnetica nel lettore si attiverà l'uscita CPresent ed al termine della
lettura della carta, se lettura corretta si attiverà l'uscita Done. I dati letti dalla carta sono
trasferiti nel buffer indirizzato da BData. Sull'uscita ByteNr viene ritornato il numero di bytes
letti dalla carta.
In caso di errore di lettura si attiva una delle uscite di errore.
Strobe (BOOL) Stato dell'ingresso connesso al segnale strobe del lettore.
Data (BOOL) Stato dell'ingresso connesso al segnale data del lettore.
BData (@BYTE) Occorre definire l'indirizzo del buffer di appoggio dei dati letti.
BDLength (UDINT) Occorre definire l lunghezza del buffer di appoggio dati letti.
Connections (USINT) Numero di connessioni contemporanee gestite.
Done (BOOL) Si attiva al termine della lettura della carta magnetica.
CPresent (BOOL) Attivo se carta in lettura.
EParity (BOOL) Attivo se errore di parità in lettura.
ECheck (BOOL) Attivo se errore LRC sul dato in lettura.
ELength (BOOL) Attivo se errore lunghezza dato in lettura.
ByteNr (USINT) Numero di bytes dati letti da carta.
Esempi
Nell'esempio viene gestito un lettore di carte a strisciamento della Magtek
Connesso a due ingressi digitali di un modulo SlimLine compact.
Il programma è eseguito nella task Fast e come si vede è stato impostato il
tempo di esecuzione della task a 100uS per permettere la lettura della carta
anche quando viene strisciata molto velocemente.
Il dato letto dalla carta è appoggiato nell'array BData.
Definizione variabili
(* [End of file] *)
Type Library
7.29.1 ModbusMsCore, Modbus master core
FB eLLabMdbDevsLib_A000
Delay (UINT) Tempo di pausa dopo l'esecuzione del comando modbus espresso in mS.
Enabled (BOOL) Attivo su abilitazione FB.
Fault (BOOL) Attivo per un loop se errore esecuzione comando.
MMID (UDINT) Modbus master ID da passare alle FB collegate.
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10064010 FB eseguita in una task diversa dalla task di background.
Esempi
Nell'esempio viene gestita la lettura di un analizzatore di rete Eastron tipo SDM120.
Definizione variabili
Esempio LD
Type Library
7.29.2 EastronSDM120, Eastron SDM120 energy meter
FB eLLabMdbDevsLib_A000
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10065010 FB eseguita in una task diversa dalla task di background.
10065020 MMID non definito.
10065030 MMID non impostato correttamente.
10065100 Troppe FB istanziate.
Esempi
Nell'esempio viene gestita la lettura di un analizzatore di rete Eastron tipo SDM120.
Definizione variabili
Type Library
7.29.3 EastronSDM630, Eastron SDM630 energy meter
FB eLLabMdbDevsLib_A000
Codici di errore
In caso di errore si attiva l'uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.
Codice Descrizione
10066010 FB eseguita in una task diversa dalla task di background.
10066020 MMID non definito.
10066030 MMID non impostato correttamente.
10066100 Troppe FB istanziate.
Esempi
Nell'esempio viene gestita la lettura di un analizzatore di rete Eastron tipo SDM630.
Definizione variabili
8 Protocolli di comunicazione
I registri (16 Bits) del real time clock sono allocati in locazioni consecutive a partire dall'indirizzo modbus 100. I registri
contengono il valore attuale del real time clock e scrivendo un nuovo valore il real time clock verrà automaticamente
aggiornato.
Ecco come si presenta la visualizzazione del file system alla connessione. Le cartelle Project e System sono riservate
al sistema e si consiglia di non modificarne il contenuto. I file delle pagine utente possono essere trasferiti nelle
cartelle Storage e SDCard (Se presente).
Quindi l'utente può creare le sue pagine web utilizzando un qualsiasi editor html ma anche semplicemente usando un
semplice editor di testo come il blocco note, certo deve conoscere la sintassi del linguaggio html. Le pagine create
saranno trasferite nella directory desiderata ed accedendo da un normale browser alla pagina la pagina sarà
visualizzata.
Salvando il testo riportato in un file, esempio SPage.htm, e trasferendo il file nella directory Storage di SlimLine, sarà
possibile visualizzare la pagina web risultante semplicemente digitando nel proprio browser l'indirizzo della pagina.
Naturalmente la pagina può contenere links ad altre pagine, sarà così possibile realizzare una propria navigazione tra
diverse pagine. Ecco lo stesso esempio di prima con incluso la definizione di uno stile.
Sorgente html pagina
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>SlimLine - Simple page</title>
<style type="text/css">
.Bolded {font-family: Arial, Helvetica, sans-serif; font-size: 20px; font-style: normal;font-weight: bold;}
</style>
</head>
<body>
This page is served by the <span class="Bolded">SlimLine</span>
</body>
</html>
Salvando il testo riportato in un file, esempio DPage.htm, e trasferendo il file nella directory Storage di SlimLine, sarà
possibile visualizzare la pagina web risultante semplicemente digitando nel proprio browser l'indirizzo della pagina.
Come si vede nella riga superiore viene visualizzato il valore della variabile PLC DB100.10 mentre impostando un
valore nella casella di testo della riga inferiore e agendo sul tasto Save sarà possibile impostare il valore della variabile
PLC DB100.12.
Naturalmente in una pagina web possono essere visualizzate e possono essere impostate tutte le variabili desiderate,
si consiglia comunque di non esagerare con il numero di variabili, è preferibile suddividerle in più pagine.
Flags
+ La visualizzazione delle variabili con segno, inizierà sempre con il segno - o +.
space La visualizzazione delle variabili con segno, inizierà sempre con il segno - o con lo spazio.
x I valori diversi da 0 vengono prefissati con 0x.
0 Al valore visualizzato vengono aggiunti 0 fino al raggiungimento del numero di cifre desiderato (Per
variabili di tipo d, i, o, u, x, X, e, E, f, g, G).
Conversion
d Valore decimale con segno.
i Valore decimale con segno.
o Valore ottale senza segno.
u Valore decimale senza segno.
x Valore esadecimale, viene visualizzato utilizzando lettere minuscole (Da 0 a 9, da a a f).
X Valore esadecimale, viene visualizzato utilizzando lettere maiuscole (Da 0 a 9, da A a F).
e Valore decimale in virgola mobile, visualizzato con indicazione dell'esponente (Esempio: [-]d.ddde+dd).
E Valore decimale in virgola mobile, visualizzato con indicazione dell'esponente (Esempio: [-]d.dddE+dd).
f Valore decimale in virgola mobile (Esempio: [-]d.ddd).
c Singolo carattere.
s Stringa.
In pratica un campo <form> con id MyForm contiene una casella di testo con id UINT12 di dimensione 5 caratteri con
un massimo impostabile di 10 caratteri. Nel form trova posto anche un pulsante di tipo submit la cui pressione esegue
l'invio dell'intero modulo.
Definendo nel browser il valore della casella di testo ed agendo sul tasto Save, il dato inputato verrà inviato al server
che visualizzerà la pagina DPage.htm e contemporaneamente provvederà a scrivere il valore definito nella variabile
UINT DB100.12.
9.4.2 ARG id
Il campo id dell'argomento serve a referenziare l'oggetto all'interno del form in modo da poterlo valorizzare con la
funzione SetValues(). La scelta di definirlo come UINT12 utilizzata nell'esempio è puramente indicativa, meglio sarebbe
utilizzare una definizione che ne riprenda il significato (Esempio “SetPoint”, “Preset”, ecc.).
Per visualizzare lo stato reale degli ingressi la pagina viene automaticamente rinfrescata ogni 10 secondi. Per ottenere
l'aggiornamento della pagina dopo la direttiva <head> viene posta la dichiarazione:
<meta http-equiv="refresh" content="10">
Per la gestione della pagina sono utilizzate alcune funzioni javascript.
Check(Field, Value), Imposta o rimuove il simbolo di tick sull'oggetto di tipo checkbox indicato in Field in base a Value.
SetValues(), Eseguita al caricamento della pagina esegue l'aggiornamento di tutti gli oggetti di tipo checkbox presenti.
SubmitForm(Form), Eseguita su pressione del tasto Set outputs controlla se i checkbox di attivazione uscite sono
settati ed aggiorna il valore dei campi hidden di scrittura variabili.
Sorgente funzioni javascript di pagina
<script language="javascript">
function Check(Field, Value) {document.MyForm[Field].checked=(Value != 0);}
function SetValues()
{
Check("Inp00", '<!--["%d", BOOL, 0]-->');
Check("Inp01", '<!--["%d", BOOL, 1]-->');
Check("Out00", '<!--["%d", BOOL, 3]-->');
Check("Out01", '<!--["%d", BOOL, 4]-->');
}
function SubmitForm(Form)
{
if (document.getElementById('Out00').checked) document.getElementById('BOOL3').value="1";
if (document.getElementById('Out01').checked) document.getElementById('BOOL4').value="1";
document.forms[Form].submit();
}
</script>
function SetValues()
{
Choose("Port", '<!--["%s", STRING, 2048]-->');
Choose("Baudrate", '<!--["%d", UDINT, 2056]-->');
Choose("DataBits", '<!--["%d", USINT, 2060]-->');
Choose("Parity", '<!--["%d", STRING, 2064]-->');
Choose("DTRMng", '<!--["%d", USINT, 2068]-->');
Set("DTROn", '<!--["%d", UINT, 2070]-->');
Set("DTROff", '<!--["%d", UINT, 2072]-->');}
</script>
// *****************************************************************************
// "SFW191A000" FUNZIONI PER GESTIONE AJAX
// *****************************************************************************
// Le seguenti funzioni gestiscono lo standard AJAX "Asynchronous Java and XML",
// con esse viene gestito lo scambio dinamico di dati con le pagine web.
// *****************************************************************************
// FUNZIONE "SetupValues(PContent)"
// *****************************************************************************
// Questa funzione viene eseguita su risposta Ajax, nella variabile "PContent"
// è presente tutto il contenuto della pagina richiesta.
// -----------------------------------------------------------------------------
function SetupValues(PContent)
{
var Value=new Array(); //Array valori ricevuti da server
if (PContent.indexOf('|') != -1)
{
Value=PContent.split('|');
document.getElementById("Angle").value=Value[0];
document.getElementById("Sin").value=Value[1];
document.getElementById("Cos").value=Value[2];
}
}
</script>
</head>
<body onLoad="setInterval('AJAXSendRequest(\'Values.htm\')', 3000)">
<table border="0">
<tr>
<td>Angle:</td>
<td><input type="text" id="Angle" size="4" maxlength="4"/></td>
<td>Sin:</td>
<td><input type="text" id="Sin" size="6" maxlength="6"/></td>
<td>Cos:</td>
<td><input type="text" id="Cos" size="6" maxlength="6"/></td>
</tr>
</table>
</body>
</html>
Sul caricamento della pagina <body onLoad="setInterval('AJAXSendRequest(\'Values.htm\')', 3000)"> viene
eseguita la richiesta AJAX ogni 3 secondi della pagina Values.htm. Il valore di ritorno di questa pagina viene
automaticamente passato alla funzione SetupValues che lo parsa e copia i valori negli oggetti di visualizzazione. La
pagina Values.htm ritorna i valori delle 3 variabili separati dal simbolo |. Ecco il listato di questa pagina.
Sorgente pagina Values.htm
<!--['%d', UINT, 0]-->|<!--['%6.3f', REAL, 4]-->|<!--['%6.3f', REAL, 8]-->
Esempio LD
Esempio IL
LD 16#12345678
ROL 16
ST VarOut (* Output variable *)
Esempio ST
VarOut:=ROL(16#12345678, 16); (* Output variable *)
Esempio LD
Esempio IL
LD 16#1234
ROL 8
ST VarOut (* Output variable *)
Esempio ST
VarOut:=ROL(16#1234, 8); (* Output variable *)
Esempio LD
Esempio IL
LD 16#12
ROL 4
ST VarOut (* Output variable *)
Esempio ST
VarOut:=ROL(16#12, 4); (* Output variable *)
Specifier Meaning
%d An integer in normal decimal (that is, base-10) notation.
%o An integer in octal (base-8) notation.
%x An integer in hexadecimal (base-16) notation.
%D An integer in decimal, or (if it starts with 0) octal, or (if it starts with 0x) hexadecimal notation. Hence,
sscanf("12", "%D", i), sscanf("014", "%D", i) and sscanf("0xC", "%D", i) all yield the value 12 in i.
%f A floating-point number.
%c The character code of a single character.
%s A string. If %s is followed by %d, %s will read any non-numerical characters. If followed by %[], %s will
read any characters not present in the set in the %[]. If followed by normal text, %s will match all
characters up to, but not including, the first occurrence of that text.
%Ns As above, but a string of exactly N characters
%[chars] A string containing any of the characters in the list characters.
A minus sign can be used to give a range of values, so e. g. %[a-d] means a string consisting of any of
the characters a, b and c.
A ^ sign means "not", so e. g. %[^abc] means any character except a, b and c.
They can be combined, so %[a-cf] means a, b, c, and f.
%{format%} Repeatedly matches the format specifier format as many times as possible, and gives an array of arrays
with the results. Example: %{%d%} matches zero or more integers.
%% A single percent (%) character.
Se viene posto un asterisco tra il segno % ed l'operatore (Esempio %*d) la funzione esegue la scansione dell'operatore
ma non valorizza la variabile di ritorno. Questo può essere utile per saltare dalla stringa alcuni caratteri.
Le definizioni riportate possono essere modificate in accordo alle Regular expressions. Di seguito riporto uno
screenshot di un programma di esempio.
Come si vede nella scansione dei numeri è possibile definire il numero di cifre da acquisire. Ipotizzando una stringa del
tipo “124.5” avremo:
SysVarsscanf(ADR(SSource), '%d', USINT_TYPE Ritornerà il valore USINT 124 fermando la scansione al primo
carattere che non è numerico (Il punto decimale).
SysVarsscanf(ADR(SSource), '%2d', USINT_TYPE Ritornerà il valore USINT 12 fermando la scansione dopo 2 cifre.
SysVarsscanf(ADR(SSource), '%f', REAL_TYPE Ritornerà il valore REAL 124.5 fermando la scansione al primo
carattere che non è numerico (Lo spazio dopo il numero).
SysVarsscanf(ADR(SSource), '%2f', REAL_TYPE Ritornerà il valore REAL 12 fermando la scansione dopo 2 cifre.
SysVarsscanf(ADR(SSource), '%s', STRING_TYPE Ritornerà il valore STRING ab+cd:e fermando la scansione al
terminatore di stringa.
SysVarsscanf(ADR(SSource), '%3s', STRING_TYPE Ritornerà il valore STRING ab+ fermando la scansione dopo 3
caratteri.
SysVarsscanf(ADR(SSource), '%3[a-z]', STRING_TYPE Ritornerà il valore STRING ab fermando la scansione al
primo carattere che non è compreso nel range da a-z. Nel caso ci fossero stati più caratteri in quel range la scansione
si sarebbe fermata al 3 carattere.
SysVarsscanf(ADR(SSource), '%[a-z]', STRING_TYPE Ritornerà il valore STRING ab fermando la scansione al primo
carattere che non è compreso nel range da a-z.
SysVarsscanf(ADR(SSource), '%[^+]', STRING_TYPE Ritornerà il valore STRING ab fermando la scansione al primo
carattere che non è diverso dal carattere “+”.
SysVarsscanf(ADR(SSource), '%[^:]', STRING_TYPE Ritornerà il valore STRING ab+cd fermando la scansione al
primo carattere che non è diverso dal carattere “:”.
Ecco un esempio di utilizzo della funzione SysVarfprintf per definire oltre ai caratteri stampabili anche i caratteri non
stampabili ed inviarli verso lo stream di uscita. In questo esempio viene inviato verso la porta seriale COM0 la stringa
[Ciao] seguita da carriage return e line feed.
Definizione variabili
Esempio LD
Esempio ST
(* Rx data from stream. *)
WHILE (TO_BOOL(SysGetIChars(File))) DO
@Ptr:=TO_USINT(Sysfgetc(File)); (* Rx string *)
Ptr:=Ptr+1; (* String pointer *)
Per la trasmissione dei dati in uscita dallo stream si utilizza la funzione che controlla se spazio disponibile
SysGetOSpace, e se lo spazio è sufficiente a contenere la stringa, o come nell'esempio, se il buffer di uscita è vuoto è
possibile trasferire la stringa sullo stream con la funzione SysVarfprintf.
Definizione variabili
Esempio ST
(* Tx data to stream. *)
Esempi
Conversione di una variabile di tipo DINT in una variabile di tipo USINT nei diversi linguaggi di programmazione.
Naturalmente se il valore della variabile VarDINT supera il valore 255 (Limite della variabile VarUSINT), verrà ritornato il
resto della divisione per il limite.
Definizione variabili
Esempio IL
LD VarDINT (* DINT variable *)
TO_USINT
ST VarUSINT (* USINT variable *)
Esempio FBD
Esempio LD
Esempio ST
VarUSINT:=TO_USINT(VarDINT); (* USINT variable *)
Nell'esempio riporto un semplice programma che acquisisce i valori delle variabili SysUSet(x) e li trasferisce nella
rispettiva variabile di visualizzazione SysUInfo(x). Nella pagina web il valore impostato nella variabile SysUSet(x) su
accettazione con il tasto Write verrà ritornato nella variabile SysUInfo(x) come visibile dallo screenshot riportato sopra.
Definizione variabili
Esempio ST
(* Read user settings and write user infos. *)
IF (SysUVSet) THEN
i:=SysVarsscanf(ADR(SysUSetA), '%d', UDINT_TYPE, ADR(Values[0]));
i:=SysVarsnprintf(ADR(SysUInfoA), 16, '%d', UDINT_TYPE, ADR(Values[0]));
11 Esempi di programmazione
Una volta inclusi nel progetto gli esempi, sarà possibile utilizzarli direttamente, oppure con con semplici operazioni di cut
and paste incollare parti di codice sorgente dal progetto di esempio.
12 Appendici
Negation -
Complement NOT
Exponentiation **
Multiply *
Divide /
Modulo MOD
Add +
Subtract -
Comparison < , > , <= , >=
Equality =
Inequality <>
Boolean AND &
Boolean AND AND
Boolean Exclusive OR XOR
Boolean OR OR
Statement Esempio
Assignment A:=B; CV:=CV+1; C:=SIN(X);
RETURN RETURN;
IF D:=B*B-4*A*C;
CASE TW:=BCD_TO_INT(THUMBWHEEL);
TW_ERROR:=0;
CASE TW OF
1,5: DISPLAY:=OVEN_TEMP;
2: DISPLAY:=MOTOR_SPEED;
3: DISPLAY:=GROSS-TARE;
4,6..10: DISPLAY:=STATUS(TW-4);
ELSE
DISPLAY:=0;
TW_ERROR:=1;
END_CASE;
QW100:=INT_TO_BCD(DISPLAY);
FOR J:=101;
WHILE J:=1;
REPEAT J:=-1;
REPEAT
J:=J+2;
UNTIL J=101 OR WORDS[J]='KEY'
END_REPEAT ;
EXIT EXIT;
Empty Statement ;
12.4 ID oggetti
Tutti gli oggetti (Funzioni e/o blocchi funzione) hanno un identificativo univoco che li contraddistingue. L'ID è ritornato
anche nell'eventuale codice di errore (Riferimento alla funzione SysGetLastError ed alla variabile SysLastError). Il
codice di errore si compone dell'ID oggetto seguito da 3 cifre che indicano il codice di errore.
Di seguito la tabella degli ID oggetti. Il simbolo (●) indica che l'oggetto è obsoleto. Sugli oggetti obsoleti è riportata tra
parentesi l'ultima versione di libreria e di manuale in cui l'oggetto era presente.
ID Oggetto
9923 (000 ÷ 999) Program code extension
9924 (000 ÷ 999) SysOSIDValue, get or set an operating system variable
9925 (000 ÷ 999) SysMemFind, locate a memory area inside another
9926 (000 ÷ 999) SysStrFind, locate a substring inside a string
9927 (000 ÷ 999) Sysstrlen, calculate length of string
9928 (000 ÷ 999) Systoupper, convert a character to upper case
9929 (000 ÷ 999) Systolower, convert a character to lower case
9930 (000 ÷ 999) Sysmemmove, copy bytes between two memory areas
9931 (000 ÷ 999) Sysmemset, fill a memory area with a character
9932 (000 ÷ 999) SysLWVarsnprintf, variable print to string with append
9933 (000 ÷ 999) SysRMAlloc, allocates the relocatable memory
9934 (000 ÷ 999) SysRMFree, frees the relocatable memory
9935 (000 ÷ 999) SysGetEndianness, get the system endianness
9936 (000 ÷ 999) SysGetUTCDateTime, get the system UTC date and time
9937 (000 ÷ 999) SysSetUTCDateTime, set the system UTC date and time
9938 (000 ÷ 999) SysGetCheck, get the check
9939 (000 ÷ 999) SysFIsOpen, get the file open status
9940 (000 ÷ 999) SysTimeZoneAdj, adjust date and time
9941 (000 ÷ 999) SysTCPClient, opens a TCP/IP connection
9942 (000 ÷ 999) SysTCPServer, accept TCP/IP connections
9943 (000 ÷ 999) SysUDPClient, send UDP data stream
9944 (000 ÷ 999) SysUDPServer, accept UDP data stream
9945 (000 ÷ 999) SysGetIpInfos, returns IP infos
9946 (000 ÷ 999) SysSerialPort, manage serial port
9947 (000 ÷ 999) SysMAlloc, memory allocation
9948 (000 ÷ 999) SysSetTaskLpTime, set task loop time
9949 (000 ÷ 999) Funzione embedded
9950 (000 ÷ 999) SysSpyData, system spy data
9951 (000 ÷ 999) SysSetPWMOut, set PWM output
9952 (000 ÷ 999) SysDirListing, directory listing
9953 (000 ÷ 999) SysI2CWrRd, writes/reads on I2C extension bus
9954 (000 ÷ 999) SysCANTxMsg, transmit a CAN message
9955 (000 ÷ 999) SysCANRxMsg, receives a CAN message
9956 (000 ÷ 999) SysIsCANRxTxAv, checks if CAN Rx or Tx is available
9957 (000 ÷ 999) SysCANSetMode, set the CAN controller mode
9958 (000 ÷ 999) Sysfseek, file seek
9959 (000 ÷ 999) Sysfilelength, file lengh
9960 (000 ÷ 999) Sysrename, file rename
9961 (000 ÷ 999) Sysremove, file remove
9962 (000 ÷ 999) SysFOBfFlush, file output buffer flush
9963 (000 ÷ 999) SysFOBfClear, file output buffer clear
9964 (000 ÷ 999) SysFIBfClear, file input buffer clear
9965 (000 ÷ 999) SysFGetOBfSize, get file Tx output buffer size
9966 (000 ÷ 999) SysFGetIBfSize, get file Rx input buffer size
9967 (000 ÷ 999) SysFGetOSpace, get output available space on file
9968 (000 ÷ 999) SysFGetIChars, get input available characters from file
9969 (000 ÷ 999) Sysfwrite, write data to file
9970 (000 ÷ 999) Sysfread, read data from file