108

Automate Programabile

Embed Size (px)

DESCRIPTION

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ă

Citation preview

Page 1: Automate Programabile
Page 2: Automate Programabile

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

Page 3: Automate Programabile

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

Page 4: Automate Programabile

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

Page 5: Automate Programabile

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

Page 6: Automate Programabile

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,

Page 7: Automate Programabile

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:

Page 8: Automate Programabile

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

Page 9: Automate Programabile

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.

Page 10: Automate Programabile

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.

Page 11: Automate Programabile

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

Page 12: Automate Programabile

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.

Page 13: Automate Programabile

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ţă)

Page 14: Automate Programabile

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.

Page 15: Automate Programabile

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

Page 16: Automate Programabile

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.

Page 17: Automate Programabile

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)

Page 18: Automate Programabile

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.

Page 19: Automate Programabile

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.

Page 20: Automate Programabile

Î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

Page 21: Automate Programabile

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:

Page 22: Automate Programabile

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.

Page 23: Automate Programabile

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.

Page 24: Automate Programabile

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:

Page 25: Automate Programabile

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.

Page 26: Automate Programabile

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

Page 27: Automate Programabile

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ă

Page 28: Automate Programabile

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:

Page 29: Automate Programabile

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.

Page 30: Automate Programabile

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

Page 31: Automate Programabile

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.

Page 32: Automate Programabile

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 =

Page 33: Automate Programabile

Sursa

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) 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.

Page 34: Automate Programabile

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

Page 35: Automate Programabile

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.

Page 36: Automate Programabile

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

Page 37: Automate Programabile

Î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

Page 38: Automate Programabile

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ă;

Page 39: Automate Programabile

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:

Page 40: Automate Programabile

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.

Page 41: Automate Programabile

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.

Page 42: Automate Programabile

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

Page 43: Automate Programabile

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:

Page 44: Automate Programabile

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:

Page 45: Automate Programabile

Analog pentru etapa 102:

Page 46: Automate Programabile

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

Page 47: Automate Programabile

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.

Page 48: Automate Programabile

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

Page 49: Automate Programabile

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

Page 50: Automate Programabile

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):

Page 51: Automate Programabile

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:

Page 52: Automate Programabile

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.

Page 53: Automate Programabile

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ţă.

Page 54: Automate Programabile

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

Page 55: Automate Programabile

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):

Page 56: Automate Programabile

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;

Page 57: Automate Programabile

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

Page 58: Automate Programabile

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>();

Page 59: Automate Programabile

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

Page 60: Automate Programabile

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

Page 61: Automate Programabile

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.

Page 62: Automate Programabile

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;

Page 63: Automate Programabile

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

Page 64: Automate Programabile

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

Page 65: Automate Programabile

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>;

Page 66: Automate Programabile

<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

Page 67: Automate Programabile

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

Page 68: Automate Programabile

Î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>);

Page 69: Automate Programabile

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

Page 70: Automate Programabile

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.

Page 71: Automate Programabile

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*)

Page 72: Automate Programabile

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*)

Page 73: Automate Programabile

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

Page 74: Automate Programabile

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

Page 75: Automate Programabile

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

Page 76: Automate Programabile

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

Page 77: Automate Programabile

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

Page 78: Automate Programabile

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

Page 79: Automate Programabile

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

Page 80: Automate Programabile

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

Page 81: Automate Programabile

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.

Page 82: Automate Programabile

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.

Page 83: Automate Programabile

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

Page 84: Automate Programabile

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

Page 85: Automate Programabile

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;

Page 86: Automate Programabile

- 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.

Page 87: Automate Programabile

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

Page 88: Automate Programabile

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ă.

Page 89: Automate Programabile

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.

Page 90: Automate Programabile

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.

Page 91: Automate Programabile

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,

Page 92: Automate Programabile

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.

Page 93: Automate Programabile

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

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

Page 94: Automate Programabile

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.

Page 95: Automate Programabile

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

Page 96: Automate Programabile

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

Page 97: Automate Programabile

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.

Page 98: Automate Programabile

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.

Page 99: Automate Programabile

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

Page 100: Automate Programabile

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.

Page 101: Automate Programabile

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

Page 102: Automate Programabile

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).

Page 103: Automate Programabile

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

Page 104: Automate Programabile

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;

Page 105: Automate Programabile

- 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).

Page 106: Automate Programabile

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.

Page 107: Automate Programabile

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.

Page 108: Automate Programabile

Fig. 4.37.Configurarea unei conexiuni de comunicaţie