structured text - politecnico di...
TRANSCRIPT
Structured Text
22-23 Maggio 2001 1
Structured Text
Marco MauriPolitecnico di Milano
P.zza Leonardo da Vinci, 32
Structured Text
22-23 Maggio 2001 2
Sommario
• La struttura del linguaggio
– Come assegnare un valore ad una variabile
– Come creare espressioni semplici e complesse
– L’uso degli operatori aritmetici, logici e di
comparazione
• Come chiamare Function e Function Block
• Uso dei costrutti del linguaggio
• Come creare costrutti annidati
Structured Text
22-23 Maggio 2001 3
Struttura del linguaggio
• Linguaggio di alto livello con una sintassi simile a quella del
PASCAL, ma è stato sviluppato espressamente per applicazioni
di controllo
• Molto semplice da interpretare e leggere soprattutto da parte di
sviluppatori software.
• Particolarmente adatto per calcoli aritmetici anche complessi
• I programmi possono essere costruiti con molta libertà ed è
possibile inserire caratteri di tabulazione, spazi o commenti in
maniera analoga a quanto si fa per altri linguaggi di
programmazione,
Structured Text
22-23 Maggio 2001 4
Istruzioni di assegnamento
• Una istruzione di assegnamento ha la forma generale:
X := Y
• Y rappresenta una espressione che produce un nuovo valore per la variabile X. L’espressione può essere molto semplice (ad esempio una costante) oppure molto complessa (ad esempio un invocazione a numerose espressioni annidate)
• X può essere una variabile semplice, un array o una struttura
Structured Text
22-23 Maggio 2001 5
Istruzioni di assegnamentoTYPE Alarm
STRUCT
TimeOn : DATE_AND_TIME;
Duration : TIME;
END_STRUCT;
END_TYPE
VAR
Rate,A1 : REAL;
Count : INT;
Alarm : Alarm;
Alarm2 : Alarm;
Profile : ARRAY[1..10] OF REAL;
RTC1 : RTC (*Real Time Clock*)
END_VAR
Rate := 13.1; (* Espressione letterale , costante *)
Count := Count + 1; (* Semplice espressione *)
A1 := LOG(Rate) (* Valore da una funzione *)
Alarm1.TimeOn := RTC1.CDT(* Parametro di uscita di un FB *)
Alarm2 := Alarm1 (* Variabili multielemento *)
Profile[3] := 10.3 + SQRT(Rate +2.0) (*Espressione complessa *)
Structured Text
22-23 Maggio 2001 6
Espressioni
• Vengono utilizzate per calcolare e valutare i valori derivati da altre costanti e variabili;
• Utilizzano una o più funzioni, variabili, operatori;
• Possono produrre tipi di dato elementare o derivati
• Possono essere create utilizzando espressioni più semplici annidate
10.3 + SQRT(LOG(Rate) +2.0)
Structured Text
22-23 Maggio 2001 7
Operatori
Operatore Descrizione Precedenza
(…) Parentesi Alta
Function(..) Lista di parametri di una funzione, valutazione
di una funzione
** Elevamento a potenza
-
NOT
Negazione
Complemento booleano
*
/
MOD
Moltipicazione
Divisione
Divisione modulare
+
-
Addizione
Sottrazione
<,>,<=,>= Operatori di comparazione
Structured Text
22-23 Maggio 2001 8
Operatori
Operatore Descrizione Precedenza
=
<>
Uguaglianza
Disuguaglianza
AND, & AND booleano
XOR OR esclusivo booleano
OR OR booleano Bassa
Area := PI * R *R
V := K ** (-W * T)
Volts := Amps * Ohm;
Start := Oilpress AND Steam AND Pump
Status := (Valve1 = Open) XOR (Valve1 = Shut)
Structured Text
22-23 Maggio 2001 9
Valutazione di Espressioni
L’ordine di valutazione delle espressioni dipende dalla
precedenza degli operatori utilizzati
Rate := Speed1/10.0 + Speed2/20.0 - SQRT(Press+6.0);
Assumendo Speed1 = 50.0 , Speed2 = 60.0, Press = 30.0 abbiamo il
seguente ordine di valutazione:
Speed1/10.0 = 5.0
Speed2/20.0 = 3.0
Press+6.0 = 36.0
SQRT(Press+6.0)= 6.0
5.0 + 3.0 = 8.0
8.0 – 6.0 = 2.0
Structured Text
22-23 Maggio 2001 10
Chiamata di un Function Blocks
• Una istanza ad un FB può essere invocata
chiamando il nome dell’istanza con i valori dei
parametri di ingresso. Se i valori dei parametri di
ingresso non sono forniti vengono posti ai valori di
deafult assegnati durante la definizione del Function
Block.
FunctionBlockInstance(
InputPar1 := Valore,
InputPar2 := Valore, …
)
Structured Text
22-23 Maggio 2001 11
Chiamata di un Function Blocks
SimpleControlREAL
REAL
CONTROLMODE
PV
SP
Mode
OUT REAL
VAR
Loop1 : SimpleControl
END_VAR
(* Invocazione iniziale *)
Loop1(PV := Input1.Out + Offset, SP := 100.0);
… ecc
Loop1(PV:= Input1.Out, Mode := MANUAL)
…
FlowRate := Loop1.Out;
E’ possibile assegnare
direttamente una variabile al
valore di uscita usando
l’operatore => :
Loop1(PV: = %IW100, OUT => FlowRate);
Structured Text
22-23 Maggio 2001 12
Istruzioni condizionali – IF...THEN
IF <espressione booleana> THEN
<istruzioni>
END_IF
IF <espressione booleana> THEN
<istruzioni>
ELSE
<istruzioni>
END_IF
IF <espressione booleana> THEN
<istruzioni>
ELSEIF <espressione booleana>
<istruzioni>
ELSE
<istruzioni>
END_IF
• Può essere aggiunto un
numero qualsiasi di ELSEIF
al costrutto IF…THEN
• E’ consentito l’annidamento
Structured Text
22-23 Maggio 2001 13
Istruzioni condizionali – IF…THEN
IF Collision THEN
Speed := 0;
Brakes := ON;
END_IF;
IF (Gate = CLOSED) AND (Pump = ON) THEN
Control_State := Active;
ELSE
CONTROL_State := Hold
PumpSpeed := 10.0;
END_IF
Structured Text
22-23 Maggio 2001 14
Istruzioni condizionali - CASE
• Consente di eseguire determinate istruzioni in funzione del
valore intero assunto da un’espressione.
• Possono essere usate anche variabili di tipo enumerativo
CASE < espressione intera > OF
<primo valore intero>: <istruzioni>
<secondo valore intero>: <istruzioni>
……
ELSE
<istruzioni>
END_CASE
Structured Text
22-23 Maggio 2001 15
Istruzioni condizionali - CASE
CASE speed_setting OF
1: speed := 10.0;
2: speed := 20.4;
3: speed := 30.0; fan1 := ON
4,5: speed := 50.0; fan2 := ON;
6..10: speed := 60.0; water := ON;
ELSE
speed := 0; SpeedFault := TRUE;
END_CASE
Structured Text
22-23 Maggio 2001 16
Istruzioni condizionali - CASE
TYPE
SPEED: (STOPPED, SLOW, MEDIUM, FAST);
END_TYPE
….
CASE PumpSpeed OF
STOPPED : rate := 0.0;
SLOW : rate = 20.4;
MEDIUM : rate = 30.0;
ELSE
rate:= 0
END_CASE
Structured Text
22-23 Maggio 2001 17
Istruzioni iterative – FOR… DO
• Consente di ripetere una o più istruzioni un numero di
volte pari al valore di una particolare variabile
FOR <inizializzazione della variabile di iterazione>
TO <valore finale dell’espressione>
BY <espressione di incremento> DO
<istruzioni>
END_FOR;
Opzionale se omesso
è per default 1
Structured Text
22-23 Maggio 2001 18
Istruzioni iterative – FOR… DO
FOR I := 100 TO 1 BY -1 DO
channel[I].status := ON;
END_FOR;
FOR T := FarmSize-1 TO TankMax*2 DO
tankNo := T; vessel(tank := T);
END_FOR
Lo standard definisce che la variabile utilizzata per il ciclo può
dipendere dalla piattaforma su cui è implementato il programma.
E’ quindi consigliabile non utilizzarla al di fuori del ciclo.
Structured Text
22-23 Maggio 2001 19
Istruzioni iterative – WHILE… DO
• Consente di eseguire una o più istruzioni finché una espressione booleana resta vera
WHILE <espressione booleana> DO
<istruzioni>
END_WHILE
WHILE Value < (MaxValue - 10.0) DO
bridge1();
Value := Value + bridge1.Position;
END_WHILE
Structured Text
22-23 Maggio 2001 20
Istruzioni iterative – REPEAT…UNTIL
• Consente di eseguire una o più istruzioni finché una
espressione booleana resta vera
REPEAT
<istruzioni>
UNTIL <espressione booleana>
END_REPEAT; Tries := 0;
REPEAT
tries := tries +1;
switchingear1(Mode := DISABLE);
UNTIL (switchgear1.State = OFF) OR (tries >4)
END_REPEAT
Structured Text
22-23 Maggio 2001 21
Istruzioni iterative – EXIT
• Può essere utilizzato solo all’interno di istruzioni e consente di terminare cicli iterativi
• Dopo l’istruzione di EXIT l’esecuzione continua dalla fine delle istruzione di iterazione
Fault := FALSE;
FOR I:= 1 TO 20 DO
FOR J := 0 TO 9 DO
IF FaultList [I,J] THEN
FaultNo := I*10 + J;
Fault := TRUE; EXIT;
EN_IF;
END_FOR;
END_FOR;
Structured Text
22-23 Maggio 2001 22
RETURN
• Può essere utilizzato all’interno di un function
block o di una funzione e consente di uscire
dal corpo di un’istruzione
• L’esecuzione continua dalla fine della
funzione o del function block
Structured Text
22-23 Maggio 2001 23
RETURN
FUNCTION_BLOCK TEST_POWER
VAR_INPUT
CURRENT, VOLTS1, VOLTS2, VOLTS3 : REAL;
END_VAR
VAR_OUTPUT
OVERVOTS : BOOL;
END_VAR
IF VOLTS1*CURRENT > 100 THEN
OVERVOLTS := TRUE; RETURN;
END_IF;
IF VOLTS2*(CURRENT+10.0) > 100 THEN
OVERVOLTS := TRUE; RETURN;
ENF_IF;
IF VOLTS3*(CURRENT+20.0) > 100 THEN
OVERVOLTS := TRUE
ENF_IF;
END_FUCNTION_BLOCK
Structured Text
22-23 Maggio 2001 24
Conclusioni• ST è un linguaggio che può essere usato per
programmare un ampio spettro di applicazioni industriali
• E’ un linguaggio di alto livello fortemente tipizzato e con una sintassi formale
• Permette di assegnare variabili, calcolare espressioni complesse, ecc.
• ST fornisce il supporto per avere porzioni di codice ad esecuzione condizionale, ripetuta e per chiamare funzioni e function block
• ST può essere naturalmente usato per descrivere il comportamento delle POU.