Sunteți pe pagina 1din 72

FLEXFORM

Modulul 3 / Cursul 5
Dezvoltare tehnologica si tehnologii educationale
Controlul Sistemelor Industriale (I)

1. Sisteme de control industriale de tip AP (PLC)


- structură, limbaje standardizate
2. Limbajul industrial LDR (Ladder Diagram)
- operanzi, operatori, instrucțiuni
1. Sisteme de control industriale de tip AP (PLC)

• Elementul central în cadrul unui sistem mecatronic îl


constituie sistemul de control electronic care conduce sistemul
mecatronic respectiv.
• Aceste funcţii sunt asigurate de o structură fizică dedicată
de tip controler, care poate fi realizat cu circuite logice
integrate, microprocesoare, microcontrolere, automate
programabile (AP sau PLC = Programmable Logic
Controller).
• În cazul controlului aplicaţiilor industriale, cea mai largă
utilizare o au sistemele de control electronic de tip AP/PLC
(Programmable Logic Controller - Controler Logic Programabil/
Automat Programabil), care, pe baza unor programe elaborate de
utilizator, comandă procesul (sistemul mecatronic), vizualizează
starea procesului, semnalizează anumite defecţiuni, comunică între
ele sau cu alte structuri de control prin reţele standardizate.
Scurt istoric
• La sfârsitul anilor ’60 compania General Motors (1968) a elaborat
specificaţia de proiectare pentru un “calculator industrial” care urma să
înlocuiască controlul pe bază de relee din industria auto.
• Noul sistem de control trebuia să îndeplinească următoarele cerinţe:
– să ofere o modalitate simplă de programare a aplicaţiilor;
– să poată fi utilizat în mediile industriale (variaţii de temperatură,
tensiuni de alimentare variabile);
– modificările de program să nu presupună modificări structurale;
– să aibă dimensiuni reduse, siguranţă în funcţionare, robusteţe;
– costurile de întreţinere să fie reduse.
• Două companii independente au răspuns cerinţelor General Motors:
- Bedford Associates (astăzi Modicon)
- Allen Bradley.
• Primele asemenea sisteme erau alcătuite dintr-o unitate centrală
(“central processor”) conectată la exterior (proces) prin 4 module
de câmp: intrări şi ieşiri de curent continuu şi de curent alternativ.
• Proiectate ca înlocuitoare ale releelor, limbajul de programare
conceput a fost inspirat din diagramele aplicaţiilor conduse prin
relee, adresat electricienilor şi ca atare numit: Ladder Diagram
(diagrame “scară”).
• Numele (in limba engleza) dat acestor sisteme a fost initial
Programable Controllers, apoi după apariţia calculatoarelor
personale, (PC), acestea au fost denumite Programmable Logic
Controller (PLC). În România se utilizează mai mult denumirea de
Automat programabil (din franceză) pentru aceaste sisteme de
conducere.
• Iniţial, sarcina acestor controlere a fost să identifice starea logică a
unor semnale de intrare şi, funcţie de valoarea de adevăr a unei
expresii logice (construite pe baza semnalelor de intrare), să comute
ieşirile corespunzătoare.
• Treptat, capacitatea de procesare s-a dezvoltat prin asimilarea
funcţiilor temporizatoarelor, numărătoarelor, executarea operaţiilor
matematice, procesarea semnalelor analogice (măsurarea forţelor,
deplasărilor). Evoluţia tehnologiei a extins prelucrarea
semnalelor binare la semnalele analogice, devenind posibilă
implementarea controlului în buclă închisă.
• Aşadar, evoluţia în timp a PLC-urilor a făcut posibilă procesarea
semnalelor analogice, vizualizarea proceselor, comunicarea prin
reţele standardizate (CAN, PROFIBUS), accesarea aplicaţiilor de la
distanţă etc. Acest nivel de prelucrare a informaţiei nu se mai
regăseşte în denumirea controlerului (Controler Logic Programabil)
însă denumirea se păstrează în continuare: PLC.
PLC-uri – Definiție, Limbaje standardizate, Structură,
Funcţionare

 Termenul de PLC este definit prin IEC-1131:


,,Un sistem electronic (digital) de operare, proiectat pentru
utilizarea în mediul industrial, ce foloseşte o memorie
programabilă pentru stocarea internă a instrucţiunilor necesare
implementării unor funcţii specifice (logice, secvenţiale,
temporizare, contorizare, calcul matematic), pentru a controla
prin intrările şi ieşirile digitale şi analogice diferite tipuri de
maşini sau procese”.
 Aşadar, un PLC este un “computer” proiectat pentru funcţii de
control.
a) b)
Fig.1.1. PLC-uri: a) structură monobloc; b) structură modulară.

 Majoritatea PLC-urilor (Fig. 1.1) permit montarea adiţională


a unor module prin care se lărgeşte setul (numărul) de
semnale procesate sau care îmbogăţesc gama funcţiunilor:
module de intrare/ieşire digitale şi/sau analogice, module de
poziţionare, module de comunicaţie etc.
Fig.1.2. Structura unui PLC

Din punct de vedere funcţional, în structura unui PLC se disting trei


componente cu roluri bine definite (Fig. 1.2):
• modulele de intrare – preiau semnalele din sistemul controlat prin
intermediul senzorilor şi le convertesc în semnale logice pentru a putea fi
prelucrate de CPU;
• unitatea centrală de prelucrare (CPU) – procesează semnalele primite pe
baza instrucţiunilor unui program, ia decizii şi emite semnale numerice pe
modulele de ieşire în conformitate cu strategia de control;
• modulele de ieşire – convertesc semnale de la CPU în semnale de comandă
în scopul acţionării diferitelor echipamente prin intermediul actuatorilor.
 Programarea aplicaţiilor se realizează în general pe un sistem
de calcul auxiliar (PC) care comunică cu PLC-ul printr-un port
serial. Unele PLC-uri sunt prevăzute suplimentar şi cu
dispozitive dedicate de programare şi diagnosticare (console
de programare).
 Producătorii controlerelor industriale asigură mediile software de
dezvoltare şi implementare a aplicaţiilor: STEP 7, FST, CX
Programmer, RS Logix etc.
 Aceste medii permit dezvoltarea aplicaţiilor în diverse limbaje de
programare, mai mult sau mai puţin populare: Ladder diagram,
Statement list, Structured text, Sequential function chart etc.
• În funcţionarea PLC-urilor se disting ca elemente specifice pentru aceste
tipuri de structuri: procesarea ciclică şi imaginea de proces. Procesarea
ciclică presupune parcurgerea programului ,,linie cu linie” şi, după
prelucrarea ultimei instrucţiuni, reluarea prelucrării de la început (Fig.1.3).
• Rularea ciclică a programului va continua până la comanda de oprire.

Fig.1.3. Modul de funcţionare al unui PLC


Imaginea de proces este o zonă a memoriei în care este înregistrată
configuraţia intrărilor la începutul ciclului şi în care se actualizează
configuraţia ieşirilor pe parcursul rulării unui ciclu.

Acest mod de funcţionare presupune:

• înainte de procesarea primei linii, starea (valoarea) intrărilor va fi


înregistrată într-o tabelă imagine a intrărilor;
• conţinutul imaginii de proces a intrărilor nu se va modifica pe toată
durata unui ciclu chiar dacă unele intrări se modifică;
• pe parcursul unui ciclu programul va accesa această memorie pentru
citirea intrărilor;
• pe măsură ce rulează programul, în tabela imagine a ieşirilor se
înregistrează starea (valoarea) ieşirilor;
• la sfârşitul ciclului configuraţia ieşirilor se va modifica în acord cu
valorile furnizate de memoria imagine de proces;
• un nou ciclu va presupune o nouă înregistrare a stării intrărilor în
memoria imagine şi un nou proces de actualizare a ieşirilor cu
execuţie la sfârşitul ciclului.
Structura hardware a unui AP (PLC)

Fig.1.4. Schema bloc a AP (PLC)


Unitatea centrală

Reprezintă "creierul" automatului programabil şi are rolul de a


pune în legătură interfaţa de intrare, memoria de date şi
interfaţa de ieşire, pe baza programului descărcat de utilizator
în memoria program. Unitatea centrală interpretează
instrucţiunile din memoria program, pe baza cărora
efectuează evaluări logice, calcule aritmetice, prelucrări
numerice ale variabilelor de intrare şi furnizează un rezultat
memoriei de date sau interfeţei de ieşire.
Memoria
Memoria PLC-urilor este alcătuită din circuite electronice integrate care sunt
capabile să înregistreze informaţii sub formă binară (0 logic sau 1 logic). Informaţia
elementară este bit-ul, denumire care provine de la "binary digit" din limba
engleză.

Memoria joacă un rol important în funcţionarea PLC-ului deoarece reprezintă locul


în care se înscrie programul de lucru al aplicaţiei sub forma unei liste de
instrucţiuni. Procesorul citeşte din memorie instrucţiunile programului şi le
execută. Memoria PLC-ului este organizată în:

 memoria de date şi

 memoria program.

Memoria program păstrează programul realizat şi încărcat de utilizator prin


intermediul calculatorului sau al consolei de programare. Memoria program este
nevolatilă, de tipul flash sau EEPROM.
Memoria de date sau memoria de lucru, reprezintă zona volatilă a memoriei
automatului programabil. Aici sunt stocate rezultatele ale operaţiilor
efectuate de unitatea centrală sau valori introduse de operator de la un
terminal extern (consolă de programare, terminal programabil) şi care sunt
apoi prelucrate de către unitatea centrală.

Această zonă de memorie poate fi asimilată memoriei RAM de la


calculatoarele personale (PC- uri). Majoritatea automatelor programabile sunt
prevăzute cu baterie pentru a păstra conţinutul unor zone din memoria de
date şi după pierderea tensiunii de alimentare.

Din punctul de vedere a modului de stocare a informaţiei înscrise în memorie


se deosebesc două tipuri principale de memorii: memorii care pot fi şterse
(volatile); memorii care nu pot fi şterse (nevolatile). Ambele tipuri de memorii
se utilizează în PLC-uri.
Module (interfeţe) de intrare/ieşire

• Comunicarea unui PLC cu aplicaţia se realizează prin intermediul canalelor


de intrare şi ieşire (intrări, ieşiri). Intrările şi ieşirile unui PLC sunt necesare
pentru monitorizarea şi controlul procesului şi pot să fie de două tipuri:
logice sau continue.
• Ansamblul modulelor electronice de intrare amplasate între bornele de
intrare ale automatului şi magistrala internă constituie interfaţa de intrare.
Interfaţa de intrare este prevăzută cu un anumit număr de canale de intrări
logice sau analogice. Fiecărei intrări i se alocă o adresă.
• Modulele electronice amplasate între magistrala internă şi bornele de ieşire
ale automatului constituie interfaţa de ieşire. Interfaţa de ieşire este
prevăzută cu un anumit număr de canale de ieşiri logice sau analogice.
Fiecărei ieşiri i se alocă câte o adresă.
• În PLC-urile monobloc intrările şi ieşirile sunt integrate în aceeaşi unitate.
Pentru PLC-urile modulare intrările sunt achiziţionate prin module sau
carduri.
În Fig. 1.5 se arată cum se face conectarea a două intrări la
un modul (card) de intrare.

Ambele contacte (un buton de


apăsare şi contactul unui
releu termic) sunt conectate
de o sursa de curent
alternativ. Când contactele
sunt închise, se alimentează
intrările. Dacă tensiunea de
intrare pe o intrare este mai
mare de o anumită valoare, se
va activa intrarea respectivă
(trece în 1 logic).
Fig.1.5. Modul de intrare
(I: 013 indică faptul că modulul de intrare e
montat în rack-ul 01, slotul 3; 01 şi 03
indică adresele intrărilor).
În general circuitele de intrare/ieşire izolează unitatea centrală
de aparatura externă prin intermediul optocuploarelor (Fig. 1.6).

Fig.1.6. Circuite de intrare


Fig.1.7. Circuite de ieșire
Fig.1.8. Conectarea unui modul de ieşire (24 Vdc). Considerăm că alimentăm
circuitul extern cu24V DC. Când ieşirea 07 este activată curentul va trece prin
07 la COM, astfel închizând circuitul şi făcând lampa sa se aprindă. Ieşirea 03
a releului este conectată în mod asemănător. Când ieşirea 03 este activată
curentul va străbate bobina releului şi motorul se va alimenta cu 120V AC.
Fig.1.9. Conectarea unui modul de ieşire (24 Vdc). Considerăm că alimentăm
modulul (cardul) cu 24V DC. Când ieşirea 07 este activată curentul va trece
prin 07 la COM, astfel închizând circuitul şi făcând lampa sa se aprindă. Când
ieşirea 03 este activată curentul va străbate bobina releului şi motorul se va
alimenta cu 120V AC.
2. Limbajul industrial Ladder Diagram

Ladder Diagram (diagrama “ladder”) este un limbaj de


programare grafic.

Elementele principale din LDR sunt contactele (contacts) şi


“spirele” (coils), în diferite forme şi care au diferite semnificaţii.
Ele sunt legate într-o secvenţă logică cu ajutorul uror trasee
grafice numite “rungs” şi “branches” care sunt similare cu
conductoarele de legătură din circuitele electrice.
Operanzi
Operanzii LDR sunt identificatori ai resurselor sistemului: intrări, ieşiri, timere,
numărătoare, etc.

În funcţie de dimensiunea lor există doua tipuri de operanzi:


• operanzi de un singur bit;
• operanzi de mai mulţi biti: 8, 16 sau 32 de biţi.

Memorarea valorilor operanzilor în cazul căderii tensiunii de alimentare a automatului


se numeşte retenţie. Deoarece majoritatea operanzilor se găsesc în memoria RAM, în
cazul unei căderi de tensiune conţinutul memoriei se pierde. Memoria este ‘volatilă’.

Retenţia este posibilă dacă automatul are în componenţă o baterie de siguranţă.

În cazul ieşirilor, acestea nu trebuie să memoreze starea dinainte de căderea de


tensiune, pentru a nu pune în pericol instalaţia la revenirea tensiunii. Deci ieşirile sunt
întotdeauna localizate într-o memorie volatilă.
Structura unui program LDR
Un program LDR este constituit din ramuri principale (rungs).

Fiecare ramură principală are minim un contact. De asemenea fiecare


ramură principală conţine cel puţin o “spiră” (coil).

Adiţional, ramuri paralele (branches) pot fi inserate rezultând astfel


contacte în paralel.

Ramurile paralele pot fi conectate la orice nod al ramurii principale cu


condiţia ca ele să nu se suprapună. Mai multe spire pot fi configurate în
paralel dar ele trebuie să aibă toate o intrare de comandă comună. Altfel
se folosesc mai multe ramuri principale.
Din ce este constituită o ramură principală?
Ramurile prezentate în Fig. 2.1 conţin
numai operaţii şi de aceea reprezintă
doar o legătură logică între elemente
binare.
Fiecare operaţie (adică fiecare contact,
spiră sau casetă de instrucţiuni) necesită
cel puţin un operand.
Dacă operandul lipseşte, atunci
programul are erori care vor fi
evidenţiate la compilare. Operandul se
scrie deasupra elementului grafic
(contact/ spiră/ casetă).
Introducerea operandului se realizează
prin editarea câmpului respectiv.
Fig.2.1. Elemente grafice de În cazul casetelor de instrucţiuini, este
program LDR. un lucru obişnuit ca acestea să necesite
mai mult de un singur operand.
Parte condiţională şi parte executivă
O ramură principală (rung) poate fi împărţită într-o parte
condiţională şi o parte executivă, Fig 2.2. În partea condiţională
se evaluează la adevărat sau fals (1 sau 0) o funcţie logică
definită de utilizator cu ajutorul contactelor şi/sau al casetelor de
comparaţii logice. Spira reprezintă partea executivă, iar acţiunile
descrise de conţinutul ei se declanşează atunci când partea
condiţională a fost evaluată ca adevărată, “1 logic”.

Fig.2.2. Partea condiţională şi partea de execuţie a unei ramuri principale


Logica de procesare a unui program LDR
• Programele LDR sunt executate în ordine, ramură după ramură şi ciclic,
după terminarea tuturor ramurilor se reîncepe execuţia de la prima ramură.
• Programul se execută atâta timp cât nu există o comandă expresă de
oprire. Ramurile principale (rungs) sunt numerotate în mod automat de
către mediul de programare. Din acest motiv există o secvenţă clară de
procesare a mai multor ramuri principale.
• Înainte de încărcarea programului LDR în AP, programul este translatat
în cod maşină cu ajutorul unui program special numit compilator.
Instrucţiunile cuprinse în ramuri sunt translatate consecutiv, conform
numerotării şi a ordinii apariţiei în program.
• Chiar şi în cadrul unei singure ramuri principale, compilatorul va
respecta secvenţa programată de utilizator. De exemplu, o a doua spiră în
paralel va apărea în programul cod maşină ca fiind executată după prima
spiră.
Ex.: FI, numit bit de initializare, “initialization flag” – mediul FST. FI
are valoarea 1 logic pentru primul ciclu al programului. Începând cu al
doilea ciclu şi până la oprirea automatului, operandul FI va avea
valoarea “0 logic”. Cu ajutorul operandului FI este posibilă aducerea
oricărui operand în starea iniţială dorită la începutul programului.

În Fig. 2.3, setarea în “1 logic” a ieşirii O0.1 se face doar pentru primul
ciclu al programului. Setarea în “1 logic” a ieşirii O0.2 se face începând
de la al doilea ciclu al programului şi până la oprirea acestuia deoarece
negaţia lui FI are valoarea “0 logic” în primul ciclu iar în rest are
valoarea “1 logic”.

Fig. 2.3. Utilizarea operandului binar special, FI (initialization flag).


Operaţii de bază în programe LDR
Operaţii logice
Funcţia logică ŞI pentru doi operanzi binari, I0.1 şi I0.2, este
reprezentată în Fig. 2.6.

Fig. 2.6.

Operaţia logică SAU pentru doi operanzi binari, I0.1 şi O0.2, este
prezentată în Fig. 2.7.

Fig. 2.7.
Negaţia unui operand binar se poate face în partea condiţionată, Fig. 2.8, sau
în cea de execuţie, Fig. 2.9. În primul caz Execuţia are loc dacă intrarea I0.1
este dezactivată. În al doilea caz ieşirea O0.1 este activată când Condiţie este
neindeplinită (0 logic).

Fig. 2.8

Fig. 2.9

Funcţia logică de identitate este una din operaţiile de bază în LDR. Foloseşte o
intrare şi o ieşire, la fel ca funcţia NU logic, dar valoarea de adevăr a intrării se
transmite la ieşire, figura 2.10.

Fig.2.10
Funcţia logică SAU EXCLUSIV este o condiţie des utilizată în practică. LDR nu are un
simbol grafic special pentru această funcţie. Funcţia se realizează printr-o succesiune
serie-paralel de contacte. În figura 2.11 este prezentată operaţia SAU EXCLUSIV între
doi operanzi: I0.1 şi I0.2. Instrucţiunea din partea de Execuţie se procesează dacă
numai una din cele două intrări este activată.

Fig. 2.11

Se pot realiza operaţii SAU EXCLUSIV cu mai mult de două variabile. În figura 2.12 se
prezintă ramura de program LDR în care se evaluează trei operanzi binari cu o funcţie
SAU EXCLUSIV.

Fig. 2.12
Operaţia NOP
Operaţia specială NOP este o operaţie care nu face nimic. Toate limbajele de
programare trebuie să aibă o operaţie nulă. În LDR, operaţia NOP este utilizată
ca operator ataşat unui contact. În acest caz contactul va fi totdeauna activat (1
logic) iar instrucţiunile din partea de execuţie se vor executa la fiecare ciclu de
program, Fig.2.13.

Fig. 2.13

Dacă operatorul NOP este utilizat într-o ramură, aceasta înseamnă că pentru
acea ramură este dezactivat mecanismul de recunoaştere a frontului de semnal
(tranziţia din 0 în 1). De asemenea, acea ramură este activă permanent. În Fig.
2.14 se dă un exemplu de utilizare a funcţiei NOP la comanda de incrementare
a unui numărător. Numărătorul va contoriza fiecare ciclu al programului. Dacă
se asociază acest numărător cu un temporizator şi se măsoară timpul în care se
execută, de exemplu 10000 cicluri, se poate estima timpul de ciclu al unui
program.

Fig. 2.14
Operaţia de memorare (latching)
Această operaţie seamănă cu metoda tradiţională de automenţinere la utilizarea
releelor de către electricieni. Este o memorie de 1 bit. În automatele programabile,
memoria de un bit se realizează cu comenzile SET şi RESET. Oricum, realizarea
acestei memorii cu ajutorul contactelor se practică des în programele LDR.
Simbolul logic pentru memoria de 1 bit este cel al unui circuit bistabil, Fig. 2.15.

Fig.2.15. Schema logică a unui circuit bistabil (memorie de 1 bit):


a) cu resetare dominantă;
b) cu setare dominantă.
Un circuit bistabil are două intrări, S (set) şi R (reset) şi o singură ieşire, A.
Un semnal ‘1 logic’ în intrarea S (set) provoacă activarea ieşirii A. După ce
A a fost activat, el va rămâne în această stare indiferent de valoarea logică
a intrării S. Trecerea ieşirii A în starea ‘0 logic’ se face prin activarea
intrării R (reset). După dezactivarea lui A nu mai contează dacă R îşi
schimbă starea. Dacă semnalele R şi S sunt ambele ‘0 logic’ ieşirea A
îşi va menţine starea anterioară. Se diferenţiază două tipuri de
circuite bistabile, corespunzător comportării dorite a ieşirii A în cazul în
care semnalele R şi S sunt ‘1 logic’ în acelaşi timp:
• cu resetare dominantă, oricare ar fi starea intrării S (0 sau 1 logic),
activarea semnalului R va provoca obligatoriu trecerea ieşirii A în
starea 0 logic;
• cu setare dominantă, oricare ar fi starea intrării R (0 sau 1 logic),
activarea semnalului S va provoca obligatoriu trecerea ieşirii A în starea
1 logic.
Pentru programarea unui circuit bistabil în LDR este nevoie de utilizarea a trei
operanzi binari cu condiţia ca operandul echivalent semnalului A să poată fi
modificat (“flag” de memorie sau ieşire). Fig.2.16. reprezintă un circuit
bistabil cu resetare dominantă dată de operandul I1.2 şi setare dată de
operandul I1.1. Semnalul analog ieşirii bistabilului este flagul F3.1.

Fig.2.16.
Circuitul bistabil cu setarea dominantă este descrisă de Fig. 2.17.
Setarea se face de către intrarea I1.1 indiferent de valoarea ieşirii
I1.2. Resetarea se face cu semnalul I1.2 dar numai atunci când
intrarea I1.1 este “0 logic”.

Fig. 2.17.
Operaţii cu spire (coils)
Comenzi care nu se păstrează
Pentru o comandă care nu se păstrează, starea logică a condiţiei se transferă
direct la spiră. În spiră se reflectă fiecare schimbare a stării logice a condiţiei.
În Fig. 2.18 se dă comanda de activare a ieşirii O1.1 atunci când intrarea I1.1
este activată. În momentul în care intrarea I1.1 devine “0 logic” ieşirea O1.1
va fi dezactivată (“0 logic”), Fig. 2.19.

Fig. 2.18

Fig.2.19. Activarea şi dezactivarea ieşirii O1.1 funcţie de semnalul de


intrare I1.1, în cazul unei comenzi care nu se păstrează.
În cazul acestui tip de comandă există şi varianta de comandă negată, Fig.
2.20, la care semnalul de ieşire O1.1 este activat dacă intrarea I1.1 este “0
logic” şi este dezactivat dacă intrarea I1.1 are starea “1 logic”, conform
diagramei din Fig. 2.21.

Fig. 2.20

Fig.2.21. Activarea şi dezactivarea ieşirii O1.1 funcţie de semnalul de


intrare I1.1, în cazul unei comenzi negate care nu se păstrează
Comenzi care se păstrează
În acest caz comenzile sunt executate precis dacă (şi numai dacă) ramura are starea “1
logic”, adică condiţia ramurii este îndeplinită. Dacă condiţia trece din starea “1 logic”
în starea “0 logic”, comanda executată de spiră nu se va anula. Există două tipuri de
comenzi care se păstrează: SET şi RESET.
Ele sunt comenzi opuse în sensul că se anulează una pe cealaltă dacă se aplică aceluiaşi
operand. În Fig. 2.22 se poate vizualiza tipul de spiră Set. Ieşirea O1.1 este activată
când intrarea I1.1 devine pentru prima oară “1 logic”, Fig. 2.24.a.
Tipul de spiră Reset este prezentat în Fig. 2.23. Acesta are efect invers, aşa cum se vede
din diagrama 2.24.b.

Fig. 2.22
Fig. 2.23

Fig. 2.24. Activarea ieşirii O1.1 funcţie de semnalul de intrare I1.1,


în cazul unei comenzi care se păstrează: a) comandă SET; b) comandă RESET.
O comandă care nu se păstrează poate fi realizată cu două comenzi care se
păstrează: SET şi RESET, după cum se observă în Fig. 2.25. Efectul este cel
din diagrama 2.26 şi este identic cu cel al unei comenzi care nu se păstrează
(cea din Fig. 2.18).

Fig. 2.25

Fig.2.26. Activarea şi dezactivarea ieşirii O1.1 funcţie de semnalul de intrare I1.1,


în cazul a două comenzi opuse care se păstrează. Semnalul O1.1 este identic cu
cel din fig. 2.18
Operaţia de salt
O comandă de salt se inserează în partea executivă a unei ramuri şi conţine o
etichetă (label) care reprezintă destinaţia saltului, adică punctul din program de
unde se execută următoarea instrucţiune.
Eticheta reprezintă un şir oarecare de maxim 9 caractere alfanumerice, date de
utilizator, şi care trebuie să înceapă cu o literă. Nu se face diferenţă între litere
mari şi litere mici. Pentru a stabili destinaţia unui salt, eticheta trebuie inserată
în ramura de interes, la începutul părţii condiţionale.
Dacă există o comandă de salt la o etichetă anume, de exemplu ‘motor3’, şi
eticheta nu apare undeva în program, la începutul părţii condiţionale al unei
ramuri, atunci se va semnala o eroare de sintaxă la compilarea programului.
O comandă de salt în LDR arată ca în Fig. 2.27. Ea reprezintă un salt
condiţionat, care se execută numai dacă partea condiţională a ramurii este
adevărată.

Fig. 2.27
Un salt necondiţionat se realizează cu ajutorul operandului NOP, ca în Fig.
2.28.

Fig. 2.28

Inserarea etichetei în partea condiţională a unei ramuri se face ca în Fig. 2.29.


Eticheta este ‘motor3’ şi a fost folosită mai sus la comanda de salt.

Fig. 2.29
Operaţia LOAD TO
LOAD TO este o operaţie utilizată cu operanzi muti-bit (16 biţi).
Instrucţiunea LOAD încarcă în acumulatorul MBA conţinutul unui
operand multi-bit. Din MBA se poate copia acel conţinut în orice
operand multi-bit (mai puţin la intrări) cu ajutorul instrucţiunii TO.
Caseta grafică LDR prezentată în figura 30 realizează automat cele două
instrucţiuni. Ea copiază valoarea constantă 12 în memorie, la adresa
FW5. Aceeaşi comandă se poate executa şi cu o casetă
aritmetică/logică.

Fig. 2.30
Operaţii aritmetice
Casetele pentru operaţii aritmetice fac parte din setul de casete pentru
operaţii binare multi-bit. Ele apar întotdeauna în partea executivă a unei
ramuri. Casetele aritmetice acoperă cele patru operaţii de bază: adunarea,
scăderea, înmulţirea şi împărţirea. În Fig. 2.31 se dă câte un exemplu de
utilizare a celor patru operaţii de bază. Operanzii se introduc unul sub altul. În
ultimul operand, al treilea, se încarcă rezultatul operaţiei aritmetice.

Fig. 2.31. Exemple de casete de operaţii aritmetice.


Alte operaţii binare multi-bit
În afară de operaţiile aritmetice mai există disponibile următoarele operaţii
binare multi-bit:

• rotirea biţilor spre dreapta (sau spre stânga): ROR (ROL);


• translatarea tuturor biţilor spre dreapta (sau spre stânga): SHR (SHL);
• conversia unui număr din reprezentare binară în reprezentare BCD (Binar
Codat Decimal): BID;
• conversia unui număr din reprezentare BCD în reprezentare binară: DEB;
• operaţii logice bit cu bit între doi operanzi multi-bit: SI, SAU, SAU
EXCLUSIV;
• schimbarea între ei a valorilor octeţilor MSB şi LSB ai unui operand multi-
bit (16 biţi): SWAP;
• complementul în baza doi al unui operand multi-bit: CPL;
• inversul, bit cu bit, al unui operand multi-bit: INV.
Fiecare din aceste operaţii necesită doi operanzi multi-bit. Primul operand
este sursa (asupra lui se exercită funcţia) iar al doilea este destinaţia (în el se
înregistrază rezultatul operaţiei). Că este aşa se observă din Fig. 2.32, unde se
foloseşte operaţia de rotire spre stânga cu un bit (ROL) a conţinutului
operandului IW1. Rezultatul se înregistrează în operandul FW3.

Sursa şi destinaţia pot fi reprezentate de acelaşi operand, cu condiţia ca


acesta să nu fie un cuvânt de intrare (la intrări nu se poate scrie).

Fig. 2.32

Toate aceste operaţii sunt utile în rezolvarea eficientă a unor probleme


complexe de automatizare.
Operaţii cu “casetă” aritmetică/logică (A/L)

“Casetele” A/L sunt folosite, la fel ca şi cele de operaţii multi-bit,


numai în partea executivă a ramurilor.
Ele permit o programare coerentă de operaţii complexe care
folosesc operanzi multi-bit.
Pentru multe din operaţiile care se pot efectua cu casete A/L
există casete LDR speciale dar acestea realizează o singură
operaţie (de exemplu adunarea a doi operanzi multi-bit).
Operaţii de incrementare şi decrementare
Se folosesc în partea executivă iar forma grafică de reprezentate LDR este o spiră (coil).
Operaţia de incrementare modifică valoarea unui operand multi-bit cu + 1.
Operaţia de decrementare modifică valoarea unui operand multi-bit cu - 1.
Se folosesc de obicei pentru actualizarea numărătoarelor dar se pot aplica oricărui
operand multi-bit cu excepţia intrărilor. Fig. 2.33 prezintă operaţia de incrementare a
operandului FW5.

Fig. 2.33

Comanda de incrementare se
execută doar când starea logică a părţii
condiţionale trece din “0 logic” în “1
logic”, adică numai pe frontul crescător
al semnalului ‘Condiţie’. Fig. 2.34 arată
modificările operandului FW5 la un
semnal oarecare al părţii condiţionale.
Se consideră că la început valoarea din
FW5 este 0.
Fig.2.34. Incrementare
Operaţii de comparaţie multi-bit
Permit comparaţii cu rezultat logic (adevărat sau fals) între operanzi multi-bit. Sunt
operaţii de bază pentru orice tip de automat programabil. Comparatorul multi-bit permite
evaluarea relaţiei dintre doi operanzi (valori pe 16 biţi), evaluarea numărătoarelor,
comparaţii între un operand şi o valoare constantă, etc.

Există 6 tipuri de comparaţie între doi operanzi multi-bit:


• egal (=);
• mai mare(>);
• mai mare sau egal (>=);
• mai mic (<);
• mai mic sau egal (<=);
• diferit (<>);

Comparaţiile multi-bit sunt reprezentate cu casete (box) şi se folosesc în partea


condiţională a unei ramuri LDR. În casetă trebuiesc specificaţi doi operanzi. Valoarea lor
este comparată conform tipului de casetă (=, >, >=, <, <=, <>) iar valoarea de adevăr se
transmite mai departe în partea condiţională a ramurii.
Fig. 2.35 prezintă comparaţia de egalitate între intrarea OW1 şi registrul R2.
Dacă valorile lor sunt egale atunci se va procesa comanda descrisă de
‘Execuţie’.

Fig. 2.35

Un exemplu complex este dat în Fig. 2.36. Dacă toate cele trei comparaţii sunt
adevărate, se procesează comanda ‘Execuţie’.

Fig. 2.36
Utilizarea temporizatoarelor
Automatele programabile moderne au încorporate funcţii specializate pentru
lucrul cu temporizatoare. Numărul de module de temporizare care se pot folosi în
acelaşi timp diferă de la un automat programabil la altul. Pentru FEC (Festo) acestea
sunt în număr de 256, numerotate de la 0 la 255.

Temporizatoarele sunt construite pe baza numărătoarelor, singura diferenţă fiind că


acestea numără impulsuri de ceas de ordinul milisecundelor. Baza de timp a ceasului
intern (durata între două împulsuri) este o caracteristică a fiecărui tip de AP. La unele
automate ea poate fi aleasă de utilizator din mai multe opţiuni, de exemplu: 10 ms,
100 ms sau 1 s. Pentru automatele FESTO, baza de timp este de 10 milisecunde (0,01
secunde).

Când se programează un temporizator, se încarcă un număr într-un operand de 16 biţi


numit Timer Preset (TP). Acest număr se decrementează la fiecare impuls de ceas.
Când numărul ajunge la zero, timpul programat a expirat. Această tehnică de măsurare
a timpului lucrează foarte eficient şi este larg utilizată în construcţia ceasurilor cu
cuarţ. Un numărător numără impulsuri electrice de la un cristal de cuarţ. Tehnica este
cunoscută ca măsurare digitală a timpului.
Componentele unui temporizator
Un temporizator este o structură de date care lucrează ca un tot unitar.
Această structură trebuie să conţină minim trei operanzi. Referindu-ne
la timerul ‘n’, aceştia sunt:

• Tn – Timer Status – este un operand de un bit (SBO) care reprezintă


starea timer-ului. Acest operand poate fi interogat în orice moment
pentru valoarea sa logică. De asemenea el poate fi activat şi
dezactivat cu operaţiile SET respectiv RESET;

• TPn – Timer Preset – este un operand multibit (MBO) de un “word”


(16 biţi) care reprezintă valoarea setată de utilizator în unităţi de
intervale de timp. Activarea sau dezactivarea temporizatorului Tn
nu are influenţă asupra operandului TPn. Setarea unei valori în TPn
se face explicit cu o instrucţiune de încărcare;
TWn – Timer Word – este un operand multibit (MBO) de un “word” (16 biţi)
care reprezintă valoarea curentă a timer-ului. Acest operand nu conţine un
număr stabil. La activarea temporizatorului valoarea TPn se încarcă automat în
TWn. Acest număr va fi apoi decrementat (tot automat) la fiecare impuls de
ceas. Când TWn ajunge la zero timpul a expirat.

Într-un program, temporizatoarele trebuie să fie pornite şi interogate:


• Pornirea unui temporizator în limbajul LDR se face cu ajutorul unei casete
speciale, în partea executivă a unei ramuri;

• Interogarea unui temporizator în limbajul LDR se face cu un contact


obişnuit în care operandul este bitul de stare al temporizatorului, în partea
condiţională a unei ramuri.

Pentru toate tipurile de temporizatoare prezentate în continuare, caseta de


pornire este activată la trecerea din ‘0 logic’ în ‘1 logic’ a semnalului din
partea condiţională a ramurii în care aceasta s-a introdus.
Tipuri de temporizatoare

Există trei tipuri de temporizatoare, analog celor utilizate în


industria electrotehnică ca relee de temporizare:

• Temporizatorul simplu T;

• Temporizatorul cu întârziere la aclanșare TON;

• Temporizatorul cu întârziere la declanșare TOFF.


Temporizatorul simplu, T
Se activează la trecerea din “0 logic” în “1 logic” a semnalului din partea condiţională a
ramurii. Odată iniţiat, temporizatorul măsoară durata de timp prestabilită iar când
aceasta a expirat temporizatorul se dezactivează. Dacă pe parcursul temporizării în
partea condiţională apare un nou front crescător (din “0 logic” în “1 logic”)
temporizatorul este reiniţiat.
Funcţionarea acestui tip de temporizator se poate observa şi din Fig. 2.38.

Temporizatorul T măsoară
intervalul de timp prestabilit
atât timp cât în partea
condiţională nu apare un nou
front crescător. Bitul de stare T
este ‘1 logic’ în timpul măsurării
iar după expirarea timpului
devine ‘0 logic’.

Fig. 2.38. Funcţionarea temporizatorului de tip T


Temporizator cu întârziere la anclanşare, TON
Se activează la trecerea din ‘0 logic’ în ‘1 logic’ a semnalului din partea
condiţională iar după expirarea timpului, bitul de stare TON devine ‘1 logic’.
Rămâne ‘1 logic’ până la dezactivarea semnalului din partea condiţională. Dacă
timpul (∆t) nu a expirat iar partea condiţională se dezactivează (Condiţie = 0 logic)
atunci temporizatorul este reiniţializat iar bitul de stare TON rămâne în aceeaşi
stare (0 logic). Fig. 2.39 exemplifică toate combinaţiile între semnalul din partea
condiţională şi starea temporizatorului de tip TON.
Temporizatorul TON
măsoară intervalul de
timp prestabilit atât timp
cât partea condiţională
este activă (1 logic). Bitul
de stare TON este ‘0
logic’ în timpul măsurării
iar după expirarea
timpului devine (1 logic).

Fig. 2.39. Funcţionarea temporizatorului de tip TON.


Temporizator cu întârziere la declanşare, TOFF
Se activează la trecerea semnalului din partea condiţională din ‘0 logic’ în ‘1 logic’
(TOFF = 1 logic). La dezactivarea semnalului din partea condiţională (front
descrescător) temporizatorul începe să măsoare durata de timp prestabilită. În
acest timp bitul de stare TOFF rămâne ‘1 logic’. După expirarea timpului TOFF
devine ‘0 logic’. Dacă timpul nu a expirat dar partea condiţională se activează
(Condiţie = 1 logic) atunci temporizatorul se va reiniţializa iar bitul TOFF va
rămâne setat (1 logic). Fig. 2.40 exemplifică toate combinaţiile între semnalul din
partea condiţională şi starea temporizatorului de tip TOFF.

Temporizatorul TOFF
măsoară intervalul de
timp prestabilit atât
timp cât partea
condiţională este
inactivă (0 logic). Bitul
de stare TOFF este ‘1
logic’ în timpul măsurării
iar după expirarea
timpului devine (0 logic).
Fig. 2.40. Funcţionarea temporizatorului de tip TOFF.
Exemple de programare cu temporizatoare
TON, TOFF şi T
• Exemplul 1
Un bec trebuie să se aprindă după ce un buton a fost apăsat timp de 5
secunde. Becul trebuie să se stingă atunci când butonul este eliberat.
• Exemplul 2
Un bec trebuie să se aprindă atunci când un buton este apăsat. După
eliberarea butonului becul trebuie să mai rămână aprins 5 secunde.
• Exemplul 3
Un bec trebuie să se aprindă şi să se stingă la intervale de 1 secundă atâta
timp cât este apăsat un buton.
Utilizarea numărătoarelor în limbajul LDR
Numărătoarele, în general, trebuie să asigure următoarele funcţiuni:

• să numere impulsuri şi să memoreze rezultatul în propria memorie


(valoarea curentă);

• să ofere posibilitatea, la orice moment de timp, de scriere în


valoarea curentă a unei valori iniţiale (resetare);

• să aibă o memorie proprie pentru valoarea prestabilită (maximă) de


impulsuri care trebuie numărate;

• să poată fi interogat (din punct de vedere logic) dacă a atins sau nu


a atins numărul de impulsuri prestabilit, pentru a folosi rezultatul în
alte operaţii logice.
Pentru cazul general al unui numărător oarecare cu numărul n, aceştia sunt:

Cn – Counter Status – este un operand de un bit (SBO) în care se memorează


starea numărătorului. Operandul Cn poate fi interogat în orice parte
condiţională a programului.

CPn – Counter Preset – este un operand multibit (MBO) de un cuvânt în care


se încarcă valoarea setată (prestabilită) de utilizator. Acest operand
rămâne neschimbat în timpul numărării. Schimbarea valorii CPn se
efectuează o singură dată, la iniţializare. Operandul CPn poate fi iniţializat
cu o valoare constantă sau cu valoarea conţinută în orice alt operand
multibit (IWn, FWn, etc.). În cazul valorilor constante, limitele de variaţie
ale acestora pot fi:

• V0 … V65535, întreg zecimal de 16 biţi, fără semn;


• V- 32268 … V32267, întreg zecimal de 16 biţi, cu semn;
• V$0000…V$FFFF, întreg reprezentat în baza 16 (hexazecimal).

CWn – Counter Word – este un operand multibit (MBO) de un cuvânt în care


se găseşte valoarea curentă a numărătorului.
Utilizarea numărătoarelor
Înainte de utilizarea unui numărător acesta trebuie iniţializat. În LDR,
iniţializarea se face cu o casetă specială în care se introduc doi operanzi:
adresa numărătorului şi valoarea prestabilită, Fig. 2.42.

Fig.2.42. Caseta de iniţializare a unui numărător

Activarea numărătoarelor se face cu o comandă SET, de spiră, Fig. 2.43.


Pentru numărătoare incrementale, la activare se încarcă valoarea 0 în CWn.
Această operaţie se efectuează automat la activarea numărătorului.

Fig.2.43. Comanda de activarea unui numărător


De fiecare dată când se activează un numărător, de exemplu numărătorul 2,
se efectuează următoarele acţiuni:
• Valoarea operandului Counter Word, CW2, este încărcată cu valoarea 0
(pentru numărătoare incrementale);
• Bitul Couter Status, C2, este setat la 1 logic.
Dacă numărătorul C2 este deja activ şi se reactivează atunci numărătorul este
repornit’ prin încărcarea valorii 0 în CW2.
Numărătorul activat îşi menţinea valoarea (C2 = “1 logic”) până la apariţia
uneia din situaţiile demai jos:
• numărătorul se resetează cu o comandă explicită, Fig. 2.44;
• după incrementări succesive ale operandului CW2, acesta devine egal cu
valoarea setată: CW2 =CP2;
• după decrementări succesive ale operandului CW2, acesta devine 0.
După apariţia oricăreia din situaţiile de mai sus numărătorul se dezactivează
(Cn=0 logic).

Fig.2.44. Comanda de dezactivare a unui numărător


Activarea unui numărător decremental se face cu comanda LOAD TO în
care valoarea prestabilită se încarcă în operandul CW al numărătorului. După
această operaţie bitul de stare al numărătorului decremental este setat
automat în '1 logic', Fig. 2.45.

Fig.2.45. Activarea unui numărător decremental. Iniţializarea se face cu


numărul constant 25.

Numărarea este o operaţie care se realizează în partea executivă a unei ramuri


şi pentru care se folosesc spirele speciale INC şi DEC. Când se utilizează spira
INC numărătorul este incrementat (+ 1), fig. 46. Pentru DEC numărătorul este
decrementat (-1).

Fig.2.46. Comanda de incrementare a unui numărător


Interogarea unui numărător în partea condiţională a unei ramuri
se face simplu, cu ajutorul unui contact al cărui operand este
bitul de stare al numărătorului, fig. 2.47.

Fig.2.47.a. Interogarea unui numărător pentru 1 logic (numărător activat)

Fig.2.47.b. Interogarea unui numărător pentru 0 logic (numărător dezactivat)


Exemple de utilizare a numărătoarelor
• Exemplul 1
După ce un numărătorul C0 numără 10 semnale la intrarea I0.3, trebuie să se
aprindă un bec. Numărătorul poate fi activat cu un buton la intrarea I0.1. În
figura 48 este prezentat programul pentru un numărător incremental.
Pentru un numărător decremental se foloseşte metoda prezentată în
figura 2.49.

Fig. 2.48. Program LDR pentru numărător incremental.


Prima ramură iniţializează numărătorul, imediat după
pornirea programului. Aceasta este necesar, altfel becul s-ar
aprinde de la prima rulare a programului.

Fig. 2.49. Program LDR pentru numărător decremental.


• Exemplul 2
Într-o parcare de maşini există doar 10 locuri. La intrarea în parcare
există un semnalizator optic cu două becuri: unul verde şi unul roşu.
Becul verde trebuie să rămână aprins atâta timp cât în parcare mai
sunt locuri libere. Becul roşu se aprinde când parcarea este plină. Cele
două becuri nu pot fi aprinse în acelaşi timp. Programul pentru acest
exerciţiu este prezentat în figura 50, senzorul de la intrarea în parcare
este conectat la intrarea I0.5 iar cel pentru ieşire la intrarea I0.6.

Fig. 2.50. Program LDR pentru semnalizare în trafic că o parcare are


sau nu are locurilor libere.