TIA PORTAL-SCL PresentazioneSimaticLive · · 2011-12-20Vantaggi di S7-SCL Indicato per:...
Transcript of TIA PORTAL-SCL PresentazioneSimaticLive · · 2011-12-20Vantaggi di S7-SCL Indicato per:...
© Siemens AG 2011. All Rights Reserved.
TIA PORTAL-SCL
Structured Control Languageper Step7 V11
Orazio VinciE-mail : [email protected]
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Struttura della presentazione
Introduzione Caratteristiche generali Ambiente di sviluppo e finestra operativa
Dichiarazione delle interfacce e delle costanti
Programmazione dei blocchi Conversione del tipo di dati Accesso alle aree di memoria Operazioni Matemetiche Istruzioni di controllo del programma Richiamo di FB ed FC
Funzionalità di test Controllo delle variabili Utilizzo dei punti di arresto
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Cos’è l’SCL in TIA PORTAL?
LINGUAGGI DI PROGRAMMAZIONE PLC
S7-SCL
Linguaggio strutturato
KOP
FUP S7-GRAPH
Linguaggi grafici
AWL
Hardware oriented
Vinci Orazio
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Caratteristiche generali SCL
Simile al PASCAL… Non ha elementi grafici Elevati costrutti linguistici
…ma con elementi tipici del PLC. Ingressi, uscite, temporizzatori e contatori Concetto di blocco S7 (OB, FC, FB, DB, UDT)
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Vantaggi di S7-SCL
Indicato per: Programmazione di algoritmi complessi Programmazione di funzioni matematiche Gestione di dati e ricette (più semplice utilizzo degli ARRAY) Ottimizzazione del processo
Semplicità di comprensione dell’algoritmo rispetto ad AWL.
Possibilità di integrazione con gli altri linguaggi.
Risparmio di tempo nella stesura del programma.
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Svantaggi di S7-SCL
La compilazione non sempre ottimizza i tempi di processamento.
Difficoltà nel trovare errori rispetto a linguaggi di tipo grafico.
Linguaggi di programmazione ad alto livello poco conosciuti da manutentori e operatori.
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Come si apre l’editor SCL?
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Come si apre l’editor SCL?
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Come si apre l’editor SCL?
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Differenze di editor tra Step7 V5.5 e Step7 V11
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Ambiente di sviluppo
Finestra delcodice
Finestra per dichiarazione
interfacce
Finestra per informazioni generali del
blocco
Finestra personalizzabile
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Dichiarazione interfacce
Definisce convenzioni per variabili e parametri
XXInOutParametri di ingresso/uscita
XXOutputParametri di uscita
XXInputParametri di ingresso
XStaticVariabili statiche
XXXTempVariabili temporanee
XReturnVariabile di ritorno
OBFCFBNomeDati
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Dichiarazione interfacce
Vengono dichiarate come in tutti gli altri linguaggi di programmazione.
INTERFACCE BLOCCHI
TIA-SCL
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Tipi di dati utilizzabili
Tipi di dati semplici:
Campo di valoribitParola ChiaveTipo
TOD#0:0:0.0 fino a TOD#23:59:59.99932TIME_OF_DAY / TODOra del giorno (a intervalli di 1ms)
D#1990-01-01 fino a D#2168-12-3116DATE / DData (a intervalli di 1 giorno)
+/- T#24D_20H_31M_23S_647MS32TIME / TDurata (a intervalli di 1ms)
T#0H_0M_0S_10MS / T#2H_46M_30S_0MS 16S5TIME / S5TTempo S5
+/- 3,4E+38 fino a +/- 1,17E-38 32REALVirgola mobile
-2.147.483.648 fino a -2.147.483.647 32DINTDoppio intero
-32.768 a 32.76716INTIntero
Set di caratteri ASCII8CHARCarattere singolo
32DWORDDoppia parola
16WORDParola
8BYTEByte
0/1 o FALSE/TRUE1BOOLBit
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Tipi di dati utilizzabili
Tipi di dati composti:
Campo di valori / EsempibitParola ChiaveTipo
Es. Dati : STRUCTCorrente : REAL ;Tensione : INT := 5 ;
END_STRUCT ;
STRUCTStruttura
Es. ARRAY[1..3,1..4] OF INT:= -54, 736, -83, 77,-1289, 10362, 385, 2,
60, -37, -7, 103 ;ARRAYVettore/ matrice (max 6dim.)
Es. ‘stringa_caratteri’1 byte per carattere
STRINGStringa
DT#1990-01-01-0:0:0.0 fino a DT#2089-12-31-23:59:59.999
64DATE_AND_TIME
DTData e ora
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Tipi di dati utilizzabili
Tipi di dati per parametri:
Si possono assegnare variabili di qualsiasi tipo (tranne ANY) ma solo se dichiarate.
6POINTERPuntatore ad area di memoria
Messaggio di allarme4C_Alarm_sAllarme
2BLOCK_FCBlocco FC
2BLOCK_DBBlocco DB
10ANYTipo qualsiasi
Informazioni ulterioribyteParola ChiaveTipo
2BLOCK_FBBlocco FB
Salvati in Z e utilizzati per funzioni di conteggio (S_CU, S_CD, S_CUD)
2COUNTERContatore (solo input)
Salvati in T e utilizzati per funzioni di temporizzazione(S_PULSE, S_PEXT, S_ODT, S_ODTS, S_OFFDT)
2TIMERTemporizzatore (solo input)
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Conversione di tipi di dati
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Conversione di tipi di dati
TIA-SCL
Esempio:
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Codice di programmazione
Contiene istruzioni eseguite dopo il richiamo del blocco
Tutte le istruzioni terminano con un punto e virgola
Tutti gli identificatori utilizzati devono essere stati definiti in precedenza
Ogni istruzione può essere preceduta da una etichetta di salto
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzioni - Accesso aree di memoria
AD(3):PPAD3AW(8):PPAW8AB(0):PPAB0Periferia d’uscita
ED(7):PPED7EW(5):PPEW5EB(2):PPEB2Periferia
d’ingresso
DB9.DD(7)%DB9.DD7
DB3.DW(0)%DB3.DW0
DB2.DB(5)%DB2.DB5
DB1.DX(2.3)DB
MD(14)MD14MW(0)MW0MB(4)MB4MX(1.5)M1.5Merker
AD(0)AD0AW(2)AW2AB(6)AB6AX(3.5)A3.5Uscite
ED(16)ED16EW(10)EW10EB(1)EB1EX(8,1)E8.1Ingressi
Double WordWordByteBit
Accesso tramite Tag (operandi simbolici) Accesso con operandi assoluti
Se utilizzo il codice contenuto nelle caselle arancioni, in automatico il TIA genera un Tag associato all’area di memoria puntata.
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzioni - Accesso aree di memoria
Accesso indicizzato alle aree di memoria:EX ( #byteindex, #bitindex ) //Ingresso
MB ( #byteindex ) //Merker
AD ( #byteindex ) //Uscita
DB10.DX ( #byteindex, #bitindex ) //Un bit del DB10
DB11.DW ( #byteindex ) //Una word del DB11
WORD_TO_BLOCK_DB(#dbindex).DW(0) //Word0 di un DB
#block_dbindex.DX(3,5) //bit 3.5 di un DB
byteindex e bitindex di tipo INT o DINT dbindex di tipo WORD e block_dbindex di tipo BLOCK_DB
0 1 2 3E
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzioni – Operazioni aritmetiche
Grandi vantaggi rispetto ad AWL e KOP: Esempio di operazione: MD28 = (a * b) + 5 * ( c / d )
AWL
L c
L d
/R
L 5.0
*R
T MD20
L a
L b
*R
T MD24
L MD20
L MD24
+R
T MD28
KOP
SCLMD(28) := (#a * #b) + 5 * ( #c / #d )
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzioni – Assegnazione di valori
Esempio di assegnazione con variabili di tipo di dati semplici
Assegnazione variabile-variabile solo tra dati dello stesso tipo
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzioni – Assegnazione di valori
Esempio di assegnazione con variabili di tipo ARRAY:
Anche qui posso usare l’accesso indicizzato.
Max 6 dimensioni
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzioni di controllo
Istruzioni di selezione- Istruzione IF- Istruzione CASE
Istruzioni di elaborazione di loop- Istruzione FOR- Istruzione WHILE- Istruzione REPEAT
Istruzioni di salto di programma- Istruzione CONTINUE- Istruzione EXIT- Istruzione GOTO- Istruzione RETURN
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione IF
La struttura dell’istruzione e’:
IF espressione THEN
operazione;
ELSIF espressione THEN
operazione;
ELSE
operazione;
END_IF;
Viene eseguita la prima sequenza di istruzioni con l’espressione logica uguale a TRUE
Se nessuna espressione e’ uguale a TRUE, vengono eseguite le operazioni dell’ELSE
Vi può essere un numero qualsiasi di istruzioni ELSIF.
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione IF
ESEMPIO
Vengono passati in ingresso a una FC, 2 valori interi;
Se il primo è maggiore del secondo la funzione restituisce il valore di:primo valore - secondo valore
Se il secondo è maggiore del primo la funzione restituisce il valore di:secondo valore - primo valore
Altrimenti restituisce 0;
I valori vengono passati alla funzione tramite l’MW0 e l’MW2.Il risultato è salvato nell’MW4
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione IF
Esempio di applicazione dell’istruzione IF:
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione CASE
La struttura dell’istruzione e’:
CASE espressione OFvalore1 : operazioni;valore2 : operazioni;valore3 : operazioni;
ELSEoperazioni;
END_CASE ;
L’espressione deve fornire un valore di tipo INT;
Eseguita la lista di operazioni con valore uguale a quello fornito dall’espressione;
Se nessun valore e’ uguale a quello fornito dall’espressione vengono eseguite le operazioni dell’ELSE (opzionale).
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione FOR
La struttura dell’istruzione e’:
FOR AssegnazioneIniziale TO ValoreFinale BY Passo DO
operazioni;
END_FOR ;
La variabile di esecuzione deve essere INT o DINT e i valori iniziali e finali devono essere dello stesso tipo di dati.
All’inizio del FOR la variabile di esecuzione viene inizializzata.
Operazioni ripetute finché la variabile di esecuzione si trova nel range di valori definito da ValoreIniziale e ValoreFinale
Ad ogni passo del loop la variabile di esecuzione viene incrementata o ridotta del valore del passo
Se l’ampiezza del passo viene omessa, la variabile di esecuzione viene incrementata di 1 ogni passo del loop.
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione FOR
ESEMPIO
Realizzare un’FB che scrive un valore nei primi n elementi di un’array;
In ingresso vengono passati: - il valore da scrivere come variabile INT (MW0);- il numero di elementi da scrivere (MW2);
L’array è lungo 100 elementi ed è salvato nel DB di istanza dell’FB;
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione FOR
Esempio di applicazione dell’istruzione FOR
Ogni esecuzione del FOR, il parametro index viene impostato sul valore iniziale
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione WHILE
La struttura dell’istruzione e’:
WHILE Espressione DO
operazioni;
END_WHILE ;
Le operazioni vengono ripetute finche’ il valore dell’espressione e’ pari a TRUE.
Se l’espressione ha valore FALSE, il ciclo WHILE viene saltato.
L’espressione viene valutata all’inizio di ogni ciclo.
La variabile di esecuzione non viene inizializzata (diverso da FOR).
ATTENZIONE a non restare ‘intrappolati’ nel loop!!! -> CPU IN STOP!!!!
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione REPEAT
La struttura dell’istruzione e’:
REPEAT
operazioni;
UNTIL espressione
END_REPEAT ;
Le operazioni vengono ripetute finche’ il valore dell’espressione e’ pari a TRUE.
L’espressione viene valutata alla fine di ogni ciclo
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione CONTINUEEsempio di applicazione dell’istruzione CONTINUE
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione EXIT
Esempio di applicazione dell’istruzione EXIT:
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione GOTO
Con questa istruzione si esegue un salto di programma all’interno dello stesso blocco
Esempio di applicazione dell’istruzione GOTO:
Non e’ consentito eseguire un salto in un blocco di loop (WHILE, FOR e REPEAT)
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzione RETURN
Se usato causa l’interruzione dell’esecuzione del blocco e il ritorno all’esecuzione del blocco chiamante.
OB1
----------
----------
----------
FC1()
----------
----------
----------
FC1
-------
-------
-------
RETURN
-------
-------
Richiamo FC1
Uscita da FC1
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Vantaggi di gestione degli array
Esempio: Registrazione di temperature di un impianto di riscaldamento- array di 5 righe e 3 colonne;- nella prima colonna vengono memorizzate le temperature attuali nei diversi punti dell’impianto;- nella seconda colonna sono memorizzate le temperature minime fino a quel momento;- nell’ultima colonna sono memorizzate le temperature massime fino a quel momento.
25,5 °C18,2 °C21,3 °CTemp ambiente
80,0 °C58,6 °C64,7 °CTemp caldaia
40,0 °C26,1 °C32,3 °CTemp di ritorno
55,0 °C41,4 °C47,5 °CTemp di mandata
16,2 °C2,0 °C10,0 °CTemp esternaMassimaMinimaValore di misuraTemperatura
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Vantaggi di gestione degli array
In SCL basta passare le nuove temperature a un FB ed eseguire l’aggiornamento dei valori della matrice:
25,5 °C18,2 °C21,3 °CTempambiente
80,0 °C58,6 °C64,7 °CTempcaldaia
40,0 °C26,1 °C32,3 °CTemp di ritorno
55,0 °C41,4 °C47,5 °CTemp di mandata
16,2 °C2,0 °C10,0 °CTempesterna
MassimaMinimaValore di misuraTemperatura
X = 1
X = 2
X = 3
X = 4
X = 0
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Istruzioni - Richiamo di un FB
Nel richiamo di un FB e’ possibile assegnare dei valori agli ingressi e ingressi/uscite del bloccostesso
Gli FB possono essere richiamati come istanza globale o come istanza locale (multistanza)
La struttura del richiamo di un FB come istanza globale e’:
“DBx”.”FBx”(ing1 := value, //assegno ingressi
ing2 := value,
out => variable, //assegno uscite
in_out := variable //assegno ingressi-uscite
);
Non ha importanza l’ordine di assegnamento degli ingressi ma soltanto il tipo di dati utilizzato.
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Parte istruzioni – Richiamo di un FC
Gli FC che hanno RET_VAL di tipo VOID vengono richiamati utilizzando la seguente struttura:
FCx (ing1 := value, //assegno ingressi
ing2 := value,
in_out := variabile2, //assegno ingressi-uscite
out => variabile3 //assegno uscita
);
Non e’ necessario uguagliare il richiamo ad una variabile
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Funzionalità di test
Esistono diversi tipi di funzionalità di test per controllare l’esecuzione di un programma nella CPU e per localizzare probabili errori.
- Funzione ‘Controlla’.
- Test con i punti di arresto e modalità a passo singolo.
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Funzionalità di test - Controlla
Con questa funzione è possibile visualizzare nell’editor S7-SCL i nomi e i valori attuali delle variabili. Durante l'esecuzione del test, i valori delle variabili e dei parametri di quest’area vengono visualizzati in sequenza cronologica e aggiornati ciclicamente.
Area di controllo
Se le variabili vengono eseguite ad ogni ciclo non e’ semplice distinguerne i valori.
Pulsante di controllo
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Funzionalità di test – Punti di arresto
Per leggere e forzare i valori di stato bisogna utilizzare la VAT.
Navigazione tra i punti di
arresto
© Siemens AG 2011. All Rights Reserved.Industry SectorVinci Orazio
Vantaggi di S7-SCL
Indicato per: Programmazione di algoritmi complessi Programmazione di funzioni matematiche Gestione di dati e ricette (piu’ semplice utilizzo degli ARRAY) Ottimizzazione del processo
Semplicità di comprensione dell’algoritmo.
Possibilità di integrazione con gli altri linguaggi.
Risparmio di tempo e, quindi, diminuzione di costi.
© Siemens AG 2011. All Rights Reserved.
Grazie della Vostra attenzione!
Orazio VinciE-mail : [email protected]