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