Documente Academic
Documente Profesional
Documente Cultură
Automate Programabile PDF
Automate Programabile PDF
Autorul
CUPRINS
Capitolul 1: CARACTERISTICI ŞI PERFORMANŢE ALE
AUTOMATELOR PROGRAMABILE
1.1. Structura automatelor programabile 7
1.2. Module de intrare ieşire 9
1.3. Funcţionarea automatelor programabile 11
1.4. Diagrame logice 13
BIBLIOGRAFIE 113
CAP 1. CARACTERISTICI ŞI
PERFORMANŢE ALE AUTOMATELOR
PROGRAMABILE
Ieşiri cu relee
Ieşirile cele mai obişnuite sunt cele de tip releu. Releele pot fi
folosite atât cu sarcină de curent alternativ, cât şi continuu. Metoda standard
de conectare a sarcinilor la ieşirile AP-ului presupune folosirea unei surse de
curent alternativ, însă poate fi folosit şi curentul continuu.
Releele se află în interiorul automatului programabil. Atunci când
programul care rulează în automat indică ieşirii să devină activă (adevarată),
AP-ul va aplica o tensiune bobinei releului, care va închide contactul
corespunzător. La închiderea contactului începe să circule curent prin
circuitul extern. Atunci când programul indică dezactivarea ieşirii, AP-ul va
întrerupe tensiunea aplicată bobinei releului, circuitul extern va fi deschis,
deci inactiv.
De fapt sunt mai mult de trei paşi, mai au loc verificarea sistemului
şi actualizarea valorilor curente ale ceasului şi numărătorului intern.
Timpul de răspuns
AP-ul poate vedea dacă o intrare este activă sau inactivă doar dacă o
citeşte. Cu alte cuvinte, el testează intrările doar în porţiunea
corespunzătoare a ciclului de scanare (fig. 1.3).
Dacă nu este posibil ca intrările să fie active atât de mult timp, AP-ul
nu mai poate citi intrările active nemaiputând implementa corect o aplicaţie
de control. Există o cale de a rezolva acest neajuns (mai precis două):
Funcţia de extindere a impulsului. Această funcţie extinde
lungimea (durata) unui semnal de intrare până la momentul la care
AP-ul testează intrările, în ciclul următor.
Funcţia de întrerupere. Această funcţie întrerupe ciclul de
scanare pentru a rula o rutină specială scrisă de utilizator. Când se
activează o intrare, indiferent de starea ciclului de scanare, AP-ul
opreşte execuţia programului principal şi execută rutina de
întrerupere (fig. 1.4). O rutină poate fi privită ca un mini-program
în afara programului principal. După ce a terminat execuţia rutinei
de întrerupere, se întoarce în punctul în care se oprise şi continuă
normal procesul de scanare.
Limbajul Grafcet
O macro-etapă poate conţine una sau mai multe etape iniţiale. Aceste
etape pot fi activate la punerea sub tensiune sau prin program.
Dinamica unei diagrame Grafcet este următoarea: dacă o etapă este
activă şi una din condiţiile de tranziţie ataşate este adevărată, etapa actuală
se dezactivează şi se activează etapa următoare (sau etapele următoare, în
cazul unui paralelism).
Un exemplu de diagramă Grafcet este prezentat în fig. 1.10.
Fig.1.10. Exemplu de diagramă Grafcet
Ladder Diagram
cu semnificaţia:
CU = Count Up
CD = Count Down
DN = Done
OV = Overflow
UN = Underflow
UA = Update Accumulated Value
cu semnificaţia:
EN = Enable
EU = Unload Enable
DN = Done
EM = Stack Empty
ER = Error
UL = Unload
IN = Inhibit
FD = Found
Formatul general de adresare este Rf:e.s sau Rf:e/b cu semnificaţiile
deja cunoscute.
Aceste tipuri de fişiere sunt folosite în cadrul instrucţiunilor de tip
stivă, shiftare, secvenţiere, prezentate în capitolul 2.4.
C = A AND B
Dacă A şi B sunt adevărate atunci C devine sau rămâne adevărată.
Tabela de adevăr pentru acest tip de bloc este prezentată în tabelul 2.6:
D = ( A AND NOT(B) ) OR C
D = (A AND NOT(B)) OR C
E = (A AND NOT(B)) OR C
F = (A AND NOT(B)) OR C
De asemenea se poate impune şi o condiţie suplimentară pentru
emisia unei anumite ieşiri.
F = ((A AND B) OR C) AND E
D = (A AND B) OR C
Instrucţiuni pe bit:
Toate instrucţiunile pe bit necesită ca parametru adresa unui bit
dintr-un fişier de date.
--] [-- XIC (Examine if Close). Instrucţiune de intrare. Este
TRUE când bitul testat este 1 (on).
--]/[-- XIO (Examine if Open). Instrucţiune de intrare. Este
TRUE când bitul testat este 0 (off).
--( )-- OTE (Output Energize). Instrucţiune de ieşire. Este
TRUE (setează bitul de ieşire) când toate condiţiile
precedente din ramură sunt TRUE. Resetează bitul altfel.
--(L)-- OTL (Output Latch). Instrucţiune de ieşire. Bitul adresat
devine TRUE (1) când condiţiile precedente de pe ramură sunt
TRUE. Când condiţiile devin FALSE, OTL rămâne TRUE până
când o ramură ce conţine o instrucţiune OTU cu aceeaşi adresă
devine TRUE.
--(U)-- OTU (Output Unlatch). Instrucţiune de ieşire. Bitul
adresat devine FALSE (0) când condiţiile precedente de pe
ramură sunt TRUE. Când condiţiile devin FALSE, OTU rămâne
FALSE până când o ramură ce conţine o instrucţiune OTL cu
aceeaşi adresă devine TRUE.
--[OSR]-- OSR (One-Shot Rising). Instrucţiune de intrare.
Trece ramura în TRUE pentru o scanare, la fiecare tranziţie
din FALSE – TRUE a condiţiilor precedente din ramură.
Parametrii instrucţiunii:
o Timer : adresa unei element din fişierul de tip timer T4
o Timer base: reprezintă pasul de incrementare al
acumulatorului pentru numărare. În cazul automatului
nostru este fixat la 0.01 sec = 10 ms.
o Preset: valoarea presetată – se introduce atunci când se
editează programul; se introduce o valoare numerică pe
16 biţi < 216;
Preset = timpul dorit de măsurat/ baza de timp
Ex : dacă vrem să numărăm 10 sec, preset = 10/0.01 =
1000
o Acc: valoare acumulată – se introduce la editare de obicei
este 0 ca valoare de start a acumulatorului, valoarea
acestuia fiind incrementată în timpul execuţiei
programului, la fiecare ciclu automat, cu o valoare
numerică egală cu valoarea timpului scurs de la ciclul
anterior imparţit la baza de timp.
Cum funcţionează?
o Dacă expresia de la intrare este adevarată atunci
instrucţiunea TON incrementează accumulatorul la
fiecare ciclu automat cu numărul de incremente de timp
trecute de la ciclul anterior.
o Dacă valoarea accumulatorului depăşeşte valoarea
presetată → atunci bitul DN din primul cuvânt al
elementului de timer folosit devine 1 (acest bit putând fi
testat intr- ramura următoare), asta înseamnând că a
trecut timpul dorit.
o Dacă expresia de la intrare este falsă, contorizarea se
opreşte, accumulatorul şi biţii de stare (EN, TT, DN.....)
sunt resetaţi.
Parametrii instrucţiunii:
o Counter: adresa unei element din fişierul counter C5
o Preset: valoarea presetată – se introduce atunci când se
editează programul
o Acc: reprezintă valoarea acumulată după fiecare
incrementare a numărătorului
Cum funcţionează?
o Instrucţiunea incrementează ACC – la fiecare trecere din
FALSE în TRUE a expresiei de la intrare (în cadrul a
două cicluri automate consecutive). Numărătoarea se
opreşte când condiţiile devin FALSE.
o Dacă valoarea ACC depăşeşte PRE → atunci bitul DN
din primul cuvânt al bitului folosit devine 1
o Resetarea se face numai prin instrucţiunea Reset.
Parametrii instrucţiunii:
o Această instrucţiune are asociat un fişier de trei cuvinte
(octeţi). Cuvântul 0 este cuvântul de control şi conţine
biţii de stare:
o bitul 10 (UA) actulizează acumulatorul pentru a
reflecta starea imediată a numărătorului când HSC
devine activă;
o bitul 12 (OV) indică o depăşire a numărătorului;
o bitul 13 (DN) indică egalarea presetului de către
acumulator;
o bitul 15 (CU) arată starea de activ/inactiv a
instrucţiunii HSC.
o Cuvântul 1 conţine valoarea de preset în gama 1 - 32.767,
iar cuvântul 2 valoarea acumulată.
Cum funcţionează?
o Fiecare tranziţie a intrarii I:0/0 face ca acumulatorul să se
incrementeze; când acumulatorul egalează valoarea
presetului bitul Done (C5:0/DN) este setat şi
acumulatorul pus pe zero.
o Pentru a afla starea HSC-ului, programul ladder trebuie
să interogheze bitul Done (C5:0/DN). Imediat cum acesta
a fost detectat activ trebuie dezactivat (cu instrucţiunea
OTU) înainte ca acumulatorul (C5:0.ACC) să egaleze
valoarea presetului (C5:0.PRE) pentru ca altfel bitul
Overflow (C5:0/OV) este setat.
o Valoarea acumulatorului (C5:0.ACC) de obicei este
actualizată de fiecare dată când ramura cu HSC este
evaluată, actualizarea însemnând transferarea valorii
acumulatorului hardware în acumulatorul HSC software.
După actualizare instrucţiunea HSC resetează bitul
C5:0/UA.
o Dacă se doreşte testarea C5:0.ACC în programul ladder
după rangul care conţine instrucţiunea HSC, trebuie mai
intâi să se seteze bitul C5:0/UA. Acest lucru este necesar
întrucât intrarea I:0/0 poate să tranziteze de câteva ori de
la ultima evaluare a lui HSC.
Instrucţiuni de comparare
Sunt instrucţiuni de intrare, au ca operanzi cuvinte ale fişierelor de
date.
EQU (Equal)
Compară (A) cu (B), unde A şi B sunt adrese de cuvinte
Dacă (A) = (B), atunci instrucţiunea devine TRUE.
NEQ (Not Equal).
Devine TRUE dacă (A) diferit de (B).
LES (Less Than).
Devine TRUE dacă (A) < (B).
LEQ (Less Than or Equal)
Devine TRUE dacă (A) ≤ (B).
GRT (Greater Than)
Devine TRUE dacă (A) > (B).
GEQ (Greater Than or Equal)
Devine TRUE daca (A) ≥ (B).
MEQ (Masked Comparison for Equal)
Permite testarea egalităţii după aplicarea unei măşti (poate fi o
valoare hexa).
LIM (Limit Test)
Permite testarea încadrării unei valori între două limite. Low Limit =
val./adr. limită inferioară. Test = val./adr.val. test. High Limit =
val./adr. limită superioară. Este TRUE când Low Lim ≤ Test ≤
High Lim.
Instrucţiuni matematice
O instrucţiune matematică acceptă doi operanzi, dintre care maxim
unul poate fi o constantă. Sunt instrucţiuni de ieşire.
ADD (Add) Dest = A + B
SUB (Substract) Dest = A - B
MUL (Multiply) Dest = A * B
DIV (Divide) Dest = A / B
NEG (Negate) Dest = (complement faţă de 2) Sursa
CLR (Clear) Dest ← 0
SQR (Square Root) Sursa
SCL (Scale Data) Dest ← (Sursa):Rate.
Funcţii şi subprograme
Fig.3.1.Ciclul ISaGRAF
Sequential Function Chart (SFC) este un limbaj grafic utilizat pentru a descrie
operaţii secvenţiale. Procesul este reprezentat printr-o succesiune de paşi finiţi expliciţi
legaţi prin tranziţii. Fiecărei tranziţii îi este ataşată o condiţie de tip boolean. Acţiunile ce au
loc la fiecare pas sunt descrise folosind celelalte limbaje (ST, IL, LD sau FBD).
Un program SFC se reprezintă ca un graf orientat cu noduri de tip etape şi tranziţii.
Legăturile multiple sunt utilizate pentru a reprezenta convergenţe şi divergenţe. Unele părţi
ale programului pot fi descrise separat şi reprezentate în program printr-un simbol. Aceste
părţi sunt cunoscute sub denumirea de macro etape.
Regulile grafice de bază ale SFC:
Un nod de tip etapă nu poate fi urmat de un nod de acelaşi tip
Un nod de tip tranziţie nu poate fi urmat de un nod de acelaşi tip
Programarea SFC este de obicei separată în două niveluri :
- nivelul 1 arată organigrama programului, numerele paşilor şi tranziţiilor şi comentariile
ataşate acestora
- nivelul 2 reprezintă programarea în limbaj ST sau IL a acţiunilor din cadrul paşilor sau
condiţiile ataşate tranziţiilor.
Un program SFC trebuie să conţină cel puţin o etapă iniţială. Fiecare etapă are
două atribute ce pot fi utilizate de celelalte limbaje:
- GSnnn.x starea pasului: activ/inactiv (variabilă booleană)
- GSnnn.t cât timp este activ pasul (timp)
( nnn este numărul de referinţă al pasului )
Tranziţii (transitions):
Tranziţiile sunt reprezentate printr-o bară orizontală ce taie
linia de legătură dintre doi paşi. Similar etapelor, tranziţiile sunt referite
printr-un număr şi au aceeaşi organizare pe nivele:
Fig.3.5. Tranziţie
Operaţii SFC
O operaţie SFC este o secvenţă SFC fiu, pornită sau oprită după cum se
schimbă starea pasului. Poate avea unul din atributele: N (non stored), S
(set), R (reset).
Sintaxa operaţiilor:
<prog_fiu>(N); prog_fiu este pornit când pasul devine activ şi oprit
când pasul devine inactiv
<prog_fiu>; acelaşi efect, atributul N fiind opţional
<prog_fiu>(S); prog_fiu este pornit când pasul devine activ şi îşi
păstrează starea când pasul devine inactiv
<prog_fiu>(R); prog_fiu este oprit când pasul devine activ şi îşi
păstrează starea când pasul devine inactiv
Secvenţa SFC fiu prog_fiu trebuie să fie un program SFC fiu al
programului curent.
Folosirea atributelor S(Set) sau R(Reset) pentru o acţiune SFC are exact
aceleaşi efecte cu folosirea lui GSTART şi GKILL într-o operaţie de
tipul impuls din ST.
Convenţia IL:
Codul IL poate fi introdus direct într-un bloc SFC, după cum urmează:
ACTION(P): (* sau N*)
#info=IL
<instrucţiune>
<instrucţiune>
…
#endinfo
END_ACTION;
Convenţia ST
Limbajul ST poate descrie condiţia ataşată tranziţiei. Expresia finală
a acesteia trebuie să fie de tip boolean şi să se termine cu punct şi
virgulă. Expresia poate conţine constante TRUE sau FALSE, o
singură variabilă de intrare sau o variabilă internă booleană sau o
combinaţie de variabile ce conduce la o valoare booleană.
Convenţia LD
Limbajul LD poate descrie condiţia ataşată tranziţiei. Un exemplu
de programare în LD pentru tranziţii este redat mai jos:
Convenţia IL
Condiţia este descrisă conform următoarei sintaxe:
#info=IL
<instrucţiune>
<instrucţiune>
…
#endinfo
valoarea conţinută în registrul IL (current result) la sfârşitul
secvenţei condiţionând tranziţia:
current result=0 condiţia este FALSE
current result<>0 condiţia este TRUE
Operaţiile pe care le poate efectua un părinte pentru controlul fiilor săi sunt:
Start (GSTART) Porneşte programul fiu: activează fiecare pas iniţial al său. Fii
progamului fiu nu sunt porniţi automat.
Kill (GKILL) Opreşte programul fiu dezactivând fiecare pas activ. Toţi fiii
programului fiu sunt de asemenea opriţi.
Freeze (GFREEZE) Suspendă execuţia programului (dezactivând fiecare pas activ şi
suspendând verificarea condiţiilor de depăşire a tranziţiilor) şi salvează starea paşilor
programului astfel încât programul să poată fi repornit. Toţi fiii programului fiu sunt
suspendaţi din execuţie.
Restart (GRST) Reporneşte un progam SFC suspendat reactivându-i toţi paşii
dezactivaţi la suspendarea din execuţie. Programele fiu nu sunt automat repornite.
Get status (GSTATUS) Obţine starea curentă (activ, inactiv, suspendat) a unui program
fiu.
Apelul procedurilor
Nume: numele procedurii
Semnificaţia: apelează o procedură din biblioteca ISaGRAF sau din
biblioteca utilizatorului şi accesează parametrii
returnaţi
Sintaxa: (*apelarea unei proceduri*)
<nume_bloc>(<p1>, <p2> ...);
(* obţinerea valorii returnate*)
<rezultat>:= <nume_bloc>, <ret_param1>;
...
<rezultat>:= <nume_bloc>, <ret_paramN>;
Operatorul « REDGE »
Nume: REDGE
Semnificaţia: evaluează frontul crescător al unei expresii boolene
complete
Sintaxa: <edge>:=REDGE(<expr_logica>,
<var_booleana>);
Operanzi: primul operand este orice variabilă booleană sau
expresie complexă, al doilea operand este o variabilă
booleană internă folosită pentru a reţine ultima stare a
expresiei
Valoarea returnată: TRUE atunci când expresia logică de la intrare trece
din FALSE în TRUE în cadrul a două cicluri
automate, FALSE altfel
Operatorul « FEDGE »
Nume: FEDGE
Semnificaţia: evaluează frontul descrescător al unei expresii
boolene
Sintaxa: <edge>:=FEDGE(<expr_logica>,<var_booleana>);
Operanzi: primul operand este orice variabilă booleană sau
expresie complexă, al doilea operand este o variabilă
booleană internă folosită pentru a reţine ultima stare a
expresiei
Valoarea returnată: TRUE atunci când expresia logică de la intrare trece
din TRUE în FALSE în cadrul a două cicluri
automate, FALSE altfel.
Frontul descrescător al unei expresii nu poate fi detectat mai mult
decât o dată în acelaşi ciclu de execuţie, folosind operatorul FEDGE. Acest
operator poate fi folosit pentru a descrie condiţia ataşată unei tranziţii SFC.
Atribuirea
Nume: :=
Semnificaţia: atribuie o variabilă unei expresii
Sintaxa: <var>:=<expr>;
Operanzi: variabila trebuie să fie internă sau de ieşire
variabila şi expresia trebuie să aibă acelaşi tip
Expresia poate fi apelată de un subprogram sau o funcţie din
biblioteca ISaGRAF.
Instrucţiunea RETURN
Nume: RETURN
Semnificaţia: termină execuţia programului curent
Sintaxa: RETURN;
Operanzi: nici unul
Într-un bloc SFC, instrucţiunea RETURN indică sfârşitul execuţiei
unui singur bloc.
Instrucţiunea IF-THEN-ELSIF-ELSE
Nume: IF...THEN...ELSIF...THEN...ELSE...END_IF
Semnificaţia: execută una din două liste de declaraţii ST
selecţia este făcută în concordanţă cu valoarea
expresiei booleene
Sintaxa: IF <expr_bool> THEN
<instrucţiune>;
<instrucţiune>;
...
ELSIF <expr_bool> THEN
<instrucţiune>;
<instrucţiune>;
...
ELSE
<instrucţiune>;
<instrucţiune>;
...
END_IF;
Instrucţiunile ELSE şi ELSIF sunt opţionale. Dacă instrucţiunea
ELSE nu este scrisă, nu este executată nicio instrucţiune când condiţia este
FALSE.
Instrucţiunea CASE
Nume: CASE...OF...ELSE... END_CASE
Semnificaţia: execută una din câteva liste de declaraţii ST
selecţia este făcută în concordanţă cu o expresie
întreagă
Sintaxa: CASE <expr_int> OF
<valoare>: <instrucţiuni>
<valoare>, <valoare>: <instrucţiuni>;
...
ELSE
<instrucţiuni>;
END_CASE;
Valorile CASE trebuie să fie expresii constante întregi. Câteva
valori, separate prin virgule, pot duce la aceeaşi listă de instrucţiuni.
Instrucţiunea ELSE este opţională.
Instrucţiunea WHILE
Nume: WHILE ... DO ... END_WHILE
Semnificaţia: structură iterativă pentru un grup de instrucţiuni ST
condiţia “continue” este evaluată înaintea oricărei
iteraţii
Sintaxa: WHILE <expr_bool> DO
<instrucţiune>;
<instrucţiune>;
....
END_WHILE;
Instrucţiunea REPEAT
Nume: REPEAT ... UNTIL ... END_REPEAT
Semnificaţia: structură iterativă pentru un grup de instrucţiuni ST
condiţia “continue” este evaluată după orice iteraţie
Sintaxa: REPEAT
<instrucţiune>;
<instrucţiune>;
....
UNTIL <expr_bool>
END_REPEAT;
Instrucţiunea FOR
Nume: FOR ... TO ... BY ... DO ... END_FOR
Semnificaţia: execută un număr limitat de iteraţii
folosind o variabilă index analog întreagă
Sintaxa: FOR <index> := <mini> TO <maxi> BY <step>
DO
<instrucţiune>;
<instrucţiune>;
END_FOR;
Operanzi: index: variabilă analog internă care creşte la fiecare
buclă
mini: valoare iniţială pentru index (înaintea primei
bucle)
maxi: valoarea maximă permisă pentru index
step: indexul de creştere la fiecare buclă
Instrucţiunea [BY step] este opţională. Dacă nu este specificată,
pasul de incrementare este 1.
Instrucţiunea EXIT
Nume: EXIT
Semnificaţia: ieşirea dintr-o instrucţiune iterativă FOR, WHILE sau
REPEAT
Sintaxa: EXIT;
Operanzi: nici unul
3.3.6. Extensii ale limbajului ST
Instrucţiunea TSTART
Nume: TSTART
Semnificaţia: porneşte incrementarea unei variabile de tip timer,
fără a-i reseta valoarea
Sintaxa: TSTART (<var_timp>);
Operanzi: orice variabilă timer inactivă
Valoarea returnată: nici una
Instrucţiunea TSTOP
Nume: TSTOP
Semnificaţia: opreşte incrementarea unei variabile de tip timer, fără
a-i modifica valoarea
Sintaxa: TSTOP (<var_timp>);
Operanzi: orice variabilă timer activă
Valoarea returnată: nici una
Instrucţiunea GSTART
Nume: GSTART
Semnificaţia: porneşte un program fiu SFC punând un jeton în
fiecare etapă iniţială
Sintaxa: GSTART (<progr_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al celui
în care este scrisă instrucţiunea
Valoarea returnată: nici una
Instrucţiunea GKILL
Nume: GKILL
Semnificaţia: opreşte un program fiu SFC prin îndepărtarea
jetoanelor existente în etapele sale
Sintaxa: GKILL (<prog_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al celui
în care este scrisă instrucţiunea
Valoarea returnată: nici una
Instrucţiunea GFREEZE
Nume: GFREEZE
Semnificaţia: suspendă execuţia unui program SFC fiu
programele suspendate pot fi repornite prin
instrucţiunea GRST
Sintaxa: GFREEZE (<prog_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al
celui în care este scrisă instrucţiunea
Valoarea returnată: nici una
Instrucţiunea GRST
Nume: GRST
Semnificaţia: reporneşte un program fiu SFC suspendat prin
instrucţiunea GFREEZE
Sintaxa: GRST (<prog_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al celui
în care este scrisă instrucţiunea
Valoarea returnată: nici una
Instrucţiunea GSTATUS
Nume: GSTATUS
Semnificaţia: returnează starea curentă a unui program SFC
Sintaxa: <ana_var> := GSTATUS (<prog_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al celui
în care este scrisă instrucţiunea
Valoarea returnată: 0 = programul este inactiv (oprit)
1 = programul este activ (pornit)
2 = programul este îngheţat
Operaţii booleene:
boolean AND: ŞI boolean între două sau mai multe
valori
<var_0> :=<var_1> AND <var_2>
boolean OR: SAU boolean între două sau mai multe
valori
<var_0> :=<var_l> OR <var_2>
boolean Exclusive XOR : SAU exclusiv boolean între
două valori de intrare
<var_0> :=<var_1> XOR <var_2>
Operaţii aritmetice:
adunarea a două sau mai multe variabile analogice
<var_0> :=<var_l> + <var_2>
scăderea a două variabile analogice
<var_0> :=<var_l> - <var_2>
înmulţirea a două sau mai multe variabile analogice
<var_0> :=<var_l> * <var_2>
împărţirea a două variabile analogice
<var_0> :=<var_l> / <var_2>
Operaţii logice:
AND_MASK: ŞI bit cu bit
<rezultat> := AND_MASK <(16#abc,16#f0f)>
(*rezultatul este 16#a0c*)
OR_MASK: SAU bit cu bit
<rezultat> := OR_MASK <(16#abc,16#f0f)>
(*rezultatul este 16#fbf*)
XOR_MASK: SAU EXCLUSIV bit cu bit
<rezultat> := XOR_MASK <(16#012,16#011)>
(*rezultatul este 16#003*)
NOT_MASK: NEGAŢIE bit cu bit
<rezultat> := NOT_MASK <(16#1234)>
(*rezultatul este 16#FFFF_EDCB*)
Comparaţii:
mai mic: se testează dacă o valoare este mai mică
decât alta (analog, de tip timer sau mesaj)
<rezultat> := <(‘z’ < ’B’)>
(*rezultatul este fals*)
Conversia datelor:
BOO: converteşte orice variabilă în valoare de tip
boolean
<rezultat1> := BOO <(10)> ;
(*rezultatul1 este adevărat*)
<rezultat2> := BOO <(t#0s)> ;
(*rezultatul2 este fals*)
ANA: converteşte orice variabilă în valoare de tip întreg
<rezultat1> := ANA <(true)> ;
(*rezultatul1 este 1*)
<rezultat2> := ANA <(t#1s46ms)> ;
(*rezultatul2 este 1046*)
REAL: converteşte orice variabilă în valoare de tip real
<rezultat1> := REAL <(true)> ;
(*rezultatul1 este 1.00*)
<rezultat2> := REAL <(198)> ;
(*rezultatul2 este 198.0*)
TMR: converteşte orice variabilă analogică într-o
valoare de tip timer
<rezultat> := TIMER <(1234)> ;
(*rezultatul este t#1s234ms*)
MSG:converteşte orice variabilă într-o valoare de tip
mesaj
<rezultat> := MSG <(true)> ;
(*rezultatul este ‘TRUE’*)
Altele:
CAT: concatenarea mai multor mesaje într-unul singur
<numelemeu> := <(‘Dl’ + ‘’)+’Sorin’> ;
(* numelemeu := ‘Dl Sorin’ *)
SYSTEM:accesul la parametrii sistemului
OPERATE: accesul la canalele I/O
resetare bistabil
R_Trig: Rising edge detection
detectare front crescător a unei variabile booleene
F_Trig: Falling edge detection
detectare front descrescător a unei variabile booleene
SEMA: Semaphore
semafor
Proceduri de număratoare:
CTU: Up counter
numără crescător de la 0 la o valoare dată, 1 câte 1
CTD: Down counter
numără descrescător de la o valoare dată la 0, 1 câte 1
CTUD: Up-down counter
număra reversibil, de la 0 la o valoare dată sau de la o
valoare dată la 0
Proceduri de contorizare:
TON: On-delay timing
incrementează un timer intern până la o anumită valoare, de la
detectarea frontului crescător al semnalului declanşator până la
detectarea frontului descrescător
TOF: Off-delay timing
incrementează un timer intern până la o anumită valoare, de la
detectarea frontului descrescător al semnalului declanşator până
la detectarea frontului crescător
TP: Pulse timing
incrementează un timer intern până la o anumită valoare de la
detectarea frontului crescător al semnalului declanşator un
interval de timp determinat
Funcţii matematice:
ABS: Absolute value
returnează valoarea absolută (pozitivă) a valorii reale
EXPT: Exponent
returnează rezultatul real al operaţiei (bazaexponent) ‘baza’ fiind
primul argument şi ‘exponent’ al doilea
LOG: Logarithm
calculează logaritmul (baza 10) a unei valori reale
POW: Power calculation
returneaza rezultatul real al operatiei (bazaexponent) ‘baza’
fiind primul argument si ‘exponent’ al doilea; exponentul este o
valoare reală
SQRT: Square root
calculează rădăcina pătrată a unei valori reale
TRUNC: Truncate decimal part
trunchează o valoare reală pentru a avea doar partea
întreagă
Funcţii trigonometrice:
ACOS: Arc cosine
Calculează arccosinusul unei valori reale
ASIN: Arc sine
Calculează arcsinusul unei valori reale
ATAN: Arc tangent
Calculează arctangenta unei valori reale
COS: Cosine
Calculează cosinusul unei valori reale
SIN: Sine
Calculează sinusul unei valori reale
TAN: Tangent
Calculează tangenta unei valori reale
Variabilele pot fi de tip LOCAL sau GLOBAL. Variabilele locale pot fi folosite
doar de un program. Variabilele globale pot fi folosite de orice program al aplicaţiei
curente. Numele variabilelor trebuie să respecte următoarele reguli:
- numele nu trebuie să depăsească 16 caractere
- primul caracter trebuie să fie o literă
- următoarele caractere pot fi litere, numere sau caracterul underscore
O variabilă este identificată prin nume, comentariu, atribut, adresă şi
alte câmpuri specifice.
O constantă de tip timer trebuie să înceapă cu prefixul ‘T#’ sau ‘time#’. Unele
unităţi pot să nu apară. Exemple:
T#1H450MS 1 oră, 450 milisecunde
time#1H3M 1 oră, 3 minute
Capitolul 4. DESCRIEREA MEDIULUI DE
PROGRAMARE INDRALOGIC
Data types este cea de-a doua zonă de interes într-un proiect
IndraLogic, şi reprezintă pe lângă tipurile de date standard predefinite şi pe
cele definite specific de programator. Se pot crea aici structuri, enumeraţii şi
referinţe.
4.1.3. Conceptul Visualization
Graficul ce explică funcţionarea acestui bloc este cel din fig. 4.10.
Graficul ce explică funcţionarea acestui bloc este cel din fig. 4.12.
Apoi se merge la editorul de taskuri aşa cum s-a precizat mai sus.
Fig.4.18. Crearea unui nou task