Documente Academic
Documente Profesional
Documente Cultură
04.04.2015 10:33 1
Limbajul ST sau SCL
Limbaje de programare
Limbaje de programare pentru AP
Limbajul IL (STL)
Limbajul ST(Structured Text)
Limbajul LAD (Ladder Diagram)
Limbajul FBD (Function Block Diagram)
Limbajul SFC (Sequential Function Chart)
04.04.2015 10:33 2
Limbajul ST
04.04.2015 10:33 3
Operatori i expresii în ST
Operatorul Descrierea Preceden a
04.04.2015 10:33 4
Instruc iunea de atribuire
Instruc iunea de atribuire are forma general :
<variabil >:=<expresie>
Prelucrarea descris de aceast instruc iune se realizeaz în
dou etape:
Calculul valorii expresiei din membrul drept;
Asocierea valorii astfel ob inute variabilei din membrul stâng.
PROCES
04.04.2015 10:33 5
Instruc
Sintaxa instruc iunii este:
iunea de decizie
IF <Expresie booleana> THEN
<Instruc iuni IF>
{ELSIF < Expresie booleana 1> THEN
<Instructiuni ELSIF1>
.
.
ELSIF <Expresie booleana n> THEN
<Instruc iuni ELSIF n>
ELSE
<Instruc iuni ELSE>}
END_IF;
Partea dintre paranteze {..} este op ional .
Instruc iunea IF se execut conform urm toarelor reguli:
Prima secven de instruc iuni (<Instruc iuni IF> ) se execut dac <Expresie booleana>
este adev rat . Restul secven elor de instruc iuni nu se execut ,în acest caz;
În cazul c <Expresie booleana> este fals se evalueaz expresiile booleene < Expresie
booleana 1> .. < Expresie booleana n> una dup alta pân când una din expresiile
booleene este adev rat . În acest caz se va executa i instruc iunea <Instruc iuni ELSIF i>
i va continua pân tot a a pân la ultimul ELSEIF;
Orice num r de instruc iuni ELSIF este permis;
Dac niciuna din instruc iunile ELSEIF nu are condi ia adev rat se execut secven a de
instruc iuni <Instruc iuni ELSE>;
Instruc iunea ELSE poate lipsi.
04.04.2015 10:33 6
Instruc iunea de decizie
VAR
N: INT;
SUM: INT;
OK: BOOL;
END_VAR
IF %I1.1 THEN
N:=0;
SUM:=0;
OK:=FALSE; // Setarea unui flag OK
ELSIF %I1.0=0 THEN
N:=N+1;
?PROCES SUM:=SUM+N;
ELSE
OK:=TRUE;
END_IF;
04.04.2015 10:33 7
Selec ia multipl
CASE <expresie> OF
<valoare 1>: <instructiuni 1>;
<valoare 2>: <instructiuni 2>;
..............
<valoare n>: <instructiuni n>;
{ELSE : <instructiuni ELSE>}
END_CASE;
Instruc iunea CASE se execut conform urm toarelor reguli:
Expresia de selec ie trebuie s întoarc o valoare întreag ;
Atunci când se execut o instruc iune CASE se evalueaz mai întâi expresia,
apoi se testeaz cu ce <valoare i> coincide. Dac se g se te aceast valoare
se execut grupul de instruc iuni corespunz tor valorii;
<valoare i> reprezint o constant întreag sau o lista de constante întregi
separate prin virgul sau o enumerare de forma <valoare i>. . <valoare f>,
ceea ce înseamn toate constantele întregi între <valoare i> i <valoare f>;
Dac nu se g se te nici o valoare egal cu <valoare i> se execut sec iunea
ELSE, dac exist sau nu se execut nici o instruc iune dac ELSE nu exist .
04.04.2015 10:33 8
Selec ia multipl
VAR
DISALAY: INT;
iVAL: INT;
VIT_MOTOR: INT;
TEMP_CUPTOR ARRAY[1..5] OF INT;
MASA_SAC ARRAY[1..20] OF INT;
END_VAR
CASE iVAL OF
1, 5: DISPLAY := TEMP_CUPTOR[iVAL];
2: DISPLAY := VIT_MOTOR;
PROCES
6..20: DISPLAY := MASA_SAC[iVAL];
ELSE
DISPLAY := 0;
iVAL_ERROR := 1;
END_CASE;
04.04.2015 10:33 9
Instruc iunea FOR
FOR <contor> := <valoare_initiala> TO <valoare_finala>
{BY <Pas>}
DO
<Instructiuni>
END_FOR;
Executarea instruc iunii se face conform cu urm toarele reguli:
La începutul buclei, variabila de control este setat cu valoarea ini ial i la
fiecare execu ie a buclei valoarea contorului este incrementat sau decrementat
pân se atinge valoarea final ;
Dac valoarea ini ial este peste valoarea final , instruc iunile corpului buclei nu
se execut .
Variabila de contor trebuie s fie de tip INT sau DINT;
Se poate omite cuvântul cheie BY (incrementul). Dac incrementul nu este
specificat atunci el este luat automat egal cu +1;
Ie irea dintr-o bucl FOR se poate face, înainte de îndeplinirea condi iilor de
ie ire de mai sus, utilizând instruc iunea EXIT;
Valoarea ini ial , valoarea final i expresia pentru increment se evalueaz odat
la începutul execu iei buclei FOR;
Alterarea valorii finale i a incrementului nu este permis în timpul execu iei
buclei.
04.04.2015 10:33 10
Instruc iunea REPEAT
REPEAT
<Instructiuni>
UNTIL <Expresie boolean >
END_REPEAT;
04.04.2015 10:33 11
Instruc iunea WHILE
04.04.2015 10:33 12
Instruc iuni de ie ire din cicluri
VAR
VAR
INDEX: INT;
INDEX: INT;
INDEX: INT; Var1 ARRAY[1..50] OF INT;
INDEX1: INT; INDEX: INT;
Var1 ARRAY[1..50] OF INT; END_VAR
END_VAR while INDEX <= 100 DO
FOR INDEX := 1 TO 50 BY 2 DO
INDEX := INDEX+1;
IF Var1[INDEX]>3 THEN
INDEX1 := INDEX; IF Var1[INDEX]= INDEX THEN
EXIT; CONTINUE;
END_IF; END_IF;
END_FOR; Var1[INDEX] :=0;
END_WHILE;
04.04.2015 10:33 13