Sunteți pe pagina 1din 195

Cap.

1 Automate programabile (PLC-uri)


Structura și modul de funcționare

1. Scurt istoric
2. Structura PLC-urilor
3. Unitatea centrală
4. Interfețe de intrare/ieșire

Cele mai populare sisteme electronice utilizate astăzi pentru


controlul sistemelor industriale automate sunt Controlerele Logice
Programabile (PLC-uri), denumite și Automate Programabile. Principala
referință în domeniu o constituie standardul IEC 61131 care precizează
terminologia, structura, funcțiile, limbajele de programare, modul de
comunicare și recomandări privind implementarea programelor aferente
acestor controlere industriale. În cadrul acestui capitol sunt detaliate
structura hardware, rolul fiecărui element structural, modul de
funcționare al controlerelor programabile, noțiuni fundamentele privind
funcționarea internă precum procesarea ciclică și imaginea de proces. De
asemenea sunt prezentate soluții constructive aferente interfețelor de
intrare și ieșire, respectiv modul de conectare al aparaturii de câmp la
aceste interfețe pentru diferite tipologii ale acestora.

7
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

1. Scurt istoric
La sfârșitul anilor ’60, în contextul fiabilității problematice a circuitelor de
control pe bază de relee, Compania General Motors (prin Divizia Hydramatic,
1968) a elaborat specificația de proiectare pentru un sistem electronic
programabil (Standard Machine Controller, 1968), vizat ca înlocuitor al sistemelor
de control pe bază de relee. Noul sistem de control trebuia să ofere o modalitate
simplă și rapidă de programare, trebuia să poată opera în mediile industriale, să
fie ușor de întreținut și de reparat, modificările de program să nu presupună
modificări structurale, să aibă dimensiuni reduse și să consume mai puțin ca
releele, siguranță în funcționare și costuri de întreținere reduse [7,24]. Solicitarea
pentru un astfel de prototip a fost trimisă la patru companii: Allen-Bradley, Digital
Equipment Corporation, Century Detroit și Bedford Associates [29].
Propunerea venită din partea Bedford Associates (Modicon1), care lucra
deja la un asemenea controler, a fost considerată câștigătoare (1969), iar numele
dat acestor sisteme a fost Programmable Controllers, cu abrevierea PC. Odată cu
apariția și dezvoltarea fulminantă a sistemelor de calcul (Personal Computer, PC),
pentru a evita confuziile între cele două abrevieri s-a procedat la referirea acestor
sisteme de control industrial prin acronimul PLC (Programmable Logic Controller),
marcă înregistrată Allen Bradley (1971) pentru această gamă de produse [24,29].
În limba română, pentru referirea acestor sisteme de control industrial se
utilizează formularea automat programabil, preluată din limba franceză
(Automates programmables), și controler logic programabil sau controler
programabil, formulări preluate din limba engleză [30].
Primele PLC-uri operau cu intrări și ieșiri logice, bobine și contacte logice
interne, cu temporizatoare și numărătoare [35]. Treptat acestea au evoluat,
capacitatea de procesare a crescut și noi funcții au fost asimilate: procesarea
semnalelor analogice, realizarea operațiilor matematice în virgulă mobilă,
controlul în buclă închisă. În timp, evoluția tehnologiei în domeniu a făcut posibilă
monitorizarea și controlul parametrilor proceselor prin interfețe om-mașină
(HMI), comunicarea prin rețele standardizate (Modbus, RS-485, CAN, DeviceNet,
Profibus, EtherNet), accesarea aplicațiilor de la distanță etc.

1
Compania Modicon (MOdular DIgital CONtroller) a fost inființată de Bedford Associates pentru a
gestiona realizarea acestor noi produse. În 1977 a fost preluată de Gould Electronics, apoi de
compania germană AEG, astăzi fiind deținută de compania franceză Schneider Electric.

8
Cap.1 Automate programabile – Structura și modul de funcționare

2. Structura PLC-urilor
Termenul de PLC (Programmable Logic Controller) este definit prin
IEC61131-1: ,,Un sistem electronic digital, proiectat pentru utilizarea în mediul
industrial, care 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” [30].
Astăzi, PLC-urile au o arhitectură internă similară cu a sistemelor de calcul,
însă sunt concepute pentru funcționarea în mediul industrial, fiind rezistente la
vibrații, la perturbații electromagnetice, la variația temperaturii și umidității
mediului ambiant.

Dispozitiv de
programare Sursa
alimentare

Semnale
Semnale
electrice
electrice CPU
digitale/
digitale/ Unitatea centrala
analogice
analogice Interfata
Interfata catre
de la senzori, Iesire
Intrare relee,
butoane de
elemente de
comanda
Memorie actionare,
etc
lampi, etc

Fig.1.1 Structura unui PLC

Din punct de vedere funcțional (Fig.1.1), în structura unui PLC se disting trei
elemente cu roluri bine definite:
 Interfața de intrare (modulele de intrare) – preia semnale din sistemul
controlat prin intermediul senzorilor și le convertește în semnale numerice
pentru a putea fi prelucrate de unitatea centrală (CPU);
 Unitatea de prelucrare centrală (CPU) – este creierul sistemului, pe baza
instrucțiunilor unui program procesează semnalele primite, efectuează
calcule aritmetice, prelucrări numerice ale variabilelor de intrare, ia decizii

9
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

și emite semnale numerice pe modulele de ieșire în conformitate cu


algoritmul de control;
 Interfața de ieșire (modulele de ieșire) – preia semnale numerice de la CPU
și le convertește în semnale de comandă compatibile cu diferitele elemente
de acționare ale procesului (relee, electromagneți, motoare, valve etc).

Din punct de vedere structural, PLC-urile pot fi realizate în variantă


monobloc, când unitatea centrală și modulele de intrare/ieșire formează o singură
entitate, respectiv în variantă modulară, atunci când modulele se constituie în
entități diferite (Fig.1.2). În cazul structurilor modulare o unitate centrală (CPU)
permite montarea adițională de module auxiliare, asigurându-se astfel numărul
de intrări/ieșiri necesare unei aplicații mai mari și extinderea funcționalității
sistemelor prin utilizarea de module analogice, module de comunicație, module
dedicate controlului motoarelor de c.c., pas cu pas, etc.

a b
Fig.1.2 PLC-uri : a) structură monobloc (Mitsubishi), b) structură modulară(Siemens)

Programarea unui PLC comportă utilizarea unui dispozitiv de programare (în


general un sistem de calcul auxiliar) care este prevăzut cu un mediu de dezvoltare
specific, respectiv care poate comunica cu PLC-ul pentru transferarea
programului. Programul se încarcă și stochează în memoria PLC-ului, execuția
acestuia fiind controlată de procesorul unității centrale. Producătorii controlerelor
industriale asigură mediile software de dezvoltare și implementare a aplicațiilor
utilizator: STEP7, RS Logix, CX Programmer, FST etc. Aceste medii permit
dezvoltarea aplicațiilor în diverse limbaje de programare, mai mult sau mai puțin
populare. Programele realizate se înregistrează în memorie sub forma unei liste
de instrucțiuni, iar procesorul citește din memorie instrucțiunile programului și le
execută.

10
Cap.1 Automate programabile – Structura și modul de funcționare

Memoria PLC-urilor este alcătuită din circuite electronice integrate care


permit înregistrarea datelor și informațiilor. Din punctul de vedere al modului de
păstrare a datelor/informației se deosebesc două tipuri de memorii: memorii care
pot fi șterse (volatile) și memorii care nu pot fi șterse (nevolatile). Ambele tipuri
de memorii se utilizează în construcția PLC-urilor.
Din punct de vedere al utilizării, memoria PLC-ului este organizată în
memoria de date și memoria program:
 Memoria program stochează programul realizat și încărcat de utilizator prin
intermediul dispozitivului de programare (Fig.1.1) și trebuie să fie
nevolatilă.
 Memoria de date reprezintă zona volatilă a memoriei PLC-ului. Aici sunt
stocate datele de la intrări (senzori, butoane de comandă), datele introduse
de operator, rezultatele operațiilor efectuate de unitatea centrală.
Majoritatea PLC-urilor sunt prevăzute cu baterie pentru a păstra conținutul
unor zone din memoria de date și după pierderea tensiunii de alimentare.

3. Unitatea centrală
Unitatea de prelucrare centrală (CPU) procesează semnalele primite de la
interfața de intrare pe baza instrucțiunilor unui program, ia decizii și emite
semnale numerice pe modulele de ieșire.
Funcționarea unității centrale (CPU) este controlată de un sistem de operare
care trebuie să asigure următoarele funcții de bază:
 funcția de start (inițierea);
 procesarea ciclică și actualizarea imaginii de proces;
 apelarea și rularea programului utilizator;
 gestionarea întreruperilor;
 gestionarea erorilor;
 managementul memoriei;
 comunicarea cu dispozitivul de programare și alte structuri de control.
Programul utilizator este conceput în general pe un dispozitiv de
programare extern, se încărcă pe CPU și trebuie să permită:
 specificarea condițiilor de inițializare a aplicației;
 procesarea datelor și instrucțiunilor;

11
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

 procesarea întreruperilor;
 gestionarea erorilor.
Așadar, în unitatea centrală (CPU) rulează două aplicații: sistemul de
operare și programul utilizator. Se disting două noțiuni specifice care
caracterizează funcționarea acesteia: procesarea ciclică și imaginea de proces.

SISTEM DE OPERARE PROGRAM UTILIZATOR

RUN / STOP

PROGRAM
CICLU PRINCIPAL
(MAIN)

Operatii
specifice
Sistem
operare

Fig.1.3 Procesarea ciclică

Procesarea ciclică (Fig.1.3) este controlată de sistemul de operare și


presupune executarea ciclică a unui set pe operații: actualizarea imaginii de
proces a intrărilor, executarea programului utilizator, actualizarea imaginii de
proces a ieșirilor și alte operații specifice sistemului de operare. Rularea ciclică a
operațiilor descrise mai sus se realizează la o frecvență predefinită (ex. 100Hz)
care depinde de complexitatea aplicației dar și de capacitatea sistemului de
operare, respectiv care poate fi modificată între anumite limite. Procesarea ciclică
este inițializată prin punerea CPU-ului pe poziția RUN și continuă până când
CPU-ul este pus în poziția de STOP.
Imaginea de proces este o zonă a memoriei în care este înregistrată
starea/valoarea intrărilor la începutul ciclului și în care se actualizează

12
Cap.1 Automate programabile – Structura și modul de funcționare

starea/valoarea ieșirilor pe parcursul rulării unui ciclu. Acest mod de funcționare


presupune (Fig.1.4):
 înregistrarea stării (valorii) intrărilor într-o tabelă imagine a intrărilor;
 conținutul imaginii de proces a intrărilor nu se modifică pe toată durata
unui ciclu chiar dacă unele intrări se modifică;
 pe parcursul unui ciclu programul accesează această memorie pentru citirea
intrărilor;
 pe măsură ce rulează programul, în tabela imagine a ieșirilor se
înregistrează rezultatul prelucrării de date aferente ieșirilor;
 la sfârșitul ciclului starea logică a ieșirilor fizice se modifică în acord cu
valorile furnizate de memoria imagine de proces;
 un nou ciclu presupune o nouă înregistrare a stării intrărilor în memoria
imagine de proces, respectiv o nouă actualizare a ieșirilor cu execuție la
sfârșitul ciclului.

Procesarea instrucțiunilor programului principal (utilizator) poate fi


întreruptă de apariția unor evenimente sau erori, situație în care acestea pot fi
tratate prin secvențe auxiliare de program, apoi revenindu-se la programul
principal.

SISTEM DE OPERARE PROGRAM UTILIZATOR

RUN / STOP

PROGRAM
INTRARI Actualizare CICLU PRINCIPAL
Imagine de proces (MAIN)
INTRARI

Program
INTRERUPERE INTRERUPERE intrerupere

Tratare
Alte operatii INTRERUPERE INTRERUPERE eroare

Actualizare
Imagine de proces
IESIRI
IESIRI

Fig.1.4 Procesarea ciclică și actualizarea imaginii de proces

13
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

4. Interfețe de intrare/ieșire
Comunicarea unui PLC cu procesul controlat se realizează prin intermediul
interfețelor de intrare și ieșire. Ansamblul componentelor electronice amplasate
între bornele de intrare ale PLC-ului și magistrala internă constituie interfața de
intrare. Componentele electronice amplasate între magistrala internă și bornele
de ieșire ale PLC-ului constituie interfața de ieșire.
Fiecărei interfețe îi corespunde un număr de intrări sau ieșiri la care se pot
conecta senzori și butoane de comandă, respectiv elemente de acționare, de
semnalizare etc. Fiecărei intrări sau ieșiri (canal de intrare sau de ieșire) îi
corespunde un circuit electronic intern care convertește semnalele de câmp în
semnale numerice, în cazul modulelor de intrare, sau convertește semnale
numerice interne în semnale de câmp specifice aparaturii controlate, în cazul
modulelor de ieșire. Fiecare intrare sau ieșire este reprezentată în memoria
PLC-ului și i se alocă o adresă internă absolută.
Interfețele care operează cu intrări și/sau ieșiri logice (on/off) poartă
numele de interfețe/module digitale, iar cele care operează cu intrări și/sau ieșiri
analogice poartă numele de interfețe/module analogice. Există și o a treia
categorie de interfețe, specializate pe anumite funcții (contorizare procese rapide,
control mișcare etc) și care poartă numele de interfețe/module specializate.
Interfețele digitale sunt totuși cele mai utilizate interfețe în procesele industriale.
În general, interfețele de intrare/ieșire izolează unitatea centrală de
aparatura externă prin intermediul optocuploarelor (OC), respectiv nu trebuie să
alimenteze aparatura de câmp (senzori, elemente de acționare etc).
Funcția principală impusă interfețelor de intrare digitale este de aceea de a
identifica o valoare prag aferentă semnalului de intrare peste care valoarea
acestuia se asociază intern cu 1 logic, respectiv valoarea semnalului de intrare
sub care acesta se asociază intern cu 0 logic.
Blocurile electronice principale specifice unei interfețe de intrare digitale
sunt detaliate în figura 1.5. Blocul de redresare se utilizează doar în cazul intrărilor
în curent alternativ.

Semnal Detectare Izolare


Redresare Filtrare CPU
intrare prag optica

Fig.1.5 Schema bloc a unei interfețe de intrare digitale

14
Cap.1 Automate programabile – Structura și modul de funcționare

În figura 1.6 este detaliat un circuit de intrare specific interfețelor de intrare


digitale, pentru cazul semnalelor de intrare în curent continuu (c.c.). Dioda
luminiscentă D1 semnalizează starea logică a intrării, rezistența R1 limitează
curentul prin dioda D1, rezistența R2 limitează curentul prin diodele D2 și D3,
pentru funcționarea în regim normal a diodelor. La depășirea unei valori prag a
tensiunii de intrare pe circuit, dioda Zener (stabilizatoare) D2 deschide, dioda
luminiscentă D3 a optocuplorului OC începe să emită, prin fototranzistorul T se
stabilește un curent colector-emitor, respectiv potențialul punctului P trece în 0V
(0 logic). La o tensiune de intrare sub valoarea prag de deschidere a diodei Zener,
optocuplorul este blocat, respectiv potențialul punctului P tinde către 5V (1 logic).
Filtrul R2-C elimină paraziții și variațiile nedorite ale tensiunii de intrare, respectiv
asigură comutarea fermă din 0 logic în 1 logic și invers.
R2 D2
+ +5V

R3
R1 P
Intrare TTL catre
C.C.
C magistrala
interna a
D3 T
PLC-ului
D1
OC
COM

Fig. 1.6 Circuit de intrare în curent continuu [14]

În figura 1.7 este detaliat un circuit de intrare specific interfețelor de intrare


digitale, pentru cazul semnalelor de intrare în curent alternativ (c.a.). Circuitul
funcționează similar cu cel anterior, în plus asigurându-se redresarea și filtrarea
tensiunii de intrare.

R1 R3 D5
+5V

R5
D1 D4 P
Intrare TTL
catre
c.a. C R4 magistrala
D6 T interna a
PLC-ului
D2 D3
OC

R2

Fig. 1.7 Circuit de intrare în curent alternativ [5]

15
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Așadar, indiferent de tipul semnalului de intrare (c.c. sau c.a.), o interfață


de intrare digitală furnizează unității centrale un semnal electric care va fi asociat
intern cu 1 logic sau cu 0 logic, funcție de valoarea semnalului de intrare. Scopul
acestor interfețe este acela de identificare a comenzilor operatorului și a
semnalelor de la senzorii discreți (cu două stări funcționale), on/off sau 0/1.
Prin intermediul interfețelor de ieșire un PLC comandă și controlează
echipamentele conectate la ieșirile acestuia. Interfețele digitale pot controla doar
semnale logice, respectiv echipamente care pot fi acționate natural prin
intermediul acestui tip de semnale. În figura 1.8 este detaliată schema bloc
aferentă unei interfețe de ieșire digitale.

Izolare Semnal
CPU Comutare iesire
optica

Fig.1.8 Schema bloc a unei interfețe de ieșire digitale

La fel ca și circuitele de intrare, în general circuitele de ieșire nu alimentează


echipamentele de câmp conectate la acestea. Interfețele (modulele) de ieșire
digitale trebuie să asigure izolarea optică între CPU și aparatura externă, respectiv
funcția de comutație atunci când de CPU-ul emite semnalele de comandă: 0 logic,
respectiv 1 logic. Blocurile de comutație sunt realizate pe bază de dispozitive
semiconductoare sau relee. Tranzistoarele sunt utilizate pentru comutarea
ieșirilor în curent continuu iar triacele pentru ieșirile în curent alternativ, timpii de
reacție fiind sub 1 ms. Releele sunt capabile sa comute atât ieșirile de curent
alternativ cât și de curent continuu, însă sunt mai lente, costă mai mult și se
uzează mai rapid. Comutarea se realizează în aproximativ 10 ms.

TTL +V
de la
magistrala R
interna a
PLC-ului T2
Iesire
C.C.
D T1

OC

Fig. 1.9 Circuit de ieșire pe bază de tranzistor[14]

16
Cap.1 Automate programabile – Structura și modul de funcționare

TTL
de la R1 F
magistrala
interna a D T C Tr
PLC-ului V Iesire
c.a.
OC
R2
R3

Fig.1.10 Circuit de ieșire pe bază de triac [7]

+V
Releu F
TTL
de la
magistrala
interna a
PLC-ului

D T

OC

Fig.1.11 Circuit de ieșire pe bază de releu [14]

Câteva circuite specifice interfețelor de ieșire digitale sunt detaliate în


figurile 1.9, 1.10 și 1.11. Fiecare circuit are în componență un optocuplor (OC) care
intră în funcționare atunci când tensiunea internă de comandă este mai mare
decât tensiunea prag la care deschide dioda D. Când fototranzistorul intră în
conducție se asigură comutarea circuitelor de ieșire. Circuitul din figura 1.9 poate
fi folosit doar pentru comanda ieșirilor de curent continuu.
În cazul interfețelor de ieșire de c.a. se utilizează circuite pe bază de triac
(Fig.1.10). Rezistoarele R2 și R3 limitează curentul pe grila de comandă a triacului.
Când triacul este declanșat se stabilește conducția în ambele sensuri,
închizându-se circuitul de curent alternativ. Varistorul este folosit ca element de
protecție împotriva tensiunilor tranzitorii excesive. Rezistența R1 și condensatorul
C filtrează curentul prin circuitul optocuplorului, respectiv prin circuitul de
comandă a grilei triacului. Circuitul pe bază de triac poate fi folosit doar pentru

17
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

ieșirile de curent alternativ, funcționarea acestuia fiind improprie in cazul


alimentării cu curent continuu.
Circuitele de ieșire pe bază de relee (Fig.1.11) pot fi utilizate atât pentru
comanda ieșirilor de curent continuu cât și a celor de curent alternativ.
Legătura dintre PLC și procesul condus se asigură prin intermediul
interfețelor de intrare/ieșire. Modul în care se conectează elementele procesului
la intrările și ieșirile automatului, în care se realizează alimentarea, depinde de
arhitectura internă a interfețelor intrare/ieșire.
În figura 1.12 se detaliază modul de conectare a două butoane B1 și B2 la
un modul de intrare de curent alternativ, pentru care circuitul intern de conversie
este detaliat alăturat. Ambele contacte B1 și B2 sunt conectate de o sursă de
curent alternativ. Când contactul B1 este închis, se închide circuitul electric
aferent canalului (0) de intrare, respectiv unitatea centrală primește un semnal de
comandă aferent valorii 1 logic pentru intrarea la care este conectat butonul B1.
Dacă butonul B1 se decuplează, circuitul electric aferent intrării (0) se întrerupe,
respectiv unitatea centrală primește semnalul 0 logic. Fiecărei intrări a modulului
îi corespunde un circuit de conversie, respectiv fiecare circuit trebuie conectat la
nulul comun (COM). Butonul B2 are același efect asupra canalului de intrare (4).

Modul Intrare Circuit aferent canalului (0 ) de intrare


24V c.a.

B1 R1 R3 D5
0 +5V
1
R5
Intrare D1 D4 P
2
C.A. TTL
3 C R4
B2 Catre
4
D6 T CPU
5 D2 D3
6 OC
7

SURSA L
24V c.a. R2
N COM

Fig. 1.12 Conectarea intrărilor la un modul de intrare de curent alternativ

Dacă există două circuite de alimentare atunci nulurile trebuie legate


împreună. Adesea nulul comun și masa pot fi confundate. Nulul este o referință
care se întrebuințează pentru (0V) iar masa este folosită pentru prevenirea

18
Cap.1 Automate programabile – Structura și modul de funcționare

șocurilor și distrugerea echipamentelor. Masa este conectată la pământ prin


sistemul electric al unei clădiri (pământarea).
În figura 1.13 este detaliat modul de conectare al unei lămpi, respectiv al
unui releu la o interfață de ieșire de curent continuu pentru care circuitul intern
de conversie este detaliat alăturat. La o comandă de 1 logic de la CPU pentru
canalul de ieșire (1) se închide circuitul electric aferent canalului (1), se stabilește
un curent continuu prin bobina releului (K), se închid contactele releului K,
respectiv se închide circuitul de curent alternativ aferent alimentării motorului.
Trecerea în 0 logic a ieșirii (1) conduce la întreruperea circuitului electric, respectiv
la dezactivarea releului K. Fiecărei ieșiri a modulului îi corespunde un circuit intern
de conversie, conectat la borna +V (24V). Similar, la o comandă de 1 logic pentru
ieșirea (7), se stabilește intern legătura între punctele (+V) și (7), respectiv se
închide circuitul de curent continuu și se aprinde lampa (L).

SURSA
Circuit intern aferent canalului (1 ) de iesire Modul Iesire 24V C.C.
24V c.c
24V 0V

de la CPU +V +V

TTL
R
T2
0 Releu
1
L SURSA
D T1 2
Iesire 220V c.a.
K N
C.C. 3
OC
4
5 Motor c.a.
6
L
7

Fig. 1.13 Conectarea echipamentelor de câmp la un modul de ieșire (24 V c.c.)

Structura circuitelor interne aferente interfețelor de intrare/ieșire este


diversă, soluțiile tehnice diferă de la producător la producător. În consecință,
conectarea aparaturii la intrările și ieșirile PLC-ului trebuie să se realizeze doar
după studierea atentă a documentației tehnice a produsului.

19
Cap.2 Elemente de logică booleană

1. Funcții logice
2. Forme canonice
3. Diagrame Karnaugh
4. Minimizarea funcțiilor logice
5. Sisteme logice combinaționale

Programarea unui controler industrial implică o etapă de


elaborare a unui program pe baza unei specificații tehnice, respectiv
implementarea acestuia pe controler având în vedere caracteristicile
specifice ale acestuia. Elaborarea programului presupune aplicarea unor
proceduri și metode specifice de proiectare în urma cărora rezultă
algoritmul care asigură funcționalitatea dorită sistemului. La nivel inferior
(de bază) tehnicile de proiectare fac apel la algebra booleană: operatori
logici, funcții, teoreme, axiome, reprezentări algebrice în forme canonice,
reprezentări grafice specifice (tabele de adevăr, diagrame Karnaugh),
tehnici de simplificare a funcțiilor logice. Elementele prezentate în cadrul
acestui capitol sunt fundamentale pentru înțelegerea logicii după care
lucrează PLC-urile, respectiv pentru proiectarea sistemelor logice
combinaționale și a celor secvențiale [13, 19, 23, 26].

20
Cap.2 Elemente de logică booleană

1. Funcții logice
Obiectul de studiu al logicii sunt propozițiile și compunerile lor. Enunțul A se
numește propoziție dacă A exprimă un fapt. Propozițiile în logica booleană1 pot
avea numai două valori: adevărat sau fals. Compunerea a două sau mai multe
propoziții logice se numește funcție logică și rezultatul acesteia este 0 sau 1 (fals
sau adevărat). Toate funcțiile logice sunt formate cu ajutorul a trei operatori care
formează mulțimea operatorilor algebrei booleene, Mop = {NU, ȘI, SAU}.

1.1 Funcții logice elementare

Funcția NU logic: fNU(A) = A


Operează asupra unui singur argument Tabel de adevăr: funcția NU
căruia îi schimbă valoarea de adevăr. Dacă
variabila A este adevărată, negația ei va fi falsă. A A
Negația lui A se simbolizează: A .
0 1
A A 1 0
x
Fig.2.1 Simbolizare grafică - funcția NU

Funcția ȘI logic: fȘI(A, B) = A  B


Operează cu două variabile, A și B, Tabel de adevăr: funcția ȘI
rezultatul funcției este adevărat dacă cele două
variabile sunt adevărate. Operatorul ȘI se mai A B AB
notează: „  ” (simbolul pentru înmulțire). 0 0 0
A 0 1 0
AB
B 1 0 0
1 1 1
Fig.2.2 Simbolizare grafică - funcția ȘI

1
George Boole (02.11.1815 – 08.12.1864) matematician și filosof englez, considerat unul din
fondatorii informaticii. A pus bazele algebrei booleene, domeniu care stă la baza funcționării
calculatoarelor.

21
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Funcția SAU logic: fSAU(A, B) = A + B


Operează cu două variabile, A și B, Tabel de adevăr: funcția SAU
rezultatul funcției este adevărat dacă cel puțin
una din variabile este adevărată. Operatorul SAU A B A+B
se mai notează: „ + ” (simbolul pentru adunare).
0 0 0
A 0 1 1
A+B
B 1 0 1
1 1 1
Fig.2.3 Simbolizare grafică - funcția SAU

1.2 Funcții logice complexe


Funcțiile booleene complexe se obțin prin compunerea multiplă a
propozițiilor logice:
Fie variabilele booleene x1, x2,…, xN , aparținând mulțimii B2 = {0, 1}. Orice
combinație logică între acestea reprezintă o funcție booleană cu N variabile,
f (x1 , x2 , …, xN ), rezultatul funcției aparținând mulțimii B2 = {0, 1}.
Funcțiile booleene se bucură de proprietăți specifice care sunt definite prin
intermediul axiomelor și teoremelor. Axiomele sunt enunțuri a căror valoare de
adevăr nu se pune la îndoială și pentru care nu este nevoie de demonstrații.
Teoremele se demonstrează cu ajutorul axiomelor.

1.3 Axiomele logicii booleene


Fie x1 , x2 , x3  B2, unde B2 = {0, 1}.
1. Închiderea
Rezultatul funcțiilor elementare ȘI, SAU, NU sunt tot elemente booleene:
dacă x1 , x2  B2, atunci x1  x2  B2,
dacă x1 , x2  B2, atunci x1 + x2  B2,
dacă x1 , x2  B2, atunci 𝑥1 ∈ 𝐵2 , 𝑥2 ∈ 𝐵2 .
2. Comutativitatea
În cazul funcțiilor elementare, ȘI și SAU, rezultatul operațiilor nu depinde de
ordinea termenilor:
x 1  x 2 = x2  x 1

22
Cap.2 Elemente de logică booleană

x 1 + x2 = x2 + x 1
3. Asociativitatea
În cazul funcțiilor (expresiilor logice) cu un sigur operator, ȘI sau SAU, nu
contează ordinea de evaluare a termenilor:
x1 + (x2 + x3) = (x1 + x2) + x3
x1  (x2  x3) = (x1  x2)  x3
4. Distributivitatea
Cele două operații, ȘI și SAU, sunt distributive una față de cealaltă:
x1 + (x2  x3) = (x1 + x2)  (x1 + x3)
x1  (x2 + x3) = (x1  x2) + (x1  x3)
5. Element neutru
Elementul neutru al unei variabile booleene este elementul pentru care
funcția devine egală cu valoarea variabilei: fȘI(x1, 1) = x1 , fSAU(x1, 0) = x1.
x1  1 = x1, pentru funcția ȘI elementul neutru este 1.
x1 + 0 = x1, pentru funcția SAU element neutru este 0.
6. Element invers:
Elementul invers al unei variabile booleene este elementul negat:
𝑓𝑆𝐼 (𝑥1 , 𝑥1 ) = 0 , 𝑓𝑆𝐴𝑈 (𝑥1 , 𝑥1 ) = 1
𝑥1  𝑥1 = 0
𝑥1 + 𝑥1 = 1

1.4 Teoremele logicii booleene1


Fie x1 , x2  B2, unde B2 = {0, 1}.
1. Teorema idempotenței: x1  x1 = x1 ; x1 + x1 = x1

2. Teorema dublei negații: 𝑥1 = 𝑥1


3. Teorema absorbției: x1  (x1 + x2) = x1 ; x1 + (x1  x2) = x1

1
În cadrul acestei lucrări folosirea simbolurilor „+”, „ ” pentru reprezentarea operatorilor SAU și ŞI
conduce implicit la preluarea regulilor privind ordinea de efectuare a operațiilor. Astfel, în lipsa
parantezelor, care specifică clar ordinea efectuării operațiilor, se subînțelege că operația de înmulțire
(operator ŞI) este prioritară operației de adunare (operator SAU).

23
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

4. Teorema de adiacență: 𝑥1  𝑥2 + 𝑥1  𝑥2 = 𝑥1 , (𝑥1 + 𝑥2 )  (𝑥1 + 𝑥2 ) = 𝑥1


5. Legea lui 0 și 1: x1 0 = 0 ; x1 + 1 = 1

6. Teoremele lui De Morgan1: x1  x 2  x 1  x 2 ; x1  x 2  x 1  x 2

7. Teorema simplificării: 𝑥1 + 𝑥1  𝑥2 = 𝑥1 + 𝑥2 , 𝑥1 (𝑥1 + 𝑥2 ) = 𝑥1  𝑥2


Axiomele și teoremele enunțate mai sus se folosesc pentru operarea și
simplificarea expresiilor logice complexe. Alături de aceste teoreme și axiome,
algebra booleană pune la dispoziție și alte instrumente pentru evaluarea,
analizarea și simplificarea expresiilor logice complexe, care pot fi utilizate
independent unele de altele sau corelat:
 tabelele de adevăr;
 reprezentarea în forme canonice disjunctive sau conjunctive;
 diagramele Karnaugh–Veitch.

1.5 Tabele de adevăr


Tabele de adevăr se folosesc pentru evaluarea unei funcții logice (sau a mai
multor funcții logice) cu un număr redus de variabile. Metoda implică calcularea
funcției logice pentru fiecare valoare posibilă a variabilelor ei, respectiv pentru
toate combinațiile posibile permise de funcție.
Astfel, considerând funcția f(x1, x2 ) = 𝑥1 ∙ 𝑥2 + 𝑥1 ∙ 𝑥2 , având variabile
booleene x1 , x2  B2, unde B2 = {0, 1}, în tabelul de adevăr aferent funcției f
(Tabelul 2.1) sunt specificate valorile funcției f, calculate pentru toate valorile
posibile ale variabilelor și pentru toate combinațiile posibile între acestea, în
conformitate cu funcția f.
Tabelul 2.1 Tabelul de adevăr aferent funcției logice f(x1, x2 ) = 𝑥1 ∙ 𝑥2 + 𝑥1 ∙ 𝑥2
Variabile Calcule intermediare Rezultatul funcției f
𝑥1 𝑥2 𝑥1 𝑥2 𝑥1 ∙ 𝑥2 𝑥1 ∙ 𝑥2 𝑥1 ∙ 𝑥2 + 𝑥1 ∙ 𝑥2
0 0 1 1 1 0 1
0 1 1 0 0 0 0
1 0 0 1 0 0 0
1 1 0 0 0 1 1

1
Teorema poartă numele celui care a descoperit-o, Augustus De Morgan (1806-1871), matematician
și logician englez.

24
Cap.2 Elemente de logică booleană

Altfel spus, un tabel de adevăr specifică valorile unei funcții logice pentru
orice situație posibilă determinată de valorile variabilelor.

2. Forme canonice
Formele canonice asigură scrierea structurată a funcțiilor (expresiilor) logice
și servesc pentru obținerea de reprezentări care permit reducerea numărului de
operatori prin aplicarea unor tehnici specifice. Orice expresie logică poate fi adusă
la o formă canonică. Pentru reprezentarea unei funcții logice în formă canonică
există două opțiuni echivalente: reprezentarea în formă canonică disjunctivă și în
formă canonică conjunctivă.

2.1 Forma canonică disjunctivă (FCD)


Este o reprezentare în care sunt însumate (utilizând operatorul SAU) toate
produsele (utilizând operatorul ȘI) variabilelor, atât în formă negată cât și
ne-negată. Se mai numește forma canonică sumă de produse.
Exemplu
Fie funcția f(x1, x2 )  B2, x1 , x2  B2, unde B2 = {0, 1}.
Forma canonică disjunctivă a acestei funcții este:
fFCD(x1, x2) = P0 + P1 + P2 + P3 ,
unde: 𝑃0 = 𝑥1 ∙ 𝑥2 , 𝑃1 = 𝑥1 ∙ 𝑥2 , 𝑃2 = 𝑥1 ∙ 𝑥2 , 𝑃3 = 𝑥1 ∙ 𝑥2 .
Dacă numărul variabilelor este n, atunci reprezentarea (FCD) va include
produse de câte n variabile, respectiv 2n termeni de însumat.

2.2 Forma canonică conjunctivă (FCC)


Este o reprezentare în care sunt înmulțite (utilizând operatorul SI) toate
sumele (utilizând operatorul SAU) variabilelor, atât în formă negată cât și
ne-negată. Se mai numește forma canonică produs de sume.
Exemplu
Fie funcția f(x1, x2 )  B2, x1 , x2  B2, unde B2 = {0, 1},
Forma canonică conjunctivă a acestei funcții este:
fFCC(x1, x2) = S0  S1  S2  S3 ,
unde: 𝑆0 = 𝑥1 + 𝑥2 , 𝑆1 = 𝑥1 + 𝑥2 , 𝑆2 = 𝑥1 + 𝑥2 , 𝑆3 = 𝑥1 + 𝑥2 .

25
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Dacă numărul variabilelor este n, atunci reprezentarea (FCC) va include


sume de câte n variabile, respectiv 2n termeni de înmulțit.
Plecând de la aceste forme de reprezentare, conjunctivă sau disjunctivă, se
pot obține reprezentările funcției într-o formă minimală utilizând anumite tehnici
de simplificare. Prin simplificarea unei funcții (expresii) logice se înțelege
transformarea acesteia într-o reprezentare echivalentă, mai simplă, cu un număr
mai mic de operatori logici. Cele mai uzuale abordări privind simplificarea
funcțiilor logice apelează axiomele și teoremele logicii booleene, tabelele de
adevăr, reprezentările în forme canonice și diagramele Karnaugh–Veitch. Funcția
logică care nu mai poate fi simplificată se numește forma elementară minimizată.

2.3 Simplificarea funcțiilor logice utilizând formele canonice


Fie funcția F(x1, x2 , x3 )  B2, x1 , x2, x3  B2, unde B2 = {0, 1}. Pentru
funcția F se construiește tabelul de adevăr (Tabelul 2.2), din care rezultă valorile
funcției pentru orice valori ale variabilelor (x1, x2 , x3). Se pune problema
construirii formelor canonice ale funcției F, respectiv a simplificării acesteia.
Tabelul 2.2 Tabelul de adevăr și termenii standard de tip sumă și produs aferenți
funcțiilor logice exprimate în formă canonică disjunctivă și conjunctivă.
𝑥1 𝑥2 𝑥3 Termenii standard Termenii standard de Funcția F
de tip suma (Sk) tip produs (Pk)
(Fk, valori
caracteristice)
0 0 0 𝑥1 + 𝑥2 + 𝑥3 S0 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P0 F0
0 0 1 𝑥1 + 𝑥2 + 𝑥3 S1 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P1 F1
0 1 0 𝑥1 + 𝑥2 + 𝑥3 S2 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P2 F2
0 1 1 𝑥1 + 𝑥2 + 𝑥3 S3 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P3 F3
1 0 0 𝑥1 + 𝑥2 + 𝑥3 S4 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P4 F4
1 0 1 𝑥1 + 𝑥2 + 𝑥3 S5 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P5 F5
1 1 0 𝑥1 + 𝑥2 + 𝑥3 S6 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P6 F6
1 1 1 𝑥1 + 𝑥2 + 𝑥3 S7 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P7 F7

FFCD (x1, x2, x3) = (F0P0) + (F1P1) + (F2P2) + (F3P3) + (F4P4) + (F5P5) + (F6P6) + (F7P7)

FFCC (x1, x2, x3) = (F0+S0) (F1+S1) (F2+S2) (F3+S3) (F4+S4) (F5+S5) (F6+S6) (F7+S7)

26
Cap.2 Elemente de logică booleană

O funcție logică de trei variabile, pentru care se cunosc valorile (Fk) aferente
fiecărei configurații posibile a variabilelor, se exprimă în forma canonică
disjunctivă (FCD), astfel:
FFCD(x1, x2, x3)=(F0P0)+(F1P1)+(F2P2)+(F3P3)+(F4P4)+(F5P5)+(F6P6)+(F7P7)
Pentru construirea termenilor de tip produs (Pk), aferenți unei funcții logice
exprimate în formă canonică disjunctivă (FCD), variabilele care au valoarea 0
(zero) se vor considera negate, iar variabilele care au valoarea 1 (unu) se
consideră ne-negate (Tabelul 2.2).
Exemplu: pentru configurația (0,0,1) a variabilelor de intrare (x1,x2,x3), termenul
standard de tip produs este P1, adică: 𝑥1 ∙ 𝑥2 ∙ 𝑥3 .
Scrierea unei funcții logice în formă canonică disjunctivă permite
simplificarea imediată, pe baza următoarelor proprietăți:
Pk  0 = 0, 0+1=1, 0+0=0.
Adică, oricare ar fi valoarea logică a termenului Pk, dacă Fk=0, rezultatul
expresiilor următoare nu depinde de Pk :
Pk  Fk + 1 = Pk 0 + 1 = 1;
Pk  Fk + 0 = Pk 0 + 0 = 0.
Așadar, în cazul utilizării formelor canonice disjunctive pentru exprimarea
funcțiilor logice, au importanță doar termenii care includ valori ale lui Fk diferite
de 0 (zero).
De reținut: În cazul exprimării funcțiilor logice prin intermediul FCD, se vor
considera doar termenii dezvoltării pentru care Fk este egal cu 1 (unu).

Exemplu: Fie funcția F(x1, x2 , x3 )  B2, x1 , x2, x3  B2, unde B2 = {0, 1}. Dacă
valorile funcției F sunt: F0=1,F1=0,F2=1,F3=0,F4=1,F5=0,F6=0,F7=1,atunci:
FFCD(x1,x2,x3)=(F0P0)+(F1P1)+(F2P2)+(F3P3)+(F4P4)+(F5P5)+(F6P6)+(F7P7)
=(1 P0)+(0 P1)+(1 P2)+(0 P3)+(1 P4)+(0 P5)+(0 P6)+(1 P7)
=(1 P0)+ 0 +(1 P2) + 0 +(1 P4)+ 0 + 0 +(1 P7)
=(1 P0)+(1 P2)+(1 P4)+(1 P7)= P0+P2+P4+P7
= 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3
= 𝑥2 ∙ 𝑥3 ∙ (𝑥1 +𝑥1 ) + 𝑥2 ∙ (𝑥1 ∙ 𝑥3 + 𝑥1 ∙ 𝑥3 )
= 𝑥2 ∙ 𝑥3 + 𝑥2 ∙ (𝑥1 ∙ 𝑥3 + 𝑥1 ∙ 𝑥3 )

27
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

O funcție logică de trei variabile, pentru care se cunosc valorile (Fk) aferente
fiecărei configurații posibile a variabilelor, se exprimă în forma canonică
conjunctivă (FCC), astfel:
FFCC(x1, x2, x3) =(F0+S0) (F1+S1) (F2+S2) (F3+S3) (F4+S4) (F5+S5) (F6+S6) (F7+S7)
Pentru construirea termenilor de tip sumă (Sk), aferenți unei funcții logice
exprimate în formă canonică conjunctivă (FCC), variabilele care au valoarea 0
(zero) se vor considera ne-negate, iar variabilele care au valoarea 1 (unu) se
consideră negate (Tabelul 2.2).
Exemplu: pentru configurația (0,1,1) a variabilelor de intrare (x1,x2,x3), termenul
standard de tip sumă este S3, adică: 𝑥1 + 𝑥2 + 𝑥3 .
Scrierea unei funcții logice în formă canonică conjunctivă permite
simplificarea imediată, în bază următoarelor proprietăți:
Sk+1= 1, 1 0 = 0, 1 1=1
Adică, oricare ar fi valoarea logică a termenului Sk, dacă Fk=1, rezultatul
expresiilor următoare nu depinde de Sk :
(Sk+ Fk ) 1 = (Sk+1) 1 = 1;
(Sk+ Fk ) 0 = (Sk+1 ) 0 = 0.
Așadar, în cazul utilizării formelor canonice conjunctive pentru exprimarea
funcțiilor logice, au importanță doar termenii care includ valori ale lui Fk diferite
de 1 (unu).
De reținut: În cazul exprimării funcțiilor logice prin intermediul FCC, se vor
considera doar termenii dezvoltării pentru care Fk este egal cu 0 (zero).

Exemplu: Fie funcția F(x1, x2 , x3 )  B2, x1 , x2, x3  B2, unde B2 = {0, 1}. Dacă
valorile funcției F sunt: F0=0,F1=1,F2=1,F3=0,F4=1,F5=1,F6=1,F7=0,atunci:
FFCC(x1,x2,x3)= (F0+S0) (F1+S1) (F2+S2) (F3+S3) (F4+S4) (F5+S5) (F6+S6) (F7+S7)
=(0+ S0)  (1+ S1)  (1+ S2)  (0+ S3)  (1+ S4)  (1+ S5) (1+ S6) (0+S7)
=(0+ S0)  1  1  (0+ S3)  1  1  1  (0+S7)
= (0+ S0) (0+ S3) (0+ S7) = S0 S3 S7
= (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 )

(conform teoremei idempotenței, x x = x, funcția este extinsă)

28
Cap.2 Elemente de logică booleană

= (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 )

(se aplică teorema adiacenței pentru termenii subliniați)


= (𝑥1 + 𝑥3 ) ∙ (𝑥2 + 𝑥3 )
= 𝑥3 + 𝑥1 ∙ 𝑥2 (pe baza axiomei distributivității)

Așadar, plecând de la tabelul de adevăr aferent unei anumite funcții logice,


metoda de mai sus detaliază procedura de determinare a funcțiilor (exprimate în
formă canonică) care verifică tabelul de adevăr. Metoda permite atât identificarea
unei funcții care verifică tabelul de adevăr cât și exprimarea ei în formă
simplificată.

3. Diagrame Karnaugh
Diagramele Karnaugh1 sunt forme sintetice ale tabelelor de adevăr, care se
constituie în instrumente pentru minimizarea funcțiilor logice complexe.
Problema care trebuie să o rezolve o diagramă Karnaugh este următoarea: se
cunoaște rezultatul funcției și se cere determinarea acesteia în formă minimală.
O diagramă Karnaugh aferentă unei funcții booleene de n variabile se
reprezintă sub forma unui pătrat sau dreptunghi împărțit în 2n câmpuri. Fiecare
câmp este rezervat unui termen din reprezentarea funcției în formă canonică (fie
prin produse Pk , fie prin sume, Sk, unde k=0,1,2,..., 2n-1).
O diagramă Karnaugh este astfel dezvoltată încât oricare două câmpuri
(pătrate) vecine, pe linie sau pe coloană, diferă printr-o singură cifră binară. Două
câmpuri vecine ale căror termeni canonici diferă printr-o singură variabilă, se
numesc adiacente. Această proprietate trebuie să o aibă toate câmpurile
diagramei, inclusiv câmpurile extreme. Proprietatea de adiacență este foarte
importantă, ea condiționând minimizarea funcțiilor logice prin intermediul
diagramelor Karnaugh. Pentru interpretarea corectă a acestei proprietăți a
diagramelor Karnaugh se consideră că toate câmpurile aparțin unei suprafețe
închise. Astfel, câmpurile extreme vor fi vecine, două câte două, după coloanele
sau liniile diagramei.

1 Ele mai sunt denumite și diagrame Karnaugh–Veitch. Au fost descoperite în 1952 de Edward W.
Veitch și dezvoltate în 1953 de Maurice Karnaugh, fizician american, pentru simplificarea circuitelor
electronice.

29
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

O funcție booleană dată poate fi reprezentată prin intermediul diagramelor


Karnaugh utilizând exprimările în forme canonice disjunctive (FCD), reprezentând
produsele Pk în câmpurile diagramei, sau în forme canonice conjunctive (FCC),
reprezentând sumele Sk în câmpurile diagramei. Cele mai utilizate reprezentări
fiind realizate prin intermediul produselor, în continuare ne vom referi doar la
diagrame Karnaugh ce utilizează reprezentări ale funcțiilor în forme canonice
disjunctive.
Pentru a ne putea referi cu ușurință la câmpurile unei diagrame, acestea au
fost numerotate, astfel încât fiecare câmp are asociat numărul k aferent
termenului canonic Pk al funcției F.
În figurile 2.4, 2.5 și 2.6 sunt reprezentate diagramele Karnaugh aferente
funcțiilor logice de două, trei și patru variabile. Spre exemplu, în diagrama
aferentă funcției F(x1, x2, x3, x4), (Fig.2.6), câmpurile 0 și 2, 4 și 6, 12 și 14, 8 și 10,
sunt vecine după direcția coloanelor, respectiv câmpurile 0 și 8, 1 și 9, 3 și 11, 2 și
10, sunt vecine după direcția liniilor.

x1
F(x1, x2)
𝑥1 = 0 𝑥1 = 1
0 2
𝑥2 = 0
P0(0,0) P2(1,0)
x2 1 3
𝑥2 = 1
P1(0,1) P3(1,1)

Fig.2.4 Diagrama Karnaugh pentru o funcție de 2 variabile

x1 x2
F(x1, x2, x3)
00 01 11 10
0 2 6 4
0
P0(0,0,0) P2(0,1,0) P6(1,1,0) P4(1,0,0)
x3
1 3 7 5
1
P1(0,0,1) P3(0,1,1) P7(1,1,1) P5(1,0,1)

Fig.2.5 Diagrama Karnaugh pentru o funcție de 3 variabile

30
Cap.2 Elemente de logică booleană

x1 x2
F(x1, x2, x3, x4)
00 01 11 10
0 4 12 8
00
P0(0,0,0,0) P4(0,1,0,0) P12(1,1,0,0) P8(1,0,0,0)
1 5 13 9
01
P1(0,0,0,1) P5(0,1,0,1) P13(1,1,0,1) P9(1,0,0,1)
x3 x4
3 7 15 11
11
P3(0,0,1,1) P7(0,1,1,1) P15(1,1,1,1) P11(1,0,1,1)
2 6 14 10
10
P2(0,0,1,0) P6(0,1,1,0) P14(1,1,1,0) P10(1,0,1,0)

Fig.2.6 Diagrama Karnaugh pentru o funcție de 4 variabile

Aceste reprezentări permit determinarea funcției logice, în formă


minimizată, în baza unui set de reguli. Regulile se referă la gruparea câmpurilor
diagramei, respectiv la utilizarea grupurilor pentru extragerea funcției logice în
formă minimizată.
Pentru constituirea grupurilor aferente diagramelor Karnaugh, care
utilizează reprezentări ale funcțiilor în forme canonice disjunctive (FCD), se
definesc următoarele reguli:
 se numesc câmpuri vecine câmpurile care au o latură comună;
 într-o diagramă Karnaugh (în reprezentare FCD) prezintă interes doar
câmpurile cu valoarea 1, în multe reprezentări câmpurile cu valoarea 0
nefiind specificate în diagrame;
 câmpurile vecine (de valoare 1) se constituie în grupuri de 2R elemente
(unde R este număr natural). Aceste grupuri de 2R câmpuri poartă numele
de subcuburi, iar numărul R constituie ordinul subcubului. Astfel, două
câmpuri vecine constituie un subcub de ordinul 1 (Fig.2.7a). Prin gruparea a
4 câmpuri vecine se obține un subcub de ordinul 2 (Fig.2.7b). Se subînțelege
că numărul câmpurilor care pot fi grupate într-un subcub trebuie să fie: 1, 2,
4, 8, ..., 2R.

31
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

 Grupurile create pot include: 2 câmpuri vecine pe un rând sau coloană (2 x


1 sau 1 x 2); 4 câmpuri consecutive în linie pe un rând sau coloană (4 x 1 sau
1 x 4); 4 câmpuri vecine grupate într-un pătrat, pe două rânduri și două
coloane (2 x 2), 8 câmpuri vecine grupate în dreptunghiuri (4 x 2, 2 x 4).

x1 x2 x1
x3 00 01 11 10 x2 0 1
0 0 1 1 1 0 1 1

1 0 0 0 0 1 0 0
GREŞIT CORECT

Fig.2.7a Reguli de constituire a grupurilor


x1 x2 x1
x3 00 01 11 10 x2 0 1
0 1 1 1 1 0 1 1

1 0 0 0 1 1 1 1
GREŞIT CORECT

Fig.2.7b Câmpurile de valoare 0 nu fac parte din grupuri

 fiecare câmp de valoare 1 trebuie să fie inclus într-un grup, respectiv


câmpurile de valoare 0 nu trebuie incluse în niciun grup (Fig.2.7b, Fig.2.8);
x1 x1
x2 0 1 x2 0 1
0 0 0 0

1 1 1 1 1
GREŞIT CORECT

Fig.2.8 Grupurile se constituie doar din câmpuri de valoarea 1

 grupurile pot fi orizontale, verticale dar nu diagonale (Fig.2.9);

32
Cap.2 Elemente de logică booleană

x1 x1
x2 0 1 x2 0 1
0 0 0 0 0 1

1 1 1 1 1 1
GREŞIT CORECT

Fig.2.9 Grupurile leagă câmpuri pe orizontală sau verticală

 grupurile se constituie astfel încât fiecare dintre ele să includă un număr cât
mai mare de câmpuri și, simultan, să se obțină un număr cât mai mic de
grupuri, respectându-se toate regulile enunțate; unele câmpuri pot să facă
parte din mai multe grupuri, dacă acest lucru conduce la obținerea celui mai
mic număr de grupuri și/sau la constituirea unor grupuri mai mari (Fig.2.10);

x1 x2 x1 x2
x3 00 01 11 10 x3 00 01 11 10
0 1 1 1 1 0 1 1 1 1

1 0 0 1 1 1 0 0 1 1
GREŞIT CORECT

Fig.2.10 Identificarea numărului minim de grupuri

 câmpurile extreme sunt câmpuri vecine și pot constitui grupuri (Fig.2.11).


x1 x2
x3 00 01 11 10

0 1 1 1 1

1 1 1 1
CORECT

Fig.2.11 Câmpuri extreme vecine

33
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

4. Minimizarea funcțiilor logice


Plecând de la formele canonice de reprezentare, conjunctive sau
disjunctive, se pot obține reprezentările funcțiilor logice în forme simplificate. Prin
metode algebrice care utilizează axiomele și teoremele logicii booleene, acestea
pot fi aduse la o formă minimală. Funcția logică care nu mai poate fi simplificată
se numește forma elementară minimizată. Însă, prelucrările algebrice sunt de
multe ori greoaie și nu oferă garanția aducerii funcțiilor la o formă minimală.
Metodele grafice, bazate pe diagramele Karnaugh, permit simplificarea
funcțiilor logice plecând de la proprietatea de adiacență a câmpurilor vecine.
Astfel, prin constituirea de grupuri (subcuburi) între câmpurile vecine, pe baza
regulilor enunțate anterior, termenii aferenți acestora se reduc doi câte doi în
baza teoremei de adiacență, astfel încât, fiecare grup (subcub) va furniza un singur
termen pentru constituirea funcției logice. Termenul furnizat de fiecare grup este
un produs între variabilele funcției, variabile necomune tuturor câmpurilor unui
subcub (grup) reducându-se. Prin gruparea câmpurilor vecine în grupuri
(subcuburi) de ordinul R, se anulează R variabile, și anume, cele care apar negate
și ne-negate.
Așadar, fiecare grup produce un produs care participă la suma de produse
aferentă funcției logice. Respectarea regulilor de constituire a numărului minim
de grupuri (subcuburi) conduce la obținerea funcției logice în formă minimală,
forma elementară minimizată.
De reținut:
 Funcția logică asociată unei diagrame Karnaugh (în reprezentare FCD)
este egală suma termenilor aferenți grupurilor (subcuburilor) constituite,
unde termenul aferent unui grup (subcub) este egal cu produsul
variabilelor comune tuturor câmpurilor din grup (subcub).
 Într-o diagramă Karnaugh (în reprezentare FCD), în constituirea
termenilor reprezentării canonice, variabilele se consideră atât în formă
negată cât și ne-negată: 0 se asociază variabilei negate ( 𝒙 ), iar 1 se
asociază variabilei ne-negate ( 𝒙 ).
Exemplu: Pentru o funcție logică 𝐹(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ), figura 6,
termenul P0 este: 𝑃0 (0,0,0,0) = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4
termenul P7 este: 𝑃7 (0,1,1,1) = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4

34
Cap.2 Elemente de logică booleană

Considerând cazul simplu al diagramelor Karnaugh care includ un singur


grup (subcub de ordinul 1), funcțiile 𝐹(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) aferente diagramelor din
figura 2.12 (a, b și c), determinate în baza regulilor expuse mai sus, sunt:

𝑭𝒂 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟎 + 𝑷𝟒 = 𝒙𝟏 ∙ 𝒙𝟑 ∙ 𝒙𝟒
𝐹𝑎 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 = 𝑥1 ∙ 𝑥3 ∙ 𝑥4 ∙ (𝑥2 + 𝑥2 )
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță

= 𝑥1 ∙ 𝑥3 ∙ 𝑥4

𝑭𝒃 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟑 + 𝑷𝟏𝟏 = 𝒙𝟐 ∙ 𝒙𝟑 ∙ 𝒙𝟒
𝐹𝑏 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 = 𝑥2 ∙ 𝑥3 ∙ 𝑥4

𝑭𝒄 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟏𝟑 + 𝑷𝟏𝟓 = 𝒙𝟏 ∙ 𝒙𝟐 ∙ 𝒙𝟒


𝐹𝑐 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 = 𝑥1 ∙ 𝑥2 ∙ 𝑥4

În cazul subcuburilor de ordinul 1, obținute prin gruparea a 2 câmpuri, se


anulează o (una) variabilă.
x1x2 00 11 x1x2 00 11
x1x2 00 01 11 10
01 10 01 10 x3x4
x3x4 x3x4 0 4 12 8
0 4 12 8 0 4 12 8
00 1 1 0 0 00 0 0 0 0 00 0 0 0 0
1 5 13 9 1 5 13 9 1 5 13 9
01 0 0 0 0 01 0 0 0 0 01 0 0 1 0
3 7 15 11 3 7 15 11 3 7 15 11
11 0 0 0 0 11 1 0 0 1 11 0 0 1 0
2 6 14 10 2 6 14 10 2 6 14 10
10 0 0 0 0 10 0 0 0 0 10 0 0 0 0

a b c
Fig.2.12 Formarea subcuburilor de ordinul 1
Considerând cazul simplu al diagramelor Karnaugh care includ un singur
grup (subcub de ordinul 2), funcțiile 𝐹(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) aferente diagramelor din
figura 2.13 (a, b și c), determinate în baza regulilor expuse mai sus, sunt:

𝑭𝒂 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟎 + 𝑷𝟏 + 𝑷𝟒 + 𝑷𝟓 = 𝒙𝟏 ∙ 𝒙𝟑
𝐹𝑎 = ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță 𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță

= 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 = 𝑥1 ∙ 𝑥3
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță

35
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

𝑭𝒃 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟑 + 𝑷𝟕 + 𝑷𝟏𝟓 + 𝑷𝟏𝟏 = 𝒙𝟑 ∙ 𝒙𝟒


𝐹𝑏 = 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4

= 𝑥1 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4 = 𝑥3 ∙ 𝑥4

𝑭𝒄 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟎 + 𝑷𝟒 + 𝑷𝟐 + 𝑷𝟔 = 𝒙𝟏 ∙ 𝒙𝟒
𝐹𝑐 = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4
= 𝑥1 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4 = 𝑥1 ∙ 𝑥4

În cazul subcuburilor de ordinul 2, obținute prin gruparea a 4 câmpuri, se


anulează două variabile.

x1x2 00 01 11 10 x1x2 00 01 11 10 x1x2 00 01 11 10


x3x4 x3x4 x3x4
0 4 12 8 0 4 12 8 0 4 12 8
00 1 1 0 0 00 0 0 0 0 00 1 1 0 0
1 5 13 9 1 5 13 9 1 5 13 9
01 1 1 0 0 01 0 0 0 0 01 0 0 0 0
3 7 15 11 3 7 15 11 3 7 15 11
11 0 0 0 0 11 1 1 1 1 11 0 0 0 0
2 6 14 10 2 6 14 10 2 6 14 10
10 0 0 0 0 10 0 0 0 0 10 1 1 0 0

a b c
Fig.2.13 Formarea subcuburilor de ordinul 2

Subcub de ordinul 2 Subcub de ordinul 2 Subcub de ordinul 2


P0 --> 0 0 0 0 P3 --> 0 0 1 1 P0 --> 0 0 0 0
P1 --> 0 0 0 1 P7 --> 0 1 1 1 P4 --> 0 1 0 0
P4 --> 0 1 0 0 P15 --> 1 1 1 1 P2 --> 0 0 1 0
P5 --> 0 1 0 1 P11 --> 1 0 1 1 P6 --> 0 1 1 0
Fa --> 𝒙𝟏 ∙ 𝒙𝟑 Fb --> 𝒙𝟑 ∙ 𝒙𝟒 Fc --> 𝒙𝟏 ∙ 𝒙𝟒

Fig.2.14 Identificarea grafică a termenilor în formă


minimizată aferenți subcuburilor de ordinul 2

În figura 2.14 se detaliază modul de extragere a termenului aferent unui


subcub de ordinul 2, pentru o funcție de patru variabile. În baza teoremei de
adiacență toți termenii grupului care apar negați și ne-negați se reduc: în cazul
subcuburilor de ordinul 2, se reduc două variabile. Expresia aferentă subcubului

36
Cap.2 Elemente de logică booleană

(în acest caz) se reduce la un produs de două variabile, variabilele comune tuturor
câmpurilor subcubului.
Considerând cazul diagramelor Karnaugh care includ un singur grup (subcub
de ordinul 3), funcția 𝐹(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) aferente diagramelor din figura 2.15 (a și b),
determinate în baza regulilor expuse mai sus, sunt:

x1x2 00 01 11 10 x1x2 00 01 11 10
x3x4 x3x4
0 4 12 8 0 4 12 8
00 0 0 0 0 00 0 0 1 1
1 5 13 9 1 5 13 9
01 1 1 1 1 01 0 0 1 1
3 7 15 11 3 7 15 11
11 1 1 1 1 11 0 0 1 1
2 6 14 10 2 6 14 10
10 0 0 0 0 10 0 0 1 1

a b
Fig.2.15 Formarea subcuburilor de ordinul 3

𝑭𝒂 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟏 + 𝑷𝟑 + 𝑷𝟓 + 𝑷𝟕 + 𝑷𝟏𝟑 + 𝑷𝟏𝟓 + 𝑷𝟗 + 𝑷𝟏𝟏 = 𝒙𝟒


𝐹𝑎 = 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 +
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță 𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță
+⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 =
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță 𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță

= 𝑥1 ∙ 𝑥2 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥4
= 𝑥1 ∙ 𝑥4 + 𝑥1 ∙ 𝑥4 = 𝑥4

𝑭𝒃 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟖 + 𝑷𝟗 + 𝑷𝟏𝟎 + 𝑷𝟏𝟏 + 𝑷𝟏𝟐 + 𝑷𝟏𝟑 + 𝑷𝟏𝟒 + 𝑷𝟏𝟓 = 𝒙𝟏


𝐹𝑏 = ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 +

+⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 =

= 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3
= 𝑥1 ∙ 𝑥2 + 𝑥1 ∙ 𝑥2 = 𝑥1

În figura 2.16 se detaliază modul de extragere a termenului aferent unui


subcub de ordinul 3, pentru o funcție de patru variabile. În baza teoremei de
adiacență toți termenii grupului care apar negați și ne-negați se reduc: în cazul
subcuburilor de ordinul 3, se reduc trei variabile. Expresia aferentă subcubului (în

37
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

acest caz) se reduce la o singură variabilă, variabila comună tuturor câmpurilor


subcubului.

Subcub de ordinul 3 Subcub de ordinul 3


P1 --> 0 0 0 1 P8 --> 1 0 0 0
P3 --> 0 0 1 1 P9 --> 1 0 0 1
P5 --> 0 1 0 1 P10 --> 1 0 1 0
P7 --> 0 1 1 1 P11 --> 1 0 1 1
P13 --> 1 1 0 1 P12 --> 1 1 0 0
P15 --> 1 1 1 1 P13 --> 1 1 0 1
P9 --> 1 0 0 1 P14 --> 1 1 1 0
P11 --> 1 0 1 1 P15 --> 1 1 1 1
Fa --> 𝒙𝟒 Fb --> 𝒙𝟏

Fig.2.16 Identificarea grafică a termenilor în formă


minimizată aferenți subcuburilor de ordinul 3

Dacă o diagramă Karnaugh include mai multe grupuri (subcuburi), funcția


logică asociată diagramei este egală cu suma termenilor aferenți grupurilor
(subcuburilor) constituite.
Fie funcția F(x1, x2, x3, x4)  B2, x1, x2, x3, x4  B2, unde B2= {0, 1}. În
diagrama din figura 2.17 pot fi identificate două soluții echivalente de grupare a
câmpurilor, fiecare soluție implicând un număr minim de trei subcuburi:
subcuburile marcate cu linie continuă, la care se adaugă oricare din subcuburile
marcate cu linie întreruptă.
x1x2 00 01 11 10
x3x4
0 4 12 8
00 0 0 1 1 x1x3
1 5 13 9
01 0 0 1 1
3 7 15 11
11 1 1 1 0 x1x2x4
2 6 14 10
10 0 0 0 0

x1x3x4 x2x3x4

Fig.2.17 Identificarea grafică a subcuburilor și a termenilor funcției logice

38
Cap.2 Elemente de logică booleană

Cele două soluții echivalente conduc la obținerea următoarelor funcții:


𝐹1 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥1 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4
𝐹2 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥1 ∙ 𝑥3 + 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4
Pentru verificarea echivalenței celor două soluții obținute se construiește
tabelul de adevăr asociat funcțiilor F1 și F2 . În conformitate cu rezultatele obținute
(Tabelul 2.3) se confirmă că cele două funcții sunt echivalente și conduc la aceleași
rezultate pentru orice configurație a variabilelor de intrare.
Tabelul 2.3 Tabelul de adevăr și termenii intermediari aferenți funcțiilor F1 și F2 .
𝑥1 𝑥2 𝑥3 𝑥4 𝑥1 ∙ 𝑥3 𝑥1 ∙ 𝑥2 ∙ 𝑥4 𝑥1 ∙ 𝑥3 ∙ 𝑥4 𝑥2 ∙ 𝑥3 ∙ 𝑥4 F1 F2
0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 1 1 0 0 1 0 1 1
0 1 0 0 0 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0
0 1 1 1 0 0 1 1 1 1
1 0 0 0 1 0 0 0 1 1
1 0 0 1 1 0 0 0 1 1
1 0 1 0 0 0 0 0 0 0
1 0 1 1 0 0 0 0 0 0
1 1 0 0 1 0 0 0 1 1
1 1 0 1 1 1 0 0 1 1
1 1 1 0 0 0 0 0 0 0
1 1 1 1 0 1 0 1 1 1

Orice altă soluție de grupare a câmpurilor diagramei din figura 2.17 ar


conduce la obținerea unor funcții logice echivalente, însă exprimate într-o formă
mai complexă în comparație cu funcțiile F1 și F2.

39
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

În figura 2.18 se consideră alte două exemple în care subcuburile sunt


constituite corect, respectând regula ca fiecare subcub să fie alcătuit dintr-un
număr cât mai mare de câmpuri, respectiv să se obțină cât mai puține subcuburi.

x1x2 00 01 11 10 x1x2 00 01 11 10
x3x4 x3x4
0 4 12 8 0 4 12 8
00 0 1 1 0 x2x3 00 1 1 0 1 x2
1 5 13 9 1 5 13 9
01 1 1 1 1 01 1 0 0 1
3 7 15 11 x4 3 7 15 11
11 1 1 1 1 11 1 0 1 1
2 6 14 10 2 6 14 10
10 0 1 0 0 10 1 1 0 1
x1x2 x1x4 x1x3x4

a b
Fig.2.18 Identificarea grafică a subcuburilor și a termenilor funcțiilor logice
Funcțiile logice în formă minimizată, asociate diagramelor din figura 2.18,
sunt:
𝐹𝑎 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥2 ∙ 𝑥3 + 𝑥4 + 𝑥1 ∙ 𝑥2
𝐹𝑏 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥2 + 𝑥1 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4
Orice alte soluții de grupare a câmpurilor diagramelor din figura 2.18 ar
conduce la obținerea unor funcții logice echivalente, însă exprimate într-o formă
mai complexă în comparație cu funcțiile Fa și Fb .
Folosirea diagramelor Karnaugh pentru funcții cu mai mult de 4 variabile,
necesită construirea de diagrame suplimentare, respectiv definirea de reguli de
corespondență între diagrame pentru constituirea subcuburilor: pentru 5 variabile
de intrare sunt necesare două diagrame Karnaugh, fiecare cu 16 câmpuri; pentru
6 variabile sunt necesare 4 diagrame, fiecare cu câte 16 câmpuri.
Diagramele Karnaugh pot fi reprezentate și prin intermediul termenilor
funcțiilor canonice conjunctive (FCC). În această situație procedura de extragere a
funcției minimizate este similară, cu observația că subcuburile se vor constitui pe
baza zerourilor din diagrame.

40
Cap.2 Elemente de logică booleană

5. Sisteme logice combinaționale


Majoritatea aplicațiilor industriale sunt de tip secvențial, ele putând fi
structurate în etape și condiții de trecere succesivă de la o etapă la alta. Există însă
o clasă aparte de aplicații, numite combinaționale, unde ieșirile sistemului depind
exclusiv de starea sau valoarea intrărilor, respectiv nu depind de succesiunea în
timp a valorilor intrărilor. În cazul acestora, fiecare ieșire a sistemului poate fi
exprimată printr-o funcție logică ce depinde doar de intrări.
Problema principală în elaborarea algoritmilor aferenți aplicațiilor de tip
combinațional constă în determinarea funcțiilor logice aferente ieșirilor
sistemului. Aceste funcții logice trebuie determinate: pentru multe situații
determinarea este simplă/imediată, însă cazurile mai complexe necesită utilizarea
metodelor de determinare, simplificare sau minimizare a funcțiilor logice (tabele
de adevăr, forme canonice și diagrame Karnaugh).
Forma minimizată de reprezentare a funcțiilor logice este obligatorie în
cazul implementării acestora prin componente hardware (porți logice). În cazul
controlerelor programabile (PLC-urilor) primează determinarea funcțiilor logice,
exprimarea lor în formă minimizată este opțională, compactizarea extremă a
algoritmilor fiind importantă doar în situații speciale.
În continuare se exemplifică utilitatea instrumentelor prezente mai sus în
proiectarea algoritmilor de control aferenți sistemelor combinaționale.
Formularea cerințelor (specificației) pentru realizarea unei aplicații industriale de
control poate fi făcută în forme diverse: descriere textuală, tabele de adevăr,
diagrame funcționale/ciclograme, diagrame secvențiale, grafuri standardizate
(GRAFCET).

Aplicația 2.1
Sistemul de alimentare cu piese al unei instalații trebuie să funcționeze în
următoarele condiții:
 să nu pornească dacă presiunea în sistem este mai mare decât cea
prestabilită (P = 1);
 să pornească dacă senzorii S1 și S2 sunt activi (S1=1; S2=1);
 să pornească dacă numărătorul N a numărat 10 piese (N=1).

Se cere să se determine funcția logică în formă minimizată care trebuie


implementată într-un automat programabil (PLC) pentru a porni sistemul de
alimentare în condițiile enunțate mai sus.

41
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Analizând condițiile de funcționare descrise în enunțul aplicației se observă


că funcția logică (FSTART), asociată ieșirii care asigură pornirea sistemului de
alimentare, depinde doar de variabilele de intrare, independent de timp. Așadar
sistemul de control aferent alimentatorului este unul de tip combinațional. Pentru
determinarea funcției logice FSTART care verifică cerințele aplicației, se parcurg
următoarele etape:
1. Construirea tabelului de adevăr în formă extinsă (Tabelul 2.4)
Pe baza enunțului se construiește tabelul de adevăr incluzând termenii
standard de tip sumă și produs. Senzorilor S1, S2 , P și N li se asociază variabilele de
intrare x1, x2, x3 și x4. Funcția FSTART se reprezintă prin componentele sale FK.
Tabelul 2.4 Tabelul de adevăr în formă extinsă aferent funcției FSTART
𝑥1 𝑥2 𝑥3 𝑥4 Termenii standard de Termenii standard de FSTART
tip sumă (Sk) tip produs (Pk) (FK)
0 0 0 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S0 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P0 0
0 0 0 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S1 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P1 1
0 0 1 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S2 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P2 0
0 0 1 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S3 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P3 0
0 1 0 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S4 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P4 0
0 1 0 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S5 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P5 1
0 1 1 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S6 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P6 0
0 1 1 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S7 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P7 0
1 0 0 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S8 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P8 0
1 0 0 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S9 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P9 1
1 0 1 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S10 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P10 0
1 0 1 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S11 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P11 0
1 1 0 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S12 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P12 1
1 1 0 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S13 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P13 1
1 1 1 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S14 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P14 0
1 1 1 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S15 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P15 0

42
Cap.2 Elemente de logică booleană

2. Determinarea funcției logice


Utilizând tabelul de adevăr în formă extinsă se poate determina funcția
logică FSTART care verifică cerințele aplicației, prin intermediul reprezentărilor
canonice (metodă algebrică) sau utilizând diagramele Karnaugh (metodă grafică).
a. Determinarea funcției logice prin intermediul reprezentărilor canonice
Pentru reprezentarea unei funcții logice în formă canonică există două
opțiuni echivalente: reprezentarea în formă canonică disjunctivă (FCD) și în formă
canonică conjunctivă (FCC). Pe baza tabelului de adevăr în formă extinsă (Tabelul
2.4) cele două forme de reprezentare canonică sunt:
FSTART = FFCD = (F0P0) + (F1P1) + (F2P2) + (F3P3) + (F4P4) + (F5P5) + (F6P6) + (F7P7) +
(F8P8)+(F9P9) + (F10P10) + (F11P11) + (F12P12) + (F13P13) + (F14P14) + (F15P15)
FSTART = FFCC = (F0+S0) (F1+S1) (F2+S2) (F3+S3) (F4+S4) (F5+S5) (F6+S6) (F7+S7)
(F8+S8) (F9+S9) (F10+S10) (F11+S11) (F12+S12) (F13+S13) (F14+S14) (F15+S15)
Pentru că cele două forme de reprezentare sunt echivalente și pentru că, în
cazul de față, reprezentarea disjunctivă are mai puțini termeni decât cea
conjunctivă, determinarea funcției logice FSTART se face prin intermediul
reprezentării canonice în formă disjunctivă (sumă de produse), FFCD.

FFCD = (F0P0) + (F1P1) + (F2P2) + (F3P3) + (F4P4) + (F5P5) + (F6P6) + (F7P7) + (F8P8)+
(F9P9) + (F10P10) + (F11P11) + (F12P12) + (F13P13) + (F14P14) + (F15P15)
= (0P0) + (1P1) + (0P2) + (0P3) + (0P4) + (1P5) + (0P6) + (0P7) + (0P8)+
(1P9) + (0P10) + (0P11) + (1P12) + (1P13) + (0P14) + (0P15)
= P1 + P5 +P9 + P12 + P13
= 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 +
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4

Conform teoremei idempotenței (x + x = x) funcția este extinsă cu încă un


termen (P13 = P13 +P13), iar termenii subliniați se reduc doi câte doi prin teorema
de adiacență:
𝐹𝐹𝐶𝐷 = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 +
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4

= 𝑥1 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 = 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3

= 𝑥3 (𝑥4 + 𝑥1 ∙ 𝑥2 )

43
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

sau, revenind la notațiile inițiale:


𝐹𝑆𝑇𝐴𝑅𝑇 (𝑆1 , 𝑆2 , 𝑃, 𝑁) = 𝑃 ∙ (𝑁 + 𝑆1 ∙ 𝑆2 )

b. Determinarea funcției logice prin intermediul diagramelor Karnaugh


Pentru determinarea funcției logice care asigură funcționalitatea impusă
aplicației se parcurg următoarele etape:
 Se construiește diagrama Karnaugh asociată. În funcție de modul de alegere
al variabilelor de intrare se pot obține mai multe forme de reprezentare a
acesteia, însă toate trebuie să conducă la același rezultat. Așadar este
suficient să se construiască o singură diagramă din care să se extragă
funcția logică. În figura 2.19 sunt construite două diagrame, pentru
exemplificare.
 Pentru diagrama Karnaugh se identifică subcuburile formate în baza
regulilor de constituire a acestora. Se obțin două subcuburi, unul de ordinul
unu și unul de ordinul doi.
 Se extrage funcția logice aferentă diagramei. Funcția logică asociată unei
diagrame Karnaugh (în reprezentare FCD) este egală suma termenilor
aferenți subcuburilor constituite, unde termenul aferent unui subcub este
egal cu produsul variabilelor comune tuturor câmpurilor din subcub.
Pentru ambele diagrame se obține următoarea funcție logică:
𝐹𝑆𝑇𝐴𝑅𝑇 (𝑆1 , 𝑆2 , 𝑃, 𝑁) = 𝑃 ∙ 𝑁 + 𝑃 ∙ 𝑆1 ∙ 𝑆2 = 𝑃 ∙ (𝑁 + 𝑆1 ∙ 𝑆2 )

S1S2 S1N
00 01 11 10 00 01 11 10
PN S2P
0 4 12 8 0 4 12 8
00 0 0 1 0 00 0 1 1 0
PS1S2 PN
1 5 13 9 1 5 13 9
01 1 1 1 1 01 0 0 0 0
PN
3 7 15 11 3 7 15 11
11 0 0 0 0 11 0 0 0 0
2 6 14 10 2 6 14 10
10 0 0 0 0 10 0 1 1 1
PS1S2
a b
Fig.2.19 Aplicația 2.1. Determinarea grafică a termenilor funcției FSTART
pentru diferite moduri de construire a diagramei Karnaugh

44
Cap.2 Elemente de logică booleană

Funcția FSTART identificată asigură pornirea sistemului de alimentare în


condițiile specificate în enunțul aplicației. Indiferent de metoda utilizată
rezultatele trebuie să fie echivalente, adică funcțiile obținute - chiar dacă sunt
diferite - trebuie să returneze aceleași valori. În cazul de față s-a obținut aceeași
funcție logică prin ambele metode. Implementarea acesteia pe un automat
programabil (PLC) necesită cunoașterea și utilizarea unui limbaj de programare.
Particularitățile privind implementarea algoritmilor de control utilizând un anumit
limbaj de programare sunt descrise în capitolele următoare.

45
Curs 2 – Sisteme Logice Elementare

Disciplina: Automate de Control și Servire


Tematica cursului: Sisteme logice elementare
Locație: Laboratorul de Mecatronică și Echipamente de Automatizare (sala C304A)/Microsoft Teams
An: IV MFN

Obiective curs • Realizarea simulată și experimentală a unor circuite elementare de control


• Implementarea funcțiilor logice elementare
• Utilizarea mediilor software specifice

Conținut • Operatori booleeni


• Funcții logice elementare (AND, OR, NOT, XOR)
• Funcții logice compuse
• Implementarea aplicațiilor industriale conduse de PLC-uri

Echipamente • Sisteme mecatronice modulare (Lab. MEA)


utilizate • Whiteboard

1
NOŢIUNI TEORETICE FUNDAMENTALE

• Elemente de algebră booleană


• Funcții logice elementare

IMPLEMENTAREA funcțiilor logice elementare

1. Funcția identitate

Descrierea problemei

Apăsarea butonului (S1) are ca efect aprinderea lămpii (H1). Lampa va


ilumina atâta timp cât butonul este apăsat.

➢ analizați schema electrică a sistemului din figură.


➢ formulați un program utilizând diagrame “Ladder”.

Soluția

Diagrama Ladder Schema electrică a circuitului

Variabile

Nume Atribut Tip Comentariu


S1 [Intrare] BOOL Buton S1
H1 [Ieșire] BOOL Lampă H1

2
2. Funcția NOT (negarea)

Descrierea problemei

Un fir subțire este întins în spatele unei ferestre, ce se rupe în eventualitatea


unei intrări prin efracție. Un circuit închis este întrerupt, fapt ce are ca și
rezultat declanșarea unei alarme.

➢ analizați schema electrică a sistemului din figură.


➢ formulați un program utilizând diagrame “Ladder”.

Soluția

Diagrama Ladder Schema electrică a circuitului

Variabile

Nume Atribut Tip Comentariu


Intrare0_0 [Intrare] BOOL Senzor S1
Ieșire0_0 [Ieșire] BOOL Sirena H1

3
3. Funcția OR (SAU logic)

Descrierea problemei

Fiecare din cele două intrări ale unui depozit sunt prevăzute cu buton
pentru soneria din camera portarului. Acesta trebuie să sune la
apăsarea independentă a oricăruia din cele două butoane.

➢ analizați schema electrică a sistemului din figură.


➢ formulați un program utilizând diagrame “Ladder”.

Soluția

Schema electropneumatică Schema electrică a circuitului

Variabile

Nume Atribut Tip Comentariu


Intrare0_0 [Intrare] BOOL Buton S1
Intrare0_1 [Intrare] BOOL Buton S2
Ieșire0_0 [Ieșire] BOOL Soneria H1

4
4. Funcția AND (ŞI logic)

Descrierea problemei

Presa pneumatică (1.0) are voie să avanseze doar dacă un buton


este apăsat și un grilaj de protecție acoperă zona de prelucrare.
Dacă una din aceste condiții nu este îndeplinită, presa se va retrage
imediat.

Grilajul de protecție este monitorizat de un senzor de proximitate


B1. Presa avansează sau se retrage prin intermediul unei valve
electromagnetice cu arc (Y1).

➢ analizați schema electro-pneumatică a sistemului din


figură.
➢ analizați schema electrică a sistemului din figură.
➢ formulați un program utilizând diagrame “Ladder”.

Soluția

Schema electropneumatică Schema electrică a circuitului

5
Diagrama Ladder

Variabile

Nume Atribut Tip Comentariu


Intrare0_0 [Intrare] BOOL Buton START S1
Intrare0_1 [Intrare] BOOL Senzor proximitate B1
Ieșire0_0 [Ieșire] BOOL Valvă Y1

5. Funcția XOR (SAU Exclusiv)

Descrierea problemei

Un dispozitiv de ștanțare poate opera din trei zone de lucru


diferite. Pe orice canal am introduce piesa de lucru, aceasta intră în
contact cu doi din trei senzori de proximitate B1, B2 și B3. Acest
lucru are ca efect extinderea cilindrului 1.0 prin intermediul valvei
electromagnetice (Y1) și imprimarea unui traseu în piesa de lucru.

Ciclul de ștanțare este declanșat doar dacă semnalele a doi senzori


sunt identice. Din motive de siguranță, cilindrul nu trebuie să
avanseze dacă toți senzorii sunt în contact cu piesa.

➢ analizați schema electro-pneumatică a sistemului din


figură.
➢ analizați schema electrică a sistemului din figură.
➢ formulați un program utilizând diagrame “Ladder”.

6
Soluția

Schema electropneumatică Schema electrică a circuitului

Diagrama Ladder

Variabile

Nume Atribut Tip Comentariu


Intrare0_0 [Intrare] BOOL Senzor proximitate B1
Intrare0_1 [Intrare] BOOL Senzor proximitate B2
Intrare0_2 [Intrare] BOOL Senzor proximitate B3
Ieșire0_0 [Ieșire] BOOL Valvă Y1

7
Cap.2 Elemente de logică booleană

1. Funcții logice
2. Forme canonice
3. Diagrame Karnaugh
4. Minimizarea funcțiilor logice
5. Sisteme logice combinaționale

Programarea unui controler industrial implică o etapă de


elaborare a unui program pe baza unei specificații tehnice, respectiv
implementarea acestuia pe controler având în vedere caracteristicile
specifice ale acestuia. Elaborarea programului presupune aplicarea unor
proceduri și metode specifice de proiectare în urma cărora rezultă
algoritmul care asigură funcționalitatea dorită sistemului. La nivel inferior
(de bază) tehnicile de proiectare fac apel la algebra booleană: operatori
logici, funcții, teoreme, axiome, reprezentări algebrice în forme canonice,
reprezentări grafice specifice (tabele de adevăr, diagrame Karnaugh),
tehnici de simplificare a funcțiilor logice. Elementele prezentate în cadrul
acestui capitol sunt fundamentale pentru înțelegerea logicii după care
lucrează PLC-urile, respectiv pentru proiectarea sistemelor logice
combinaționale și a celor secvențiale [13, 19, 23, 26].

20
Cap.2 Elemente de logică booleană

1. Funcții logice
Obiectul de studiu al logicii sunt propozițiile și compunerile lor. Enunțul A se
numește propoziție dacă A exprimă un fapt. Propozițiile în logica booleană1 pot
avea numai două valori: adevărat sau fals. Compunerea a două sau mai multe
propoziții logice se numește funcție logică și rezultatul acesteia este 0 sau 1 (fals
sau adevărat). Toate funcțiile logice sunt formate cu ajutorul a trei operatori care
formează mulțimea operatorilor algebrei booleene, Mop = {NU, ȘI, SAU}.

1.1 Funcții logice elementare

Funcția NU logic: fNU(A) = A


Operează asupra unui singur argument Tabel de adevăr: funcția NU
căruia îi schimbă valoarea de adevăr. Dacă
variabila A este adevărată, negația ei va fi falsă. A A
Negația lui A se simbolizează: A .
0 1
A A 1 0
x
Fig.2.1 Simbolizare grafică - funcția NU

Funcția ȘI logic: fȘI(A, B) = A  B


Operează cu două variabile, A și B, Tabel de adevăr: funcția ȘI
rezultatul funcției este adevărat dacă cele două
variabile sunt adevărate. Operatorul ȘI se mai A B AB
notează: „  ” (simbolul pentru înmulțire). 0 0 0
A 0 1 0
AB
B 1 0 0
1 1 1
Fig.2.2 Simbolizare grafică - funcția ȘI

1
George Boole (02.11.1815 – 08.12.1864) matematician și filosof englez, considerat unul din
fondatorii informaticii. A pus bazele algebrei booleene, domeniu care stă la baza funcționării
calculatoarelor.

21
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Funcția SAU logic: fSAU(A, B) = A + B


Operează cu două variabile, A și B, Tabel de adevăr: funcția SAU
rezultatul funcției este adevărat dacă cel puțin
una din variabile este adevărată. Operatorul SAU A B A+B
se mai notează: „ + ” (simbolul pentru adunare).
0 0 0
A 0 1 1
A+B
B 1 0 1
1 1 1
Fig.2.3 Simbolizare grafică - funcția SAU

1.2 Funcții logice complexe


Funcțiile booleene complexe se obțin prin compunerea multiplă a
propozițiilor logice:
Fie variabilele booleene x1, x2,…, xN , aparținând mulțimii B2 = {0, 1}. Orice
combinație logică între acestea reprezintă o funcție booleană cu N variabile,
f (x1 , x2 , …, xN ), rezultatul funcției aparținând mulțimii B2 = {0, 1}.
Funcțiile booleene se bucură de proprietăți specifice care sunt definite prin
intermediul axiomelor și teoremelor. Axiomele sunt enunțuri a căror valoare de
adevăr nu se pune la îndoială și pentru care nu este nevoie de demonstrații.
Teoremele se demonstrează cu ajutorul axiomelor.

1.3 Axiomele logicii booleene


Fie x1 , x2 , x3  B2, unde B2 = {0, 1}.
1. Închiderea
Rezultatul funcțiilor elementare ȘI, SAU, NU sunt tot elemente booleene:
dacă x1 , x2  B2, atunci x1  x2  B2,
dacă x1 , x2  B2, atunci x1 + x2  B2,
dacă x1 , x2  B2, atunci 𝑥1 ∈ 𝐵2 , 𝑥2 ∈ 𝐵2 .
2. Comutativitatea
În cazul funcțiilor elementare, ȘI și SAU, rezultatul operațiilor nu depinde de
ordinea termenilor:
x 1  x 2 = x2  x 1

22
Cap.2 Elemente de logică booleană

x 1 + x2 = x2 + x 1
3. Asociativitatea
În cazul funcțiilor (expresiilor logice) cu un sigur operator, ȘI sau SAU, nu
contează ordinea de evaluare a termenilor:
x1 + (x2 + x3) = (x1 + x2) + x3
x1  (x2  x3) = (x1  x2)  x3
4. Distributivitatea
Cele două operații, ȘI și SAU, sunt distributive una față de cealaltă:
x1 + (x2  x3) = (x1 + x2)  (x1 + x3)
x1  (x2 + x3) = (x1  x2) + (x1  x3)
5. Element neutru
Elementul neutru al unei variabile booleene este elementul pentru care
funcția devine egală cu valoarea variabilei: fȘI(x1, 1) = x1 , fSAU(x1, 0) = x1.
x1  1 = x1, pentru funcția ȘI elementul neutru este 1.
x1 + 0 = x1, pentru funcția SAU element neutru este 0.
6. Element invers:
Elementul invers al unei variabile booleene este elementul negat:
𝑓𝑆𝐼 (𝑥1 , 𝑥1 ) = 0 , 𝑓𝑆𝐴𝑈 (𝑥1 , 𝑥1 ) = 1
𝑥1  𝑥1 = 0
𝑥1 + 𝑥1 = 1

1.4 Teoremele logicii booleene1


Fie x1 , x2  B2, unde B2 = {0, 1}.
1. Teorema idempotenței: x1  x1 = x1 ; x1 + x1 = x1

2. Teorema dublei negații: 𝑥1 = 𝑥1


3. Teorema absorbției: x1  (x1 + x2) = x1 ; x1 + (x1  x2) = x1

1
În cadrul acestei lucrări folosirea simbolurilor „+”, „ ” pentru reprezentarea operatorilor SAU și ŞI
conduce implicit la preluarea regulilor privind ordinea de efectuare a operațiilor. Astfel, în lipsa
parantezelor, care specifică clar ordinea efectuării operațiilor, se subînțelege că operația de înmulțire
(operator ŞI) este prioritară operației de adunare (operator SAU).

23
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

4. Teorema de adiacență: 𝑥1  𝑥2 + 𝑥1  𝑥2 = 𝑥1 , (𝑥1 + 𝑥2 )  (𝑥1 + 𝑥2 ) = 𝑥1


5. Legea lui 0 și 1: x1 0 = 0 ; x1 + 1 = 1

6. Teoremele lui De Morgan1: x1  x 2  x 1  x 2 ; x1  x 2  x 1  x 2

7. Teorema simplificării: 𝑥1 + 𝑥1  𝑥2 = 𝑥1 + 𝑥2 , 𝑥1 (𝑥1 + 𝑥2 ) = 𝑥1  𝑥2


Axiomele și teoremele enunțate mai sus se folosesc pentru operarea și
simplificarea expresiilor logice complexe. Alături de aceste teoreme și axiome,
algebra booleană pune la dispoziție și alte instrumente pentru evaluarea,
analizarea și simplificarea expresiilor logice complexe, care pot fi utilizate
independent unele de altele sau corelat:
 tabelele de adevăr;
 reprezentarea în forme canonice disjunctive sau conjunctive;
 diagramele Karnaugh–Veitch.

1.5 Tabele de adevăr


Tabele de adevăr se folosesc pentru evaluarea unei funcții logice (sau a mai
multor funcții logice) cu un număr redus de variabile. Metoda implică calcularea
funcției logice pentru fiecare valoare posibilă a variabilelor ei, respectiv pentru
toate combinațiile posibile permise de funcție.
Astfel, considerând funcția f(x1, x2 ) = 𝑥1 ∙ 𝑥2 + 𝑥1 ∙ 𝑥2 , având variabile
booleene x1 , x2  B2, unde B2 = {0, 1}, în tabelul de adevăr aferent funcției f
(Tabelul 2.1) sunt specificate valorile funcției f, calculate pentru toate valorile
posibile ale variabilelor și pentru toate combinațiile posibile între acestea, în
conformitate cu funcția f.
Tabelul 2.1 Tabelul de adevăr aferent funcției logice f(x1, x2 ) = 𝑥1 ∙ 𝑥2 + 𝑥1 ∙ 𝑥2
Variabile Calcule intermediare Rezultatul funcției f
𝑥1 𝑥2 𝑥1 𝑥2 𝑥1 ∙ 𝑥2 𝑥1 ∙ 𝑥2 𝑥1 ∙ 𝑥2 + 𝑥1 ∙ 𝑥2
0 0 1 1 1 0 1
0 1 1 0 0 0 0
1 0 0 1 0 0 0
1 1 0 0 0 1 1

1
Teorema poartă numele celui care a descoperit-o, Augustus De Morgan (1806-1871), matematician
și logician englez.

24
Cap.2 Elemente de logică booleană

Altfel spus, un tabel de adevăr specifică valorile unei funcții logice pentru
orice situație posibilă determinată de valorile variabilelor.

2. Forme canonice
Formele canonice asigură scrierea structurată a funcțiilor (expresiilor) logice
și servesc pentru obținerea de reprezentări care permit reducerea numărului de
operatori prin aplicarea unor tehnici specifice. Orice expresie logică poate fi adusă
la o formă canonică. Pentru reprezentarea unei funcții logice în formă canonică
există două opțiuni echivalente: reprezentarea în formă canonică disjunctivă și în
formă canonică conjunctivă.

2.1 Forma canonică disjunctivă (FCD)


Este o reprezentare în care sunt însumate (utilizând operatorul SAU) toate
produsele (utilizând operatorul ȘI) variabilelor, atât în formă negată cât și
ne-negată. Se mai numește forma canonică sumă de produse.
Exemplu
Fie funcția f(x1, x2 )  B2, x1 , x2  B2, unde B2 = {0, 1}.
Forma canonică disjunctivă a acestei funcții este:
fFCD(x1, x2) = P0 + P1 + P2 + P3 ,
unde: 𝑃0 = 𝑥1 ∙ 𝑥2 , 𝑃1 = 𝑥1 ∙ 𝑥2 , 𝑃2 = 𝑥1 ∙ 𝑥2 , 𝑃3 = 𝑥1 ∙ 𝑥2 .
Dacă numărul variabilelor este n, atunci reprezentarea (FCD) va include
produse de câte n variabile, respectiv 2n termeni de însumat.

2.2 Forma canonică conjunctivă (FCC)


Este o reprezentare în care sunt înmulțite (utilizând operatorul SI) toate
sumele (utilizând operatorul SAU) variabilelor, atât în formă negată cât și
ne-negată. Se mai numește forma canonică produs de sume.
Exemplu
Fie funcția f(x1, x2 )  B2, x1 , x2  B2, unde B2 = {0, 1},
Forma canonică conjunctivă a acestei funcții este:
fFCC(x1, x2) = S0  S1  S2  S3 ,
unde: 𝑆0 = 𝑥1 + 𝑥2 , 𝑆1 = 𝑥1 + 𝑥2 , 𝑆2 = 𝑥1 + 𝑥2 , 𝑆3 = 𝑥1 + 𝑥2 .

25
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Dacă numărul variabilelor este n, atunci reprezentarea (FCC) va include


sume de câte n variabile, respectiv 2n termeni de înmulțit.
Plecând de la aceste forme de reprezentare, conjunctivă sau disjunctivă, se
pot obține reprezentările funcției într-o formă minimală utilizând anumite tehnici
de simplificare. Prin simplificarea unei funcții (expresii) logice se înțelege
transformarea acesteia într-o reprezentare echivalentă, mai simplă, cu un număr
mai mic de operatori logici. Cele mai uzuale abordări privind simplificarea
funcțiilor logice apelează axiomele și teoremele logicii booleene, tabelele de
adevăr, reprezentările în forme canonice și diagramele Karnaugh–Veitch. Funcția
logică care nu mai poate fi simplificată se numește forma elementară minimizată.

2.3 Simplificarea funcțiilor logice utilizând formele canonice


Fie funcția F(x1, x2 , x3 )  B2, x1 , x2, x3  B2, unde B2 = {0, 1}. Pentru
funcția F se construiește tabelul de adevăr (Tabelul 2.2), din care rezultă valorile
funcției pentru orice valori ale variabilelor (x1, x2 , x3). Se pune problema
construirii formelor canonice ale funcției F, respectiv a simplificării acesteia.
Tabelul 2.2 Tabelul de adevăr și termenii standard de tip sumă și produs aferenți
funcțiilor logice exprimate în formă canonică disjunctivă și conjunctivă.
𝑥1 𝑥2 𝑥3 Termenii standard Termenii standard de Funcția F
de tip suma (Sk) tip produs (Pk)
(Fk, valori
caracteristice)
0 0 0 𝑥1 + 𝑥2 + 𝑥3 S0 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P0 F0
0 0 1 𝑥1 + 𝑥2 + 𝑥3 S1 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P1 F1
0 1 0 𝑥1 + 𝑥2 + 𝑥3 S2 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P2 F2
0 1 1 𝑥1 + 𝑥2 + 𝑥3 S3 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P3 F3
1 0 0 𝑥1 + 𝑥2 + 𝑥3 S4 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P4 F4
1 0 1 𝑥1 + 𝑥2 + 𝑥3 S5 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P5 F5
1 1 0 𝑥1 + 𝑥2 + 𝑥3 S6 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P6 F6
1 1 1 𝑥1 + 𝑥2 + 𝑥3 S7 𝑥1 ∙ 𝑥2 ∙ 𝑥3 P7 F7

FFCD (x1, x2, x3) = (F0P0) + (F1P1) + (F2P2) + (F3P3) + (F4P4) + (F5P5) + (F6P6) + (F7P7)

FFCC (x1, x2, x3) = (F0+S0) (F1+S1) (F2+S2) (F3+S3) (F4+S4) (F5+S5) (F6+S6) (F7+S7)

26
Cap.2 Elemente de logică booleană

O funcție logică de trei variabile, pentru care se cunosc valorile (Fk) aferente
fiecărei configurații posibile a variabilelor, se exprimă în forma canonică
disjunctivă (FCD), astfel:
FFCD(x1, x2, x3)=(F0P0)+(F1P1)+(F2P2)+(F3P3)+(F4P4)+(F5P5)+(F6P6)+(F7P7)
Pentru construirea termenilor de tip produs (Pk), aferenți unei funcții logice
exprimate în formă canonică disjunctivă (FCD), variabilele care au valoarea 0
(zero) se vor considera negate, iar variabilele care au valoarea 1 (unu) se
consideră ne-negate (Tabelul 2.2).
Exemplu: pentru configurația (0,0,1) a variabilelor de intrare (x1,x2,x3), termenul
standard de tip produs este P1, adică: 𝑥1 ∙ 𝑥2 ∙ 𝑥3 .
Scrierea unei funcții logice în formă canonică disjunctivă permite
simplificarea imediată, pe baza următoarelor proprietăți:
Pk  0 = 0, 0+1=1, 0+0=0.
Adică, oricare ar fi valoarea logică a termenului Pk, dacă Fk=0, rezultatul
expresiilor următoare nu depinde de Pk :
Pk  Fk + 1 = Pk 0 + 1 = 1;
Pk  Fk + 0 = Pk 0 + 0 = 0.
Așadar, în cazul utilizării formelor canonice disjunctive pentru exprimarea
funcțiilor logice, au importanță doar termenii care includ valori ale lui Fk diferite
de 0 (zero).
De reținut: În cazul exprimării funcțiilor logice prin intermediul FCD, se vor
considera doar termenii dezvoltării pentru care Fk este egal cu 1 (unu).

Exemplu: Fie funcția F(x1, x2 , x3 )  B2, x1 , x2, x3  B2, unde B2 = {0, 1}. Dacă
valorile funcției F sunt: F0=1,F1=0,F2=1,F3=0,F4=1,F5=0,F6=0,F7=1,atunci:
FFCD(x1,x2,x3)=(F0P0)+(F1P1)+(F2P2)+(F3P3)+(F4P4)+(F5P5)+(F6P6)+(F7P7)
=(1 P0)+(0 P1)+(1 P2)+(0 P3)+(1 P4)+(0 P5)+(0 P6)+(1 P7)
=(1 P0)+ 0 +(1 P2) + 0 +(1 P4)+ 0 + 0 +(1 P7)
=(1 P0)+(1 P2)+(1 P4)+(1 P7)= P0+P2+P4+P7
= 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3
= 𝑥2 ∙ 𝑥3 ∙ (𝑥1 +𝑥1 ) + 𝑥2 ∙ (𝑥1 ∙ 𝑥3 + 𝑥1 ∙ 𝑥3 )
= 𝑥2 ∙ 𝑥3 + 𝑥2 ∙ (𝑥1 ∙ 𝑥3 + 𝑥1 ∙ 𝑥3 )

27
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

O funcție logică de trei variabile, pentru care se cunosc valorile (Fk) aferente
fiecărei configurații posibile a variabilelor, se exprimă în forma canonică
conjunctivă (FCC), astfel:
FFCC(x1, x2, x3) =(F0+S0) (F1+S1) (F2+S2) (F3+S3) (F4+S4) (F5+S5) (F6+S6) (F7+S7)
Pentru construirea termenilor de tip sumă (Sk), aferenți unei funcții logice
exprimate în formă canonică conjunctivă (FCC), variabilele care au valoarea 0
(zero) se vor considera ne-negate, iar variabilele care au valoarea 1 (unu) se
consideră negate (Tabelul 2.2).
Exemplu: pentru configurația (0,1,1) a variabilelor de intrare (x1,x2,x3), termenul
standard de tip sumă este S3, adică: 𝑥1 + 𝑥2 + 𝑥3 .
Scrierea unei funcții logice în formă canonică conjunctivă permite
simplificarea imediată, în bază următoarelor proprietăți:
Sk+1= 1, 1 0 = 0, 1 1=1
Adică, oricare ar fi valoarea logică a termenului Sk, dacă Fk=1, rezultatul
expresiilor următoare nu depinde de Sk :
(Sk+ Fk ) 1 = (Sk+1) 1 = 1;
(Sk+ Fk ) 0 = (Sk+1 ) 0 = 0.
Așadar, în cazul utilizării formelor canonice conjunctive pentru exprimarea
funcțiilor logice, au importanță doar termenii care includ valori ale lui Fk diferite
de 1 (unu).
De reținut: În cazul exprimării funcțiilor logice prin intermediul FCC, se vor
considera doar termenii dezvoltării pentru care Fk este egal cu 0 (zero).

Exemplu: Fie funcția F(x1, x2 , x3 )  B2, x1 , x2, x3  B2, unde B2 = {0, 1}. Dacă
valorile funcției F sunt: F0=0,F1=1,F2=1,F3=0,F4=1,F5=1,F6=1,F7=0,atunci:
FFCC(x1,x2,x3)= (F0+S0) (F1+S1) (F2+S2) (F3+S3) (F4+S4) (F5+S5) (F6+S6) (F7+S7)
=(0+ S0)  (1+ S1)  (1+ S2)  (0+ S3)  (1+ S4)  (1+ S5) (1+ S6) (0+S7)
=(0+ S0)  1  1  (0+ S3)  1  1  1  (0+S7)
= (0+ S0) (0+ S3) (0+ S7) = S0 S3 S7
= (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 )

(conform teoremei idempotenței, x x = x, funcția este extinsă)

28
Cap.2 Elemente de logică booleană

= (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 ) ∙ (𝑥1 + 𝑥2 + 𝑥3 )

(se aplică teorema adiacenței pentru termenii subliniați)


= (𝑥1 + 𝑥3 ) ∙ (𝑥2 + 𝑥3 )
= 𝑥3 + 𝑥1 ∙ 𝑥2 (pe baza axiomei distributivității)

Așadar, plecând de la tabelul de adevăr aferent unei anumite funcții logice,


metoda de mai sus detaliază procedura de determinare a funcțiilor (exprimate în
formă canonică) care verifică tabelul de adevăr. Metoda permite atât identificarea
unei funcții care verifică tabelul de adevăr cât și exprimarea ei în formă
simplificată.

3. Diagrame Karnaugh
Diagramele Karnaugh1 sunt forme sintetice ale tabelelor de adevăr, care se
constituie în instrumente pentru minimizarea funcțiilor logice complexe.
Problema care trebuie să o rezolve o diagramă Karnaugh este următoarea: se
cunoaște rezultatul funcției și se cere determinarea acesteia în formă minimală.
O diagramă Karnaugh aferentă unei funcții booleene de n variabile se
reprezintă sub forma unui pătrat sau dreptunghi împărțit în 2n câmpuri. Fiecare
câmp este rezervat unui termen din reprezentarea funcției în formă canonică (fie
prin produse Pk , fie prin sume, Sk, unde k=0,1,2,..., 2n-1).
O diagramă Karnaugh este astfel dezvoltată încât oricare două câmpuri
(pătrate) vecine, pe linie sau pe coloană, diferă printr-o singură cifră binară. Două
câmpuri vecine ale căror termeni canonici diferă printr-o singură variabilă, se
numesc adiacente. Această proprietate trebuie să o aibă toate câmpurile
diagramei, inclusiv câmpurile extreme. Proprietatea de adiacență este foarte
importantă, ea condiționând minimizarea funcțiilor logice prin intermediul
diagramelor Karnaugh. Pentru interpretarea corectă a acestei proprietăți a
diagramelor Karnaugh se consideră că toate câmpurile aparțin unei suprafețe
închise. Astfel, câmpurile extreme vor fi vecine, două câte două, după coloanele
sau liniile diagramei.

1 Ele mai sunt denumite și diagrame Karnaugh–Veitch. Au fost descoperite în 1952 de Edward W.
Veitch și dezvoltate în 1953 de Maurice Karnaugh, fizician american, pentru simplificarea circuitelor
electronice.

29
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

O funcție booleană dată poate fi reprezentată prin intermediul diagramelor


Karnaugh utilizând exprimările în forme canonice disjunctive (FCD), reprezentând
produsele Pk în câmpurile diagramei, sau în forme canonice conjunctive (FCC),
reprezentând sumele Sk în câmpurile diagramei. Cele mai utilizate reprezentări
fiind realizate prin intermediul produselor, în continuare ne vom referi doar la
diagrame Karnaugh ce utilizează reprezentări ale funcțiilor în forme canonice
disjunctive.
Pentru a ne putea referi cu ușurință la câmpurile unei diagrame, acestea au
fost numerotate, astfel încât fiecare câmp are asociat numărul k aferent
termenului canonic Pk al funcției F.
În figurile 2.4, 2.5 și 2.6 sunt reprezentate diagramele Karnaugh aferente
funcțiilor logice de două, trei și patru variabile. Spre exemplu, în diagrama
aferentă funcției F(x1, x2, x3, x4), (Fig.2.6), câmpurile 0 și 2, 4 și 6, 12 și 14, 8 și 10,
sunt vecine după direcția coloanelor, respectiv câmpurile 0 și 8, 1 și 9, 3 și 11, 2 și
10, sunt vecine după direcția liniilor.

x1
F(x1, x2)
𝑥1 = 0 𝑥1 = 1
0 2
𝑥2 = 0
P0(0,0) P2(1,0)
x2 1 3
𝑥2 = 1
P1(0,1) P3(1,1)

Fig.2.4 Diagrama Karnaugh pentru o funcție de 2 variabile

x1 x2
F(x1, x2, x3)
00 01 11 10
0 2 6 4
0
P0(0,0,0) P2(0,1,0) P6(1,1,0) P4(1,0,0)
x3
1 3 7 5
1
P1(0,0,1) P3(0,1,1) P7(1,1,1) P5(1,0,1)

Fig.2.5 Diagrama Karnaugh pentru o funcție de 3 variabile

30
Cap.2 Elemente de logică booleană

x1 x2
F(x1, x2, x3, x4)
00 01 11 10
0 4 12 8
00
P0(0,0,0,0) P4(0,1,0,0) P12(1,1,0,0) P8(1,0,0,0)
1 5 13 9
01
P1(0,0,0,1) P5(0,1,0,1) P13(1,1,0,1) P9(1,0,0,1)
x3 x4
3 7 15 11
11
P3(0,0,1,1) P7(0,1,1,1) P15(1,1,1,1) P11(1,0,1,1)
2 6 14 10
10
P2(0,0,1,0) P6(0,1,1,0) P14(1,1,1,0) P10(1,0,1,0)

Fig.2.6 Diagrama Karnaugh pentru o funcție de 4 variabile

Aceste reprezentări permit determinarea funcției logice, în formă


minimizată, în baza unui set de reguli. Regulile se referă la gruparea câmpurilor
diagramei, respectiv la utilizarea grupurilor pentru extragerea funcției logice în
formă minimizată.
Pentru constituirea grupurilor aferente diagramelor Karnaugh, care
utilizează reprezentări ale funcțiilor în forme canonice disjunctive (FCD), se
definesc următoarele reguli:
 se numesc câmpuri vecine câmpurile care au o latură comună;
 într-o diagramă Karnaugh (în reprezentare FCD) prezintă interes doar
câmpurile cu valoarea 1, în multe reprezentări câmpurile cu valoarea 0
nefiind specificate în diagrame;
 câmpurile vecine (de valoare 1) se constituie în grupuri de 2R elemente
(unde R este număr natural). Aceste grupuri de 2R câmpuri poartă numele
de subcuburi, iar numărul R constituie ordinul subcubului. Astfel, două
câmpuri vecine constituie un subcub de ordinul 1 (Fig.2.7a). Prin gruparea a
4 câmpuri vecine se obține un subcub de ordinul 2 (Fig.2.7b). Se subînțelege
că numărul câmpurilor care pot fi grupate într-un subcub trebuie să fie: 1, 2,
4, 8, ..., 2R.

31
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

 Grupurile create pot include: 2 câmpuri vecine pe un rând sau coloană (2 x


1 sau 1 x 2); 4 câmpuri consecutive în linie pe un rând sau coloană (4 x 1 sau
1 x 4); 4 câmpuri vecine grupate într-un pătrat, pe două rânduri și două
coloane (2 x 2), 8 câmpuri vecine grupate în dreptunghiuri (4 x 2, 2 x 4).

x1 x2 x1
x3 00 01 11 10 x2 0 1
0 0 1 1 1 0 1 1

1 0 0 0 0 1 0 0
GREŞIT CORECT

Fig.2.7a Reguli de constituire a grupurilor


x1 x2 x1
x3 00 01 11 10 x2 0 1
0 1 1 1 1 0 1 1

1 0 0 0 1 1 1 1
GREŞIT CORECT

Fig.2.7b Câmpurile de valoare 0 nu fac parte din grupuri

 fiecare câmp de valoare 1 trebuie să fie inclus într-un grup, respectiv


câmpurile de valoare 0 nu trebuie incluse în niciun grup (Fig.2.7b, Fig.2.8);
x1 x1
x2 0 1 x2 0 1
0 0 0 0

1 1 1 1 1
GREŞIT CORECT

Fig.2.8 Grupurile se constituie doar din câmpuri de valoarea 1

 grupurile pot fi orizontale, verticale dar nu diagonale (Fig.2.9);

32
Cap.2 Elemente de logică booleană

x1 x1
x2 0 1 x2 0 1
0 0 0 0 0 1

1 1 1 1 1 1
GREŞIT CORECT

Fig.2.9 Grupurile leagă câmpuri pe orizontală sau verticală

 grupurile se constituie astfel încât fiecare dintre ele să includă un număr cât
mai mare de câmpuri și, simultan, să se obțină un număr cât mai mic de
grupuri, respectându-se toate regulile enunțate; unele câmpuri pot să facă
parte din mai multe grupuri, dacă acest lucru conduce la obținerea celui mai
mic număr de grupuri și/sau la constituirea unor grupuri mai mari (Fig.2.10);

x1 x2 x1 x2
x3 00 01 11 10 x3 00 01 11 10
0 1 1 1 1 0 1 1 1 1

1 0 0 1 1 1 0 0 1 1
GREŞIT CORECT

Fig.2.10 Identificarea numărului minim de grupuri

 câmpurile extreme sunt câmpuri vecine și pot constitui grupuri (Fig.2.11).


x1 x2
x3 00 01 11 10

0 1 1 1 1

1 1 1 1
CORECT

Fig.2.11 Câmpuri extreme vecine

33
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

4. Minimizarea funcțiilor logice


Plecând de la formele canonice de reprezentare, conjunctive sau
disjunctive, se pot obține reprezentările funcțiilor logice în forme simplificate. Prin
metode algebrice care utilizează axiomele și teoremele logicii booleene, acestea
pot fi aduse la o formă minimală. Funcția logică care nu mai poate fi simplificată
se numește forma elementară minimizată. Însă, prelucrările algebrice sunt de
multe ori greoaie și nu oferă garanția aducerii funcțiilor la o formă minimală.
Metodele grafice, bazate pe diagramele Karnaugh, permit simplificarea
funcțiilor logice plecând de la proprietatea de adiacență a câmpurilor vecine.
Astfel, prin constituirea de grupuri (subcuburi) între câmpurile vecine, pe baza
regulilor enunțate anterior, termenii aferenți acestora se reduc doi câte doi în
baza teoremei de adiacență, astfel încât, fiecare grup (subcub) va furniza un singur
termen pentru constituirea funcției logice. Termenul furnizat de fiecare grup este
un produs între variabilele funcției, variabile necomune tuturor câmpurilor unui
subcub (grup) reducându-se. Prin gruparea câmpurilor vecine în grupuri
(subcuburi) de ordinul R, se anulează R variabile, și anume, cele care apar negate
și ne-negate.
Așadar, fiecare grup produce un produs care participă la suma de produse
aferentă funcției logice. Respectarea regulilor de constituire a numărului minim
de grupuri (subcuburi) conduce la obținerea funcției logice în formă minimală,
forma elementară minimizată.
De reținut:
 Funcția logică asociată unei diagrame Karnaugh (în reprezentare FCD)
este egală suma termenilor aferenți grupurilor (subcuburilor) constituite,
unde termenul aferent unui grup (subcub) este egal cu produsul
variabilelor comune tuturor câmpurilor din grup (subcub).
 Într-o diagramă Karnaugh (în reprezentare FCD), în constituirea
termenilor reprezentării canonice, variabilele se consideră atât în formă
negată cât și ne-negată: 0 se asociază variabilei negate ( 𝒙 ), iar 1 se
asociază variabilei ne-negate ( 𝒙 ).
Exemplu: Pentru o funcție logică 𝐹(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ), figura 6,
termenul P0 este: 𝑃0 (0,0,0,0) = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4
termenul P7 este: 𝑃7 (0,1,1,1) = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4

34
Cap.2 Elemente de logică booleană

Considerând cazul simplu al diagramelor Karnaugh care includ un singur


grup (subcub de ordinul 1), funcțiile 𝐹(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) aferente diagramelor din
figura 2.12 (a, b și c), determinate în baza regulilor expuse mai sus, sunt:

𝑭𝒂 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟎 + 𝑷𝟒 = 𝒙𝟏 ∙ 𝒙𝟑 ∙ 𝒙𝟒
𝐹𝑎 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 = 𝑥1 ∙ 𝑥3 ∙ 𝑥4 ∙ (𝑥2 + 𝑥2 )
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță

= 𝑥1 ∙ 𝑥3 ∙ 𝑥4

𝑭𝒃 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟑 + 𝑷𝟏𝟏 = 𝒙𝟐 ∙ 𝒙𝟑 ∙ 𝒙𝟒
𝐹𝑏 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 = 𝑥2 ∙ 𝑥3 ∙ 𝑥4

𝑭𝒄 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟏𝟑 + 𝑷𝟏𝟓 = 𝒙𝟏 ∙ 𝒙𝟐 ∙ 𝒙𝟒


𝐹𝑐 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 = 𝑥1 ∙ 𝑥2 ∙ 𝑥4

În cazul subcuburilor de ordinul 1, obținute prin gruparea a 2 câmpuri, se


anulează o (una) variabilă.
x1x2 00 11 x1x2 00 11
x1x2 00 01 11 10
01 10 01 10 x3x4
x3x4 x3x4 0 4 12 8
0 4 12 8 0 4 12 8
00 1 1 0 0 00 0 0 0 0 00 0 0 0 0
1 5 13 9 1 5 13 9 1 5 13 9
01 0 0 0 0 01 0 0 0 0 01 0 0 1 0
3 7 15 11 3 7 15 11 3 7 15 11
11 0 0 0 0 11 1 0 0 1 11 0 0 1 0
2 6 14 10 2 6 14 10 2 6 14 10
10 0 0 0 0 10 0 0 0 0 10 0 0 0 0

a b c
Fig.2.12 Formarea subcuburilor de ordinul 1
Considerând cazul simplu al diagramelor Karnaugh care includ un singur
grup (subcub de ordinul 2), funcțiile 𝐹(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) aferente diagramelor din
figura 2.13 (a, b și c), determinate în baza regulilor expuse mai sus, sunt:

𝑭𝒂 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟎 + 𝑷𝟏 + 𝑷𝟒 + 𝑷𝟓 = 𝒙𝟏 ∙ 𝒙𝟑
𝐹𝑎 = ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță 𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță

= 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 = 𝑥1 ∙ 𝑥3
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță

35
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

𝑭𝒃 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟑 + 𝑷𝟕 + 𝑷𝟏𝟓 + 𝑷𝟏𝟏 = 𝒙𝟑 ∙ 𝒙𝟒


𝐹𝑏 = 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4

= 𝑥1 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4 = 𝑥3 ∙ 𝑥4

𝑭𝒄 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟎 + 𝑷𝟒 + 𝑷𝟐 + 𝑷𝟔 = 𝒙𝟏 ∙ 𝒙𝟒
𝐹𝑐 = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4
= 𝑥1 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4 = 𝑥1 ∙ 𝑥4

În cazul subcuburilor de ordinul 2, obținute prin gruparea a 4 câmpuri, se


anulează două variabile.

x1x2 00 01 11 10 x1x2 00 01 11 10 x1x2 00 01 11 10


x3x4 x3x4 x3x4
0 4 12 8 0 4 12 8 0 4 12 8
00 1 1 0 0 00 0 0 0 0 00 1 1 0 0
1 5 13 9 1 5 13 9 1 5 13 9
01 1 1 0 0 01 0 0 0 0 01 0 0 0 0
3 7 15 11 3 7 15 11 3 7 15 11
11 0 0 0 0 11 1 1 1 1 11 0 0 0 0
2 6 14 10 2 6 14 10 2 6 14 10
10 0 0 0 0 10 0 0 0 0 10 1 1 0 0

a b c
Fig.2.13 Formarea subcuburilor de ordinul 2

Subcub de ordinul 2 Subcub de ordinul 2 Subcub de ordinul 2


P0 --> 0 0 0 0 P3 --> 0 0 1 1 P0 --> 0 0 0 0
P1 --> 0 0 0 1 P7 --> 0 1 1 1 P4 --> 0 1 0 0
P4 --> 0 1 0 0 P15 --> 1 1 1 1 P2 --> 0 0 1 0
P5 --> 0 1 0 1 P11 --> 1 0 1 1 P6 --> 0 1 1 0
Fa --> 𝒙𝟏 ∙ 𝒙𝟑 Fb --> 𝒙𝟑 ∙ 𝒙𝟒 Fc --> 𝒙𝟏 ∙ 𝒙𝟒

Fig.2.14 Identificarea grafică a termenilor în formă


minimizată aferenți subcuburilor de ordinul 2

În figura 2.14 se detaliază modul de extragere a termenului aferent unui


subcub de ordinul 2, pentru o funcție de patru variabile. În baza teoremei de
adiacență toți termenii grupului care apar negați și ne-negați se reduc: în cazul
subcuburilor de ordinul 2, se reduc două variabile. Expresia aferentă subcubului

36
Cap.2 Elemente de logică booleană

(în acest caz) se reduce la un produs de două variabile, variabilele comune tuturor
câmpurilor subcubului.
Considerând cazul diagramelor Karnaugh care includ un singur grup (subcub
de ordinul 3), funcția 𝐹(𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) aferente diagramelor din figura 2.15 (a și b),
determinate în baza regulilor expuse mai sus, sunt:

x1x2 00 01 11 10 x1x2 00 01 11 10
x3x4 x3x4
0 4 12 8 0 4 12 8
00 0 0 0 0 00 0 0 1 1
1 5 13 9 1 5 13 9
01 1 1 1 1 01 0 0 1 1
3 7 15 11 3 7 15 11
11 1 1 1 1 11 0 0 1 1
2 6 14 10 2 6 14 10
10 0 0 0 0 10 0 0 1 1

a b
Fig.2.15 Formarea subcuburilor de ordinul 3

𝑭𝒂 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟏 + 𝑷𝟑 + 𝑷𝟓 + 𝑷𝟕 + 𝑷𝟏𝟑 + 𝑷𝟏𝟓 + 𝑷𝟗 + 𝑷𝟏𝟏 = 𝒙𝟒


𝐹𝑎 = 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥
⏟1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 +
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță 𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță
+⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 =
𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță 𝑠𝑒 𝑎𝑝𝑙𝑖𝑐ă 𝑡𝑒𝑜𝑟𝑒𝑚𝑎 𝑑𝑒 𝑎𝑑𝑖𝑎𝑐𝑒𝑛ță

= 𝑥1 ∙ 𝑥2 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥4
= 𝑥1 ∙ 𝑥4 + 𝑥1 ∙ 𝑥4 = 𝑥4

𝑭𝒃 (𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , 𝒙𝟒 ) = 𝑷𝟖 + 𝑷𝟗 + 𝑷𝟏𝟎 + 𝑷𝟏𝟏 + 𝑷𝟏𝟐 + 𝑷𝟏𝟑 + 𝑷𝟏𝟒 + 𝑷𝟏𝟓 = 𝒙𝟏


𝐹𝑏 = ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 +

+⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 =

= 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3
= 𝑥1 ∙ 𝑥2 + 𝑥1 ∙ 𝑥2 = 𝑥1

În figura 2.16 se detaliază modul de extragere a termenului aferent unui


subcub de ordinul 3, pentru o funcție de patru variabile. În baza teoremei de
adiacență toți termenii grupului care apar negați și ne-negați se reduc: în cazul
subcuburilor de ordinul 3, se reduc trei variabile. Expresia aferentă subcubului (în

37
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

acest caz) se reduce la o singură variabilă, variabila comună tuturor câmpurilor


subcubului.

Subcub de ordinul 3 Subcub de ordinul 3


P1 --> 0 0 0 1 P8 --> 1 0 0 0
P3 --> 0 0 1 1 P9 --> 1 0 0 1
P5 --> 0 1 0 1 P10 --> 1 0 1 0
P7 --> 0 1 1 1 P11 --> 1 0 1 1
P13 --> 1 1 0 1 P12 --> 1 1 0 0
P15 --> 1 1 1 1 P13 --> 1 1 0 1
P9 --> 1 0 0 1 P14 --> 1 1 1 0
P11 --> 1 0 1 1 P15 --> 1 1 1 1
Fa --> 𝒙𝟒 Fb --> 𝒙𝟏

Fig.2.16 Identificarea grafică a termenilor în formă


minimizată aferenți subcuburilor de ordinul 3

Dacă o diagramă Karnaugh include mai multe grupuri (subcuburi), funcția


logică asociată diagramei este egală cu suma termenilor aferenți grupurilor
(subcuburilor) constituite.
Fie funcția F(x1, x2, x3, x4)  B2, x1, x2, x3, x4  B2, unde B2= {0, 1}. În
diagrama din figura 2.17 pot fi identificate două soluții echivalente de grupare a
câmpurilor, fiecare soluție implicând un număr minim de trei subcuburi:
subcuburile marcate cu linie continuă, la care se adaugă oricare din subcuburile
marcate cu linie întreruptă.
x1x2 00 01 11 10
x3x4
0 4 12 8
00 0 0 1 1 x1x3
1 5 13 9
01 0 0 1 1
3 7 15 11
11 1 1 1 0 x1x2x4
2 6 14 10
10 0 0 0 0

x1x3x4 x2x3x4

Fig.2.17 Identificarea grafică a subcuburilor și a termenilor funcției logice

38
Cap.2 Elemente de logică booleană

Cele două soluții echivalente conduc la obținerea următoarelor funcții:


𝐹1 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥1 ∙ 𝑥3 + 𝑥1 ∙ 𝑥2 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4
𝐹2 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥1 ∙ 𝑥3 + 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4
Pentru verificarea echivalenței celor două soluții obținute se construiește
tabelul de adevăr asociat funcțiilor F1 și F2 . În conformitate cu rezultatele obținute
(Tabelul 2.3) se confirmă că cele două funcții sunt echivalente și conduc la aceleași
rezultate pentru orice configurație a variabilelor de intrare.
Tabelul 2.3 Tabelul de adevăr și termenii intermediari aferenți funcțiilor F1 și F2 .
𝑥1 𝑥2 𝑥3 𝑥4 𝑥1 ∙ 𝑥3 𝑥1 ∙ 𝑥2 ∙ 𝑥4 𝑥1 ∙ 𝑥3 ∙ 𝑥4 𝑥2 ∙ 𝑥3 ∙ 𝑥4 F1 F2
0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 1 1 0 0 1 0 1 1
0 1 0 0 0 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0
0 1 1 1 0 0 1 1 1 1
1 0 0 0 1 0 0 0 1 1
1 0 0 1 1 0 0 0 1 1
1 0 1 0 0 0 0 0 0 0
1 0 1 1 0 0 0 0 0 0
1 1 0 0 1 0 0 0 1 1
1 1 0 1 1 1 0 0 1 1
1 1 1 0 0 0 0 0 0 0
1 1 1 1 0 1 0 1 1 1

Orice altă soluție de grupare a câmpurilor diagramei din figura 2.17 ar


conduce la obținerea unor funcții logice echivalente, însă exprimate într-o formă
mai complexă în comparație cu funcțiile F1 și F2.

39
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

În figura 2.18 se consideră alte două exemple în care subcuburile sunt


constituite corect, respectând regula ca fiecare subcub să fie alcătuit dintr-un
număr cât mai mare de câmpuri, respectiv să se obțină cât mai puține subcuburi.

x1x2 00 01 11 10 x1x2 00 01 11 10
x3x4 x3x4
0 4 12 8 0 4 12 8
00 0 1 1 0 x2x3 00 1 1 0 1 x2
1 5 13 9 1 5 13 9
01 1 1 1 1 01 1 0 0 1
3 7 15 11 x4 3 7 15 11
11 1 1 1 1 11 1 0 1 1
2 6 14 10 2 6 14 10
10 0 1 0 0 10 1 1 0 1
x1x2 x1x4 x1x3x4

a b
Fig.2.18 Identificarea grafică a subcuburilor și a termenilor funcțiilor logice
Funcțiile logice în formă minimizată, asociate diagramelor din figura 2.18,
sunt:
𝐹𝑎 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥2 ∙ 𝑥3 + 𝑥4 + 𝑥1 ∙ 𝑥2
𝐹𝑏 (𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ) = 𝑥2 + 𝑥1 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4
Orice alte soluții de grupare a câmpurilor diagramelor din figura 2.18 ar
conduce la obținerea unor funcții logice echivalente, însă exprimate într-o formă
mai complexă în comparație cu funcțiile Fa și Fb .
Folosirea diagramelor Karnaugh pentru funcții cu mai mult de 4 variabile,
necesită construirea de diagrame suplimentare, respectiv definirea de reguli de
corespondență între diagrame pentru constituirea subcuburilor: pentru 5 variabile
de intrare sunt necesare două diagrame Karnaugh, fiecare cu 16 câmpuri; pentru
6 variabile sunt necesare 4 diagrame, fiecare cu câte 16 câmpuri.
Diagramele Karnaugh pot fi reprezentate și prin intermediul termenilor
funcțiilor canonice conjunctive (FCC). În această situație procedura de extragere a
funcției minimizate este similară, cu observația că subcuburile se vor constitui pe
baza zerourilor din diagrame.

40
Cap.2 Elemente de logică booleană

5. Sisteme logice combinaționale


Majoritatea aplicațiilor industriale sunt de tip secvențial, ele putând fi
structurate în etape și condiții de trecere succesivă de la o etapă la alta. Există însă
o clasă aparte de aplicații, numite combinaționale, unde ieșirile sistemului depind
exclusiv de starea sau valoarea intrărilor, respectiv nu depind de succesiunea în
timp a valorilor intrărilor. În cazul acestora, fiecare ieșire a sistemului poate fi
exprimată printr-o funcție logică ce depinde doar de intrări.
Problema principală în elaborarea algoritmilor aferenți aplicațiilor de tip
combinațional constă în determinarea funcțiilor logice aferente ieșirilor
sistemului. Aceste funcții logice trebuie determinate: pentru multe situații
determinarea este simplă/imediată, însă cazurile mai complexe necesită utilizarea
metodelor de determinare, simplificare sau minimizare a funcțiilor logice (tabele
de adevăr, forme canonice și diagrame Karnaugh).
Forma minimizată de reprezentare a funcțiilor logice este obligatorie în
cazul implementării acestora prin componente hardware (porți logice). În cazul
controlerelor programabile (PLC-urilor) primează determinarea funcțiilor logice,
exprimarea lor în formă minimizată este opțională, compactizarea extremă a
algoritmilor fiind importantă doar în situații speciale.
În continuare se exemplifică utilitatea instrumentelor prezente mai sus în
proiectarea algoritmilor de control aferenți sistemelor combinaționale.
Formularea cerințelor (specificației) pentru realizarea unei aplicații industriale de
control poate fi făcută în forme diverse: descriere textuală, tabele de adevăr,
diagrame funcționale/ciclograme, diagrame secvențiale, grafuri standardizate
(GRAFCET).

Aplicația 2.1
Sistemul de alimentare cu piese al unei instalații trebuie să funcționeze în
următoarele condiții:
 să nu pornească dacă presiunea în sistem este mai mare decât cea
prestabilită (P = 1);
 să pornească dacă senzorii S1 și S2 sunt activi (S1=1; S2=1);
 să pornească dacă numărătorul N a numărat 10 piese (N=1).

Se cere să se determine funcția logică în formă minimizată care trebuie


implementată într-un automat programabil (PLC) pentru a porni sistemul de
alimentare în condițiile enunțate mai sus.

41
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Analizând condițiile de funcționare descrise în enunțul aplicației se observă


că funcția logică (FSTART), asociată ieșirii care asigură pornirea sistemului de
alimentare, depinde doar de variabilele de intrare, independent de timp. Așadar
sistemul de control aferent alimentatorului este unul de tip combinațional. Pentru
determinarea funcției logice FSTART care verifică cerințele aplicației, se parcurg
următoarele etape:
1. Construirea tabelului de adevăr în formă extinsă (Tabelul 2.4)
Pe baza enunțului se construiește tabelul de adevăr incluzând termenii
standard de tip sumă și produs. Senzorilor S1, S2 , P și N li se asociază variabilele de
intrare x1, x2, x3 și x4. Funcția FSTART se reprezintă prin componentele sale FK.
Tabelul 2.4 Tabelul de adevăr în formă extinsă aferent funcției FSTART
𝑥1 𝑥2 𝑥3 𝑥4 Termenii standard de Termenii standard de FSTART
tip sumă (Sk) tip produs (Pk) (FK)
0 0 0 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S0 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P0 0
0 0 0 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S1 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P1 1
0 0 1 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S2 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P2 0
0 0 1 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S3 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P3 0
0 1 0 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S4 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P4 0
0 1 0 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S5 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P5 1
0 1 1 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S6 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P6 0
0 1 1 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S7 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P7 0
1 0 0 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S8 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P8 0
1 0 0 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S9 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P9 1
1 0 1 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S10 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P10 0
1 0 1 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S11 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P11 0
1 1 0 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S12 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P12 1
1 1 0 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S13 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P13 1
1 1 1 0 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S14 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P14 0
1 1 1 1 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 S15 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 P15 0

42
Cap.2 Elemente de logică booleană

2. Determinarea funcției logice


Utilizând tabelul de adevăr în formă extinsă se poate determina funcția
logică FSTART care verifică cerințele aplicației, prin intermediul reprezentărilor
canonice (metodă algebrică) sau utilizând diagramele Karnaugh (metodă grafică).
a. Determinarea funcției logice prin intermediul reprezentărilor canonice
Pentru reprezentarea unei funcții logice în formă canonică există două
opțiuni echivalente: reprezentarea în formă canonică disjunctivă (FCD) și în formă
canonică conjunctivă (FCC). Pe baza tabelului de adevăr în formă extinsă (Tabelul
2.4) cele două forme de reprezentare canonică sunt:
FSTART = FFCD = (F0P0) + (F1P1) + (F2P2) + (F3P3) + (F4P4) + (F5P5) + (F6P6) + (F7P7) +
(F8P8)+(F9P9) + (F10P10) + (F11P11) + (F12P12) + (F13P13) + (F14P14) + (F15P15)
FSTART = FFCC = (F0+S0) (F1+S1) (F2+S2) (F3+S3) (F4+S4) (F5+S5) (F6+S6) (F7+S7)
(F8+S8) (F9+S9) (F10+S10) (F11+S11) (F12+S12) (F13+S13) (F14+S14) (F15+S15)
Pentru că cele două forme de reprezentare sunt echivalente și pentru că, în
cazul de față, reprezentarea disjunctivă are mai puțini termeni decât cea
conjunctivă, determinarea funcției logice FSTART se face prin intermediul
reprezentării canonice în formă disjunctivă (sumă de produse), FFCD.

FFCD = (F0P0) + (F1P1) + (F2P2) + (F3P3) + (F4P4) + (F5P5) + (F6P6) + (F7P7) + (F8P8)+
(F9P9) + (F10P10) + (F11P11) + (F12P12) + (F13P13) + (F14P14) + (F15P15)
= (0P0) + (1P1) + (0P2) + (0P3) + (0P4) + (1P5) + (0P6) + (0P7) + (0P8)+
(1P9) + (0P10) + (0P11) + (1P12) + (1P13) + (0P14) + (0P15)
= P1 + P5 +P9 + P12 + P13
= 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 +
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4

Conform teoremei idempotenței (x + x = x) funcția este extinsă cu încă un


termen (P13 = P13 +P13), iar termenii subliniați se reduc doi câte doi prin teorema
de adiacență:
𝐹𝐹𝐶𝐷 = 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + ⏟
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 +
𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 ∙ 𝑥4

= 𝑥1 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3 = 𝑥3 ∙ 𝑥4 + 𝑥1 ∙ 𝑥2 ∙ 𝑥3

= 𝑥3 (𝑥4 + 𝑥1 ∙ 𝑥2 )

43
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

sau, revenind la notațiile inițiale:


𝐹𝑆𝑇𝐴𝑅𝑇 (𝑆1 , 𝑆2 , 𝑃, 𝑁) = 𝑃 ∙ (𝑁 + 𝑆1 ∙ 𝑆2 )

b. Determinarea funcției logice prin intermediul diagramelor Karnaugh


Pentru determinarea funcției logice care asigură funcționalitatea impusă
aplicației se parcurg următoarele etape:
 Se construiește diagrama Karnaugh asociată. În funcție de modul de alegere
al variabilelor de intrare se pot obține mai multe forme de reprezentare a
acesteia, însă toate trebuie să conducă la același rezultat. Așadar este
suficient să se construiască o singură diagramă din care să se extragă
funcția logică. În figura 2.19 sunt construite două diagrame, pentru
exemplificare.
 Pentru diagrama Karnaugh se identifică subcuburile formate în baza
regulilor de constituire a acestora. Se obțin două subcuburi, unul de ordinul
unu și unul de ordinul doi.
 Se extrage funcția logice aferentă diagramei. Funcția logică asociată unei
diagrame Karnaugh (în reprezentare FCD) este egală suma termenilor
aferenți subcuburilor constituite, unde termenul aferent unui subcub este
egal cu produsul variabilelor comune tuturor câmpurilor din subcub.
Pentru ambele diagrame se obține următoarea funcție logică:
𝐹𝑆𝑇𝐴𝑅𝑇 (𝑆1 , 𝑆2 , 𝑃, 𝑁) = 𝑃 ∙ 𝑁 + 𝑃 ∙ 𝑆1 ∙ 𝑆2 = 𝑃 ∙ (𝑁 + 𝑆1 ∙ 𝑆2 )

S1S2 S1N
00 01 11 10 00 01 11 10
PN S2P
0 4 12 8 0 4 12 8
00 0 0 1 0 00 0 1 1 0
PS1S2 PN
1 5 13 9 1 5 13 9
01 1 1 1 1 01 0 0 0 0
PN
3 7 15 11 3 7 15 11
11 0 0 0 0 11 0 0 0 0
2 6 14 10 2 6 14 10
10 0 0 0 0 10 0 1 1 1
PS1S2
a b
Fig.2.19 Aplicația 2.1. Determinarea grafică a termenilor funcției FSTART
pentru diferite moduri de construire a diagramei Karnaugh

44
Cap.2 Elemente de logică booleană

Funcția FSTART identificată asigură pornirea sistemului de alimentare în


condițiile specificate în enunțul aplicației. Indiferent de metoda utilizată
rezultatele trebuie să fie echivalente, adică funcțiile obținute - chiar dacă sunt
diferite - trebuie să returneze aceleași valori. În cazul de față s-a obținut aceeași
funcție logică prin ambele metode. Implementarea acesteia pe un automat
programabil (PLC) necesită cunoașterea și utilizarea unui limbaj de programare.
Particularitățile privind implementarea algoritmilor de control utilizând un anumit
limbaj de programare sunt descrise în capitolele următoare.

45
Cap.3 Elemente de programare a
controlerelor industriale

1. Variabile. Tipuri de date


2. Organizarea și adresarea memoriei
3. Structura programelor
4. Funcții bloc standard
4.1 Blocuri bistabile
4.2 Detectoare de front
4.3 Temporizatoare
4.4 Numărătoare

Limbajele de programare implică utilizarea de variabile, date,


operanzi, operatori, instrucțiuni, funcții, pentru apelarea și controlul
resurselor hardware. Oricărei variabile trebuie să i se asocieze un tip de
dată și o zonă de reprezentare în memorie. Funcțiile operează cu
variabile, returnează valori, comunică cu alte funcții prin intermediul
interfețelor. Programele apelează funcții pentru realizarea unor operații
specifice. Programarea unui PLC necesită cunoașterea acestor noțiuni,
respectiv a tehnicilor de operare cu acestea. În cadrul acestui capitol sunt
prezentate aceste elemente prin raportare la standardul IEC 61131-3 care
detaliază specificațiile limbajelor de programare aferente controlerelor
industriale de tip PLC.

46
Cap.3 Elemente de programare a controlerelor industriale

1. Variabile. Tipuri de date


Variabile. În general un program (aplicație PLC) vizează implementarea unui
anumit mod de funcționare unui sistem sau proces. Pentru a realiza acest lucru
este necesar ca PLC-ul să aibă acces la toate resursele sistemului controlat pentru
interogare, operare și modificare ieșiri în acord cu obiectivul urmărit. Sistemul de
control accesează și controlează resursele externe prin intermediul interfețelor de
intrare și de ieșire, însă operează și cu resursele interne pentru accesarea
memoriei, comunicare, conversii, etc. Toate aceste componente, referite generic
prin resursele sistemului, operează fizic cu semnale electrice. PLC-ul accesează și
operează cu aceste semnale fizice, reprezentate intern în format numeric, prin
intermediul variabilelor sau operanzilor.
În acest context, variabilele sunt identificatori ai resurselor sistemului
(intrări, ieșiri, memorii) care pot fi interogate și manipulate prin intermediul
operatorilor, instrucțiunilor, funcțiilor etc.
Operand versus variabilă. În programarea convențională a PLC-urilor
(DIN 19239) accesarea directă a memoriei se face prin intermediul operanzilor
(exemplu: IW2.1, adresă intrare logică; M2.5, adresă bit de memorie). Prin
intermediul operanzilor simbolici, nume simbolice asociate operanzilor absoluți,
pot fi accesate și manipulate aceleași resurse însă fără a se apela la adresa
hardware. Standardul IEC 61131-3 împrumută oarecum terminologia specifică
limbajelor de programare de nivel înalt și introduce noțiunea de variabilă ca
substitut al operandului [15]. Totuși, unele limbajele standardizate operează cu
operanzi, altele cu variabile.
Resursele unui sistem sunt reprezentate în memorie pentru a putea fi
interogate și manipulate cu ușurință. Astfel, intrările și ieșirile sunt apelate și
manipulate prin variabile de intrare și ieșire. Variabilele aferente intrărilor se
actualizează periodic în memorie (în zona aferentă imaginii de proces a intrărilor).
Frecvența de actualizare este suficient de mare încât să nu fie afectată dinamica
procesului de control pentru aplicațiile industriale convenționale1 (aproximativ
100 Hz). Între două secvențe de actualizare a memoriei se execută instrucțiunile
aferente programului utilizator, se operează asupra variabilelor interne și de ieșire
modificând valorile acestora în memorie. La sfârșitul ciclului programului se

1
Pentru aplicațiile industriale rapide și ultrarapide frecvența ciclului de procesare trebuie mărită, fie
prin utilizarea unei tehnologii de control mai rapide (ex. Simotion versus Simatic), fie prin rularea
aplicației la frecvențe diferite: funcțiile aferente componentei rapide a unui proces sunt procesate la
o frecvență mai mare decât frecvența la care rulează programul principal (funcția main).

47
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

actualizează ieșirile fizice cu semnalele aferente valorilor extrase din memorie (din
zona aferentă imaginii de proces a ieșirilor). Acest mod de lucru asigură citirea
ciclică și simultană a semnalelor de intrare, actualizarea ciclică și simultană a
ieșirilor PLC-ului, totul la o frecvență fixă, prestabilită.
Declararea variabilelor. Înainte de scrierea programului trebuie definite
variabilele. Acest proces diferă funcție de implementare și de limbajul utilizat, însă
orice variabilă trebuie să fie identificabilă (direct sau simbolic), respectiv trebuie
să aibă un tip de dată asociat. Într-un limbaj textual, în conformitate cu
specificațiile IEC61131-3, definirea unei variabile implică următoarea structură
declarativă:
Tipul variabilei

Atributul variabilei
Identificator (nume)

VAR RETAIN Valoare initializare


Senzor_A : BOOL;
Eroare : REAL := 0;
END_VAR
Tipul de data asociat
Sfarsitul declaratiei

Fig.3.1 Declararea variabilelor


Modul de declarare din figura 3.1 nu precizează zona de memorie vizată de
cele două variabile Senzor_A și Eroare și ca atare alocarea de memorie se face
automat printr-un mecanism intern. Dacă se dorește specificarea zonei de
memorie, atunci în declararea variabilelor se utilizează instrucțiunea AT ce
introduce locația fizică aferentă variabilelor (QW0, IB3, QW2), precedată de
simbolul % (conform IEC 61131-3). Variabile declarate pot fi apelate direct, prin
adresa hardware (QW0, IB3, QW2), sau simbolic, prin identificatorul variabilei
(M1, Out2). Valoarea de inițializare și atributul pot să lipsească.
VAR
M1 AT % QW0 : WORD := 16#FF00;
AT % IB3 : BYTE;
Out2 AT % QW2 : WORD;
END_VAR

Tipul și atributele variabilelor în conformitate cu IEC 61131-3 sunt


specificate în tabelele 3.1 și 3.2.

48
Cap.3 Elemente de programare a controlerelor industriale

Tabelul 3.1 Tipul variabilelor (conform IEC 61131-3)


VAR variabilă internă - aferentă unei entități de tip program, funcție,
funcție bloc, etc.
VAR_INPUT variabilă de intrare - preluată din exterior și care nu poate fi
modificată
VAR_OUTPUT variabilă de ieșire - produsă de o funcție și pusă la dispoziția altor
entități externe
VAR_IN_OUT variabilă intrare-ieșire - preluată din exterior dar care poate fi
modificată și pusă la dispoziția altor entități externe
VAR_EXTERNAL variabilă externă - poate prelua o variabilă din exteriorul entității,
definită ca VAR_GLOBAL
VAR_GLOBAL variabilă globală - poate fi utilizată de orice entitate dacă este
redeclarată ca VAR_EXTERNAL
VAR_ACCESS variabilă care poate fi accesată din exterior utilizând calea de acces
definită în declararea ei
VAR_TEMP variabilă temporară - se reinițializează la fiecare execuție a entității
în care a fost definită
VAR_CONFIG variabile ce sunt asignate unor resurse fără specificarea adresei lor

Tabelul 3.2 Atributele variabilelor (conform IEC 61131-3)


RETAIN memorează valoarea curentă și după căderea tensiunii
NON_RETAIN nu memorează valoarea curentă la căderea tensiunii
PROTECTED poate fi accesată doar de entitatea în care a fost declarată și de
derivatele acesteia
PUBLIC permite accesarea de către alte entități
PRIVATE poate fi accesată doar din interiorul entității în care a fost declarată
CONSTANT constantă – valoarea ei nu poate fi modificată

Tipuri de date. Fiecărei variabile declarate trebuie să i se asocieze un


anumit tip de dată compatibil cu informația necesară a fi prelucrată. În
conformitate cu IEC 61131-3 [31] există trei categorii de date:
 elementare – includ date convenționale de tipul șiruri de biți, întregi cu sau
fără semn, reale, dată/timp, șiruri de caractere;
 generice - utilizate de producători pentru specificarea variabilelor de
intrare și de ieșire ale funcțiilor;
 definite de utilizator (derivate) – definite cu scopul de a obține un cod mai
structurat (ENUMERATION, ARRAY, STRUCT).

În tabelul 3.3 sunt descrise principale tipuri de date elementare, numărul de


biți utilizați în reprezentare și domeniul de valori asociat.

49
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Tabelul 3.3 Tipuri de date elementare (IEC 61131-3)


Categorie de Tipul de Descriere Dimensiune Domeniu de valori
date dată (biți)
Șiruri de biți BOOL boolean 1 [0, 1]
BYTE șir de 8 biți 8 [0, 255]
WORD șir de 16 biți 16 [0, 65535]
DWORD șir de 32 biți 32 [0, 232-1]
LWORD șir de 64 biți 64 [0, 264-1]
Numere SINT întreg scurt 8 [-128, 127]
întregi cu
INT întreg 16 [-32768, 32767]
sau fără
semn DINT întreg dublu 32 [-231, 231-1]
LINT întreg lung 64 [-263, 263-1]
USINT întreg scurt fără 8 [0, 255]
semn
UINT întreg fără semn 16 [0, 65535]
UDINT întreg dublu 32 [0, 232-1]
fără semn
ULINT întreg lung fără 64 [0, 264-1]
semn
Numere REAL nr.reale 32 ±1.175 495e-38,
reale ±3.402823e+38
LREAL nr.reale lungi 64 -
Dată și timp DATE dată depinde de exemplu:
implementare d#2017-01-10
TOD timp orar depinde de exemplu:
(time of day) implementare tod#09:20:05
DT dată și timp orar depinde de exemplu: dt#2017-
implementare 01-10-09:20:05
Durată și TIME durată (timp) 64 exemplu: t#50s
șiruri de
STRING șir de caractere 8 -
caractere
WSTRING șir de caractere 16 -

50
Cap.3 Elemente de programare a controlerelor industriale

În cadrul fiecărui limbaj sunt predefinite liste de operatori, instrucțiuni și


funcții, care definesc instrumentele specifice ale unui anumit limbaj.
Operatorii sunt elemente specifice de limbaj asociate operațiilor
fundamentale ce pot efectuate asupra variabilelor (operanzilor): adunare,
scădere, înmulțire, împărțire, compare, transformare, conversie, manipulare etc.
Instrucțiunile sunt elemente specifice de limbaj (cuvinte-cheie) asociate
prelucrărilor speciale ale operanzilor (variabilelor), de tipul: asignare valoare,
apelare funcții, selecție condiții, iterare variabile, bucle de execuție condiționate
etc.
Funcțiile sunt elemente specifice de limbaj care asigură prelucrarea
operanzilor la un nivel superior. Ele utilizează operatori și instrucțiuni în diferite
structuri, scheme și legături logice, permițând prelucrări specifice de tipul: citiri,
scrieri, calcul, sincronizare, interogare, numărare, temporizare, structurare etc.
Funcțiile sunt dezvoltate de producător (numite funcții sistem) sau de utilizator
(numite simplu funcții). Utilizatorul poate să-și construiască propriile funcții
pentru prelucrările pe care le consideră utile și pentru structurarea aplicațiilor.
Limbajele de programare operează cu aceste elemente – variabile,
operanzi, operatori, instrucțiuni, funcții - numărul, tipul, modul de definire și de
utilizare al acestora în cadrul unui program fiind specifice fiecărui limbaj în parte.

2. Organizarea și adresarea memoriei


Din punct de vedere al modului de utilizare memoria PLC-urilor este
organizată în două substructuri: memoria de date și memoria program [5].
Memoria de date stochează tabelele imagine de proces ale intrărilor și
ieșirilor, variabilele predefinite aferente temporizatoarelor și numărătoarelor,
variabilele definite de utilizator, variabile aferente funcțiilor matematice,
rezultatele operațiilor logice etc. Memoria program (logică) este utilizată pentru
stocarea programului utilizator.
Stocarea acestor date (informații) se face sub formă binară prin intermediul
circuitelor electronice integrate. Cea mai mică structură de date care poate fi
înregistrată și apelată poartă numele de BIT (BInary digiT), iar valoarea acesteia
poate fi 0 sau 1. O succesiune de 8 biți poartă numele de BYTE (octet). O
succesiune de 16 biți (sau de doi octeți) poartă numele de WORD (cuvânt), iar o
succesiune de 2 cuvinte (sau 4 octeți) poartă numele de DWORD (dublu-cuvânt).

51
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Memoria PLC-urilor este organizată în astfel de mulțimi ordonate de biți, respectiv


poate fi scrisă și citită la nivel de bit, byte, word etc.
În scopul asigurării unui anumit mod de funcționare unui proces, informația
necesară este preluată din proces prin intermediul canalelor de intrare, prelucrată
prin intermediul unui program la nivelul PLC-ului, iar apoi rezultatele acestor
prelucrări sunt transmise din nou procesului prin intermediul canalelor de ieșire.
Toate aceste informații (semnale electrice d.p.d.v. fizic) de intrare, interne, de
ieșire, sunt asociate generic cu noțiunea de variabilă. Astfel, discutăm de variabile
de intrare, variabile de ieșire, variabile interne, toate asociate unor semnale sau
informații de intrare, interne și de ieșire.
Informația cu care operează un PLC depinde de caracteristicile procesului
controlat și de modul de preluare al acesteia (adică de tipul canalelor de intrare și
de ieșire). Astfel variabilele unui proces diferă la nivel structural funcție de tipul
informației prelucrate. Fiecărei variabile definite de utilizator trebuie să i se
asocieze un anumit tip de dată compatibil cu informația necesară a fi prelucrată.
Tipurile de date uzuale, specifice aplicațiilor industriale dezvoltate pe PLC-uri,
sunt: boolean (BOOL), octet (BYTE), cuvânt (WORD), dublu-cuvânt (DWORD),
întreg (INT), dublu-întreg (DINT), real (REAL), timp (TIME), caracter (CHAR), șir de
caractere (STRING), mulțime (ARRAY), structură (STRUCT).
Valorile aferente variabilelor sunt stocate în memoria de date, astfel că pe
parcursul rulării unui program variabilele definite de utilizator pot fi accesate,
manipulate și modificate în concordanță cu procesul controlat. Pentru
exemplificare se consideră cazul simplu al aprinderii unei lămpi L atât timp cât
este apăsat un buton B (Fig.3.2). Programul aferent acestei sarcini trebuie să
stabilească o legătura univocă între două variabile: o variabilă de intrare asociată
butonul B (conectat la canalul de intrare nr.1) și o variabilă de ieșire asociată
lămpii L (conectată la canalul de ieșire nr.6 al modulului de ieșire).
Cele două module de intrare și ieșire utilizate sunt prevăzute cu câte 8
canale logice (8 intrări și 8 ieșiri) care sunt reprezentate în memorie prin
intermediul unui octet aferent fiecărui modul. Considerând că în procesul de
configurare al aplicației acestor resurse li s-au alocat zone de memorie aferente
primului octet al tabelei imagine a intrărilor (IB0), respectiv primului octet al
tabelei imagine a ieșirilor (QB0), atunci starea fiecărei intrări și ieșiri este
reprezentată printr-un bit de memorie astfel: intrării cu numărul 0 îi corespunde
bitul I0.0, intrării cu numărul 1 îi corespunde bitul I0.1 și, în general, intrării cu
numărul n îi corespunde bitul I0.n, unde nϵ[0;7], respectiv ieșirii cu numărul 0 îi
corespunde bitul Q0.0 și, în general, ieșirii cu numărul n îi corespunde bitul Q0.n,
unde nϵ[0;7], vezi figura 3.2.

52
Cap.3 Elemente de programare a controlerelor industriale

PLC
Modul Modul
intrare PROGRAM iesire
24V 8DI I0.1 Q0.6 8DO 0V

B 0 0
1 1
Memorie – Imagine
2 de proces Intrari 2
7 6 5 4 3 2 1 0
3 0 0 0 0 0 0 1 0 IB0 3
0 0 0 0 0 0 0 0 IB1
4 4
5 Memorie – Imagine 5
de proces Iesiri L
6 7 6 5 4 3 2 1 0 6
0 1 0 0 0 0 0 0 QB0
7 0 0 0 0 0 0 0 0 QB1 7

Fig.3.2 Reprezentarea în memorie a variabilelor de intrare și ieșire

Programul rulează ciclic la o frecvență prestabilită (ex. 100 Hz). La începutul


fiecărui ciclu starea intrării cu nr. 0 (la care este conectat butonul B) este
reprezentată în memorie la adresa I0.0. În timpul rulării programului variabila de
intrare este citită din memorie (de la adresa I0.0), iar variabila de ieșire este
actualizată tot în memorie (la adresa Q0.6). La sfârșitul fiecărui ciclu de rulare al
programului, ieșirea fizică nr. 6 se actualizează cu valoarea aferentă variabilei de
ieșire (preluată de la adresa Q0.6).
Așadar programele utilizează informații (variabile) preluate din memorie iar
rezultatele obținute (variabile) sunt depuse tot în memorie și abia apoi transmise
spre ieșirile fizice. Actualizarea memoriei imagine de proces se realizează la o
frecvența prestabilită, aceeași frecvență la care rulează ciclic programul aplicației.
Unitatea fundamentală a memoriei este bit-ul și orice mod de organizare al
acesteia se bazează pe această entitate. În general, organizarea internă a
memoriei de date se face la nivel de byte sau de word, apărând totuși diferențe
de la producător la producător. Pentru PLC-urile din familia Simatic S7, Siemens,
[16] organizarea și adresarea memoriei se face la nivel de byte (Fig.3.3).

53
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

7 6 5 4 3 2 1 0
MB0 1 1 1 0 0 0 0 0
7 6 5 4 3 2 1 0 MW0 (MB0,MB1)
MB1 0 0 0 0 0 1 0 1
7 6 5 4 3 2 1 0 MD0 (MB0,MB1,MB2,MB3)
MB2 0 1 1 0 0 0 0 0
7 6 5 4 3 2 1 0 MW2 (MB2,MB3)
MB3 0 0 0 0 1 1 1 0

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MW0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1

MB0 MB1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MW1 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0

MB1 MB2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MW2 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0

MB2 MB3
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MD0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0

MB0 MB1 MB2 MB3


31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MD1 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0

MB1 MB2 MB3 MB4


31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MD2 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0

MB2 MB3 MB4 MB5

Fig.3.3 Adresarea memoriei (S7-300)

Chiar dacă memoria este organizată la nivel de byte, apelarea și


manipularea zonelor de memorie poate fi făcută la nivel de bit, byte, word și
dword. Astfel, considerând o zonă de memorie de 32 de biți, identificabilă prin
octeții MB0, MB1, MB2 și MB3 (4 octeți), ea poate fi apelată și prin intermediul
word-urilor formate prin alăturarea a câte doi octeți (bytes) MW0 (MB0,MB1),
unde MB0 devine octetul cel mai semnificativ, iar MB1 octetul cel mai puțin
semnificativ. Respectiv, în același mod se construiesc (Fig.3.3):
MW1(MB1,MB2),
MW2(MB2,MB3),
MW3(MB3,MB4),
MD0(MB0,MB1,MB2,MB3)=MD0(MW0,MW2),
MD1(MB1,MB2,MB3,MB4)=MD1(MW1,MW3),
MD2(MB2,MB3,MB4,MB5=MD2(MW2,MW4).

54
Cap.3 Elemente de programare a controlerelor industriale

Unele funcții lucrează cu variabile reprezentate pe 1 bit, altele cu variabile


reprezentate pe 8, 16 sau 32 de biți. Alocarea spațiului din zona de memorie
trebuie să țină seama de regulile de alocare a adreselor descrise în figura 3.3,
pentru a se evita astfel alocarea aceleiași zone de memorie pentru mai multe
variabile. Exemplu: Byte-ul MB2 aparține word-urilor MW1, MW2, respectiv
dword-urilor MD0, MD1, MD2. O alocare a adreselor MW2 și MD2 către variabile
diferite conduce la modificarea byte-ului MB2 de către două entități diferite, ceea
ce trebuie evitat.
La PLC-urile din familia Simatic S7 (Siemens) memoria de date include [1]:
- Memoria imagine de proces a Intrărilor (I);
- Memoria imagine de proces a Ieșirilor (Q);
- Memoria bit (M) – folosită pentru variabilele definite de utilizator;
- Memoria Periferică (PI,PQ) – folosită pentru accesarea datelor de intrare
direct de pe interfața fizică (modulul) de intrare, respectiv pentru scrierea datelor
de ieșire direct pe interfața fizică de ieșire, evitând întârzierile aferente
mecanismului de citire ciclică din memoria imagine de proces;
- Memoria aferentă Temporizatoarelor și Numărătoarelor (T,C) – alocă
automat acestor resurse (temporizator, numărător) câte un word care este utilizat
pentru operații de verificare a stării resursei, a timpului rămas etc;
- Memoria Locală (L) – alocată automat resurselor de tip OB, FC, FB, SFC,
SFB pentru manipularea variabilelor locale aferente acestor resurse.

Sintaxa și modul de adresare a acestor zone de memorie sunt descrise


succint în tabelul 3.4, [16].

Tabelul 3.4 Adresarea memoriei pentru PLC-urile din familia S7 (Siemens)


Tip Identificator Exemplu Descriere
Memoria imagine de I I10.2 Bitul 2 aferent octetului 10
proces a Intrărilor IB10 Octetul (byte-ul) 10 de intrare
IW20 Cuvântul (word-ul) 20 de intrare
ID20 Dword-ul 20 de intrare
Memoria imagine de Q Q5.7 Bitul 7 aferent octetului 5
proces a Ieșirilor QB5 Octetul(byte-ul) 5 de ieșire
QW8 Cuvântul (word-ul) 28 de ieșire
QD8 Dword-ul 8 de ieșire
Memoria bit M M20.3 Bitul 3 aferent byte-ului 20
MB10 Byte-ul 10 al memoriei bit
MW10 Word-ul 10 memoriei bit
MD10 Dword-ul 10 memoriei bit

55
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Memoria Periferică PI PIB2 Byte-ul 2 al memoriei PI


aferentă Intrărilor, PIW2 Word-ul 2 memoriei PI
PQ
respectiv Ieșirilor PID4 Dword-ul 4 memoriei PI
PQB2 Byte-ul 2 al memoriei PQ
PQW2 Word-ul 2 memoriei PQ
PQD4 Dword-ul 4 memoriei PQ
Memoria aferentă T T3 Temporizatorul 3
Temporizatoarelor
Memoria aferentă C C4 Numărătorul 4
Numărătoarelor
Memoria Locală L L1.2 Bitul 2 aferent byte-ului 1
LB5 Byte-ul 5 al memoriei locale
LW4 Word-ul 4 memoriei locale
LD4 Dword-ul 4 memoriei locale

3. Structura programelor

Potrivit IEC 61131-3, din punct de vedere al programării unui PLC, unitățile
structurale elementare ale unui program utilizator (proiect) sunt: programele,
funcțiile, funcțiile bloc și clasele. Rolul acestor entități este de a structura și
modulariza1 aplicațiile. Fiecare entitate de acest fel este prevăzută cu o interfață
intrări/ieșiri, respectiv poate fi apelată și executată.
La nivelul unei unități centrale (CPU) pot rula mai multe programe care pot
avea diferite priorități: pot fi executate ciclic/periodic sau pe bază de întreruperi.
Programele apelează funcții, funcții bloc și clase. Conceptul de clasă, introdus de
IEC 61131-3 în 2013, este un pas către un alt nivel al programării PLC-urilor, un
nivel care permite trecerea la programarea orientată obiectual, dar care nu face
obiectul prezentului demers.
În arhitectura oricărui program, funcție sau funcție bloc (Fig.3.4) pot fi
identificate două zone distincte:
 Partea declarativă – unde sunt definite variabile de interfață, utilizate
pentru schimbul de informații cu alte entități externe, respectiv variabilele
locale, utilizate intern pentru diferite operații.

1
Prin modularizare o sarcină complexă este descompusă în sarcini simple și relativ independente.
Pentru fiecare sarcină simplă se scrie un modul de program corespunzător. Modulele comunică între
ele sau cu alte entități prin interfețe.

56
Cap.3 Elemente de programare a controlerelor industriale

 Partea executivă – care conține instrucțiunile specifice pe care trebuie să le


execute respectiva entitate structurală (program, funcție, funcție bloc).

PROGRAM <identificator> FUNCTION_BLOCK <identificator> FUNCTION <identificator>: <tip data>


Variabile interfata Variabile interfata Variabile interfata

Variabile locale Variabile locale Variabile locale

Lista instructiuni Lista instructiuni Lista instructiuni


…. …. ….
…. …. ….

END_PROGRAM END_FUNCTION_BLOCK END_FUNCTION


a b c
Fig.3.4 Structura programelor, funcțiilor și funcțiilor bloc

Instrucțiunile aferente unui program, funcție sau funcție bloc sunt editate
într-un limbaj de programare. IEC 61131-3 precizează elementele de limbaj și
regulile de utilizare a acestora pentru patru limbaje de programare standardizate:
- limbaje grafice: Ladder Diagram (LD), Function Block Diagram (FBD);
- limbaje textuale: Instruction List (IL), Structured Text (ST).
Același standard descrie și un al cincilea „limbaj”, Sequential Function Chart
(SFC), destinat structurării aplicațiilor (programelor). Aici, prin structurarea unei
aplicații se înțelege reprezentarea acesteia printr-o rețea de elemente conectate
în serie și paralel, fiecare element având execuția condiționată. Acest mod de
structurare are utilitate în proiectarea aplicațiilor, având un rol asemănător cu
schemele logice din programare (informatică). În unele implementări acest mod
de structurare a devenit limbaj de programare (exemplu: S7 Graph, Siemens).
Toate precizările standardelor au caracter de recomandare și nu reprezintă
o obligativitate pentru producători. Astfel, există și alte limbaje de programare a
PLC-urilor care nu sunt standardizate dar care sunt utilizate totuși în practică. De
asemenea, chiar și limbajele standardizate pot fi regăsite în implementările
curente în formă ușor modificată.
Pentru asigurarea funcționalității unei aplicații, toate aceste entități - chiar
dacă sunt definite independent - trebuie să poată fi apelate și executate. Regulile
de apelare a acestora sunt următoarele (Fig.3.5):
- programele pot apela funcții și funcții bloc,
- funcțiile pot apela doar funcții,
- funcțiile bloc pot apela funcții și funcții bloc,
- aceeași entitate nu poate să se apeleze pe ea însăși.

57
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

PROGRAM
Partea declarativa

FUNCTIE BLOC
Partea executiva FUNCTIE BLOC

FUNCTIE

FUNCTIE FUNCTIE

Fig.3.5 Apelarea funcțiilor și funcțiilor bloc

Programele sunt unități de programare organizate intern conform figurii


3.4 a, utilizează memorie, respectiv își memorează intrările, rezultatele
intermediare și ieșirile. Programele pot apela atât funcții cât și funcții bloc. Ele nu
pot fi apelate de funcții sau de funcții bloc.
Funcțiile sunt unități de programare organizate intern conform figurii 3.4 c,
nu utilizează memorie, respectiv nu își memorează intrările, rezultatele
intermediare sau ieșirile. Ele pot fi apelate de programe și funcții bloc. La rândul
lor pot apela alte funcții. IEC 61131-3 definește un set de funcții de bază, cu
utilizare frecventă, care poate fi extins prin funcții definite de utilizator.
Categoriile de funcții standardizate sunt: funcțiile de conversie a tipurilor de date,
funcțiile numerice și aritmetice, funcțiile de manipulare a șirurilor de biți, funcțiile
de comparație și extragere, funcțiile de prelucrare a șirurilor de caractere și
funcțiile de procesare a datelor temporare (vezi IEC 61131-3).
Funcțiile bloc sunt unități de programare organizate intern conform figurii
3.4 b, utilizează memorie, respectiv își memorează intrările, rezultatele
intermediare și ieșirile. Ele pot fi apelate de programe și de alte funcții bloc. Pot la
rândul lor apela funcții și alte funcții bloc. O funcție bloc este caracterizată prin
proprietatea de instanțiere (multiplicare, trecerea de la o structură generală la
una particulară). Fiecare instanțiere a unei funcții bloc este caracterizată printr-un
identificator (nume) și o structură de date asociată variabilelor de intrare, ieșire și
interne. Din fiecare tip de funcție bloc pot fi derivate oricâte instanțieri,
independente unele de alte.

58
Cap.3 Elemente de programare a controlerelor industriale

4. Funcții bloc standard


Funcțiile bloc descrise în cele ce urmează sunt comune tuturor limbajelor
de programare standardizate: bistabile, detectoare de front, temporizatoare,
numărătoare. Proprietățile acestora sunt descrise în conformitate cu standardul
IEC 61131-3. Implementările producătorilor pot extinde proprietățile acestor
funcții, respectiv pot include și alte funcții similare.

4.1 Blocuri bistabile

Acest tip de funcții bloc permit controlul unei variabile de booleene asociate
ieșirii Q a blocului bistabil (Fig.3.6), respectiv permit implementarea software a
metodei tradiționale de automenținere, specifice circuitelor pe bază de relee.

SR RS
BOOL BOOL BOOL BOOL
S1 Q S Q

BOOL BOOL
R R1

a b

Fig. 3.6 Blocuri bistabile IEC 61131-3: a) cu setare dominantă; b) cu resetare dominantă

Un bloc bistabil are două intrări, S (set) și R (reset), și o singură ieșire, Q. Un


semnal 1 logic aplicat pe intrarea S (set) provoacă activarea ieșirii Q (trecerea în 1
logic a acestei ieșiri). Odată ce ieșirea Q a fost activată, se va menține în această
stare indiferent de valoarea logică a intrării S. Un semnal 1 logic aplicat pe intrarea
R (reset) provoacă dezactivarea ieșirii Q (trecerea ieșirii în starea 0 logic). După
dezactivare își va menține starea indiferent de valoarea logică a semnalului aplicat
la intrarea R. Dacă semnalele R și S sunt ambele 0 logic, ieșirea Q își va menține
starea anterioară.

Funcție de modul în care se comportă un bistabil atunci când la intrări se


aplică simultan două semnale de 1 logic, se identifică două tipuri de bistabile:
 cu setare dominantă, aplicarea unui semnal 1 logic pe intrarea S1
determină obligatoriu trecerea ieșirii în 1 logic, indiferent de valoarea
semnalului aplicat pe intrarea R (0 logic sau 1 logic);

59
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

 cu resetare dominantă, aplicarea unui semnal 1 logic pe intrarea R1


determină obligatoriu trecerea ieșirii în 0 logic, indiferent de valoarea
semnalului aplicat pe intrarea S (0 logic sau 1 logic).

4.2 Detectoare de front

În anumite aplicații se impune detectarea momentului declanșării unui


eveniment (frontul pozitiv al variabilei binare asociate evenimentului) sau al
stingerii acestuia (frontul negativ aferent aceleiași variabile). Funcțiile bloc
standard IEC 61131-3 care au aceste proprietăți sunt definite în figura 3.7, în
formă grafică, respectiv în limbaj ST.

R_TRIG FUNCTION_BLOCK R_TRIG


VAR_INPUT CLK: BOOL; END_VAR
BOOL BOOL
CLK Q VAR_OUTPUT Q: BOOL; END_VAR
VAR M: BOOL; END_VAR
a Q:= CLK AND NOT M;
M:= CLK;
END_FUNCTION_BLOCK

F_TRIG FUNCTION_BLOCK F_TRIG


VAR_INPUT CLK: BOOL; END_VAR
BOOL BOOL
CLK Q VAR_OUTPUT Q: BOOL; END_VAR
VAR M: BOOL; END_VAR
b Q:= NOT CLK AND NOT M;
M:= NOT CLK;
END_FUNCTION_BLOCK

Fig. 3.7 Funcții detectoare de front (IEC61131-3): a) front crescător; b) front descrescător

Ieșirea Q a funcției R_TRIG va fi 0 logic tot timpul mai puțin în momentul


apariției frontului crescător pe intrarea CLK, atunci când Q va lua valoarea 1 logic
pentru un singur ciclu de procesare.

Ieșirea Q a funcției F_TRIG va fi 0 logic tot timpul mai puțin în momentul


apariției frontului descrescător pe intrarea CLK, atunci când Q va lua valoarea 1
logic pentru un singur ciclu de procesare.

Descrierile în limbaj ST a celor două funcții bloc din figura 3.7 permit
înțelegerea modului de operare al acestora.

60
Cap.3 Elemente de programare a controlerelor industriale

4.3 Temporizatoare

Temporizatoarele sunt funcții bloc specializate în măsurarea timpului și


semnalizarea întârzierilor în diferite forme. Ele pot fi utilizate pentru introducerea
de întârzieri în procese la pornirea/declanșarea sau oprirea/finalizarea unor
sarcini, pentru semnalizarea anumitor stări ale procesului, pentru operații de
măsurare a intervalelor de timp etc. Standardul IEC 61131-3 prevede trei tipuri de
temporizatoare:
 Temporizatorul Puls (TP - Pulse Timer),
 Temporizatorul cu întârziere la pornire (TON - Timer ON delay),
 Temporizatorul cu întârziere la oprire (TOF - Timer OFF delay).
În general temporizatoarele standardizate (IEC 61131-3) se regăsesc în
mediile de dezvoltare curente. Fiecare producător poate pune la dispoziția
utilizatorilor și alte curente tipuri de temporizatoare cu proprietăți asemănătoare.
În general sunt disponibile 256 de temporizatoare, numerotate de la 0 la 255.
Din punct de vedere structural temporizatoarele sunt funcții bloc cu cel
puțin patru variabile externe (două variabile de intrare și două variabile de ieșire):
IN – variabilă de intrare de tip BOOL, servește pentru inițializarea funcției;
PT – variabilă de intrare de tip TIME, preia valoarea timpului predefinit;
Q – variabilă de ieșire de tip BOOL, își modifică valoarea în funcție de tipul
temporizatorului (TP,TON, TOF);
ET – variabilă de ieșire de tip TIME, măsoară timpul de la apariția frontului
pozitiv pe intrarea IN pentru temporizatoarele TP și TON, respectiv de la apariția
frontului negativ pe intrarea IN pentru temporizatorul TOF.
În figura 3.8 este detaliată reprezentarea grafică a temporizatoarelor
IEC 61131-3, respectiv variabilele specifice ale acestora.

unde:
*** IN – variabilă de intrare (INput)
PT – variabilă de intrare (Preset Time)
BOOL BOOL Q – variabilă de ieșire (Out)
IN Q ET – variabilă de ieșire (Elapsed Time)
TIME TIME
TP (Pulse Timer)
PT ET *** TON (Timer ON delay)
TOF (Timer OFF delay)

Fig. 3.8 Temporizatoare standardizate (IEC 61131-3): reprezentare grafică, intrări, ieșiri

61
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

TP - Temporizatorul Puls (Impuls). La apariția unui front crescător (pozitiv)


pe intrarea IN se declanșează următoarele acțiuni: ieșirea Q trece în 1 logic și
variabila ET se incrementează la fiecare puls al ceasului intern; atunci când
valoarea ET devine egală cu PT (după expirarea timpului predefinit PT) ieșirea Q se
resetează (Q=0). Apariția unui front descrescător la intrarea IN conduce la
resetarea variabilei ET (ET=0). Odată activat temporizatorul (Q=1) ieșirea Q se va
reseta (Q=0) doar la expirarea timpului predefinit PT.

1
IN
0

1
Q
0
PT PT PT

PT

ET
0
t0 t1 t2 t3 t4 t5 t6 t7

Fig. 3.9 Temporizator TP (IEC 61131-3): variația în timp a variabilelor

TON - Temporizatorul cu întârziere la pornire. La apariția unui front


crescător (pozitiv) pe intrarea IN se declanșează următoarele acțiuni: variabila ET
se incrementează la fiecare puls al ceasului intern; atunci când valoarea ET devine

1
IN
0

1
Q
0
PT PT

PT

ET
0
t0 t1 t2 t3 t4 t5 t6 t7

Fig. 3.10 Temporizator TON (IEC 61131-3): variația în timp a variabilelor

62
Cap.3 Elemente de programare a controlerelor industriale

egală cu PT (după expirarea timpului predefinit PT, ET=PS) ieșirea Q devine 1 logic
(Q=1). Apariția unui front descrescător la intrarea IN conduce la resetarea
variabilei ET (ET=0), respectiv a ieșirii Q (Q=0).

TOF - Temporizatorul cu întârziere la oprire. La apariția unui front crescător


pe intrarea IN se declanșează următoarele acțiuni: variabila ET este resetată
(ET=0), ieșirea Q trece în 1 logic; după apariția unui front descrescător la intrarea
IN, variabila ET se incrementează la fiecare puls al ceasului intern; atunci când
valoarea ET devine egală cu valoarea timpului presetat PT (ET=PS), ieșirea Q se
resetează (Q=0). Un nou front crescător conduce la repetarea acțiunilor detaliate
anterior.

1
IN
0

1
Q
0
PT PT

PT

ET
0
t0 t1 t2 t3 t4 t5 t6 t7

Fig. 3.11 Temporizator TOF (IEC 61131-3): variația în timp a variabilelor

Utilizarea temporizatoarelor în aplicații elementare (implementare S7)

În continuare se detaliază soluții concurente de rezolvare a unor sarcini


elementare care necesită utilizarea temporizatoarelor. Abordarea are în vedere
utilizarea de temporizatoare standardizate în rezolvarea aceleiași sarcini, chiar
dacă acest lucru necesită uneori o logică mai complicată. Aplicațiile sunt
implementate în limbaj LD, au rol educațional, iar testarea și studiul lor permit
înțelegerea modului de utilizare al temporizatoarelor IEC 61131-3.

Aplicația 3.1. Se consideră o lampă (L) și un buton normal deschis, cu


revenire (B.) La apăsarea butonului timp de 3 secunde trebuie să se aprindă
lampa. La eliberarea butonului, lampa trebuie să se stingă.

63
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Tabelul 3.5 Aplicația 3.1 - Rezolvare


Soluția1:
Temporizator TP
- utilizare improprie a
temporizatorului TP pentru
rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

Soluția 2:
Temporizator TON
- utilizare naturală a
temporizatorului TON
pentru rezolvarea sarcinii
(logică simplă)
Soluția 3:
Temporizator TOF
- utilizare improprie a
temporizatorului TOF
pentru rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

Aplicația 3.2. Se consideră o lampă (L) și un buton normal deschis, cu


revenire (B). La apăsarea butonului trebuie să se aprindă lampa. La eliberarea
butonului lampa trebuie să mai rămână aprinsă încă 3 secunde.
Tabelul 3.6 Aplicația 3.2 - Rezolvare
Soluția 1:
Temporizator TP

- utilizare improprie a
temporizatorului TP pentru
rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

64
Cap.3 Elemente de programare a controlerelor industriale

Soluția 2:
Temporizator TON

- utilizare improprie a
temporizatorului TON
pentru rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

Soluția 3:
Temporizator TOF

- utilizare naturală a
temporizatorului TOF
pentru rezolvarea sarcinii

Aplicația 3.3. Se consideră o lampă (L) și un buton normal deschis, cu


revenire (B). La apăsarea butonului trebuie ca lampa să se aprindă și să stea
aprinsă timp de 3s. Eliberarea butonului nu trebuie să inducă efecte asupra lămpii.

Tabelul 3.7 Aplicația 3.3 - Rezolvare


Soluția 1:
Temporizator TP

- utilizare naturală a
temporizatorului TP pentru
rezolvarea sarcinii
(logică simplă)

Soluția 2:
Temporizator TON

- utilizare improprie a
temporizatorului TON
pentru rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

65
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

4.4 Numărătoare

Numărătoarele sunt funcții bloc specializate în contorizarea evenimentelor


și semnalizarea numărului acestora în diferite condiții. Ele trebuie să poată
număra impulsuri, să memoreze numărul acestora, să poată fi interogate, să
poată fi pornite și oprite, să semnalizeze atingerea unui anumit număr predefinit
de evenimente.
Standardul IEC 61131-3 prevede trei tipuri de numărătoare:
 Numărătorul incremental (CTU –Up Counter),
 Numărătorul decremental (CTD – Down Counter),
 Numărătorul mixt (CTUD – Up-Down Counter).

În general numărătoarele standardizate (IEC 61131-3) se regăsesc în mediile


de dezvoltare curente. Pe lângă acestea fiecare producător poate pune la
dispoziția utilizatorilor și alte tipuri de numărătoare cu proprietăți asemănătoare.
În general sunt disponibile 256 de numărătoare, numerotate de la 0 la 255.
Din punct de vedere structural numărătoarele incrementale și
decrementale (CTU, CTD) sunt funcții bloc cu cel puțin cinci variabile externe (trei
variabile de intrare și două variabile de ieșire):
CU,CD (Counter Up, Counter Down) – variabilă de intrare de tip BOOL
pentru sesizarea fronturilor pozitive la intrarea numărătorului;
R,LD (Reset, Load) – variabilă de intrare de tip BOOL pentru sesizarea
comenzii de inițializare a numărătorului;
PV (Preset Value)– variabilă de intrare de tip INT, preia o valoare predefinită
de utilizator;
Q (QU,QD) – variabilă de ieșire de tip BOOL, își modifică valoarea în funcție
de tipul numărătorului (CTU,CTD);
CV (Counter Value) – variabilă de ieșire de tip INT, înregistrează numărul de
fronturi pozitive pe intrarea CU și/sau CD, funcție de tipul numărătorului.
Numărătoarele mixte (CTUD) utilizează toate variabilele definite anterior:
CU, CD, R, LD, PV pentru intrări, respectiv QU, QD, CV, pentru ieșiri.
În figura 3.12 sunt descrise reprezentarea grafică și codul sursă în limbaj ST
aferent numărătoarelor IEC 61131-3. În ST atributele R_EDGE și F_EDGE pot fi
utilizate pentru identificarea frontului crescător sau descrescător asociat unei
variabile booleene.

66
Cap.3 Elemente de programare a controlerelor industriale

FUNCTION_BLOCK CTU
VAR_INPUT CU: BOOL R_EDGE;
CTU R:BOOL; PV:INT; END_VAR
VAR_OUTPUT Q: BOOL; CV:INT; END_VAR
BOOL BOOL IF R
CU Q
THEN CV:= 0;
BOOL
R ELSIF CU AND (CV < PVmax)
THEN CV:= CV+1;
END_IF;
INT INT
PV CV Q:= (CV >= PV);
END_FUNCTION_BLOCK

FUNCTION_BLOCK CTD
VAR_INPUT CD: BOOL R_EDGE;
CTD LD:BOOL; PV:INT; END_VAR
VAR_OUTPUT Q: BOOL; CV:INT; END_VAR
BOOL BOOL
CD Q IF LD
THEN CV:= PV;
BOOL
LD ELSIF CD AND (CV > PVmin)
THEN CV:= CV-1;
INT
PV CV INT END_IF;
Q:= (CV <= 0);
END_FUNCTION_BLOCK

FUNCTION_BLOCK CTUD
VAR_INPUT CU: BOOL R_EDGE; ...
. . . . . . . . . . . . .............................................................................................................. . .

CTUD IF R
BOOL BOOL THEN CV:= 0;
CD QU ELSIF LD
BOOL BOOL
LD QD THEN CV:= PV;
BOOL ELSE
R IF NOT (CU AND CD)
BOOL
LD THEN
INT
PV CV INT IF CU AND (CV < PVmax)
THEN CV:= CV+1;
ELSIF CD AND (CV > PVmin)
THEN CV:= CV-1;
END_IF;
END_IF;
END_IF;
QU:= (CV >= PV);
QD:= (CV <= 0);
END_FUNCTION_BLOCK

Fig. 3.12 Numărătoare standardizate (IEC 61131-3): reprezentare grafică, cod sursă

67
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Utilizarea numărătoarelor în aplicații elementare (implementare S7)

În continuare se detaliază câteva soluții de rezolvare a unor sarcini


elementare care necesită utilizarea numărătoarelor. Aplicațiile sunt implementate
în limbaj LD, au rol educațional, iar testarea și studiul lor permit înțelegerea
modului de utilizare al numărătoarelor IEC 61131-3.

Aplicația 3.4. Se consideră o lampă L și două butoane normal deschise, cu


revenire (B1 și B2). După 5 apăsări ale butonului B1 lampa trebuie să se aprindă.
Apăsarea butonului B2 conduce la stingerea lămpii și resetarea sistemului
(numărătorului). Aplicația trebuie să poată rula ciclic.

Tabelul 3.8 Aplicația 3.4 - Rezolvare


Soluție 1:
Numărător incremental

La apăsarea butonului B2,


variabila MW0 se încarcă cu
valoarea 0. La fiecare
apăsare a butonului B1,
variabila MW0 se
incrementează cu o unitate.

Dacă MW0 ≥ 5 se aprinde


lampa L.

Soluție 2:
Numărător decremental

La apăsarea butonului B2,


variabila MW0 se încarcă cu
valoarea 5. La fiecare
apăsare a butonului B1,
variabila MW0 se
decrementează cu o unitate.

Dacă MW0 ≤ 0 se aprinde


lampa L.

68
Cap.3 Elemente de programare a controlerelor industriale

Aplicația 3.5. Se consideră o parcare cu 10 locuri. La intrarea în parcare


există un sistem optic prevăzut cu 2 lămpi: una verde (L1) și una roșie (L2).
Parcarea este prevăzută de asemenea cu doi senzori, S1 și S2, care pot sesiza
mașinile care intră, respectiv mașinile care iasă. Se cere să fie aprinsă lumina
verde dacă există locuri libere în parcare, iar în caz contrar să fie aprinsă lumina
roșie.

Tabelul 3.9 Aplicația 3.5 - Rezolvare


Soluție 1:
Numărător mixt

S1 – senzor intrare
S2 – senzor ieșire
L1 – lumină verde
L2 – lumină roșie
M0.0 – memorie auxiliară

R – buton auxiliar care


permite resetarea
sistemului, adică:
MW20=0, M0.0=0.

La apăsarea butonului R numărătorul se resetează, respectiv variabila CV


(MW20) se încarcă cu valoarea 0 și ieșirea Q (M0.0) devine 0 (L1, lumina verde se
aprinde). La fiecare front pozitiv înregistrat pe intrarea CU (S1, sesizare mașină
care intră în parcare) variabila CV (MW20) este incrementată cu o unitate,
respectiv la fiecare front pozitiv sesizat la intrarea CD (S2, sesizare mașină care
iese din parcare) variabila CV (MW20) este decrementată cu o unitate. Dacă
valoarea lui CV (MW20) depășește valoarea prestabilită (PV=10) atunci ieșirea
numărătorului devine 1, respectiv lumină verde se stinge și se aprinde lumina
roșie. Dacă MW0 ≤ 10 se aprinde lampa L1 (lumină verde).

69
Cap.3 Elemente de programare a
controlerelor industriale

1. Variabile. Tipuri de date


2. Organizarea și adresarea memoriei
3. Structura programelor
4. Funcții bloc standard
4.1 Blocuri bistabile
4.2 Detectoare de front
4.3 Temporizatoare
4.4 Numărătoare

Limbajele de programare implică utilizarea de variabile, date,


operanzi, operatori, instrucțiuni, funcții, pentru apelarea și controlul
resurselor hardware. Oricărei variabile trebuie să i se asocieze un tip de
dată și o zonă de reprezentare în memorie. Funcțiile operează cu
variabile, returnează valori, comunică cu alte funcții prin intermediul
interfețelor. Programele apelează funcții pentru realizarea unor operații
specifice. Programarea unui PLC necesită cunoașterea acestor noțiuni,
respectiv a tehnicilor de operare cu acestea. În cadrul acestui capitol sunt
prezentate aceste elemente prin raportare la standardul IEC 61131-3 care
detaliază specificațiile limbajelor de programare aferente controlerelor
industriale de tip PLC.

46
Cap.3 Elemente de programare a controlerelor industriale

1. Variabile. Tipuri de date


Variabile. În general un program (aplicație PLC) vizează implementarea unui
anumit mod de funcționare unui sistem sau proces. Pentru a realiza acest lucru
este necesar ca PLC-ul să aibă acces la toate resursele sistemului controlat pentru
interogare, operare și modificare ieșiri în acord cu obiectivul urmărit. Sistemul de
control accesează și controlează resursele externe prin intermediul interfețelor de
intrare și de ieșire, însă operează și cu resursele interne pentru accesarea
memoriei, comunicare, conversii, etc. Toate aceste componente, referite generic
prin resursele sistemului, operează fizic cu semnale electrice. PLC-ul accesează și
operează cu aceste semnale fizice, reprezentate intern în format numeric, prin
intermediul variabilelor sau operanzilor.
În acest context, variabilele sunt identificatori ai resurselor sistemului
(intrări, ieșiri, memorii) care pot fi interogate și manipulate prin intermediul
operatorilor, instrucțiunilor, funcțiilor etc.
Operand versus variabilă. În programarea convențională a PLC-urilor
(DIN 19239) accesarea directă a memoriei se face prin intermediul operanzilor
(exemplu: IW2.1, adresă intrare logică; M2.5, adresă bit de memorie). Prin
intermediul operanzilor simbolici, nume simbolice asociate operanzilor absoluți,
pot fi accesate și manipulate aceleași resurse însă fără a se apela la adresa
hardware. Standardul IEC 61131-3 împrumută oarecum terminologia specifică
limbajelor de programare de nivel înalt și introduce noțiunea de variabilă ca
substitut al operandului [15]. Totuși, unele limbajele standardizate operează cu
operanzi, altele cu variabile.
Resursele unui sistem sunt reprezentate în memorie pentru a putea fi
interogate și manipulate cu ușurință. Astfel, intrările și ieșirile sunt apelate și
manipulate prin variabile de intrare și ieșire. Variabilele aferente intrărilor se
actualizează periodic în memorie (în zona aferentă imaginii de proces a intrărilor).
Frecvența de actualizare este suficient de mare încât să nu fie afectată dinamica
procesului de control pentru aplicațiile industriale convenționale1 (aproximativ
100 Hz). Între două secvențe de actualizare a memoriei se execută instrucțiunile
aferente programului utilizator, se operează asupra variabilelor interne și de ieșire
modificând valorile acestora în memorie. La sfârșitul ciclului programului se

1
Pentru aplicațiile industriale rapide și ultrarapide frecvența ciclului de procesare trebuie mărită, fie
prin utilizarea unei tehnologii de control mai rapide (ex. Simotion versus Simatic), fie prin rularea
aplicației la frecvențe diferite: funcțiile aferente componentei rapide a unui proces sunt procesate la
o frecvență mai mare decât frecvența la care rulează programul principal (funcția main).

47
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

actualizează ieșirile fizice cu semnalele aferente valorilor extrase din memorie (din
zona aferentă imaginii de proces a ieșirilor). Acest mod de lucru asigură citirea
ciclică și simultană a semnalelor de intrare, actualizarea ciclică și simultană a
ieșirilor PLC-ului, totul la o frecvență fixă, prestabilită.
Declararea variabilelor. Înainte de scrierea programului trebuie definite
variabilele. Acest proces diferă funcție de implementare și de limbajul utilizat, însă
orice variabilă trebuie să fie identificabilă (direct sau simbolic), respectiv trebuie
să aibă un tip de dată asociat. Într-un limbaj textual, în conformitate cu
specificațiile IEC61131-3, definirea unei variabile implică următoarea structură
declarativă:
Tipul variabilei

Atributul variabilei
Identificator (nume)

VAR RETAIN Valoare initializare


Senzor_A : BOOL;
Eroare : REAL := 0;
END_VAR
Tipul de data asociat
Sfarsitul declaratiei

Fig.3.1 Declararea variabilelor


Modul de declarare din figura 3.1 nu precizează zona de memorie vizată de
cele două variabile Senzor_A și Eroare și ca atare alocarea de memorie se face
automat printr-un mecanism intern. Dacă se dorește specificarea zonei de
memorie, atunci în declararea variabilelor se utilizează instrucțiunea AT ce
introduce locația fizică aferentă variabilelor (QW0, IB3, QW2), precedată de
simbolul % (conform IEC 61131-3). Variabile declarate pot fi apelate direct, prin
adresa hardware (QW0, IB3, QW2), sau simbolic, prin identificatorul variabilei
(M1, Out2). Valoarea de inițializare și atributul pot să lipsească.
VAR
M1 AT % QW0 : WORD := 16#FF00;
AT % IB3 : BYTE;
Out2 AT % QW2 : WORD;
END_VAR

Tipul și atributele variabilelor în conformitate cu IEC 61131-3 sunt


specificate în tabelele 3.1 și 3.2.

48
Cap.3 Elemente de programare a controlerelor industriale

Tabelul 3.1 Tipul variabilelor (conform IEC 61131-3)


VAR variabilă internă - aferentă unei entități de tip program, funcție,
funcție bloc, etc.
VAR_INPUT variabilă de intrare - preluată din exterior și care nu poate fi
modificată
VAR_OUTPUT variabilă de ieșire - produsă de o funcție și pusă la dispoziția altor
entități externe
VAR_IN_OUT variabilă intrare-ieșire - preluată din exterior dar care poate fi
modificată și pusă la dispoziția altor entități externe
VAR_EXTERNAL variabilă externă - poate prelua o variabilă din exteriorul entității,
definită ca VAR_GLOBAL
VAR_GLOBAL variabilă globală - poate fi utilizată de orice entitate dacă este
redeclarată ca VAR_EXTERNAL
VAR_ACCESS variabilă care poate fi accesată din exterior utilizând calea de acces
definită în declararea ei
VAR_TEMP variabilă temporară - se reinițializează la fiecare execuție a entității
în care a fost definită
VAR_CONFIG variabile ce sunt asignate unor resurse fără specificarea adresei lor

Tabelul 3.2 Atributele variabilelor (conform IEC 61131-3)


RETAIN memorează valoarea curentă și după căderea tensiunii
NON_RETAIN nu memorează valoarea curentă la căderea tensiunii
PROTECTED poate fi accesată doar de entitatea în care a fost declarată și de
derivatele acesteia
PUBLIC permite accesarea de către alte entități
PRIVATE poate fi accesată doar din interiorul entității în care a fost declarată
CONSTANT constantă – valoarea ei nu poate fi modificată

Tipuri de date. Fiecărei variabile declarate trebuie să i se asocieze un


anumit tip de dată compatibil cu informația necesară a fi prelucrată. În
conformitate cu IEC 61131-3 [31] există trei categorii de date:
 elementare – includ date convenționale de tipul șiruri de biți, întregi cu sau
fără semn, reale, dată/timp, șiruri de caractere;
 generice - utilizate de producători pentru specificarea variabilelor de
intrare și de ieșire ale funcțiilor;
 definite de utilizator (derivate) – definite cu scopul de a obține un cod mai
structurat (ENUMERATION, ARRAY, STRUCT).

În tabelul 3.3 sunt descrise principale tipuri de date elementare, numărul de


biți utilizați în reprezentare și domeniul de valori asociat.

49
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Tabelul 3.3 Tipuri de date elementare (IEC 61131-3)


Categorie de Tipul de Descriere Dimensiune Domeniu de valori
date dată (biți)
Șiruri de biți BOOL boolean 1 [0, 1]
BYTE șir de 8 biți 8 [0, 255]
WORD șir de 16 biți 16 [0, 65535]
DWORD șir de 32 biți 32 [0, 232-1]
LWORD șir de 64 biți 64 [0, 264-1]
Numere SINT întreg scurt 8 [-128, 127]
întregi cu
INT întreg 16 [-32768, 32767]
sau fără
semn DINT întreg dublu 32 [-231, 231-1]
LINT întreg lung 64 [-263, 263-1]
USINT întreg scurt fără 8 [0, 255]
semn
UINT întreg fără semn 16 [0, 65535]
UDINT întreg dublu 32 [0, 232-1]
fără semn
ULINT întreg lung fără 64 [0, 264-1]
semn
Numere REAL nr.reale 32 ±1.175 495e-38,
reale ±3.402823e+38
LREAL nr.reale lungi 64 -
Dată și timp DATE dată depinde de exemplu:
implementare d#2017-01-10
TOD timp orar depinde de exemplu:
(time of day) implementare tod#09:20:05
DT dată și timp orar depinde de exemplu: dt#2017-
implementare 01-10-09:20:05
Durată și TIME durată (timp) 64 exemplu: t#50s
șiruri de
STRING șir de caractere 8 -
caractere
WSTRING șir de caractere 16 -

50
Cap.3 Elemente de programare a controlerelor industriale

În cadrul fiecărui limbaj sunt predefinite liste de operatori, instrucțiuni și


funcții, care definesc instrumentele specifice ale unui anumit limbaj.
Operatorii sunt elemente specifice de limbaj asociate operațiilor
fundamentale ce pot efectuate asupra variabilelor (operanzilor): adunare,
scădere, înmulțire, împărțire, compare, transformare, conversie, manipulare etc.
Instrucțiunile sunt elemente specifice de limbaj (cuvinte-cheie) asociate
prelucrărilor speciale ale operanzilor (variabilelor), de tipul: asignare valoare,
apelare funcții, selecție condiții, iterare variabile, bucle de execuție condiționate
etc.
Funcțiile sunt elemente specifice de limbaj care asigură prelucrarea
operanzilor la un nivel superior. Ele utilizează operatori și instrucțiuni în diferite
structuri, scheme și legături logice, permițând prelucrări specifice de tipul: citiri,
scrieri, calcul, sincronizare, interogare, numărare, temporizare, structurare etc.
Funcțiile sunt dezvoltate de producător (numite funcții sistem) sau de utilizator
(numite simplu funcții). Utilizatorul poate să-și construiască propriile funcții
pentru prelucrările pe care le consideră utile și pentru structurarea aplicațiilor.
Limbajele de programare operează cu aceste elemente – variabile,
operanzi, operatori, instrucțiuni, funcții - numărul, tipul, modul de definire și de
utilizare al acestora în cadrul unui program fiind specifice fiecărui limbaj în parte.

2. Organizarea și adresarea memoriei


Din punct de vedere al modului de utilizare memoria PLC-urilor este
organizată în două substructuri: memoria de date și memoria program [5].
Memoria de date stochează tabelele imagine de proces ale intrărilor și
ieșirilor, variabilele predefinite aferente temporizatoarelor și numărătoarelor,
variabilele definite de utilizator, variabile aferente funcțiilor matematice,
rezultatele operațiilor logice etc. Memoria program (logică) este utilizată pentru
stocarea programului utilizator.
Stocarea acestor date (informații) se face sub formă binară prin intermediul
circuitelor electronice integrate. Cea mai mică structură de date care poate fi
înregistrată și apelată poartă numele de BIT (BInary digiT), iar valoarea acesteia
poate fi 0 sau 1. O succesiune de 8 biți poartă numele de BYTE (octet). O
succesiune de 16 biți (sau de doi octeți) poartă numele de WORD (cuvânt), iar o
succesiune de 2 cuvinte (sau 4 octeți) poartă numele de DWORD (dublu-cuvânt).

51
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Memoria PLC-urilor este organizată în astfel de mulțimi ordonate de biți, respectiv


poate fi scrisă și citită la nivel de bit, byte, word etc.
În scopul asigurării unui anumit mod de funcționare unui proces, informația
necesară este preluată din proces prin intermediul canalelor de intrare, prelucrată
prin intermediul unui program la nivelul PLC-ului, iar apoi rezultatele acestor
prelucrări sunt transmise din nou procesului prin intermediul canalelor de ieșire.
Toate aceste informații (semnale electrice d.p.d.v. fizic) de intrare, interne, de
ieșire, sunt asociate generic cu noțiunea de variabilă. Astfel, discutăm de variabile
de intrare, variabile de ieșire, variabile interne, toate asociate unor semnale sau
informații de intrare, interne și de ieșire.
Informația cu care operează un PLC depinde de caracteristicile procesului
controlat și de modul de preluare al acesteia (adică de tipul canalelor de intrare și
de ieșire). Astfel variabilele unui proces diferă la nivel structural funcție de tipul
informației prelucrate. Fiecărei variabile definite de utilizator trebuie să i se
asocieze un anumit tip de dată compatibil cu informația necesară a fi prelucrată.
Tipurile de date uzuale, specifice aplicațiilor industriale dezvoltate pe PLC-uri,
sunt: boolean (BOOL), octet (BYTE), cuvânt (WORD), dublu-cuvânt (DWORD),
întreg (INT), dublu-întreg (DINT), real (REAL), timp (TIME), caracter (CHAR), șir de
caractere (STRING), mulțime (ARRAY), structură (STRUCT).
Valorile aferente variabilelor sunt stocate în memoria de date, astfel că pe
parcursul rulării unui program variabilele definite de utilizator pot fi accesate,
manipulate și modificate în concordanță cu procesul controlat. Pentru
exemplificare se consideră cazul simplu al aprinderii unei lămpi L atât timp cât
este apăsat un buton B (Fig.3.2). Programul aferent acestei sarcini trebuie să
stabilească o legătura univocă între două variabile: o variabilă de intrare asociată
butonul B (conectat la canalul de intrare nr.1) și o variabilă de ieșire asociată
lămpii L (conectată la canalul de ieșire nr.6 al modulului de ieșire).
Cele două module de intrare și ieșire utilizate sunt prevăzute cu câte 8
canale logice (8 intrări și 8 ieșiri) care sunt reprezentate în memorie prin
intermediul unui octet aferent fiecărui modul. Considerând că în procesul de
configurare al aplicației acestor resurse li s-au alocat zone de memorie aferente
primului octet al tabelei imagine a intrărilor (IB0), respectiv primului octet al
tabelei imagine a ieșirilor (QB0), atunci starea fiecărei intrări și ieșiri este
reprezentată printr-un bit de memorie astfel: intrării cu numărul 0 îi corespunde
bitul I0.0, intrării cu numărul 1 îi corespunde bitul I0.1 și, în general, intrării cu
numărul n îi corespunde bitul I0.n, unde nϵ[0;7], respectiv ieșirii cu numărul 0 îi
corespunde bitul Q0.0 și, în general, ieșirii cu numărul n îi corespunde bitul Q0.n,
unde nϵ[0;7], vezi figura 3.2.

52
Cap.3 Elemente de programare a controlerelor industriale

PLC
Modul Modul
intrare PROGRAM iesire
24V 8DI I0.1 Q0.6 8DO 0V

B 0 0
1 1
Memorie – Imagine
2 de proces Intrari 2
7 6 5 4 3 2 1 0
3 0 0 0 0 0 0 1 0 IB0 3
0 0 0 0 0 0 0 0 IB1
4 4
5 Memorie – Imagine 5
de proces Iesiri L
6 7 6 5 4 3 2 1 0 6
0 1 0 0 0 0 0 0 QB0
7 0 0 0 0 0 0 0 0 QB1 7

Fig.3.2 Reprezentarea în memorie a variabilelor de intrare și ieșire

Programul rulează ciclic la o frecvență prestabilită (ex. 100 Hz). La începutul


fiecărui ciclu starea intrării cu nr. 0 (la care este conectat butonul B) este
reprezentată în memorie la adresa I0.0. În timpul rulării programului variabila de
intrare este citită din memorie (de la adresa I0.0), iar variabila de ieșire este
actualizată tot în memorie (la adresa Q0.6). La sfârșitul fiecărui ciclu de rulare al
programului, ieșirea fizică nr. 6 se actualizează cu valoarea aferentă variabilei de
ieșire (preluată de la adresa Q0.6).
Așadar programele utilizează informații (variabile) preluate din memorie iar
rezultatele obținute (variabile) sunt depuse tot în memorie și abia apoi transmise
spre ieșirile fizice. Actualizarea memoriei imagine de proces se realizează la o
frecvența prestabilită, aceeași frecvență la care rulează ciclic programul aplicației.
Unitatea fundamentală a memoriei este bit-ul și orice mod de organizare al
acesteia se bazează pe această entitate. În general, organizarea internă a
memoriei de date se face la nivel de byte sau de word, apărând totuși diferențe
de la producător la producător. Pentru PLC-urile din familia Simatic S7, Siemens,
[16] organizarea și adresarea memoriei se face la nivel de byte (Fig.3.3).

53
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

7 6 5 4 3 2 1 0
MB0 1 1 1 0 0 0 0 0
7 6 5 4 3 2 1 0 MW0 (MB0,MB1)
MB1 0 0 0 0 0 1 0 1
7 6 5 4 3 2 1 0 MD0 (MB0,MB1,MB2,MB3)
MB2 0 1 1 0 0 0 0 0
7 6 5 4 3 2 1 0 MW2 (MB2,MB3)
MB3 0 0 0 0 1 1 1 0

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MW0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1

MB0 MB1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MW1 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0

MB1 MB2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MW2 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0

MB2 MB3
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MD0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0

MB0 MB1 MB2 MB3


31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MD1 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0

MB1 MB2 MB3 MB4


31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MD2 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0

MB2 MB3 MB4 MB5

Fig.3.3 Adresarea memoriei (S7-300)

Chiar dacă memoria este organizată la nivel de byte, apelarea și


manipularea zonelor de memorie poate fi făcută la nivel de bit, byte, word și
dword. Astfel, considerând o zonă de memorie de 32 de biți, identificabilă prin
octeții MB0, MB1, MB2 și MB3 (4 octeți), ea poate fi apelată și prin intermediul
word-urilor formate prin alăturarea a câte doi octeți (bytes) MW0 (MB0,MB1),
unde MB0 devine octetul cel mai semnificativ, iar MB1 octetul cel mai puțin
semnificativ. Respectiv, în același mod se construiesc (Fig.3.3):
MW1(MB1,MB2),
MW2(MB2,MB3),
MW3(MB3,MB4),
MD0(MB0,MB1,MB2,MB3)=MD0(MW0,MW2),
MD1(MB1,MB2,MB3,MB4)=MD1(MW1,MW3),
MD2(MB2,MB3,MB4,MB5=MD2(MW2,MW4).

54
Cap.3 Elemente de programare a controlerelor industriale

Unele funcții lucrează cu variabile reprezentate pe 1 bit, altele cu variabile


reprezentate pe 8, 16 sau 32 de biți. Alocarea spațiului din zona de memorie
trebuie să țină seama de regulile de alocare a adreselor descrise în figura 3.3,
pentru a se evita astfel alocarea aceleiași zone de memorie pentru mai multe
variabile. Exemplu: Byte-ul MB2 aparține word-urilor MW1, MW2, respectiv
dword-urilor MD0, MD1, MD2. O alocare a adreselor MW2 și MD2 către variabile
diferite conduce la modificarea byte-ului MB2 de către două entități diferite, ceea
ce trebuie evitat.
La PLC-urile din familia Simatic S7 (Siemens) memoria de date include [1]:
- Memoria imagine de proces a Intrărilor (I);
- Memoria imagine de proces a Ieșirilor (Q);
- Memoria bit (M) – folosită pentru variabilele definite de utilizator;
- Memoria Periferică (PI,PQ) – folosită pentru accesarea datelor de intrare
direct de pe interfața fizică (modulul) de intrare, respectiv pentru scrierea datelor
de ieșire direct pe interfața fizică de ieșire, evitând întârzierile aferente
mecanismului de citire ciclică din memoria imagine de proces;
- Memoria aferentă Temporizatoarelor și Numărătoarelor (T,C) – alocă
automat acestor resurse (temporizator, numărător) câte un word care este utilizat
pentru operații de verificare a stării resursei, a timpului rămas etc;
- Memoria Locală (L) – alocată automat resurselor de tip OB, FC, FB, SFC,
SFB pentru manipularea variabilelor locale aferente acestor resurse.

Sintaxa și modul de adresare a acestor zone de memorie sunt descrise


succint în tabelul 3.4, [16].

Tabelul 3.4 Adresarea memoriei pentru PLC-urile din familia S7 (Siemens)


Tip Identificator Exemplu Descriere
Memoria imagine de I I10.2 Bitul 2 aferent octetului 10
proces a Intrărilor IB10 Octetul (byte-ul) 10 de intrare
IW20 Cuvântul (word-ul) 20 de intrare
ID20 Dword-ul 20 de intrare
Memoria imagine de Q Q5.7 Bitul 7 aferent octetului 5
proces a Ieșirilor QB5 Octetul(byte-ul) 5 de ieșire
QW8 Cuvântul (word-ul) 28 de ieșire
QD8 Dword-ul 8 de ieșire
Memoria bit M M20.3 Bitul 3 aferent byte-ului 20
MB10 Byte-ul 10 al memoriei bit
MW10 Word-ul 10 memoriei bit
MD10 Dword-ul 10 memoriei bit

55
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Memoria Periferică PI PIB2 Byte-ul 2 al memoriei PI


aferentă Intrărilor, PIW2 Word-ul 2 memoriei PI
PQ
respectiv Ieșirilor PID4 Dword-ul 4 memoriei PI
PQB2 Byte-ul 2 al memoriei PQ
PQW2 Word-ul 2 memoriei PQ
PQD4 Dword-ul 4 memoriei PQ
Memoria aferentă T T3 Temporizatorul 3
Temporizatoarelor
Memoria aferentă C C4 Numărătorul 4
Numărătoarelor
Memoria Locală L L1.2 Bitul 2 aferent byte-ului 1
LB5 Byte-ul 5 al memoriei locale
LW4 Word-ul 4 memoriei locale
LD4 Dword-ul 4 memoriei locale

3. Structura programelor

Potrivit IEC 61131-3, din punct de vedere al programării unui PLC, unitățile
structurale elementare ale unui program utilizator (proiect) sunt: programele,
funcțiile, funcțiile bloc și clasele. Rolul acestor entități este de a structura și
modulariza1 aplicațiile. Fiecare entitate de acest fel este prevăzută cu o interfață
intrări/ieșiri, respectiv poate fi apelată și executată.
La nivelul unei unități centrale (CPU) pot rula mai multe programe care pot
avea diferite priorități: pot fi executate ciclic/periodic sau pe bază de întreruperi.
Programele apelează funcții, funcții bloc și clase. Conceptul de clasă, introdus de
IEC 61131-3 în 2013, este un pas către un alt nivel al programării PLC-urilor, un
nivel care permite trecerea la programarea orientată obiectual, dar care nu face
obiectul prezentului demers.
În arhitectura oricărui program, funcție sau funcție bloc (Fig.3.4) pot fi
identificate două zone distincte:
 Partea declarativă – unde sunt definite variabile de interfață, utilizate
pentru schimbul de informații cu alte entități externe, respectiv variabilele
locale, utilizate intern pentru diferite operații.

1
Prin modularizare o sarcină complexă este descompusă în sarcini simple și relativ independente.
Pentru fiecare sarcină simplă se scrie un modul de program corespunzător. Modulele comunică între
ele sau cu alte entități prin interfețe.

56
Cap.3 Elemente de programare a controlerelor industriale

 Partea executivă – care conține instrucțiunile specifice pe care trebuie să le


execute respectiva entitate structurală (program, funcție, funcție bloc).

PROGRAM <identificator> FUNCTION_BLOCK <identificator> FUNCTION <identificator>: <tip data>


Variabile interfata Variabile interfata Variabile interfata

Variabile locale Variabile locale Variabile locale

Lista instructiuni Lista instructiuni Lista instructiuni


…. …. ….
…. …. ….

END_PROGRAM END_FUNCTION_BLOCK END_FUNCTION


a b c
Fig.3.4 Structura programelor, funcțiilor și funcțiilor bloc

Instrucțiunile aferente unui program, funcție sau funcție bloc sunt editate
într-un limbaj de programare. IEC 61131-3 precizează elementele de limbaj și
regulile de utilizare a acestora pentru patru limbaje de programare standardizate:
- limbaje grafice: Ladder Diagram (LD), Function Block Diagram (FBD);
- limbaje textuale: Instruction List (IL), Structured Text (ST).
Același standard descrie și un al cincilea „limbaj”, Sequential Function Chart
(SFC), destinat structurării aplicațiilor (programelor). Aici, prin structurarea unei
aplicații se înțelege reprezentarea acesteia printr-o rețea de elemente conectate
în serie și paralel, fiecare element având execuția condiționată. Acest mod de
structurare are utilitate în proiectarea aplicațiilor, având un rol asemănător cu
schemele logice din programare (informatică). În unele implementări acest mod
de structurare a devenit limbaj de programare (exemplu: S7 Graph, Siemens).
Toate precizările standardelor au caracter de recomandare și nu reprezintă
o obligativitate pentru producători. Astfel, există și alte limbaje de programare a
PLC-urilor care nu sunt standardizate dar care sunt utilizate totuși în practică. De
asemenea, chiar și limbajele standardizate pot fi regăsite în implementările
curente în formă ușor modificată.
Pentru asigurarea funcționalității unei aplicații, toate aceste entități - chiar
dacă sunt definite independent - trebuie să poată fi apelate și executate. Regulile
de apelare a acestora sunt următoarele (Fig.3.5):
- programele pot apela funcții și funcții bloc,
- funcțiile pot apela doar funcții,
- funcțiile bloc pot apela funcții și funcții bloc,
- aceeași entitate nu poate să se apeleze pe ea însăși.

57
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

PROGRAM
Partea declarativa

FUNCTIE BLOC
Partea executiva FUNCTIE BLOC

FUNCTIE

FUNCTIE FUNCTIE

Fig.3.5 Apelarea funcțiilor și funcțiilor bloc

Programele sunt unități de programare organizate intern conform figurii


3.4 a, utilizează memorie, respectiv își memorează intrările, rezultatele
intermediare și ieșirile. Programele pot apela atât funcții cât și funcții bloc. Ele nu
pot fi apelate de funcții sau de funcții bloc.
Funcțiile sunt unități de programare organizate intern conform figurii 3.4 c,
nu utilizează memorie, respectiv nu își memorează intrările, rezultatele
intermediare sau ieșirile. Ele pot fi apelate de programe și funcții bloc. La rândul
lor pot apela alte funcții. IEC 61131-3 definește un set de funcții de bază, cu
utilizare frecventă, care poate fi extins prin funcții definite de utilizator.
Categoriile de funcții standardizate sunt: funcțiile de conversie a tipurilor de date,
funcțiile numerice și aritmetice, funcțiile de manipulare a șirurilor de biți, funcțiile
de comparație și extragere, funcțiile de prelucrare a șirurilor de caractere și
funcțiile de procesare a datelor temporare (vezi IEC 61131-3).
Funcțiile bloc sunt unități de programare organizate intern conform figurii
3.4 b, utilizează memorie, respectiv își memorează intrările, rezultatele
intermediare și ieșirile. Ele pot fi apelate de programe și de alte funcții bloc. Pot la
rândul lor apela funcții și alte funcții bloc. O funcție bloc este caracterizată prin
proprietatea de instanțiere (multiplicare, trecerea de la o structură generală la
una particulară). Fiecare instanțiere a unei funcții bloc este caracterizată printr-un
identificator (nume) și o structură de date asociată variabilelor de intrare, ieșire și
interne. Din fiecare tip de funcție bloc pot fi derivate oricâte instanțieri,
independente unele de alte.

58
Cap.3 Elemente de programare a controlerelor industriale

4. Funcții bloc standard


Funcțiile bloc descrise în cele ce urmează sunt comune tuturor limbajelor
de programare standardizate: bistabile, detectoare de front, temporizatoare,
numărătoare. Proprietățile acestora sunt descrise în conformitate cu standardul
IEC 61131-3. Implementările producătorilor pot extinde proprietățile acestor
funcții, respectiv pot include și alte funcții similare.

4.1 Blocuri bistabile

Acest tip de funcții bloc permit controlul unei variabile de booleene asociate
ieșirii Q a blocului bistabil (Fig.3.6), respectiv permit implementarea software a
metodei tradiționale de automenținere, specifice circuitelor pe bază de relee.

SR RS
BOOL BOOL BOOL BOOL
S1 Q S Q

BOOL BOOL
R R1

a b

Fig. 3.6 Blocuri bistabile IEC 61131-3: a) cu setare dominantă; b) cu resetare dominantă

Un bloc bistabil are două intrări, S (set) și R (reset), și o singură ieșire, Q. Un


semnal 1 logic aplicat pe intrarea S (set) provoacă activarea ieșirii Q (trecerea în 1
logic a acestei ieșiri). Odată ce ieșirea Q a fost activată, se va menține în această
stare indiferent de valoarea logică a intrării S. Un semnal 1 logic aplicat pe intrarea
R (reset) provoacă dezactivarea ieșirii Q (trecerea ieșirii în starea 0 logic). După
dezactivare își va menține starea indiferent de valoarea logică a semnalului aplicat
la intrarea R. Dacă semnalele R și S sunt ambele 0 logic, ieșirea Q își va menține
starea anterioară.

Funcție de modul în care se comportă un bistabil atunci când la intrări se


aplică simultan două semnale de 1 logic, se identifică două tipuri de bistabile:
 cu setare dominantă, aplicarea unui semnal 1 logic pe intrarea S1
determină obligatoriu trecerea ieșirii în 1 logic, indiferent de valoarea
semnalului aplicat pe intrarea R (0 logic sau 1 logic);

59
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

 cu resetare dominantă, aplicarea unui semnal 1 logic pe intrarea R1


determină obligatoriu trecerea ieșirii în 0 logic, indiferent de valoarea
semnalului aplicat pe intrarea S (0 logic sau 1 logic).

4.2 Detectoare de front

În anumite aplicații se impune detectarea momentului declanșării unui


eveniment (frontul pozitiv al variabilei binare asociate evenimentului) sau al
stingerii acestuia (frontul negativ aferent aceleiași variabile). Funcțiile bloc
standard IEC 61131-3 care au aceste proprietăți sunt definite în figura 3.7, în
formă grafică, respectiv în limbaj ST.

R_TRIG FUNCTION_BLOCK R_TRIG


VAR_INPUT CLK: BOOL; END_VAR
BOOL BOOL
CLK Q VAR_OUTPUT Q: BOOL; END_VAR
VAR M: BOOL; END_VAR
a Q:= CLK AND NOT M;
M:= CLK;
END_FUNCTION_BLOCK

F_TRIG FUNCTION_BLOCK F_TRIG


VAR_INPUT CLK: BOOL; END_VAR
BOOL BOOL
CLK Q VAR_OUTPUT Q: BOOL; END_VAR
VAR M: BOOL; END_VAR
b Q:= NOT CLK AND NOT M;
M:= NOT CLK;
END_FUNCTION_BLOCK

Fig. 3.7 Funcții detectoare de front (IEC61131-3): a) front crescător; b) front descrescător

Ieșirea Q a funcției R_TRIG va fi 0 logic tot timpul mai puțin în momentul


apariției frontului crescător pe intrarea CLK, atunci când Q va lua valoarea 1 logic
pentru un singur ciclu de procesare.

Ieșirea Q a funcției F_TRIG va fi 0 logic tot timpul mai puțin în momentul


apariției frontului descrescător pe intrarea CLK, atunci când Q va lua valoarea 1
logic pentru un singur ciclu de procesare.

Descrierile în limbaj ST a celor două funcții bloc din figura 3.7 permit
înțelegerea modului de operare al acestora.

60
Cap.3 Elemente de programare a controlerelor industriale

4.3 Temporizatoare

Temporizatoarele sunt funcții bloc specializate în măsurarea timpului și


semnalizarea întârzierilor în diferite forme. Ele pot fi utilizate pentru introducerea
de întârzieri în procese la pornirea/declanșarea sau oprirea/finalizarea unor
sarcini, pentru semnalizarea anumitor stări ale procesului, pentru operații de
măsurare a intervalelor de timp etc. Standardul IEC 61131-3 prevede trei tipuri de
temporizatoare:
 Temporizatorul Puls (TP - Pulse Timer),
 Temporizatorul cu întârziere la pornire (TON - Timer ON delay),
 Temporizatorul cu întârziere la oprire (TOF - Timer OFF delay).
În general temporizatoarele standardizate (IEC 61131-3) se regăsesc în
mediile de dezvoltare curente. Fiecare producător poate pune la dispoziția
utilizatorilor și alte curente tipuri de temporizatoare cu proprietăți asemănătoare.
În general sunt disponibile 256 de temporizatoare, numerotate de la 0 la 255.
Din punct de vedere structural temporizatoarele sunt funcții bloc cu cel
puțin patru variabile externe (două variabile de intrare și două variabile de ieșire):
IN – variabilă de intrare de tip BOOL, servește pentru inițializarea funcției;
PT – variabilă de intrare de tip TIME, preia valoarea timpului predefinit;
Q – variabilă de ieșire de tip BOOL, își modifică valoarea în funcție de tipul
temporizatorului (TP,TON, TOF);
ET – variabilă de ieșire de tip TIME, măsoară timpul de la apariția frontului
pozitiv pe intrarea IN pentru temporizatoarele TP și TON, respectiv de la apariția
frontului negativ pe intrarea IN pentru temporizatorul TOF.
În figura 3.8 este detaliată reprezentarea grafică a temporizatoarelor
IEC 61131-3, respectiv variabilele specifice ale acestora.

unde:
*** IN – variabilă de intrare (INput)
PT – variabilă de intrare (Preset Time)
BOOL BOOL Q – variabilă de ieșire (Out)
IN Q ET – variabilă de ieșire (Elapsed Time)
TIME TIME
TP (Pulse Timer)
PT ET *** TON (Timer ON delay)
TOF (Timer OFF delay)

Fig. 3.8 Temporizatoare standardizate (IEC 61131-3): reprezentare grafică, intrări, ieșiri

61
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

TP - Temporizatorul Puls (Impuls). La apariția unui front crescător (pozitiv)


pe intrarea IN se declanșează următoarele acțiuni: ieșirea Q trece în 1 logic și
variabila ET se incrementează la fiecare puls al ceasului intern; atunci când
valoarea ET devine egală cu PT (după expirarea timpului predefinit PT) ieșirea Q se
resetează (Q=0). Apariția unui front descrescător la intrarea IN conduce la
resetarea variabilei ET (ET=0). Odată activat temporizatorul (Q=1) ieșirea Q se va
reseta (Q=0) doar la expirarea timpului predefinit PT.

1
IN
0

1
Q
0
PT PT PT

PT

ET
0
t0 t1 t2 t3 t4 t5 t6 t7

Fig. 3.9 Temporizator TP (IEC 61131-3): variația în timp a variabilelor

TON - Temporizatorul cu întârziere la pornire. La apariția unui front


crescător (pozitiv) pe intrarea IN se declanșează următoarele acțiuni: variabila ET
se incrementează la fiecare puls al ceasului intern; atunci când valoarea ET devine

1
IN
0

1
Q
0
PT PT

PT

ET
0
t0 t1 t2 t3 t4 t5 t6 t7

Fig. 3.10 Temporizator TON (IEC 61131-3): variația în timp a variabilelor

62
Cap.3 Elemente de programare a controlerelor industriale

egală cu PT (după expirarea timpului predefinit PT, ET=PS) ieșirea Q devine 1 logic
(Q=1). Apariția unui front descrescător la intrarea IN conduce la resetarea
variabilei ET (ET=0), respectiv a ieșirii Q (Q=0).

TOF - Temporizatorul cu întârziere la oprire. La apariția unui front crescător


pe intrarea IN se declanșează următoarele acțiuni: variabila ET este resetată
(ET=0), ieșirea Q trece în 1 logic; după apariția unui front descrescător la intrarea
IN, variabila ET se incrementează la fiecare puls al ceasului intern; atunci când
valoarea ET devine egală cu valoarea timpului presetat PT (ET=PS), ieșirea Q se
resetează (Q=0). Un nou front crescător conduce la repetarea acțiunilor detaliate
anterior.

1
IN
0

1
Q
0
PT PT

PT

ET
0
t0 t1 t2 t3 t4 t5 t6 t7

Fig. 3.11 Temporizator TOF (IEC 61131-3): variația în timp a variabilelor

Utilizarea temporizatoarelor în aplicații elementare (implementare S7)

În continuare se detaliază soluții concurente de rezolvare a unor sarcini


elementare care necesită utilizarea temporizatoarelor. Abordarea are în vedere
utilizarea de temporizatoare standardizate în rezolvarea aceleiași sarcini, chiar
dacă acest lucru necesită uneori o logică mai complicată. Aplicațiile sunt
implementate în limbaj LD, au rol educațional, iar testarea și studiul lor permit
înțelegerea modului de utilizare al temporizatoarelor IEC 61131-3.

Aplicația 3.1. Se consideră o lampă (L) și un buton normal deschis, cu


revenire (B.) La apăsarea butonului timp de 3 secunde trebuie să se aprindă
lampa. La eliberarea butonului, lampa trebuie să se stingă.

63
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Tabelul 3.5 Aplicația 3.1 - Rezolvare


Soluția1:
Temporizator TP
- utilizare improprie a
temporizatorului TP pentru
rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

Soluția 2:
Temporizator TON
- utilizare naturală a
temporizatorului TON
pentru rezolvarea sarcinii
(logică simplă)
Soluția 3:
Temporizator TOF
- utilizare improprie a
temporizatorului TOF
pentru rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

Aplicația 3.2. Se consideră o lampă (L) și un buton normal deschis, cu


revenire (B). La apăsarea butonului trebuie să se aprindă lampa. La eliberarea
butonului lampa trebuie să mai rămână aprinsă încă 3 secunde.
Tabelul 3.6 Aplicația 3.2 - Rezolvare
Soluția 1:
Temporizator TP

- utilizare improprie a
temporizatorului TP pentru
rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

64
Cap.3 Elemente de programare a controlerelor industriale

Soluția 2:
Temporizator TON

- utilizare improprie a
temporizatorului TON
pentru rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

Soluția 3:
Temporizator TOF

- utilizare naturală a
temporizatorului TOF
pentru rezolvarea sarcinii

Aplicația 3.3. Se consideră o lampă (L) și un buton normal deschis, cu


revenire (B). La apăsarea butonului trebuie ca lampa să se aprindă și să stea
aprinsă timp de 3s. Eliberarea butonului nu trebuie să inducă efecte asupra lămpii.

Tabelul 3.7 Aplicația 3.3 - Rezolvare


Soluția 1:
Temporizator TP

- utilizare naturală a
temporizatorului TP pentru
rezolvarea sarcinii
(logică simplă)

Soluția 2:
Temporizator TON

- utilizare improprie a
temporizatorului TON
pentru rezolvarea sarcinii
(logică complicată)
- necesită introducerea unei
variabile suplimentare M0.0

65
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

4.4 Numărătoare

Numărătoarele sunt funcții bloc specializate în contorizarea evenimentelor


și semnalizarea numărului acestora în diferite condiții. Ele trebuie să poată
număra impulsuri, să memoreze numărul acestora, să poată fi interogate, să
poată fi pornite și oprite, să semnalizeze atingerea unui anumit număr predefinit
de evenimente.
Standardul IEC 61131-3 prevede trei tipuri de numărătoare:
 Numărătorul incremental (CTU –Up Counter),
 Numărătorul decremental (CTD – Down Counter),
 Numărătorul mixt (CTUD – Up-Down Counter).

În general numărătoarele standardizate (IEC 61131-3) se regăsesc în mediile


de dezvoltare curente. Pe lângă acestea fiecare producător poate pune la
dispoziția utilizatorilor și alte tipuri de numărătoare cu proprietăți asemănătoare.
În general sunt disponibile 256 de numărătoare, numerotate de la 0 la 255.
Din punct de vedere structural numărătoarele incrementale și
decrementale (CTU, CTD) sunt funcții bloc cu cel puțin cinci variabile externe (trei
variabile de intrare și două variabile de ieșire):
CU,CD (Counter Up, Counter Down) – variabilă de intrare de tip BOOL
pentru sesizarea fronturilor pozitive la intrarea numărătorului;
R,LD (Reset, Load) – variabilă de intrare de tip BOOL pentru sesizarea
comenzii de inițializare a numărătorului;
PV (Preset Value)– variabilă de intrare de tip INT, preia o valoare predefinită
de utilizator;
Q (QU,QD) – variabilă de ieșire de tip BOOL, își modifică valoarea în funcție
de tipul numărătorului (CTU,CTD);
CV (Counter Value) – variabilă de ieșire de tip INT, înregistrează numărul de
fronturi pozitive pe intrarea CU și/sau CD, funcție de tipul numărătorului.
Numărătoarele mixte (CTUD) utilizează toate variabilele definite anterior:
CU, CD, R, LD, PV pentru intrări, respectiv QU, QD, CV, pentru ieșiri.
În figura 3.12 sunt descrise reprezentarea grafică și codul sursă în limbaj ST
aferent numărătoarelor IEC 61131-3. În ST atributele R_EDGE și F_EDGE pot fi
utilizate pentru identificarea frontului crescător sau descrescător asociat unei
variabile booleene.

66
Cap.3 Elemente de programare a controlerelor industriale

FUNCTION_BLOCK CTU
VAR_INPUT CU: BOOL R_EDGE;
CTU R:BOOL; PV:INT; END_VAR
VAR_OUTPUT Q: BOOL; CV:INT; END_VAR
BOOL BOOL IF R
CU Q
THEN CV:= 0;
BOOL
R ELSIF CU AND (CV < PVmax)
THEN CV:= CV+1;
END_IF;
INT INT
PV CV Q:= (CV >= PV);
END_FUNCTION_BLOCK

FUNCTION_BLOCK CTD
VAR_INPUT CD: BOOL R_EDGE;
CTD LD:BOOL; PV:INT; END_VAR
VAR_OUTPUT Q: BOOL; CV:INT; END_VAR
BOOL BOOL
CD Q IF LD
THEN CV:= PV;
BOOL
LD ELSIF CD AND (CV > PVmin)
THEN CV:= CV-1;
INT
PV CV INT END_IF;
Q:= (CV <= 0);
END_FUNCTION_BLOCK

FUNCTION_BLOCK CTUD
VAR_INPUT CU: BOOL R_EDGE; ...
. . . . . . . . . . . . .............................................................................................................. . .

CTUD IF R
BOOL BOOL THEN CV:= 0;
CD QU ELSIF LD
BOOL BOOL
LD QD THEN CV:= PV;
BOOL ELSE
R IF NOT (CU AND CD)
BOOL
LD THEN
INT
PV CV INT IF CU AND (CV < PVmax)
THEN CV:= CV+1;
ELSIF CD AND (CV > PVmin)
THEN CV:= CV-1;
END_IF;
END_IF;
END_IF;
QU:= (CV >= PV);
QD:= (CV <= 0);
END_FUNCTION_BLOCK

Fig. 3.12 Numărătoare standardizate (IEC 61131-3): reprezentare grafică, cod sursă

67
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Utilizarea numărătoarelor în aplicații elementare (implementare S7)

În continuare se detaliază câteva soluții de rezolvare a unor sarcini


elementare care necesită utilizarea numărătoarelor. Aplicațiile sunt implementate
în limbaj LD, au rol educațional, iar testarea și studiul lor permit înțelegerea
modului de utilizare al numărătoarelor IEC 61131-3.

Aplicația 3.4. Se consideră o lampă L și două butoane normal deschise, cu


revenire (B1 și B2). După 5 apăsări ale butonului B1 lampa trebuie să se aprindă.
Apăsarea butonului B2 conduce la stingerea lămpii și resetarea sistemului
(numărătorului). Aplicația trebuie să poată rula ciclic.

Tabelul 3.8 Aplicația 3.4 - Rezolvare


Soluție 1:
Numărător incremental

La apăsarea butonului B2,


variabila MW0 se încarcă cu
valoarea 0. La fiecare
apăsare a butonului B1,
variabila MW0 se
incrementează cu o unitate.

Dacă MW0 ≥ 5 se aprinde


lampa L.

Soluție 2:
Numărător decremental

La apăsarea butonului B2,


variabila MW0 se încarcă cu
valoarea 5. La fiecare
apăsare a butonului B1,
variabila MW0 se
decrementează cu o unitate.

Dacă MW0 ≤ 0 se aprinde


lampa L.

68
Cap.3 Elemente de programare a controlerelor industriale

Aplicația 3.5. Se consideră o parcare cu 10 locuri. La intrarea în parcare


există un sistem optic prevăzut cu 2 lămpi: una verde (L1) și una roșie (L2).
Parcarea este prevăzută de asemenea cu doi senzori, S1 și S2, care pot sesiza
mașinile care intră, respectiv mașinile care iasă. Se cere să fie aprinsă lumina
verde dacă există locuri libere în parcare, iar în caz contrar să fie aprinsă lumina
roșie.

Tabelul 3.9 Aplicația 3.5 - Rezolvare


Soluție 1:
Numărător mixt

S1 – senzor intrare
S2 – senzor ieșire
L1 – lumină verde
L2 – lumină roșie
M0.0 – memorie auxiliară

R – buton auxiliar care


permite resetarea
sistemului, adică:
MW20=0, M0.0=0.

La apăsarea butonului R numărătorul se resetează, respectiv variabila CV


(MW20) se încarcă cu valoarea 0 și ieșirea Q (M0.0) devine 0 (L1, lumina verde se
aprinde). La fiecare front pozitiv înregistrat pe intrarea CU (S1, sesizare mașină
care intră în parcare) variabila CV (MW20) este incrementată cu o unitate,
respectiv la fiecare front pozitiv sesizat la intrarea CD (S2, sesizare mașină care
iese din parcare) variabila CV (MW20) este decrementată cu o unitate. Dacă
valoarea lui CV (MW20) depășește valoarea prestabilită (PV=10) atunci ieșirea
numărătorului devine 1, respectiv lumină verde se stinge și se aprinde lumina
roșie. Dacă MW0 ≤ 10 se aprinde lampa L1 (lumină verde).

69
Cap.4 Limbaje de programare (IEC 61131-3)

1. Limbajul LD (Ladder Diagram)


2. Limbajul FBD (Function Block Diagram)
3. Limbajul IL (Instruction List)
4. Limbajul ST (Structured Text)

Implementarea unei aplicații pe o mașină necesită existența unui


limbaj de programare a acelei structuri hardware. Limbajele de
programare aferente PLC-urilor au fost dezvoltate de producătorii
acestor sisteme, în timp apărând o multitudine de limbaje. Acestea au
evoluat de la forme apropiate de mașină (limbaje de asamblare), la forme
apropiate de om (limbaje de nivel înalt). Pentru reglementarea
domeniului au apărut standardele internaționale elaborate de comisii de
specialiști. Astfel, prin IEC 61131-3 (2013) sunt specificate regulile de
sintaxă și semantică aferente unor limbaje de programare considerate de
referință în programarea PLC-urilor: Ladder Diagram (LD), Instruction List
(IL), Function Block Diagram (FBD) și Structured Text (ST). În cadrul
acestui capitol sunt detaliate regulile de sintaxă și semantică aferente
acestor limbaje, respectiv modul lor de utilizare în elaborarea aplicațiilor
industriale.

70
Cap.4 Limbaje de programare

1. Limbajul LD (Ladder Diagram)


Limbajul LD (Ladder Diagram), în traducere Diagrame Scară, este un limbaj
grafic de largă popularitate în programarea PLC-urilor. Este un limbaj fundamental
pe care trebuie să și-l însușească toți programatorii de PLC-uri. S-ar putea spune
că programarea începe cu LD, acesta fiind limbajul cu cea mai mare utilizare.
La apariția primelor PLC-uri (anii 70) structurile dominante de control erau
construite pe bază de relee și erau proiectate de specialiștii în circuite electrice.
PLC-urile au fost proiectate tocmai pentru înlocuirea acestor structuri de control,
însă programarea lor trebuia să fie făcută de același personal. Ca atare acest
limbaj a fost gândit ca o imitație (substitut) a acestor circuite, oferind posibilitatea
utilizării metodelor convenționale de proiectare a circuitelor de comandă pe bază
de relee în programarea noilor structuri de control. O aplicație realizată în LD
arată ca o diagramă de comandă pe bază de relee, rotită cu 90 de grade, iar
entitățile fundamentale cu care operează limbajul sunt „contactele” și „bobinele”.
Astfel, un utilizator cu pregătire de bază în domeniul circuitelor electrice poate
trece ușor la programarea unui PLC în limbajul LD, după o scurtă instruire.
Structura programelor LD. Un program realizat în limbajul LD este o
structură virtuală alcătuită din fire de execuție paralele (Fig.4.1) care sunt
procesate ciclic la o frecvență ridicată astfel încât aplicația simulează un circuit
electric în montaj paralel.
Partea conditionala (C) Partea executiva (E)

R1 Conditie C1 Executie E1

R2 Conditie C2 Executie E2

Rn Conditia Cn Executie E3

Fig.4.1 Structura unei aplicații în limbajul LD

În contextul acestui limbaj fiecare fir de execuție poartă numele de ramură


sau rețea. Numărul maxim de ramuri depinde de implementare, însă este
suficient de mare astfel încât să nu creeze probleme în dezvoltarea aplicațiilor.

71
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Fiecare ramură este alcătuită din două părți:


 partea condițională – include o funcție logică (Cn) a cărei valoare de adevăr
se evaluează (rezultatul evaluării poate fi 0 logic sau 1 logic);
 partea executivă – include un set de operații sau instrucțiuni (En) care se
execută doar dacă valoarea de adevăr a părții condiționale este 1 logic.
Elementele fundamentale care contribuie la constituirea părții condiționale
poartă numele de contacte, iar cele care contribuie la constituirea părții executive
poartă numele de bobine. Contactele se reprezintă grafic prin două linii paralele,
iar bobinele prin două paranteze (Fig.4.2). Contactele și bobinele reprezintă
operanzi ai limbajului ce adresează resursele sistemului (variabile, funcții,
programe, adrese de memorie etc.), pentru evaluare, operare și manipulare în
acord cu obiectivul urmărit.

Partea conditionala (C) Partea executiva (E)


Limbaj textual echivalent
C1 Q0.1 E1
I0.0
R1 IF I0.0 THEN Q0.1

I0.1 I0.2 C2 Q1.4 E2


IF (I0.1 AND I0.2) THEN Q1.4
R2

Cn En IF Cn THEN En
Rn

a b
Fig.4.2 a) Structura unei aplicații în limbajul LD
b) Instrucțiuni echivalente în limbaj textual
Pentru fiecare ramură (R1,...,Rn) a aplicației dezvoltate în LD se poate scrie
o structură elementară de program, de forma:
> IF (condiție) THEN (execuție)
Adică, operațiile aferente părții de execuție se efectuează doar dacă funcția
logică aferentă părții condiționale are valoarea 1 logic. Unele operații produc
efecte doar atât timp cât partea condițională se menține în 1 logic, alte tipuri de
operații produc efecte și după trecerea în 0 logic a părții condiționale.
Contacte și bobine. Modalitățile de evaluare și operare a operanzilor, la
nivel de contact și bobină, sunt descrise în tabelul 4.1, în conformitate cu
IEC 61131-3. În mediile de implementare producătorii pun la dispoziția
utilizatorilor și alte tipuri de contacte și bobine cu proprietăți extinse.

72
Cap.4 Limbaje de programare

Tabel 4.1 Tipuri fundamentale de contacte și bobine (IEC 61131-3)

*** Contact normal deschis


Preia valoarea operandului asociat (***), 1 logic sau 0 logic.
Dacă operandul asociat este 1 logic, contactul este închis.
Dacă operandul asociat este 0 logic, contactul este deschis.
*** Contact normal închis
/ Preia valoarea negată a operandului asociat (***), 1 logic sau 0 logic.
Dacă operandul asociat (***) este 1 logic, contactul este deschis.
Dacă operandul asociat (***) este 0 logic, contactul este închis.

*** Contact sesizare front negativ


N Dacă operandul asociat (***) trece din 1 în 0 logic (sesizare front
negativ), contactul devine închis pentru un singur ciclu al PLC-ului.
În orice altă situație contactul este deschis.
*** Contact sesizare front pozitiv
P Dacă operandul asociat (***) trece din 0 în 1 logic (sesizare front
pozitiv), contactul devine închis pentru un singur ciclu al PLC-ului.
În orice altă situație contactul este deschis.
*** Bobină (Ieșire logică)
Transmite operandului (***) valoarea logică a părții condiționale (0 logic
sau 1 logic).

*** Bobină negată (Ieșire logică negată)


/ Transmite operandului (***) valoarea logică negată a părții condiționale
(0 logic sau 1 logic).

Bobină sesizare front pozitiv


***
P La sesizarea unui front pozitiv în partea stângă, se transmite
operandului (***) un semnal de 1 logic pentru o perioadă aferentă unui
singur ciclu al PLC-ului. În partea dreaptă se transmite permanent
semnalul din partea stângă.
Bobină sesizare front negativ
***
N La sesizarea unui front negativ în partea stângă, se transmite
operandului (***) un semnal de 1 logic pentru o perioadă aferentă unui
singur ciclu al PLC-ului. În partea dreaptă se transmite permanent
semnalul din partea stângă.
Bobină SET (Variabilă operată cu instrucțiunea SET)
***
S La sesizarea unui semnal de 1 logic în partea stângă, variabila (***) este
operată prin instrucțiunea SET, respectiv trece în 1 logic indiferent de
valoarea ei anterioară.
Bobină RESET (Variabilă operată cu instrucțiunea RESET)
***
R La sesizarea unui semnal de 1 logic în partea stângă, variabila (***) este
operată prin instrucțiunea RESET, respectiv trece în 0 logic indiferent de
valoarea ei anterioară.

73
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Procesarea programelor LD. Un program LD este constituit din ramuri


(rețele, fire de execuție) conectate în paralel. Rularea programului implică
procesarea fiecărei ramuri și operarea instrucțiunilor aferente. Ramurile se
procesează pe rând, de la stânga la dreapta și de sus în jos, așa cum este specificat
în figura 4.3. Un ciclu de procesare1 implică următoarele etape:
 Actualizarea memoriei imagine de proces a intrărilor, unde se înregistrează
valoarea fiecărei intrări a procesului.
 Procesarea instrucțiunilor aferente programului:
- se evaluează partea condițională a primei ramuri (unde variabilele sunt
preluate din memorie), apoi se realizează operațiile aferente părții
executive ai aceleiași ramuri (unde rezultatul acestor prelucrări, variabile
interne și de ieșire, se înregistrează tot în memorie);
- se continuă în acest fel, ordonat, de sus în jos, pentru fiecare ramură în
parte, până la parcurgerea tuturor ramurilor programului.
 După finalizarea etapei anterioare se trece la actualizarea simultană a
ieșirilor fizice ale procesului cu valorile aferente variabilelor de ieșire care se
preiau din memorie (memoria imagine de proces a ieșirilor).
Aceste trei etape se derulează ciclic la o frecventă prestabilită. Se
subînțelege că și ieșirile se actualizează ciclic, la aceeași frecvență (ex.100 Hz).

PROGRAM
ACTUALIZARE INTRARI
R1 Citeste intrarile si stocheaza
valoarea lor in memorie.

R2
PROCESARE INTRUCTIUNI PROGRAM
Se proceseaza programul linie cu linie,
de sus in jos si de la stanga la dreapta:
R3 se citesc toate variabilele din memorie,
se realizeaza operatiile specifice iar
rezultatele obtinute se salveaza tot in
R4 memorie pe masura ce se parcurge
programul.

Rn
ACTUALIZARE IESIRI
Citeste din memorie si
END_PROGRAM actualizeaza iesirile fizice.

Fig.4.3 Mecanismul de procesare ciclică a programului utilizator

1
Pentru înțelegerea în detaliu a modului în care se realizează procesarea unui program trebuie
aprofundate două noțiuni elementare: procesarea ciclică și imaginea de proces (vezi Cap.1, pag.6 și
Cap.3, pag.47).

74
Cap.4 Limbaje de programare

Operații de bază. Pentru înțelegerea modului în care se evaluează și


operează variabile unui proces (operanzii) prin intermediul diferitelor tipuri de
contacte și bobine se consideră spre analiză următoarele cazuri:

 Utilizare bobină simplă, Fig.4.4 a  Utilizare bobină negată, Fig.4.4 b


Variabila de ieșire Q2.1 primește Variabila de ieșire Q2.1 primește
valoarea variabilei de intrare I0.1. Din valoarea negată a variabilei de intrare
punct de vedere matematic este I0.1, respectiv:
reprezentată funcția identitate, Q2.1 = NOT (I0.1)
conform căreia: Q2.1 = I0.1
I0.1 Q2.1 I0.1 Q2.1

1 1
I0.1 I0.1
0 0
timp timp

1 1
Q2.1 Q2.1
0 0
timp timp

a b
Fig.4.4 Structură LD elementară:
a) utilizare bobină simplă, b) utilizare bobină negată

 Utilizare bobină SET, Fig.4.5 a  Utilizare bobină RESET, Fig.4.5 b


Când variabila de intrare I0.1 devine 1 Când variabila de intrare I0.1 devine 1
logic, atunci variabila de ieșire Q2.1 logic, atunci variabila de ieșire Q2.1
primește valoarea de 1 logic și își primește valoarea de 0 logic și își
păstrează această valoare până la o păstrează această valoare până la o
comandă RESET pentru variabila Q2.1. comandă SET pentru variabila Q2.1.

I0.1 Q2.1 I0.1 Q2.1


S R

1 1
I0.1 I0.1
0 0
timp timp

1 1
Q2.1 Q2.1
0 0
timp timp

a b
Fig.4.5 Structură LD elementară:
a) utilizare bobină SET, b) utilizare bobină RESET

75
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

 Utilizare bobină specială  Utilizare bobină specială


(sesizare front pozitiv), Fig.4.6 a (sesizare front negativ), Fig.4.6 b
Bobina specială -(P)- transmite mai Bobina specială -(N)- transmite mai
departe (la Q2.1) semnalul din partea departe (la Q2.1) semnalul din partea
stângă (de la I0.1), însă pe de altă stângă (de la I0.1), însă pe de altă
parte sesizează fiecare front pozitiv de parte sesizează fiecare front negativ
la intrarea ei și transmite operandului de la intrarea ei și transmite
asociat (variabila M0.0) valoarea de 1 operandului asociat (variabila M0.0)
logic, care se păstrează în M0.0 timp valoarea de 1 logic, care se păstrează
de o perioadă a ciclului de procesare în M0.0 timp de o perioadă a ciclului
(scanare) al PLC-ului. de procesare (scanare) al PLC-ului.

I0.1 M0.0 Q2.1 I0.1 M0.0 Q2.1


P N

1 1
I0.1 I0.1
0 0
timp timp

1 1
Q2.1 Q2.1
0 0
timp timp
1 1
M0.0 M0.0
0 0
timp timp

a b

Fig.4.6 Structură LD elementară:


a) utilizare bobină specială – sesizare front pozitiv
b) utilizare bobină specială – sesizare front negativ

Operații cu funcții. Prin gruparea adecvată a operanzilor într-o structură LD


pot fi implementate funcțiile logice elementare (SI, SAU, SAU exclusiv), respectiv
pot fi obținute și alte funcții cu utilitate în aplicațiile industriale (pornirea și
oprirea proceselor, memorarea unor stări etc).
Alături de elemente fundamentale de circuit (contacte, bobine) în structura
programului pot să apară și elemente avansate de operare de tipul funcțiilor
aritmetice, funcțiilor de compare, operațiilor binare etc. Implementarea și
utilizarea acestor funcții este descrisă în tabelul 4.2.

76
Cap.4 Limbaje de programare

Tabelul 4.2 Funcții LD


Funcția ȘI
I0.0 I0.1 Q2.1
Variabila de ieșire Q2.1 primește
valoarea 1 logic doar dacă ambele
variabile (I0.0, I0.1) au valoarea 1 logic.

Funcția SAU
I0.0 Q2.1
Variabila de ieșire Q2.1 primește
valoarea 1 logic dacă cel puțin una din
I0.1 variabilele de intrare (I0.0 sau I0.1) are
valoarea 1 logic.

Funcția SAU exclusiv (2 operanzi)


I0.0 I0.1 Q2.1
/ Variabila de ieșire Q2.1 primește
valoarea 1 logic dacă una și numai una
I0.0 I0.1
din cele două variabile de intrare (I0.0,
/
I0.1 ) are valoarea 1 logic.

Funcția SAU exclusiv (3 operanzi)


I0.0 I0.1 I0.2 Q2.1
/ / Variabila de ieșire Q2.1 primește
valoarea 1 logic dacă una și numai una
I0.0 I0.1 I0.2
din cele trei variabile de intrare (I0.0,
/ /
I0.1, I0.2 ) are valoarea 1 logic.
I0.0 I0.1 I0.2
/ /

Funcție de memorare - dominantă ON


I0.0 M0.1
Dacă variabila de intrare I0.0 trece în 1
logic atunci și variabila internă M0.1
M0.1 I0.1
devine 1 logic și își păstrează această
/
valoare până când I0.1 devine 1 logic.
Dacă cele două variabile de intrare I0.0
și I0.1 sunt simultan 1 logic, atunci
M0.1 rămâne în 1 logic.

77
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Funcție de memorare - dominantă OFF


I0.0 I0.1 M0.1
/ Dacă variabila de intrare I0.0 devine 1
logic, valoarea ei se păstrează în M0.1
M0.1
atât timp cât variabila I0.1 este 0 logic.
Dacă variabila I0.1 devine 1 logic, atunci
M0.1 este resetată în 0 logic.
Dacă cele două variabile de intrare I0.0
și I0.1 sunt simultan 1 logic, atunci
M0.1 este resetată în 0 logic.

I0.0 Salt la altă ramură (rețea)


N10 Dacă una din variabile I0.0 sau M0.1
M0.1 este 1 logic, atunci în program se
produce un salt de la ramura curentă la
ramura etichetată cu N10, de unde se
N10 continuă executarea instrucțiunilor.
I2.0 I0.7 Q2.5

Funcția de transfer
I0.0 LOAD
BOOL BOOL Permite încărcarea unei variabile cu o
EN ENO anumită valoare, specificată sau
Var_1 adresată la intrarea IN a funcției.
100 IN OUT MW1 Identificatorul funcției ține de
implementare: LOAD, MOVE etc.

Funcții aritmetice
I0.0 ADD
BOOL BOOL Realizează operații aritmetice de bază
EN ENO (adunare, scădere, înmulțire și
împărțire) cu variabilele multibit
var1 IN1 OUT var3 precizate la intrările funcției (IN1 și
IN2), respectiv depune rezultatul la
var2 IN2
ieșire (OUT). Variabilele trebuie să aibă
asociate aceleași tipuri de date (INT,
DINT, REAL etc).

78
Cap.4 Limbaje de programare

Funcții de comparare
MW4 var_1 Q2.1
> = Compară (<, ≤, >, ≥, =, <>) două
MW6 var_2 variabile multibit și rezultatul (0 sau 1
logic) este transmis mai departe.
IF (MW4>MW6 AND var_1=var_2) Variabilele trebuie să aibă asociate
THEN Q2.1 = 1 aceleași tipuri de date (INT, DINT, REAL
etc).

Alături de funcțiile descrise mai sus, standardul IEC 61131-3 precizează și


alte funcții specializate în manipularea șirurilor de biți:

ROR (ROL) - rotirea biților cu o unitate spre dreapta (sau spre stânga);
SHR (SHL) - translatarea tuturor biților spre dreapta (sau spre stânga);
BID - conversia unui număr din reprezentare binară în reprezentare
BCD (Binar Codat Decimal);
DEB - conversia unui număr din BCD în reprezentare binară;
SWAP - schimbarea între ei a octeților MSB și LSB ai unei variabile
multibit (16 biți);
CPL - complementul în baza doi al unei variabile multibit;
INV - inversul, bit cu bit, al unei variabile multibit.

79
CURS 7

1. PROIECTAREA APLICAȚIILOR INDUSTRIALE

Prin proiectarea unei aplicații industriale se înțelege procesul de elaborare a programului de


conducere și control al unui sistem industrial automat, demers structurat pe faze de proiectare, definite
și fundamente științific. Se presupune că sistemul/procesul este dat (cunoscut), iar proiectarea vizează
exclusiv elaborarea programelor care să conducă sistemul dat conform unui caiet de sarcini sau specificații
de proiectare.
Abordarea (științifică) a acestui demers comportă structurarea fluxului de prelucrare a datelor sub
forma unor scheme, diagrame, grafuri care permit vizualizarea, analiza și optimizarea prelucrărilor
programate a fi efectuate pentru rezolvarea unei probleme. Toate aceste reprezentări grafice se bazează
în esență pe organizarea unor etape de procesare în structuri seriale, alternative și repetitive. Metodele
de proiectare vizează așadar transpunerea prin diverse abordări a unui graf de implementare în limbaj de
programare.
Astfel, procesul de proiectare comportă parcurgerea următoarelor etape:
• Informarea. Se referă la identificarea procesului/sistemului și înțelegerea modului de
funcționare: se identifică intrările procesului (circuitul de comandă, sistemul senzorial, numărul
de intrări digitale, analogice etc), ieșirile procesului (circuitul de acționare, numărul de ieșiri
digitale, analogice etc), tipul PLC-ului (specificațiile hardware aferente, CPU, module
intrare/ieșire), se analizează și înțelege caietul de sarcini sau specificațiile de proiectare.

• Concepția. Se referă la organizarea/structurarea fluxului de prelucrări specifice procesului și la


modularizarea părților independente de program. Rezultatul acestor operații sunt graful de
implementare (diagrama funcțională secvențială) și modulele funcționale aferente unor părți
independente de program. Modulele nu se elaborează concret în această fază, doar se identifică
funcțiile și operațiile pe care trebuie să le efectueze.

• Implementarea. Se referă la transpunerea într-un limbaj de programare a funcțiilor specifice


modulelor, respectiv a grafului de implementare. Rezultatul acestor operații sunt unitățile de
program (programul principal, funcții, funcții bloc) elaborate în limbaje compatibile cu mașina pe
care se vor încărca. Transpunerea grafului de implementare (diagrama SFC) într-un limbaj de
programare îmbracă forme specifice în funcție de limbajul ales. Dacă module funcționale necesită
memorie, atunci ele se implementează sub formă de funcții bloc. Pachetul complet necesar
implementării trebuie să specifice și hardware-ul adresat de aplicație, respectiv tipul de CPU, tipul
și adresele interfețelor de intrare și ieșire, adresele intrărilor și ieșirilor prin care PLC-ul comunică
cu procesul etc.

• Testarea. Implică două etape:


a. Testarea și verificarea funcționalității fiecărei subrutine independente (funcții, funcții bloc),
respectiv a aplicației complete (în ansamblul ei) pe un sistem simulat. După remedierea
eventualelor disfuncțiuni sesizate, respectiv după trecerea cu succes a tuturor operațiilor de
testare prevăzute în această etapă, se trece la următoarea etapă.
b. Testarea și verificarea funcționalității programului pe sistemul/procesul real. Se verifică părțile
independente de program (funcții, funcții bloc) și apoi, pas cu pas, pentru fiecare etapă de
funcționare se verifică condițiile de operare a procesului în ansamblul lui.
Fazele de implementare și testare pot să interfereze: pe măsură ce se elaborează câte o unitate
de program, acestea pot fi imediat testate prin simulări.

• Realizarea documentației tehnice. Se referă la realizarea unor specificații tehnice din care
utilizatorul să poată să înțeleagă care este comportamentul sistemului automat în fiecare fază a
sa de funcționare. Specificațiile pot fi sub formă de diagrame GRAFCET sau descrieri în detaliu a
fiecărei unități de program aferent aplicației, în limbajul în care au fost realizate. Standardul IEC
60848 stabilește GRAFCET-ul ca principal mijloc de comunicare între proiectanți și utilizatorii de
sisteme automate.

2. CONCEPȚIA (structurare și modularizare)


Programarea structurată a aplicațiilor industriale se bazează pe două principii: modularizarea
subrutinelor independente și structurarea fluxului de prelucrare a informației. Conceptul de programare
structurată este fundamentat în domeniul programării informatice, însă se aplică și în proiectarea
aplicațiilor industriale. În acest sens standardul IEC 61131-3 definește, ca principal instrument de
structurare a programelor pentru PLC-uri, diagrama funcțională secvențială (SFC – Sequential Function
Chart). Prin acest instrument pot fi structurate printr-o procedură unitară aplicații elaborate în orice limbaj
de programare.
Structurarea se referă la organizarea internă a unui program sau a unui flux de prelucrări de date
prin intermediul unor elemente structurale cu tipologie standard (predefinită și cunoscută). În cazul
aplicațiilor industriale automate structurarea este reglementată prin IEC 61131-3 iar elementele
fundamentale pe care se bazează aceasta sunt: etapele (pașii), tranzițiile și acțiunile, care pot fi combinate
în structuri liniare, selective și repetitive.
Modularizarea adresează părțile de program independente aferente unor sarcini specifice. Fiecare
modul trebuie să poată comunica cu alte module sau programe printr-o interfață constituită dintr-un set
de variabile (parametri). Modul de definire al modulelor trebuie să permită testarea, depanarea și
modificarea acestora, independent de program sau de restul modulelor.
Structurarea și modularizarea programelor aferente aplicațiilor industriale conduc la avantaje
importante care au în vedere următoarele componente:
• Claritatea programelor. Aplicațiile devin mult mai clare, mai compacte, deoarece sarcinile
principale (de execuție) sunt structurate pe module funcționale care sunt apelate secvențial, în
funcție de fazele/etapele procesului care se derulează la un moment dat. În formă structurată
aplicațiile pot fi înțelese mult mai simplu și de personalul specializat care nu a contribuit neapărat
la proiectarea lor, dar care are ca și sarcină de serviciu întreținerea sau extinderea aplicațiilor.
• Flexibilitatea și productivitatea. Modulele funcționale pot fi reutilizate și în alte aplicații odată ce și-
au dovedit utilitatea și eficiența.
• Modificarea și extinderea aplicațiilor. O caracteristică extrem de importantă de care trebuie să țină
seama proiectanții este aceea de a asigura condiții favorabile de extensie a programelor realizate.
De foarte multe ori programele trebuie adaptate unor cerințe de funcționalitate extinsă sau
modificărilor periodice care apar în procese. O elaborare structurată a programelor permite ușor
extinderea sau modificarea lor prin adăugarea de noi module funcționale sau modificarea celor
existente. Zonele în care se produc modificări sunt mult mai puține în cazul programării structurate.
• Simplificarea proiectării. Structurarea conceptuală a aplicațiilor în secțiuni cu tipologie cunoscută,
respectiv cunoașterea modalității de conversie a fiecărui element structural în forme de
implementare aferente limbajelor de largă circulație, permit o abordare unitară a oricărei probleme
de programare a unui sistem industrial, procesul de proiectare al algoritmului de control
reducându-se la structurarea fluxului procesului.
• Divizarea muncii. În cazul proiectelor mari modulele funcționale pot fi elaborate în paralel de mai
mulți programatori, dacă sunt definite clar funcțiile pe care trebuie să le execute fiecare modul.
• Testarea aplicației. Prin modularizarea unor părți de program (orientată pe anumite funcționalități,
sarcini) și interfațarea acestora, fiecare astfel de unitate de program (modul) poate fi testată și
verificată separat, independent de restul aplicației, simplificându-se astfel procesul de identificare
și de remediere a eventualelor disfuncțiuni.
În general aplicațiile industriale sunt aplicații secvențiale ale căror etape (faze de execuție) pot fi
organizate în secvențe liniare (serie) și paralele. Structurile elementare de organizare definite prin IEC
61131-3 sunt secvențele liniare, divergențele și convergențele de tipul ȘI (AND) respectiv SAU (OR). Aceste
structuri se constituie la rândul lor prin combinarea a trei elemente: etape, tranziții și acțiuni. Regulile de
structurare (SFC) definite de IEC 61131-3 permit implementarea celor trei tipuri de structuri fundamentale
specifice programării structurate care în baza teoremei Böhm-Jacopini pot rezolva orice algoritm:
secvențe liniare, secvențe alternative și secvențe repetitive.
În acest context problema proiectării unui algoritm de control aferent unui proces industrial se
transformă într-o problemă de structurare a fluxului acelui proces. Odată structurat procesul, fiecare
element structural se va converti în instrucțiuni specifice unui anumit limbaj, fie el textual, fie el grafic.
În literatura de specialitate sunt descrise și alte metode de proiectare a programelor industriale,
însă abordarea convențională se bazează pe structurarea aplicațiilor prin diagrame funcționale care pot
fi dezvoltate utilizând elementele de structurare SFC (Sequential Function Chart), conform IEC 61131-3,
sau reprezentările GRAFCET, conform IEC 60848, sau chiar alte tipuri de reprezentări grafice secvențiale,
mai mult sau mai puțin apropiate de precizările standardelor.

Structurarea aplicațiilor -> graful de implementare

Structurarea unei aplicații implică divizarea procesului (fluxului de prelucrare a datelor aferent
procesului controlat) în etape (steps) care sunt interconectate prin legături orientate, trecerile între etape
fiind condiționate prin tranziții. Fiecărei etape îi corespunde un set de acțiuni corespunzătoare cu
prelucrările specifice etapei. Structurarea îmbracă forme diferite pentru fiecare aplicație în parte și se
reprezintă grafic sub forma unor diagrame (graf de implementare) care combină etapele în diverse moduri
prin utilizarea a cinci elemente structurale: secvențe liniare (seriale), divergențe ȘI, divergențe SAU,
convergențe ȘI, convergențe SAU.
În figura 1 se reprezintă o diagramă secvențială (graf de implementare) care utilizează elementele
structurale fundamentale într-o aplicație virtuală. Pentru referirea etapelor s-au utilizat nume simbolice
S0-S10. Tranzițiile (T0-T10) și acțiunile (A1-A10) sunt reprezentate de asemenea simbolic. În această
aplicație, numerotarea etapelor, tranzițiilor și acțiunilor s-a efectuat după regulile de notare ale
elementelor matricelor (după linii și coloane). În diagramele reale atât tranzițiile cât și acțiunile se
reprezintă în formă detaliată.
Prin combinarea structurilor elementare se pot obține secțiuni liniare, alternative sau repetitive
care, în baza teoriei programării structurate [27], sunt suficiente pentru realizarea oricărui program.
S0
T0
S1 A1 Secvenţă liniară
T1
S2 A2
T2
Divergenţă ŞI (AND)
S31 A31 S32 A32
T32
S42 A42
Convergenţă ŞI (AND)
T4
Convergenţă SAU (OR)
S5 A5

Divergenţă SAU (OR)


T51 T52
S61 A61 S62 A62
T61 T62
S71 A71 S72 A72
T71 T72
S81 A81
T81
Convergenţă SAU (OR)

S9 A9

T91 T92
Divergenţă SAU (OR)
S10 A10
T10

Fig.1 Structurarea unei aplicații pe baza reglementărilor SFC, IEC 61131-3. Etapele de funcționare ale unui sistem
automat sunt reprezentate și organizate utilizând elemente structurale standardizate: secvențe liniare, divergențe
ȘI/SAU și convergențe ȘI/SAU. Elementele structurale la rândul lor pot fi combinate în diverse structuri, în funcție de
complexitatea aplicației.
Etapele. În general, aplicațiile industriale sunt aplicații secvențiale caracterizate prin etape sau faze care
se declanșează și succed în anumite condiții. Divizarea procesului (programului) în etape funcționale se
face pe cale logică, fiecărei etape fiindu-i asociate un set de acțiuni (prelucrări specifice) care se efectuează
atunci când etapa respectivă este activă. Fiecare etapă este caracterizată printr-un nume unic într-un
program.
Etapele sunt de două tipuri:
• Etapa simplă – reprezentată printr-un dreptunghi simplu în care se trece numele etapei.
• Etapa de inițiere (de intrare) – reprezentată printr-un dreptunghi dublu în interiorul căruia se trece
numele etapei. Fiecare diagramă trebuie să aibă o singură etapă inițială care se activează prima
atunci când este apelată diagrama (unitatea de program).

Tranzițiile. Trecerile de la o etapă la alta se fac condiționat prin intermediul tranzițiilor. Din punct de
vedere tehnic, tranziția este o expresie booleană care se evaluează (1 logic sau 0 logic) și valoarea ei
condiționează activarea etapei următoare și dezactivarea etapei curente. O tranziție se reprezintă printr-
o bară orizontală poziționată pe legătura dintre etape și însoțită de o expresie booleană. Reprezentarea
expresiei booleene aferentă unei tranziții se face utilizând elemente de limbaj ST, IL, LD sau FBD.
Reguli de evoluție. Execuția oricărui program se bazează pe o anumită logică și pe o anumită ordine de
efectuare a operațiilor și a prelucrărilor specifice. La nivelul programatorului cea mai simplă logică de
planificare (programare) a acestor prelucrări este cea secvențială, inspirată din modul de funcționare al
unui sistem industrial. Diagramele SFC imită aceste procese și permit organizarea programului în etape
care se activează și execută în anumite condiții.
Regulile care descriu condițiile de activare și dezactivare ale etapelor și care reglementează evoluția
prelucrărilor într-o diagramă SFC (IEC 61131-3) sunt:
• Întotdeauna, prima etapă care se activează și execută este etapa de inițiere, reprezentată grafic
printr-un dreptunghi cu conturul dublat.
• Într-o diagramă SFC alternanța etapă -> tranziție, respectiv tranziție -> etapă, trebuie asigurată
întotdeauna. Adică:
- două etape nu pot fi legate direct, ele trebuie separate printr-o tranziție;
- două tranziții nu pot fi legate direct, ele trebuie separate printr-o etapă.
• Activarea unei etape presupune implicit execuția acțiunilor specifice etapei.
• Activarea unei etape (Sn) se produce atunci când sunt îndeplinite simultan două condiții:
a. Etapa sau etapele precedente1 etapei (Sn) sunt active;
b. Tranziția sau tranzițiile precedente etapei (Sn) sunt evaluate ca 1 logic.
• Activarea unei etape conduce implicit la dezactivarea etapelor precedente.
• Durata de activare a unei etape poate fi oricât de mică dar niciodată zero.
Etapele pot fi interconectate în următoarele structuri (elemente structurale fundamentale): structuri
liniare (seriale), structuri divergente simultane (ȘI/AND), structuri convergente simultane (ȘI/AND),
structuri divergente alternative (SAU/OR) și structuri convergente alternative (SAU/OR).

1
Prin etape/tranziții precedente se înțeleg acele etape/tranziții care sunt situate în amonte de etapa curentă și care sunt legate
direct la etapa curentă fără intermediari de același tip.
3. IMPLEMENTAREA

3.1 Transpunerea diagramei funcționale (SFC) în limbaje grafice


Implementarea vizează transpunerea prin diverse abordări a unui graf de implementare (diagramă
SFC) în limbaj de programare. Elaborarea schemelor și diagramelor poate fi realizată în multiple forme,
însă în cadrul acestui demers se utilizează o abordare standardizată și reglementată prin IEC61131-3:
diagramele funcționale secvențiale (SFC). Explicitările următoare referitoare la transpunerea grafului de
implementare în limbaje grafice sunt valabile pentru ambele limbaje, LD și FBD, chiar dacă se utilizează
limbajul LD pentru expunerea conceptelor.
Regulile de evoluție și acțiunile aferente diagramelor SFC trebuie transpuse în instrucțiuni, însă în
același timp trebuie să se păstreze logica de prelucrare asociată diagramei.
Dacă fiecărei etape i se asociază un variabilă booleană (Sn) și dacă starea variabilei descrie starea
etapei, atunci implementarea acțiunilor SFC în LD/FBD este imediată. Programul trebuie să mai aibă o
parte care să controleze starea variabilelor Sn în funcție de evoluția procesării (grafului). Așadar, conversia
unei diagrame SFC într-un limbaj grafic comportă organizarea aplicației în două părți (Fig.5.16): o parte
destinată comutării variabilelor de stare aferente etapelor (implementarea variabilelor de stare aferentă
etapelor SFC) și o parte destinată implementării acțiunilor (implementare acțiuni SFC).

Implementarea variabilelor de stare aferente etapelor

S1
Funcţia de activare, dezactivare şi
automenţinere a stării etapei S1
S2
Funcţia de activare, dezactivare şi
automenţinere a stării etapei S2
...
Sn
Funcţia de activare, dezactivare şi
automenţinere a stării etapei Sn

Implementarea acţiunilor

S1
Acţiuni aferente
etapei S1

S2
Acţiuni aferente
etapei S2
...
Sn
Acţiuni aferente
etapei Sn

Fig.5.16 Conversia unei diagrame funcționale (SFC) în limbaj Ladder Diagram.


Organizarea programului pe etape de funcționare.
Dacă în procesul de structurare s-a realizat și modularizarea atunci modulele funcționale care
comandă ieșirile fizice pot fi extrase din blocul acțiunilor și activate separat în programul principal al
aplicației. Astfel, structura din Fig.5.16, organizată pe etape, evoluează într-o structură organizată pe
module funcționale, Fig.5.17. Fiecare ieșire devine vizibilă în programul principal și apare o singură dată.
Acționarea modulelor funcționale se face prin intermediul variabilelor a căror valoare este comandată în
blocul care include logica de procesare. O astfel de organizare a unui program permite reutilizarea
modulelor funcționale și extinderea mai simplă a programului prin adăugarea de noi module și
actualizarea logicii de procesare.

Logica de procesare
• Comutarea variabilelor de stare aferente etapelor
• Implementarea acţiunilor

Module funcţionale

Modul 1
EN ENO
IN 1 Out 1
IN 2 Out 2
... ...

Modul 2
EN ENO
IN 1 Out 1
IN 2 Out 2
... ...

...
Modul k
EN ENO
IN 1 Out 1
IN 2 Out 2
... ...

Fig.5.17 Conversia unei diagrame funcționale (SFC) în limbaj Ladder Diagram.


Organizarea programului pe module funcționale.

Într-o manieră similară, programul poate fi organizat pe ieșiri, astfel încât fiecare ieșire să apară o
singură dată în programul principal și pe o rețea (ramură) distinctă. Astfel structura din Fig.5.16, organizată
pe etape, evoluează într-o structură organizată pe ieșiri, Fig.5.18.
Logica de procesare
• Comutarea variabilelor de stare aferente etapelor
• Implementarea acţiunilor care nu vizează ieşiri

Activare ieşiri

Condiţie de activare şi Out1


automenţinere a stării
ieşirii Out1

Condiţie de activare şi Out2


automenţinere a stării
ieşirii Out2

...
Condiţie de activare şi Outn
automenţinere a stării
ieşirii Outn

Fig.5.18 Conversia unei diagrame funcționale (SFC) în limbaj Ladder Diagram.


Organizarea programului pe ieșiri fizice.

Indiferent de modul de organizare al programului LD/FBD (pe etape funcționale, pe ieșiri fizice
sau pe module funcționale), partea de comutare a variabilelor de stare aferente etapelor trebuie
elaborată. Comutarea stării acestor variabile se face în acord cu diagrama funcțională (SFC) asociată
procesului/sistemului automatizat. În orice diagramă SFC putem identifica cinci structuri elementare care
stau la baza tuturor diagramelor (grafurilor) realizate conform IEC 61131-3: secvențe liniare, divergențe
simultane (AND) și convergențe simultane (AND), respectiv divergențe alternative (OR) și convergențe
alternative (OR). Transpunerea acestor structuri elementare în limbaj LD/FBD rezolvă problema activării
și dezactivării etapelor funcționale, respectiv a variabilelor de stare aferente (Sn).
Cap.5 Programarea structurată a aplicațiilor industriale

2. Structurarea standardizată a aplicațiilor industriale (SFC)


La nivel standardizat este definită o metodă unitară de structurare a
aplicațiilor secvențiale sub forma unor diagrame funcționale reglementate prin
IEC61131-3 (SFC–Sequential Function Chart). Aceste diagrame permit structurarea
secvențială a programelor scrise în orice limbaj. În conformitate cu acest standard,
SFC-ul se constituie ca principalul instrument de structurare a programelor de
conducere și control a sistemelor industriale automate.
Trebuie menționat că SFC-ul este „derivat” din GRAFCET (GRAphe
Fonctionnel de Commande Etape Transition), un set standardizat de reguli de
reprezentare și detaliere a fluxului proceselor industriale automate (IEC 848,
1988). Conform IEC 60848, GRAFCET-ul este un limbaj de specificare utilizat
pentru realizarea standardizată a documentațiilor, iar SFC-ul este un limbaj de
structurare a aplicațiilor, cu utilitate în elaborarea și implementarea programelor.
Cele două „limbaje”, chiar dacă sunt asemănătoare, au destinații diferite.
Diagramele SFC pot fi implementate în formă implicită (în interiorul unui
limbaj de programare, utilizând instrucțiunile specifice ale limbajului) sau în formă
explicită (utilizând aplicații sau instrumente software independente care permit
structurarea grafică a programelor). Forme de implementare explicită a acestui
set de reguli (SFC) sunt puse la dispoziția utilizatorilor de către majoritatea
producătorilor importanți de PLC-uri: S7 Graph (Siemens), CX Programmer
(Omron), RSLogix5000 (Rockwell Automation/Allen Bradley), Unity Pro (Schneider)
etc. Cu toate că IEC 61131-3 nu definește SFC-ul ca limbaj de programare, aceste
medii de dezvoltare oferă utilizatorilor instrumente și limbaje de programare
bazate pe elementele SFC și care permit programarea mult mai simplu a
aplicațiilor. SFC-ul, ca „limbaj de programare”, este situat deasupra limbajelor de
nivel înalt de tipul Structured Text, fiind mai apropiat de raționamentul uman și
mai ușor de folosit.
Limbajul de structurare SFC (Sequential Function Chart) este definit și
reglementat de IEC 61131-3 printr-o colecție de elemente grafice destinate
structurării și organizării programelor. În cadrul acestui demers, pentru
proiectarea și elaborarea structurată a programelor se utilizează diagramele
funcționale bazate pe SFC. Specificațiile de proiectare aferente unei aplicații vor fi
organizate structurat într-o diagramă funcțională, denumită și graf de
implementare, iar apoi fiecare element structural al diagramei va fi convertit
(transpus) în limbaj de programare: Ladder Diagram, Instruction List, Function
Block Diagram sau Structured Text.

101
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

S0
T0
S1 A1 Secvenţă liniară
T1
S2 A2
T2
Divergenţă ŞI (AND)
S31 A31 S32 A32
T32
S42 A42
Convergenţă ŞI (AND)
T4
Convergenţă SAU (OR)
S5 A5

Divergenţă SAU (OR)


T51 T52
S61 A61 S62 A62
T61 T62
S71 A71 S72 A72
T71 T72
S81 A81
T81
Convergenţă SAU (OR)

S9 A9

T91 T92
Divergenţă SAU (OR)
S10 A10
T10

Fig.5.1 Structurarea unei aplicații pe baza reglementărilor SFC, IEC 61131-3. Etapele de
funcționare ale unui sistem automat sunt reprezentate și organizate utilizând elemente
structurale standardizate: secvențe liniare, divergențe ȘI/SAU și convergențe ȘI/SAU.
Elementele structurale la rândul lor pot fi combinate în diverse structuri, în funcție de
complexitatea aplicației.

102
Cap.5 Programarea structurată a aplicațiilor industriale

Structurarea unei aplicații prin SFC implică divizarea procesului (fluxului de


prelucrare a datelor aferent procesului controlat) în etape (steps) care sunt
interconectate prin legături orientate, trecerile între etape fiind condiționate prin
tranziții. Fiecărei etape îi corespunde un set de acțiuni corespunzătoare cu
prelucrările specifice etapei. Structurarea îmbracă forme diferite pentru fiecare
aplicație în parte și se reprezintă grafic sub forma unor diagrame care combină
etapele în diverse moduri prin utilizarea a cinci elemente structurale: secvențe
liniare (seriale), divergențe ȘI, divergențe SAU, convergențe ȘI, convergențe SAU.
În figura 5.1 se reprezintă o diagramă SFC care utilizează elementele
structurale fundamentale într-o aplicație virtuală. Pentru referirea etapelor s-au
utilizat nume simbolice S0-S10. Tranzițiile (T0-T10) și acțiunile (A1-A10) sunt
reprezentate de asemenea simbolic. În această aplicație, numerotarea etapelor,
tranzițiilor și acțiunilor s-a efectuat după regulile de notare ale elementelor
matricelor (după linii și coloane). În diagramele reale atât tranzițiile cât și acțiunile
se reprezintă în formă detaliată.
Prin combinarea structurilor elementare se pot obține secțiuni liniare,
alternative sau repetitive care, în baza teoriei programării structurate [27], sunt
suficiente pentru realizarea oricărui program.
Etapele. În general, aplicațiile industriale sunt aplicații secvențiale
caracterizate prin etape sau faze care se declanșează și succed în anumite condiții.
Divizarea procesului (programului) în etape funcționale se face pe cale logică,
fiecărei etape fiindu-i asociate un set de acțiuni (prelucrări specifice) care se
efectuează atunci când etapa respectivă este activă. Fiecare etapă este
caracterizată printr-un nume unic într-un program.
Etapele sunt de două tipuri:
 Etapa simplă – reprezentată printr-un dreptunghi simplu în care se trece
numele etapei.
 Etapa de inițiere (de intrare) – reprezentată printr-un dreptunghi dublu în
interiorul căruia se trece numele etapei. Fiecare diagramă SFC trebuie să
aibă o singură etapă inițială care se activează prima atunci când este
apelată diagrama (unitatea de program).

Conform IEC 61131-3 fiecare etapă are asociate două variabile care
furnizează informații asupra stării etapei. Considerând că o etapă oarecare are
numele Sn, atunci:
 Sn.X – este o variabilă booleană asociată etapei Sn, care are valoarea 1 logic
atunci când etapa este activă, respectiv 0 logic, atunci când etapa este
inactivă.

103
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

 Sn.T – este o variabilă multibit de tipul TIME care stochează valoarea


timpului trecut de la activarea etapei Sn. După dezactivarea etapei, variabila
continuă se stocheze valoarea timpului aferent stării active a etapei (cât
timp a fost activă etapa Sn), până la o nouă activare a etapei Sn. Înainte de
prima utilizare valoarea acestei variabilei este 0.
 Variabilele Sn.X și Sn.T pot fi doar interogate, nu pot fi inițializate.

Exemplu: Utilizarea variabilelor S0.T și S1.T pentru precizarea duratei de activare a


unei etape, respectiv a duratei de execuție a unei acțiuni.
S0 – etapă inițiere diagramă SFC
S1, S2 – etape simple
S0 Prima etapă activată este etapa S0. S0 rămâne
S0.T>T#5s activă timp de 5s, timp în care nu se execută
acțiuni. La finalizarea celor 5s se dezactivează S0
S1 A1
și se activează etapa S1 pentru o perioadă de 3s,
S1.T>T#3s timp în care se execută acțiunea A1. La
S2 A2 finalizarea celor 3s se dezactivează S1 și se
activează S2, respectiv se execută acțiunea A2
atât timp cât etapa S2 este activă.

Tranzițiile. Trecerile de la o etapă la alta se fac condiționat prin intermediul


tranzițiilor. Din punct de vedere tehnic, tranziția este o expresie booleană care se
evaluează (1 logic sau 0 logic) și valoarea ei condiționează activarea etapei
următoare și dezactivarea etapei curente. O tranziție se reprezintă printr-o bară
orizontală poziționată pe legătura dintre etape și însoțită de o expresie booleană.
Reprezentarea expresiei booleene aferentă unei tranziții se face utilizând
elemente de limbaj ST, IL, LD sau FBD, conform tabel 5.1.

Tabelul 5.1 Reprezentarea tranzițiilor conform IEC 61131-3.


Mod de utilizare Descriere
(exemple)
Tranziție reprezentată printr-o variabilă booleană T1 care
S1 poate fi definită în unul din limbajele ST, IL, LD sau FBD.
T1
S2

104
Cap.5 Programarea structurată a aplicațiilor industriale

Tranziție reprezentată printr-o expresie booleană definită în


S1 limbaj ST.
var1 & var2
S2

Tranziție reprezentată printr-o expresie booleană definită în


S1 limbaj LD.
var1 var2

S2

Tranziție reprezentată printr-o expresie booleană definită în


S1 limbaj FBD.
var1 &
var2
S2

Tranziție reprezentată printr-o expresie booleană referită


S1 prin conector, unde variabila T1 este definită separat,
>T1> utilizând limbajul LD (a) sau FBD (b).

S2

var1 var2 a. definire variabilă T1 în limbaj LD


>T1> (utilizare cu conector)

var1 & b. definire variabilă T1 în limbaj FBD


var2
>T1>
(utilizare cu conector)

Reguli de evoluție. Execuția oricărui program se bazează pe o anumită


logică și pe o anumită ordine de efectuare a operațiilor și a prelucrărilor specifice.
La nivelul programatorului cea mai simplă logică de planificare (programare) a
acestor prelucrări este cea secvențială, inspirată din modul de funcționare al unui
sistem industrial. Diagramele SFC imită aceste procese și permit organizarea
programului în etape care se activează și execută în anumite condiții.
Regulile care descriu condițiile de activare și dezactivare ale etapelor și care
reglementează evoluția prelucrărilor într-o diagramă SFC (IEC 61131-3) sunt:
 Întotdeauna, prima etapă care se activează și execută este etapa de inițiere,
reprezentată grafic printr-un dreptunghi cu conturul dublat.

105
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

 Într-o diagramă SFC alternanța etapă -> tranziție, respectiv tranziție ->
etapă, trebuie asigurată întotdeauna. Adică:
- două etape nu pot fi legate direct, ele trebuie separate printr-o tranziție;
- două tranziții nu pot fi legate direct, ele trebuie separate printr-o etapă.
 Activarea unei etape presupune implicit execuția acțiunilor specifice etapei.
 Activarea unei etape (Sn) se produce atunci când sunt îndeplinite simultan
două condiții:
a. Etapa sau etapele precedente1 etapei (Sn) sunt active;
b. Tranziția sau tranzițiile precedente etapei (Sn) sunt evaluate ca 1 logic.
 Activarea unei etape conduce implicit la dezactivarea etapelor precedente.
 Durata de activare a unei etape poate fi oricât de mică dar niciodată zero.
 Etapele pot fi interconectate în următoarele structuri (elemente structurale
fundamentale): structuri liniare (seriale), structuri divergente simultane
(ȘI/AND), structuri convergente simultane (ȘI/AND), structuri divergente
alternative (SAU/OR) și structuri convergente alternative (SAU/OR).

În tabelul 5.2 sunt detaliate principalele structuri ce pot fi constituite prin


combinarea etapelor în conformitate cu regulile de evoluție descrise mai sus.
Tabelul 5.2 Elemente structurale SFC, conform IEC 61131-3.
Reprezentare Descriere
Secvența liniară (serială)
Etapele se succed unele după altele, în ordine:
Sk-1 Sk-1, Sk, Sk+1. La un moment dat poate fi doar
una singură activă.
Tk-1
Exemplificare. Etapa Sk se activează dacă,
Sk
simultan:
Tk - etapa Sk-1 este activă, Sk-1.X=1
Sk+1 - tranziția Tk-1 este 1 logic, Tk-1=1.
Tk+1 Atunci când se activează etapa Sk, implicit se
dezactivează Sk-1.

1
Prin etape/tranziții precedente se înțeleg acele etape/tranziții care sunt situate în amonte de etapa
curentă și care sunt legate direct la etapa curentă fără intermediari de același tip.

106
Cap.5 Programarea structurată a aplicațiilor industriale

Divergența simultană (ȘI)


S2
Permite activarea simultană a mai multor
T2 etape.
Exemplificare. Etapele S31, S32 și S33 se vor
S31 S32 S33 activa simultan, dacă: S2.X=1 și T2=1.
La activarea etapelor S31, S32 și S33, implicit se
dezactivează etapa precedentă S2.
Convergența simultană (ȘI)
S31 S32 S33
Permite închiderea unei structuri divergente de
același tip și dezactivează simultan mai multe
T3 etape.
S4 Exemplificare. Etapa S4 se va activa dacă:
S31.X=1, S32.X=1 , S33.X=1 și T3=1
Etapele S31, S32 și S33 se vor dezactiva implicit
odată cu activarea etapei S4.
Divergența selectivă (SAU)
S5
Permite selectarea execuției etapelor funcție
de condițiile de activare ale acestora.
T51 T52 T53
Exemplificare:
S61 S62 S63
Etapa S61 se activează dacă: S5.X=1 și T51=1;
Etapa S62 se activează dacă: S5.X=1 și T52=1;
Etapa S63 se activează dacă: S5.X=1 și T53=1.
Dacă mai multe condiții de activare sunt
îndeplinite simultan, atunci se aplică regula
priorității poziționale: de la stânga la dreapta.
Convergența selectivă (SAU)
S61 S62 S63 Permite închiderea unei structuri divergente de
T61 T62 T63 același tip și dezactivarea etapelor din
structură.
S7 Exemplificare:
Etapa S7 se activează dacă: S61.X=1 și T61=1
sau dacă: S62.X=1 și T62=1
sau dacă: S63.X=1 și T63=1.
La activarea etapei S7 se dezactivează implicit
etapa precedentă: S61 sau S62 sau S63.

107
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Structuri combinate: operația de salt


S5
Permite evoluția (saltul) peste etapele din
structură. Este o combinație simplă între o
T51 T52 divergență SAU și o convergență SAU.
S6 Exemplificare:
T6 Dacă S5.X=1 și T51=1, se activează S6;
S7 Dacă S5.X=1 și T52=1, se activează S8.
T7 Activarea oricărei etape (S6 sau S8) conduce la
dezactivarea implicită a etapei precedente (S5).

S8

Structuri combinate: operația de repetare


S4
Permite execuția repetată a unor etape.
T4 Structura este o combinație între o divergență
SAU și o convergență SAU, unde punctul de
S5 convergență este situat în amonte față de
punctul de divergență.
T5
Exemplificare:
S6
Dacă S6.X=1 și T61=1, se activează S7;
T61 T62 Dacă S6.X=1 și T62=1, se repetă execuția
etapelor S5 și apoi S6, atât timp cât T61=0.
S7

Acțiunile. Operațiile, prelucrările și manipulările efective de date se


efectuează prin intermediul acțiunilor. Fiecărei etape îi corespund zero, una sau
mai multe acțiuni. Într-o diagramă funcțională (SFC) acțiunile pot fi reprezentate
utilizând limbajele LD, FBD, ST, IL sau chiar prin intermediul altor diagrame SFC.
Forma generală a unei acțiuni este reprezentată în figura 5.2, unde câmpurile a, c
și d pot să lipsească din reprezentări.

a b c a – tipul acţiunii
b – numele acţiunii
d
c – indicator acţiune
d – acţiunea

Fig.5.2 Forma generală a unei acțiuni SFC

108
Cap.5 Programarea structurată a aplicațiilor industriale

Semnificațiile câmpurilor unei acțiuni SFC sunt:


a – Tipul acțiunii. Se reprezintă printr-o literă sau grup de litere rezervate și
descrie modul în care se execută acțiunea. Tipurile posibile de acțiuni sunt
reprezentate în tabelul 5.3, în conformitate cu IEC 61131-3.
b – Numele acțiunii. Se reprezintă printr-un șir de caractere oarecare și
reprezintă identificatorul (numele) acțiunii. Acestui nume trebuie să îi
corespundă un set de instrucțiuni definit în câmpul d. Dacă aceste
instrucțiuni lipsesc atunci identificatorul trecut în câmpul b este considerat
o variabilă booleană ce va fi operată atunci când etapa devine activă.
c – Indicator acțiune. Este reprezentat de o variabilă booleană a cărei
valoare este influențată de acțiunea curentă și care poate furniza informații
legate de starea acțiunii, finalizarea acțiunii, apariția unei erori etc.
Utilizarea acestui indicator este opțională.
d – Acțiunea propriu-zisă. Descrie operațiile, prelucrările și manipulările de
date specifice acțiunii. Este reprezentată utilizând elemente de limbaj LD,
FBD, ST, IL sau chiar prin diagrame SFC. Câmpul d poate fi reprezentat
imediat sub numele acțiunii (b) sau poate fi reprezentat separat iar
instrucțiunile aferente sunt apelate ca o unitate de program prin
intermediul numelui acțiunii. Modulele funcționale (funcții bloc sau alte
unități de program) sunt apelate prin intermediul acțiunilor.

Exemplu: Utilizarea acțiunilor într-o diagramă funcțională de tip SFC.


Etapei S10 îi corespund
S10 N Actiune 101 C1 acțiunile 101 și 102,
IF (A AND B) THEN reprezentate prin
C1:=1; instrucțiuni ST, în câmpul d.
ELSE C1:=0;
END_IF
Trecerea la etapa S11 este
D
condiționată de variabile C1
Actiune 102 C2
T#2s și C2 care sunt operate prin
C2:=1; acțiunile 101 și 102, în
C1 & C2 anumite condiții.

S11 N var_bool_1 Etapa S11 este activată timp


D de 3s. Când devine activă vor
var_bool_2
T#2s fi operate variabile booleene
L var_bool_3
T#1s var_bool_1, var_bool_2 și
S11.T>T#3s var_bool_3, în conformitate
cu tipul fiecărei acțiuni.

109
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Tabelul 5.3 Tipul acțiunilor SFC, conform IEC 61131-3.


Tipul Denumire (IEC 61131-3) Descriere
acțiunii
- Non-stored Acțiune neprecizată = Acțiune nememorată
N Non-stored Acțiune nememorată
R overriding Reset Acțiune Reset
S Set (Stored) Acțiune Set (memorată)
L time Limited Acțiune limitată în timp
D time Delayed Acțiune întârziată
P Pulse Acțiune Puls (impuls)
SD Stored and time Delayed Acțiune memorată și întârziată
DS Delayed and Stored Acțiune întârziată și memorată
SL Stored and time Limited Acțiune memorată și limitată în timp
P1 Pulse (rising edge) Acțiune Puls (front crescător/pozitiv)
P0 Pulse (falling edge) Acțiune Puls (front descrescător/negativ)

Pentru a întelege modul de utilizare al fiecărui tip de acțiune în continuare


se detaliază efectul acțiunilor asupra variabilelor operate.

Acțiunea nememorată (N)

Acțiunea este activă și se execută atât S1 N var1


timp cât etapa aferentă este activă.
T1
a)
Variabila booleană var1 aferentă
acțiunii trece în 1 logic și se menține
atât timp cât starea S1 este activă. La
S1.X
trecerea în 1 logic a tranziției T1,
t
starea S1 se dezactivează, respectiv
var1 trece în 0 logic. var1
t
Altfel spus, în cazul acțiunii
nememorate (N), variabila copiază T1
valoarea stării etapei: var1:=S1.x t
b)

Fig.5.3 Acțiunea nememorată (N):


a) exemplificare,
b) variația în timp a variabilelor.

110
Cap.5 Programarea structurată a aplicațiilor industriale

Acțiunea Reset (R)

Acțiunea se declanșează și execută S2 R var2


atunci când etapa S2 devine activă. În
T2
urma acestei acțiuni var2 trece în 0
a)
logic. Efectul acțiunii se menține
asupra variabilei operate și după ce
etapa S2 devine inactivă.
S2.X
t

var2
t

T2
t
b)
Fig.5.4 Acțiunea Reset: a) exemplificare,
b) variația în timp a variabilelor.

Acțiunea Set (S)

Acțiunea se declanșează și execută S3 S var3


atunci când etapa S3 devine activă. În
T3
urma acestei acțiuni var3 trece în 1
a)
logic. Efectul acțiunii se menține
asupra variabilei operate și după ce
etapa S3 devine inactivă. Variabila
S3.X
poate reveni în 0 logic doar printr-o
t
comandă (acțiune) Reset.
var3
t

T3
t
b)

Fig.5.5 Acțiunea Reset: a) exemplificare,


b) variația în timp a variabilelor.

111
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Acțiunea limitată în timp (L)

Acțiunea se declanșează și execută S4 L var3


T#2s
atunci când etapa S4 devine activă. În
L var4
urma acestei acțiuni variabila operată T#4s
trece în 1 logic pentru o perioadă de
T4 S4.T>T#3s
timp Δt precizată prin acțiune. Efectul a)
acțiunii se stinge atunci când etapa
devine inactivă, chiar dacă Δt nu a
expirat. S4.X
t
În urma acestei acțiuni var3 devine 1
logic pentru 2s, iar var4 trece în 1 logic var3
pentru 3s (chiar dacă în instrucțiune t
s-au precizat 4s), deoarece etapa se
dezactivează după 3s. var4
t
Fig.5.6 Acțiunea limitată în timp (L):
a) exemplificare, T4
b) variația în timp a variabilelor. 1 2 3 4 5 t(s)
b)

Acțiunea întârziată (D)

Acțiunea se declanșează și execută S5 D var5.1


T#2s
atunci când etapa S5 devine activă. În
D var5.2
urma acestei acțiuni variabila operată T#4s
trece cu o întârziere (Δt) în 1 logic
T5 S5.T>T#3s
(întârzierea Δt este precizată în a)
acțiune) și își menține starea atât timp
cât etapa S5 este activă.
S5.X
În urma acestei acțiuni var5.1 devine
t
1 logic pentru 1s, iar var5.2 nu mai
trece în 1 logic deoarece etapa se var5.1
dezactivează după 3s, iar întârzierea t
programată este de Δt=4s.
var5.2
t

Fig.5.7 Acțiunea întârziată (D): T5


a) exemplificare, 1 2 3 4 5 t(s)
b) variația în timp a variabilelor. b)

112
Cap.5 Programarea structurată a aplicațiilor industriale

Acțiunea memorată și întârziată (SD)

Acțiunea SD se declanșează și execută S6 SD var6.1


T#1s
atunci când etapa S6 devine activă. În
SD var6.2
urma acestei acțiuni variabila operată T#3s
trece cu o întârziere (Δt) în 1 logic
T6 S6.T>T#2s
(întârzierea Δt este precizată în a)
acțiune) și se menține în 1 logic până
la o comandă (acțiune) Reset.
S6.X
În urma acestei acțiuni var6.1 devine
t
1 logic după Δt = 1s, iar var6.2 devine 1
logic după Δt = 3s chiar dacă etapa S6 var6.1
s-a dezactivat. Variabilele revin în 0 t
logic doar printr-o comandă Reset.
var6.2
t
Fig.5.8.1 Acțiunea memorată și întârziată:
a) exemplificare, T6
b) variația în timp a variabilelor. 1 2 3 4 5 t(s)
b)
Acțiunea întârziată și memorată (DS)

Acțiunea DS se declanșează și execută S7 DS var7.1


T#1s
atunci când etapa S7 devine activă. În
DS var7.2
urma acestei acțiuni variabila operată T#3s
trece cu o întârziere (Δt) în 1 logic
T7 S7.T>T#2s
(întârzierea Δt este precizată în a)
acțiune) și își menține starea până la o
comandă Reset. Dacă Δt este mai mare
decât perioada de activare a stării S7, S7.X
acțiunea nu are efect. t

În urma acestei acțiuni var7.1 devine var7.1


1 logic după Δt=1s, iar var7.2 nu mai t
trece în 1 logic deoarece etapa se
dezactivează după 2s, iar întârzierea var7.2
programată este de Δt =3s. t

T7
Fig.5.8.2 Acțiunea întârziată și memorată:
a) exemplificare, 1 2 3 4 5 t(s)
b) variația în timp a variabilelor. b)

113
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Acțiune memorată și limitată (SL)


Acțiunea SL se declanșează și execută S8 L var8.1
T#4s
atunci când etapa S8 devine activă. În
SL var8.2
urma acestei acțiuni variabila operată T#4s
trece odată cu activarea etapei în 1
T8 S8.T>T#3s
logic și își menține starea pentru o a)
perioada de timp Δt precizată în
acțiune.
S8.X
În urma unei acțiuni (L) var8.1 devine 1
t
logic și își păstrează starea până la
dezactivarea etapei. var8.1

În urma unei acțiuni (SL) var8.2 devine t

1 logic și își păstrează starea până la var8.2


expirarea perioadei de timp precizate
t
în acțiune, Δt=4s.
T8
Fig.5.9 Acțiunea memorată și limitată(SL):
1 2 3 4 5 t(s)
a) exemplificare, b)
b) variația în timp a variabilelor.

Acțiunile Puls P1 și P0
În cazul acțiunii P1 variabila operată S9 P1 var9.1
trece în 1 logic odată cu activarea P0 var9.2
etapei (la apariția frontului crescător) T9 S9.T>T#3s
și își menține starea pe perioada unui a)
singur ciclu de procesare.
În cazul acțiunii P0 variabila operată S9.X
trece în 1 logic odată cu dezactivarea t
etapei (la front descrescător) și își
menține starea pe perioada unui singur var9.1
ciclu de procesare. t

var9.2

Fig.5.10 Acțiunea P0 și P1: t


a) exemplificare, T9
b) variația în timp a variabilelor.
1 2 3 4 5 t(s)
b)

114
Cap.5 Programarea structurată a aplicațiilor industriale

Aplicația 5.1 Se consideră un sistem de acționare pneumatic (Fig.5.11)


prevăzut cu două motoare liniare, M1 și M2, care funcționează după legi de
mișcare predefinite. Se cere să se realizeze diagrama funcțională (SFC) aferentă
aplicației de conducere a sistemului automat, pentru următoarele specificații:
 La apăsarea butonului START sistemul trebuie să intre în funcționare
automată și să execute sarcina de lucru aferentă motorului M1 sau sarcina
aferentă motorului M2, în funcție de poziția unui buton selector.
 La acționarea butonului selector trebuie să se modifice și modul de
funcționare al sistemului: din funcționare M1 se trece în funcționare M2 sau
invers. Fiecare mod de funcționare se semnalizează cu o lampă.
 Selectarea modului de funcționare se poate face în orice moment, trecerea
dintr-un mod de funcționare în altul se face doar după terminarea sarcinii
curente (revenirea motorului în poziția de start).
 La apăsarea butonului STOP motorul activ se readuce în poziția de start și
sistemul se oprește. O nouă apăsare a butonului START conduce la reluarea
ciclului de funcționare.

a) b)
Fig.5.11 a) Schema circuitului de acționare pneumatică, b) Schema circuitului electric.
Circuitele sunt realizate în aplicația FluidSIM-P, Festo. Elementele circuitului pneumatic
sunt conectate virtual la circuitul electric prin intermediul identificatorilor. Circuitul electric
este conectat la un PLC simulat prin intrările și ieșirile binare EB0 și AB0 (IB0 și QB0).

115
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Elaborarea diagramei funcționale SFC este parte a procesului de proiectare


a unui program structurat. Reamintim că prin structurare se înțelege (conform
teoriei programării structurate, [27]) aplicarea a două principii: structurarea
fluxului de procesare și modularizarea părților independente de program. Odată
realizată diagrama SFC aferentă unei aplicații se trece la transpunerea ei în cod,
într-un anumit limbaj de programare (LD, FBD, SL, IL). Transpunerea se face
simplu (aproape automat) deoarece elementele care au fost folosite în structurare
sunt elemente standardizate a căror conversie este cunoscută în prealabil. Trebuie
precizat faptul că astăzi există instrumente software care pot implementa o
diagrama SFC în PLC-uri fără să mai fie necesară transpunerea ei într-un limbaj de
programare. Astfel, aceste instrumente transformă practic limbajul de structurare
SFC, într-un limbaj de programare.
În această etapă și în contextul acestei aplicații se va elabora diagrama SFC
și apoi se va implementa prin intermediul unui limbaj de conversie directă a
diagramei SFC în cod mașină. Adresele hardware ale intrărilor și ieșirilor pot fi
identificate din figura 5.11b: STARTI0.0; …; Selector(1)I0.6; Selector(2)I0.7.

Elaborarea diagramei funcționale SFC

Modularizare. Se identifică părțile de program care pot fi realizate ca


aplicații relativ independente. În acest caz sarcinile de lucru aferente motoarelor
M1 și M2 pot fi realizate (executate) utilizând un modul de program relativ
independent care este apelat cu anumiți parametri, în funcție de poziția butonului
selector.
Unitatea de program care se
utilizează în acest caz pentru realizarea
modulului este funcția bloc. Se
elaborează o funcție bloc utilizator,
denumită Motor, care (prin instanțierile
ei) trebuie să permită acționarea
motoarelor M1 și M2, respectiv
realizarea sarcinilor de lucru predefinite
asociate acestor motoare.
Fig.5.12 Modul funcțional
(Funcție bloc utilizator)

Funcția bloc „Motor” (Fig.5.12) este destinată controlului motoarelor


acționate în configurația specifică a acestei aplicații, unde: S1 și S2 sunt variabile
booleene de intrare aferente capetelor de cursă; Pornit și Oprit sunt variabile
booleene de intrare utilizate pentru lansarea și oprirea sarcinii de lucru; y1 și y2

116
Cap.5 Programarea structurată a aplicațiilor industriale

sunt ieșiri logice utilizate pentru comanda electromagneților aferenți


distribuitorului de comandă. Fiecare motor este acționat printr-un distribuitor
electropneumatic (bistabil), iar vitezele de avans și retragere sunt reglate prin
intermediul a două drosele (vezi Fig.5.11). Mișcările pe care le execută cele două
motoare sunt predefinite și se realizează între două repere (capetele cursă), cu
viteze diferite.

Structurarea programului. Prin structurare se urmărește organizarea și


reprezentarea fluxului prelucrării prin intermediul elementelor structurale
standardizate: secvențe liniare, divergențe și convergențe de tipul ȘI ori SAU.
Diagrama funcțională propusă în figura 5.13 a) răspunde specificațiilor de
proiectare impuse. Are o structură simplă, clară, iar sarcinile de lucru sunt
modularizate. Etapa de inițiere (intrare) S1 nu este prevăzută cu acțiuni și
corespunde unei funcții de așteptare a inițierii procesului la apăsarea butonului
START. Etapa S2 are rol de element separator între tranzițiile auto și Select(1),
respectiv Select(2), nu este prevăzută cu acțiuni și poate să lipsească din diagramă
(a fost folosită pentru specificarea mai clară a tranzițiilor). Etapa S31 asigură
execuția sarcinii de lucru aferente motorului M1, iar etapa S32, sarcina de lucru
aferentă motorului M2. Tranzițiile care nu sunt specificate în diagrama SFC sunt
definite în figura 5.13 b. Variabila auto asociată primei tranziții permite pornirea și
funcționarea aplicației în regim automat (la apăsarea butonului START), respectiv
oprirea acesteia (la apăsarea butonului STOP).

S1
auto
S2 START STOP auto
/
auto
Select(1) Select(2)
Select(1) S11 T31
/
S31 N L1 S32 N L2 auto
N Motor(M1) N Motor(M2) /
Select(2) S21 T32
T31 T32 /
auto
/

a) b)

Fig.5.13 a) Diagrama funcțională (SFC), b) Definirea tranzițiilor.


L1și L2 – lămpi de semnalizare a sarcinilor în lucru,
Motor – funcție bloc responsabilă cu execuția sarcinilor de lucru (predefinite).

117
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Implementare

Prin implementare se urmărește transpunerea diagramei funcționale SFC


(grafului de implementare) în cod, scris într-un anumit limbaj de programare, și
apoi conversia în limbaj mașină. Unele medii de dezvoltare permit realizarea și
compilarea directă a diagramelor SFC. În figura 5.14 este prezentată diagrama SFC
aferentă aplicației noastre, în implementare S7 Graph, Siemens. Aici apelarea unei
funcții bloc poate fi făcută printr-o acțiune de tip CALL. Cu un astfel de instrument
la dispoziție (S7 Graph), programarea se reduce la realizarea diagramei SFC.

Fig.5.14 Diagrama funcțională (SFC) – implementare S7 Graph (Siemens)

118
Cap.5 Programarea structurată a aplicațiilor industriale

Funcția bloc „Motor” este apelată atât pentru realizarea sarcinii motorului
M1 cât și pentru a lui M2, însă cu parametri diferiți. Cele două sarcini diferă prin
cursele motoarelor (capetele de cursă sunt specificate prin intrările S1 și S2) și
vitezele de lucru (reglate la nivelul fiecărui motor prin intermediul droselelor). În
figura 5.15 se detaliază o versiune a funcției bloc „Motor” elaborată în limbajul LD
(Ladder Diagram), respectiv lista variabilelor specifice funcției.

Variabilă Tip variabilă Tip data Inițiere Comentariu


Pornitt IN Bool FALSE Lansează sarcina în execuție
Oprit IN Bool FALSE Oprește sarcina din execuție
S1 IN Bool FALSE Poziție retras (capăt de cursă)
S2 IN Bool FALSE Poziție avansat (capăt de cursă)
y1 OUT Bool FALSE Ieșire de comandă electromagnet
y2 OUT Bool FALSE Ieșire de comandă electromagnet
B_Oprire STATIC Bool FALSE Variabilă internă ajutătoare
State0 STATIC Bool FALSE Variabilă internă (stare 0)
State1 STATIC Bool FALSE Variabilă internă (stare 1)

Fig.5.15 Funcția bloc „Motor” – implementare LD, Step7, Siemens

119
CURS 9

Implementarea variabilelor de stare aferente etapelor

În baza logicii de parcurgere a unei diagrame SFC, respectiv a regulilor de evoluție, rezultă că orice
etapă a procesului este activată în anumite condiții, își menține (memorează) starea o anumită perioadă
și apoi este dezactivată când sunt îndeplinite condițiile de trecere la o altă etapă (etape). Dacă transpunem
în termeni matematici acest mod de lucru obținem o funcție logică F de trei variabile booleene care
caracterizează starea unei etape oarecare (Sn), adică:
Sn=F(A,M,D), unde A - este condiția de activare a etapei Sn,
M - condiția de automenținere a etapei Sn,
D - condiția de dezactivare a etapei Sn.

Determinarea funcție logice minimale F(A,M,D) care îndeplinește condițiile impuse poate fi
realizată prin intermediul diagramei Karnaugh (vezi Cap.2), deoarece cunoaștem valorile ei în toate
situațiile posibile (Fig.5.19).

A, M
F(A,M,D)
00 01 11 10
0 2 6 4
0 0 1 1 1
D 1 3 7 5
1 0 0 1 1

Fig.5.19 Diagrama Karnaugh asociată funcției F(A,M,D)

Astfel, funcția logică minimală care caracterizează starea unei etape, în funcție de condițiile de
activare, menținere și dezactivare ale acesteia, este:

F(A,M,D)= A+M* D

Dacă rezultatul acestei funcții este atribuit variabilei de stare Sn a etapei, obținem ecuația
aferentă stării etapei:

Sn = An+Mn* Dn

Ecuația permite determinarea stării a unei etape oarecare (activată sau neactivată), respectiv
permite implementarea stării etapelor prin diverse metode grafice. Ea este formulată în termeni generali
și trebuie particularizată pentru fiecare element structural în parte.
Succesiunea liniară
Structura (Fig.5.20) este caracterizată prin înserierea etapelor și activarea succesivă a acestora în baza
regulilor de evoluție într-un graf SFC.

Ecuația aferentă stării etapei Sk:


Sk-1
Sk = Sk-1*Tk-1 + Sk*Sk+1 Tk-1
Sk
unde: Tk
Ak = Sk-1*Tk-1 (condiția de activare) Sk+1
Mk = S k (condiția de automenținere)
Tk+1
Dk = Sk*Tk = Sk+1 (condiția de dezactivare)
Fig.5.20 Succesiune liniară

Divergența simultană (AND)


Caracterizează evoluția simultană în două sau mai Si-1
multe etape (Fig.5.21). Ecuațiile de stare aferente Ti-1
etapelor sunt: Si
Ti
Si = Si-1*Ti-1 + Si*Sj*Sk = Si-1*Ti-1 + Si*Sj + Si*Sk
Sj Sk
Sj = Si*Ti + Sj*Sj+1 Tj Tk
Sj+1 Sk+1
Sk = Si*Ti + Sk*Sk+1

Fig.5.21 Divergența AND

Divergența selectivă (OR)


Caracterizează evoluția selectivă (alternativă) în una Si-1
din mai multe etape posibile (Fig.5.22). Ecuațiile de Ti-1
stare aferente etapelor sunt: Si

Si = Si-1*Ti-1 + Si* (Sj + Sk) = Si-1*Ti-1 + Si*Sj*Sk Tj-1 Tk-1


Sj Sk
Sj = Si*Tj-1 + Sj*Sj+1 Tj Tk
Sj+1 Sk+1
Sk = Si*Tj-1 + Sk*Sk+1
Fig.5.22 Divergența OR
Convergența simultană (AND)
Caracterizează evoluția simultană din două sau mai
multe etape într-o singură etapă (Fig.5.23). Ecuațiile de Si-1 Sj-1
stare aferente etapelor sunt: Ti-1 Tj-1
Si Sj
Si = Si-1*Ti-1 + Si* Sk
Tk-1
Sj = Sj-1*Tj-1 + Sj*Sk
Sk
Tk
Sk = Si* Sj*Tk-1 + Sk*Sk+1
Sk+1

Fig.5.23 Convergența AND

Convergența selectivă (OR)


Caracterizează evoluția alternativă din două sau mai
Si-1 Sj-1
multe etape într-o singură etapă (Fig.5.24). Ecuațiile de
stare aferente etapelor sunt: Ti-1 Tj-1
Si Sj
Si = Si-1*Ti-1 + Si* Sk Ti Tj

Sj = Sj-1*Tj-1 + Sj*Sk Sk
Tk
Sk = Si*Ti + Sj*Tj + Sk*Sk+1 Sk+1

Fig.5.24 Convergența OR

Cele cinci cazuri descrise mai sus acoperă toate situațiile în care se poate afla o etapă într-o diagramă SFC.
Aceste ecuații permit implementarea funcțiilor de activare, menținere și dezactivare a stării etapelor,
F(A,M,D), aferente figurilor 5.16, 5.17 și 5.18. Exemplificare:

Ecuația de stare Implementare LD

Sk-1 Tk-1 Sk
Sk = Sk-1*Tk-1 + Sk*Sk+1
Sk Sk+1
/
Fk(A,M,D)
Si-1 Ti-1 Si
Si = Si-1*Ti-1 + Si*Sj + Si*Sk
Si Sj
/
Fi(A,M,D)
Si Sj
/

Si-1 Ti-1 Si
Si = Si-1*Ti-1 + Si*Sj*Sk
Si Sj Sk
/ /
Fi(A,M,D)

În exemplele anterioare variabilele asociate etapelor SFC au fost implementate prin intermediul
funcțiilor logice Fn(A,M,D). Fiecare funcție Fn este evaluată iar rezultatul ei este transferat variabilelor Sn
(Fig.5.25):

Fn(A,M,D)
Fn(A,M,D) = An+Mn* Dn => Sn Sn
An

Dn Mn

Fig.5.25 Implementarea LD a funcției de


activare, memorare și dezactivare a stării
etapei Sn.

Aceeași funcție logică Fn(A,M,D) își poate transfera valoarea ei (1 logic sau 0 logic) către o variabilă
booleană Sn prin intermediul funcțiilor bloc de tipul bistabil R-S. Dacă aceste funcții sunt disponibile atunci
condițiile de activare și de dezactivare An și Dn sunt suficiente pentru activarea și dezactivarea etapei Sn.

RS
Fig.5.26 Implementarea LD a funcției de An S Q Sn
activare și dezactivare a stării etapei Sn
prin intermediul funcțiilor bloc de tipul
bistabil R-S. Dn R1

Funcția logică Fn(A,M,D) își poate transfera valoarea ei (1 logic sau 0 logic) către o variabilă
booleană Sn prin intermediul instrucțiunilor de tipul Set și Reset. Dacă aceste instrucțiuni sunt disponibile
atunci condițiile de activare și de dezactivare An și Dn sunt suficiente pentru activarea și dezactivarea
etapei Sn.
Sn
Fig.5.27 Implementarea LD a funcției de activare și
An S
dezactivare a stării etapei Sn prin intermediul
instrucțiunilor Set și Reset Sn
Dn R

Pe de altă parte, condiția de activare aferentă etapei Sn este și condiție de dezactivare pentru
etapa Sn-1. În general pentru o etapă Sn sunt valabile asocierile: An=Dn-1 și Dn=An+1. În aceste condiții
implementarea LD a funcției logice care permite comutarea etapelor SFC pentru o structura liniară are
următoarea formă: Fig.5.28, Fig.5.29.

... ...
Sn-2 Sn-2
Sn-2
Dn-2=An-1 R An-1 R
Sn-1 Sn-1
An-1 S S
Sn-1 Sn-1 Sn-1
Dn-1=An R An R

An
Sn
S
ó Sn
S
Sn Sn Sn
Dn=An+1 R An+1 R
Sn+1 Sn+1
An+1 S S
Sn+1
... ...
a) b)

Fig.5.28 Implementarea LD a unei succesiuni liniare utilizând instrucțiunile Set și Reset.


a) Implementarea condițiilor de activare și dezactivare pentru variabilele Sn-2,..., Sn+1;
b) Simplificarea diagramei LD ca urmare a identităților de tipul An=Dn-1 și Dn=An+1
aferente unei etape Sn.

Într-o manieră similară pot fi reprezentate și celelalte structuri elementare: divergența și


convergența AND, respectiv divergența și convergența OR.
Succesiunea liniară ...
Sn-2 Tn-2 An-1 Sn-2
Tn-2
R
Sn-1 Sn-1
Tn-1 S
An
Sn-1 Tn-1 Sn-1
Sn R
Tn Sn
Sn+1 S
Sn Tn An+1 Sn
Tn+1
R
Fig.5.29 Implementarea LD Sn+1
a unei structuri liniare ... S
utilizând instrucțiunile Set și Reset

Divergența simultană (AND) S1 T1 S1


R
S21
S
S1 S22
T1 S
S23
S21 S22 S23 S
T21 T22 T23
S21 T21 S21
S31 S32 S33 R
S31
T3 S
S4 S22
S22 T22
R
S32
S

S23 T23 S23


Fig.5.30 Implementarea LD R
a unei structuri divergente AND S33
utilizând instrucțiunile Set și Reset S
... (vezi Fig.5.31)
Convergența simultană(AND)

... (vezi Fig.5.30)


S1
T1 S31 S32 S33 T3

S21 S22 S23


S31
T21 T22 T23
R
S31 S32 S33 S32
R
T3
S33
S4 R
S4
S
Fig.5.31 Implementarea LD
a unei structuri convergente AND
utilizând instrucțiunile Set și Reset

S5 T51 S5
Divergența selectivă (OR) R
S61
S
S5 T52 S5
S5 R
S62
T51 T52 T53 S
S61 S62 S63 S5 T53 S5
T61 T62 T63 R
S71 S72 S73 S63
S
T71 T72 T73
S61 T61 S61
R
S8
S71
S
S62 T62 S62
Fig.5.32 Implementarea LD R
a unei structuri divergente OR S72
utilizând instrucțiunile Set și Reset S
... (vezi Fig.5.33)
Convergența selectivă (OR) ... (vezi Fig.5.32)
S63 T63 S63
R
S5 S73
S
T51 T52 T53 S71 T71 S71
S61 S62 S63 R
T61 T62 T63 S8
S
S71 S72 S73
S72 T72 S72
T71 T72 T73
R
S8
S8 S
S73 T73 S73
R

Fig.5.33 Implementarea LD S8
a unei structuri convergente OR S
utilizând instrucțiunile Set și Reset

Implementarea acțiunilor aferente etapelor

Am văzut că transpunerea unei diagrame funcționale într-un limbaj de programare comportă


definirea unor variabile booleene asociate etapelor. Valoarea fiecărei variabile caracterizează starea unei
etape (activă sau inactivă). Prin controlul modului în care se comută valoarea acestor variabile, este
controlată evoluția procesării într-o diagramă SFC. Pe de altă parte, fiecărei etape îi corespund anumite
acțiuni. Prin intermediul acestor variabile pot fi executate acțiunile aferente unei anumite etape activă la
un moment dat. Din acest punct implementarea efectivă a acțiunilor poate fi realizată utilizând
instrucțiunile specifice ale unui limbaj, care trebuie să conducă la aceleași efecte cu a acțiunilor prevăzute
în diagrama SFC.

Acționarea ieșirilor fizice se face însă cu respectarea anumitor reguli determinate de practica
industrială vizând siguranța în exploatare, mentenanța sistemului automat, extinderea aplicației etc.
Standardul IEC 60848 surprinde această problematică, respectiv clasifică acțiunile și aduce în atenție
recomandări privind acționarea ieșirilor. În conformitate cu IEC 60848, acțiunile sunt de două tipuri:
continue (nememorate) și memorate.

Acțiunea continuă (nememorată). Variabila de ieșire specificată în acțiunea continuă primește


(copiază) valoarea stării etapei. Acesteia i se atribuie valoarea „1 logic” dacă etapa este activă sau „0
logic” în caz contrar. Tuturor ieșirilor nespecificate li se atribuie valoarea „0 logic”.
Sn Out.n

Fig.5.34 Acțiune continuă. Implementare LD

Acțiunea memorată. Fiecare variabilă specificată în acest tip de acțiune este operată printr-o
anumită instrucțiune: își modifică valoarea și și-o menține modificată până la apariția unei alte instrucțiuni
care modifică din nou valoarea variabilei.

Sk Out.k
S
...
Sk+3 Out.k
R

Fig.5.35 Acțiune memorată. Implementare LD

Comparație între cele două moduri de operare a ieșirilor fizice

a. Operarea variabilelor de ieșire


• În modul continuu, sub formă explicită sau implicită, în fiecare etapă activă sunt acționate (operate)
toate variabilele de ieșire aferente acțiunilor continue: cele care sunt specificate primesc valoarea
1 logic, cele nespecificate primesc valoarea 0 logic (prin omisiune).
• În modul memorat sunt acționate (operate) doar variabilele de ieșire apelate.

b. Determinarea valorii variabilelor de ieșire


• În modul continuu cunoașterea stării curente și a intrărilor este suficientă pentru a determina
valoarea ieșirilor.
• În modul memorat cunoașterea stării curente și a intrărilor nu este suficientă, evoluțiile precedente
trebuie să fie cunoscute pentru a determina valoarea ieșirilor.

c. Efectul etapei instabile


• În modul continuu acțiunile asociate cu o etapă instabilă (care durează doar un ciclu) se realizează
doar pe durata unui ciclu de procesare și în majoritatea aplicațiilor nu au nici un efect vizibil.
• În modul memorat întotdeauna acțiunile definite sunt efectuate. Un singur ciclu (puls) este suficient
pentru executarea instrucțiunilor și memorarea efectului acestora.

d. Atribuirea conflictuală
• În modul continuu orice conflict de atribuire simultană a mai multor valori pentru aceeași ieșire este
evitat, pentru că o ieșire apare o singură dată într-un program.
• În modul memorat este favorizată apariția conflictelor privind alocarea simultană de valori diferite
pentru aceeași ieșire. O ieșire este apelată de fiecare dată când se dorește modificarea valorii ei.
Recomandările IEC 60848 precizează că o ieșire poate fi acționată ori în modul continuu, ori în
modul memorat, dar nicidecum în ambele forme. Totuși, practicile industriale curente recomandă
folosirea modului memorat doar pentru operarea variabilelor interne și modul continuu pentru operarea
variabilelor de ieșire aferente ieșirilor fizice.
În consens cu precizările anterioare, variabilele aferente ieșirilor fizice pot fi grupate pe module
funcționale și acționate prin intermediul acestora. Fiecare modul funcțional poate fi asociat unui element
de acționare sau unui subsistem, respectiv poate include anumite funcții cu utilitate industrială: pornit,
oprit, manual, automat, raportare erori/defecțiuni, alarme, proceduri de siguranță, opriri de urgență etc.

3.2 Transpunerea diagramei funcționale (SFC) în limbaje textuale

Limbajele textuale definite prin IEC 61131-3 sunt Instruction List (IL) și Structured Text (ST). Primul
(IL) este un limbaj de nivel scăzut, mai sărac în instrucțiuni, apropiat de mașină, iar al doilea (ST) este unul
de nivel înalt, prevăzut cu instrucțiuni mai puternice care permit structurarea programelor, fiind
asemănător cu Pascalul. Transpunerea diagramei SFC se realizează tot prin implementarea ecuațiilor ce
descriu starea etapelor, respectiv a acțiunilor aferente lor, utilizând instrucțiunile specifice celor două
limbaje textuale. Implementarea comportă totuși anumite particularități:
- Un program elaborat în limbajul IL este organizat în grupuri de instrucțiuni elementare care vizează
apelarea unei funcții, implementarea unei tranziții, etape, acțiuni, transferarea rezultatelor operațiilor
executate către o variabilă etc.
- În limbajul IL implementarea fiecărei ecuații se face printr-o serie (listă) de instrucțiuni, respectiv
manipulări elementare (LD, AND, OR, NOT, R, S etc), care se finalizează cu stocarea conținutului
acumulatorului în variabila aferentă acelei etape.
- În limbajul IL implementarea fiecărei acțiuni se face printr-o serie (listă) de instrucțiuni, respectiv
manipulări elementare (LD, AND, OR, NOT, R, S etc), care se finalizează cu stocarea conținutului
acumulatorului în variabila aferentă unei ieșiri fizice.
- Limbajul IL nu are instrucțiuni de structurare a programelor de tipul celor specifice limbajelor
structurate (instrucțiuni alternative sau repetitive) și ca atare logica de procesare nu este vizibilă, este
inclusă în ecuațiile care descriu etapele procesului.
- Limbajul ST permite implementarea simplă a etapelor și acțiunilor prin introducerea ecuațiilor ce
descriu starea etapelor, respectiv prin definirea acțiunilor. Suplimentar, structurarea programului poate
fi realizată în formă explicită prin utilizarea instrucțiunilor de selecție simplă (IF), multiplă (CASE) și
repetitive (FOR, WHILE, REPEAT).
A1. Presa pneumatică Dificultate:

1.1 Descrierea sistemului

În figura 1.1 este prezentată o presă cu acționare pneumatică ce include în


structura ei o cameră în care se realizează operația de presare, un sistem de
alimentare și o ușa glisantă pentru izolarea camerei de presare. Circuitul de
acționare este format din trei motoare pneumatice liniare acționate prin
intermediul a trei distribuitoare în configurația 5/3, comandate prin
electromagneți de c.c., 24V. Motoarele servesc pentru acționarea sistemului de
alimentare (M1), pentru realizarea operației de presare (M2) și pentru acționarea
ușii culisante (M3). Sistemul senzorial aferent presei are în componență doi
senzori reed pentru detectarea poziției pistonului motorului M1 (capetele de
cursă) și doi senzori magneto-inductivi pentru detectarea capetelor de cursă
aferente motorului M3. De asemenea sistemul este prevăzut cu două butoane cu
revenire (B1 și B2) pentru realizarea operațiilor de comandă și două lămpi pentru
efectuarea operațiilor de semnalizare optică (L1 şi L2).
Circuitul de acționare pneumatică și circuitul electric sunt detaliate în figura
1.2. Viteza fiecărui motor pneumatic poate fi reglată prin intermediul unei perechi
de drosele de cale, atât pentru cursa de avans, cât și pentru cursa de retragere.
Conectarea sistemului cu PLC-ul se face prin intermediul intrărilor și ieșirilor, în
conformitate cu tabelul 1.1.

Fig.1.1 Presă pneumatică


(Laboratorul de Mecatronică și echipamente de automatizare al UTCN)

165
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Fig.1.2 Presa: a) Schema circuitului de acționare pneumatică, b) Schema circuitului electric.


Circuitele sunt realizate în aplicația FluidSIM-P, Festo. Elementele circuitului pneumatic
sunt conectate virtual la circuitul electric prin intermediul identificatorilor.

Tabelul 1.1 Lista de alocare a intrărilor și ieșirilor.


I0.0 B1 – buton normal deschis, cu Q0.0 Y11 – electromagnet, acționare
revenire distribuitor D1
I0.1 B2 – buton normal deschis, cu Q0.1 Y12 – electromagnet, acționare
revenire distribuitor D1
I0.2 S11 – senzor motor M1, Q0.1 Y21 – electromagnet, acționare
sesizează poziția retras a distribuitor D2
pistonului motorului M1
I0.3 S12 – senzor motor M1, Q0.2 Y22 – electromagnet, acționare
sesizează poziția avansat a distribuitor D2
pistonului motorului M1
I0.4 S31 – senzor motor M3, Q0.3 Y31 – electromagnet, acționare
sesizează poziția retras a distribuitor D3
pistonului motorului M3
I0.5 S32 – senzor motor M3, Q0.4 Y32 – electromagnet, acționare
sesizează poziția avansat a distribuitor D3
pistonului motorului M3
Q0.5 L1 – lampă semnalizare Q0.6 L2 – lampă semnalizare

166
Cap.7 Aplicații industriale conduse de PLC-uri

Se cer:

1) Analiza și înțelegerea modului de funcționare al sistemului în conformitate


cu etapele descrise mai jos:
a. În starea inițială ușa glisantă și pistonul presei sunt ridicate, motorul
sistemului de alimentare este în poziție avansat (gata pentru preluare
piesă), iar lămpile de semnalizare sunt aprinse.
b. La apăsarea simultană a butoanelor B1 și B2, lămpile de semnalizare
se sting, sistemul de alimentare introduce o piesă în camera de
presare (pistonul motorului M1 se retrage). După ce pistonul
motorului M1 este complet retras, se coboară ușa glisantă.
c. Operația de presare este declanșată doar după ce camera de presare
este securizată (ușa glisantă este închisă complet). Pistonul motorului
M2 coboară, intră în contact cu piesa, comprimă piesa timp de 5
secunde, apoi se ridică în poziția de siguranță (motor M2 retras).
Operația de presare este semnalizată optic prin intermediul celor
două lămpi care trebuie să lumineze intermitent cu frecvența de 1 Hz.
d. La finalizarea operației de presare, lămpile de semnalizare se sting și
ușa glisantă este ridicată. Odată ce ușa este ridicată complet, sistemul
de alimentare evacuează piesa și apoi se aprind cele două lămpi.
e. O nouă apăsare a celor două butoane de comandă conduce la
inițierea unui nou ciclu al procesului, cu repetarea etapelor descrise
mai sus.
2) Elaborarea diagramei funcționale SFC (graful de implementare) cu scopul
structurării procesului, respectiv al fluxului de prelucrare a datelor.
3) Transpunerea grafului de implementare în limbajele LD, FBD, ST(SCL) și
IL(STL) utilizând tehnologia Siemens, Simatic Step7-300.
4) Simularea și testarea funcționării sistemului automat utilizând platforma de
dezvoltare-testare: FluidSIM – Step7 – EzOPC.
5) Implementarea și testarea experimentală: Stand - presa pneumatică.

Observație: Motorul M2 nu este prevăzut cu senzori pentru detectarea


capetelor de cursă. Acționarea lui se face în baza unor timp estimați, atât
pentru cursa de avans, cât și pentru cea de retragere, respectiv ținând
seama de timpul de comprimare impus (5s).

167
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

1.2 Graful de implementare (structurarea procesării)

Realizarea grafului de implementare presupune structurarea fluxului


procesării și reprezentarea grafică a rezultatului utilizând anumite reguli de
reprezentare, SFC sau GRAFCET. Implementarea programului presupune
transpunerea grafului într-un anumit limbaj de programare, pentru o anumită
mașină.
Structurarea prezintă două componente: organizarea fluxului de prelucrare
a datelor și modularizarea programului (vezi Cap.5). Modularizarea vizează
identificarea părților independente de program care pot fi elaborate separat sub
forma unor module funcționale: unități de program independente realizate sub
formă de funcții, programe și funcții bloc. Avantajele modularizării sunt descrise
amănunțit la începutul capitolului 5.
În contextul acestei aplicații, părțile de program care pot fi modularizate
sunt funcția de semnalizare optică (iluminare intermitentă sau continuă) și
eventual funcțiile de acționare a motoarelor. Programul principal va include
partea de declarare a variabilelor, a tranzițiilor, logica de procesare și modulele
funcționale.
Pentru realizarea funcției de iluminare intermitentă și în general a funcției
de semnalizare optică se va elabora o unitate de program de tip funcție care să
poată fi activată în diferite moduri de lucru prin intermediul variabilelor de
intrare: iluminare intermitentă sau continuă; funcția trebuie să permită și
specificarea frecvenței sau perioadei iluminării intermitente.
Organizarea fluxului de procesare pe etape și tranziții, interconectate în
secvențe liniare, paralele, alternative sau repetitive, se face în conformitate cu
specificațiile de proiectare sau caietul de sarcini. Identificarea etapelor este
intuitivă și este legată de acțiunile ce se desfășoară într-o anumită fază de
funcționare a procesului. Fiecare etapă trebuie să se desfășoare între două
condiții evidente ale procesului. Numărul de etape identificate nu condiționează
buna funcționare a sistemului automat. Pentru aceeași problemă există mai multe
soluții de rezolvare corectă.
De obicei acest proces începe cu schițarea unei diagrame funcționale
simplificate, care pe măsură ce este analizată se modifică și se optimizează prin
adăugarea de noi etape și acțiuni sau prin comasarea etapelor și acțiunilor, pentru
ca la capătul acestui proces să obținem o diagramă funcțională finală.
Pentru aplicația curentă se pot identifica următoarele etape:

168
Cap.7 Aplicații industriale conduse de PLC-uri

 S0 - Etapa inițială: se activează la începutul procesului sau la finalizarea


ciclului procesului (după executarea etapei S7); prin acțiunile asociate ei
trebuie să aducă sistemul în poziția de start (ușă glisantă ridicată, piston
presă ridicat, motor alimentare M1 avansat).
 S1 – Etapă simplă: se activează la finalizarea etapei S0 și prin acțiunile
asociate ei se semnalizează optic (luminare continuă, L1 și L2) că sistemul
este în poziția de start și se așteptă comanda de inițiere a operației de
presare.
 S2 – Etapă simplă: se activează la finalizarea etapei S1 și prin acțiunile
asociate ei piesa ce urmează a fi presată este introdusă în camera de
presare (retragere M1).
 S3 – Etapă simplă: se activează la finalizarea etapei S2 și prin acțiunile
asociate ei camera de presare este securizată (avans M3).
 S4 – Etapă simplă: se activează simultan cu etapa S6 la finalizarea etapei S2
și prin acțiunile asociate trebuie să se realizeze operația de presare
(coborârea pistonului presei și apoi menținerea forței de compresiune
pentru o perioadă de 5s).
 S5 – Etapă simplă: se activează la finalizarea etapei S4 și prin acțiunile
asociate ei trebuie să se readucă pistonul presei în poziția de siguranță
(retragere M2).
 S6 – Etapă simplă: se activează simultan cu etapa S4 la finalizarea etapei S2
și prin acțiunile asociate trebuie să se realizeze semnalizarea optică a
operației de presare (iluminare intermitentă cu frecvența de 1Hz), pe toată
durata etapelor S4 și S5.
 S7 – Etapă simplă: se activează la finalizarea etapelor S5 și S6, și prin
acțiunile asociate ei trebuie să se ridice ușa glisantă (retragere M3).
Observații:
1.Motorul M2 nu este prevăzut cu senzori pentru sesizarea capetelor de
cursă. Pentru acționarea lui se utilizează temporizatoare.
2. Ridicarea ușii glisante se realizează în mod natural în etapa S7. Din
motive de siguranță se execută și în etapa S0, la inițierea procesului.
3. Ridicarea pistonului presei se realizează în etapa S7. Din motive de
siguranță se execută și în etapa S0, la inițierea procesului.
4. Funcția Blinking trebuie să asigure iluminarea continuă sau intermitentă
(la frecvența prestabilită) a lămpilor L1 și L2, atunci când este apelată.

169
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

S0 N Y11 Avans M1
N Y22 Retragere M2
N Y32 Retragere M3
T0 s12 AND s31
Apeleaza functia
S1 N Blinking bloc “Blinking”
N LightOn Aprinde L1si L2
T1 B1 AND B2
S2 N Y12 Retragere M1

T2 s11

S3 N Y31 Avans M3

T3 s32

S4 N Y21 S6 N BlinkOn
N TON.DB3 N Blinking
T4 DB3.Q Blinking

S5 N Y22
N TON.DB4

T5=T6 DB4.Q

S7 N Y32 Retragere M3

T7 s31

Fig.1.3 Graful de implementare (SFC) aferent specificației de proiectare.


S – Etapă (Step), T – tranziție, TON - temporizator.

Ecuațiile ce descriu starea etapelor S0-S7 sunt:


S0 = S7·T7 + S0· S1
S1 = S0·T0 + S1· S2
S2 = S1·T1 + S2· S3
S3 = S2·T2 + S3· S4 + S3· S6
S4 = S3·T3 + S4· S5

170
Cap.7 Aplicații industriale conduse de PLC-uri

S5 = S4·T4 + S5· S7
S6 = S3·T3 + S6· S7
S7 = S5·S6·T6· + S3· S0

1.3 Transpunerea grafului de implementare

Transpunerea grafului de implementare într-un anumit limbaj comportă


conversia logicii de procesare (ecuațiilor de stare) și a acțiunilor aferente etapelor
în elemente de limbaj de programare (vezi Cap.5), respectiv elaborarea unităților
de program aferente modulelor funcționale. Pentru că acționarea motoarelor
pneumatice este simplă, vom proceda la acționarea lor în programul principal,
fără să elaborăm funcții (module funcționale) dedicate acestor sarcini.
Elaborare module funcționale (limbaj LD)
Funcția „Blinking” (Fig.1.4) asigură semnalizarea optică în diferite situații:
aprinderea intermitentă sau continuă a lămpilor legate la ieșirile ei. Acționarea
intermitentă a lămpilor se face printr-o intrare binară (Blink): atât timp cât la
intrarea Blink este aplicat un semnal de 1 logic, se execută acționarea
intermitentă cu o frecvență precizată la intrarea PTime; atunci când pe intrarea
Blink se aplică 0 logic variabilele de ieșire (OutB1 și OutB2) devin 0 logic. Aplicarea
unui semnal de 1 logic pe intrarea Light conduce la aprinderea continuă a
lămpilor, atât timp cât acest semnal este aplicat.

Fig.1.4 Funcția bloc „Blinking” (limbaj LD), implementare Step7

171
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Tabelul 1.2 Definirea variabilelor aferente funcției bloc „Blinking”.


Variabilă Tip Tip Inițiere Comentariu
variabilă data
Blink IN Bool FALSE Activează iluminarea intermitentă
PTime IN TIME - Predefinește perioada de intermitență
Light IN Bool FALSE Activează iluminarea continuă
OutB1 OUT Bool FALSE Ieșire nr.1 (aferentă L1)
OutB2 OUT Bool FALSE Ieșire nr.2 (aferentă L2)
OutT1 STATIC Bool FALSE Variabilă internă ajutătoare
OutT2 STATIC Bool FALSE Variabilă internă ajutătoare

Transpunerea logicii de procesare și a acțiunilor (limbaj LD)


În conformitate cu tehnicile prezentate în cadrul capitolului 5 transpunerea
ecuațiilor de stare și a acțiunilor este prezentată în figura 1.5.

N1

N2

N3

N4

N5

Fig.1.5 Programul principal OB1 (limbaj LD), implementare Step7

172
Cap.7 Aplicații industriale conduse de PLC-uri

N6

N7

N8

N9

N10

N11

N12

N13

N14

N15

N16

N17

Fig.1.5 Programul principal OB1 (limbaj LD), implementare Step7 (continuare)

173
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

RESURSE (Temporizatoare, Tranzitii, etc)

N1

N2

N3

N4

N5

N6

N7

N8

N9

Fig.1.6 Funcția „Resurse” (limbaj LD), implementare Step7

N1

N2

Fig.1.7 Programul OB100 (limbaj LD), implementare Step7

174
Cap.7 Aplicații industriale conduse de PLC-uri

Proiectul aplicației este organizat în următoare unități de program:


Programul principal (OB1) – unitate de program care se execută ciclic până
la oprirea aplicației. Programul include logica de procesare a aplicației și acțiunile
aferente etapelor funcționale.
Programul OB100 – unitate de program care se execută o singură dată la
începutul aplicației, înainte de execuția programului principal OB1, de obicei
pentru realizarea inițializărilor. În cazul curent rezultatul execuției acestui program
este inițializarea în 1 logic a variabilei booleene Inițiere, respectiv inițializarea în 0
logic a fiecărei variabile asociate etapelor (S1÷S7).
Funcția „Resurse” – unitate de program care definește tranzițiile și alte
resurse utilizate în programul principal: temporizatoare, numărătoare etc. Pentru
simplificarea reprezentării programului principal, aceste resurse sunt apelate prin
variabilele lor.
Funcția „Blinking” – unitate de program care este apelată din programul
principal în situațiile în care se impune semnalizarea optică a unor evenimente:
așteptare comandă, operația de presare. Funcția operează prin ieșirile ei lămpile
L1 și L2.
Adresele asociate intrărilor și ieșirilor fizice, variabilelor aferente etapelor,
tranzițiilor și altor resurse utilizate în elaborarea aplicației sunt descrise în tabelul
1.3. Editarea listei de alocare a adreselor începe înainte de scrierea programelor
cu introducerea resurselor cunoscute (intrări, ieșiri, variabile cunoscute) și se
completează pe parcurs, odată cu necesitatea introducerii altor variabile (resurse)
suplimentare.
Tabelul 1.3 Lista de alocare a adreselor.
Simbol Adresa Tip Detaliere
data
Blinking FC1 FC 1 funcție semnalizare optică
Resurse FC2 FC 2 funcție definire tranziții, temporizatoare
B1 I0.0 BOOL buton normal deschis, cu revenire
B2 I0.1 BOOL buton normal deschis, cu revenire
S11 I0.2 BOOL senzor capăt de cursă motor M1 (retras)
S12 I0.3 BOOL senzor capăt de cursă motor M1 (avansat)
S31 I0.4 BOOL senzor capăt de cursă motor M3 (retras)
S32 I0.5 BOOL senzor capăt de cursă motor M3 (avansat)
Initiere M0.0 BOOL variabilă booleană utilizată pentru inițializare
OutTON1 M0.1 BOOL ieșire temporizator TON.DB3
OutTON2 M0.2 BOOL ieșire temporizator TON.DB4
S0 M10.0 BOOL variabilă aferentă etapei S0

175
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

S1 M10.1 BOOL variabilă aferentă etapei S1


S2 M10.2 BOOL variabilă aferentă etapei S2
S3 M10.3 BOOL variabilă aferentă etapei S3
S4 M10.4 BOOL variabilă aferentă etapei S4
S5 M10.5 BOOL variabilă aferentă etapei S5
S6 M10.6 BOOL variabilă aferentă etapei S5
S7 M10.7 BOOL variabilă aferentă etapei S7
T0 M20.0 BOOL variabilă aferentă tranziției T0
T1 M20.1 BOOL variabilă aferentă tranziției T1
T2 M20.2 BOOL variabilă aferentă tranziției T2
T3 M20.3 BOOL variabilă aferentă tranziției T3
T4 M20.4 BOOL variabilă aferentă tranziției T4
T5 M20.5 BOOL variabilă aferentă tranziției T5
T6 M20.6 BOOL variabilă aferentă tranziției T6
T7 M20.7 BOOL variabilă aferentă tranziției T7
BlinkON M21.0 BOOL variabilă pentru activarea iluminării intermitente
LightON M21.1 BOOL variabilă pentru activarea iluminării continue
Etape MW10 WORD variabilă multibit aferentă etapelor
COMPLETE OB100 OB100 unitate de program care se execută o singură dată la
RESTART inițierea aplicației
y11 Q 0.0 BOOL electromagnet acționare distribuitor D1 (avans M1)
y12 Q0.1 BOOL electromagnet acționare distribuitor D1(retragere M1)
y21 Q0.2 BOOL electromagnet acționare distribuitor D2 (avans M2)
y22 Q0.3 BOOL electromagnet acționare distribuitor D2(retragere M2)
y31 Q0.4 BOOL electromagnet acționare distribuitor D3 (avans M3)
y32 Q0.5 BOOL electromagnet acționare distribuitor D3(retragere M3)
L1 Q0.6 BOOL lampă semnalizare (L1)
L2 Q0.7 BOOL lampă semnalizare (L2)
TON SFB 4 SFB4 funcție sistem (temporizator cu întârziere la pornire)

Transpunerea grafului de implementare în limbaj ST

Proiectul este organizat în următoarele unități de program:


 Programul principal (OB1) – elaborat în limbajul SCL(ST) (Fig.1.8);
 Programul OB100 – inițializare variabile, elaborat în LD (Fig.1.7);
 Funcția „Blinking” – semnalizare optică, elaborată în LD (Fig.1.4).
Programul principal este constituit din secțiunea de declarare a variabilelor
și secțiunea de cod. Implementarea s-a realizat în Step7, limbaj SCL. Limbajul SCL
este versiunea Siemens pentru limbajul Structured Text (ST) IEC61131-3. Lista de
simboluri este descrisă în tabelul 1.3.

176
Cap.7 Aplicații industriale conduse de PLC-uri

ORGANIZATION_BLOCK OB1
VAR_TEMP //declarare variabile
info : ARRAY[0..19] OF BYTE;
T:ARRAY[0..10] OF BOOL;
S:ARRAY[0..10] OF BOOL;
END_VAR
BEGIN
IF initiere THEN S[0]:=true; initiere:= false; END_IF; //Inițiere
//Definire temporizatoare și modul funcțional „Blinking”
TON.DB3(IN:=S[4], PT:=T#7s);
TON.DB4(IN:=S[5], PT:=T#4s);
Blinking(EN:=true, Blink:=BlinkON, PTime:=T#1s, Light:=LightON,
OutB1=>L1, OutB2=>L2);
//Tranziții
T[0]:=S12 AND S31;
T[1]:=B1 AND B2;
T[2]:=S11;
T[3]:=S32;
T[4]:=DB3.Q; //OutTON1
T[6]:=DB4.Q; //OutTON2
T[7]:=S31;
//Logica de procesare (comutarea variabilelor ce descriu starea etapelor)
IF S[0] AND T[0] THEN S[1]:=TRUE;S[0]:=false;END_IF;
IF S[1] AND T[1] THEN S[2]:=TRUE;S[1]:=false;END_IF;
IF S[2] AND T[2] THEN S[3]:=TRUE;S[2]:=false;END_IF;
IF S[3] AND T[3] THEN S[4]:=TRUE;S[6]:=TRUE;S[3]:=false;END_IF;
IF S[4] AND T[4] THEN S[5]:=TRUE;S[4]:=false;END_IF;
IF S[5] AND S[6] AND T[6] THEN S[7]:=TRUE;S[5]:=false;S[6]:=false;END_IF;
IF S[7] AND T[7] THEN S[0]:=TRUE;S[7]:=false;END_IF;
//Acțiuni
Y11:= S[0];
Y12:= S[2];
Y21:= S[4];
Y22:= S[0] OR S[5];
Y31:= S[3];
Y32:= S[0] OR S[7];
BlinkON:= S[6];
LightON:= S[1];
END_ORGANIZATION_BLOCK

Fig.1.8 Aplicația A1. Programul principal OB1 (limbaj ST), implementare Step7-SCL, unde
programul OB100 (LD) și funcția „Blinking” (LD) sunt descrise în figurile 1.7 și 1.4.

177
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Transpunerea grafului de implementare în limbaj IL

OB1 "Main Program" N5: definire variabilă N10: definire variabilă


aferentă etapei S2 aferentă etapei S7
A "S1" A "S5"
N1: apelare funcție A "T1"
"Blinking" A "S6"
O A "T6"
A "BlinkON" A "S2"
= L 20.0 O
AN "S3" A "S7"
BLD 103 = "S2"
A "S1" AN "S0"
= L 20.1 = "S7"
N6: definire variabilă
BLD 103 aferentă etapei S3
CALL "Blinking" A "S2" N11: acționare ieșire y11
Blink:=L20.0 A "T2" A "S0"
PTime:=T#1S O = "y11"
Light:=L20.1 A "S3"
OutB1:="L1" AN "S4" N12: acționare ieșire y12
OutB2:="L2" O A "S2"
NOP 0 A "S3"
AN "S6" = "y12"
N2: apelare funcție = "S3" N13: acționare ieșire y21
"Resurse" N7: definire variabilă A "S4"
CALL „Resurse” aferentă etapei S4 = "y21"
NOP 0 A "S3"
A "T3" N14: acționare ieșire y22
O O "S0"
N3: definire variabilă A "S4" O "S5"
aferenta etapei S0, inițiere AN "S5" = "y22"
A "S7" = "S4"
A "T7" N15: acționare ieșire y31
O N8: definire variabilă
A "S0" aferentă etapei S5 A "S3"
AN "S1" A "S4" = "y31"
O "Initiere" A "T4"
= "S0" O N16: acționare ieșire y32
R "Initiere" A "S5" O "S0"
AN "S7"
= "S5" O "S7"
N4: definire variabilă = "y32"
aferenta etapei S1 N9: definire variabilă
A "S0" aferentă etapei S6 N17: definire variabilă
A "T0" A "S3" BlinkON
O A "T3" A "S6"
A "S1" O
A "S6" = "BlinkON"
AN "S2"
= "S1" AN "S7"
= "S6"
Fig.1.9 Aplicația A1. Programul principal OB1 (limbaj STL), implementare Step7. Programul
OB100, funcțiile „Resurse” și „Blinking” se scriu în același mod sau se obțin prin convertire
din LD/FBD.

178
Cap.7 Aplicații industriale conduse de PLC-uri

Proiectul este organizat în următoarele unități de program:


 Programul principal (OB1) – elaborat în limbajul STL (IL) (Fig.1.9);
 Programul OB100 – inițializare variabile, elaborat în LD (Fig.1.7);
 Funcția Resurse – temporizatoare și tranziții, elaborată în LD (Fig.1.6)
 Funcția „Blinking” – semnalizare optică, elaborată în LD (Fig.1.4).
Programul principal este constituit din secțiunea de declarare a variabilelor
și secțiunea de cod. Implementarea s-a realizat în Step7, limbaj STL. Limbajul STL
este versiunea Siemens pentru limbajul Instruction List (IL) IEC61131-3. Lista de
simboluri este descrisă în tabelul 1.3.
Observație: Transpunerea grafului de implementarea în limbajul FBD se face
la fel ca în limbajul LD cu observația că funcțiile logice aferente rețelelor sunt
realizate prin intermediul blocurilor funcționale (vezi Cap.5, Fig.5.40).

1.4 Simularea și testarea funcționării sistemului automat utilizând


platforma de dezvoltare-testare FluidSIM – Step7 – EzOPC

Platforma de dezvoltare-testare FluidSIM – Step7 – EzOPC permite


simularea unui sistem/proces în aplicația FluidSIM, dezvoltarea aplicației de
control în mediul Step7, simularea PLC-ului prin aplicația S7-PLCSim și
interconectarea acestor aplicații prin EzOPC. Platforma permite dezvoltarea
aplicațiilor și implementarea lor în conceptul SIL (Software In the Loop): Proces
simulat - PLC Simulat.

Resurse software necesare:


1) FluidSIM-Pneumatic (Festo) – aplicația software utilizată pentru simularea
procesului (Fig. 1.4a);
2) SIMATIC STEP 7 (Siemens) – mediul de programare al PLC-urilor din familia
Siemens S7-300 și S7-400. Permite si simularea aplicației de control.
3) EzOPC (Festo) - aplicație de tip server OPC „Open Connectivity via Open
Standards”, care face posibilă comunicarea între aplicațiile windows și
echipamentele automate. Face posibilă comunicația între FluidSIM și Step7
si permite dezvoltarea simulărilor în conceptul SIL (Proces simulat-PLC
simulat).

179
Controlere logice programabile: programarea și dezvoltarea aplicațiilor industriale

Etape de lucru:
1) În mediul FluidSIM-P se realizează procesul în conformitate cu figura 1.2;
2) Se configurează interfețele de comunicație FluidSIM-In și FluidSIM-Out în
conformitate cu tabelul 1.1.
3) Se lansează procesul în simulare: FluidSIM/Execute/Start
4) Dacă este cazul se va configura și aplicația EzOPC astfel încât procesul
simulat în FluidSIM să fie conectat prin Controlerul Virtual la S7-PLCSim
(fereastra Overview).
5) În mediul Simatic Step7 se elaborează programul de conducere și control
urmând pașii descriși în Anexa 3, Anexa 5 și Anexa 6: creare proiect, editare
listă de simboluri conform tabel 1.3, editare program.
6) Se lansează aplicația S7-PLCSim (Simatic Manager/Options/Simulate
Modules) și se comută CPU-ul pe poziția STOP.
7) Se încarcă proiectul (programul) în PLC-ul simulat (S7-PLCSim): se selectează
toate componentele proiectului (toate obiectele din Blocks) și apoi din
meniu se alege opțiunea PLC/Download.
8) În fereastra S7-PLCSim se comută CPU-ul simulat pe RUN sau RUN-P și se
testează modul de funcționare.

1.5 Implementarea și testarea experimentală

Pentru elaborarea programului de conducere și control a presei pneumatice


se utilizează mediul Simatic Step7 (Siemens). Echipamentele utilizate pentru
testarea experimentală sunt descrise în tabelul 1.4. Implementarea și testarea
experimentală a aplicației comportă parcurgerea următoarelor etape:
1. Crearea unui nou proiect (conform Anexei 3)
2. Configurarea hardware (conform Anexei 4): specificarea arhitecturii
PLC-ului utilizat (sursă de alimentare, unitate centrală, module de
intrare/ieșire, alte module), specificarea adreselor aferente fiecărui modul
etc.
3. Completarea listei de simboluri (conform Anexei 5, Tabelul 1.3)
4. Editarea programelor într-un anumit limbaj (conform Anexei 6)
5. Compilarea proiectului (transformarea codului în limbaj mașină)

180
Cap.7 Aplicații industriale conduse de PLC-uri

6. Încărcarea aplicației pe PLC (pentru comunicare cu PLC-ul și încărcarea


proiectului trebuie configurată interfața PC/PLC, conform Anexei 2)
7. Testarea aplicației pe standul experimental (Fig.1.1)

Tabelul 1.4 Lista echipamentelor necesare pentru implementarea și testarea


experimentală a aplicației (Laboratorul de Mecatronică și echipamente de
automatizare al UTCN).
Nr. Echipament Cod Informații

FESTO
1 Sursă de laborator de 24V DC, 4.5A
162416

FESTO
2 Programator SIEMENS (port USB)
539006

3 Cabluri de alimentare -

FESTO
4 PLC S7-300 EduTrainer
535255

Sistem de calcul necesar pentru dezvoltarea


5 -
aplicației în mediul Step7

6 Presă pneumatică - Fig.1.1


7 Compresor - -

181
CURS 11-12 : STUDIU DE CAZ

Disciplina: Automate de Control și Servire


Tematica cursului: Proiectarea aplicațiilor secvențiale (I)
Locație: Laboratorul de Mecatronică și Echipamente de Automatizare (sala C304A)/Teams
An: IV MFN

Obiective • Proiectarea aplicațiilor pe baza grafului de implementare (diagramelor secvențiale)


specifice • Simularea și implementarea aplicațiilor secvențiale
• Utilizarea mediilor software specifice

Conținut • Elaborarea grafului de implementare (etape, tranziții, acțiuni)


• Determinarea/extragerea variabilelor asociate tranzițiilor, etapelor și reprezentarea acțiunilor
• Implementarea grafului (conversia în limbaj de programare: LD/IL/FBD/ST)
• Implementarea si testarea aplicațiilor: Codesys

Echipamente • Sisteme mecatronice modulare (Lab. MEA)


utilizate • PC : Codesys (free), FluidSIM (demo)

1
NOŢIUNI TEORETICE FUNDAMENTALE

• Proiectarea structurată a aplicațiilor industriale conduse de PLC-uri: Curs 7, 8, 9, 10 - ACS

Manipulator electropneumatic

Descrierea problemei
M2
B21
Se consideră sistemul pick & place din figura alăturată
utilizat pentru manipularea pieselor cilindrice din
B12 B11
punctul A în punctul B, având descrierea tehnică
cunoscută. Se cere elaborarea în limbaj LD a aplicației M1

de control a sistemului, în conformitate cu specificațiile


B22
de funcționare detaliate mai jos. Elaborarea
programului LD se va face pe baza grafului de
implementare (SFC/Grafcet).
M3 B3

Descrierea tehnică a sistemului (se cunosc):


- M1, M2 - motoare pneumatice liniare
Part_Av
- M3 - gripper cu acționare pneumatică
(la acționare se deschide) A B
- B3, Part_Av – senzori de prezentă piesă Fig.1 Schema sistemului de manipulare
- B11, B12, B21, B22 – senzori capete de cursă
- START/STOP – butoane de comandă proces

Obs: Circuitului de acționare și circuitul electric sunt


descrise în detaliu în Fig.2 și Fig.3.

Fig.2 Circuitul de acționare pneumatică Fig.3 Circuitul electric

Specificații de funcționare (se cer):


Poziția inițială (HOME):
Motor M1: piston deplasat dreapta (senzor B11 activat);
Motor M2: piston retras (senzor B21 activat);
Motor M3 (gripper): închis

a. Modul de funcționare 1
- La apăsarea butonului START, dacă există piesă în punctul A se operează manipularea acesteia, din A în punctul B.
Procesul continuă ciclic/automat atâta vreme cât există piesă în punctul A; dacă nu există piesă în punctul A sistemul
intră în așteptare în poziția HOME.
- La apăsarea butonului STOP sistemul continuă ciclul de funcționare curent și se oprește în poziția HOME.

2
b. Modul de funcționare 2
Suplimentar fată de Modul 1, operațiile de prindere și desprindere a pieselor se vor face prin introducerea unor timpi
de prindere/desprindere de 2s. Se asigură astfel prinderea sigură a gripper-ului, respectiv desprinderea
corespunzătoare a pieselor în punctul B.

c. Modul de funcționare 3
Suplimentar fată de Modul 2, se cere introducerea unei funcții de numărare (Counter) a pieselor manipulate care să
permită ca la fiecare apăsare a butonului START să se execute trei cicluri de manipulare A->B. La finalul celor trei
cicluri sistemul se oprește în poziția HOME.

d. Modul de funcționare 4
Suplimentar fată de Modul 3, se cere introducerea unei funcții de semnalizare care să lucreze în modul următor:
atunci când se identifică faptul că nu există piesă în punctul A (verificarea se face la începutul sau sfârșitul ciclului de
manipulare, poziția HOME), se va semnaliza situația prin aprinderea intermitentă a lămpii L, cu frecvența de 1Hz.
Semnalizarea încetează odată cu remedierea situației (piesă în A), respectiv procesul de manipulare continuă.

e. Modul de funcționare 5
Suplimentar fată de Modul 4, se cere introducerea unei funcții de resetare a sistemului care să lucreze astfel: dacă la
inițierea funcționării (RUN PLC) se identifică o poziționare a sistemului de manipulare diferită de poziția HOME, atunci
se va aprinde lampa (L ), respectiv sistemul va putea fi readus în poziția HOME prin apăsarea butonului START timp de
trei secunde. Odată sistemul readus în poziția HOME poate intra în funcționarea normală la apăsarea simplă a
butonului START.
OBS: pentru simularea acestei situații se va inversa conexiunea pneumatică a motorului M1.

Mod de lucru: Detaliere


1. Realizarea (simularea) circuitului de acționare După schemă conform Fig.2 (FluidSIM)
2. Realizarea (simulată) a circuitului electric După schemă conform Fig.3 (FluidSIM)
3. Elaborarea grafului de implementare Elaborare graf după reguli GRACET/SFC (vezi curs CLP)
Determinarea/extragerea variabilelor asociate tranzițiilor,
etapelor și reprezentarea acțiunilor
3. Implementare aplicație în limbaj LD/Codesys Implementare Codesys
a. Creare proiect - New Project/Standard Project/Ladder Diagram
b. Creare listă de variabile globale - Application (R.Clk)/Add object/Global Variable List/GVL
- Edit GVL: Input:byte; Output:byte; ...(+alte variabile)
c. Specificare variabile OPC - Application (R.Clk)/Add object/Symbol Configuration
d. Configurare conexiune cu PLC simulat - Codesys Control Win SysTray (taskbar )/ Start PLC
- Device/Scan network (select device)/OK
e. Elaborare program/programe - New POU/ST: VAR_DEF (definire variabile booleene)
- Open PLC_PRG/Edit (editare program)
f. Compilare/verificare proiect - Menu/Build/Build
g. Încărcare proiect în PLC simulat - Menu/Online/Login/...with online change
h. Start PLC - Menu/Debug/Start

4. Simularea și testarea funcționării sistemului Codesys + FluidSIM


a. Configurare conexiune cu FluidSIM - FluidSIM/Options/EasyPort-OPC../OPC mode/OK
- FluidSIM OUT:
OPC server: CoDeSys.OPC.DA
Item: PLC_GW3.Application.GVL.Input
- FluidSIM OUT:
OPC server: CoDeSys.OPC.DA
Item: PLC_GW3.Application.GVL.Output
b. Simulare/Testare - FluidSIM/Menu/Play

3
Resurse disponibile:
- Modelul sistemului controlat: Manipulator.ct (FluidSIM),
- Lista de variabile globale (GVL),
- Program VAR_DEF (preia variabile din FluidSIM)

VAR_GLOBAL VAR_DEF
--------------------------------------------------------------------
(*variabile de intrare si de ieșire - conexiune OPC *)
VAR
Input: BYTE;
END_VAR
Output: BYTE;
(*Variabile de intrare booleene - aferente Input*) (*Preluare valoare de la intrari <- Input*)
Start: BOOL;
Start:=Input.0;
Stop: BOOL;
Stop:=Input.1;
B11: BOOL;
B11:=Input.2;
B12: BOOL;
B12:=Input.3;
B21: BOOL;
B21:=Input.4;
B22: BOOL;
B22:=Input.5;
B3: BOOL;
B3:=Input.6;
PartAv: BOOL;
PartAv:=Input.7;
(*Variabile de iesire booleene - aferente Output*)
Y11: BOOL; (*Transfer valoare catre iesiri -> Output*)
Y12: BOOL;
Output.0:=Y11;
Y2: BOOL;
Output.1:=Y12;
Y3: BOOL;
Output.2:=Y2;
L: BOOL;
Output.3:=Y3;
Output.4:=L;
(*Tranzitii*)
T0,T1,T2,T3,T4,T5,T6,T7,T8:BOOL;

(*Etape*)
S0,S1,S2,S3,S4,S5,S6,S7,S8:BOOL;

END_VAR

Bibliografie: Hancu O., Rad C.R., Controlere Logice Programabile, UT Press, 2017.

4
Soluție: a. Modul de funcționare 1

Graful de implementare (SFC) Determinarea/extragerea variabilelor asociate


tranzițiilor, etapelor și reprezentarea acțiunilor
(se extrag din graful de implementare)

(*Definire variabile Tranzitii*)


T0:= (START OR T0) AND NOT STOP AND PartAv;
T1:= B12;
T2:= B22;
T3:= B3;
T4:= B21;
T5:= B11;
T6:= B22;
T7:= NOT B3;
T8:= B11 AND B21;

(* Definire variabile etape *)


S0:= (S8 AND T8) OR (S0 AND NOT S1) OR Init;
S1:= (S0 AND T0) OR (S1 AND NOT S2);
S2:= (S1 AND T1) OR (S2 AND NOT S3);
S3:= (S2 AND T2) OR (S3 AND NOT S4);
S4:= (S3 AND T3) OR (S4 AND NOT S5);
S5:= (S4 AND T4) OR (S5 AND NOT S6);
S6:= (S5 AND T5) OR (S6 AND NOT S7);
S7:= (S6 AND T6) OR (S7 AND NOT S8);
S8:= (S7 AND T7) OR (S8 AND NOT S0);

(* Definire variabile de ieşire/acţiuni *)


Y11:=S1
Y12:=S5
Y2:= S2 OR S3 OR S6 OR S7
Y3:= S2 OR S7

5
Implementare LD: LD_PRG Structura Proiectului

OBS: Tranzițiile pot fi definite în VAR_DEF:

VAR_DEF:
(*Preluare valoare de la intrarile Input*)
Start:=Input.0;
Stop:=Input.1;
B11:=Input.2;
B12:=Input.3;
B21:=Input.4;
B22:=Input.5;
B3:=Input.6;
PartAv:=Input.7;

(*Transfer valoare catre iesirile Output*)


Output.0:=Y11;
Output.1:=Y12;
Output.2:=Y2;
Output.3:=Y3;
Output.4:=L;

(*Definire variabile Tranzitii*)


T0:= (START OR T0) AND NOT STOP AND PartAv;
T1:= B12;
T2:= B22;
T3:= B3;
T4:= B21;
T5:= B11;
T6:= B22;
T7:= NOT B3;
T8:= B11 AND B21;

6
CURS 13-14 : STUDIU DE CAZ

Disciplina: Automate de Control și Servire


Titlul lucrării: Proiectarea aplicațiilor secvențiale (II)
Locație: Laboratorul de Mecatronică și Echipamente de Automatizare (sala C304A)/Teams
An: IV MFN

Obiective • Proiectarea aplicațiilor pe baza grafului de implementare (diagramelor secvențiale)


specifice • Simularea și implementarea aplicațiilor secvențiale
• Utilizarea mediilor software specifice

Conținut • Elaborarea grafului de implementare (etape, tranziții, acțiuni)


• Determinarea/extragerea variabilelor asociate tranzițiilor, etapelor și reprezentarea acțiunilor
• Implementarea grafului (conversia în limbaj de programare: LD/IL/FBD/ST)
• Implementarea si testarea aplicațiilor: Codesys

Echipamente • Sisteme mecatronice modulare (Lab. MEA)


utilizate • PC : Codesys (free), FluidSIM (demo)

1
NOŢIUNI TEORETICE FUNDAMENTALE

• Proiectarea structurată a aplicațiilor industriale conduse de PLC-uri: Curs 7, 8, 9, 10 - ACS

Presa electropneumatică

Descrierea problemei

În Fig. 1 este prezentată o presă electropneumatică


ce include în structura ei o cameră de presare, un
sistem de alimentare și o ușa glisantă pentru izolarea
camerei de presare. Circuitul de acționare este
format din trei motoare pneumatice liniare acționate
prin intermediul a trei distribuitoare. Motoarele
servesc pentru acționarea sistemului de alimentare
(M1), pentru realizarea operației de presare (M2) și
pentru acționarea ușii culisante (M3).

Se cere elaborarea în limbaj LD a aplicației de control


a sistemului, în conformitate cu specificațiile de
funcționare detaliate mai jos. Elaborarea programului
LD se va face pe baza grafului de implementare
(SFC/Grafcet).

Descrierea tehnică a sistemului (se cunosc): Fig.1 Presa electropneumatică


- M1, M2, M3: motoare pneumatice liniare;
- P: senzor identificare piesă (plastic (1); metal (0));
- B11, B12, B31, B32: senzori capete de cursă;
- START/STOP: butoane de comandă proces;
- Y11, Y12, Y21, Y22, Y31, Y32: electromagneți de Obs: Circuitului de acționare și circuitul electric sunt descrise
comandă a distribuitoarelor; în detaliu în Fig.2 și Fig.3.
- L1,L2: lămpi de semnalizare.

Fig.2 Circuitul de acționare pneumatică Fig.3 Circuitul electric

2
În starea inițială (HOME) ușa glisantă și pistonul presei sunt ridicate, motorul sistemului de alimentare este în poziție
avansat (gata pentru preluare piesă), iar lampa de semnalizare L1 este aprinsă.

Poziția inițială (HOME):


Motor M1: piston deplasat stânga (senzor B12 activat);
Motor M2: piston retras (poanson ridicat);
Motor M3: piston retras (grila de protecție ridicată);
L1: aprinsă;

Specificații de funcționare (se cer):

a. Modul de funcționare 1
- Presupunând că presa se află în starea inițială (HOME), la apăsarea butonului START se declanșează procesul de
presare (vezi descrierea de mai jos). Procesul rulează ciclic (automat) și poate fi oprit prin apăsarea butonului STOP. La
apăsarea butonului STOP sistemul continuă ciclul de funcționare curent și se oprește în poziția HOME.
- Procesul de presare decurge în modul următor:
• La apăsarea butonului START, lampa L1 se stinge, sistemul de alimentare introduce piesa în camera de
presare (pistonul motorului M1 se retrage complet), apoi coboară ușa glisantă (M3 avans).
• După ce camera de presare este securizată (ușa glisantă este închisă complet), pistonul motorului M2
coboară și comprimă piesa timp de t secunde, apoi se ridică în poziția de siguranță (motor M2 retras). Dacă
piesa este din material plastic (P=1) atunci t = 3 secunde, iar dacă piesa este din material metalic (P=0) atunci
t = 5 secunde.
• Operația de presare (derulată pe parcursul a t secunde) este semnalizată optic prin intermediul lămpii L2 care
trebuie să lumineze intermitent cu frecvența de 1 Hz.
• La finalizarea operației de presare, lampa de semnalizare L2 se stinge și ușa glisantă este ridicată. Odată ce
ușa este ridicată complet, sistemul de alimentare evacuează piesa, apoi se aprinde lampa L1 și se păstrează
această stare (HOME) timp de o (una) secundă, după care se reia ciclul.

b. Modul de funcționare 2
Suplimentar fată de Modul 1, se cere introducerea unei funcții de numărare (Counter) care să permită ca la fiecare
apăsare a butonului START să se execute trei cicluri de presare (trei piese). La finalul celor trei cicluri sistemul se
oprește în poziția HOME.

c. Modul de funcționare 3
Suplimentar fată de Modul 2, se cere modificarea funcției de semnalizare astfel: atunci când se operează cu piese din
material plastic se va semnaliza situația prin aprinderea intermitentă a lămpii L2 cu frecvența de 1Hz, iar când se
operează cu piese din material metalic se va semnaliza prin aprinderea intermitentă a lămpii L2 cu frecvența de 0.5Hz.

d. Modul de funcționare 4
Suplimentar fată de Modul 3 se cere introducerea unei funcții de resetare a sistemului care să lucreze astfel: dacă la
inițierea funcționării (RUN PLC) se identifică o poziționare a sistemului de manipulare diferită de poziția HOME, atunci
se va aprinde lampa (L1 ), respectiv sistemul va putea fi readus în poziția HOME prin apăsarea butonului START timp
de trei secunde. Odată sistemul readus în poziția HOME poate intra în funcționarea normală la apăsarea simplă a
butonului START.

OBS: pentru simularea acestei situații se va inversa conexiunea pneumatică a motorului M1.

3
Mod de lucru: Detaliere
1. Realizarea (simularea) circuitului de acționare După schemă conform Fig.2 (FluidSIM)

2. Realizarea (simulată) a circuitului electric După schemă conform Fig.3 (FluidSIM)

3. Elaborarea grafului de implementare Elaborare graf după reguli GRACET/SFC (vezi curs CLP)
Determinarea/extragerea variabilelor asociate tranzițiilor,
etapelor și reprezentarea acțiunilor

3. Implementare aplicație în limbaj LD/Codesys Implementare Codesys


a. Creare proiect - New Project/Standard Project/Ladder Diagram
b. Creare listă de variabile globale - Application (R.Clk)/Add object/Global Variable List/GVL
- Edit GVL: Input:byte; Output:byte; ...(+alte variabile)
c. Specificare variabile OPC - Application (R.Clk)/Add object/Symbol Configuration
d. Configurare conexiune cu PLC simulat - Codesys Control Win SysTray (taskbar )/ Start PLC
- Device/Scan network (select device)/OK
e. Elaborare program/programe - New POU/ST: VAR_DEF (definire variabile booleene)
- Open PLC_PRG/Edit (editare program)
f. Compilare/verificare proiect - Menu/Build/Build
g. Încărcare proiect în PLC simulat - Menu/Online/Login/...with online change
h. Start PLC - Menu/Debug/Start

4. Simularea și testarea funcționării sistemului Codesys + FluidSIM


a. Configurare conexiune cu FluidSIM - FluidSIM/Options/EasyPort-OPC../OPC mode/OK
- FluidSIM OUT:
OPC server: CoDeSys.OPC.DA
Item: PLC_GW3.Application.GVL.Input
- FluidSIM OUT:
OPC server: CoDeSys.OPC.DA
Item: PLC_GW3.Application.GVL.Output
b. Simulare/Testare - FluidSIM/Menu/Play

4
Resurse disponibile:
- Modelul sistemului controlat: Presa2.ct (FluidSIM),
- Lista de variabile globale (GVL),
- Program VAR_DEF (preia variabile din FluidSIM)

VAR_GLOBAL VAR_DEF
--------------------------------------------------------------------
(*variabile de intrare si de ieșire - conexiune OPC *)
VAR
Input: BYTE;
END_VAR
Output: BYTE;
(*Variabile de intrare booleene - aferente Input*) (*Preluare valoare de la intrari <- Input*)
Start: BOOL;
Start:=Input.0;
Stop: BOOL;
Stop:=Input.1;
B11: BOOL;
B11:=Input.2;
B12: BOOL;
B12:=Input.3;
B31: BOOL;
B31:=Input.4;
B32: BOOL;
B32:=Input.5;
P: BOOL;
P:=Input.6;

(*Variabile de iesire booleene - aferente Output*)


Y11: BOOL; (*Transfer valoare catre iesiri -> Output*)
Y12: BOOL;
Output.0:=Y11;
Y21: BOOL;
Output.1:=Y12;
Y22: BOOL;
Output.2:=Y21;
Y31: BOOL;
Output.3:=Y22;
Y32: BOOL;
Output.4:=Y31;
L1: BOOL;
Output.5:=Y32;
L2: BOOL;
Output.6:=L1;
Output.7:=L2;
(*Tranzitii*)
T0,T1,T2,T3,T4,T5,T6,T7,T8 .......BOOL;

(*Etape*)
S0,S1,S2,S3,S4,S5,S6,S7,S8,..... BOOL;

END_VAR

Bibliografie: Hancu O., Rad C.R., Controlere Logice Programabile, UT Press, 2017.

S-ar putea să vă placă și