Sunteți pe pagina 1din 108

PREFAŢĂ

Lucrarea “Automate şi Microprogramare” reprezintă un suport teoretic şi practic


de proiectare a soluţiilor de conducere automată a proceselor industriale utilizând
echipamente de tip automat programabil.
Lucrarea este dedicată în primul rând studenţilor facultăţii de Automatică şi
Calculatoare din Universitatea Politehnica Bucureşti, care audiază cursul şi frecventează
laboratorul de Automate şi Microprogramare. De asemenea este utilă studenţilor din
facultăţile cu profil de automatică aparţinând universităţilor tehnice din ţară.
Cartea este structurată în 4 capitole, în care sunt prezentate cele mai reprezentative
tehnici de programare, suportate de majoritatea producătorilor de automate programabile
industriale:
- limbajul grafic Grafcet
- diagrame de tip Ladder
- limbaje literare de tip Structured Text
De asemenea sunt prezentate in detaliu mediile de programare logică avansată
ISaGRAF şi IndraLogic, fiind descrise pe larg atât metodele de dezvoltare a unor proiecte
ample cât şi detalii despre implementarea interfeţelor grafice necesare vizualizării şi
supervizării aplicaţiei implementate.
Prezentarea funcţionării dispozitivelor de tip automat programabil reprezintă baza
de cunoştinţe necesare unui viitor inginer automatist în scopul dezvoltării de sisteme
automate performante.
Metodele si soluţiile originale prezentate în cadrul lucrării, cum ar fi consideraţiile
asupra trecerii de la diagrame logice la programe de tip treaptă, ajută viitorii specialişti în
conceperea unor soluţii software corecte indiferent de tipul automatului cu care se lucrează.
Prezentarea detaliată a lucrului cu cele mai noi medii de programare logică,
descrierea în amănunt a soluţiilor de automatizare pentru procese industriale complexe,
cuprinzând programe ciclice, secvenţiale, ecrane de vizualizare, programe de comunicaţie,
prezintă un grad evident de noutate în literatura ştiinţifică şi tehnică din ţară.
Multe din informaţiile si soluţiile prezentate în carte înglobează experienţa şi
cunoştinţele colectivului centrului de cercetare de excelenţă CIMR din cadrul Facultăţii de
Automatică şi Calculatoare din Universitatea POLITEHNICA Bucureşti.

Autorul
CUPRINS
Capitolul 1: CARACTERISTICI ŞI PERFORMANŢE ALE
AUTOMATELOR PROGRAMABILE
1.1. Structura automatelor programabile 7
1.2. Module de intrare ieşire 9
1.3. Funcţionarea automatelor programabile 11
1.4. Diagrame logice 13

Capitolul 2: DESCRIEREA LIMBAJULUI LADDER DIAGRAM


2.1. Organizarea memoriei şi moduri de adresare pentru
automatul Allen Bradley 21
2.2. Structura internă a fişierelor de date implicite 23
2.3. Programarea automatului Allen Bradley prin metoda
Ladder Diagram 26
2.4. Tipuri de instrucţiuni 29
2.5. Dezvoltarea unei diagrame Ladder pornind de la
o diagramă Grafcet 43

Capitolul 3: MEDIUL DE PROGRAMARE LOGICĂ ISaGRAF

3.1. Structura unui proiect ISaGRAF 48


3.2. Descrierea limbajului Sequencial Function Chart 52
3.2.1. Componente de bază 53
3.2.2. Divergenţe şi convergenţe 55
3.2.3. Paşi macro 56
3.2.4. Operaţii în cadrul etapelor 57
3.2.5. Condiţii ataşate tranziţiilor 60
3.2.6. Regulile dinamicii limbajului SFC 61
3.2.7. Ierarhizarea programelor SFC 62
3.3. Descrierea limbajului Structured Text 63
3.3.1. Elemente de sintaxă în Structured Text 63
3.3.2. Expresii şi paranteze 64
3.3.3. Apelarea funcţiilor şi procedurilor 64
3.3.4. Operatori booleeni specifici ST 65
3.3.5. Instrucţiuni fundamentale în ST 66
3.3.6. Extensii ale limbajului ST 69
3.4. Operatori, proceduri şi funcţii standard 73
3.4.1. Operatori standard 73
3.4.2. Proceduri standard 76
3.4.3. Funcţii standard 78
3.5. Variabile şi constante în ISaGRAF 81
3.5.1. Domeniile variabilelor 81
3.5.2. Principalele tipuri de variabile 82
3.5.3. Expresii constante 82
Capitolul 4: DESCRIEREA MEDIULUI DE PROGRAMARE
INDRALOGIC
4.1. Structura unui proiect IndraLogic 84
4.1.1. Conceptul POU 85
4.1.2. Conceptul Data types 85
4.1.3. Conceptul Vizualization 86
4.1.4. Resursele implicate 86
4.2. Tipuri de date în IndraLogic 87
4.2.1. Tipuri de date predefinite 87
4.2.2. Tipuri de date definite de utilizator 88
4.2.3. Variabile globale 88
4.3. Diferenţe importante IndraLogic – ISaGRAF 89
4.4. Blocuri funcţionale 90
4.5. Problematica timpului în IndraLogic 94
4.6. Taskuri şi configurarea acestora 98
4.7. Conceptul de vizualizare 101
4.8. Configurarea unui proiect pentru simulare pe calculator 106
4.9. Configurarea comunicaţiei cu automatul BOSCH-Rexroth IndraControl L40
110

BIBLIOGRAFIE 113
CAP 1. CARACTERISTICI ŞI
PERFORMANŢE ALE AUTOMATELOR
PROGRAMABILE

Un AP (Automat Programabil) este un dispozitiv apărut pentru a


înlocui releele şi schemele secvenţiale necesare pentru controlul sistemelor
automate [Borangiu, 1986]. Principiul de bază al unui AP este următorul:
verifică starea intrărilor şi, în funcţie de acestea, activează sau dezactivează
ieşirile. Utilizatorul introduce un program, care face ca automatul să dea
rezultatele dorite.

1.1. Structura automatelor programabile

Un AP este compus în principal din: unitate centrală (UC), zonă de


memorie şi circuite pentru recepţionarea datelor de intrare/ieşire (fig. 1.1).
Putem considera AP-ul ca o cutie plină de relee individuale, numărătoare,
ceasuri şi locaţii de memorare a datelor. În general componentele unui
automat programabil sunt:
 Unitate centrală
 Module de intrare / ieşire
 Regiştri de intrare / ieşire
 Memorie de date
 Regiştri interni
 Circuite de temporizare
 Circuite de numărare
Fig. 1.1. Structura unui automat programabil

Funcţionarea lor este următoarea:


 Unitatea centrală: conţine un procesor, o unitate de calcul aritmetic şi
diferite tipuri de memorie. Gama de procesoare folosite de către
producătorii de automate programbile este foarte diversificată, câteva
exemple ar putea fi procesoarele Motorola, Intel, Siemens.
Procesoarele folosesc o memorie de lucru de tip RAM pentru execuţia
instrucţiunilor, programul de executat fiind de obicei memorat într-o
memorie de tip Flash. Dimensiunile memoriilor diferă de la un tip de
automat la altul, influenţând performanţele şi costul automatului
programabil.
 Module de intrare: conţin unul sau mai multe circuite de intrare.
Acestea există fizic, sunt conectate la lumea exterioară şi
recepţionează semnale de la comutatoare, senzori etc. Semnalele citite
pot fi de două tipuri, digitale sau analogice. De regulă circuitele de
intrare sunt implementate cu relee sau tranzistori.
 Module de ieşire: conţin unul sau mai multe circuite de ieşire.
Acestea există fizic, sunt conectate la lumea exterioară şi transmit
semnale digitale sau analogice către diferite elemente de execuţie. Ca
variantă constructivă pot fi aleşi tranzistorii, releele sau triacele.
 Regiştri de intrare: sunt regiştri asociaţi intrărilor fizice. Valoarea
semnalelor de intrare este convertită în formă binară de către circuitele
de intrare şi memorată în aceşti regiştri. Pentru intrările de tip digital,
un singur bit dintr-un registru poate memora starea activă/inactivă a
intrării, dar în cazul unei intrări analogice sunt necesari mai mult biţi
pentru memorarea valorii în format numeric.
 Regiştri de ieşire: sunt regiştri asociaţi ieşirilor fizice. Valoarea
semnalelor de ieşire este scrisă aici în formă binară, coversia într-un
semnal electric de o anumită valoare fiind facută de către circuitele de
ieşire (convertoare digital – analogice). Pentru ieşirile de tip digital, un
singur bit dintr-un registru poate memora starea activă/inactivă a
ieşirii, dar în cazul unei ieşiri analogice sunt necesari mai mult biţi
pentru scrierea valorii în format binar.
 Regiştri interni : nu recepţionează semnale din mediul extern, nici nu
există fizic. Conţin relee simulate prin biţi din regiştri şi au fost
introduse pentru a elimina releele interne fizice. Există şi regiştri
speciali care sunt dedicaţi unui anumit scop. Unele relee sunt
intotdeauna deschise, altele sunt întotdeauna închise. Unele sunt
deschise numai o dată la pornire şi sunt folosite pentru iniţializarea
datelor memorate.
 Numărătoare: Nici acestea nu există fizic. Sunt numărătoare
simulate şi pot fi programate să contorizeze impulsuri. De obicei,
aceste numărătoare pot număra crescător, descrescător şi în ambele
sensuri. Anumiţi producători includ şi numărătoare de mare viteză
implementate hard, pe care am putea să le considerăm ca existente
fizic. Şi acestea pot număra crescător, descrescător sau în ambele
sensuri.
 Circuite de temporizare : Nici circuitele de temporizare nu există
fizic. Sunt simulate software şi contorizează perioade de timp. Pot fi
găsite în diverse variante în ceea ce priveşte parametrii. Pasul de
incrementare variază de la 1ms până la 1s.
 Memoria de date: în mod normal este vorba de simpli regiştri care
memorează date. De obicei sunt folosiţi pentru aplicaţii matematice
sau pentru manipularea datelor. Pot fi folosiţi şi pentru memorarea
datelor cât timp AP-ului i se întrerupe alimentarea. La pornire, vor
avea acelaşi conţinut ca înainte de oprire.

1.2. Module de intrare – ieşire

Există o mare varietate de module de intrare – ieşire ce pot intra în


componenţa unui AP. Există două categorii mari de module:
1. Module I/O analogice: semnalul pe care îl transmit sau îl
recepţionează are o valoare analogică
2. Module I/O digitale: semnalul este de tip digital, putând avea doar
două valori.

În funcţie de mărimile fizice citite sau de semnalele transmise, iată


câteva exemple de module ce pot fi ataşate unui AP:
 intrări/ieşiri de curent continuu
 intrări/ieşiri de curent alternativ
 intrări/ieşiri de tensiuni continue sau alternative
 module de citit temperaturi
 module de reglare PID
 module de control Fuzzy

 Intrări de curent continuu

Sunt disponibile circuite care funcţionează la 5, 12, 24 şi 48 de


volţi. Modulele de intrare permit conectarea unor dispozitive de tip
tranzistor PNP sau NPN. În cazul unui comutator nu se pune problema
conectării de tip NPN sau PNP. Fotocuploarele (optocuploarele) sunt
folosite pentru a izola circuitele interne ale AP-ului de intrări. Acest lucru
este necesar pentru a elimina zgomotele şi se realizează prin conversia
semnalului de intrare din formă electrică în formă luminoasă şi apoi invers.

 Intrări de curent alternativ

Modulele de intrare obişnuite funcţionează la 24, 48, 110, 220 volţi.


Dispozitivele legate la intrarea de curent alternativ sunt sesizate mai greu de
către AP. De cele mai multe ori acest lucru nu are importanţă pentru cel care
programează automatul programabil, dar este bine de ştiut că se pierde timp
din cauză că dispozitivele pe bază de curent alternativ sunt de obicei
dispozitive mecanice, care sunt mai lente. În plus apare şi o întârziere de cel
puţin 25 ms datorită filtrării care are loc la intrarea în AP. De reţinut că AP-
urile funcţionează la cel mult 5 VCC.

 Ieşiri cu relee

Ieşirile cele mai obişnuite sunt cele de tip releu. Releele pot fi
folosite atât cu sarcină de curent alternativ, cât şi continuu. Metoda standard
de conectare a sarcinilor la ieşirile AP-ului presupune folosirea unei surse de
curent alternativ, însă poate fi folosit şi curentul continuu.
Releele se află în interiorul automatului programabil. Atunci când
programul care rulează în automat indică ieşirii să devină activă (adevarată),
AP-ul va aplica o tensiune bobinei releului, care va închide contactul
corespunzător. La închiderea contactului începe să circule curent prin
circuitul extern. Atunci când programul indică dezactivarea ieşirii, AP-ul va
întrerupe tensiunea aplicată bobinei releului, circuitul extern va fi deschis,
deci inactiv.

1.3. Funcţionarea automatelor programabile

Automatele programabile funcţionează scanând (executând)


continuu un program. Putem spune că un ciclu de scanare are trei paşi
importanţi (fig. 1.2).

Fig. 1.2. Ciclul de funcţionare al unui automat programabil

 Pasul 1 - TESTAREA INTRĂRILOR - AP-ul cercetează starea intrărilor


(activ/inactiv în cazul intrărilor numerice sau valoarea unei intrări
analogice) şi o copiază, în formă binară, în anumiţi regiştri asociaţi
intrărilor.
 Pasul 2 - EXECUTAREA PROGRAMULUI - AP-ul execută programul
instrucţiune cu instrucţiune. În funcţie de starea intrărilor si de logica
programului, schimbă configuraţia registrilor de ieşire, în formă binară.
 Pasul 3 - ACTIVAREA IEŞIRILOR - În final AP-ul actualizează şi
starea ieşirilor fizice pe baza stării ieşirilor rezultate din pasul anterior.
După cel de-al treilea pas, AP-ul revine la pasul 1 şi reia ciclul. Un ciclu
de scanare este definit ca timpul în care se execută cei trei paşi de mai
sus.

De fapt sunt mai mult de trei paşi, mai au loc verificarea sistemului
şi actualizarea valorilor curente ale ceasului şi numărătorului intern.

Timpul de răspuns

Timpul total de răspuns este un parametru important al unui automat


programabil. Unui automat programabil îi trebuie un anumit timp pentru a
reacţiona la schimbările valorilor de intrare. În unele aplicaţii viteza nu este
importantă, în altele da.

AP-ul poate vedea dacă o intrare este activă sau inactivă doar dacă o
citeşte. Cu alte cuvinte, el testează intrările doar în porţiunea
corespunzătoare a ciclului de scanare (fig. 1.3).

Fig. 1.3. Situaţii posibile de variaţie a intrărilor

În diagrama de mai sus, intrarea 1 nu este văzută înainte de ciclul 2.


Acest lucru se întâmplă deoarece atunci când s-a activat intrarea 1, ciclul 1
terminase deja de testat intrările.
Intrarea 2 nu este văzută înainte de ciclul 3. Acest lucru are loc
deoarece ciclul 2 deja terminase de testat intrările.
Intrarea 3 nu este văzută niciodată, deoarece când ciclul 3 testa
intrările, semnalul 3 nu era incă activ, iar la începutul ciclului 4 era deja
inactiv.
Pentru a evita acest lucru trebuie ca intrarea să fie activă pentru cel
puţin un timp de răspuns la intrare + un timp de scanare.

Dacă nu este posibil ca intrările să fie active atât de mult timp, AP-ul
nu mai poate citi intrările active nemaiputând implementa corect o aplicaţie
de control. Există o cale de a rezolva acest neajuns (mai precis două):
 Funcţia de extindere a impulsului. Această funcţie extinde
lungimea (durata) unui semnal de intrare până la momentul la care
AP-ul testează intrările, în ciclul următor.
 Funcţia de întrerupere. Această funcţie întrerupe ciclul de
scanare pentru a rula o rutină specială scrisă de utilizator. Când se
activează o intrare, indiferent de starea ciclului de scanare, AP-ul
opreşte execuţia programului principal şi execută rutina de
întrerupere (fig. 1.4). O rutină poate fi privită ca un mini-program
în afara programului principal. După ce a terminat execuţia rutinei
de întrerupere, se întoarce în punctul în care se oprise şi continuă
normal procesul de scanare.

Fig. 1.4. Extinderea impulsului prin întrerupere

1.4. Diagrame logice

Datorită diversităţii firmelor producătoare şi tipurilor de automate


programabile, există mai multe variante de programare a unui automat
programabil, dintre care pot fi amintite:
 Programarea cu ajutorul limbajelor grafice, de tip Grafcet sau
ISaGRAF
 Programarea prin diagrama Ladder
 Programarea în limbaje de nivel înalt (C, Pascal)

Limbajul Grafcet

Limbajul Grafcet reprezintă o modalitate de descriere grafică a unui sistem


logic secvenţial, fiind util datorită generalităţii şi facilităţilor de care
dispune, spre exemplu posibilitatea descrierii secvenţelor paralele [Arzen,
1994]. Elementele constitutive ale unei diagrame Grafcet sunt următoarele:

 Etape: corespund unei stări stabile a sistemului automat şi sunt


identificate printr-un număr unic.

Fig. 1.5. Etape Grafcet

Etapele pot fi:


 iniţiale: aceste etape sunt active iniţial (etapa 1 din fig.1.5).
 normale: sunt celelalte etape care nu sunt active iniţial (prima etapă
3 din fig.1.5). Ele se pot activa la un moment dat (etapa 3 cu un
punct ataşat din fig.1.5).

 Tranziţii: o tranziţie indică posibilitatea evoluţiei dintr-o stare activă


într-o nouă stare. Fiecărei tranziţii îi este asociată o condiţie logică, în
funcţie de valorile logice ale unor variabile de intrare sau de starea
activă sau inactivă a altor etape. Condiţia de tranziţie nu este validată
decât dacă etapele imediat precedente sunt active.
Fig.1.6. Diferite reprezentări de tranziţii

 Acţiuni asociate etapelor: deoarece o etapă poate fi activă sau


inactivă la un moment dat, există acţiuni asociate etapelor, care se
execută numai la activarea acestora. Pot exista şi acţiuni
condiţionate, ce se execută dacă, suplimentar, mai este adevarată
încă o condiţie logică.
Acţiunile pot fi diverse:
 deschiderea unei vane
 oprirea sau pornirea unui motor (fig.1.7)
 incrementarea unui contor
 pornirea unei temporizări

Fig.1.7. Comanda unui motor

 Ramificaţii (divergenţe): au loc între mai multe secvenţe posibile,


atunci când condiţiile de tranziţie se exclud între ele. Convergenţa
diferitelor ramuri are loc atunci când sunt îndeplinite condiţiile de
tranziţie pe fiecare ramură. Se pot stabili priorităţi dacă nu se exclud
condiţiile de tranziţie.

Fig.1.8. Ramificaţie (divergenţă)


 Secvenţe simultane (paralelism): mai multe secvenţe pot fi activate
simultan, plecând de la o condiţie de tranziţie. Evoluţia, pe fiecare
ramură, se efectuează simultan. Joncţiunea nu se poate efectua decât
atunci când toate secvenţele sunt terminate.

Fig.1.9. Secvenţe simultane (paralelism)

 Macro-etape: macro-etapa este o reprezentare unică a unui ansamblu de


etape şi de tranziţii. Sunt caracterizate de o etapă iniţială şi una finală.
Etapa iniţială se supune regulilor cunoscute. Etapa finală nu poate avea
acţiuni asociate. Cât timp macro-etapa este activă, evoluţia Grafcet-ului
respectă regulile obişnuite de evoluţie. Macro-etapa devine activă când
etapa anterioară etapei iniţiale este activă şi condiţia de tranziţie a sa
devine adevarată. Ea este dezactivată când etapa finală este activă şi
condiţia de tranziţie asociată este adevărată. Stările unei macro-etape pot
fi:
 de repaus: nicio etapă componentă nu este activă
 activă: cel puţin o etapă componentă este activă, în afară de etapa
finală
 de sfârşit: etapa finală este activă.

O macro-etapă poate conţine una sau mai multe etape iniţiale. Aceste
etape pot fi activate la punerea sub tensiune sau prin program.
Dinamica unei diagrame Grafcet este următoarea: dacă o etapă este
activă şi una din condiţiile de tranziţie ataşate este adevărată, etapa actuală
se dezactivează şi se activează etapa următoare (sau etapele următoare, în
cazul unui paralelism).
Un exemplu de diagramă Grafcet este prezentat în fig. 1.10.
Fig.1.10. Exemplu de diagramă Grafcet

Ladder Diagram

Cea mai raspândită modalitate de construire a unui program ce va fi


executat de către un automat programabil este varianta construirii unei
diagrame în trepte, numită Ladder diagram.
O astfel de diagramă este formată din ramuri, pe fiecare ramură
existând instrucţiuni specifice automatului respectiv. Întrucât instrucţiunile
pot fi împărţite în două mari categorii, de intrare şi de ieşire, pe orice ramură
trebuie să existe cel puţin o instrucţiune de ieşire. Fiecare instrucţiune are
asociat un simbol grafic. Instrucţiunile folosite într-o diagramă Ladder vor fi
descrise în capitolul 2.

Programarea în limbaje de nivel înalt

În ultima vreme a existat o puternică preocupare pentru integrarea


performanţelor de conducere şi control a automatelor programabile cu
posibilitaţile de calcul şi de memorie ale calculatoarelor personale. De aceea
majoritatea automatelor programabile posedă un port de comunicaţie cu un
PC, de tip RS-232 sau RS-485, putându-se stabili o legatură cu PC-ul chiar
în timpul execuţiei unui program de către AP.
De asemenea, pentru a profita de larga răspândire a limbajelor de
nivel înalt, cum ar fi C sau Pascal, unii producători au echipat AP-urile cu
procesoare compatibile INTEL, acestea putând executa setul de instrucţiuni
al procesoarelor Intel, extins cu instrucţiuni specifice automatelor
programabile. În plus mulţi producători au dezvoltat compilatoare C pentru
procesoarele pe care le folosesc în automatele programabile.
Există două variante de construire a unui program în limbaj de nivel
înalt.
Prima variantă constă în crearea unui program în limbajul de
programare C (Borland sau Microsoft), integrând funcţiile specifice de
automat programabil şi funcţiile de comunicaţie între calculator şi automat.
În acest caz programul rulează în calculator, acesta dând permanent comenzi
controllerului şi primind răspunsuri în legatură cu executarea acestora.
Avantajul unui astfel de program ar fi capacitatea mare de memorie şi
puterea de calcul a unui calculator personal şi deci posibilitatea creării unor
module software complexe folosind numeroase variabile.
Atunci când un număr mare de automate sunt legate împreună la un
singur calculator, timpul necesar computerului să primească şi să proceseze
toate informaţiile de I/O poate produce scăderea semnificativă a răspunsului
sistemului, făcând astfel dificil controlul procesului. Pentru a evita acest
neajuns, programele trebuiesc implementate în fiecare automat şi rulate
independent de computer.
Această capabilitate de partajare a acţiunilor permite utilizatorului să
determine ce decizii de control vor fi luate de computer şi care de către
automat. Această facilitate poate elibera calculatorul pentru a efectua
operaţii de supervizare cum ar fi împrospătarea ecranului, generarea de
rapoarte sau monitorizarea performanţelor sistemului.
Din acest motiv reiese şi utilitatea celei de-a doua variante, de altfel
şi cea mai des uzilizată, care constă în crearea unor programe de control ce
pot rula direct în memoria automatului. Programele se construiesc şi se
compilează în C pe un calculator personal, apoi programul executabil este
convertit în formatul de fisier Intel HEX cu ajutorul unui program utilitar,
după care este descărcat în memoria de tip FLASH EPROM a automatului,
de unde poate rula de sine stătător. Un oarecare dezavantaj îl constituie
limitarea dimensiunii codului şi a datelor programului.
Se obisnuieşte construcţia a două module software ce rulează
simultan, unul în calculator şi celălalt în controller. Schimbul de informaţii
între cele două dispozitive se poate face prin intermediul unor structuri de
date definite în ambele module, acestea putând fi citite/scrise cu funcţii
specifice.
Setul de instructiuni C specifice automatului programabil de tip Microdac

Pentru a putea înţelege cum se poate construi un pachet software de


control în limbajul C, va fi prezentată pe scurt o parte a colecţiei de funcţii
specifice lucrului cu modulele de intrare/iesire pentru un automat
programbil de tip Microdac, construit de firma Grayhill. Aceste funcţii sunt
implementate cu întreruperi disponibile din Microdac [Grayhill, 1995].

 Uint md_read_dio_status(Uchar group) citeşte starea de ON/OFF a unui


grup de module digitale
 char md_read_dio_point(Uchar point) citeşte starea de ON/OFF a unui singur
modul digital
 void md_write_dout(Uint value0, Uint value1) înscrie toate ieşirile digitale
(max. 32) printr-un singur apel
 char md_activate_dout_point (Uchar point) activează o singură ieşire digitală
 char md_deactivate_dout_point (Ucaher point) dezactivează o ieşire digitală
 Uint md_read_ain(Uchar chanel) citeşte valoarea unei intrări analogice
 void md_write_aout(Uchar channel, Uint value) setează ieşirea analogică
channel cu valoarea value
 void _md_delay (Uint msec) opreşte execuţia programului pentru un număr dat
de milisecunde
 Ulong md_get_counter (void) întoarce valoarea timer-ului
 void md_set_counter (Ulong counter) setează timer-ul cu valoarea count
 Uchar md_get_ctr_res (void) întoarce rezoluţia curentă a timer-ului care poate
fi 1ms sau 500µs

Aceste funcţii sunt definite într-o bibliotecă specifică Mdac.lib şi nu


pot fi apelate decât din automat. Există funcţii analogice, definite în fişierul
header "proware.h" ce pot fi apelate din programul calculatorului, dar viteza
de execuţie este evident mult mai scăzută. Schimbul de date cu calculatorul
este realizat prin apelarea unei funcţii speciale

proware(&err, &addr, &cmd, posn, mod, pointer)


Capitolul 2. DESCRIEREA LIMBAJULUI
LADDER DIAGRAM

În acest capitol sunt prezentate pricipalele caracteristici ale


automatelelor programabile produse de firma Allen Bradley, întrucât aceste
tipuri de automate sunt recunoscute pentru performanţele şi fiabilitatea lor,
ocupând un important segment de piaţă în domeniul sistemelor de control
industrial.
Structura şi programarea acestor automate vor fi prezentate în mod
particular pentru modelul SLC500, de uz didactic, principalele caracteristici
fiind însă comune tuturor automatelor produse de firma Allen Bradley.
Automatul SLC500 prezintă o structură standard de automat
programabil, cu menţiunea că modulele de intrare ieşire au în componenţă în
general 16 circuite de intrare sau de ieşire, mai multe module putând fi
montate pe rack-uri având un număr standard de sloturi: 4, 6 sau 10 module
putând fi ataşate unităţii centrale.
Sloturile sunt numerotate, slotul 0 fiind întotdeauna rezervat unităţii
centrale, celelalte fiind atribuite modulelor de intrare/ieşire. Numărul
slotului este important pentru adresarea corectă a intrărilor şi ieşirilor.
Automatul dispune de o interfaţă serială de tip RS-485 prin care pot
fi legate mai multe automate într-o reţea de automate sau, cu ajutorul unui
adaptor RS-485 - RS-232, se poate conecta la un computer.
Editarea programelor se face cu ajutorul calculatorului personal, prin
intermediul unui mediu de programare integrat care permite şi transferul
programului în memoria automatului, de unde va putea rula. Programarea se
face prin metoda „Ladder Diagram”, realizarea unui program necesitând
cunoaşterea organizării memoriei acestui tip de automat.
Programul editat este transformat în instrucţiuni specifice
procesorului din automat şi descărcat în memoria automatului. Există şi
varianta rulării programului din memoria calculatorului, dar timpul pierdut
cu transferul datelor între calculator şi controller poate afecta performanţele
programului. Tipurile de instrucţiuni folosite într-o diagramă Ladder sunt
practic aceleaşi indiferent de producătorul automatului programabil.
2.1. Organizarea memoriei şi moduri de adresare
pentru automatul Allen Bradley

La baza adresării şi organizării memoriei stă noţiunea de fişier (file).


Memoria este împărţită în fişiere, care sunt de 2 tipuri:
 fişiere program
 fişiere de date
Fiecare program creat pentru automatul Allen Bradley are asociate
atât fişiere program, cât şi fişiere de date.
Fişierele program sunt numerotate şi pot fi maxim 256. Implicit sunt
create doar 3 fişiere program şi anume:
 fişierul 0 ce cuprinde informaţii referitoare la configuraţia hardware a
automatului
 fişierul 1 este rezervat
 fişierul 2 conţine diagrama Ladder realizată de către utilizator
Celelate posibile fişiere program sunt create numai în situaţia în care
utilizatorul foloseşte subrutine.
Fişierele de date conţin informaţii asociate cu intrările şi ieşirile
(externe) precum şi cu toate celelalte instrucţiuni care compun diagrama
Ladder. În plus, ele mai conţin informaţii cu privire la operaţiile
procesorului. Fişierele de date sunt numerotate şi pot fi maxim 256. Implicit
sunt create primele 10 fişiere. Fiecare fişier conţine maxim 256 elemente
formate din 1 sau 3 cuvinte. Structura acestor fişiere de date este prezentată
mai jos:
0: Imagine ieşiri: conţine valorile intrărilor în format binar
1: Imagine intrări: conţine valorile ieşirilor în format binar
2: Stare: conţine informaţii de stare
3: Bit: utilizat de catre instructiunile pe bit
4: Timer: utilizat de către instrucţiunile de temporizare (timer)
5: Counter: utilizat de către instrucţiunile de numărare (counter)
6: Control: utilizat în instrucţiuni de stivă, shiftare, secvenţiere etc.
7: Întregi: folosit de catre instrucţiunile care au ca parametri operanzi
de tip Integer
8: Rezervat
9: Folosit în reţea
10 – 255: pot fi create de utilizator atunci când fişierele create
implicit nu sunt suficiente şi pot fi de tipul Bit, Timer, Counter, Control sau
Integer.
În scopul adresării, diferenţa între fişierele menţionate mai sus se
face folosind un indicator de fişier (o literă) şi un număr al fişierului. Modul
de alocare al identificatorului pentru fiecare tip de fişier este următorul:

Tabelul 2.1. Adresarea fişierelor de date

Fişierele de date conţin elemente. Elementele pot fi de un cuvânt sau


de trei cuvinte. Un cuvânt are 16 biţi. În consecinţă este necesară adresarea
la nivel de:
I) element
II) cuvânt
III) bit
În continuare se vor exemplifica fiecare din cele trei tipuri de
adresare :
 Adresarea la nivel de element: N7:15
N este tipul fişierului
7 este numărul fişierului
: este delimitatorul de element
15 este numărul elementului
 Adresarea la nivel de cuvânt: T4:7.ACC
T7:4 au aceeaşi semnificaţie ca în primul caz
. este delimitatorul de cuvânt
ACC este cuvântul adresat
 Adresarea la nivel de bit: B3/15
/ este delimitatorul de bit
15 este bitul adresat

2.2. Structura internă a fişierelor de date implicite

 Fişierele de imagine ale intrărilor şi ieşirilor


Biţii din aceste fişiere corespund ieşirilor şi intrărilor fizice ale
automatului. Formatul general de adresare pentru aceste fişiere este: O:s/b
respectiv I:s/
unde, O – ieşire, I – intrare,
s – numărul slotului pe care se găseşte modulul de I/O
/ – delimitatorul de bit
b – numărul intrării adresate
Exemplu:
 O:4/6 : ieşirea 6 de pe slotul 4
 I:1/7: intrarea 7 de pe slotul 1

 Fişierele de tip Bit


Formatul general de adresare pentru aceste fişiere este: Bf:e/b sau
Bf/b
unde, B – identifică tipul fişierului
f – numărul fişierului
e – cuvântul din cadrul fişierului
b – bitul adresat
Exemplu:
 B3:1/5 – bitul 5 din cuvântul 1 al fişierului de bit B3
 B3/18 – bitul 18 al fişierului B3
Aceste tipuri de fişiere sunt folosite în cadrul instrucţiunilor pe bit,
prezentate în cap. 2.4.

 Fişierele de tip Timer


Aceste fişiere conţin elemente a câte trei cuvinte, având maxim 256
de elemente. Un element tipic are structura din tabelul 2.2:
Tabelul 2.2. Element al fişierului de tip timer

Formatul de adresare este: Tf:e.s sau Tf:e/b


unde, T – identifică tipul fişierului (Timer)
f – numărul fişierului
e – elementul din cadrul fişierului
s – cuvântul din cadrul elementului
b – bitul adresat
Exemplu:
 T4:0.ACC – cuvântul ACC din elementul 0 al fişierului de
Timer 4
 T4:1/DN – bitul DN din elementul 1 al fişierului de Timer 4
Aceste tipuri de fişiere sunt folosite în cadrul instrucţiunilor timer,
prezentate în cap.2.4.

 Fişierele de tip Counter


Aceste fişiere conţin elemente de trei cuvinte, având maxim 256 de
elemente. Un element tipic are structura din tabelul 2.3:

Tabelul 2.3. Element al fişierului de tip Counter

cu semnificaţia:
 CU = Count Up
 CD = Count Down
 DN = Done
 OV = Overflow
 UN = Underflow
 UA = Update Accumulated Value

Formatul general de adesare este: Cf:e.s sau Cf:e/b, semnificaţiile


fiind cele de la fişierele de tip timer.
Observaţie: Pentru fişierele care au o anumită notaţie pentru biţi sau
cuvinte constituente, adresarea se poate face folosind notaţia respectivă.
Astfel, de exemplu, C5:0.PRE <=> C5:0.1.
Aceste tipuri de fişiere sunt folosite în cadrul instrucţiunilor de tip
counter, prezentate în capitolul 2.4.

 Fişierele de tip Control


Aceste fişiere conţin elemente de trei cuvinte, având maxim 256 de
elemente. Un element tipic are structura din tabelul 2.4:

Tabelul 2.4. Element al fişierului de control

cu semnificaţia:
 EN = Enable
 EU = Unload Enable
 DN = Done
 EM = Stack Empty
 ER = Error
 UL = Unload
 IN = Inhibit
 FD = Found
Formatul general de adresare este Rf:e.s sau Rf:e/b cu semnificaţiile
deja cunoscute.
Aceste tipuri de fişiere sunt folosite în cadrul instrucţiunilor de tip
stivă, shiftare, secvenţiere, prezentate în capitolul 2.4.

 Fişierele de tip Integer


Acest tip de fişier conţine elemente de un cuvânt, maxim 255 de
elemente.
Formatul de adresare este Nf:e.
unde e = 0..255 reprezintă numărul elementului.
Sunt folosite în instrucţiuni de comparaţie, matematice,etc.

Semnificaţia cuvintelor şi biţilor elementelor va fi prezentată în


cadrul capitolul 2.4. unde sunt descrise instrucţiunile.
2.3. Programarea automatului Allen Bradley prin
metoda Ladder Diagram

Programarea automatului Allen-Bradley SLC 500 se face folosind


limbajul Ladder Diagram. Programul încărcat în memoria automatului
conţine instrucţiuni; o parte din aceste instrucţiuni determină lucrul cu
dispozitive de intrare/ieşire externe.
Un program în Ladder Diagram este o înşiruire de ramuri. Întrucât
instrucţiunile pot fi împărţite în două mari categorii, de intrare şi de ieşire,
pe orice ramură trebuie să existe cel puţin o instrucţiune de ieşire. Fiecare
instrucţiune are asociat un simbol grafic şi o valoare logică – TRUE sau
FALSE.

Fig. 2.5. Structura unei ramuri Ladder Diagram

În partea stângă se găsesc instrucţiuni de intrare (una sau mai multe)


care formează întotdeauna o expresie logică de intrare. Expresia logică de la
intrare este alcatuită din operatori logici (ŞI, SAU).
În partea dreaptă se găsesc instrucţiuni de ieşire, una sau mai multe.
Efectul instrucţiunii de ieşire depinde de valoarea logică a expresiei de la
intrare.
Executarea ramurilor:
 se calculează expresia logică a instrucţiunii de intrare
 se execută instrucţiunea de ieşire în funcţie de valoarea logică a
expresiei de la intrare.
 tot aşa ramură cu ramură
Programul este executat ciclic, deci se trece la scanarea primei
ramuri după scanarea ultimei ramuri.
În cazul unui bloc AND se poate face reprezentarea grafică:

C = A AND B
Dacă A şi B sunt adevărate atunci C devine sau rămâne adevărată.

OR (sau logic) poate fi format, de exemplu, prin ramificarea


instrucţiunilor:
C = A OR B

Tabela de adevăr pentru acest tip de bloc este prezentată în tabelul 2.6:

Tabelul 2.6. SAU logic între două instrucţiuni de intrare

Pentru a mări flexibilitatea realizării programelor, există posibilitatea


de a introduce expresii logice complexe pe o ramură, mărind astfel
complexitatea blocului logic generat:

D = ( A AND NOT(B) ) OR C

În mod asemănator poate avea loc şi o ramificare a instrucţiunilor de


ieşire.

D = (A AND NOT(B)) OR C
E = (A AND NOT(B)) OR C
F = (A AND NOT(B)) OR C
De asemenea se poate impune şi o condiţie suplimentară pentru
emisia unei anumite ieşiri.
F = ((A AND B) OR C) AND E
D = (A AND B) OR C

În exemplul precedent, dacă (A AND B) AND E sau C AND E sunt


adevărate, atunci F este adevărată.

Exemplu de diagramă Ladder:

Prima ramura Ladder prezentată în exemplul următor conţine două


instrucţiuni de intrare şi o instrucţiune de ieşire. O instrucţiune de ieşire este
situată în dreapta ramurii, lângă bara verticală dublă. Instrucţiunile de intrare
sunt întotdeauna situate la stânga instrucţiunilor de ieşire.

Fig.2.7. Exemplu de diagramă Ladder


Prima ramură din diagrama de mai sus nu este corectă, întrucât
conţine două instrucţiuni de intrare şi nici una de ieşire. Celelalte ramuri
sunt corect editate, cu observaţia că ultima ramură are doar o instrucţiune de
ieşire, situaţie întâlnită doar atunci când acea instrucţiune trebuie executată
la fiecare ciclu automat.

2.4. Tipuri de instrucţiuni

Pentru procesoarele folosite de către automatul SLC500,


instrucţiunile folosite în diagramele Ladder se împart în :
 instrucţiuni pe bit
 instrucţiuni de tip timer/counter
 instrucţiuni de I/O şi întreruperi
 instrucţiuni de comparare
 instrucţiuni matematice
 instrucţiuni logice şi de mutare
 instrucţiuni pentru lucrul cu fişiere
 instrucţiuni de shiftare
 instrucţiuni de secvenţiere
 instrucţiuni de control
 blocuri funcţionale
În continuare sunt prezentate cele mai utilizate tipuri de instrucţiuni
într-o diagramă Ladder:

 Instrucţiuni pe bit:
Toate instrucţiunile pe bit necesită ca parametru adresa unui bit
dintr-un fişier de date.
 --] [-- XIC (Examine if Close). Instrucţiune de intrare. Este
TRUE când bitul testat este 1 (on).
 --]/[-- XIO (Examine if Open). Instrucţiune de intrare. Este
TRUE când bitul testat este 0 (off).
 --( )-- OTE (Output Energize). Instrucţiune de ieşire. Este
TRUE (setează bitul de ieşire) când toate condiţiile
precedente din ramură sunt TRUE. Resetează bitul altfel.
 --(L)-- OTL (Output Latch). Instrucţiune de ieşire. Bitul adresat
devine TRUE (1) când condiţiile precedente de pe ramură sunt
TRUE. Când condiţiile devin FALSE, OTL rămâne TRUE până
când o ramură ce conţine o instrucţiune OTU cu aceeaşi adresă
devine TRUE.
 --(U)-- OTU (Output Unlatch). Instrucţiune de ieşire. Bitul
adresat devine FALSE (0) când condiţiile precedente de pe
ramură sunt TRUE. Când condiţiile devin FALSE, OTU rămâne
FALSE până când o ramură ce conţine o instrucţiune OTL cu
aceeaşi adresă devine TRUE.
 --[OSR]-- OSR (One-Shot Rising). Instrucţiune de intrare.
Trece ramura în TRUE pentru o scanare, la fiecare tranziţie
din FALSE – TRUE a condiţiilor precedente din ramură.

OSR este o instrucţiune de intrare utilă activării unei instrucţiuni de


ieşire o singură dată şi anume la prima scanare a programului de către
automat. Este des folosită pentru activarea unei etape iniţiale dintr-o
diagramă Grafcet sau pentru testarea tranziţiei din starea inactivă in cea
activă a unei intrări digitale. Necesită ca parametru adresa unui bit care va fi
folosit intern de către instrucţiune, pnetru memorarea starii anterioare (de la
ciclul automat anterior) a expresiei de dinaintea ei de pe ramură. Exemplu:

Când instrucţiunea de intrare trece din FALSE (ciclul automat


anterior) în TRUE (ciclul automat curent), instrucţiunea OSR condiţionează
ramura astfel încât ieşirea trece în TRUE pentru o scanare a programului
(adică in cadrul ciclului automat actual). Apoi, la următoarele cicluri
automat, ieşirea devine sau rămâne FALSE pentru următoarele scanări, până
când intrarea face o nouă tranziţie din FALSE în TRUE.

 Instrucţiuni de tip Timer/Counter


 TON (Timer On-Delay). Instrucţiune de ieşire.

Fig.2.8. Simbolul grafic al instrucţiunii TON

 Parametrii instrucţiunii:
o Timer : adresa unei element din fişierul de tip timer T4
o Timer base: reprezintă pasul de incrementare al
acumulatorului pentru numărare. În cazul automatului
nostru este fixat la 0.01 sec = 10 ms.
o Preset: valoarea presetată – se introduce atunci când se
editează programul; se introduce o valoare numerică pe
16 biţi < 216;
Preset = timpul dorit de măsurat/ baza de timp
Ex : dacă vrem să numărăm 10 sec, preset = 10/0.01 =
1000
o Acc: valoare acumulată – se introduce la editare de obicei
este 0 ca valoare de start a acumulatorului, valoarea
acestuia fiind incrementată în timpul execuţiei
programului, la fiecare ciclu automat, cu o valoare
numerică egală cu valoarea timpului scurs de la ciclul
anterior imparţit la baza de timp.
 Cum funcţionează?
o Dacă expresia de la intrare este adevarată atunci
instrucţiunea TON incrementează accumulatorul la
fiecare ciclu automat cu numărul de incremente de timp
trecute de la ciclul anterior.
o Dacă valoarea accumulatorului depăşeşte valoarea
presetată → atunci bitul DN din primul cuvânt al
elementului de timer folosit devine 1 (acest bit putând fi
testat intr- ramura următoare), asta înseamnând că a
trecut timpul dorit.
o Dacă expresia de la intrare este falsă, contorizarea se
opreşte, accumulatorul şi biţii de stare (EN, TT, DN.....)
sunt resetaţi.

 TOF (Timer Off-Delay). Instrucţiune de ieşire. Analog cu TON, dar


incrementarea valorii din acumulator are loc atâta timp cât în ramură
condiţiile sunt FALSE. Când condiţiile devin TRUE, ( ACC ) = 0.
 RTO (Retentive Timer). Instrucţiune de ieşire. Analog cu TON, dar
dacă condiţiile de pe ramură trec din TRUE în FALSE atunci (ACC)
rămâne la ultima valoare.
 CTU (Count Up). Instrucţiune de ieşire.
Fig.2.9. Simbolul grafic al instrucţiunii CTU

 Parametrii instrucţiunii:
o Counter: adresa unei element din fişierul counter C5
o Preset: valoarea presetată – se introduce atunci când se
editează programul
o Acc: reprezintă valoarea acumulată după fiecare
incrementare a numărătorului

 Cum funcţionează?
o Instrucţiunea incrementează ACC – la fiecare trecere din
FALSE în TRUE a expresiei de la intrare (în cadrul a
două cicluri automate consecutive). Numărătoarea se
opreşte când condiţiile devin FALSE.
o Dacă valoarea ACC depăşeşte PRE → atunci bitul DN
din primul cuvânt al bitului folosit devine 1
o Resetarea se face numai prin instrucţiunea Reset.

 CTD (Count Down). Instrucţiune de ieşire. Similar cu CTU, cu


deosebirea că decrementeză valoarea acumulată. Necesită ca
parametri adresa unui element dintr-un fişier de tip Counter precum
şi o valoare presetată şi una iniţială pentru acumulator.

 RES (Reset). Instrucţiune de ieşire. Dacă expresia de la intrare este


adevarata – resetează accumulatorul şi biţii de stare ai elementului
adresat.

Fig. 2.10.Simbolul grafic al instrucţiunii RES


Parametrul adresa – poate fi adresa unui element de tip timer sau a
unuia de tip counter.
Timer: ACC ← 0, DN ← 0, TT ← 0, EN ← 0.
Counter: ACC ← 0, CU ← 0, CD ← 0, OV ← 0, UN ← 0, DN ← 0.

 HSC (High Speed Counter). Numărătorul de mare viteză HSC este


un numărător hardware şi operează asincron faţă de scanarea
programului ladder. Spre deosebire de celelalte numărătoare HSC nu
contorizează tranziţiile FALSE-TRUE ale ramurii ci tranziţiile
intrării I:0/0. Frecvenţa maximă acceptată este de 8 kHz. Această
instrucţiune este valabilă numai pentru controlere I/O fixe cu 24
intrări VDC. O singură instrucţiune HSC este permisă pe un singur
controler.

Fig.2.11. Simbolul grafic al instrucţiunii HSC

 Parametrii instrucţiunii:
o Această instrucţiune are asociat un fişier de trei cuvinte
(octeţi). Cuvântul 0 este cuvântul de control şi conţine
biţii de stare:
o bitul 10 (UA) actulizează acumulatorul pentru a
reflecta starea imediată a numărătorului când HSC
devine activă;
o bitul 12 (OV) indică o depăşire a numărătorului;
o bitul 13 (DN) indică egalarea presetului de către
acumulator;
o bitul 15 (CU) arată starea de activ/inactiv a
instrucţiunii HSC.
o Cuvântul 1 conţine valoarea de preset în gama 1 - 32.767,
iar cuvântul 2 valoarea acumulată.

 Cum funcţionează?
o Fiecare tranziţie a intrarii I:0/0 face ca acumulatorul să se
incrementeze; când acumulatorul egalează valoarea
presetului bitul Done (C5:0/DN) este setat şi
acumulatorul pus pe zero.
o Pentru a afla starea HSC-ului, programul ladder trebuie
să interogheze bitul Done (C5:0/DN). Imediat cum acesta
a fost detectat activ trebuie dezactivat (cu instrucţiunea
OTU) înainte ca acumulatorul (C5:0.ACC) să egaleze
valoarea presetului (C5:0.PRE) pentru ca altfel bitul
Overflow (C5:0/OV) este setat.
o Valoarea acumulatorului (C5:0.ACC) de obicei este
actualizată de fiecare dată când ramura cu HSC este
evaluată, actualizarea însemnând transferarea valorii
acumulatorului hardware în acumulatorul HSC software.
După actualizare instrucţiunea HSC resetează bitul
C5:0/UA.
o Dacă se doreşte testarea C5:0.ACC în programul ladder
după rangul care conţine instrucţiunea HSC, trebuie mai
intâi să se seteze bitul C5:0/UA. Acest lucru este necesar
întrucât intrarea I:0/0 poate să tranziteze de câteva ori de
la ultima evaluare a lui HSC.

 Instrucţiuni de comparare
Sunt instrucţiuni de intrare, au ca operanzi cuvinte ale fişierelor de
date.
 EQU (Equal)
Compară (A) cu (B), unde A şi B sunt adrese de cuvinte
Dacă (A) = (B), atunci instrucţiunea devine TRUE.
 NEQ (Not Equal).
Devine TRUE dacă (A) diferit de (B).
 LES (Less Than).
Devine TRUE dacă (A) < (B).
 LEQ (Less Than or Equal)
Devine TRUE dacă (A) ≤ (B).
 GRT (Greater Than)
Devine TRUE dacă (A) > (B).
 GEQ (Greater Than or Equal)
Devine TRUE daca (A) ≥ (B).
 MEQ (Masked Comparison for Equal)
Permite testarea egalităţii după aplicarea unei măşti (poate fi o
valoare hexa).
 LIM (Limit Test)
Permite testarea încadrării unei valori între două limite. Low Limit =
val./adr. limită inferioară. Test = val./adr.val. test. High Limit =
val./adr. limită superioară. Este TRUE când Low Lim ≤ Test ≤
High Lim.

Parametrii necesari acestor instrucţiuni sunt:


 Source = adresă valoare
 Compare = o constantă întreagă sau adresa unei referinţe.

 Instrucţiuni matematice
O instrucţiune matematică acceptă doi operanzi, dintre care maxim
unul poate fi o constantă. Sunt instrucţiuni de ieşire.
 ADD (Add) Dest = A + B
 SUB (Substract) Dest = A - B
 MUL (Multiply) Dest = A * B
 DIV (Divide) Dest = A / B
 NEG (Negate) Dest = (complement faţă de 2) Sursa
 CLR (Clear) Dest ← 0
 SQR (Square Root) Sursa
 SCL (Scale Data) Dest ← (Sursa):Rate.

 Instrucţiuni logice şi de mutare


Sunt instrucţiuni de ieşire. Instrucţiunile logice se aplică bit cu bit
datelor stocate la adresele sursă. Când condiţiile de pe ramură sunt TRUE,
atunci :
 MOV (Move) (Dest) ← (Sursa).
 MVM (Masked Move)
Analog cu MOV, dar după ce sursa a fost trecută prin Mask; masca
poate fi o valoare hexa (o constantă).
 AND (And) (Dest) = A AND B
 OR (Or) (Dest) = A OR B
 XOR (Exclusive Or) (Dest) = A XOR B

 Instrucţiuni de lucru cu stiva


Instrucţiunile FFL (FIFO Load) şi FFU (FIFO Unload) se folosesc
împreună. Instrucţiunea FFL încarcă octeţi într-un fişier creat de utilizator
numit stivă FIFO. Instrucţiunea FFU descarcă octeţi din stiva FIFO în
aceeaşi ordine în care au fost introduşi.
Pentru folosirea acestor instrucţiuni sunt necesari următorii parametrii:
 Source reprezintă o adresă de cuvânt sau o constantă (-32.768 până la
32.767) în care se află valoarea de introdus în stiva FIFO.
 Destination reprezintă o adresă de cuvânt care memorează valoarea
extrasă din stiva FIFO.
 FIFO reprezintă adresa stivei. Trebuie să fie o adresă indexată de
cuvânt dintr-unul din fişierele de intrare, ieşire, stare, bit, sau întregi.
Pentru ambele instrucţiuni FFL şi FFU trebuie să avem aceeaşi stivă.
 Length reprezintă numărul de elemente din stivă (maxim 128).
Ambele instrucţiuni FFL şi FFU trebuie să aibă acelaşi număr de
elemente.
 Position reprezintă următoarea locaţie disponibilă din stiva unde se
pot încărca date. Această valoare se schimbă după fiecare operaţie de
încărcare sau descărcare. Acelaşi număr este folosit pentru ambele
instrucţiuni FFL şi FFU.
 Control reprezintă adresa fişierului de control, fişier în care sunt
stocate date despre biţii de stare, lungimea stivei şi valoarea poziţiei.
Această adresă nu trebuie folosită pentru nici o altă instrucţiune.

Fig.2.12. Instrucţiunea de extragere din stivă

Biţii de stare din elementul de control sunt folosiţi astfel:


 Bitul Empty EM (bit12) este setat de instrucţiunea FFU indicând că
stiva e goală
 Bitul Done DN (bit 13) este setat de instrucţiunea FFL pentru a indica
faptul că stiva e plină. Aceasta inhibă încărcarea stivei
 Bitul FFU Enable (bit 14) este setat la tranziţia din fals în adevărat a
rangului FFU şi resetat la tranziţia inversă
 Bitul FFL Enable (bit 15) este setat la tranziţia din FALSE în TRUE a
ramurii FFL şi resetat la tranziţia inversă.

 Blocul funcţional PID


Un bloc funcţional reprezintă un set de instrucţiuni (invizibile
utilizatorului) care, având cunoscut un anumit număr de parametri de
intrare, sunt capabile să obţină o serie de valori de ieşire, calculate după un
anumit algoritm, care nu este transparent utilizatorului. Utilizatorul poate
doar să configureze blocul funcţional introducând valorile parametrilor de
intrare.
PID este un bloc funcţional apelat ca o instrucţiune de ieşire cu
ajutorul căreia se pot conduce procese după temperatură, presiune, nivel sau
debit folosind bucle de reglare. Instrucţiunile PID controlează în mod
normal o buclă închisă folosind intrările de la un modul analogic şi
furnizând anumite ieşiri pentru un modul analogic de ieşire.
Aceste instrucţiuni pot opera în modul eşantionat sau în modul STI
(Selectable Timed Interrupts - Întreruperi de Timp Reglabile). În modul
eşantionat, instrucţiunile actualizează periodic ieşirile la o rată ce poate fi
aleasă. În modul STI, instrucţiunile trebuie să fie plasate în subrutine de
întrerupere STI; ieşirile vor fi actualizate în momentele de scanare ale STI.
Intervalul STI şi rata de actualizare a buclei trebuie să fie la fel pentru a
executa corect ecuaţia. Blocul funcţional PID foloseşte următoarea formulă:
Ieşire = KC [ (E) + 1/TI  (E) dt + TD D(PV)/dt ] + deviaţie

Fig.2.13. Blocul funcţional PID

Instrucţiunile PID se pun pe o ramură fără condiţionări logice. Dacă


ramura nu este parcursă, ieşirile rămân la valorile anterioare, iar termenul
integral este resetat. În timpul programării se introduc adresele Blocului de
Control, a Variabilelor de Proces şi a Variabilelor de Control după ce
instrucţiunile PID au fost puse pe ramură:
 Blocul de Control este un fişier care memorează datele necesare
instrucţiunilor pentru operare. Mărimea fişierului este fixată la 23 de
cuvinte şi poate fi introdusă ca o adresă de fişier pentru întregi. De
exemplu: N10:0 va aloca elementele de la N10:0 până la N10:22.
 Variabila de Proces PV este adresa unui element care stochează
valoarea intrării din proces. Această adresă poate fi un cuvânt
rezervat unei intrări analogice unde va fi stocată valoarea respectivei
intrări. Această valoare poate fi un întreg dacă se alege scala 0 -
16383.
 Variabila de Control CV este adresa unui element care stochează
valoarea ieşirii instrucţiunii PID. Domeniul de ieşire este 0 - 16383
(16383 corespunde unui nivel de 100% din ieşire)

Fig.2.14. Structura blocului de control

După ce au fost introduse adresele pentru CB, PV şi CV, va apare


următorul ecran cu ajutorul căruia se vor introduce datele necesare
configurării şi acordării modulului PID:

Fig.2.15. Ecranul de introducere al datelor pentru instrucţiunea PID


În partea stângă sunt parametri instrucţiunii PID care trebuie introduşi:
 [F1] Auto/Manual AM (word 0, bit 1) se face alegerea între Auto şi
Manual. Auto arată că PID controlează ieşirile automat. Manual arată
că utilizatorul controlează ieşirile (setează);
 [F2] Mode TM (word 0, bit 0) se face alegerea între modurile
eşantionat şi STI;
 [F3] Control CM (word 0, bit 2) se face alegerea între E = SP - PV şi E
= PV - SP. Varianta E = PV - SP presupune incrementarea ieşirii CV
când intrarea PV > SP, iar varianta E = SP - PV presupune
incrementarea CV când intrarea PV < SP.
 Setpoint SP (word 2) este punctul de control dorit pentru proces.
Se introduce valoarea dorită şi se tastează ENTER. Valoarea se
poate schimba în programul ladder prin instrucţiuni;
 Gain KC (word 3) este factorul de amplificare proporţional, în
gama 0.1 - 25.5. O regulă este setarea lui la o valoare egală cu
1.5 din valoarea necesară pentru a determina la ieşire oscilaţii
când reset = 0 şi rate terms = 0;
 Reset Ti (word 4) este factorul de timp al integratorului, având
valori în gama 0.1 - 25.5 min. O regulă este setarea lui la
perioada naturală măsurată înaintea calibrării;
 Rate Td (word 5) este termenul derivativ, putând lua valori în
gama 0.01 - 2.55 min. O regulă este setarea lui la 1/8 din Ti;
 Maximum Scaled Smax (word 7) dacă setpoint este citit în
mărimi inginereşti, acest parametru corespunde valorii setpoint
când intrarea atinge 16383;
 Minimun Scaled Smin (word 8) dacă setpoint este citit în mărimi
inginereşti, acest parametru corespunde valorii setpoint când
intrarea atinge valoarea 0;
 Deadband DB (word 9) este o valoare pozitivă. DB este centrată
în jurul valorii SP, având lăţimea introdusă de utilizator. DB este
introdusă când PV şi SP trec prin zero. DB are efect numai după
ce PV intră în DB şi trece de SP;
 Loop Update (word 13) este un intervalul de timp între calculele
PID. O regulă este setarea lui la o valoare de 5 - 10 ori mai mică
decât perioada naturală de încărcare;
 Scaled Process PV (word 14) este pentru afişare;
 Scaled Error (word 15) este pentru afişare;
 Output CV % (word 16) afişează ieşirea CV în procente ( pentru
intervalul 0 - 16383). Dacă este în mod Auto, această setare este
numai pentru afişare. Dacă este în mod Manual, valoarea CV se
poate schimba, iar noua valoare ajunge la ieşire;
 [F4] Output (CV) Limit OL (word 0, bit 3) se poate alege între YES
(se limitează ieşirea între valorile min şi max) şi NO (nu se
limitează ieşirea);
În coloana din dreapta sunt indicatorii (flags) asociaţi instrucţiunii PID:
 Time Mode Bit TM (word 0, bit 0) specifică modul PID; este setat de
către modul TIMED şi este resetat de către modul STI; poate fi
setat/resetat prin instrucţiuni în programele ladder;
 Auto / Manual Bit AM (word 0, bit 01) arată că operaţiile sunt
automate când este resetat şi manuale când este setat; poate fi
setat/resetat prin instrucţiuni în programele ladder;
 Control Mode Bit CM (word 0, bit 02) este resetat dacă controlul este
E = PV - SP; poate fi setat/resetat prin instrucţiuni în programele
ladder;
 Output Limiting Enabled Bit OL (word 0, bit 03) este setat când a fost
selectată o limită pentru CV prin [F4]; poate fi setat/resetat prin
instrucţiuni în programele ladder;
 Reset and Gain Range Enhancement Bit RG (word 0, bit 4) dacă este
setat face ca valoarea Reset Minute/Repeat şi factorul de amplificare
să fie multiplicat de 10 ori;
 Scale Setpoint Flag SC (word 0, bit 05) este resetat când se specifică o
scală pentru setpoint;
 Loop Update Time Too Fast TF (word 0, bit 06) este setat de către
algoritmul PID dacă timpul de actualizare al buclei, care a fost dat, nu
poate fi atins de către program (din cauza limitărilor temporale de
scanare). Dacă acest bit este setat se poate încerca corectarea
problemei prin actualizarea buclei la o rată mai mică sau mutarea
instrucţiunii într-o subrutină STI;
 Derivitive (Rate) Action Bit DA (word 0, bit 07) dacă este setat face
ca Derivitive Rate să fie evaluată după eroare în loc de PV; dacă este
resetat, Derivitive Rate funcţionează ca procesorul 5/02;
 DB, Set When Error is în DB (word 0, bit 08) este setat când PV este
în intervalul DB şi are valoarea 0;
 Output Alarm, Upper Limit UL (word 0, bit 09) este setat când ieşirea
CV depăşeste limita superioară;
 Output Alarm, Lower Limit LL (word 0, bit 10) este setat când ieşirea
CV depăşeste limita inferioară;
 Setpoint Out of Range SP (word 0, bit 11) este setat când setpoint nu
se încadrează în scala dată;
 Process Var Out of Range PV (word 0, bit 12) este setat când PV nu
se încadrează în intervalul 0 - 16383;
 PID Done DN (word 0, bit 13) este setat când algoritmul PID a
terminat calculele;
 PID Enable EN (word 0, bit 15) este setat când ramura instrucţiunii
PID este adevarată;

Exemplu de diagramă Ladder:

Ramura Ladder prezentată în exemplul următor conţine două


instrucţiuni de intrare şi o instrucţiune de ieşire. O instrucţiune de ieşire este
situată în dreapta ramurii, lângă bara verticală dublă dreapta. Instrucţiunile
de intrare sunt întotdeauna situate la stânga instrucţiunilor de ieşire.

Fig.2.16. Exemplu de diagramă Ladder

XIC = Examine if Close – examinează bitul de la adresa B3/10


XIO = Examine if Open - examinează bitul de la adresa B3/11
OTE = Output Energize – activează/dezactivează bitul de la adresa
B3/12
Fiecare instrucţiune din ramura precedentă are adresa fişierului unde
sunt stocate stările ON(1) / OFF(0) ale biţilor. Adresele instrucţiunilor de
mai sus indică fişierul Bit 3 (B3), biţii 10, 11, 12.
Parcurgerea unei astfel de diagrame se face de sus în jos (ramură cu
ramură) şi de la stânga la dreapta (în cadrul unei ramuri). Execuţia
instrucţiunilor se face prin testarea condiţiilor logice ale ramurilor.
Starea logică a unei instrucţiuni poate fi adevărat (TRUE T) sau fals
(FALSE F). Ansamblul stărilor logice ale instrucţiunilor de intrare
determină continuitatea logică a ramurii. În funcţie de stările logice ale
datelor stocate în biţii adresaţi, stările logice ale instrucţiunilor pot fi:
Tabelul 2.17. Starile logice ale instrucţiunilor din ramură

În exemplul dat, pentru ca instrucţiunea de ieşire OTE să seteze bitul


B3/12, trebuie să nu se întrerupă continuitatea logică pe ramură, adică
trebuie ca starea XIC = TRUE ^ starea XIO = TRUE. Concret, conform
tabelului precedent:
Dacă B3/10 = 1 şi B3/11 = 0, deci dacă este gasită o cale continuă de
instrucţiuni de intrare adevărate, atunci instrucţiunea de ieşire devine sau
rămâne adevărată. În acest caz condiţiile ramurii sunt adevărate. Când nu
este găsită această continuitate logică a instrucţiunilor de intrare, atunci
instrucţiunea de ieşire OTE devine sau rămâne falsă. În acest caz condiţiile
ramurii sunt false.
Modul de variaţie al stării bitului B3/12 în funcţie de stările biţilor
B3/10 si B3/11 este:

Tabelul 2.18. Variaţia valorii bitului B3/12


O posibilă variaţie în timp a stărilor logice ale instrucţiunilor XIC,
XIO şi OTE este:

Tabelul 2.19. Variaţia stărilor logice ale instrucţiunilor

Având în vedere cele prezentate se poate trage concluzia că o ramură


din diagrama Ladder este echivalentă cu o instrucţiune de tipul:
If condiţie then ieşire.
Câmpul condiţie din model poate însemna testarea unei intrări sau
testarea unei anumite combinaţii logice între variabilele de intrare.
În exemplul dat s-a prezentat un bloc AND ( şi logic), între valoarea
bitului B3/10 şi valoarea negată a bitului B3/11.
2.5 Dezvoltarea unei diagrame Ladder pornind de la o
diagramă Grafcet

Pentru ca un program de control conceput sub forma unei diagrame


Ladder să funcţioneze corect şi să fie dezvoltat uşor, o soluţie foarte
eficientă este ridicarea iniţială a unei diagrame de tip Grafcet pornind de la
specificaţiile procesului.
Elementele principale ale unei diagrame Grafcet sunt etapele,
tranziţiile, acţiunile asociate etapelor, divergenţele, paralelismul etc. Etapele
de creare ale unei diagrame Ladder pentru un automat Allen Bradley SLC
500 sunt următoarele:
 Se construieşte diagrama Grafcet de control logic al procesului
 Se identifică intrările, ieşirile necesare automatului, precum şi numărul
de temporizări, contorizări necesar
 Se asociază intrările şi ieşirile cu biţi din fişierele de imagine ale
intrărilor şi ieşirilor
 Se asociază fiecare etapă a diagramei Grafcet cu câte un bit dintr-un
fişier de tip BIT al automatului Allen Bradley (spre exemplu din fişierul
B3)
 Se alocă pentru fiecare temporizare sau contorizare câte un element
dintr-un fişier de tip Timer sau Counter
 Pentru fiecare etapă se scriu, în principiu două ramuri de tipul:

Etapele iniţiale sunt activate cu ajutorul instrucţiunii OSR. Mici


modificări apar atunci când în diagrama Grafcet există divergenţe şi
paralelisme.
În cazul în care dintr-o etapă se poate tranzita în diferite alte etape
din cauza existenţei mai multor condiţii de tranziţie, trebuie editată câte o
ramură de tip 2 pentru fiecare condiţie de tranziţie. Starea de activare a unei
etape se testează cu instrucţiunea XIC aplicată bitului asociat etapei.
Dacă ulterior activării unei tranziţii urmează un paralelism în care
mai multe secvenţe vor rula simultan, o dată cu dezactivarea etapei curente
vor fi activate toate etapele iniţiale ale tuturor secvenţelor paralele.
Ieşirile digitale pot fi activate şi dezactivate atât cu instrucţiunea
OTE cât şi cu instrucţiunile pereche OTL şi OTU. Instrucţiunea OTE se
foloseşte atunci când o acţiune este activă numai în etapa curentă şi va
trebui dezactivată o dată cu dezactivarea etapei. Dacă o ieşire trebuie să îşi
menţină valoarea şi în etapele următoare, ea trebuie activată obligatoriu cu
instrucţiunea OTL.
Exemplu: Să considerăm că avem de controlat un proces a cărui
diagramă Grafcet este reprezenată în figura 2.20:

Fig.2.20. Diagrama Grafcet

Pentru a construi diagrama Ladder pornind de la diagrama Grafcet,


în primul rând trebuie stabilite poziţiile intrărilor şi ieşirilor, precum şi
asocierea etapelor din diagrama Grafcet cu biţi din fişierul de tip bit B3.
Presupunând că pe slotul 1 al automatului se găseşte un modul de intrări
digitale cu 16 intrări iar pe slotul 3 un modul de ieşiri digitale cu 24 ieşiri,
putem conecta intrările şi ieşirile către proces conform tabelului 2.21:

Tabelul 2.21. Adresele intrarilor şi ieşirilor


Asocierea etapelor Grafcet cu biţi din fişierul de Bit B3 se poate face
conform tabelului 2.22:

Tabelul 2.22. Asocierea etapelor cu biţi din fişierul B3


Bitul B3/0 va fi rezervat instrucţiunii OSR ca parametru intern. Se
poate trece acum la scrierea ramurilor diagramei Ladder, conform
algoritmului descris anterior.
Etapa 1 va fi activată iniţial cu ajutorul instrucţiunii OSR astfel:

Deoarece în etapa 1 nu au loc acţiuni, nu se mai scrie nici o ramură


de tip 1 pentru etapă. În schimb, deoarece are loc o divergenţă pornind din
etapa 1, trebuie scrise două ramuri de tip 2 pentru cele două condiţii de
tranziţie ce se exclud:
Pentru tranziţia cu condiţia i1:

Pentru tranziţia cu condiţia i2:

Pentru etapa 2 trebuie scrise cele 2 ramuri tipice:


Etapa 3 nu are acţiuni asociate, iar tranziţia din această etapă este
condiţionată de activarea etapei 103, astfel încât pentru etapa 3 se scrie o
singură ramură de tip 2 şi anume:

Această ramură este valabilă ca ramură de tip 2 şi pentru traziţia din


etapa 103, fiind suficientă editarea ei o singură dată.
Pentru etapa 101 se scriu cele două ramuri tipice:
Analog pentru etapa 102:
Capitolul 3. MEDIUL DE PROGRAMARE
LOGICĂ ISaGRAF

ISaGRAF este un mediu avansat CASE (Computer Aided Software Engineering)


fiind proiectat să transforme orice computer industrial sau placă cu microcontroller într-o
arhitectură open PLC de înaltă performanţă şi cu un preţ scăzut. ISaGRAF utilizează
metode standard de programare a PLC-urilor industriale pentru dezvoltarea unor aplicaţii
puternice fără a avea nevoie de cunoştinţe în programarea de nivel înalt sau experienţă
hardware.
ISaGRAF este un mediu de programare dezvoltat de CJ International destinat
aplicaţiilor pentru automate programabile. Acest mediu permite programarea, simularea,
testarea aplicaţiilor folosind limbajele standardului IEC 1131-3 [CJ International, 1998].
Mediul de programare ISaGRAF este compatibil Windows 2000. Aplicaţiile
ISaGRAF sunt complet portabile şi pot rula pe orice target hardware fără nici o modificare.
Targetul ISaGRAF poate fi orice computer industrial, microcontroller sau PLC
echipat cu module de I/O analogice sau digitale rulând orice sistem de operare multitasking.
ISaGRAF poate fi implementat pe orice configuraţie hardware care suportă un compilator
ANSI C.
Caracteristici:
 Mediu de dezvoltare complet
 Independenţă faţă de configuraţia hardware a unui PLC
 Limbaje de programare specificate în standardul IEC 1131-3
 Facilităţi de simulare
 ON şi OFF line debugger
 Dezvoltarea de biblioteci software

3.1. Structura unui proiect ISaGRAF

Un proiect ISaGRAF este compus din mai multe unităţi numite


programe. Un program este considerat a fi o unitate logică care descrie
operaţiile dintre variabilele procesului. Programele aplicaţiei sunt conectate
într-o structură arborescentă şi pot fi implementate folosind limbaje grafice
sau literale, programatorul având la dispoziţie următoarele opţiuni:

 Flow Chart (FC) pentru programare la nivel înalt


 Ladder Diagram (LD) doar pentru operaţii booleene
 Structured Text (ST) pentru orice operaţii ciclice
 Instruction List (IL) pentru operaţii la nivel jos

 Function Block Diagram (FBD) pentru operaţii ciclice


complexe

 Sequential Function Chart (SFC) pentru programare la


nivel înalt

Limbajul utilizat pentru scrierea unui program se alege la crearea


acestuia şi nu poate fi schimbat mai târziu. Nu este posibil ca acelaşi
program să combine mai multe limbaje, excepţie se poate face în cazul în
care se combină FBD şi LD.

 Operaţii ciclice şi secvenţiale


Programele descriu fie operaţii ciclice, fie secvenţiale. Programele
ciclice sunt executate la fiecare ciclu al sistemului ţintă. Execuţia
programelor secvenţiale respectă regulile dinamice fie ale limbajului SFC,
fie ale limbajului FC.
Programele sunt legate între ele într-o structură arborescentă.
Programele aflate în vârful ierarhiei sunt activate de către sistem.
Subprogramele (nivele mai jos în ierarhie) sunt activate de către programul
părinte.
Structura ierarhică a unui program se descompune în patru secţiuni
sau grupuri:
Begin : programe executate la începutul fiecărui ciclu al sistemului ţintă
Sequential : programe ce respectă regulile dinamice SFC sau FC
End : programe executate la sfârşitul fiecărui ciclu al sistemului ţintă
Functions : set de subprograme nededicate
Programele din secţiunile Begin şi End descriu operaţii ciclice şi nu
sunt dependente de timp. Se scriu în limbajele LD sau ST. Programele
principale sunt executate la începutul respectiv sfârşitul fiecărui ciclu de
execuţie. Secţiunea Begin se utilizeaza pentru adaptarea unor valori de
intrare (ex: citirea unei valori de la un traductor).
Programele secţiunii Sequential descriu operaţii secvenţiale unde variabila timp
sincronizează operaţiile primare. Execuţia programelor principale ale acestei secţiuni se
face conform regulilor SFC sau FC. Trebuie să existe cel puţin un program secvenţial
Sequencial; restul doar dacă este nevoie.
Programele secţiunii Functions sunt subprograme ce pot fi apelate de
orice alt program al aplicaţiei. Un program al secţiunii Function poate apela
un alt program al acestei secţiuni.
Programele principale şi programele fiu ale secţiunii Sequential
trebuie să fie descrise în limbajele SFC sau FC. Programele secţiunilor
ciclice (Begin şi End) nu pot fi descrise în SFC sau FC. Orice program al
oricărei secţiuni poate avea unul sau mai multe subprograme. Orice program
al oricărei secţiuni poate avea unul sau mai multe programe fiu, în
conformitate cu limbajul fiecăruia. Subprogramele nu pot fi descrise în SFC
sau FC.
Programele secţiunii Begin sunt de obicei folosite pentru descrierea
operaţiilor preliminare în scopul citirii corecte a unor valori de la
dispozitivele de intrare. Variabilele de intrare citite sunt utilizate frecvent de
către programele secţiunii Sequential pentru ca după o eventuală prelucrare
valorile variabilelor de ieşire să fie transmise dispozitivelor de ieşire.
Programele secţiunii End sunt utilizate pentru a descrie operaţii de protecţie
înainte de a trimite o variabilă către un dispozitiv de ieşire.

 Programe SFC / FC child


Orice program SFC al secţiunii secvenţiale poate controla alte
programe SFC. Acest tip de programe, situate pe un nivel ierarhic inferior,
se numesc program SFC fiu, ele fiind programe paralele ce pot fi pornite
(started), oprite (killed), îngheţate (frozen), repornite (restarted) de către
programul părinte. Important este ca ambele programe, părinte şi fiu, să fie
scrise în SFC. Un pro0gram SFC fiu poate conţine variabile locale şi cuvinte
cheie.
Atunci când un program părinte porneşte un program SFC fiu
transmite un jeton SFC fiecărui pas iniţial al programului fiu. Această
comandă este descrisă de declaraţia GSTART. În cazul opririi unui program
fiu de către părintele său, sunt eliminate toate jetoanele existente. Această
comandă este descrisă de declaraţia GKILL. Dacă este îngheţat, un program
fiu SFC îşi suspendă execuţia şi îşi păstrează jetoanele pentru o eventuală
repornire. Programul suspendat poate fi repornit folosind declaraţia GRST.
Şi în cazul programelor FC ale secţiunii secvenţiale pot exista subprograme FC
fiu, dar un părinte FC este blocat în timpul execuţiei unui subprogram FC. Astfel nu sunt
posibile operaţii simultane în programul FC părinte şi subprogramul FC.

 Funcţii şi subprograme

Execuţia unui subprogram sau a unei funcţii este condusă de către


programul părinte. Execuţia programului părinte este suspendată până la
terminarea funcţiei sau a subprogramului.
Un program al oricarei secţiuni poate avea unul sau mai multe
programe. Un subprogram poate fi controlat numai de către părintele său. El
poate conţine variabile locale. Pentru descrierea unui subprogram nu pot fi
utilizate limbajele SFC şi FC. Programele secţiunii Functions sunt
subprograme ce pot fi apelate de orice program al aplicaţiei. Spre deosebire
de alte subprograme, acestea nu sunt dedicate programului părinte şi pot
apela programe ale aceleiaşi secţiuni. Pentru o mai mare flexibilitate pot fi
grupate în librării de funcţii.
 Reguli de execuţie

ISaGRAF este un sistem sincron. Toate operaţiile sunt declanşate de


către ceas. Intervalul dedicat execuţiei se numeşte durata ciclului:

Fig.3.1.Ciclul ISaGRAF

Operaţiile de bază ce se execută pe durata unui ciclu sunt:

Fig. 3.2. Operaţiile de bază ale unui ciclu de execuţie

Acest sistem face posibile:


 garantarea unor valori constante pe durata unui ciclu pentru variabile
 stabilitatea ieşirilor, acestea nefiind modificate decât o singură dată într-un ciclu
de execuţie
 accesul sigur la aceleaşi variabile globale al mai multor programe
 estimarea şi controlul timpului de răspuns a întregii aplicaţii
3.2. Descrierea limbajul Sequential Function Chart
(SFC)

Sequential Function Chart (SFC) este un limbaj grafic utilizat pentru a descrie
operaţii secvenţiale. Procesul este reprezentat printr-o succesiune de paşi finiţi expliciţi
legaţi prin tranziţii. Fiecărei tranziţii îi este ataşată o condiţie de tip boolean. Acţiunile ce au
loc la fiecare pas sunt descrise folosind celelalte limbaje (ST, IL, LD sau FBD).
Un program SFC se reprezintă ca un graf orientat cu noduri de tip etape şi tranziţii.
Legăturile multiple sunt utilizate pentru a reprezenta convergenţe şi divergenţe. Unele părţi
ale programului pot fi descrise separat şi reprezentate în program printr-un simbol. Aceste
părţi sunt cunoscute sub denumirea de macro etape.
Regulile grafice de bază ale SFC:
 Un nod de tip etapă nu poate fi urmat de un nod de acelaşi tip
 Un nod de tip tranziţie nu poate fi urmat de un nod de acelaşi tip
Programarea SFC este de obicei separată în două niveluri :
- nivelul 1 arată organigrama programului, numerele paşilor şi tranziţiilor şi comentariile
ataşate acestora

- nivelul 2 reprezintă programarea în limbaj ST sau IL a acţiunilor din cadrul paşilor sau
condiţiile ataşate tranziţiilor.

3.2.1. Componentele de bază (simbolurile grafice) ale limbajului SFC sunt:

 Etapele şi etapele iniţiale (steps and initial steps):


O etapă este reprezentată printr-un pătrat. Fiecare etapă este referită de un număr
înscris în interiorul pătratului. Descrierea etapei se face în interiorul dreptunghiului legat de
pătrat. Aceasta este cunoscuta ca nivelul 1 al etapei.
Nivelul 2 conţine descrierea acţiunilor ce au loc în etapa respectivă şi este referit
într-o fereastră separată.
În momentul rulării, un jeton arată că etapa este activă.

Fig. 3.3. a) Etapă activă; b) Etapă inactivă

Starea iniţială a unui program SFC se exprimă cu ajutorul etapelor


iniţiale, reprezentate grafic printr-un pătrat cu margine dublă. Când
programul este pornit automat se plasează câte un jeton în interiorul fiecărei
etape iniţiale.

Fig.3.4. Pas iniţial

Un program SFC trebuie să conţină cel puţin o etapă iniţială. Fiecare etapă are
două atribute ce pot fi utilizate de celelalte limbaje:
- GSnnn.x starea pasului: activ/inactiv (variabilă booleană)
- GSnnn.t cât timp este activ pasul (timp)
( nnn este numărul de referinţă al pasului )

 Tranziţii (transitions):
Tranziţiile sunt reprezentate printr-o bară orizontală ce taie
linia de legătură dintre doi paşi. Similar etapelor, tranziţiile sunt referite
printr-un număr şi au aceeaşi organizare pe nivele:
Fig.3.5. Tranziţie

 Legături orientate (oriented links):


Liniile simple sunt utilizate pentru legăturile dintre paşi şi
tranziţii. Atunci când nu este specificată explicit orientarea se consideră a fi
de sus în jos:

Fig.3.6. Legături orientate

 Salt către un pas (jump to a step):


Simbolul de salt poate fi utilizat pentru a indica o legătura
dintre o tranziţie şi un pas, fără a fi nevoie să se deseneze linia de
conexiune. Saltul trebuie referit cu numărul pasului destinaţie. Saltul nu
poate fi utilizat pentru a lega un pas şi o tranziţie.
Fig. 3.7. Salt către o etapă

3.2.2. Divergenţe şi convergenţe (divergences and convergences):

Divergenţele şi convergenţele sunt utilizate pentru a reprezenta legături multiple


între paşi şi tranziţii.
Divergenţele sunt conexiuni multiple de la un simbol SFC (pas sau
tranziţie) către mai multe simboluri SFC. Convergenţele sunt conexiuni
multiple de la mai multe simboluri SFC către un singur simbol. Structurile
de acest tip pot fi simple sau duble după cum urmează:
 Divergenţe simple: Legături multiple de la un pas la mai multe tranziţii.
Aceasta permite trecerea jetonului activ către mai multe ramuri.
Divergenţele simple reprezintă posibilitatea rulării uneia dintre părţile
unui proces (funcţia OR):
 Convergenţe simple: Legături multiple de la mai multe tranziţii către
acelaşi pas. Sunt folosite în general pentru a grupa ramuri ce s-au
despărţit de la aceeaşi traziţie.

Fig. 3.8. a) divergenţă simplă; b) convergenţă simplă

 Divergenţe duble: Legături multiple de la o tranziţie către mai mulţi


paşi. Au corespondenţe în execuţia în paralel a operaţiunilor într-un
proces. Divergenţele duble reprezintă procese care rulează în paralel
(funcţia AND).
 Convergenţe duble: Legături multiple de la mai mulţi paşi către aceeaşi
tranziţie. Folosite în general pentru a grupa ramuri ce s-au despărţit prin
aceeaşi dublă divergenţă.
Fig. 3.9. a) divergenţă dublă; b) convergenţă dublă

3.2.3. Paşi Macro (Macro steps)

Macrourile sunt un mod unic de reprezentare a unei succesiuni unice


de paşi şi tranziţii. Corpul unui macro este descris separat în programul
SFC, el apărând ca un singur simbol în reprezentarea SFC principală.
Numărul de referinţă ce apare în simbolul macro-ului este referinţa pentru
primul pas din corpul unui macro. Acest prim pas trebuie să fie de tipul pas
de început (beginning step). Corespondentul său la terminarea reprezentării
este pasul de sfârşit (ending step).

Fig. 3.10. Exemplu de pas macro

Reprezentarea unui macro trebuie să fie independentă, neexistând


legături în nicio direcţie. Simbolul unui macro poate fi inclus în
reprezentarea altui macro. Deoarece un macro este reprezentat printr-un set
unic de paşi şi tranziţii, nu poate fi folosit mai mult decât o dată în
programul SFC.

3.2.4. Operaţii în cadrul etapelor


Nivelul 2 al unei etape SFC conţine descrierea detaliată a operaţiilor
ce se execută în timpul activării. Această descriere se face utilizând
facilităţile literale ale SFC şi alte limbaje cum ar fi ST.
Tipurile de operaţii ce sunt accesibile la acest nivel sunt:
- operaţii asupra variabilelor booleene
- operaţii de tipul impuls în ST
- operaţii de tipul nonimpuls în ST
- operaţii în SFC
 Operaţii asupra variabilelor booleene:
Atribuirea de valori unor variabile booleene în timpul activării unui
pas. Aceste variabile pot fi de ieşire sau interne. Valorile se stabilesc
la activarea sau dezactivarea pasului :
<var_bool>(s): variabila primeşte valoarea TRUE când pasul
devine activ

Sintaxa acestor operaţii:


<var_bool>(N); asociază starea pasului activ/inactiv cu
TRUE/FALSE (1/0 logice) valoarea variabilei
<var_bool>; acelaşi efect atributul n fiind optional
/<var_bool>; asociază negatul stării pasului cu valoarea
variabilei

Sunt disponibile şi alte caracteristici care permit setarea sau resetarea


unei variabile booleene, atunci când pasul este activ. Sintaxa acestor
operaţii:
<var_bool>(S); variabila primeşte valoarea TRUE când pasul
devine activ
<var_bool>(R); variabila primeşte valoarea FALSE când pasul
devine activ

 Operaţii de tipul impuls (pulse actions):


Succesiune de instrucţiuni ST sau IL care se execută numai o singură
dată într-un singur ciclu automat, de obicei primul în care etapa este
activă.
Sintaxa operaţiilor:
ACTION(P):
(*instrucţiuni Structured Text*)
END_ACTION;

 Operaţii de tipul nonpuls (non-stored actions):


Succesiune de instrucţiuni ST sau IL care se execută la fiecare ciclu
automat în care etapa este activă.
Sintaxa operaţiilor:
ACTION(N):
(*instructiuni Structured Text*)
END_ACTION;

Fig. 3.11. a) operaţii de tip P; b)operaţii de tip N

 Operaţii SFC
O operaţie SFC este o secvenţă SFC fiu, pornită sau oprită după cum se
schimbă starea pasului. Poate avea unul din atributele: N (non stored), S
(set), R (reset).
Sintaxa operaţiilor:
<prog_fiu>(N); prog_fiu este pornit când pasul devine activ şi oprit
când pasul devine inactiv
<prog_fiu>; acelaşi efect, atributul N fiind opţional
<prog_fiu>(S); prog_fiu este pornit când pasul devine activ şi îşi
păstrează starea când pasul devine inactiv
<prog_fiu>(R); prog_fiu este oprit când pasul devine activ şi îşi
păstrează starea când pasul devine inactiv
Secvenţa SFC fiu prog_fiu trebuie să fie un program SFC fiu al
programului curent.
Folosirea atributelor S(Set) sau R(Reset) pentru o acţiune SFC are exact
aceleaşi efecte cu folosirea lui GSTART şi GKILL într-o operaţie de
tipul impuls din ST.

 Apelul funcţiilor şi al funcţiilor bloc în cadrul unei operaţii:


Subprograme, funcţii sau funcţii bloc (scrise în ST, IL, LD sau FBD) sau
funcţii C şi funcţii bloc C pot fi direct apelate din interiorul unei operaţii
după cum urmează:
Pentru subprograme şi funcţii C:
ACTION(P):
result:=sub_prog();
END_ACTION;
sau
ACTION(N):
result:=sub_prog();
END_ACTION;

Pentru funcţii bloc C sau în ST, IL, LD, FBD:


ACTION(P):
Fb(in1,in2);
result1:=Fb.out1;
result2:=Fb.out2;
END_ACTION;
sau
ACTION(N):
Fb(in1,in2);
result1:=Fb.out1;
result2:=Fb.out2;
END_ACTION;

 Convenţia IL:
Codul IL poate fi introdus direct într-un bloc SFC, după cum urmează:
ACTION(P): (* sau N*)
#info=IL
<instrucţiune>
<instrucţiune>

#endinfo
END_ACTION;

3.2.5. Condiţii ataşate tranziţiilor

Fiecărei tranziţii îi este ataşată o expresie booleană care


condiţionează trecerea la pasul următor. Această condiţie este de obicei
implementată în limbajele ST sau LD la nivelul 2 al tranziţiei. Pot fi
utilizate şi alte modalităţi de implementare:
- convenţia limbajului ST
- convenţia limbajului LD
- convenţia limbajului IL
- apelul funcţiilor dintr-o tranziţie

 Convenţia ST
Limbajul ST poate descrie condiţia ataşată tranziţiei. Expresia finală
a acesteia trebuie să fie de tip boolean şi să se termine cu punct şi
virgulă. Expresia poate conţine constante TRUE sau FALSE, o
singură variabilă de intrare sau o variabilă internă booleană sau o
combinaţie de variabile ce conduce la o valoare booleană.

 Convenţia LD
Limbajul LD poate descrie condiţia ataşată tranziţiei. Un exemplu
de programare în LD pentru tranziţii este redat mai jos:

 Convenţia IL
Condiţia este descrisă conform următoarei sintaxe:
#info=IL
<instrucţiune>
<instrucţiune>

#endinfo
valoarea conţinută în registrul IL (current result) la sfârşitul
secvenţei condiţionând tranziţia:
current result=0  condiţia este FALSE
current result<>0  condiţia este TRUE

 Apelul funcţiilor dintr-o tranziţie


Orice subprogram sau funcţie (scrisă în FBD, LD, ST sau IL) sau
funcţie C poate fi apelată pentru a evalua condiţia ataşată tranziţiei
conform sintaxei:
<sub_program>();
Valoarea returnată de un subprogram trebuie să fie de tip boolean şi
să returneze un rezultat ce va fi evaluat astfel:
val_ret=0  condiţia este FALSE
val_ret<>0  condiţia este TRUE
Dacă nu este ataşată nicio expresie tranziţiei, atunci se consideră
implicit valoarea TRUE.

3.2.6. Regulile dinamicii limbajului SFC

Cele cinci reguli ale dinamicii limbajului SFC sunt:

 Starea iniţială: caracterizată prin paşi iniţiali care sunt prin


definiţie în stare activă la începutul operaţiilor. Fiecare program
SFC trebuie să conţină cel puţin un pas iniţial.
 Depăşirea unei tranziţii: tranziţia poate fi validată când toţi paşii
care o preced direct sunt activi, în caz contrar fiind invalidată.
Tranziţia nu poate fi depaşită decât dacă este validată şi condiţia
asociată este TRUE.
 Schimbarea stării paşilor: depăşirea unei tranziţii conduce
simultan la activarea paşilor care o succed şi la dezactivarea
imediată a paşilor precedenţi.
 Depăşirea simultană a tranziţiilor: tranziţiile care trebuiesc
depăşite simultan pot fi indicate prin două linii. Dacă aceste
tranziţii sunt descrise separat, indicatorul de stare al paşilor
precedenţi (GSnnn.x) poate fi utilizat pentru descrierea
condiţiilor de trecere.
 Activarea şi dezactivarea simultană a unui pas: dacă în timpul
operaţiilor, un pas este simultan activat şi dezactivat, se dă
prioritate activării.

3.2.7. Ierarhizarea programelor SFC


Sistemul ISaGRAF permite descrierea pe verticală a structurii
programelor SFC. Acestea sunt organizate într-o ierarhie arborescentă.
Fiecare program SFC poate controla (porni, opri) alte programe SFC.
Acestea din urmă se numesc fii ai programului SFC care le controlează.
Regulile pe care le implică structura ierarhizată:
 Programele SFC care nu au un părinte se numesc programe SFC
principale.
 Programele SFC principale sunt activate de sistem la începutul
aplicaţiei.
 Un program poate avea mai multe programe fiu.
 Un program fiu nu poate avea mai mult decât un părinte.
 Un program fiu nu poate fi controlat decât de părintele său.
 Un program nu poate controla fiii unui program fiu al său.

Operaţiile pe care le poate efectua un părinte pentru controlul fiilor săi sunt:
 Start (GSTART) Porneşte programul fiu: activează fiecare pas iniţial al său. Fii
progamului fiu nu sunt porniţi automat.
 Kill (GKILL) Opreşte programul fiu dezactivând fiecare pas activ. Toţi fiii
programului fiu sunt de asemenea opriţi.
 Freeze (GFREEZE) Suspendă execuţia programului (dezactivând fiecare pas activ şi
suspendând verificarea condiţiilor de depăşire a tranziţiilor) şi salvează starea paşilor
programului astfel încât programul să poată fi repornit. Toţi fiii programului fiu sunt
suspendaţi din execuţie.
 Restart (GRST) Reporneşte un progam SFC suspendat reactivându-i toţi paşii
dezactivaţi la suspendarea din execuţie. Programele fiu nu sunt automat repornite.
 Get status (GSTATUS) Obţine starea curentă (activ, inactiv, suspendat) a unui program
fiu.

3.3. Descrierea limbajului Structured Text (ST)

Structured Text (ST) este un limbaj structurat de nivel înalt proiectat


pentru procesele de automatizare. Acest limbaj este utilizat în special pentru
a implementa proceduri complexe ce nu pot fi uşor exprimate într-un limbaj
grafic. ST este limbajul implicit pentru descrierea operaţiilor din interiorul
paşilor şi a condiţiilor ataşate tranziţiilor din limbajul SFC. Este folosit la
scrierea programelor din secţiunile Begin şi End, descrierea acţiunilor din
etape şi scrierea condiţiilor de tranziţie.

3.3.1. Elemente de sintaxă în Structured Text


Un program ST este o listă de declaraţii ST. Fiecare declaraţie se termină cu
separatorul punct şi virgulă. Cuvintele utilizate în codul sursă (identificatori
de variabile, constante, cuvinte cheie) sunt despărţite de separatori inactivi
(space, end of line, tabs) sau de separatori activi, care au o semnificaţie bine
definită (de exemplu, > semnifică mai mare, operaţie de comparaţie).
Comentariile pot fi incluse oriunde în text dar trebuiesc încadrate între (* şi
*). Pentru o mai bună lizibilitate a codului se recomandă câteva reguli: să nu
se scrie mai mult de o declaraţie pe un rând, să se folosească alinierea
declaraţiilor complexe, inserarea de comentarii.
Tipurile de bază ale instrucţiunilor ST:
 Atribuire de valori (variabila:=expresie)
 Apelare de subprograme sau funcţii
 Apelare de funcţii bloc
 Instrucţiuni de selecţie (IF,THEN, ELSE, CASE…)
 Instrucţiuni de iteraţie (FOR, WHILE, REPEAT…)
 Instucţiuni de control (RETURN, EXIT…)
 Instrucţiuni dedicate legăturilor cu alte limbaje

3.3.2. Expresii şi paranteze

Expresiile ST combină operatori ST cu operanzi (variabile sau


constante). Pentru fiecare expresie tipul operanzilor trebuie să fie acelaşi.
De exemplu:
(boo_var1 AND boo_var2) are tipul BOO
not (boo_var1) are tipul BOO
(sin (3.14) + 0.5) are tipul ANALOG REAL
(t#1s23 + 1.78 ) este o expresie invalidă
Parantezele sunt folosite pentru a separa părţi ale expresiei şi pentru
a stabili explicit priorităţile operaţiilor. Când o expresie complexă nu are
paranteze, succesiunea operaţiilor este dată de priorităţile implicite între
operatorii ST. O expresie poate conţine maxim opt nivele de paranteze.

3.3.3. Apelarea funcţiilor şi procedurilor

Apelarea funcţiilor ST standard poate fi folosită pentru oricare dintre


următoarele obiecte: subprograme, funcţii de librării şi proceduri scrise în
limbajul IEC, funcţii şi proceduri C, funcţii de conversie de tip.
 Apelul subprogramelor şi al funcţiilor
Nume : numele subprogramului sau al funcţiei de bibliotecă
scris în limbajul IEC sau în C
Semnificaţia: apelează un subprogram sau funcţie în ST, IL, LD sau
FBD sau o funcţie C şi primeşte valoarea returnată
Sintaxa: <variabila>:=<subprog>(<par1>, ... <parN>);
Operanzi: tipul valorii returnate şi apelarea parametrilor trebuie
să urmărească interfaţa definită pentru subprograme
Valoarea returnată: valoarea returnată de subprogram

Exemple de apelare a unei funcţii:


val_2 := min (16, max (0, val_1));
msg := right (mesaj, mlen (mesaj)-1) + left (mesaj,1);

 Apelul procedurilor
Nume: numele procedurii
Semnificaţia: apelează o procedură din biblioteca ISaGRAF sau din
biblioteca utilizatorului şi accesează parametrii
returnaţi
Sintaxa: (*apelarea unei proceduri*)
<nume_bloc>(<p1>, <p2> ...);
(* obţinerea valorii returnate*)
<rezultat>:= <nume_bloc>, <ret_param1>;
...
<rezultat>:= <nume_bloc>, <ret_paramN>;

Operanzi: parametrii sunt expresii care potrivesc tipul


parametrilor specificaţi pentru acea procedură
Valoarea returnată: vezi sintaxa pentru a obţine parametrii returnaţi

Exemple de apelare a unei proceduri:


(*program ST care apelează o procedură*)
(*declararea procedurii în dicţionar*)
(*trigb1: bloc R_TRIG – rising edge detection*)
(*apelarea procedurii din limbajul ST*)
trigb1 (b1);
(*returnează parametrii de acces*)
IF (trigb1.Q) THEN nb_edge := nb_edge + 1;
END_IF;
3.3.4. Operatori booleeni specifici ST

Următorii operatori booleeni sunt specifici limbajului ST:


- REDGE: rising edge detection
- FEDGE: falling edge detection
Alţi operatori booleeni standard care pot fi folosiţi sunt:
- NOT: negarea booleană
- AND (&): ŞI logic
- OR: SAU logic
- XOR: SAU logic exclusiv

 Operatorul « REDGE »
Nume: REDGE
Semnificaţia: evaluează frontul crescător al unei expresii boolene
complete
Sintaxa: <edge>:=REDGE(<expr_logica>,
<var_booleana>);
Operanzi: primul operand este orice variabilă booleană sau
expresie complexă, al doilea operand este o variabilă
booleană internă folosită pentru a reţine ultima stare a
expresiei
Valoarea returnată: TRUE atunci când expresia logică de la intrare trece
din FALSE în TRUE în cadrul a două cicluri
automate, FALSE altfel

Frontul crescător al unei expresii nu poate fi detectat mai mult decât


o dată în acelaşi ciclu de execuţie, folosind operatorul REDGE. Acest
operator poate fi folosit pentru a descrie condiţia ataşată unei tranziţii SFC.

 Operatorul « FEDGE »
Nume: FEDGE
Semnificaţia: evaluează frontul descrescător al unei expresii
boolene
Sintaxa: <edge>:=FEDGE(<expr_logica>,<var_booleana>);
Operanzi: primul operand este orice variabilă booleană sau
expresie complexă, al doilea operand este o variabilă
booleană internă folosită pentru a reţine ultima stare a
expresiei
Valoarea returnată: TRUE atunci când expresia logică de la intrare trece
din TRUE în FALSE în cadrul a două cicluri
automate, FALSE altfel.
Frontul descrescător al unei expresii nu poate fi detectat mai mult
decât o dată în acelaşi ciclu de execuţie, folosind operatorul FEDGE. Acest
operator poate fi folosit pentru a descrie condiţia ataşată unei tranziţii SFC.

3.3.5. Instrucţiuni fundamentale în ST

Instrucţiunile fundamentale ale limbajului ST sunt:


- atribuirea
- instrucţiunea RETURN
- instrucţiunea IF-THEN-ELSEIF-ELSE
- instrucţiunea CASE
- instrucţiunea iterativă WHILE
- instrucţiunea iterativă REPEAT
- instrucţiunea iterativă FOR
- instrucţiunea EXIT

 Atribuirea

Nume: :=
Semnificaţia: atribuie o variabilă unei expresii
Sintaxa: <var>:=<expr>;
Operanzi: variabila trebuie să fie internă sau de ieşire
variabila şi expresia trebuie să aibă acelaşi tip
Expresia poate fi apelată de un subprogram sau o funcţie din
biblioteca ISaGRAF.

 Instrucţiunea RETURN
Nume: RETURN
Semnificaţia: termină execuţia programului curent
Sintaxa: RETURN;
Operanzi: nici unul
Într-un bloc SFC, instrucţiunea RETURN indică sfârşitul execuţiei
unui singur bloc.

 Instrucţiunea IF-THEN-ELSIF-ELSE
Nume: IF...THEN...ELSIF...THEN...ELSE...END_IF
Semnificaţia: execută una din două liste de declaraţii ST
selecţia este făcută în concordanţă cu valoarea
expresiei booleene
Sintaxa: IF <expr_bool> THEN
<instrucţiune>;
<instrucţiune>;
...
ELSIF <expr_bool> THEN
<instrucţiune>;
<instrucţiune>;
...
ELSE
<instrucţiune>;
<instrucţiune>;
...
END_IF;
Instrucţiunile ELSE şi ELSIF sunt opţionale. Dacă instrucţiunea
ELSE nu este scrisă, nu este executată nicio instrucţiune când condiţia este
FALSE.

 Instrucţiunea CASE
Nume: CASE...OF...ELSE... END_CASE
Semnificaţia: execută una din câteva liste de declaraţii ST
selecţia este făcută în concordanţă cu o expresie
întreagă
Sintaxa: CASE <expr_int> OF
<valoare>: <instrucţiuni>
<valoare>, <valoare>: <instrucţiuni>;
...
ELSE
<instrucţiuni>;
END_CASE;
Valorile CASE trebuie să fie expresii constante întregi. Câteva
valori, separate prin virgule, pot duce la aceeaşi listă de instrucţiuni.
Instrucţiunea ELSE este opţională.

 Instrucţiunea WHILE
Nume: WHILE ... DO ... END_WHILE
Semnificaţia: structură iterativă pentru un grup de instrucţiuni ST
condiţia “continue” este evaluată înaintea oricărei
iteraţii
Sintaxa: WHILE <expr_bool> DO
<instrucţiune>;
<instrucţiune>;
....
END_WHILE;

 Instrucţiunea REPEAT
Nume: REPEAT ... UNTIL ... END_REPEAT
Semnificaţia: structură iterativă pentru un grup de instrucţiuni ST
condiţia “continue” este evaluată după orice iteraţie
Sintaxa: REPEAT
<instrucţiune>;
<instrucţiune>;
....
UNTIL <expr_bool>
END_REPEAT;

 Instrucţiunea FOR
Nume: FOR ... TO ... BY ... DO ... END_FOR
Semnificaţia: execută un număr limitat de iteraţii
folosind o variabilă index analog întreagă
Sintaxa: FOR <index> := <mini> TO <maxi> BY <step>
DO
<instrucţiune>;
<instrucţiune>;
END_FOR;
Operanzi: index: variabilă analog internă care creşte la fiecare
buclă
mini: valoare iniţială pentru index (înaintea primei
bucle)
maxi: valoarea maximă permisă pentru index
step: indexul de creştere la fiecare buclă
Instrucţiunea [BY step] este opţională. Dacă nu este specificată,
pasul de incrementare este 1.

 Instrucţiunea EXIT
Nume: EXIT
Semnificaţia: ieşirea dintr-o instrucţiune iterativă FOR, WHILE sau
REPEAT
Sintaxa: EXIT;
Operanzi: nici unul
3.3.6. Extensii ale limbajului ST

Următoarele funcţii sunt extensii ale limbajului ST:


–TSTART –TSTOP: controlul printr-o variabilă de tip timer
Instrucţiunile şi funcţiile următoare sunt disponibile să controleze
execuţia programelor fiu SFC. Pot fi folosite în interiorul blocurilor
ACTION() ... END_ACTION; în etape SFC.
- GSTART: începe un program SFC
- GKILL: opreşte un program SFC
- GFREEZE: suspendă un program SFC
- GRST: reporneşte un program SFC suspendat
- GSTATUS: obţine starea curentă a programului SFC
Câmpurile următoare pot fi folosite pentru a accesa starea unui pas
SFC:
GSnnn.x valoare booleană care reprezintă starea pasului
GSnnn.t timpul trecut de la ultima activarea a pasului
nnn este numărul de referinţă al pasului

Exemplu: Se consideră un program prog şi alt program care are


nevoie de activarea etapei programului prog.

 Instrucţiunea TSTART
Nume: TSTART
Semnificaţia: porneşte incrementarea unei variabile de tip timer,
fără a-i reseta valoarea
Sintaxa: TSTART (<var_timp>);
Operanzi: orice variabilă timer inactivă
Valoarea returnată: nici una

Exemplu: Program SFC care foloseşte instrucţiunile TSTART si


TSTOP
În cazul în care b100 este adevarată, diagrama de timp va fi
întotdeauna falsă.

Timerul menţine aceeaşi valoare în timpul unui ciclu automat.

 Instrucţiunea TSTOP
Nume: TSTOP
Semnificaţia: opreşte incrementarea unei variabile de tip timer, fără
a-i modifica valoarea
Sintaxa: TSTOP (<var_timp>);
Operanzi: orice variabilă timer activă
Valoarea returnată: nici una

 Instrucţiunea GSTART
Nume: GSTART
Semnificaţia: porneşte un program fiu SFC punând un jeton în
fiecare etapă iniţială
Sintaxa: GSTART (<progr_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al celui
în care este scrisă instrucţiunea
Valoarea returnată: nici una

Exemplu: Folosirea lui GSTART şi GKILL

 Instrucţiunea GKILL
Nume: GKILL
Semnificaţia: opreşte un program fiu SFC prin îndepărtarea
jetoanelor existente în etapele sale
Sintaxa: GKILL (<prog_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al celui
în care este scrisă instrucţiunea
Valoarea returnată: nici una

 Instrucţiunea GFREEZE
Nume: GFREEZE
Semnificaţia: suspendă execuţia unui program SFC fiu
programele suspendate pot fi repornite prin
instrucţiunea GRST
Sintaxa: GFREEZE (<prog_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al
celui în care este scrisă instrucţiunea
Valoarea returnată: nici una

 Instrucţiunea GRST
Nume: GRST
Semnificaţia: reporneşte un program fiu SFC suspendat prin
instrucţiunea GFREEZE
Sintaxa: GRST (<prog_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al celui
în care este scrisă instrucţiunea
Valoarea returnată: nici una

 Instrucţiunea GSTATUS
Nume: GSTATUS
Semnificaţia: returnează starea curentă a unui program SFC
Sintaxa: <ana_var> := GSTATUS (<prog_fiu>);
Operanzi: programul SFC specificat trebuie să fie un fiu al celui
în care este scrisă instrucţiunea
Valoarea returnată: 0 = programul este inactiv (oprit)
1 = programul este activ (pornit)
2 = programul este îngheţat

3.4. Operatori , proceduri şi funcţii standard

3.4.1. Operatori standard. Exemplele date sunt editate în Structured Text.


 Transferul datelor:
 atribuirea: alocarea unei variabile în altă variabilă
<var_0> :=<var_l>
 negaţia analogică : alocarea negării unei variabile
<var_0> :=-<var_l>

 Operaţii booleene:
 boolean AND: ŞI boolean între două sau mai multe
valori
<var_0> :=<var_1> AND <var_2>
 boolean OR: SAU boolean între două sau mai multe
valori
<var_0> :=<var_l> OR <var_2>
 boolean Exclusive XOR : SAU exclusiv boolean între
două valori de intrare
<var_0> :=<var_1> XOR <var_2>

 Operaţii aritmetice:
 adunarea a două sau mai multe variabile analogice
<var_0> :=<var_l> + <var_2>
 scăderea a două variabile analogice
<var_0> :=<var_l> - <var_2>
 înmulţirea a două sau mai multe variabile analogice
<var_0> :=<var_l> * <var_2>
 împărţirea a două variabile analogice
<var_0> :=<var_l> / <var_2>

 Operaţii logice:
 AND_MASK: ŞI bit cu bit
<rezultat> := AND_MASK <(16#abc,16#f0f)>
(*rezultatul este 16#a0c*)
 OR_MASK: SAU bit cu bit
<rezultat> := OR_MASK <(16#abc,16#f0f)>
(*rezultatul este 16#fbf*)
 XOR_MASK: SAU EXCLUSIV bit cu bit
<rezultat> := XOR_MASK <(16#012,16#011)>
(*rezultatul este 16#003*)
 NOT_MASK: NEGAŢIE bit cu bit
<rezultat> := NOT_MASK <(16#1234)>
(*rezultatul este 16#FFFF_EDCB*)
 Comparaţii:
 mai mic: se testează dacă o valoare este mai mică
decât alta (analog, de tip timer sau mesaj)
<rezultat> := <(‘z’ < ’B’)>
(*rezultatul este fals*)

 mai mic sau egal: se testează dacă o valoare este mai


mică sau egală decât alta (analog sau mesaj)
<rezultat> := <(10 <= 25)>
(*rezultatul este adevărat*)
 mai mare: se testează dacă o valoare este mai mare
decât alta (analog, de tip timer sau mesaj)
<rezultat> := <(‘ab’ > ‘a’)>
(*rezultatul este adevărat*)
 mai mare sau egal: se testează dacă o valoare este
mai mare sau egală decât alta (analog sau mesaj)
<rezultat> := <(10 >= 25)>
(*rezultatul este fals*)
 egal: testeaza dacă o valoare este egală cu alta
(analog sau mesaj)
<rezultat> := <(10 = 25)>
(*rezultatul este fals*)
 diferit : testează dacă o valoare este diferită de alta
(analog sau mesaj)
<rezultat> := <(‘ab’ <> ‘ab’)>
(*rezultatul este fals*)

 Conversia datelor:
 BOO: converteşte orice variabilă în valoare de tip
boolean
<rezultat1> := BOO <(10)> ;
(*rezultatul1 este adevărat*)
<rezultat2> := BOO <(t#0s)> ;
(*rezultatul2 este fals*)
 ANA: converteşte orice variabilă în valoare de tip întreg
<rezultat1> := ANA <(true)> ;
(*rezultatul1 este 1*)
<rezultat2> := ANA <(t#1s46ms)> ;
(*rezultatul2 este 1046*)
 REAL: converteşte orice variabilă în valoare de tip real
<rezultat1> := REAL <(true)> ;
(*rezultatul1 este 1.00*)
<rezultat2> := REAL <(198)> ;
(*rezultatul2 este 198.0*)
 TMR: converteşte orice variabilă analogică într-o
valoare de tip timer
<rezultat> := TIMER <(1234)> ;
(*rezultatul este t#1s234ms*)
 MSG:converteşte orice variabilă într-o valoare de tip
mesaj
<rezultat> := MSG <(true)> ;
(*rezultatul este ‘TRUE’*)
 Altele:
 CAT: concatenarea mai multor mesaje într-unul singur
<numelemeu> := <(‘Dl’ + ‘’)+’Sorin’> ;
(* numelemeu := ‘Dl Sorin’ *)
 SYSTEM:accesul la parametrii sistemului
 OPERATE: accesul la canalele I/O

3.4.2. Proceduri standard

Procedurile standard suportate de sistemul ISaGRAF sunt predefinite


şi nu trebuiesc declarate într-o bibliotecă.

 Proceduri pentru variabile booleene:


 SR: Set dominant bistable
setare bistabil
 RS: Reset dominant bistable

resetare bistabil
 R_Trig: Rising edge detection
detectare front crescător a unei variabile booleene
 F_Trig: Falling edge detection
detectare front descrescător a unei variabile booleene
 SEMA: Semaphore
semafor

 Proceduri de număratoare:
 CTU: Up counter
numără crescător de la 0 la o valoare dată, 1 câte 1
 CTD: Down counter
numără descrescător de la o valoare dată la 0, 1 câte 1
 CTUD: Up-down counter
număra reversibil, de la 0 la o valoare dată sau de la o
valoare dată la 0
 Proceduri de contorizare:
 TON: On-delay timing
incrementează un timer intern până la o anumită valoare, de la
detectarea frontului crescător al semnalului declanşator până la
detectarea frontului descrescător
 TOF: Off-delay timing
incrementează un timer intern până la o anumită valoare, de la
detectarea frontului descrescător al semnalului declanşator până
la detectarea frontului crescător
 TP: Pulse timing
incrementează un timer intern până la o anumită valoare de la
detectarea frontului crescător al semnalului declanşator un
interval de timp determinat

 Proceduri pentru valori întregi:


 CMP: Full comparison function block
compară două valori şi transmite dacă sunt egale, sau dacă prima
este mai mică sau mai mare decât a doua
 StackInt: Stack of integer analogs
gestionează o stivă de întregi

 Proceduri pentru valori reale:


 AVERAGE: Running average over N samples
memorează o valoare la fiecare ciclu automat şi calculează
valoarea medie a tuturor valorilor memorate; doar ultimele N
valori sunt memorate
 HYSTER: Boolean hysteresis on defference of reals
histerizisul unei valori reale oferindu-se ca intrare
limita superioară
 LIM_ALRM: High/low limit alarm with hysteresis
histerezisul unei valori reale oferindu-se ca intrare atât limita
superioară cât şi cea inferioară
 INTEGRAL: Integration over time
integrarea unei variabile reale în timp
 DERIVATE: Differentiation according to time
derivarea unei variabile reale în timp

 Proceduri pentru generarea semnalelor :


 BLINK: Blinking boolean signal
generarea unui semnal boolean în pulsuri
 SIG_GEN: Signal generator

generarea unei varietaţi de semnale: boolean pulsatoriu,


incremental, sinusoidal
3.4.3. Funcţii standard

Funcţiile standard suportate de sistemul ISaGRAF sunt predefinite şi


nu trebuiesc declarate într-o bibliotecă.

 Funcţii matematice:
 ABS: Absolute value
returnează valoarea absolută (pozitivă) a valorii reale
 EXPT: Exponent
returnează rezultatul real al operaţiei (bazaexponent) ‘baza’ fiind
primul argument şi ‘exponent’ al doilea
 LOG: Logarithm
calculează logaritmul (baza 10) a unei valori reale
 POW: Power calculation
returneaza rezultatul real al operatiei (bazaexponent) ‘baza’
fiind primul argument si ‘exponent’ al doilea; exponentul este o
valoare reală
 SQRT: Square root
calculează rădăcina pătrată a unei valori reale
 TRUNC: Truncate decimal part
trunchează o valoare reală pentru a avea doar partea
întreagă

 Funcţii trigonometrice:
 ACOS: Arc cosine
Calculează arccosinusul unei valori reale
 ASIN: Arc sine
Calculează arcsinusul unei valori reale
 ATAN: Arc tangent
Calculează arctangenta unei valori reale
 COS: Cosine
Calculează cosinusul unei valori reale
 SIN: Sine
Calculează sinusul unei valori reale
 TAN: Tangent
Calculează tangenta unei valori reale

 Funcţii de control a şirurilor de biţi:


 ROL: Rotate Left
Rotirea la stânga a biţilor unui întreg; rotirea se face
pe 32 de biţi
 ROR: Rotate Right
Rotirea la dreapta a biţilor unui întreg; rotirea se face
pe 32 de biţi
 SHL: Shift Left
Deplasarea la stânga a biţilor unui întreg; deplasarea este făcută
pe 32 de biti
 SHR: Shift Right
Deplasarea la dreapta a biţilor unui întreg; deplasarea este făcută
pe 32 de biţi

 Funcţii de control a datelor:


 MIN: Minimum
Calculează minimul dintre două valori întregi
 MAX: Maximum
Calculează maximul dintre două valori întregi
 LIMIT: Limit
Limitează valoarea unei variabile într-un interval
precizat
 MOD: Modulo
Calculează modulul unei valori întregi
 MUX4, MUX8: Multiplexer (4 or 8 entries)
Multiplexor cu 4 sau 8 intrări; selectează o valoare între 4 sau 8
valori întregi
 ODD: Odd parity
Testează paritatea unui întreg: rezultatul este par sau
impar
 RAND: Random value
Generează o valoare întreagă aleatoare într-un
interval dat
 SEL: Binary selector
Selectează o valoare dintre două valori întregi

 Funcţii de conversie a datelor:


 ASCII: Character – ASCII code
Generează codul ASCII al unui caracter
 CHAR: ASCII code – Character
Generează un caracter pornind de la codul ASCII dat ca parametru

 Funcţii pentru şiruri de caractere:


 DELETE: Delete sub-string
Şterge subşir de caractere
 FIND: Find sub-string
Găseşte un subşir într-un şir; oferă poziţia în şir a
subşirului
 INSERT: Insert string
Introduce un subşir într-un şir începând cu o anumită
poziţie dată
 LEFT: Extract left of a string
Extrage un număr specificat de caractere din partea stângă a unui
şir de caractere
 MID: Extract middle of a string
Extrage un număr specificat de caractere dintr-un şir pornind de
la o poziţie specificată
 MLEN: Get string length
Calculează lungimea unui şir de caractere
 REPLACE: Replace sub-string
Înlocuieşte o parte a unui şir de caractere cu un nou set de
caractere
 RIGHT: Extract right of a string
Extrage un număr specificat de caractere din partea dreaptă a
unui şir de caractere
 DAY_TIME: Time of day
Întoarce data/ timpul ca un şir de caractere

 Funcţii pentru vectori:


 ARCREATE: Create array of integer values
Creează un vector de valori întregi
 ARREAD: Read array element
Citeşte un element dintr-un vector de valori întregi
 ARWRITE: Write array element
Scrie o valoare într-un vector de valori întregi

 Funcţii pentru gestionarea fişierelor binare:


 F_ROPEN: Open a binary file in Read mode
Deschide un fişier binar în modul citire; se va folosi FX_READ
şi F_CLOSE; această funcţie nu este inclusă în simulatorul
ISaGRAF
 F_WOPEN: Open a binary file in Write mode
Deschide un fişier binar în modul scriere; se va folosi
FX_WRITE şi F_CLOSE ; această funcţie nu este inclusă în
simulatorul ISaGRAF
 F_CLOSE: Close a binary file
Închide un fişier binar deschis cu funcţiile F_ROPEN sau
F_WOPEN; această funcţie nu este inclusă în simulatorul
ISaGRAF
 F_EOF: Test the end of a binary file
Testează dacă s-a ajuns la sfârşitul fişierului
 FA_READ: Read an analog value in a binary file
Citeşte variabile analogice dintr-un fişier binar; folosit cu
F_ROPEN şi F_CLOSE
 FA_WRITE: Write an analog value to a binary file
Scrie variabile analogice într-un fişier binar; folosit cu
F_WOPEN şi F_CLOSE
 FM_READ: Read a message string in a binary file
Citeşte variabile mesaj dintr-un fişier binar
 FM_WRITE: Write a message string to a binary
Scrie variabile mesaj într-un fişier binar
3.5. Variabile şi constante în ISaGRAF

3.5.1. Domeniile variabilelor

Variabilele pot fi de tip LOCAL sau GLOBAL. Variabilele locale pot fi folosite
doar de un program. Variabilele globale pot fi folosite de orice program al aplicaţiei
curente. Numele variabilelor trebuie să respecte următoarele reguli:
- numele nu trebuie să depăsească 16 caractere
- primul caracter trebuie să fie o literă
- următoarele caractere pot fi litere, numere sau caracterul underscore
O variabilă este identificată prin nume, comentariu, atribut, adresă şi
alte câmpuri specifice.

 Tipurile de atribute ale variabilelor


Boolean înseamnă logic. Astfel de variabile pot lua una dintre cele două valori
booleene: TRUE sau FALSE. Variabilele booleene se folosesc de obicei în expresii
booleene. Variabilele booleene pot avea unul dintre următoarele atribute:
 INTERNAL: variabilă din memoria internă modificată de program
 CONSTANT: variabilă din memorie cu atributul read only şi cu o valoare
iniţială
 INPUT: variabilă conectată la un dispozitiv de intrare
 OUTPUT: variabilă conectată la un dispozitiv de ieşire
Variabilele de tip timer sunt întotdeauna variabile interne.
Variabilele Input şi Output fac parte din domeniul Global. Pentru I/O
digitale se asociaza o variabilă booleană iar pentru I/O analogice se asociază
întotdeauna o variabilă analogică integer. Variabilele care nu reprezintă
semnale I/O trebuie declarate cu tipul intern.

3.5.2. Principalele tipuri de variabile

Orice constantă, expresie sau variabilă folosită într-un program (scris


în orice limbaj) trebuie să fie caracterizată de un anumit tip. Coerenţa
trebuie să fie apoi urmată în operaţiile grafice şi în instrucţiunile literale.
Principalele tipuri de variabile disponibile pentru programe sunt :
BOOLEAN: valori binare de tipul true/ false
ANALOG: valori întregi (integer) sau reale (real)
TIMER: valori de tip timer
MESSAGE: şiruri de caractere

3.5.3. Expresii constante


Expresiile constante sunt raportate de tipul de variabilă. Aceeaşi
notaţie nu poate fi folosită pentru a reprezenta expresiile constante ale
diferitelor tipuri.

 Constante de tip boolean:


 TRUE: este echivalentul numărului întreg 1
 FALSE: este echivalentul numărului întreg 0

 Constante de tip integer:


Constantele de tip întreg sunt reprezentate pe 32 de biţi, având valorile cuprinse
între -232 şi 232. Pot fi exprimate şi în alte baze de numeraţie şi trebuie să înceapă cu un
prefix care să identifice baza folosită.

Baza Prefix Exemplu


zecimal niciunul -120
hexazecimal 16# 16#A3F5D
octal 8# 8#17401
binar 2# 2#1000_1101_010

 Constante analogice de tip real:


Constantele analogice reale pot fi scrise fie printr-o reprezentare zecimală, fie
printr-o reprezentare ştiinţifică. Punctul zecimal este folosit pentru a diferenţia o constantă
reală de una de tip întreg. Reprezentarea ştiinţifică foloseşte literele ‘E’ şi ‘F’ pentru a
separa mantisa de exponent. Partea exponenţială a unei expresii ştiinţifice reale trebuie să
fie o valoare întreagă cu semn între -37 şi +37. Mai jos sunt prezentate cateva exemple de
constante reale:
3.14159
+1.0
-1.0E+12
Numarul 123 nu reprezintă o constantă reală, reprezentarea lui corectă este 123.0

 Constante de tip timer:


Constantele de tip timer sunt valori cuprinse între 0 şi 23h59m59s999ms. Cea mai
mică unitate permisă este milisecunda. Unităţile de timp standard folosite în expresii de tip
timer sunt:
 HOUR: litera h trebuie să fie urmată de oră
 MINUTE: litera m trebuie să fie urmată de numărul de minute
 SECOND: litera s trebuie să fie urmată de numărul de secunde
 MILLISECOND: literele ms trebuie să fie urmate de numărul de milisecunde

O constantă de tip timer trebuie să înceapă cu prefixul ‘T#’ sau ‘time#’. Unele
unităţi pot să nu apară. Exemple:
T#1H450MS 1 oră, 450 milisecunde
time#1H3M 1 oră, 3 minute
Capitolul 4. DESCRIEREA MEDIULUI DE
PROGRAMARE INDRALOGIC

Mediul de programare IndraLogic reprezintă o soluţie completă atât


pentru programarea unui automat programabil cât şi pentru a realiza
interfaţa grafică cu utilizatorul pentru automatele de tip Bosch-Rexroth seria
IndraControl. El se bazează pe mediul numit CoDeSys, versiunea 2.3,
service pack 2, creat de firma Smart Software Solutions (3S), dar are în plus
câteva funcţii specifice pentru acest tip de automate.

4.1. Structura unui proiect IndraLogic

Un proiect IndraLogic este un fişier al cărui nume corespunde cu cel


al proiectului şi în care se regăsesc atât configuraţiile stabilite de
programator cât şi programele ce vor fi executate în automat. Proiectul este
împărţit în patru zone de interes, după cum se poate vedea şi în fig. 4.1:
- programele ce vor rula pe automat
- structurile de date complexe declarate de programator
- vizualizările
- resursele implicate.

Fig.4.1. Zonele de interes pentru un proiect IndraLogic


4.1.1. Conceptul POU

POU sau Program Organization Unit se regăseşte în prima zonă de


interes a unui proiect IndraLogic şi reprezintă o funcţie, un bloc funcţional
sau un program. Fiecare POU este constituit dintr-o zonă de declaraţii şi un
corp. Acest corp poate fi scris într-unul din limbajele de programare
conform IEC care include IL (Instruction List), ST (Structure Text), SFC
(Sequential Flow Chart), FBD (Function Block Diagram) sau LD (Ladder
Diagram).
O funcţie este un POU a cărui ieşire este un singur element de date
(care poate fi format din mai multe elemente sau structuri). Funcţiile nu au
elemente de stare internă, astfel că fiecare apel al unei funcţii cu un anumit
argument va avea acelaşi rezultat. La declararea unei funcţii trebuie să se
hotărască tipul de date returnat.
Un bloc funcţional este un POU a cărui rezultat poate fi diferit chiar
dacă argumentul de intrare este acelaşi dar, spre deosebire de o funcţie,
blocul nu returnează o valoare. El poate avea mai multe instanţe (copii) ce
au comportament particular în funcţie de starea lor internă. Fiecare dintre
instanţe are identificatorul propriu (numele instanţei), şi o structură de date
ce conţine intrările, ieşirile, şi variabilele interne. Instanţele se declară local
sau global ca variabile unde numele blocului este identificatorul.
Un program este un POU ce poate returna mai multe valori în timpul
rulării. Programele sunt recunoscute global în proiect. Toate valorile se reţin
de la ultima rulare până la următoarea rulare. Programele nu pot fi apelate
de către o funcţie, şi nu pot exista mai multe instanţe ale aceluiaşi program.
Dacă un POU a apelat un program, valorile interne ale acestuia
modificându-se, acele valori sunt reţinute şi folosite la următoarea rulare
chiar dacă programul este apelat şi de un alt POU.
Important în această categorie este programul denumit PLC_PRG. El
este un program special predefinit, fiind apelat exact o singură dată pe ciclu
de automat. Prima dată când se iniţiază un nou proiect, se va deschide o
fereastră de configurare a acestui program.

4.1.2. Conceptul Data types

Data types este cea de-a doua zonă de interes într-un proiect
IndraLogic, şi reprezintă pe lângă tipurile de date standard predefinite şi pe
cele definite specific de programator. Se pot crea aici structuri, enumeraţii şi
referinţe.
4.1.3. Conceptul Visualization

IndraLogic oferă posibilitatea de a face şi o interfaţa om-maşină.


Aici se pot trasa obiecte geometrice, tabele de variabile şi alte elemente de
desenare în mod offline. Online, elementele desenate îşi modifică
proprietăţile astfel încât să corespundă stărilor din automatul programabil.

4.1.4. Resursele Implicate

Această zonă permite programatorului să configureze şi să


organizeze proiectul pentru a urmări valorile anumitor variabile în modul
online:
 Global Variables – declararea variabilelor globale ce pot fi
folosite în întreg proiectul şi pentru variabile de reţea;
 Library manager – permite adăugarea sau excluderea unor
librării de funcţii, structuri de date, etc.;
 Log – este un sistem de arhivare a acţiunilor pe parcursul unei
sesiuni online;
 PLC Configuration – este un instrument pentru configurarea
elementelor hardware ale automatului (carduri de intrare, ieşire,
comunicaţie etc.);
 Task Configuration – permite organizarea programelor în task-
uri ce se vor executa pe automat;
 Watch and Recipe Manager – utilizat la vizualizarea anumitor
variabile şi setarea valorilor implicite ale unor variabile;
 Target system settings – se foloseşte pentru a selecta şi configura
automatul şi proprietăţile acestuia pe care va rula proiectul, iar în
funcţie de această alegere mai pot apărea şi resurse suplimentare
cum ar fi:
 Sampling Trace – pentru realizarea statisticilor valorilor
variabilelor în timp;
 Parameter Manager – este folosit la schimbul de date cu alte
controllere în reţele;
 PLC Browser – este un monitor al controllerului;

 Tools – a cărui apariţie depinde de automatul ales, dând


posibilitatea de a chema instrumente externe mediului
IndraLogic.
4.2. Tipuri de date în IndraLogic

4.2.1. Tipuri de date predefinite

 Variabile de tip Bool – tipul de variabilă booleană poate lua doar


două valori TRUE sau FALSE.
 Variabile de tip Integer. Acest tip de variabilă se foloseşte pentru
a memora numere întregi cu semn sau fără semn. Ele sunt
împărţite în următoarele categorii:
 BYTE – număr întreg fără semn codificat pe opt biţi de
date;
 WORD – număr întreg fără semn codificat pe şaisprezece
biţi de date;
 DWORD – număr întreg fără semn codificat pe treizeci şi
doi de biţi de date;
 SINT – număr întreg codificat pe opt biţi de date cu semn
cu valori între (-128, 127);
 USINT – număr întreg codificat pe opt biţi de date fără
semn cu valori între (0, 255);
 INT – număr întreg codificat pe şaisprezece biţi de date
cu semn cu valori între (-32768, 32767);
 UINT – număr întreg codificat pe şaisprezece biţi de date
fără semn cu valori între (0 , 65535);
 DINT – număr întreg codificat pe treizeci şi doi de biţi de
date cu semn cu valori între (-2147483648, 2147483647);
 UDINT – număr întreg codificat pe treizeci şi doi de biţi
de date fără semn cu valori între (0, 4294967295).

 Variabile de tip Real. Acest tip de variabilă se foloseşte pentru


reprezentarea numerelor în formatul virgulă mobilă (numere
reale) şi sunt de două tipuri:
 REAL – numere reale codificate pe treizeci şi doi de biţi
de date;
 LREAL – numere reale codificate pe şaizeci şi patru de
biţi de date.
 Variabile de tip String. Sunt tipul de variabile în care se poate
memora un şir de caractere. Numărul de caractere, cunoscut
drept lungimea acestora se poate seta la declarare, iar dacă acesta
nu este definit, implicit se acordă 80 de caractere lungime.
 Variabile de tip Time. Acest tip de variabile este folosit pentru
reţinerea momentelor de timp. Are rezoluţie de milisecundă iar
intervalul de valori este (0, 49d17h2m47s295ms). Tipurile de tip
Time sunt:
 TIME
 TIME_OF_DAY(TOD)
 DATE
 DATE_AND_TIME
Ultimele două tipuri de date sunt tratate intern ca DWORD, timpul
fiind redat în secunde, şi nu în milisecunde.

4.2.2. Tipuri de date definite de utilizator

Variabile de tip Array. Aceste variabile sunt folosite pentru


declararea vectorilor şi a matricilor. Se pot defini câmpuri de date cu până la
trei dimensiuni de orice tip de date, predefinite sau definite de utilizator.
Variabile de tip Struct. Acest tip de date reprezintă structuri pe care
programatorul le poate implementa, structuri ce pot conţine toate tipurile de
date şi la rândul lor pot fi grupate în array-uri.
Variabile de tip Pointer. Sunt variabile ce pot indica un pointer
către orice tip de date sau bloc funcţional chiar şi pe cele definite de
utilizator. Acest tip de date se foloseşte în conjuncţie cu funcţia ADR pentru
a asigna valoarea dorită.
Variabile de tip Enumeration. Cu ajutorul lor se dă posibilitatea
utilizatorului să creeze un număr de string-uri constante ce vor fi considerate
valori ale enumerării. Important este faptul că acelaşi string constant nu
poate fi folosit în două enumerări.

4.2.3. Variabile globale

Variabilele globale sunt variabilele ce pot fi accesate din orice


program şi chiar pot fi modificate de către utilizatori din reţeaua unde se află
automatul. La ele au acces toate resursele de pe automat, spre deosebire de
variabilele locale ale blocurilor funcţionale sau programelor, la care nu au
acces decât cei care le-au creat. În aceste variabile globale pot fi definite
orice tip de date predefinit sau definit de utilizator, care se pot iniţializa cu o
valoare tipică, vezi fig. 4.2. Dacă nu este iniţializată, atunci variabila este
implicit 0 pentru date numerice sau caracterul vid în cazul şirurilor de
caractere.

Fig.4.2. Declararea variabilelor globale

4.3. Diferenţe importante IndraLogic - ISaGRAF


Între cele două medii de programare sunt foarte multe asemănări dar
şi unele diferenţe majore care trebuie analizate.
Prima dintre diferenţe şi cea mai importantă este structura unui
proiect IndraLogic. Dacă în structura proiectului ISaGRAF există 4 secţiuni
în care pot rula programele, aici nu mai este valabilă această împărţire.
Toate programele au aceeaşi prioritate la execuţie, depinzând numai de
setările impuse de utilizator prin configurarea task-urilor.
O altă diferenţă importantă este structura unei etape IndraLogic.
Aceasta are anumite proprietăţi foarte bine definite şi, spre deosebire de
ISaGRAF, utilizatorului nu îi este dat accesul la timpul în care o etapă este
activă sau nu. În schimb, prin meniul de proprietăţi se pot seta parametrii de
timp ai unei etape (timpul minim sau maxim cât automatul rămâne în etapa
respectivă), opţiuni de inserare a unei etape+tranziţie, paralelism sau
divergenţă, proprietăţi vizuale ale etapei (înălţime, lăţime, comentarii) şi
cele legate de acţiunile asociate etapei.
Spre deosebire de proprietăţile acţiunilor din ISaGRAF, acţiunile din
IndraLogic sunt de trei tipuri:
- Entry Action – se execută o singură dată la intrare într-o etapă;
- Action – se execută pe tot parcursul etapei la fiecare ciclu;
- Exit Action – se execută o singura dată la ieşirea din etapă.
Fiecare din aceste tipuri de acţiuni are propriul ei ecran de editare,
pentru prima şi ultima fiind activate dacă se apasă dublu-click pe colţurile
de jos ale etapei iar tipul Action prin dublu-click în interiorul chenarului
etapei, aşa cum se poate vedea în fig. 4.3.

Fig.4.3. Proprietăţile unei etape IndraLogic

4.4. Blocuri funcţionale

R_TRIG. Acest bloc funcţional face detecţia trecerii unei variabile


booleene de la un nivel low la un nivel high sau de la false la true. Această
variabilă poate fi o intrare digitală sau orice altă variabilă booleană
existentă. Ieşirea acestui bloc va rămâne false atât timp cât intrarea în acest
bloc este false. Imediat ce intrarea acestui bloc devine true, şi ieşirea lui va
avea aceeaşi valoare pentru un ciclu automat, după care devine false, până
când la intrare se va detecta încă o trecere din false în true.
Exemplu de utilizare în limbajul Ladder se poate observa în fig. 4.4.
Fig.4.4. Blocul funcţional R_TRIG

Iar în limbaj ST:


Rise(CLK:=VARIAB_INPUT);
IOUTPUT:=Rise.Q;

F_TRIG. Acest bloc funcţional este analogul lui R_TRIG doar că în


loc să detecteze tranziţia de la false la true el detectează trecerea de la true la
false. Exemplul de utilizare în limbajul ladder este prezentat în fig.4.5.

Fig.4.5. Blocul funcţional F_TRIG

CTU. Acest bloc funcţional numără impulsurile de la intrare,


incrementând o valoare de la care se porneşte această numărare. Blocul
funcţional are drept intrări booleene: CU (variabila pe al cărui front
crescător se doreşte numărarea, incrementarea valorii counterului făcându-se
cu o singură unitate la un puls), RESET (variabilă care reiniţializează
counterul cu valoarea 0), intrare de tip integer PV (reprezintă valoarea cu
care se compară numărul de pulsuri incrementate), şi două ieşiri: Q
(variabila de ieşire booleană care devine true când valoarea din counter este
egală sau depăşeşte valoarea PV) şi CV (valoarea actuală a counterului).
Exemplul de utilizare în limbaj Ladder este cel din fig. 4.6.

Fig.4.6. Blocul funcţional CTU

CTD. Acest bloc funcţional decrementează o valoare cu o unitate la


fiecare puls, tranziţie de la false la true a variabilei de la intrarea sa. El are
drept intrări booleene: CD (variabilă pe al cărui front descrescător se
decrementează valoarea din counter), LOAD (pe frontul crescător al acestei
variabile se va face încărcarea counterului cu o valoare prestabilită), intrare
de tip integer PV (valoarea cu care se doreşte iniţializarea counterului),
ieşirea booleana Q (va fi adevarată atât timp cât valoarea counterului este 0)
şi ieşirea de tip integer CV (valoarea actuală a counterului).
Exemplul de utilizare în limbaj Ladder este cel din figura 4.7.

Fig.4.7. Blocul funcţional CTD

CTDU. Acest bloc funcţional este o combinaţie între cele două,


adică prezintă ambele funcţii de numărare incrementală şi decrementală,
precum şi cele de reset şi load. Ieşirile lui digitale sunt aceleaşi ca la cele
două blocuri prezentate mai sus şi de aceea nu se va arăta decât un exemplu
de utilizare în limbajul Ladder Diagram, în fig. 4.8.

Fig.4.8. Blocul funcţional CTUD

TON. Timer On Delay are drept scop întârzierea cu un anumit timp


a unui semnal digital boolean. El are drept intrări: IN – aici se conectează
variabila a cărei schimbare din false în true se doreşte a fi întârziată, PT – o
variabilă de tip TIME sau o constantă în formatul TIME care spune cât timp
se doreşte a fi întârziat semnalul, iar ca ieşiri are Q – variabila care va
deveni true după trecerea timpului PT, precum şi ET – cea care dă valoarea
timpului actual al timerului.
Modul de funcţionare presupune că atât timp cât intrarea IN este
false, ieşirea Q să rămână false. Imediat ce IN devine true, atunci timpul din
timer, ET va începe să crească de ordinul milisecundelor, până când
valoarea sa atinge ceea ce utilizatorul a specificat în PT, după care va
rămâne constant. Dacă intrarea IN devine false, timerul se reiniţializează.
Ieşirea Q devine true numai dacă IN este true şi ET este egal cu PT,
altfel este false.
Exemplul de utilizare este cel din fig. 4.9.

Fig.4.9. Blocul funcţional TON

Graficul ce explică funcţionarea acestui bloc este cel din fig. 4.10.

Fig.4.10. Graficul funcţionării în timp a blocului TON

TOF. Timer Off Delay are o funcţionalitate asemănătoare. Are


aceleaşi intrari şi ieşiri dar face o întârziere a frontului descrescător al
variabilei de la intrare.
Modul de funcţionare presupune că atât timp cât intrarea este true
ieşirea Q să rămână true. Imediat ce IN devine false, timpul din timer ET va
începe să crească de ordinul milisecundelor până când valoarea sa atinge
ceea ce utilizatorul a specificat în PT, după care va rămâne constant. Dacă
intrarea IN devine true, timerul se reiniţializează.
Ieşirea Q devine false numai dacă IN este false şi ET este egal cu
PT, altfel este true.
Exemplul de utilizare este prezentat în fig. 4.11.
Fig.4.11. Blocul funcţional TON

Graficul ce explică funcţionarea acestui bloc este cel din fig. 4.12.

Fig.4.12. Graficul funcţionării în timp a blocului TOF

4.5. Problematica Timpului în IndraLogic

Măsurarea timpului în mediul de programare IndraLogic necesită o


abordare diferită de cea din ISaGRAF. Dacă se doreşte ca automatul să
aştepte un timp într-o etapa înainte de a efectua tranziţia la etapa următoare,
utilizatorul nu are acces la variabila de timp locală, care măsoară durata cât
automatul se află în acea stare, şi de aceea trebuie găsite alte soluţii. Prima
soluţie provine chiar din proprietăţile unei etape. Printre aceste proprietăţi
utilizatorul poate stabili timpul minim cât automatul trebuie să stea în etapa
respectivă. Pentru aceasta se urmează paşii de mai jos:
- se creează etapa dorită, dacă aceasta nu există deja;
- condiţia de ieşire din etapa respectivă trebuie să fie adevărată;
- se selectează etapa respectivă şi se apăsa butonul din dreapta al
mouse-ului;
- se selectează de aici “Step Attributes”;
- se completează cu valoarea de timp dorită în formatul Time şi se
apasă “OK”.
Acest procedeu a fost ilustrat în fig. 4.13 şi 4.14.
Fig.4.13. Alegerea proprietăţii Step Attributes

Fig.4.14. Completarea câmpului Minimum Time

Dacă se doreşte ca automatul să stea într-o etapă un interval de


timp variabil, atunci se foloseşte o altă metodă care se bazează pe
proprietăţile acţiunilor din IndraLogic. După cum a fost menţionat mai sus,
sunt trei tipuri de acţiuni: cele care se execută la intrarea într-o etapă, cele
care se execută la fiecare ciclu atât timp cât automatul se află în acea etapă
şi cele care se execută la ieşirea dintr-o etapă. În plus trebuie să se
folosească o funcţie predefinită a mediului de programare şi anume funcţia
TIME(). Această funcţie returnează în milisecunde timpul care a trecut de
când automatul a fost pornit sub forma unei variabile de tip TIME.
Modul de folosire este următorul: variabila1:=TIME().
Metoda propusă presupune memorarea momentului de timp în care
se intră în etapa respectivă (în engleza “time stamp”) şi apoi citirea
periodică a funcţiei TIME(), până când diferenţa între cele două momente de
timp este egală sau mai mare cu intervalul de timp. Paşii care trebuiesc
urmaţi sunt:
 se crează etapa dorită dacă aceasta nu există deja;
 se selectează etapa respectivă şi se apasă butonul din dreapta al
mouse-ului;
 se alege de acolo “Add Entry Action” în limbajul ST;
 se declară o variabilă de timp în care se va memora “time stamp”-
ul de intrare folosind funcţia TIME();
 se apasă dublu click pe etapa respectivă pentru a se putea
introduce acţiunile dorite a se efectua la fiecare ciclu;
 se declară o variabilă de timp în care se va memora “time stamp”-
ul curent folosind funcţia TIME();
 condiţia de ieşire din etapa este: “time-stamp” curent – “time-
stamp” de intrare >= variabila de timp.

Exemplul simplificat de configurare se poate observa în fig. 4.15 şi


4.16.
Fig.4.15. Introducerea unei acţiuni de tipul Entry - Action

Fig.4.16. Introducerea unei acţiuni de tipul Action


4.6. Taskuri şi configurarea acestora

Task-ul este definit de un nume, o prioritate şi de un tip ce


determină satisfacerea cărei condiţii va porni acel task. Aceste condiţii pot fi
definite de un moment de timp (ciclic, “freewheeling”), sau un eveniment
intern sau extern, de exemplu frontul crescător al unei variabile globale sau
o întrerupere în automatul programabil.
Pentru fiecare task se poate specifica o serie de programe ce vor fi
pornite de task. Dacă taskul este executat în ciclul prezent, atunci aceste
programe vor fi procesate pe întreaga lungime a unui ciclu. Ordinea în care
se executa taskurile va fi determinată de combinaţia, de prioritatea şi
condiţiile de începere.
Editorul pentru configurarea taskurilor se poate găsi în categoria
“Resources”, “Task Configuration”. Odată deschis editorul, se pot defini
taskurile şi proprietăţile acestora. Programele construite nu vor fi executate
în “run-time” până când nu au fost apelate într-un task.
Pentru a putea înţelege mai uşor paşii de configurare a unui
program, s-a ales următorul exemplu. Se defineşte un program numit Test şi
apoi se va configura un task pentru acesta.
La crearea unui noi proiect, primul pas este cel de a crea
programul. În acest caz s-a optat pentru limbajul SFC, vezi fig. 4.17.

Fig.4.17. Crearea unui program numit Test

Apoi se merge la editorul de taskuri aşa cum s-a precizat mai sus.
Fig.4.18. Crearea unui nou task

După care se trece la adăugarea unui nou task prin apăsarea


butonului din dreapta al mouse-ului când pointerul acestuia se află deasupra
pictogramei “Task configuration” şi alegându-se opţiunea “Append task”
(vezi fig. 4.18.). Acestui task creat i se poate modifica numele iar în dreapta
ferestrei de editare se pot găsi opţiunile pe care programatorul le are pentru
acel task. În mod implicit acesta este un task ciclic fără o durată predefinită,
cu prioritate 1 (a doua prioritate) vezi fig. 4.19.

Fig.4.19. Taskul în IndraLogic

După ce acest task a fost creat, i se poate adăuga o apelare a unui


program prin apăsarea butonului din dreapta a mouse-ului, când pointer-ul
acestuia se afla în dreptul pictogramei cu numele task-ului definit, prin
alegerea opţiunii “Append Program Call” sau “Insert Program Call” dacă
mouse-ul s-a aflat în dreptul pictogramei cu programul ales (vezi fig. 4.20).

Fig.4.20. Opţiunile taskurilor în IndraLogic

Odată definit, unui program call trebuie să i se configureze care din


programele existente în proiect va fi apelat de acesta. Pentru aceasta se
foloseşte butonul special “...” care va deschide fereastra denumită “Input
Assistant”, ce permite alegerea din lista de programe a celui care se doreşte
a fi chemat, aşa cum rezultă din fig. 4.21.

Fig.4.21. Apelul unui program în IndraLogic


Odată apelat, programul este executat conform proprietăţilor
definite pentru task. Un task poate apela mai multe programe prin repetarea
paşilor de mai sus, iar ele vor fi executate în ordinea apelării lor de acest
task ca în fig. 4.22.

Fig.4.22. Apelarea a două programe succesive

4.7. Conceptul de vizualizare

Vizualizarea IndraLogic este o reprezentare grafică a variabilelor


proiectului care oferă posibilitatea introducerii de date în automatul
programabil în timp real cu ajutorul mouse-ului sau a tastaturii. Editorul de
vizualizări, care este o parte integrantă a mediului de programare, permite
utilizarea unor elemente grafice care pot fi configurate astfel încât să fie
conectate la variabilele proiectului prin intermediul unui dialog
corespunzător unui singur element al unei vizualizări. Parametrii de bază pot
fi setaţi prin activarea unor opţiuni, iar prin introducerea variabilelor
procesului se poate obţine parametrizarea dinamică.
Elementele posibile ale unei vizualizări se regăsesc în bara din
meniul mediului de programare, putând fi inserate diferite forme
geometrice, poze în format „bitmap”, fişiere „metafile”, butoane şi chiar alte
vizualizări existente. Formele geometrice ce pot fi introduse sunt:
dreptunghiuri, dreptunghiuri cu colturi rotunjite, elipse/cercuri şi poligoane.
Un exemplu de vizualizare este cel din fig. 4.23.
Fig.4.23. Exemplu de vizualizare în IndraLogic

În exemplul de mai sus s-au folosit majoritatea elementelor grafice


disponibile în editorul specializat, s-au introdus şi cele cinci poze în format
bitmap ale roboţilor, diferitele stări de funcţionare fiind accentuate şi prin
parametrizarea dinamică a coordonatelor (pentru a sugera mişcarea) şi a
culorilor (pentru a evidenţia stare normală sau anormală de funcţionare).
Pentru o uşoară înţelegere se va da un exemplu simplu de
configurare a unui buton şi a unui indicator tip led. În prealabil au fost
declarate aceste variabile ca fiind globale, şi în plus s-a creat un program de
control în limbajul Ladder care este definit: atât timp cât butonul este true
variabila led este true.
Primul pas pentru a putea realiza o vizualizare este crearea unui
asemenea obiect prin apăsarea butonului din dreapta al mouse-ului când
cursorul acestuia se afla în dreptul pictogramei “Visualization” şi alegerea
opţiunii “Add Object”, rezultatul putând fi văzut în fig. 4.24.
Fig.4.24. Editorul de vizualizări IndraLogic

Odată cu denumirea acestui obiect, pe ecran apare şi editorul de


ecrane. În bara de sus a acestuia există posibilitatea de a alege elementele pe
care programatorul doreşte să le insereze în ecran. În exemplul dat se aleg
două obiecte: unul de tip “button” şi unul de tip “circle” (vezi fig. 4.25).

Fig.4.25. Introducerea elementelor în vizualizare


La apăsarea dublu click deasupra unui obiect, se deschide automat
meniul de configurare al acestui tip de element (ca în fig. 4.26).

Fig.4.26. Opţiunile obiectelor din vizualizare în IndraLogic

Dacă se alege opţiunea “Text” se poate introduce textul ce se doreşte


a fi afişat pe ecran, iar prin alegerea opţiunii “Input” se poate configura tipul
butonului (cu automenţinere sau fără), precum şi variabila ce se doreşte a fi
manipulată de acest buton. Dacă în câmpul acesta se începe cu “.” atunci
apare lista variabilelor globale din care se poate alege denumirea celei
dorite, iar la apăsarea butonului “OK” se închide fereastra, butonul fiind
configurat.
Pentru configurarea obiectului de tip “LED” se deschide ca şi
anterior meniul de configurare iar prin alegerea opţiunii “Text” se poate
introduce textul ce se doreşte a fi afişat pe ecran. Se trece apoi la
configurarea culorilor pe care acest led trebuie sa le ia în funcţie de valoarea
variabilei booleene, ca în fig. 4.27.
Fig.4.27. Configurarea proprietăţii „color”

Opţiunile de aici sunt “Inside color” şi anume culoarea pe care o ia


în mod implicit obiectul (dacă variabila de care este legat este false) şi
“Alarm color” unde se va configura cea de-a doua culoare (cea pe care
obiectul o să o aibă dacă variabila de care este legat devine true).
Legarea de variabila dorită se face prin alegerea meniului denumit
“Variables” iar la opţiunea “Change color” se va scrie variabila de care se
doreşte a se lega obiectul (vezi fig. 4.28).

Fig.4.28. Configurarea variabilei de culoare pentru obiectul de tip cerc


Rezultatul se poate observa în fig. 4.29.

Fig.4.29. Exemplul de stări ale vizualizării create

4.8. Configurarea unui proiect pentru simulare pe


calculator

IndraLogic permite utilizatorilor să îşi simuleze programele şi modul


de execuţie al acestora pe un sistem automatizat. Se vor lua etapele de
configurare şi creare ale unui proiect care să înglobeze şi interfaţa dată ca
exemplu mai sus.
Mai întâi se creează un nou proiect din meniul “File”, apelând
opţiunea “New”. Se deschide automat meniul de configurare al automatului
pe care se va dori rularea programului. Dacă se alege opţiunea “None”
atunci mediul de programare intră automat în modul de simulare (vezi fig.
4.30).
Fig.4.30. Setarea implicită a modului de simulare

După alegerea opţiunii “None”, se trece la configurarea primului


program ce va rula pe automat. Aici sunt mai multe opţiuni iar automatul va
denumi în mod implicit primul program “PLC_PRG” dar numele acestuia
poate fi modificat, cu observaţia că el nu va fi introdus automat în niciun
task, aceasta operaţie rămânând la latitudinea programatorului. Tipul
limbajului folosit se alege din acest meniu, apăsând cu mouse-ul în dreptul
opţiunii dorite, în cazul acestui exemplu “LD” pentru limbajul “Ladder
Diagram” ca în fig. 4.31.

Fig.4.31.Configurarea unui program în IndraLogic


Automat se va deschide editorul pentru tipul de program dorit, în
bara de sus putându-se introduce elementele dorite.

Fig.4.32. Configurarea elementelor unei diagrame Ladder

Configurarea elementelor din diagramă se face prin completarea


câmpurilor “???” cu numele variabilelor dorite ca în fig. 4.33. Dacă acestea
au fost declarate anterior, (prin scrierea acestora în corpul de declaraţii ale
programului) se pot alege din lista care apare la scrierea caracterului “.”.
Dacă nu au fost declarate anterior, se va deschide automat interfaţa de
declarare numita “Declare Variable” (vezi fig. 4.33), unde utilizatorul poate
alege:
- clasa variabilei: locală (VAR), argument de intrare
(VAR_INPUT), argument de ieşire (VAR_OUTPUT),
argument intrare-ieşire (VAR_IN_OUT) sau globală
(VAR_GLOBAL);
- numele variabilei;
- tipul variabilei; prin apăsarea butonului “...” se poate alege
unul din tipurile definite sau predefinite de variabile;
- valoarea iniţială;
- adresa: în memoria internă, ieşire a automatului, intrare a
automatului;
- comentariile făcute de utilizator;
- tipul de utilizare (constantă, retain, persistent).

Fig.4.33. Configurarea variabilelor

După configurarea variabilelor şi terminarea programului se trece la


compilare sau execuţie (se va face automat şi compilarea). Compilarea se
poate alege din meniul “Project”, opţiunea “Build” doar pentru programul a
cărui editare se face la momentul respectiv, sau opţiunea “Rebuild All” care
face compilarea tuturor programelor editate în proiect. Pentru simulare se
alege din meniul “Online” opţiunea “Login” şi apoi “Run”. În modul online
ramura ladder are culoarea albastră când condiţia este îndeplinită iar
valoarea ei este true (vezi fig. 4.34).
Fig.4.34. Programul simulat in modul online

4.9. Setări pentru comunicarea cu automatul BOSCH-


Rexroth IndraControl L40

Primul pas pentru a se putea lucra cu automatul este cel de a stabili


legătura prin interfaţa Ethernet. Acest lucru se face prin fixarea manuală a
IP-ului pe unitatea centrală folosind tastele de navigare.

Fig.4.35. Configurarea variabilelor

Folosind tasta ENTER de pe automat (vezi fig. 4.35.) se poate intra


în meniul de configurare. Prima opţiune din acest meniu este cel pentru
configurarea interfeţei Ethernet. Apăsând încă o dată tasta ENTER se intră
în submeniul ce permite fixarea adresei IP, Subnet Mask şi Gateway.
Navigarea între aceste opţiuni enumerate se poate face cu ajutorul tastelor
„▼” şi „▲”. Dacă se doreşte revenirea la meniul anterior aceasta se poate
face prin apăsarea tastei ESC. Odată ce s-a ales opţiunea dorită pentru
configurare prin apăsarea tastei ENTER se intră în meniul ce permite
configurarea adreselor dorite în grupe de câte trei cifre. O adresă are forma
AAA.BBB.CCC.DDD şi prin apăsarea tastei ENTER se poate naviga între
cele patru grupe de cifre, numărul respectiv se poate modifica, tasta „▼”
decrementând valoarea iar „▲” incrementând acea valoare. După
configurarea celor patru grupe automatul cere confirmarea adresei prin
afişarea textului “OK ?”. Dacă se apasă ENTER modificările efectuate sunt
memorate, daca se apasă ESC atunci toate modificările sunt ignorate.
Al doilea pas este configurarea mediului de programare IndraLogic.
Acest lucru se face din meniul „Online” opţiunea „Communication
Parameters”. Întâi se configurează gateway-ul apăsând butonul cu acelaşi
nume, utilizatorul putând alege de aici tipul conexiunii (local sau TCP/IP)
ca în fig. 4.36.

Fig. 4.36. Configurare Gateway

După ce s-a configurat Gateway-ul, trebuie realizată o nouă


conexiune. Aceasta se realizează prin apăsarea butonului „New”. Aici se
selectează opţiunea ”TCP/IP (level 2 route)” se confirmă cu OK şi apoi se
modifică câmpul ”Address” cu adresa IP a automatului ca în fig. 4.37.
Fig. 4.37.Configurarea unei conexiuni de comunicaţie