Automatizarea Unei Celule de Asamblare Robotizata

Cuprins

Introducere.- Stadiul pe plan mondial in automatizarilor industriale cu PLC-uri si roboti industriali. – pag. 3

Definitie si rol functional – pag 3

Scurt istoric – pag. 5

Structura de principiu a automatelor programabile – pag. 6

Limbajele de programare a PLC – pag. 11

Definirea problemei si a componentelor de automatizare – pag. 15

Descrierea task-urilor automatului programabil – pag. 16

Descrierea Procesului – pag. 16

Realizarea Aplicatiei – pag. 17

Programul Principal – pag. 17

Miscare – pag. 23

Securitate – pag. 29

Alarme – pag. 31

Identificarea componentelor pentru asamblare cu ajutorul camerei – pag. 33

Calibrare – pag 37

Testare – pag 40

Invatare – pag 43

Programarea task-urilor robot – pag 47

Rezultate experimentale si concluzii – pag 55

Bibliografie – pag 56

Anexe – pag 57

1.Introducere

Stadiul pe plan mondial in automatizarilor industriale cu PLC-uri si roboti industriali

1.1. Definiție și rol funcțional

Echipamentele cu logică programată(ELP) sau automatele programabile (AP) sau programmable logic controllers (PLC) sunt dispozivelor ce au ca rol conducerea automata a proceselor in special cele industriale

Mai jos am prezentat schema bloc sintetizata a structurii unui proces automatizat utilizand un automat programabil: (fig. 1.1):

Fig. 1.1: Structura unu proces automatizat cu ajutorul unui automat programabil

Dupa cum se poate observa, automatul programabil realizează astfel cele două sarcini principale ale automatizării unui proces si anume:

– măsura, reprezinta sarcina care, în acest caz, presupune monitorizarea starilor procesului prin achiziția variabilelor de stare din proces la intrările automatului, prin intermediul senzorilor, butoanelor, limitatoarelor de cursă, etc.;

– controlul, reprezinta sarcina care presupune prelucrarea informațiilor primite de la intrări și generarea comenzilor necesare mentinerii procesului in anumite limite dorite de utilizator, comenzi trimise spre elemente de execuție ale procesului automatizat

Automatele programabile prezinta numeroase avantaje comparate cu automatizările discrete în logică cablată ce pot utiliza o comandă realizată cu elemente electromecanice, pneumatice sau electronice, inovand prin structura compactă, flexibilitate, siguranță mărită în funcționare și programare ușoară și rapidă. [3]

Definitia unui automat programabil poate fi:” un sistem specializat folosit pentru tratarea problemelor de logică secvențială și combinațională, simulând structurile logice de comandă printr-o configurație elastică, programabilă. “

Printre avantajele oferite prin natura lor, automatele programabile sunt adaptabile pentru functionarea in mediul industrial, pot opera pe o plaja larga de temperatura si umiditate, sunt usor de adaptat la interfata cu orice proces si nu in ultimul rand nu ridica probleme deosebite privind formarea operatorilor datorita simplitatii limbajului de programare . La aceste avantaje se pot adauga si robustetea generala a echipamentului si costul redus in raport cu echipamentele necesare logicii cablate, acestea explicand prezenta foarte mare a automatelor programabile in sistemele de conducere a sistemelor

Automatele programabile au reusit sa se impuna într-o varietate tot mai mare de aplicații, datorită simplității programării, accesibilității, fiabilității ridicate în functionare si celolalte avantaje mentinate mai sus.

Utilizarea logicii programate constituie un progres fata de logica cablata de realizare a echipamentelor de comandă. Pentru PLC-uri programul înscris în memoria program stabileste funcțiile ce trebuie executate precum și succesiunea acestora astfel este asigurata o flexibilitate deosebită in cadrul dispozitivelor de comandă, facand modificarile si dezvltarile ulterioare mult mai usoare. Dacă în cazul logicii cablate pentru efectuarea unei modificari în funcționarea echipamentului de comandă era necesara realizarea unui cablaj nou si a unor noi legături între elemente conform noii logici, în cazul PLC-urilor se realizeaza economii semnificative de timp si instalare, modificarea constand în simpla reprogramare a logicii software, fără a fi necesare modificări în cablajul inițial. In plus, această trasatura centrala a PLC-urilor permite tipizarea interfețelor de intrare și ieșire și a unității centrale, precum si personalizarea diverselor scheme de comandă, aceasta făcându-se prin programul implementat. Deasemenea, aspectul mai sus mentionat duce la regândirea și optimizarea ciclului de proiectare al unui echipament de comandă. Ciclul logicii cablate fiind: conceperea schemei, realizarea cablajului(verificarea funcționării, refacerea schemei, etc.), se modifică ajungandu-se la incarcarea programului de comanda în memorie cu ajutorul dispozitivului de programare, acesta vizualizandu-se pe monitor și verificandu-se prin utilizarea unor programe de auto-testare și monitorizare. Eficiența activității de proiectare și de implementare creste considerabil deoarece potentialele modificări la punerea în funcțiune a instalației se fac prin intermediul dispozitivului de programare fără a afecta structura cablajului realizat, ca in cazul logicii cablate.

Un alt avantaj al PLC-urilor este deasemenea si reducerea numărului de componente (cu până la 80% comparativ cu schemele de automatizare cu relee), ce rezulta in creșterea fiabilității și o importantă reducere a consumului de energie electrică.

Dintre dezavantajele PLC se pot aminti necesitatea programării și operării acestora de către un operator calificat precum și costul relativ ridicat. Trebuie precizat, însă, faptul că în timp costul a scăzut constant și domeniul de aplicație al PLC-urilor s-a extins și în cazul comenzilor cu un număr foarte mic de intrări și ieșiri (10÷12).

1.2. Scurt istoric

În prezent peste 60% din totalul comenzilor industriale în țările avansate se estimează că sunt realizate cu PLC, iar prognoza pentru acest procent este în creștere.

Automatele programabile au fost folosite pe scara larga prima oară în anii ’60. Principalul scop al dezvoltării si utilizarii acestor sisteme a fost diminuarea costurilor ridicate de instalare, exploatare și intretinere ale sistemelor de automatizare cablate, ce functionau în principal cu ajutorul releelor electromagnetice, care constituiau la acea data majoritatea sistemelor de automatizare industriale.

Inainte de apariția automatului programabil a fost creat un set de cerințe pentru noul sistem de automatizare, care avea rolu de a substitui sistemele de automatizare cu relee intermediare.

Astfel, automatul programabil trebuia să îndeplinească următoarele cerinte:

Să fie competitiv din punct de vedere al prețului cu sistemele de automatizare cu relee intermediare;

Să isi poata indeplini cerintele în mediul industrial;

Să fie construit într-o formă modulară, cu posibilitatea înlocuirii ușoare a modulelor;

Să aibă raporteze datele colectate din proces unui sistem central supervizor, in timp real;

Să fie usor programabil1, astfel incat sa fie la indemana personalului familiarizat cu sistemele de automatizare cu relee.

Primul automat programabil în variantă industrială a apărut în SUA sub numele de MODICON 084 (Modular Digital Controller). [3]

La mijlocul anilor ’70 automatele programabile erau realizate în principal în tehnologia microprocesoarelor cu prelucrare pe bit, iar în 1973 au apărut primele protocoale de comunicație între automate. [3]

Primele automate cu microprocesoare cu prelucrare pe cuvânt au apărut in anii ’80, și tot atunci au apărut si primele incercari de standardizare a protocoalelor de comunicație. Tot atunci prin introducerea programării software simbolice, s-a incercat reducerea dimensiunilor fizice ale PLC-urilor, locul consolelor de programare dedicate, ce erau utilizate exclusiv pentru programarea PLC-urilor până în acel moment in realizarea programelor, a fost luat treptat de calculatoarele personale.

Perioada anilor ’90 a fost marcata de un accent din ce în ce mai mare pus asupra standardizării atât a protocoalelor de comunicație cât și a modurilor de programare. In anii ’90 s-a observat de asemenea o tendința de înlocuire a sistemelor de automatizare bazate pe automate programabile cu sisteme de automatizare bazate pe calculatoare personale, tendință care nu s-a generalizat (automatele programabile fiind prima optiune in cazul echipamentelor de proces cu logică programată) din următoarele motive:

Automatul programabil prezinta robustete sporita în condiții industriale severe ex:variații de tensiune și temperatură, noxe, vibrații, etc;

Unitatea centrală este o unitate logică special proiectata să execute un set restrâns de instrucțiuni specifice controlului de proces. Acestea exprimă funcții de bază ca: evaluarea expresiilor booleene (logice) cu atribuirea rezultatului unei variabile memorate sau unui canal de ieșire, secvențe de numărare sau temporizare, calcule matematice ș.a.;

Facilitatea programarii structurilor de tip automat programabil; programare ce consta în scrierea directă de la un terminal a unui șir de instrucțiuni, conform unor diagrame de semnal, ciclograme, organigrame sau a unui set de ecuații booleene, intenția producătorilor de PLC-uri fiind aceea de a usura invatarea limbajului de programare conform cunoștințelor și preferințelor utilizatorilor;

Instructiunile se executa ciclic, ceea ce face ca exacutarea rapidă a unui program raportat la timpii de răspuns ai procesului să permită sesizarea eventualelor evenimente utile la puțin timp după ce apar, fără riscul pierderii de informație sau de intrerupere a procesului. Pentru procese foarte rapide există, de asemenea, posibilitatea lucrului cu întreruperi.

1.3. Structura de principiu a automatelor programabile

Automatul programabil functioneaza doar daca are in memorie incarcata o secventa de instructiuni. Aceasta secventa de instructiuni constituie programul de comanda. Programul este executat de catre PLC incepand de la prima linie pana la ultima si apoi se reia respectivul ciclu. Ciclul poarta denumirea de “scanare” si incepe prin citirea intrarilor urmand ca dupa aceea sa se execute programul ce se incheie prin modificarea iesirilor.

Programul principal are in componenta subrutine si intreruperi de program. De exemplu, daca dorim ca elementul de actionare sa execute o anumita sarcina la pornire, se poate folosi o subrutina. Intreruperile de program sunt setate de utilizator pentru a fi declansate de anumite evenimente ce au loc in anumite momente de timp. Structura componentelor tipice ale unui automat programabil este reprezentata în figura 1.2.

Fig. 1.2: Schema bloc a unui PLC

Intrarile din proces sunt realizate sub forma diverselor elemente de comanda si masurare incluse în sistemele operationale si auxiliare ale instalatiilor automatizate: butoane, comutatoare, limitatoare de cursa, senzori fotoelectrici, senzori de proximitate, traductoare de nivel, traductoare de deplasare incrementale sau absolute si, în ultimul timp, traductoare al caror semnal de iesire are o variatie analogica.[3]

Iesirile dirijeaza actionarea elementelor de executie de tipul releelor, contactoarelor, lampilor de control, electro-valvelor, elementelor de afisare etc.[3]

Intrarile si iesirile sunt doua aspecte foarte importante, deoarece în aceste locuri tensiunea si curentul pot sa atinga valori periculoase ce pot sa afecteze unitatea centrala de procesare CPU (central processing unit – microprocesorul automatului programabil). Pentru protejarea acesteia sunt introduse circuite concepute cu scopul de a izola CPU de influenta acestora.

Intrarile si iesirile sunt dotate cu circuite de interfata aferente, care au rolul de a converti semnalele de intrare de diverse forme în semnale logice adaptate unitatii centrale si de a transforma semnalele logice ale unitatii centrale în semnale dee proximitate, traductoare de nivel, traductoare de deplasare incrementale sau absolute si, în ultimul timp, traductoare al caror semnal de iesire are o variatie analogica.[3]

Iesirile dirijeaza actionarea elementelor de executie de tipul releelor, contactoarelor, lampilor de control, electro-valvelor, elementelor de afisare etc.[3]

Intrarile si iesirile sunt doua aspecte foarte importante, deoarece în aceste locuri tensiunea si curentul pot sa atinga valori periculoase ce pot sa afecteze unitatea centrala de procesare CPU (central processing unit – microprocesorul automatului programabil). Pentru protejarea acesteia sunt introduse circuite concepute cu scopul de a izola CPU de influenta acestora.

Intrarile si iesirile sunt dotate cu circuite de interfata aferente, care au rolul de a converti semnalele de intrare de diverse forme în semnale logice adaptate unitatii centrale si de a transforma semnalele logice ale unitatii centrale în semnale de iesire corespunzatoare actionarii impusa de sistemul de forta al sistemului automatizat.

In utilizarea automatelor programabile aspecte foarte importante sunt: pozitionarea terminalelor de intrare si iesire; precum si modul in care elementele legate la acestea sunt conectate. În figura 1.3. este prezentat în principiu, modul de conectare al unui element de intrare si al unui element de iesire la un automat programabil. Se observa ca elementele legate la iesirile automatului, fiind în general sarcini rezistive sau inductive, se conecteaza în paralel cu surse de tensiune continua sau alternativa.

Fig. 1.3: Conectarea intrarilor si iesirilor

“Creierul” automatului programabil este constituit de fapt de unitatea centrala de procesare CPU. Printre primele CPU aparute pe piata au fost cele pe 1 si 8 biti, in prezent fiind folosite cele pe 16 si 32 de biti.

Unitatea de centrala de procesare are la randul ei doua compnente: unitatea de control si unitatea logica si de calcul.

Unitatea de control este partea responsabila cu coordonarea tuturor transformarilor de date achizitionate de la proces. Aceastea efectueaza operatii logice asupra respectivelor date si este raspunzatoare pentru alocarea corespunzatoare a rezultatelor obtinute la iesirile dorite. De asemenea, unitatea de control mai efectueaza si o prelucrare de informatie numerica rezultata din proces,urmand ca ce rezulta in urma acestor operatii sa conditioneze starea operatorilor logici ai unitatii de calcul.

Unitatea de programare permite introducerea si definitivarea programului în raport cu evolutia masinii si cu modificarile impuse în secventele functionale de baza ale acestuia. Solutiile adoptate de catre fabricanti includ mai multe variante:

1. o consola autonoma cu memorie proprie, specifica metodei de programare off-line;

2. o consola portabila, de mici dimensiuni, ce opereaza împreuna cu automatul, utilizând memoria acestuia, (numit si dispozitiv “hand-held”), specifica metodei de programare on-line;

3. calculatorul personal de tip PC, solutie ce tinde sa înlocuiasca variantele amintite mai sus;[3]

Consola autonoma cu memorie proprie ofera avantajul unei programari facile, într-un birou de proiectare, deci în varianta off-line, pe când cea de-a doua implica cuplarea directa la automat deci implicit programarea se realizeaza on-line, nemijlocit în intimitatea procesului tehnologic automatizat.

Datorita memoriei de capacitate mare a consolei autonome, varianta de programare off-line utilizeaza de obicei un software complex cu posibilitati multiple de programare, cu o interfata grafica complexa, cu facilitati de simulare si testare a programului realizat. Prin contrast, varianta on-line utilizeaza un software minimal, cu posibilitati reduse de programare, limitate de obicei la introducerea de cuvinte de comanda, fara interfata grafica. Se poate deci concluziona ca programele complexe se realizeaza, testeaza si simuleaza în varianta off-line, în etapa programarii on-line facându-se doar o “ajustare” finala a acestora.

Utilizarea calculatorului personal tinde sa înlocuiasca însa ambele variante de mai sus, deoarece combina avantajele programarii off-line cu mobilitatea pe care o ofera la ora actuala calculatoarele portabile (tip notebook), ceea ce face inutila utilizarea dispozitivelor “handheld” si elimina practic delimitarea între metodele off-line” si on-line.

Transmiterea programului de la dispozitivul de programare la automatul programabil si invers, în cazul utilizarii consolei de programare autonome sau a calculatorului personal se face utilizând interfata seriala RS 232 sau USB.

Memoria automatelor programabile stocheaza programe si date si este în general o memorie de dimensiune mica, între 1K la automatele micro si 64 K la automatele foarte mari (actualmente se folosesc si dimensiuni mai mari ajungând la 1 MB), unde, asa cum s-a mai precizat mai sus, 1K poate însemna 1024 biti, 1024 bytes sau 1024 cuvinte (words).

Memoria este segmentata în zone, una rezervata variabilelor de intrare-iesire, alta variabilelor ce definesc starea interna a automatului (variabile intermediare) si ultima este destinata programului ce urmeaza sa fie executat. Acest mod se segmentare a memoriei este orientativ, putând exista diferente de la un tip de automat la altul. La un moment dat, în memoria automatului programabil se poate afla un singur program, indiferent de dimensiunea acestuia si de spatiul de memorie ramas neocupat. În concluzie, memoria automatelor programabile nu poate fi folosita pentru stocarea programelor, aceasta facându-se pe dispozitive de stocare externe, uzual pe calculatorul personal prin intermediul caruia se face programarea si transmiterea programelor.

Tipurile mai vechi de memorii utilizate în constructia automatelor programabile erau realizate în varianta EPROM (electrically programmable read only memory), varianta ce presupunea, în cazul modificarii programelor, stergerea continutului memoriei cu lumina UV si re-programarea pe dispozitive speciale de programare. Actualmente circuitele de memorie sunt realizate în tehnologie FLASH EEPROM (electrically erasable programmable read only memory), re-programarea memorie facându-se cu usurinta prin intermediul software-ului de programare si a unui cablu serial sau USB. De asemenea, se utilizeaza pe scara destul de larga si memoriile RAM non-volatile, care utilizeaza baterii pentru mentinerea continutului memoriei.

Constructia modulara a automatelor programabile permite adaugarea cu relativa usurinta a modulelor de extensie, care maresc numarul total al terminalelor de intrare si iesire, permitând astfel extinderea numarului de elemente legate la intrari si iesiri fara a fi nevoie de achizitia unui automat dintr-o clasa superioara.

O atentie speciala trebuie acordata intrarilor si iesirilor, deoarece in aceste blocuri se gaseste protectia PLC prin izolarea CPU de influenta distrugatoare a mediului industrial. Unitatea centrala de procesare(CPU) este creierul unui PLC. Este un microcontroler de 8, 16 sau 32 biti. CPU controleaza comunicatiile, conexiunile dintre celelalte parti ale PLC, executarea programului, operatiile cu memoria si controlul intrarilor si iesirilor. CPU realizeaza un mare numar de verificari ale functionarii corecte a PLC. Orice eroare este semnalizata intr-un anumit mod.

Pentru a rula procese mult mai complexe este posibil sa conectam mai multe P.L.C.-uri la un calculator central. Un sistem real ar putea arata ca in imaginea de mai jos.

Fig. 1.4: Imagine de ansamblu al unui proces complex de automatizare

1.4. Limbajele de programare a PLC

Există mai multe limbaje de programare a unui automat programabil, cele mai importante fiind:

-Limbaje grafice, de tip (Grafcet sau Isagraf)

-Diagrame Ladder

-Limbaje de nivel înalt (C, Pascal)

Limbajul Grafcet

Limbajul Grafcet reprezintă un mod de descriere, cu ajutorul elementelor grafice, a unui sistem logic secvențial, fiind util datorită generalității și sugestivitatii aferente unui astfel de limbaj, spre exemplu posibilitatea descrierii secvențelor paralele. Elementele constitutive ale unei diagrame Grafcet sunt următoarele:

Etape: corespund unei stări stabile a procesului iar fiecarei stari ii este atribuit un numar unic astfel incat programul sa poata face diferenta intre ele. Etapele pot fi:

Inițiale: active inițial, de obicei sunt punctul de start al programului

Normale, celelalte etape prin care trece programul intr-un ciclu si care nu sunt active initial dar sunt activate cand toate conditiile sutn indeplinite.

Tranziții: o tranziție indică posibilitatea trecerii dintr-o stare activă in starea ce urmeaza pe firul programului. Fiecăre tranziție are o condiție logică aferenta, iar în funcție de valorile logice ale unor variabile de intrare sau de proces (ce alcatuiesc conditia) si de starea activă sau inactivă a etapelor precedente tranzitia se poate efectua sau poate bloca fluxul programului. Condiția de tranziție nu este verificata pentru validare decât dacă etapa/etapele precedente sunt active.

Acțiuni asociate etapelor: deoarece o etapă poate fi atat activă cat si inactivă la un anumit moment al procesului, există acțiuni aferente etapelor, care se execută numai la activarea acestora. Pot exista și acțiuni condiționate, ce se execută dacă, suplimentar, mai este adevărată altă condiție logică. Exemplele de actiuni pot fi diverse:

deschiderea unei vane,

oprirea sau pornirea unui motor,

incrementarea unui contor,

pornirea unei temporizări.

Divergente (ramificatii): au loc între mai multe fire logice posibile, atunci când condițiile de tranziție se exclud una pe cealalta. 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.

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

Macro-etape: macro-etapa este o grupare a unui ansamblu de etape și de tranziții cu scopul de a forma o noua etapa. Macro-etapele incep si se termina cu o etapă inițială și una finală.

Modalitatea de functinarea a logicii unei diagrame Grafcet este următoarea: dacă o etapă este activă și condiția de tranziție atașata este adevărată, se face trecerea catre urmatoarea etapam etapa actuală dezactivandu-se și activandu-se etapa următoare (sau etapele următoare, în cazul unui paralelism).

Ladder diagram

Cea mai cunoscuta modalitate de construire a unui program ce va fi executat de către un automat programabil este varianta construiri unei diagrame “în trepte", numită „Ladder diagram".

O astfel de diagramă este formată din ramuri, pe fiecare ramură existând instrucțiuni specifice firmei producatoare de automate programabile. Întrucât instrucțiunile sun incluse in 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.

De obicei programul este creeat pe un calculator personal, sau cu ajutorul unui panou special (numit „Teach sau Handheld Pendant") atașat automatului, apoi programul este transformat în instrucțiuni specifice procesorului de AP și descărcat în memoria automatului. In momentul execuției, automatul scanează programul ramură cu ramură, iar pe fiecare ramură execută instrucțiunile găsite de la stânga la dreapta. Programul este executat ciclic, deci se trece la scanarea primei ramuri după scanarea ultimei ramuri.

Există și varianta rulării programului din memoria calculatorului, dar timpul pierdut cu transferul datelor între calculator și controller poate afecta performanțele programului, întrucât tipurile de instrucțiuni folosite într-o diagramă Ladder sunt practic aceleași indiferent de producătorul automatului programabil.

Programarea în limbaje de nivel înalt

In ultima perioada s-au facut multe eforturi pentru integrarea performanțelor de control și conducere a PLC-urilor cu posibilitățile de memorie și de calcul ale Desktopurilor. De aceea majoritatea automatelor programabile au in componenta un port de comunicație cu Desktopul, de tip RS-232 sau RS-485, ce faciliteaza stabilirea unei legături cu respectivul Desktop-ul chiar si în timpul execuției unui program de către PLC.

De asemenea, deoarece limbajele de nivel înalt, cum ar fi C sau Pascal, se bucura de o larga răspândire, mai mulți producători au dezvoltat compilatoare C pentru procesoarele pe care le folosesc în PLC-urile acestra. De aseenea unii producători au echipat PLC-urile cu procesoare compatibile Intel, acestea avand avantajul de a executa atat setul de instrucțiuni al procesoarelor Intel, cat si cel extins cu instrucțiuni specifice automatelor programabile.

Pentru construirea unui program in limbaj de nivel inalt exista doua metode de constructie ce stau la dispozitia utilizatorului:

Prima varianta este reprezentata de integrarea functiilor specifice alea automatului programabil si functiile de comunicatia intre automat si calcualtor, creind un program in limbajul C(varianta Borland sau varianta Micrsoft). In cazul acesta programul se executa în calculator, cu scopul de a da permanent comenzi controllerului și de a primi răspunsuri în legătură cu executarea acestora. Avantajul unui astfel de program ar fi puterea de calcul a unui desktop și capacitatea mare de memorie acestea rezultand in posibilitatea creării unor module software complexe folosind un numar mare de variabile. Insa daca un număr mare de PLC-uri sunt toate legate la un singur calculator, va rezulta intr-o scadere importanta a raspunsului sistemului datorita timpul necesar desktopului de a primi și de a procesa toate informațiile de la modulele de intrare/iesire ingreunand astfel controlul procesului. Pentru evitarea acestui caz neoptim, programele vor trebui a fi incarcate în fiecare automat și executate independent de desktop.

Data fiind această capacitate de separare a programelor utilizatorului are posibilitatea de a determina care decizii de control vor fi luate de desktop și care de către PLC. Această facilitate poate desolicita procesorul calculatorul urmand ca acesta sa efectueze operații de supervizare cum ar fi împrospătarea ecranului, generarea de rapoarte sau monitorizarea performantelor sistemului.

Astfel a aparut si a doua varianta (care este si cea mai des utilizata) aceasta constand in crearea unor algoritmi de control in limbajul C ce au posibilitatea de a fie executati direct in memoria automatului programabil.

Programele urmeaza a fi construite și compilate în C sau într-un alt mediu de prgramare, cu ajutorul unui limbaj de programare pus la dispoziție de producătorul PLC pe un desktop, dupa care, programul executabil va fi convertit în formatul de fișier acceptat de PLC, iar apoi va fi incarcat în memoria de tip FLASH EPROM a PLC-ului, de unde poate rula in mod independent. Un dezavantaj prezent la aceasta varianta este constituit de limitarea datelor programului și a dimensiunii codului.

O alta solutie aplicata mai este și construcția a două module software ce rulează simultan, unul în calculator și celalalt î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.

Definirea problemei

si a componentelor de automatizare

Ideea acestui proiect isi are originea din pasiunea mea de a rezolva probleme si de a lucra cu PLC-uri si din experienta dobandita in practica dintre anii 3 si 4 de studiu cand am realizat practica in industrie si am avut proiecte de imbunatatire a unor procese industriale. Proiectele respective vizau modificarea anumitor parti ale programelor din PLC unei anumite statii. Insa am dorit, cu ocazia acestui proiect, sa realizez de la inceput software-ul de control al unei celule.

Proiectul isi propune realizarea automatizarii unei celule de asamblare robotizata pentru strangerea a 8 suruburi, cu revenire pe suruburile (1 si 2), a doua componente ale unui motor termic. Automatizarea presupune realizarea programelor pentru PLC-ul liniei cu ajutorul programului Indralogic specific automatelor programabile Bosch-Rexroth. Acesta trebuie sa interactioneze cu programele atat al bratului robotic responsabil de insurubarea propriu-zisa cat si al camerei, aceasta fiind utilizata pentru ajustarea traiectoriei robotului in cazul in care componentele nu sunt prezentate in pozitiile predefinite, astfel incat sa respecte fluenta procesului si sa respecte cele mai stricte standarde de productie si de siguranta.

Ca finalitate practica, mi-am propus realizarea unei solutii complete de automatizare functionala pe simularea procesului creata de mine. Pornind de la programul bratului robotic si al camerei, intelegand firul procesului, programul incarcat pe autmatul programabil are rolul de a controla intrarile si iesirile venite de la elementele de executie pentru a duce la bun sfarsit asamblarea motorului. Simularea are rolul de a verifica solutia propusa. Deasemenea, solutia propusa trebuie sa respecte standardele industriale gestionand toatele elementele procesului (exemplu: Siguranta, Alarme, Proces propriu-zis).

Descrierea task-urilor

automatului programabil

3.1 Descrierea procesului

Procesul este unul industrial, simulat dupa fabrica Dacia de la Mioveni. Astfel, un motor termic se deplaseaza pe conveyor spre celula de asamblare, ce este dotata cu doua bariere luminoase ale caror functii vor fi discutate pe parcursul lucrarii. Motorul intra in zona de proximitate a celulei de asamblare, in momentul in care trece prin dreptul senzorului s1 ce face ca bariera luminoasa de la intrare sa se inchida.

Motorul incepe sa intre in incinta celulei de asamblare, iar cand trece prin dreptul senzorului poz1, se activeaza opritorul ce ii va opri inaintarea odata ajuns in pozitia optima stabilita pentru efectuarea lucrarilor pentru care este destianta celula. Cand ajunge in dreptul opritorului, se activeaza senzorul poz2 care opreste conveyorul si activeaza intereturul, asftel blocand mtorul.

In continuare este citit RFID-ul de catre camera pentru stabilirea diversitatii mtorului. Diversitatile pot fi de 3 tipuri diferite, in functie de modelul motorului, acestea difera foarte putin din punctul de vedere al sctructurii si anume al amplasarii suruburilor. Dupa ce a fost luata la cunostiinta diversitatea, si anume a fost determinat modelul motorului, incepe partea de comunicare dintre PLC si bratul robotic , si anume insurubarea propriu-zisa. Insurubarea poate fi de 2 feluri, asistata de camera sau neasistata de camera, diferenta facandu-se la modul in care se efectueza citirea coordonatelor: daca este folosita camera, coordonatele suruburilor se iau in momentul insurubarii iar daca nu este folosita aceste coordinate se iau din memorie. Bratul robotic are 3 pozitii predefinite si anume: deasupra surubului ridicat, deasupra surubului dupa ce a fost insurubat, si o pozitie neutra ce serveste efectuarii diverselor operatii de mentenanta care nu necesita actiunea bratului.

In caz de eroare sau abatere de la cursul normal al actiunilor, este semnalat operatorul celulei, care opreste procesul si stabileste daca problema poate fi remediat sau motorul cu pricina este compromis. Acesta are optiunea de a acorda cartonas galben (in cazul in care problema poate fi remediat), actiune ce intrerupe fluxul procesului si trece bratul robotic in pozitia neutra pentru a pregati locul pentru venirea echipei de mentenanta. O alta optiune este aceea de a acorda cartonas rosu (in cazul in care nu se poate remedia problema) , actiune ce va reseta procesul si ii va permite motorului sa fie evacuat din celula pentru a fi scos de pe linia de productie.

Dupa terminarea cu succes a operatiunii de insurubare, a doua bariera luminoasa este dezactivata la fel ca si opritorul si intereturul, astfel permitandu-i motrului sa fie dus catre urmatoarea parte a procesului. Dupa pariera luminoasa mai este un senzor poz3 care va fi activat odata ce acesta nu mai detecteaza nimic inseamna ca motorul a trecut de el si bariera luminoasa va putea fi aprinsa din nou.

3.2 Realizarea Aplicatiei

Pentru realizarea programului automatului programabil s-a utilizat mediul de programare Indralogic, specific automatelor programabile Bosch-Rexroth. Limbajul foolosit este SFC(Sequential Function Charts) si ST(structured text). Aplicația este împărțită în patru task-uri, fiecare funcționând ciclic și independent de celalat, deservind unui scop bine stabilit. Aceste 4 task-uri sunt:

Programul principal – este task-ul ce coordoneaza miscarea motorului de-a lungul liniei de productie acesta interactioneaza atat cu bratul robotic cat si cu camera, este backbone-ul aplicatiei

Miscare – acest task este responsabil cu miscarea elementelor grafice din cadrul simularii

Securitate – acest task este responsabil de intreruperea imediata a procesului si facilizarea accesului in cadrul celulei de autmatizare in eventualitatea incalcarii regulilor de siguranta

Alarme – acest task realizeaza atentionarea operatorului in cazul in care un element al procesului nu decurge conform standardelor

3.2.1 Programul Principal

Numit PLC_PRG (in interiorul aplicatiei) este task-ul in jurul caruia este construita aplicatia, avand functionalitatea de baza a automatului programabil si anume aducerea motorului in celula interactionarea cu camera si bratul robotic si apoi transportarea motorului catre postul urmator. Task-ul este format din 160 de stari si 159 de tranzitii. Intrucat acesta este task-ul central, programul Indralogic nu permite ca acest task sa fie redenumit. Programul principal este impartit in 3 parti, diferentiate de rolul din cadrul programului.

Prima parte a programului si anume cea responsabila cu aducerea motorului termic in cadrul celulei de asamblare este liniara,

Fig 3.1 Aducerea motorului in cadrul celulei de asamblare

Asa cum poate fi observat din Figura 3.1 dupa initializarea programului in “Pasul 6” se verifica astfel incat conveyorul sa fie pornit. Tranzitia se efectueaza atunci cand motorul ajunge in dreptul senzorului “s1”. Ceea ce duce programul in “Pasul 2” unde se dezactiveaza prima bariera luminoasa. Atunci cand motorul activeaza senzorul “poz1”, se trece la “Pasul 3” acolo unde se activeaza opritorul, delimitand astfel zoona pan aunde este lasat motorul sa inainteze in celula. Cand se trece si prin dreptul senzorului “poz2” se intra in “Pasul 4” in care se opreste conveyorul, se activeaza intereturul(astfel blocand motorul) se activeaza din nou bariera luminoasa si se asteapta semnalul de la camera pentru determinarea diversitatii motorului si astfel inceperea procesului insurubarii prorpiu zise.

In oglinda este realizata si a 3-a parte care se ocupa de transportul motorului cu suruburile insurubate catre urmatrul post de lucru.

Fig 3.2 Transportul motorului catre postul urmator

Dupa cum se poate observa din Figura 3.2, daca motorul este pregatit petru urmatoarea etapa a procesului programul intra in “Pasul 8” in care motorul este deblocat, prin retragerea opritorului si al intereturului. In continuare, fara o conditie suplimentara, se ajunge in “Pasul 9” unde se porneste conveyorul si se dezactiveaza a 2-a bariera luminoasa. Desi pasii 8 si 9 ar putea fi grupati intr-un singur pas, am dorit sa evidentiez faptul ca desi in simulare aceste actiuni se fac una dupa cealalta aproape instantaneu, in practica cele doua etape ar trebui tratate ca etape diferite deoarece retragerea intereturului si a opritorului poate dura un interval mic de timp si nu ar fi recomandata pornirea conveyorului cat timp cele doua elemente nu sunt complet retrase. In continuare, daca motorul nu mai este detectat de senzorii “poz2” si “poz3”,inseamna ca motorul a parasit postul astfel ca se reactiveaza bariera luminoasa si se reia un nou ciclu.

Partea a 2-a si anume operatia de insurubare propriu zisa are loc intre cele 2 parti expuse anterior, continuand de la primirea diversitatii si sfarsindu-se cand semnalul “motor_ok” este activat. Pentru a continua expunerea lucrarii ar trebui explicate tipurile de actiuni ce se pot desfasura in cadrul unei stari. Actiunile pot fi de intrare, de iesire si actiuni ciclice. Cele de intrare/iesire se efectueaza o singura data la intrarea/iesirea din starea respectiva, iar cele ciclice se efectueaza, dupa cum le zice denumirea, in mod ciclic pana cand se intrunesc contitiile tranzitiei ce va duce programul in starea urmatoare.

Revenind la expunerea partii de insurubare, am folosit in egala masura atat SFC cat si ST deoarece simularea bratului robotic trebuie facuta pe masura ce etapele task-ului sunt indeplinite, astfel ca unele stari au si actiuni ciclice cu ST ce se desfasoara in cadrul lor.

Actiunile de insurubare si sunt impartite in 3 actiuni: deplasarea bratului deasupra surubului, coborarea pentru insurubarea surubului si ridicarea bratului robotic urmand sa se deplaseze la urmatorul surub pentru a fi insurubat. Aceste 3 actiuni se efectueaza ciclic pentru fiecare din cele 8 suruburi. Este de mentionat ca pentru diversitatile 2 si 3 suruburile 4 si 8 sunt amplasate astfel incat nu pot fi insurubate de catre o surubelnita normala, astfel ca insurubarea se face cu ajutrul unei surublenite cu cot.

Fig 3.3 SFC pentru aducerea bratului deasupra surubului

Aceasta stare vine in continuarea primei parti, dupa ce s-a aflat tipul diversitatii, robotul este adus deasupra surubului dupa care este coborat pana cand surubelnita face contact cu acesta. Cand surubelnita a facut contact cu surubul motorul acesteia este activat si programul trece in urmatoarea stare si anume insurubarea surubului.

In eventualitatea aparitiei unei probleme, proogramul intra pe firul logic adiacent, in care este consemnat stagiul unde a avut loc defectiunea (spre exemplu in cazul de mai sus este vorba de “problema la bratul robotic in drumul spre primul surub”). Mai pot sa existe si probleme la insurubarea propriu zisa si probleme la ridicarea bratului robotic. Aceste abateri de la cursul normal al procesului declanseaza alarma aferenta stagiului in care a avut loc defectiunea. Cand operatorul observa problema intrerupe procesul si merge sa evalueze situatia sau cheama o echipa specialista. Dupa care este acordat un cartonas in functie de defectiune (galben daca mai poate fi rezolvata sau rosu daca nu mai poate fi reparata) si in functie de cartonasul acordat se iau urmatoarele aciuni. Daca cartonasul este galben, programul intra in “Pasul 43” care blocheaza programul pana cand problema este remediata. Dupa remedierea problemei, se apasa butonul de start de pe HMI si procesul se reia de unde a fost intrarupt. Daca a fost acordat cartonasul rosu, bratul robotic se retrage in pozitia initiala iar motorul este evacuat de pe linia de productie. Aceasta procedura in caz de eroare va fi prezenta la fiecare din cele 3 parti aferente fiecarei dintre cele 10 insurubari.

Am precizat anterior ca in cadrul acestei etape, mai precis in cadrul “Pasului 20”, are loc controlul bratului robotic simulat in Indralogic. Triunghiul din coltul din derapta sus, semnifica faptul ca in cadrul “Pasului 20” are loc o actiune ciclica iar E-ul situat in coltul din dreapta jos ofera informatii asupra faptului ca la intrarea in aceasta stare are loc o actiune. Actiunea de intrare modifica semnalul comform caruia robotul este pozitionat in pozitia initiala. (surubelnita_poz_o:=0;)

Fig 3.4 Actiunea ciclica:Miscarea bratului robotic

In continuare, in Fig 3.4 este prezentata actiunea ciclica a “Pasului 20” prin care bratul robotic este adus deasupra primului surub, prima data modificandu-si pozitia pe axa X pana ajunge in dreptul coordonatelor precizate, dupa care modificandu-si pozitia pe axa Y, pana ajunge in contact cu surubul. Dupa ce contactul cu surubul a fost facut si porneste motorul surubelnitei si urmeaza a 2-a actiune si anume insurubarea.

Fig 3.5 Insurubarea

Dupa ce s-a pornit motorul surubelnitei, actiune ciclica din “Pasul 5” insurubeaza surubul pana la coordonatele precizate pe axa Y, avand acelasi mecanism in caz de eroare cu alarmele aferente precul si la actiunea anterioara. Odata ce s-a terminat de insurubat, semnalul surub_1_gata este trecut pe 1, iar motorul surubelnitei este oprit. Astfel se face trecerea catre ultima actiune aferenta primului surub si anume ridicarea bratului robotic.

La fel ca la actiunile anterioare si ridicarea bratului este prevazuta cu procedura in caz de eroare. Aceasta actiune modifica pozitia bratului robotic doar pe axa Y, ridicandu-l pan ajunge la coordonata Y initiala.

Fig 3.6 Ridicarea bratului robotic

O exceptie de la procedura prezentata mai sus o prezinta pasii 4 si 8 care, pentru diversitatie 2 si 3 utilizeaza o surubelnita cu cot intrucat suruburile 4 si 8 sunt situate intr-un loc inaccesibil unei surubelnite normale. Astfel ca programul de simularea (actiunile ciclice ale pasilor 4 si 8) sunt diferentiate in functie de diversitatea citita de camera, coordonatele schimbandu-se in functie de surubelnita folosita.

3.2.2 Miscare

Acest task este folosit exclusiv pentru simularea grafica a procesului in cadrul Indralogic. Exceptand simularea miscarii bratului robotic care a fost descrisa mai sus, task-ul Miscare, face legatura dintre automatul programabil din cadrul PLC_PRG si pozitia motorului din cadrul simularii, astfel deciziile din task-ul principal putand fi luate atunci cand este simulata activarea unui senzor. Aceast fapt este posibil prin atribuirea unei coordonate fiecarui senzor. Atunci cand coordnatele motorului aflat in miscare coincid cu coordonatele senzorului respectiv, senzrul este activat, iar task-ul PLC_PRG interpreteaza semnalul ca pe un semnal venit de la un senzor real.

Fig 3.7 Task-ul Miscare

Task-ul propriu zis este unul liniar, in format STF alcatuit din 3 stari si 3 tranzitii fara nici o conditie, deoarece accentul cade mai mult pe modalitatea de programare Structured Text aferenta celei de-a treia stari. Prima stare este starea initiala, urmata de o stare ce adauga o intarziere de 300 de milisecunde pentru ca actiunile din cadrul simularii sa se desfasoare la o viteza acceptabila pentru distingerea detaliilor. Ultima stare contine defapt toate instructiunile legate de miscare ce se executa o singura data per rularea task-ului la intrarea in starea respectiva. Variabila pozitie_mot din partea e sus a imaginii inregistreaza coordonatele motorului. Este o variabila locala vizibila doar in task-ul Miscare. Aceasta ete incrementata de fiecare data cand se executa task-ul, iar cum se executa ciclic pe toata durata programului se obtine miscarea.

Figura 3.8 arata procedura executata la fiecare intrare in starea 3 pe tot parcursul programului

Fig 3.8 Actiune Miscare

Asa cum se poate observa din figura actiunea are 2 parti delimitate de cele doua structuri de selectie IF-ELSE. In prima structura daca conveyorul este pornit (m_banda = 1) acesta incrementeaza cu 10 pozitia motorului (pozitie_mot:= pozitie_mot+10) pe banda transportoare. In continuare sunt verificate conditiile de activare si dezactivare a celor 4 senzori din cadrul celulei de autoamtizare. Dimensiunea motorului este cunoscuta, deci in cnsecinta se poate calcula coordonata la care motorul intra in aria senzorului si cea in care motorul paraseste aria fiecarui senzor.

A doua structura de selectie are loc la coordonata cea mai mare (760) atunci cand motorul paraseste postul curent si se indreapta catre urmatorul post de lucru. Toate variabilele sunt resetate si astfel se poate relua un nou ciclu cu un motor venit de la postul precedent. Se poate observa o privire de ansamblu asupra tuturor variabilelor ce iau parte la buna functionare a procesului.

Intrucat a fost explicat back-end-ul thread-ului Miscare, urmatoarea parte a prezentarii acestui thread se va concentra pe front-end-ul threadului, expunand animatiile grafice care compun simularea procesului. Animatiile grafice sunt cuprinse in tab-ul Visualisations in cadrul Indralogic-ului iar cele aferente acestui proiect sunt in numar de doua: Imaginea de ansamblu asupra procesului si HMI-ul (Human Machine Interface). Fiecare element grafic este conectata la restul programului fiindu-i atribuita minim o variabila, astfel motorul este mutat prin incrementarea variabilei pozitie_mot, pe cand cele doua surubelnite, au atribuite cate o variabila pentru fiecare directie de miscare( axa X, si axa Y).

In figura urmatoare se poate observa o privire de ansamblu asupra procesului simulat.

Fig 3.9 Privire de Ansamblu asupra Procesului

Procesul este vazut din doua puncte de vedere si anume longitudinala si de deasupra, astfel conferindu-i utilizatorului o imagine mai completa asupra insurubarii si a elementelor ce compun instalatia si actioneaza in vederea realizarii obiectivuluisi anume insurubarii a 8 suruburi cu revenire pe suruburile 1 si 2.

In prima simulare grafica (cea longitudinala), accentul cade pe miscarea bratului robotic pentru insurubarea celor 8 suruburi. Se pot observa cele doua surubelnite din componenta bratului robotic si motorul cu cele 8 suruburi neinsurubate. Motoarele din cele doua puncte de vedere se misca sincron astfel ca atunci cand motorul din vederea de deasupra este blocat in pozitia optima pentru inceperea insurubarilor, si motorul din vederea longitudinala va fi situat in aceeasi pozitie. Bratul robotic se misca conform programului descris din PLC_PRG, insuruband fiecare surub in parte utilizand a doua surubelnita (cea cu cot) pentru suruburile 4 si 8 din diversitatile 2 si 3. Fiecare surubelnita este reprezentata cu culoarea rosie atunci cand motorul acesteia este oprit, si cu culoare verde pentru a sugera ca motorul este activat. La fel si suruburile sunt reprezentate cu culoarea rosie cand nu au fost pe deplin insurubate, iar cand aceasta actiune a avut loc culoare lor se schimba din rosu in verde.

Valoarea pozitie_mot, adica a coordonatei pozitiei motorului este afisata in dreapta sus a imaginii. Butoanele din stanga sunt stimulii externi ce nu pot fi simulati cu ajutorul indralogicului, si anume diversitatile citite de camera si presupusele brese de securitate ce ar putea aparea si despre care voi vorbi la prezentarea thread-ului de securitate.

In cadrul vederii de sus, accentul care pe incinta celulei de asamblare si pe transportul motorului spre si de la celula, precum si celelalte subsisteme ce actioneaza in paralel cu procesul descris pana acum.

Dintr-o privire se poate observa incinta celulei de asamblare simulata cu culoarea rosie deoarece accesul este strict interzis in timp ce procestul de insurubare este in desfasurare. Latura marcata cu o linie rosie dubla este poarta de acces catre incinta, care este preprezentata cu culoarea rosie atunci cand este incuiata si cu culoarea verde atunci cand este descuiata. Aceasta poarta poate fi descuiata doar in anumite circumstante foarte bine definite despre care voi vorbi la prezentarea task-ului e securitate, deoarece accesul neautorizat prezinta un risc foarte ridicat de accidentare. Figurate deasupra incintei sunt cele 8 alarme aferente partii de proces a fiecarui surub, acestea pornesc in cazul unei defectiuni a oricarei parti a procesului ce include miscarea bratului robotic si pot fi oprite doar de catre operatorul celulei de asamblare de la HMI. Imaginea suruburilor din vederea longitudinala este completate de asezarea lor in cadrul motorului ce poate fi observata in vederea de sus. Coltul din dreapta jos al motorului este placuta de pe care este citita diversitatea la inceputul celei de-a doua parti a procesului. Aceasta este reprezentata cu rosu cand nu a fost citita diversitatea si cu verde cand a fost citita.

Cele doua butoane din interiorul celulei de asamblare, sunt reprezentari ale butoanelor ciuperca ce opresc procesul in orice stadiu s-ar afla. Aceste butoane trebuie apasate doar in cazuri de urgenta ele fiind amplasate aproape de zonele unde se pot desfasura operatii de mentenanta si/sau curatare. Cele doua bariere luminoase sunt reprezentate de liniile continue perpendiculare pe banda transportoare. Acestea sunt normal deschise de culoarea verde, iar atunci cand motorul trece prin dreptul lor sunt inchise (culoare rosie) pentru a nu declansa vreo alarma. Punctele situate de-o parte si de alta a benzii transportoare sunt perechile senzor-oglinda, ce detecteaza daca motorul este situat in dreptul lor, daca motorul est edetectat reprezentarea senzorului din simularea curenta isi schimba culoarea din rosu in verde. Ultimele elemente de pe simulare sunt opritorul, ce blocheaza motorul din a inainta, si intereturul ce blocheaza motorul din a se mai misca din pozitia optima.

Urmatoarea animatie grafica prezentata este cea a HMI-ului, si anume locul e unde operatorul interactioneaza cu procesul, fara oprirea neaparata a acestuia, si de unde poate culege informatii despre proces cum ar fi starea acestuia sau starea fiecarui surub.

Fig 3.10 Reprezentarea grafica a HMI-ului

In cadrul Figurii 3.10 se pot observa instrumentele cu care operatorul actioneaza asupra procesului, si anume elementele HMI-ului. Pe ecranul HMI-ului, se pot observa campurile aferente verificarii starii fiecarui surub. Alaturi de denumirea si numarul surubului, exista un element grafic care este rosu initial, pe masura ce sunt insurubate suruburile, devine verde, la cele care au fost insurubate cu succes.

Dedesubtul ecranului, sunt butoanele disponibile operatorului. HMI-ul este dotat cu un buton ciuperca de avarie ce opreste procesul in caz de urgenta. Langa se afla butnul de deschidere/inchidere a usii celulei de asamblare. Acest buton nu deschide fizic usa, doar permite personalului instruit sa o deschida mai facil in caz de nevie. Usa poate fi deschisa si manual insa doar in cazul in care se constata o defectiune la butonul de deschidere a usii. Dedesubt este butonul de “alarma” care, opreste alarma pornita in cazul unei defectiuni. Prin acest buton se asigura ca operatorul a luat la cunostiinta situatia in care se afla echipamentul de proces si ia masurile de rigoare. Cartonasele rosu si galben ale caror functii au fost detaliate in cadrul descrierii procesului sunt acordate apasand pe butoanele aferente.

In cazul unei probleme legate de bratul robotic, operatorul poate opri procesul apasant pe butonul problema. Dupa aceasta, acorda un cartonas si in functie de cartonasul acordat, bratul robotic se retrage si motorul este evacuat din celula de asamblare, sau procesul ramane oprit si intervine operatorul sau o echipa de mententanta pentru rezolvarea problemei, dupa care se apasa butonul start pentru reluarea procesului.

3.2.3 Securitate

Cum mediul industrial accidentele pot avea urmari deosebit de grave nu numia asupra echipamentului cat mai ales asupra pesonalului uman, thread-ul de Securitate este, probabil, cel mai important thread intrucat previne aceste accidente ce pot avea loc in cazul unei operari neglijente a instalatiei de proces.

Thread-ul de securitate functioneaza in paralel cu celelalte doua thread-uri descrise mai sus, acesta intrerupand procesul daca nu este indeplinita o conditie de siguranta.

Fig 3.11 Thread-ul de Securitate

Conditiile de siguranta din cadrul thread-ului de securitate sunt legate de cele doua bariere luminase si de usa pentru accesul in celula de asamblare. Daca barierele luminoase au fost incalcate fara ca programul sa se afle in starile in care este normal ca barierele sa fie dezactivate, inseamna ca exista o persoana sau un obiect ce este pe punctul de a intra in zona bratului robotic astfel ca procesul trebuie oprit pentru evitarea oricarui risc de accidentare sau de defectare a aparatelor.

De asemenea, orice deschidere neautorizata a usii in timp ce procesul este pornit si functional, va rezulta in blocarea conveyorului sau a bratului robotic

Threadu-ul are 2 fire de executie pe care poate intra procedura, afernte celor doua bariere. In pasii 2 si 3 actiunile e intrare sunt oprirea conveyrului m_banda:=0; si deschiderea usii celulei de asamblare pentru ca o echipa sa poata interveni pentru a verifica ce a provocat nerespectarea regulii de securitate desch_usa:=1;. Usa se inchide de la HMI

3.2.4 Alarme

Un task foarte important este si cel de alarme, am ales sa impart sistemul de alarme in 8 parti aferente fiecarui surub, astfel ca daca apare o problema sau defectiune in functionarea bratului robotic in timp ce acesta se afla intr-una din cele 3 actiuni de insurubare a unu surub, alarma respectivului surub se declanseaza, pornind atentionarea luminoasa din cadrul simularii grafice si o atentionare sonora, mai precis o goarna virtuala (exista in cadrul programului variabila implementata pentru goarna)

Fig 3.12 Nu sunt sigur daca figura asta este ok eu am vrut un ansamblu al task-ului

In figura 3.12 poate fi observat task-ul de alarme intr-o viziune de ansamblu. Exista mai multe structuri adiacente pe care programul poate sa le acceseze in functie de momentul cand a avut loc defectiunea la bratul robotic sau la unul din suruburi. Astfel ca daca apare o defectiune in timp ce un surub era insurubat (surub_stricatx = 1 cu x de la 1 la 8 in functie de numarul surubului) sau in timp ce bratul robotic se deplaseaza de la un surub la altul (prob_robot_x cu x de la 1 la 8 in functie de numarul surubului), este activata alarma vizuala precum si goarna.

Alarma vizuala este reprezentata prin variabilele declarate local (alarma_surub_stricatx cu x de la 1 la 8 in functie de numarul surubului) iar goarna este deasemenea de catre un BOOLean, acestea fiind activate in prima stare din fiecare structura. Pentru trecerea in a 2-a stare trebuie ca operatorul sa apese pe butonul de oprire alarma de pe HMI. Aceasta tranzitie este cruciala deoarece reprezinta faptu lca operatorul a fost alertat de defectiunea aparuta in sistem si a luat masurile ce se impun. In plus sistemul creat este unul eficient deoarece odata aparuta o alarma, operatoul identifica mult mai usor sursa defectinuii (vazand alarma luminoasa carui numar ii este atribuita) si se poate concentra mai mult pe rezolvarea problemei sau luarea masurilor ce se impun intr-o astfel de situatie. Dupa apasarea butonului goarna si alarma sunt dezactivate programul reveind in starea de asteptare a noilor defectiuni.

Identificarea componentelor

pentru asamblare cu ajutorul camerei

Programul bratului robotic este adaptat astfel incat sa functioneze atat cu ajutorul camerei cat si fara aceasta. Daca se opteaza pentru folosirea camerei aceasta joaca un rol foarte important in orientarea robotului si ghidarea acestuia spre cele 8 suruburi. Cordonatele suruburilor sunt mai precise vazute prin camera astfel ca robotul nu trebuie sa acceseze ultimele coordonate ale suruburilor stocate in memoria sa.

Camera este de tip Cognex, iar software-ul utilizat pentru operatiile asupra ei (de exemplu calibrare, testare, etc) este InSightExplorer. Camera este conectata la un controller(PLC?) iar conexiunea cu calculatorul se realizeaza prin Ethernet, totul fiind alimentat cu o tensiune de 24 V.

Insa, pentru ca sa funtioneze parametri optimi, camera trebuie calibrata si testata. Calibrarea, testarea si la nevoie invatarea sunt seturi de proceduri care sunt efectuate obligatoriu la instalarea elementelor de proces si periodic in timpul operatiilr de mentenanta conform normelor de siguranta

Procedura primordiala pentru desfasurarea lucrului cu ajutorul camerei este conectarea la camera. Aceasta este asigurata de rutina ConnectToInSight. Acesta rutina va fi apelata in cadrul tuturor procedurilor si al rutinelor prezentate ulterior ce necesita conectarea la camera.

Fig 4.1 Diagrama Procedurii ConnectToInSight

Procedura incepe prin crearea unui socket de comunicatie numit “ComSocket”. Tipul protocolului de conunicatie acceptata de acest socket este TCP/IP care asigura stabilirea unei conexiuni inainte de inceperea transmisiei de date, protocolul UDP/IP nefiind acceptat. Dupa ce a fost creat socketul, acesta se conecteaza la un calculator aflat la distanta de unde sunt introduse datele. Putem observa in diagrama exista trei factori decizionali, prin care utilizatorul primeste mesajele de la camera prin care sunt cerute userul, Parola, si mesajul final. Daca vreunul din aceste trei mesaje nu apare, va aparea o eroare de conectare specifica fiecarei etape.

De asemenea o rutina cruciala pe care se for baza marea majritate a rutinelor ulterioare este si CheckStatus. Aceasta rutina verifica faptul ca in urma unei comenzi de achizitie a unei imagini a fost primita o imagine, altfel aparand un mesaj de eroare

Odata ce a fost capturata cu succes o imagine de interes este doar o portiune din ea sau mai precis anumite puncte care sunt foarte importante de identificat pentru a sti daca se monitorizeaza obiectul corect. Aceste puncte sunt tinute intr-un spreadsheet din aplicatia de vedere si sunt extrase de cate orieste nevoie de comparatia lor cu cele din imagine capturata. Procedura ce se ocupa cu acest task se numeste GetVisionData. Diagrama aferenta este prezentata in Fig 4.2.

Fig 4.2 Diagrama Procedura GetVisionData

In procedura expusa prima data se declara variabilele in care vor fi stocate valorile din celula excel data ca parametru. Urmand a se initializa valorile intregi de care ne vom folosi la sfarsitul procedurii. Se verifica statusul socket-ului si anume daca functioneaza conexiunea la camera, in caz contrar afisandu-se un mesaj de eroare. Se preiau valorile ce prezinta interes din cadrul imaginii dupa ce se captureaza o imagine si se verifica folosind CheckStatus. Se verifica daca variabila ce salveaza erorile este nula, daca nu este se va afisa un mesaj corespunzator. In continuare sunt citite datele din imagine si sunt parsate pentru a fi alese cele relevante, care sunt salvate in variabilele declarate la inceputul rutinei. Se face conversia in valoare numerica si se salveaza in variabilele initializate. Se calculeaza scorul total al valorilor si se compara cu scorul admisibil. Daca este mai mare, obiectul ete recunoscut, daca nu se afiseaza mesajul de eroare corespunzator.

Deasemenea un aspect important precalibrare este si incarcarea unui “job” in memoria camerei. Incarcarea unui “job” este un element important deoarece acesta face partea de inspectie si recunoastere a caracteristicilor de pe motor (mai precis ofera informatii legate de pozitia si orientarea motorului fata de un sistem de coordonate de referinta, necesare corectiei traiectoriei robotului). De-a lungul programului vom folosi doar doua job-uri si anume “Calib9dot.job” care va fi incarcat in momentul calibrarii uc ajutorul sablonului cu 9 puncte si “JobDefault.job” care va fi incarcat in momentul executarii proramului in cadrul procesului de asamblare.

Fig 4.3 Diagrama Procedurii LoadJob

Aceasta procedura presupune incarcarea unui “job” pe camera. Initial se citeste job-ul GF insemnand get file. Dupa ce este primit mesajul de la calculator, se verifica starea camerei, daca este pornita sau oprita. Daca este portina se incearca trecerea acesteia in modul offline cu ajutrul comenzii so0. Aaca apare o eroare se va afisa mesajul coresupnzator si anume ca, nu a putut fi trecuta camera pe modul offline.

Dupa ce s-a reusit operatiunea se continua in cincarcarea “job”-ului se trimite comanda LF(load file) catre camera si este evaluat raspunsul. Prin care camera comunica daca operatia a fost un succes sau nu. Daca a fost, se cntinua prin trecerea camerei in mdul online si astfel “jb”ul este incarcat.

4.1 Calibrare

Inainte sa fie calibrate robotul cu camera trebuie asigurat faptul ca insasi camera este corect calibrata pentru a garanta fidelitatea citirilor urmatoare. Pentru aceasta functinalitate se foloseste procedura CalibPattern a carei diagrama este prezentata in Figura 4.3

Fig 4.3 Diagrama Procedura CalibPattern

Instructiunea SingArea defineste modul cum robotul se misca in apropierea punctelor de singularitate, acestea fiind evitate prin comutarea miscarii robotului din miscare liniara (interpolata in spatiul cartezian) in miscare cu interpolare in spatiul articulatiilor. In continuare utilizatorul este atentionat ca robotul se va misca in afara planului vederii pentru a se putea desfasura calibrarea camerei dupa sablon. Odata ce utilizatorul a luat la cunostiinta, apasa butonul ok si este informat sa plaseze sablonul cu 9 puncte dupa care se face calibrarea, in fata camerei.

Fig. 4.4 Vederea sablonului de calibrare de catre camera in ConnectToInSight

Odata ce a fost pozitionat corect sablonul, se incepe o achizitie de imagine, dupa care se verifica statusul achizitiei conform procedurii mai sus prezentate. Utilizatorul este intrebat daca sablonul este complet vizibil si i se prezinta 3 variante de raspuns. Daca apasa pe “Da”, se trece la rutina urmatoare, daca apasa “Refresh” se mai face o achizitie de imagine, si daca se apasa “Abort” se va afisa un mesaj de informare dupa care se va iesi din procedura.

Cea mai importanta si cea mai complexa rutina de calibrare este insa calibrarea camerei in concordanta cu robotul. Iar aceast rol de a realiza calibrarea Camera-Robot ii este atribuit unei rutine numinta RVCalib.

Dupa cum se poate observa si in Fig 4.5, procedura RVCalib este foarte complexa aceasta ingloband majoritatea procedurilor care au fost prezentate de-a lungul acestui capitol. Astfel ca aceasta incepe prin chestia aia de3 nu o inteleg eu \wrist cu evitarea punctelor singualre si prin setarea vitezei bratului robotic la viteza de test. Utilizatorul este atentionat ca bratul robotic se ba deplasa in punctul de rebuclaj, care este acel punct unde robotul asteapta urmatorul motor. Dupa deplasarea aparatului, se apeleaza functia ConnectToInSight pentru conectarea la camera. In cazul aparitiei unei erori, utilizatorul este rugat sa precizeze urmatarea actiune care poate fi de incetare a procesului si deconectare de la camera sau de reincercare.

Fig 4.5 Diagram Procedurii RVCalib

Daca conectarea s-a realizat cu succes, se incarca “job”-ul "Calib9dot.job" cu functia LoadJob pentru a pregati camera de calibrarea cu ajutorul sablonului cu 9 puncte. Ca si la functia precedenta in caz de eroare utilizatorul are aceleasi 2 posibilitati. Dupa incarcarea jobului se apelea functia CalibPattern, si se va pozitiona sablonul in dreptul camerei. Se va achizitiona o imagine si va fi verificata cu functia CheckStatus in caz de eroare existat posibilitatile deja prezentate. Pozitia sablnului este obtinuta dupa care este salvata in fisierul excel cu ajutorul functiei GetVisionData. Coordonatele importante sunt salvate in cadrul programului in variabilele tVisionPattern.trans.x, tVisionPattern.trans.y, tVisionPattern.rot ce reprezinta pozitia sablonului pe cele 2 axe x si y precum si gradul de inclinare al acestuia fata de camera. Dupa ce a fost stabilita pozitia sablonului sunt calcualte si pozitiile celor noua puncte de pe acesta cu ajutorul aceleiasi functii insa acestea vor fi salvate in celulele urmatoare GetVisionData("B"+ValToStr(203+i)). Aceste puncte sunt calcualte intr-o bucla repetitiva for fiecare ciclu reprezentand achizitia celor 3 cordonate aferente fiecarui punct. Aceste coordonate sunt salvate in vectorii variabilelor tVisionCalDot{i}.trans.x tVisionCalDot{i}.trans.y tVisionCalDot{i}.rot.

Calibrarea propriu zisa se realizeaza dupa calcularea tuturor punctelor atunci cand are loc instructiunea: SetWobjVision CalibRobot, tVisionCalDot, nbCalPos, wobjCamera, \MaxError:=nMaxError, \MeanError:=nMeanError, nErrStatus care defineste un alt obiect de lucru asociat camerei. In continuare, robotul se va deplasa catre punctele de calibrare pentru a invata noile valori. Instructiunile wobjPattern:=wobjCamera; si wobjPattern.oframe:=tVisionPattern; definesc “ruta” pana la sablon, astfel ca prina instructiune focalizeaza camera pe planul sablonului urmand ca a 2-a instructiune sa localizeze pozitia sablonului propriu zis in respectivul plan. Se apeleaza din nou la o structura repetitiva de tip for pentru deplasarea robotului in dreptul fiecaruia din cele noua puncte. Dupa completarea structurii repetitive bratul robotic se va deplasa in pozitia de repli unde robotul este retras in momentul in care aplicatia nu se executa.

4.2 Testare

Dupa calibrarea camerei atat singura cat si calibrarea camera-robot, inainte de a incepe procesul, propriu-zis, elementele acestuia trebuiesc testate pentru a vedea daca calibrarea a fost realizata optim, sau daca au intervenit diferiti factori (precum miscarea camerei sau o eroare umana) care sa deregleze procesul. Rutina care testeaza calibrarea se numeste sugesti RVCalibTest iar in cazul în care robotul nu se poziționează deasupra punctelor de pe șablon, trebuie refăcută calibrarea Cameră-Robot și apoi executate rutinele TrainDiv1, TrainDiv2 și TrainDiv3 (rutine explicate ulteriori in cadrul subapitolului de invatare).

Fig 4.6 Diagrama rutina RVCalibTest

Primii pasi ai rutinei de testare a calibrarii sunt asemanatori cu cei din cadrul simplei rutine de calibrare. Dupa ce robotul a ajuns in punctul de rebuclaj, sunt apelate procedurile de conectare la camera dupa careeste incarcat job-ul, se plaseaza sablonul in fata camerei, se achzitioneaza imaginea, se plaseaza sablonul de calibrare in fata camerei, dupa care se obtine pozitia sablonului. Dupa ce coordonatele importante au fost salvate, se seteaza referinta ce defineste pozitia obiectului din imarine relativa la baza robotului, cu ajutorul instructiunilor wobjCurent:=wobjCamera ce seteaza camera ca obiect curent de lucru si wobjCurent.oframe: = tVisionObject; ce seteaza planul de lucru.

Dupa ce au fost efectuati toti acesti pasi robotul se va deplasa spre punctele de pe sablonul de calibrare intr-o bucla repetitiva. S deplaseaza la fiecare punct dupa care revine in pozitia de repli.

Nu in ultimul rand se efectueaza si testarea calibrarii de la punctul KM0 cu ambele surubelnite. Punctul KM0 este punctul de test folosit pentru a testa daca robotul si sculele de pe robot nu s-au miscat.

Fig 4.7 Diagrama Procedura TestCalibrareEM

In cadrul acestei proceduri se va testa calibrarea bratului robotic prin aducerea pe rand a ambelor surubelnita in anumite puncte predefinite si prin simularea insurubarilor. Astfel, prin instructiunea SingArea \Wrist se evita punctele de singularitate, si in continuare viteza robotului este setata ca viteza de test. Pe display este afisat mesajul ca robrul se va eplasa catre punctul de KM0 prima data cu surubelnita dreapta. Dupa aceea robotul este dus mai intai in punctul pKM0I_VA ce reprezinta punctul în care robotul se află deasupra punctului de KM0 pentru surubelnita dreapta dupa care este dus in punctul p_KM0I_V care este Punctul în care robotul se află cu șurubelnița dreapta în punctul de KM0 adica punctul destinatie. In continuare, se activeaza semnalele o1 pentru surubelnita 1 si o16 pentru testarea insurubarii la KM0. Dupa terminarea testarii robotul se deplaseaza din noou in punctul pKM0I_VA dupa care este mutat in punctul de repli.

In continuare urmeaza aceeasi procedura pentru testarea calibrarii surubelnitei cu cot, pentru aceasta insa existand anumite diferente, si anume activarea semnalului o2 in loc de o1 precum si adaugarea (si scaderea la terminarea testarii) unui offset de 100 axelor x si y. In final robotul isi reia pozitia in punctul de repli.

4.3 Invatare

Initial bratul robotic nu are in memoria sa nici un punct si nici o coordonata, deci trebuiesc invatate. Fiecare diversitate are propria rutina cand vine vorba despre invatarea coordonatelor punctelor celor 8 suruburi de pe mtorul termic, datorita micilor diferenta de structura dintr cele trei diversitati. Pentru diversitatea 2 si diversitatea 3 datorita faptului ca suruburile 4 si 8 nu pot fi insirubate cu o surubelnita normala (dreapta) locul acestora fiind imposibil de atins, cu un astfel de instrument se floseste o surubelnita cu cot ce va necesita mai multe miscari decat in mod normal.

Pentru invatarea locurilor suruburilor se va folosi rutina TrainDivx unde x poate lua valori de la 1 la 3 in concordanta cu diversitatea motorului caruia dorim sa-i invatam pozitiile suruburilor. Această rutină este folosită pentru a învăța punctele robot, ce definesc pozițiile șuruburilor relativ la modelul obiectului (motorului) recunoscut de cameră pentru diversitatea 1.

Fig 4.8 Diagrama rutina TrainDiv1

Se comută robotul în modul manual. Se aduce în post un motor din diversitatea 1 și se indexează, conveyorul se lasă pornit. Se învață punctele aferente acestei diversități în funcție de postul de lucru. Se execută rutina TrainDiv1. Aceasta rutina se aplica doar pentru diversitatea 1 si precum se poate observa din figura 4.8 incepe prin a-si seta parametrii ca si la calibrare si prin a se conecta la camera si a obtine o achizitie de imagine exact ca si la functiile prezentate anterior.

Ce este diferit ete ca de aceasta data nu se mai lucreaza cu sabloane asa ca informatia obtinuta prin procedura GetVisionData este cea a motorului dediversitate 1 si nu a sablonului. In continuare informatiile relvante sunt salvate in vatiabilele de memorie aferenta si se seteaza referinta ce defineste pozitia obiecului din imagine relativ la baza robotului. In continuare utilizatorul este anuntat ca bratul robotic se va deplasa catre fiecare surub dupa apasarea tastei ok de pe HMI. Procedura se termina cand tate suruburile au fost parcurse.

Diferenta dintre diversitate 1 si diversitatile 2 si 3 sunt evident variabilele in care sunt salvate punctele insa ca fir al fluxului procedurii deferentele constau in miscarile parcurse de robot in vederea invatarii punctelor suruburilor 4 si 8, care sunt mai multe dat fiind faptul ca locul este mia greu accesibil.

Ca exemplificare se vr arata 2 proceduri de invatare a suruburilor, un exemplu pentru surubelnita cu cot (diversitatea 3 surubul 4) si un exemplu pentru surubelnita dreapta (diversitatea 1 surubul 1).

Fig 4.9 Invatare surub 1 diversitatea 1

Prima instructiune misca bratul robotic in poziția deasupra șurubului fara camera video, aceasta este invatata si memorata de camera in a doua instructiune. In instructinea a 3-a se adauga un offset pe axa z punctului precedent. Dupa care bratul robotului este mutat exact pe pozitia surubului 1, aceasta fiind din nou memorata cu ajutorul camerei. In continuare offsetul adaugat ete scazut si bratul robotic revine iar in pozitia deasupra primului surub pregatit sa se deplaseze catre urmatorul surub

Fig 4.10 Invatare surub 4 diversitatea 3

Dupa cum se poate observa si pentru surubelnita cu cot procedura este una liniara ea fiind aproximativ aceeasi cu exceptia unr miscari in plus. Astfel ca, primul punct unde ajunge bratul robotic in acest caz este P_CYCL2_VA4 adica poziția de deasupra șurubului 4 insa fara vedere a surubului. Acesta este invatat de catre camera si stocata in variabila PV_CYCL3_VA4. In continuare bratul robotic este dus in punctul P_CYCL2_VA4R care este un punct situat deasupra surubului insa deplasat in lateral fata de unde ar trebui sa fie. Urmatorul punct este deasupra surubului insa cu vedere la acesta P_CYCL2_VA4R_1, urmand ca ultimul punct in care este dus bratul robotic sa fie chiar P_CYCL2_V4 situat exact unde este surubul. Toate aceste puncte sunt salvate de catre camera pe masura ce sunt atinse. Odata terminata operatia robotul se va retrage urmarind aceleasi puncte doar ca in ordine inversa, dupa care se executa procedura urmatorului surub.

Programarea task-urilor robot

Daca, in capitolul anterior a fost preferata o varianta prezentarii mai intai a procedurilor atomice ca dupaia sa fie apelate de catre procedurile mari, in acest capitol data fiind discutia despre logica bratului robotic, procedurile vor fi prezentate in ordinea in care sunt apelate pentru a avea o mai buna imagine asupra impartirii logice a taskurilor robotului. In acest capitol va fi prezentata programarea task-urilor bratului robotic si principalele proceduri dupa care functioneaza procesul. In primul rand se identifica doua mari categorii si anume taskurile robotului indeplinite cu ajutorul camerei sau fara ajutorul camerei. Acest ajutor este setat din variabila “visionbypass” care setata pe 1, permite oprirea vederii artificiale (adica a camerei) si din variabila “vonetimebypass” ce permite efectuarea unui ciclu de productie fara ajutorul camerei. La randul lor aceste categorii se impart in alte trei categori depinzand de diversitatea motorului ce urmeaza a intra in celula de asamblare. Programele utilizate de bratul robotic pentru insirubarea celor 8 suruburi difera in functie de diversitatea deoarece pentru diversitatile 2 si 3 la suruburile 4 si 8 accesul nu se poate face decat cu ajutorul unei surubelnite cu cot, astfel ca vor trebui miscari suplimentare robotului pentru a atinge acele puncte.

Prima procedura discutat este procedura Programme in care vor fi stabilite elementele ce vor ajuta la insurubarea suruburilor.

Fig 5.1 Prima parte a procedurii Programme

Dupa cum e poate observa din Figura 5.1, aceasta este prima parte a programului, care se ocupa cu setarea timerelor si stabilirea conditiilor initiale. Programul este liniar deoarece aceasta parte doar stabileste parametrii pe care se va baza restul programului. Astfel ca daca este permis accesul la camera, se asteapta 0.5 secunde dupa care programul intra intr-un SWITCH-CASE in functie de parametrul cu care a fost apelata procedura Programme ce reprezinta diversitatea motorului. In functie de cele 3 diversitati avem 3 cazuri diferite.

Fig 5.2 Diagrama rimului caz de utilizare, corespondent diversitatii 1

Primul caz de utilizare este aferent primei diversitati astfel ca daca parametrul prog este 1, mai intai sunt activate semnelele de siguranta pentru blocarea robotului, dupa care vitezele aparatelor sunt setate la viteza de lucru (spre deosebire de calibrare unde erau setate la viteza de test). Se verifica daca este activata vederea caz in care, se conecteaza la camera, dupa care se incarca “job”-ul si achizitioneaza o imagine si se obtin informatiile legate de obiect (Diversitate1). Aceste functii sunt aceleasi functii prezentate in cadrul capitolului trecut. Fiecare din aceste funtii are prevazuta o serie de actiuni in caz de eroare prin care utilizatorul este alertata de momenturl in care a aparut eroarea si are posibilitatea de a aleage sa reincerce actiunea specifica sau sa intrerupa vederea de tot sau doar in cadrul acestui ciclu.

Dupa ce eu fost extrase datele din imaginea achizitionata, cele importante (pozitia obiectului) sunt salvate in variabilele programului. Se seteaza referinta ce defineste pozitia obiectului din imagine relativ la baza robotuluisi se verifica daca distanta pana la obiectul recunscut este in limitele admisibile comparandu-se cu o valoare de tolerantaa vizibilitatii (salvata in variabila vis_tol). In cazul in care obiectul nu ete recunoscut utilizatorul are optiunea de a opri vederea artificiala sau a efectua doar acest ciclu fara camera. Dupa aceea este apelata rutina T_V_CYCL1, ce reprezinta miscarea bratului robotic pentru insurubarea propriu zisa pentru diversitatea1. In ultima instanta, bratul robotic este dus in pozitia de rebuclaj.

In cazurile 2 si 3 adica pentru diversitatile 2 si 3 este respectata aceeasi procedura, singurele lucruri modificate fiind casuta in care GetValorData isi salveaza parametrii, parametrii propriu zisi sunt si ei diferiti dat fiind faptul ca avem de-a face cu un alt tip de motor, precum si procedura apelata pentru miscarea bratului robotic (aceasta fiind T_V_CYCL1, T_V_CYCL2 si T_V_CYCL3).

Procedura T_V_CYCL1 este una liniara aceasta trecan prin dreptul fiecarui surub cu intoarcere asupra suruburilor 4 si 8. Dat fiind faptul ca aceasta procedura apartine diversitatii 1, toate operatiile se vor realiza cu ajutorul primei surubelnite, cea dreapta.

Fig 5.3 Procedura T_V_CYCL1

Plusul din dreptul fiecarei stari de proces din Fig 5.3 repezinta faptul ca in cadrul fiecarei etape au loc mai multe actiuni ce vor fi detaliate in continuare. Dupa cum se poate observa si din diagrama, prima conditie este daca variabilele visionbypass si vonetimebypass sunt false, adica daca insurubarea va fi efectuata cu vedere artificiala sau fara vedere artificiala. In cazul vederii artificiale, coordonatele sunt preluate cu ajutorul camerei si sunt inregistrate in variabile specifice. In celalalt caz, coordonatele sunt extrase din variabilele specifice din memorie.

Procedura propriu-zisa de insurubare a suruburilor este aceeasi pentru fiecare surub si are logica prezentata in diagrama 5.4. Diferenta intre surubul 3 insurubat cu vedere artificiala si surubul 3 insurubat fara vedere artificiala consta, dupa cum am zis, in diferitele variabile din care se preiau coodonatele punctelor in care ajunge robotul (P_CYCL1_VA3 fiind Poziție deasupra șurubului 3, diversitatea Div1 iar PV_CYCL1_VA3 fiind variabila eferenta aceleiasi pozitii doar ca este folostia pentru cazul in care vederea artificiala este activata).

Fig 5.4 Insurubare Surub3 div 1, Surubelnita1 (surubelnita dreapta)

In cadrul acestei proceduri initial bratul robotic este dus in punctul P_CYCL1_VA3 care reprezinta coordonatele punctului de deasupra surubului. Se porneste motorul surubelnitei care are un timp mort special calculat pentru a porni exact cand surubelnita a fost fixata pe surub. In continuare este adaugat un offset pe axa z, dupa care bratul robotic se deplaseaza in punctul P_CYCL1_V3, adica pe pozitia surubului al 3-lea. In acest mment timpul mort trebuie sa se fi scurs, fapt care face surubelnita sa porneasca iar surubul este insurubat.

In continuare sunt 3 cazuri posibile. In primul caz daca VIS_FIXE=1 inseamna ca surubul a fost insurubat cu succes iar bratul robotic se misca in punctul dinaintea adaugarii offsetului si se pregateste pentru a merge catre un nou surub. Al 2-lea caz este cel in care EV3_1=1 adica motorului i-a fost acordat cartonas rosu, caz in care sunt oprite toate semnalele iar robotul se retrage pe rand in punctele de deasupra surubului si in cel de rebuclaj iar motorul este evacuat din celula de asamblare. Nu in ultimul rand exista si cazul cartonasului galben (ERR_FIXATION_VIS=0) cand bratul robotic ajunge pe rand in punctul dinainte de adaugarea offset-ului dupa care in punctul de deasupra surubului, urmand la ca final sa ajunga in punctul de ERR_FRONT sau ERR_BACK (depinzand de care margine a motorului este mai apropiata de surubul in cauza) unde odata ajuns, asteapta ca problema sa fie rezolvata de operator. Dupa rezolvarea problemei semnalul de reincepere este dat de la HMI.

Cand toate cele trei variabile au ajuns din nou 0, inseamna ca surubul a fost insurubat cu succes sau motorul a fost evacuat, caz in care se poate trece la urmatoarea etapa a procesului, adica urmatorul surub sau alt motor.

Pentru fiecare diversitate se verifica daca insurubarea se va face cu sau fara vederea artificiala, diferenta constand, cum am precizat anterior, in diferenta dintre valorile in care sunt salvate coordonatele surubului incele doua versiuni.

Ale diferente mai apar si in gestiunea diversitatii 2 si 3 fata de diversitatea 1, acolo unde pentru suruburile 4 si 8 este necesara surubelnita cu cot. In aceste cazuri este respectata logica Figurii 5.3 insa in cazul Figurii 5.4 apar anumite diferente exemplificate in figura de mai jos.

Fig 5.5 Insurubare Surub8 div 2, Surubelnita2 (surubelnita cu cot)

In acest caz, mai apare o pozitie suplimentara a robotului. Dupa punctul PV_CYCL2_VA8 care este poziția deasupra șurubului 8, diversitatea Div2, bratul robotic se va deplasa in punctul PV_CYCL2_VA8R care in reprezinta punctul pe aceeasi axa orizontala cu surubul dar situat in lateralul motorului. Se activeaza semnalele o2 si o10 ce reprezinta faptul ca se va folosi surubelnita cu cot pentru surubul 8 dupa care robotul se va muta pe surubul in cauza urmand a incepe insurubarea. Si pentru cazurile de utilizare a surubelnitei cu cot aveam aceleasi 3 cazuri posibile si anume insurubare de succes, cartonas galben sau cartnas rosu. De asemenea retragerea bratului robotic se desfasoara in aceeasi maniera insa intervin inca 2 puncte suplimentare in traseul robotului.

Nu in ultimul rand bratul robotic mai este si dotat cu o procedura prin care se face o verificare scurta a functinalitatii si anume, insurubarea a doua suruburi la KM0. Aceasta procedura este defapt un test si se efectueaza in vedera verificarii daca paleta ce ajunge in post odata cu motorul se pozitioneaza corect.

Fig 5.6 Diagrama procedura TestKM0Post

Responsabila pentru acest test este procedura TestKM0Post, care este similara cu procedura pentru testarea calibrarii de la KM0. Aceasta incepe cu cmandta SingArea \Wrist pentru evitarea punctelor singulare si seteaza viteza curenta la cea de test. Este afisat faptul ca robotul se va deplasa catre KM0 pentru insurubarea surubului 1. Dupa aceea robotul este mutat in pozita pKM0S1_VA ce reprezinta pozitia de deasupra primului surub de KM0. Urmatorul pas este aducerea robotului in poozitia pKM0S1_V ce reprexinta exact pozitia surubului si pornirea insurubarii. Dupa ce insurubarea a avut loc cu succes, robotul se va retrade mai intai in pozitia de deasupra surubului 1 dupa care se va deplasa deasupra surubului al 2-lea unde va incepe aceeasi procedura insa cu coordonatele surubului aferent. La final dupa insurubarea si celui de-al 2-lea surub, se va retrage in pozitia de repli

Rezultate experimentale si Concluzii

Lucrarea de fata si-a propus obtinerea unei solutii complete de automatizare a unei celule de asamblare robotizata pentru strangerea a 8 suruburi, cu revenire pe suruburile (1 si 2), a doua componente ale unui motor termic. Solutia a fost gandita pentru a fi implementata pe un PLC pentru controlul celulei de asamblare prin controlarea bratului robotic si camerei Cognex 5000. Aceasta prezinta atat solutia procesului cat si contine elemente adiacenta care vin in ajutorarea operatorilor si conducerii, cum ar fi functii speciale de Alarme si Siguranta. Verificarea solutiei se face cu ajutorul simularii, care respecta functiile de baza ale procesului.

Ca imbunatatiri as putea sublinia adaugarea unui server tcp/ip pentru o simulare mai fidela a comenzilor de la robot, utilizatorul nefiind nevoit sa simuleze din program eventualele de avarii sau citirile de la camera.

Timpul de ciclu impus este de 45 de secunde dintre care 12 secunde este timpul necesar intrarii si iesirii din post a paletei cu motorul, asadar, robotului ii raman disponibile doar 33 de secunde in conditiile in care timpul de lucru al surubelnitei pentru fiecare surub este de aproximativ 1-1.5 secunde (in functie de cat de insurubate sunt suruburile) asta inseamna ca efectiv pentru miscarea robotului raman decat 18-23 secunde. In urma simularii s-a constatat o functionare de 16.53 secunde pentru timul de ciclu al robotului fara surubelnita, in realitate rezultatele obtinute pentru tipul de ciclu robot sunt intre 28 si 30 de secunde, incluzand timpul de utilizare al surubelnitelor. Rezultatul final fiind un timp de ciclu intre 40 si 42 de secunde. Timpul mai mare fiind obtinut pentru diversitatile 2 si 3 (motoare de tip Edison) care necesita o serie de puncte suport pe traiectorie pentru evitarea coliziunii cu motorul si utilizarea surubelnitei cu cot pentru strangerea a doua suruburi.

Bibliografie

F. Anton, Automate programabile și microprogramare, note de curs [1]

PRG_MVT, program brat robotic [2]

http://web.ulbsibiu.ro/laurean.bogdan/html/PLCprincipii.pdf [3]

Manualul de utilizare al bratului robotic [4]

Manualul de utilizare al automatului programabil [5]

Cognex In-Sight Explorer, User's Manual [6]

Programarea robotilor – Theodor BORANGIU, Alexandru DUMITRACHE, Florin Daniel ANTON, Editura AGIR, 2011. [7]

Introduction to Robotics: Mechanics and Control, John J. Craig, Prentice Hall , 2004 [8]

Robot Modeling and Control , Mark W. Spong, Seth Hutchinson, Mathukumalli Vidyasagar, Wiley, 2005 [9]

Programmable Logic Controllers, Fourth Edition, W. Bolton, Elsevier Newnes, 2006 [10]

8.Anexe

Variabilele Globale

VAR_GLOBAL

ovar:BOOL;

INCAOVAR:BOOL;

OvarMica:BOOL;

btn_ciuperca: BOOL:=0;

m_banda:BOOL;

s1:BOOL;

b1:BOOL:=1;

b2:BOOL:=1;

poz1:BOOL;

poz2:BOOL;

poz3:BOOL;

interetur: BOOL;

opr: BOOL;

Surub_stricat1: BOOL;

Surub_stricat2: BOOL;

Surub_stricat3: BOOL;

Surub_stricat4: BOOL;

Surub_stricat5: BOOL;

Surub_stricat6: BOOL;

Surub_stricat7: BOOL;

Surub_stricat8: BOOL;

oprire_alarma:BOOL:=0;

motor_ok: BOOL:=0;

viz_sur_1:BOOL:=1;

viz_sur_2:BOOL:=1;

viz_sur_3:BOOL:=1;

viz_sur_4: BOOL := 1;

viz_sur_5: BOOL := 1;

viz_sur_6: BOOL := 1;

viz_sur_7: BOOL := 1;

viz_sur_8: BOOL := 1;

sur_1_gata:BOOL:=0;

sur_2_gata:BOOL:=0;

sur_3_gata:BOOL:=0;

sur_4_gata: BOOL := 0;

sur_5_gata: BOOL := 0;

sur_6_gata: BOOL := 0;

sur_7_gata: BOOL := 0;

sur_8_gata: BOOL := 0;

pozitie_sur_1:INT:=0;

pozitie_sur_2:INT:=0;

pozitie_sur_3:INT:=0;

pozitie_sur_4:INT:=0;

pozitie_sur_5:INT:=0;

pozitie_sur_6:INT:=0;

pozitie_sur_7:INT:=0;

pozitie_sur_8:INT:=0;

placuta:BOOL:=0;

desch_usa:BOOL:=0;

RFID1:BOOL:=0;

RFID2: BOOL :=0 ;

RFID3:BOOL:=0;

surubelnita_ok:BOOL:=0;

poz_surubelnita_x:INT:=0;

poz_surubelnita_y:INT:=0;

surubelnita2_y:INT:=0;

poz_sup_surubelnita:INT:=0;

surubelnita_poz_o:BOOL:=1;

prob_robot_2:BOOL:=0;

prob_robot_3: BOOL := 0;

prob_robot_4:BOOL:=0;

prob_robot_5:BOOL:=0;

prob_robot_6:BOOL:=0;

prob_robot_7:BOOL:=0;

prob_robot_8:BOOL:=0;

cartonas_r:BOOL:=0;

cartonas_galben:BOOL:=0;

END_VAR

Task-ul Miscare

IF btn_ciuperca=1 THEN

m_banda:=0;

END_IF

IF btn_ciuperca=0 AND NOT(pozitie_mot=460) THEN

m_banda:=1;

END_IF

IF (m_banda) AND desch_usa=0 THEN

pozitie_mot:=pozitie_mot+10;

IF (pozitie_mot=250) THEN

s1:=1;

END_IF

IF (pozitie_mot=420) THEN

s1:=0;

END_IF

IF (pozitie_mot=290) THEN

poz1:=1;

END_IF

IF (pozitie_mot=460) THEN

poz1:=0;

END_IF

IF (pozitie_mot=460) THEN

poz2:=1;

END_IF

IF (pozitie_mot=630) THEN

poz2:=0;

END_IF

IF (pozitie_mot=510) THEN

poz3:=1;

END_IF

IF (pozitie_mot=680) THEN

poz3:=0;

END_IF

END_IF

IF PLC_PRG.prob_robot_1=0 AND prob_robot_2=0 AND prob_robot_3= 0 AND prob_robot_4=0 AND prob_robot_5=0 AND prob_robot_6=0 AND prob_robot_7=0 AND prob_robot_8=0 AND

Surub_stricat1=0 AND Surub_stricat2=0 AND Surub_stricat3=0 AND Surub_stricat4=0 AND Surub_stricat5=0 AND Surub_stricat6=0 AND surub_stricat7=0 AND Surub_stricat8=0 THEN

oprire_alarma:=0;

END_IF

IF pozitie_mot=760 THEN

pozitie_mot:=0;

viz_sur_1:=1;

viz_sur_2:=1;

viz_sur_3:=1;

viz_sur_4:= 1;

viz_sur_5:= 1;

viz_sur_6:= 1;

viz_sur_7:= 1

viz_sur_8:= 1;

sur_1_gata:=0;

sur_2_gata:=0;

sur_3_gata:=0;

sur_4_gata:= 0;

sur_5_gata:= 0;

sur_6_gata:= 0;

sur_7_gata:= 0;

sur_8_gata:= 0;

pozitie_sur_1:=0;

pozitie_sur_2:=0;

pozitie_sur_3:=0;

pozitie_sur_4:=0;

pozitie_sur_5:=0;

pozitie_sur_6:=0;

pozitie_sur_7:=0;

pozitie_sur_8:=0;

placuta:=0;

RFID1:=0;

RFID2:=0 ;

RFID3:=0;

surubelnita_poz_o:=1;

prob_robot_2:=0;

prob_robot_3 := 0;

prob_robot_4:=0;

prob_robot_5:=0;

prob_robot_6:=0;

prob_robot_7:=0;

prob_robot_8:=0;

cartonas_r:=0;

cartonas_galben:=0;

Surub_stricat1:=0;

Surub_stricat2:=0;

Surub_stricat3:=0;

Surub_stricat4:=0;

Surub_stricat5:=0;

Surub_stricat6:=0;

Surub_stricat7:=0;

Surub_stricat8:=0;

surubelnita_ok:=0;

oprire_alarma:=0;

surubelnita2_y:=0;

btn_ciuperca:=0;

END_IF

Task-ul Securitate

b1 = 0 AND NOT (PLC_PRG.Step2 OR PLC_PRG.Step3)

m_banda:=0;

desch_usa:=1;

b2=0 AND NOT PLC_PRG.Step9

m_banda :=0;

desch_usa:=1;

desch_usa=1

m_banda :=0;

Task-ul Alarme

PROGRAM Alarme

VAR

alarma_surub_stricat1:BOOL;

alarma_surub_stricat2:BOOL;

alarma_surub_stricat3: BOOL;

alarma_surub_stricat4: BOOL;

alarma_surub_stricat5: BOOL;

alarma_surub_stricat6: BOOL;

alarma_surub_stricat7: BOOL;

alarma_surub_stricat8: BOOL;

robot_stricat:BOOL;

END_VAR

Surub_stricat1=1 AND oprire_alarma=0

alarma_surub_stricat1:=1;

oprire_alarma=1

alarma_surub_stricat1:=0;

Surub_stricat2=1 AND oprire_alarma=0

alarma_surub_stricat2:=1;

oprire_alarma=1

alarma_surub_stricat2:=0;

Surub_stricat3=1 AND oprire_alarma=0

alarma_surub_stricat3:=1;

oprire_alarma=1

alarma_surub_stricat3:=0;

Surub_stricat4=1 AND oprire_alarma=0

alarma_surub_stricat4:=1;

oprire_alarma=1

alarma_surub_stricat4:=0;

Surub_stricat5=1 AND oprire_alarma=0

alarma_surub_stricat5:=1;

oprire_alarma=1

alarma_surub_stricat5:=0;

Surub_stricat6=1 AND oprire_alarma=0

alarma_surub_stricat6:=1;

oprire_alarma=1

alarma_surub_stricat6:=0;

Surub_stricat7=1 AND oprire_alarma=0

alarma_surub_stricat7:=1;

oprire_alarma=1

alarma_surub_stricat7:=0;

Surub_stricat8=1 AND oprire_alarma=0

alarma_surub_stricat8:=1;

oprire_alarma=1

alarma_surub_stricat8:=0;

(PLC_PRG.prob_robot_1=1 OR prob_robot_2=1 OR prob_robot_3=1 OR prob_robot_4=1 OR prob_robot_5=1 OR prob_robot_6=1 OR prob_robot_7=1 OR prob_robot_8=1) AND oprire_alarma=0

robot_stricat:=1;

oprire_alarma=1

robot_stricat:=0;

Task-ul PLC_PRG

PROGRAM PLC_PRG

VAR

Start_Bit: BOOL;

surubelnita_ok2:BOOL:=0;

start_btn:BOOL:=0;

prob:BOOL:=0;

prob_robot_1:BOOL:=0;

END_VAR

motor_ok=0

m_banda:=1;

s1=TRUE

b1:=0;

poz1=TRUE

opr:=1;

poz2=TRUE

m_banda:=0;

interetur:=1;

b1:=1;

viz_sur_1:=0;

RFID1 = 1 OR RFID2=1 OR RFID3=1

surubelnita_poz_o:=0;

placuta:=1;

IF poz_surubelnita_x<90 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 90 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

surubelnita_ok = 1

prob

prob_robot_1:=1;

cartonas_galben

prob_robot_1:=0;

cartonas_r

start_btn

IF prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_1:=pozitie_sur_1+5;

poz_surubelnita_y:=poz_surubelnita_y+5;

IF pozitie_sur_1=20 AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

sur_1_gata:=1;

surubelnita_ok:=0;

END_IF

END_IF

prob

surub_stricat1:=1;

cartonas_galben

cartonas_r

surub_stricat1:=0;

start_btn

IF NOT(poz_surubelnita_y=0)AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

viz_sur_2:=0;

END_IF

prob

prob_robot_1 :=1;

cartonas_galben

cartonas_r

prob_robot_1:=0;

prob

surub_stricat1:=1;

cartonas_galben

cartonas_r

surub_stricat1:=0;

start_btn

surubelnita_poz_o:=0;

IF poz_surubelnita_x<100 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 100 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

prob

prob_robot_2:=1;

cartonas_galben

prob_robot_2:=0;

cartonas_r

start_btn

IF prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_2:=pozitie_sur_2+5;

poz_surubelnita_y:=poz_surubelnita_y+5;

IF pozitie_sur_2=20 AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

sur_2_gata:=1;

surubelnita_ok:=0;

END_IF

END_IF

sur_2_gata=TRUE

prob

surub_stricat2:=1;

cartonas_galben

cartonas_r

surub_stricat2:=0;

start_btn

IF NOT(poz_surubelnita_y=0)AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

viz_sur_3:=0;

END_IF

surubelnita_poz_o=1

prob

prob_robot_2:=1;

cartonas_galben

prob_robot_2:=0;

cartonas_r

start_btn

surubelnita_poz_o:=0;

IF poz_surubelnita_x>50 AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x-5;

poz_sup_surubelnita:=poz_sup_surubelnita+-5;

END_IF

IF poz_surubelnita_x= 50 AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 10 AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

surubelnita_ok=1

prob

prob_robot_3:=1;

cartonas_galben

prob_robot_3:=0;

cartonas_r

start_btn

IF prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_3:=pozitie_sur_3+5;

poz_surubelnita_y:=poz_surubelnita_y+5;

IF pozitie_sur_3=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

sur_3_gata:=1;

surubelnita_ok:=0;

END_IF

END_IF

sur_3_gata=TRUE

prob

surub_stricat3:=1;

cartonas_galben

cartonas_r

surub_stricat3:=0;

start_btn

IF NOT(poz_surubelnita_y=0) AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

viz_sur_4:=0;

END_IF

surubelnita_poz_o=1

prob

prob_robot_3:=1;

cartonas_galben

prob_robot_3:=0;

cartonas_r

start_btn

surubelnita_poz_o:=0;

IF RFID1 = 1 AND desch_usa=0 AND btn_ciuperca=0 THEN

IF poz_surubelnita_x<60 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 60 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

ELSE

IF poz_surubelnita_x<100 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 100 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita2_y:=surubelnita2_y+5;

IF surubelnita2_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok2:=1;

END_IF

END_IF

END_IF

surubelnita_ok=1 OR surubelnita_ok2=1

prob

prob_robot_4:=1;

cartonas_galben

prob_robot_4:=0;

cartonas_r

start_btn

IF RFID1=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_4:=pozitie_sur_4+5;

poz_surubelnita_y:=poz_surubelnita_y+5;

IF pozitie_sur_4=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

sur_4_gata:=1;

surubelnita_ok:=0;

END_IF

END_IF

IF RFID2=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_4:=pozitie_sur_4+5;

surubelnita2_y:=surubelnita2_y+5;

IF pozitie_sur_4>=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_4:=20;

sur_4_gata:=1;

surubelnita_ok2:=0;

END_IF

END_IF

IF RFID3=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_4:=pozitie_sur_4+5;

surubelnita2_y:=surubelnita2_y+5;

IF pozitie_sur_4>=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_4:=20;

sur_4_gata:=1;

surubelnita_ok2:=0;

END_IF

END_IF

sur_4_gata=TRUE

prob

surub_stricat4:=1;

cartonas_galben

cartonas_r

surub_stricat4:=0;

start_btn

IF RFID1=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

IF NOT(poz_surubelnita_y=0) AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

viz_sur_5:=0;

END_IF

ELSE

IF NOT(surubelnita2_y=0) AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita2_y:=surubelnita2_y-5;

END_IF

IF surubelnita2_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

viz_sur_5:=0;

END_IF

END_IF

surubelnita_poz_o=1

prob

prob_robot_4:=1;

cartonas_galben

prob_robot_4:=0;

cartonas_r

start_btn

surubelnita_poz_o:=0;

IF poz_surubelnita_x<140 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 140 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

surubelnita_ok=1

prob

prob_robot_5:=1;

cartonas_galben

prob_robot_5:=0;

cartonas_r

start_btn

IF prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_5:=pozitie_sur_5+5;

poz_surubelnita_y:=poz_surubelnita_y+5;

IF pozitie_sur_5=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

sur_5_gata:=1;

surubelnita_ok:=0;

END_IF

END_IF

sur_5_gata=TRUE

prob

surub_stricat5:=1;

cartonas_galben

cartonas_r

surub_stricat5:=0;

start_btn

IF NOT(poz_surubelnita_y=0) AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

viz_sur_6:=0;

END_IF

surubelnita_poz_o=1

prob

prob_robot_5:=1;

cartonas_galben

prob_robot_5:=0;

cartonas_r

start_btn

surubelnita_poz_o:=0;

IF poz_surubelnita_x>140 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 140 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

surubelnita_ok=1

prob

prob_robot_6:=1;

cartonas_galben

prob_robot_6:=0;

cartonas_r

start_btn

IF prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_6:=pozitie_sur_6+5;

poz_surubelnita_y:=poz_surubelnita_y+5;

IF pozitie_sur_6=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

sur_6_gata:=1;

surubelnita_ok:=0;

END_IF

END_IF

sur_6_gata=TRUE

prob

surub_stricat6:=1;

cartonas_galben

cartonas_r

surub_stricat6:=0;

start_btn

IF NOT(poz_surubelnita_y=0) AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

viz_sur_7:=0;

END_IF

surubelnita_poz_o=1

prob

prob_robot_6:=1;

cartonas_galben

prob_robot_6:=0;

cartonas_r

start_btn

surubelnita_poz_o:=0;

IF poz_surubelnita_x>10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x-5;

poz_sup_surubelnita:=poz_sup_surubelnita-5;

END_IF

IF poz_surubelnita_x= 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

surubelnita_ok=1

prob

prob_robot_7:=1;

cartonas_galben

prob_robot_7:=0;

cartonas_r

start_btn

IF prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_7:=pozitie_sur_7+5;

poz_surubelnita_y:=poz_surubelnita_y+5;

IF pozitie_sur_7=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

sur_7_gata:=1;

surubelnita_ok:=0;

END_IF

END_IF

sur_7_gata=TRUE

prob

surub_stricat7:=1;

cartonas_galben

cartonas_r

surub_stricat7:=0;

start_btn

IF NOT(poz_surubelnita_y=0) AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

viz_sur_8:=0;

END_IF

surubelnita_poz_o=1

prob

prob_robot_7:=1;

cartonas_galben

prob_robot_7:=0;

cartonas_r

start_btn

surubelnita_poz_o:=0;

IF RFID1=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

IF poz_surubelnita_x<20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

END_IF

IF RFID2=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

IF poz_surubelnita_x<60 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 60 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita2_y:=surubelnita2_y+5;

IF surubelnita2_y = 10 AND prob= 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok2:=1;

END_IF

END_IF

END_IF

IF RFID3=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

IF poz_surubelnita_x<60 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 60 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita2_y:=surubelnita2_y+5;

IF surubelnita2_y = 10 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok2:=1;

END_IF

END_IF

END_IF

prob

prob_robot_8:=1;

cartonas_galben

prob_robot_8:=0;

cartonas_r

start_btn

IF RFID1=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_8:=pozitie_sur_8+5;

poz_surubelnita_y:=poz_surubelnita_y+5;

IF pozitie_sur_8=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

sur_8_gata:=1;

surubelnita_ok:=0;

END_IF

END_IF

IF RFID2=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_8:=pozitie_sur_8+5;

surubelnita2_y:=surubelnita2_y+5;

IF pozitie_sur_8>=20 AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_8:=20;

sur_8_gata:=1;

surubelnita_ok2:=0;

END_IF

END_IF

IF RFID3=1 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_8:=pozitie_sur_8+5;

surubelnita2_y:=surubelnita2_y+5;

IF pozitie_sur_8>=20 AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

pozitie_sur_8:=20;

sur_8_gata:=1;

surubelnita_ok2:=0;

END_IF

END_IF

sur_8_gata=TRUE

prob

surub_stricat8:=1;

cartonas_galben

cartonas_r

surub_stricat8:=0;

start_btn

IF RFID1 AND desch_usa=0 AND btn_ciuperca=0 THEN

IF NOT(poz_surubelnita_y=0) AND prob= 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

END_IF

ELSE

IF NOT(surubelnita2_y=0)AND prob=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita2_y:=surubelnita2_y-5;

END_IF

IF surubelnita2_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

END_IF

END_IF

prob

prob_robot_8:=1;

cartonas_galben

prob_robot_8:=0;

cartonas_r

start_btn

surubelnita_poz_o:=0;

IF poz_surubelnita_x<90 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 90 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 30 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

surubelnita_ok=1

prob

prob_robot_1:=1;

cartonas_galben

prob_robot_1:=0;

cartonas_r

start_btn

IF pozitie_sur_1=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=0;

END_IF

surubelnita_ok=FALSE

prob

surub_stricat1:=1;

cartonas_galben

cartonas_r

surub_stricat1:=0;

start_btn

IF NOT(poz_surubelnita_y=0) AND prob= 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

END_IF

surubelnita_poz_o=1

prob

prob_robot_1:=1;

cartonas_galben

prob_robot_1:=0;

cartonas_r

start_btn

surubelnita_poz_o:=0;

IF poz_surubelnita_x<100 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x+5;

poz_sup_surubelnita:=poz_sup_surubelnita+5;

END_IF

IF poz_surubelnita_x= 100 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y+5;

IF poz_surubelnita_y = 30 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=1;

END_IF

END_IF

surubelnita_ok=1

prob

prob_robot_2:=1;

cartonas_galben

prob_robot_2:=0;

cartonas_r

start_btn

IF pozitie_sur_2=20 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_ok:=0;

END_IF

surubelnita_ok=FALSE

prob

surub_stricat2:=1;

cartonas_galben

cartonas_r

surub_stricat2:=0;

start_btn

IF NOT(poz_surubelnita_y=0) AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_x> 0 AND poz_surubelnita_y=0 AND prob = 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x-5;

poz_sup_surubelnita:=poz_sup_surubelnita-5;

END_IF

IF poz_surubelnita_y=0 AND poz_surubelnita_x=0 AND prob= 0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

END_IF

surubelnita_poz_o=1

prob

prob_robot_2:=1;

cartonas_galben

prob_robot_2:=0;

cartonas_r

start_btn

surubelnita_ok:=0;

surubelnita_ok2:=0;

IF surubelnita2_y <>0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita2_y:=surubelnita2_y-5;

END_IF

IF poz_surubelnita_y <>0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_y:=poz_surubelnita_y-5;

END_IF

IF poz_surubelnita_x <>0 AND surubelnita2_y =0 AND poz_surubelnita_y=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_surubelnita_x:=poz_surubelnita_x-5;

END_IF

IF poz_sup_surubelnita <>0 AND surubelnita2_y =0 AND poz_surubelnita_y=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

poz_sup_surubelnita:=poz_sup_surubelnita-5;

END_IF

IF poz_surubelnita_x =0 AND poz_surubelnita_y=0 AND surubelnita2_y =0 AND poz_sup_surubelnita=0 AND desch_usa=0 AND btn_ciuperca=0 THEN

surubelnita_poz_o:=1;

END_IF

motor_ok:=1;

surubelnita_poz_o

motor_ok

opr:=0;

interetur:=0;

m_banda:=1;

b2:=0;

poz3 = 0 AND poz2=0

b2:=1;

motor_ok:=0;

poz3 = 0

Bibliografie

F. Anton, Automate programabile și microprogramare, note de curs [1]

PRG_MVT, program brat robotic [2]

http://web.ulbsibiu.ro/laurean.bogdan/html/PLCprincipii.pdf [3]

Manualul de utilizare al bratului robotic [4]

Manualul de utilizare al automatului programabil [5]

Cognex In-Sight Explorer, User's Manual [6]

Programarea robotilor – Theodor BORANGIU, Alexandru DUMITRACHE, Florin Daniel ANTON, Editura AGIR, 2011. [7]

Introduction to Robotics: Mechanics and Control, John J. Craig, Prentice Hall , 2004 [8]

Robot Modeling and Control , Mark W. Spong, Seth Hutchinson, Mathukumalli Vidyasagar, Wiley, 2005 [9]

Programmable Logic Controllers, Fourth Edition, W. Bolton, Elsevier Newnes, 2006 [10]

Similar Posts