Structured Text - Politecnico di Milano

Transcript

Structured Text - Politecnico di Milano
Structured Text
Structured Text
Marco Mauri
Politecnico di Milano
P.zza Leonardo da Vinci, 32
22-23 Maggio 2001
1
Structured Text
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
22-23 Maggio 2001
2
Structured Text
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,
22-23 Maggio 2001
3
Structured Text
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
22-23 Maggio 2001
4
Structured Text
Istruzioni di assegnamento
VAR
TYPE Alarm
STRUCT
TimeOn : DATE_AND_TIME;
Duration : TIME;
END_STRUCT;
END_TYPE
Rate,A1
Count
Alarm
Alarm2
Profile
RTC1
END_VAR
: REAL;
: INT;
: Alarm;
: Alarm;
: ARRAY[1..10] OF REAL;
: RTC (*Real Time Clock*)
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 *)
22-23 Maggio 2001
5
Structured Text
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)
22-23 Maggio 2001
6
Structured Text
Operatori
Operatore
Descrizione
(…)
Parentesi
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
22-23 Maggio 2001
Precedenza
Alta
7
Structured Text
Operatori
Operatore
Descrizione
=
<>
Uguaglianza
Disuguaglianza
AND, &
AND booleano
XOR
OR esclusivo booleano
OR
OR booleano
Precedenza
Bassa
Area := PI * R *R
V := K ** (-W * T)
Volts := Amps * Ohm;
Start := Oilpress AND Steam AND Pump
Status := (Valve1 = Open) XOR (Valve1 = Shut)
22-23 Maggio 2001
8
Structured Text
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
22-23 Maggio 2001
9
Structured Text
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, …
)
22-23 Maggio 2001
10
Structured Text
Chiamata di un Function Blocks
SimpleControl
REAL
PV
REAL
SP
CONTROLMODE
Mode
OUT
REAL
VAR
Loop1 : SimpleControl
END_VAR
E’ possibile assegnare
direttamente una variabile al
valore di uscita usando
l’operatore => :
Loop1(PV: = %IW100, OUT => FlowRate);
22-23 Maggio 2001
(* Invocazione iniziale *)
Loop1(PV := Input1.Out + Offset, SP := 100.0);
… ecc
Loop1(PV:= Input1.Out, Mode := MANUAL)
…
FlowRate := Loop1.Out;
11
Structured Text
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> • Può essere aggiunto un
<istruzioni>
numero qualsiasi di ELSEIF
ELSE
al costrutto IF…THEN
<istruzioni>
• E’ consentito l’annidamento
END_IF
22-23 Maggio 2001
12
Structured Text
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
22-23 Maggio 2001
13
Structured Text
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
22-23 Maggio 2001
14
Structured Text
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
22-23 Maggio 2001
15
Structured Text
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
22-23 Maggio 2001
16
Structured Text
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
22-23 Maggio 2001
17
Structured Text
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.
22-23 Maggio 2001
18
Structured Text
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
22-23 Maggio 2001
19
Structured Text
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
22-23 Maggio 2001
20
Structured Text
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;
22-23 Maggio 2001
21
Structured Text
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
22-23 Maggio 2001
22
Structured Text
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
22-23 Maggio 2001
23
Structured Text
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.
22-23 Maggio 2001
24