Mestrado - 1A2S - Integração, controlo e sincronização das máquinas CNC com o IRB140

Page 1

Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

SISTEMAS FLEXIVEIS DE FABRICO Integração, controlo e sincronização das máquinas CNC (fresadora e torno) com o robô ABB IRB140

2011

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

ÍNDICE 1. 2. 3. 4.

CONTEXTUALIZAÇÃO .....................................................................................................................3 EQUIPAMENTO A UTILIZAR ...........................................................................................................4 TAREFAS EXECUTADAS ..................................................................................................................5 PROGRAMAÇÃO ............................................................................................................................6 4.1. MODOS DE PROGRAMAÇÃO ...............................................................................................................6 4.2. SOFTWARE DO ROBÔ MANIPULADOR ...................................................................................................7 4.3. INTERFACE ROBÓTICO .......................................................................................................................8 5. CÓDIGO IMPLEMENTADO..............................................................................................................9 5.1. PROCEDIMENTOS COMUNS – 1ª FASE ..................................................................................................9 5.1.1. PROC rFechaPinca()............................................................................................................9 5.1.2. PROC rAbrePinca()..............................................................................................................9 5.2. PROCEDIMENTOS DA FRESADORA – 1ª FASE ..........................................................................................9 5.2.1. PROC rAbrePorta()..............................................................................................................9 5.2.2. PROC rFechaPorta()..........................................................................................................10 5.2.3. PROC rAbreVice()..............................................................................................................10 5.2.4. PROC rFechaVice()............................................................................................................10 5.2.5. PROC rStartFresa()............................................................................................................11 5.3. PROCEDIMENTOS DO TORNO – 1ª FASE ..............................................................................................11 5.3.1. PROC rAbrePorta()............................................................................................................11 5.3.2. PROC rFechaPorta()..........................................................................................................11 5.3.3. PROC rAbreChuck()...........................................................................................................12 5.3.4. PROC rFechaChuck() .........................................................................................................12 5.3.5. PROC rStartTorno()...........................................................................................................12 5.4. PROCEDIMENTOS DA FRESADORA – 2ª FASE ........................................................................................13 5.4.1. PROC rCarregaFresa ()......................................................................................................13 5.4.2. PROC rDescFresa()............................................................................................................14 5.4.3. TRAP rTrap_DescFresa .....................................................................................................15 5.5. PROCEDIMENTOS DO TORNO – 2ª FASE ..............................................................................................16 5.5.1. PROC rCarregaTorno () .....................................................................................................16 5.5.2. PROC rDescTorno() ...........................................................................................................17 5.5.1. TRAP rTrap_DescTorno....................................................................................................18 5.6. PROCEDIMENTOS DA FRESADORA – 3ª FASE ........................................................................................19 5.6.1. PROC rProdFresa()............................................................................................................19 5.7. PROCEDIMENTOS DO TORNO – 3ª FASE ..............................................................................................20 5.7.1. PROC rProdTorno () ..........................................................................................................20 5.8. PROCEDIMENTOS COMUNS – 3ª FASE ................................................................................................21 5.8.1. PROC rCondIniciais().........................................................................................................21 5.8.2. Multitask para o sistema de segurança ...........................................................................22 5.8.1. PROC main() .....................................................................................................................24 6. BIBLIOGRAFIA..............................................................................................................................25 7. CÓDIGO COMPLETO ....................................................................................................................26 7.1. FICHEIRO “OLASRICARDO.PRG”........................................................................................................26 7.2. FICHEIRO “ALARMES.PRG” ..............................................................................................................33

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

1


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

ÍNDICE DE FIGURAS Figura 1 - Layout do robô e das máquinas CNC ............................................................................ 3 Figura 2 - Robô ABB IRB140 .......................................................................................................... 4 Figura 3 - Torno CNC EMCO Turn 55 ............................................................................................. 4 Figura 4 - Fresadora CNC EMCO Mill 155...................................................................................... 4 Figura 5 - Interface homem-máquina ........................................................................................... 6 Figura 6 - Editor de programação – RobEDIT ................................................................................ 7 Figura 7 - ProducaoFresadora.txt - Ficheiro de registo de peças efectuadas na fresadora........ 19 Figura 8 - ProducaoTorno.txt - Ficheiro de registo de peças efectuadas no torno..................... 20 Figura 9 - Alarme_sensores.txt - Exemplo do ficheiro de alarmes ............................................. 23

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

2


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

1. CONTEXTUALIZAÇÃO No âmbito da disciplina de Sistemas flexíveis de Fabrico desenvolveu-se um projecto que permite ao robô carregar e descarregar peças em duas máquinas CNC (Computer Numerical Control), com base no layout da figura seguinte.

Figura 1 - Layout do robô e das máquinas CNC

A sequência de operações é a seguinte: 1. O robô vai buscar uma peça ao buffer e coloca-a na fresadora; 2. O robô volta a ir buscar uma peça ao buffer e coloca-a no torno. 3. Depois de processadas as peças, o robô descarrega as máquinas por ordem de conclusão. 4. As peças processadas nas máquinas são colocadas no buffer de produtos acabados, de cada máquina. Este ciclo de trabalho é repetido até que o operador pressione o botão “Parar Produção”. Depois disso o robô deve completar o ciclo de produção e de seguida terminar. O robô guarda um registo estatístico da produção, como por exemplo: mostrar na consola, o número de peças produzidas em cada máquina e armazenar essa mesma informação numa disquete (ou disco do controlador) de forma a poder ser lida em qualquer computador.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

3


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

2. EQUIPAMENTO A UTILIZAR Neste trabalho foram utilizados os seguintes equipamentos: Robô ABB IRB140, Fresadora CNC EMCO Mill 155 e Torno CNC EMCO Turn 55.

Figura 4 - Fresadora CNC EMCO Mill 155

Figura 2 - Robô ABB IRB140

Figura 3 - Torno CNC EMCO Turn 55

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

4


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

3. TAREFAS EXECUTADAS No quadro seguinte está, por fases, a sequência dos procedimentos pela qual foi realizada a programação. Fresadora

Torno 1ª Fase - PROC rFechaPinca() - PROC rAbrePinca()

- PROC rAbrePorta()

- PROC rAbrePorta()

- PROC rFechaPorta()

- PROC rFechaPorta()

- PROC rAbreVice()

- PROC rAbreChuck()

- PROC rFechaVice()

- PROC rFechaChuck()

- PROC rStartFresa()

- PROC rStartTorno() 2º Fase

- PROC rCarregaFresa ()

- PROC rCarregaTorno ()

- PROC rDescFresa()

- PROC rDescTorno() 3ª Fase - Multitask para o sistema de segurança (Alarme_sensores.txt)

- PROC rProdFresa() (ProducaoFresadora.txt)

- PROC rProdTorno () (ProducaoTorno.txt)

- PROC rCondIniciais()

- PROC rCondIniciais()

- PROC main()

- PROC main()

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

5


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

4. PROGRAMAÇÃO No desenvolvimento deste projecto foi utilizado o robô IRB 140 da ABB, com os respectivos: controlador IRC 5 e consola Flexpendant. De forma simples, pode dizer-se que a consola Flexpedant serve de interface entre o robô e o utilizador/programador. Através de comandos que o utilizador/programador envia, da consola para o controlador IRC 5 e este de seguida para o robô, é possível controlar o IRB 140. O Controlador é a parte do robô que opera o braço manipulador. É composto por hardware e software, combinados para possibilitar ao robô executar suas tarefas.

Figura 5 - Interface homem-máquina

4.1.

MODOS DE PROGRAMAÇÃO

A programação de robôs pode ser realizada de duas formas: Programação On-line A programação On-line consiste na interacção directa com o robô, cada vez que o código do programa é testado, o robô executa-o fisicamente, seja programando-o através da Flexpendant ou através de editores de código como o RobotStudio Online. No caso do RobotStudio On-line o código é editado no software e transferido para o robô, estando disponível na Flexpendant para ser executado. Na Flexpendant, o código é editado na própria e transferido para o robô. Em ambos os casos o uso da Flexpendant é essencial. Programação Off-line A programação off-line permite a utilização de ambientes virtuais para simular a programação do robô, ou seja, com a utilização deste tipo de software é possível o teste virtual do robô. Além disso, não é necessário estar junto ao robô, pois estes João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

6


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial ambientes virtuais permitem uma simulação cada vez mais fiel à realidade. Um dos sistemas mais utilizados para programação off-line é o RobotStudio 5.12.03, através deste software é possível a simulação em ambiente virtual. Outro programa é o robEDIT, um editor freeware, onde podemos testar unicamente a sintaxe e a semântica do programa.

Figura 6 - Editor de programação – RobEDIT

4.2.

SOFTWARE DO ROBÔ MANIPULADOR

Na programação utilizou-se o RAPID, que é uma linguagem de alto nível, exclusiva para os robôs da ABB. A multitarefa (multitask) é um processo que consiste em escalonar e distribuir o tempo do CPU por diferentes tarefas, isto é, permite que vários programas possam ser executados em paralelo ao mesmo tempo. As multitarefas podem ter uma das opções: Normal, Semi-static e Static. A primeira faz com que as tarefas só funcionam quando o programa principal estiver em funcionamento, a segunda faz com que as tarefas funcionem a partir do momento que o sistema for inicializado (start) e a última é idêntica à segunda com a diferença de quando se inicializa a controladora poder continuar do ponto em que se encontrava antes de se reinicializar (restart). João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

7


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial Com este conceito podemos então criar multitarefas para correrem em simultâneo com o programa principal de forma a monitorizar situações críticas ou meramente informativas.

4.3.

INTERFACE ROBÓTICO

A comunicação entre o robô e as máquinas CNC efectua-se fisicamente através dos interfaces robóticos de cada máquina. Os quadros seguintes contêm a informação desses interfaces existentes na Fresadora e no Torno.

Entradas e saídas na Fresadora CNC

Entradas e saídas no Torno CNC

Inputs

Inputs

DI10_9=1 ou DI10_10=0

ALARM ACTIVE

DI10_1

PROGRAM STOP

DI10_9=1 ou DI10_10=1

EMERGENCY

DI10_2

CHUCK OPEN

DI10_12

PROGRAM STOP

DI10_3

CHUCK CLOSED

DI10_13

VICE CLOSED

DI10_4

DOOR OPEN

DI10_14

VICE OPEN

DI10_5

DOOR CLOSED

DI10_15

DOOR CLOSED

DI10_8

ALARM ACTIVE

DI10_16

DOOR OPEN

Outputs

Outputs

DO10_9

CLOSE DOOR

DO10_2

PROGRAM START

DO10_13

NC START

DO10_3

CLOSE DOOR

DO10_14

CLOSE VICE

DO10_4

OPEN DOOR

DO10_15

OPEN VICE

DO10_7

CLOSE CHUCK

DO10_16

OPEN DOOR

DO10_8

OPEN CHUCK

Outras entradas e saídas DI12_1

Sensor óptico número 1

DI12_6

Sensor óptico número 2

DI12_3

Botão OK do operador

DI12_2

Botão “Parar produção”

DO 12_1

Baliza de sinalização (luz verde)

DO12_2

Baliza de sinalização (luz vermelha + alarme)

DO10_1Pinca

Gripper (Pinça) do robô (0 – abre, 1 – Fecha)

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

8


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5. CÓDIGO IMPLEMENTADO 5.1.

PROCEDIMENTOS COMUNS – 1ª FASE

5.1.1.

PROC RFECHAPINCA()

PROC rFechaPinca() SetDO DO10_1Pinca,1; WaitTime 0.5; ENDPROC

Neste procedimento é dada ordem para fechar o gripper (pinça) do robô, colocando a saída DO10_1Pinca a 1. Além disso, a execução do programa espera 0,5 segundos.

5.1.2.

PROC RABREPINCA()

PROC rAbrePinca() SetDO DO10_1Pinca,0; WaitTime 0.5; ENDPROC

Neste procedimento é dada ordem para abrir o gripper (pinça) do robô, colocando a saída DO10_1Pinca a 0. Além disso, a execução do programa espera 0,5 segundos.

5.2.

PROCEDIMENTOS DA FRESADORA – 1ª FASE

5.2.1.

PROC RABREPORTA()

PROC rAbrePortaFresa() SetDO DO10_16,1; WaitTime 3; SetDO DO10_16,0; ENDPROC

Neste procedimento é dada ordem para abrir a porta da fresadora, colocando a saída DO10_16 a 1. A execução do programa espera 3 segundos e depois a saída DO10_16 é colocada a 0, desactivando a ordem.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

9


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.2.2.

PROC RFECHAPORTA()

PROC rFechaPortaFresa() SetDO DO10_9,1; WaitTime 3; SetDO DO10_9,0; ENDPROC

Neste procedimento é dada ordem para fechar a porta da fresadora, colocando a saída DO10_9 a 1. A execução do programa espera 3 segundos e depois a saída DO10_9 é colocada a 0, desactivando a ordem.

5.2.3.

PROC RABREVICE()

PROC rAbreVice() SetDO DO10_15,1; WaitTime 1; SetDO DO10_15,0; ENDPROC

Neste procedimento é dada ordem para abrir o vice da fresadora, colocando a saída DO10_15 a 1. A execução do programa espera 1 segundo e depois a saída DO10_15 é colocada a 0, desactivando a ordem.

5.2.4.

PROC RFECHAVICE()

PROC rFechaVice() SetDO DO10_14,1; WaitTime 1; SetDO DO10_14,0; ENDPROC

Neste procedimento é dada ordem para fechar o vice da fresadora, colocando a saída DO10_14 a 1. A execução do programa espera 1 segundo e depois a saída DO10_14 é colocada a 0, desactivando-a.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

10


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.2.5.

PROC RSTARTFRESA()

PROC rStartFresa() SetDO DO10_13,1; WaitTime 1; SetDO DO10_13,0; ENDPROC

Neste procedimento é dada ordem para iniciar a maquinação da peça na fresadora, colocando a saída DO10_13 a 1. A execução do programa espera 1 segundo e depois a saída DO10_13 é colocada a 0, desactivando a ordem.

5.3.

PROCEDIMENTOS DO TORNO – 1ª FASE

5.3.1.

PROC RABREPORTA()

PROC rAbrePortaTorno() SetDO DO10_4,1; WaitTime 3; SetDO DO10_4,0; ENDPROC

Neste procedimento é dada ordem para abrir a porta do torno, colocando a saída DO10_14 a 1. A execução do programa espera 3 segundos e depois a saída DO10_14 é colocada a 0, desactivando a ordem.

5.3.2.

PROC RFECHAPORTA()

PROC rFechaPortaTorno() SetDO DO10_3,1; WaitTime 3; SetDO DO10_3,0; ENDPROC

Neste procedimento é dada ordem para fechar a porta do torno, colocando a saída DO10_3 a 1. A execução do programa espera 3 segundos e depois a saída DO10_3 é colocada a 0, desactivando a ordem.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

11


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.3.3.

PROC RABRECHUCK()

PROC rAbreChuck() SetDO DO10_8,1; WaitTime 2; SetDO DO10_8,0; ENDPROC

Neste procedimento é dada ordem para abrir o chuck do torno, colocando a saída DO10_8 a 1. A execução do programa espera 2 segundos e depois a saída DO10_8 é colocada a 0, desactivando a ordem.

5.3.4.

PROC RFECHACHUCK()

PROC rFechaChuck() SetDO DO10_7,1; WaitTime 2; SetDO DO10_7,0; ENDPROC

Neste procedimento é dada ordem para fechar o chuck do torno, colocando a saída DO10_7 a 1. A execução do programa espera 2 segundos e depois a saída DO10_7 é colocada a 0, desactivando a ordem.

5.3.5.

PROC RSTARTTORNO()

PROC rStartTorno() SetDO DO10_2,1; WaitTime 2; SetDo DO10_2,0; ENDPROC

Neste procedimento é dada ordem para iniciar a maquinação da peça no torno, colocando a saída DO10_2 a 1. A execução do programa espera 2 segundos e depois a saída DO10_2 é colocada a 0, desactivando a ordem.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

12


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.4.

PROCEDIMENTOS DA FRESADORA – 2ª FASE

5.4.1.

PROC RCARREGAFRESA ()

PROC rCarregaFresa() IDisable; pAproxBufFresa:=Offs(pPegPecaBufFresa,0,0,160); pInterFresa:=Offs(pColPecaFresa,0,400,40); pAproxFresa:=Offs(pColPecaFresa,0,0,40); pTirPecaFresa:=Offs(pColPecaFresa,0,100,0); rAbrePinca; rAbrePortaFresa; rAbreVice; MoveJ pAproxBufFresa, v500, Z10, toolCFF; MoveL pPegPecaBufFresa, v200, fine, toolCFF; rFechaPinca; MoveL pAproxBufFresa, v200, fine, toolCFF; MoveJ pInterFresa, v500, z10, toolCFF; MoveL pAproxFresa, v500, z5, toolCFF; MoveL pColPecaFresa, v200, fine, toolCFF; WaitTime 0.5; rFechaVice; rAbrePinca; MoveL pTirPecaFresa, v200, fine, toolCFF; MoveJ pInterFresa, v500, z10, toolCFF; MoveAbsJ repouso\NoEOffs, v1000, fine, toolCFF; rFechaPortaFresa; WaitTime 2; FresaLivre:=FALSE; rStartFresa; IEnable; ENDPROC

Neste procedimento começa-se por desabilitar as rotinas TRAP e abre a pinça, a porta e o vice. Depois o robô vai ao buffer da fresadora, pega numa peça e coloca-a dentro da fresadora, fecha o vice, abre a pinça e sai da fresadora para a posição de repouso. De seguida fecha a porta, dá indicação de fresadora ocupada e inicia a maquinagem da peça nesta máquina. Por último habilita as rotinas TRAP.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

13


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.4.2.

PROC RDESCFRESA()

PROC rDescFresa() pAproxBufFresa:=Offs(pPegPecaBufFresa,0,0,160); pInterFresa:=Offs(pColPecaFresa,0,400,40); pAproxFresa:=Offs(pColPecaFresa,0,0,40); pTirPecaFresa:=Offs(pColPecaFresa,0,100,0); rAbrePinca; rAbrePortaFresa; MoveJ pInterFresa, v500, z10, toolCFF; MoveJ pTirPecaFresa, v500, fine, toolCFF; MoveL pColPecaFresa, v200, fine, toolCFF; rFechaPinca; rAbreVice; MoveL pAproxFresa, v200, z10, toolCFF; MoveJ pInterFresa, v500, z10, toolCFF; MoveJ pAproxBufFresa, v500, Z10, toolCFF; MoveL pPegPecaBufFresa, v200, fine, toolCFF; rAbrePinca; MoveJ pAproxBufFresa, v200, Z10, toolCFF; MoveAbsJ repouso\NoEOffs, v500, fine, toolCFF; ENDPROC

Este Procedimento foi programado, mas não foi usado, foi substituído pelo procedimento TRAP que está a seguir.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

14


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.4.3.

TRAP RTRAP_DESCFRESA

TRAP rTrap_DescFresa ClkReset clock_DescFresa; ClkStart clock_DescFresa; pAproxBufFresa:=Offs(pPegPecaBufFresa,0,0,160); pInterFresa:=Offs(pColPecaFresa,0,400,40); pAproxFresa:=Offs(pColPecaFresa,0,0,40); pTirPecaFresa:=Offs(pColPecaFresa,0,100,0); rAbrePinca; rAbrePortaFresa; MoveJ pInterFresa, v500, z10, toolCFF; MoveJ pTirPecaFresa, v500, fine, toolCFF; MoveL pColPecaFresa, v200, fine, toolCFF; rFechaPinca; rAbreVice; MoveL pAproxFresa, v200, z10, toolCFF; MoveJ pInterFresa, v1000, z10, toolCFF; MoveJ pAproxBufFresa, v500, Z10, toolCFF; MoveL pPegPecaBufFresa, v200, fine, toolCFF; rAbrePinca; MoveJ pAproxBufFresa, v200, Z10, toolCFF; MoveAbsJ repouso\NoEOffs, v500, fine, toolCFF; ClkStop clock_DescFresa; TempoDeCiclo:=ClkRead(clock_DescFresa); TPErase; TPWrite "****************************************"; TPWrite "* O robô descarregou a fresa em (seg.): "\Num:=TempoDeCiclo; TPWrite "****************************************"; FresaLivre:=TRUE; ContaFresa:=ContaFresa+1; rProdFresa; ENDTRAP

Neste procedimento começa-se por colocar a zero e inicializar a contagem de tempo que o robô demora a descarregar a fresadora, abre a pinça e a porta. Depois o robô vai dentro da máquina, fecha a pinça segurando a peça, sai da máquina e coloca-a no buffer da fresadora, e vai para a posição de repouso. De seguida pára a contagem de tempo e escreve-o no ecrã da consola, dá indicação de fresadora livre, adiciona mais uma peça ao número de peças produzidas e chama o procedimento rProdFresa para registar em ficheiro as peça produzidas nesta máquina. No fluxograma ao lado, os blocos a verde são os que foram acrescentados para a implementação desta rotina TRAP relativamente ao programado no procedimento anterior.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

15


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.5.

PROCEDIMENTOS DO TORNO – 2ª FASE

5.5.1.

PROC RCARREGATORNO ()

PROC rCarregaTorno() IDisable; pAproxBufTorno:=Offs(pPegPecaBufTorno,0,0,120); pAproxTorno:=Offs(pColPecaTorno,40,0,0); pInterTorno:=Offs(pColPecaTorno,40,-250,0); rAbrePinca; rAbrePortaTorno; rAbreChuck; MoveJ pAproxBufTorno, v1000, Z10, toolCFF; MoveL pPegPecaBufTorno, v200, fine, toolCFF; rFechaPinca; MoveL pAproxBufTorno, v200, z10, toolCFF; MoveJ pInterTorno, v1000, z10, toolCFF; MoveJ pAproxTorno, v200, z10, toolCFF; MoveL pColPecaTorno, v200, fine, toolCFF; rFechaChuck; rAbrePinca; MoveL pInterTorno, v200, z10, toolCFF; MoveAbsJ repouso\NoEOffs, v1000, fine, toolCFF; rFechaPortaTorno; WaitTime 1; TornoLivre:=FALSE; rStartTorno; IEnable; ENDPROC

Neste procedimento começa-se por desabilitar as rotinas TRAP e abre a pinça, a porta e o chuck. Depois o robô vai ao buffer do torno, pega numa peça e coloca-a dentro do torno, fecha o chuck, abre a pinça e sai do torno para a posição de repouso. De seguida fecha a porta, dá indicação de torno ocupado e inicia a maquinagem da peça nesta máquina. Por último habilita as rotinas TRAP.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

16


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.5.2.

PROC RDESCTORNO()

PROC rDescTorno() pAproxBufTorno:=Offs(pPegPecaBufTorno,0,0,120); pAproxTorno:=Offs(pColPecaTorno,40,0,0); pInterTorno:=Offs(pColPecaTorno,40,-250,0); rAbrePinca; rAbrePortaTorno; MoveJ pInterTorno, v1000, z10, toolCFF; MoveL pColPecaTorno, v200, fine, toolCFF; rFechaPinca; rAbreChuck; MoveL pAproxTorno, v200, z10, toolCFF; MoveJ pInterTorno, v1000, z10, toolCFF; MoveJ pAproxBufTorno, v1000, Z10, toolCFF; MoveL pPegPecaBufTorno, v200, fine, toolCFF; rAbrePinca; MoveJ pAproxBufTorno, v200, Z10, toolCFF; MoveAbsJ repouso\NoEOffs, v1000, fine, toolCFF; ENDPROC

Este Procedimento foi programado, mas não foi usado, foi substituído pelo procedimento TRAP que está a seguir.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

17


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.5.1.

TRAP RTRAP_DESCTORNO

TRAP rTrap_DescTorno ClkReset clock_DescTorno; ClkStart clock_DescTorno; pAproxBufTorno:=Offs(pPegPecaBufTorno,0,0,120); pAproxTorno:=Offs(pColPecaTorno,40,0,0); pInterTorno:=Offs(pColPecaTorno,40,-250,0); rAbrePinca; rAbrePortaTorno; MoveJ pInterTorno, v1000, z10, toolCFF; MoveL pColPecaTorno, v200, fine, toolCFF; rFechaPinca; rAbreChuck; MoveL pAproxTorno, v200, z10, toolCFF; MoveJ pInterTorno, v1000, z10, toolCFF; MoveJ pAproxBufTorno, v1000, Z10, toolCFF; MoveL pPegPecaBufTorno, v200, fine, toolCFF; rAbrePinca; MoveJ pAproxBufTorno, v200, Z10, toolCFF; MoveAbsJ repouso\NoEOffs, v1000, fine, toolCFF; ClkStop clock_DescTorno; TempoDeCiclo:=ClkRead(clock_DescTorno); TPErase; TPWrite "****************************************"; TPWrite "* O robô descarregou o torno em (seg.): "\Num:=TempoDeCiclo; TPWrite "****************************************"; TornoLivre:=TRUE; ContaTorno:=ContaTorno+1; rProdTorno; ENDTRAP

Neste procedimento começa-se por colocar a zero e inicializar a contagem de tempo que o robô demora a descarregar o torno, abre a pinça e a porta. Depois o robô vai dentro da máquina, fecha a pinça segurando a peça, sai da máquina e coloca-a no buffer do torno, e vai para a posição de repouso. De seguida pára a contagem de tempo e escreve-o no ecrã da consola, dá indicação de torno livre, adiciona mais uma peça ao número de peças produzidas e chama o procedimento rProdTorno para registar em ficheiro as peça produzidas nesta máquina. No fluxograma ao lado, os blocos a verde são os que foram acrescentados para a implementação desta rotina TRAP relativamente ao programado no procedimento anterior.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

18


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.6.

PROCEDIMENTOS DA FRESADORA – 3ª FASE

5.6.1.

PROC RPRODFRESA()

PROC rProdFresa() TPErase; TPWrite "***************************************"; TPWrite "* N Pecas produzidas na Fresadora *"; TPWrite " Total = "\Num:=ContaFresa; TPWrite "* *"; TPWrite "***************************************"; Open "home:"\File:="Mestrado/RicardoJoao/ProducaoFresa.txt",File \Append; IF bCabecalhoFresa=FALSE THEN Write File,"+*************************************+"; Write File,"| |"; Write File,"|Numero Peças efectuadas na Fresadora |"; Write File,"| |"; Write File,"+*************************************+"; Write File,"| N. Peca Data Hora |"; Write File,"+=====================================+"; Write File," "; bCabecalhoFresa:=TRUE; ENDIF Write File," "\NONewLine; Write File,""\Num:=ContaFresa\NONewLine; Write File," "\NONewLine; Write File,CDate()\NONewLine; Write File," "\NONewLine; Write File,CTime(); Close File; TPErase; ENDPROC

Neste procedimento começa-se por escrever no ecrã da consola o total de peças produzidas na fresadora até ao momento. Depois verifica-se se no ficheiro “ProducaoFresadora.txt” já existe o cabeçalho. Se não existir, escreve-o, caso contrário não o escreve. De seguida escreve o número de peças produzidas a data e a hora.

Figura 7 - ProducaoFresadora.txt - Ficheiro de registo de peças efectuadas na fresadora

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

19


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.7.

PROCEDIMENTOS DO TORNO – 3ª FASE

5.7.1.

PROC RPRODTORNO ()

PROC rProdTorno() TPErase; TPWrite "***********************************"; TPWrite "* N Pecas produzidas no Torno *"; TPWrite " Total = "\Num:=ContaTorno; TPWrite "* *"; TPWrite "***********************************"; Open "home:"\File:="Mestrado/RicardoJoao/ProducaoTorno.txt",File \Append; IF bCabecalhoTorno=FALSE THEN Write File,"+*************************************+"; Write File,"| |"; Write File,"| Numero de Peças efectuadas no Torno |"; Write File,"| |"; Write File,"+*************************************+"; Write File,"| N. Peça Data Hora |"; Write File,"+=====================================+"; Write File," "; bCabecalhoTorno:=TRUE; ENDIF Write File," "\NONewLine; Write File,""\Num:=ContaTorno\NONewLine; Write File," "\NONewLine; Write File,CDate()\NONewLine; Write File," "\NONewLine; Write File,CTime(); Close File; TPErase; ENDPROC

Neste procedimento começa-se por escrever no ecrã da consola o total de peças produzidas no torno até ao momento. Depois verificase se no ficheiro “ProducaoTorno.txt” já existe cabeçalho. Se não existir, escreve-o, caso contrário não o escreve. De seguida escreve o número de peças produzidas a data e a hora.

Figura 8 - ProducaoTorno.txt - Ficheiro de registo de peças efectuadas no torno

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

20


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.8.

PROCEDIMENTOS COMUNS – 3ª FASE

5.8.1.

PROC RCONDINICIAIS()

PROC rCondIniciais() rFechaPinca; rAbrePinca; SetDO Do12_2,1; !! liga alarme sonoro e luz vermelha waittime 0.5; SetDO Do12_2,0; !! desliga alarme sonoro e luz vermelha rAbrePortaFresa; rAbreVice; rFechaVice; rFechaPortaFresa; rAbrePortaTorno; rAbreChuck; rFechaChuck; rFechaPortaTorno; SetDO Do12_1,1; !!liga luz verde ENDPROC

Neste procedimento começa-se por abrir e fechar a pinça do robô, liga-se e desliga alarme sonoro e a luz vermelha. De seguida, na fresadora, abre-se a porta, abre-se e fecha-se o vice e fecha-se a porta. Depois, no torno, abre-se a porta, abre-se e fecha-se o chuck e fechase a porta. Por último liga-se a luz verde indicando que a célula está pronta a funcionar.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

21


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.8.2.

MULTITASK PARA O SISTEMA DE SEGURANÇA

VAR iodev file; VAR NUM NumAlarme:=0; PROC main() WAITTIME 0.2; !Verifica se o Sensor óptico 1 (DI12_1) ou o Sensor óptico 2 (DI12_6) foram activados If (DI12_1=1 OR DI12_6=1) THEN !Se sim, pára todos os movimentos do robot StopMove; !Desliga a Baliza de sinalização (luz verde) SetDO DO12_1,0; !Liga a Baliza de sinalização (luz vermelha + alarme) SetDO DO12_2,1; !Limpa o ecra da consola e dá a informação de alarme activo TPErase; TPWrite "****************************************"; TPWrite "* !! ALARME ACTIVO !! *"; TPWrite "* *"; TPWrite "*Verificar estado dos sensores ópticos!*"; TPWrite "****************************************"; !Faz o registo do alarme no ficheiro de registo rRegistaAlarme; !Espera pelo OK do operador para continuar o funcionamento WaitDI DI12_3,1; WaitTime 0.5; !Desliga a Baliza de sinalização (luz vermelha + alarme) SetDO DO12_2,0; !Liga a Baliza de sinalização (luz verde) SetDO DO12_1,1; TPErase; !Limpa o ecra da consola StartMove; !Inicia o movimento do robot ENDIF ENDPROC

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

22


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

!************************************************ !****** Registar os alarmes num ficheiro ******* !************************************************ PROC rRegistaAlarme() NumAlarme:=NumAlarme+1; Open "home:"\File:="Mestrado/RicardoJoao/alarme_sensores.txt",fi le\Append; IF NumAlarme=1 THEN Write file,"++++ REGISTO DE ALARMES DOS SENSORES ++++"; ENDIF Write file,CDate()\NoNewLine; Write file," "\NoNewLine; Write file,CTime()\NoNewLine; Write file," "\NoNewLine; Write file,"Alarme número: "\Num:=NumAlarme; Close file; ENDPROC ENDMODULE

Este programa é sempre executado em paralelo com o programa principal e outras rotinas de alarme que possam correr em simultâneo. Começa-se por verificar se algum dos sensores ópticos foi activado. Se sim, pára todos os movimentos do robô, desliga a luz verde, liga a luz vermelha e o alarme sonoro, escreve ainda no ecrã da consola !! ALARME ACTIVO !! - *Verificar estado dos sensores ópticos!*. De seguida chama procedimento rRegistaAlarme para registar o alarme. Fica à espera que o operador pressione o botão OK. Quando o botão é pressionado liga a luz verde, desliga a luz vermelha e o alarme sonoro. Por fim limpa o ecrã da consola e habilita os movimentos do robô. Quando o procedimento rRegistaAlarme é chamado, começa-se por incrementar o número de alarmes que ocorreram. Depois, no ficheiro alarme_sensores.txt, se for o primeiro alarme, escreve o cabeçalho e de seguida a data, a hora e o número do alarme, se não escreve só a data, a hora e o número do alarme.

Como resultado irá ser gerado um ficheiro alarme_sensores.txt que irá registar todos os alarmes dados pelos sensores ópticos existentes na CFF.

Figura 9 - Alarme_sensores.txt - Exemplo do ficheiro de alarmes

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

23


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

5.8.1.

PROC MAIN()

PROC main() IF TornoLivre=TRUE THEN IDelete int_DescTorno; CONNECT int_DescTorno WITH rTrap_DescTorno; ISignalDI\Single,DI10_1,1,int_DescTorno; WaitTime 1; rCarregaTorno; ENDIF IF FresaLivre=TRUE THEN IDelete int_DescFresa; CONNECT int_DescFresa WITH rTrap_DescFresa; ISignalDI\Single,DI10_12,1,int_DescFresa; WaitTime 1; rCarregaFresa; ENDIF ENDPROC

No programa principal começa-se por verificar se o torno está livre. Se estiver faz o reset à variável int_DescTorno. Depois liga a entrada DI10_1 (PROGRAM STOP torno) à TRAP rTrap_DescTorno. De seguida chama o procedimento rCarregaTorno. Se a entrada PROGRAM STOP torno passar a 1, a TRAP rTrap_DescTorno fica desabilitada. Seguidamente verificar-se a fresadora está livre. Se estiver faz o reset à variável int_DescFresa. Depois liga a entrada DI10_12 (PROGRAM STOP fresadora) à TRAP rTrap_DescFresa. De seguida chama o procedimento rCarregaFresa. Se a entrada PROGRAM STOP fresadora passar a 1, a TRAP rTrap_DescFresa fica desabilitada.

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

24


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

6. BIBLIOGRAFIA [1] Automation, A. F. (s.d.). RAPID Reference Manual - System Data Types and Routines On-line. Obtido em 2011, de ABB Flexible Automation: http://rab.ict.pwr.wroc.pl/irb1400/datasys_rev1.pdf

[2] Ferrolho, A. Apontamentos da Disciplina de Sistemas Flexíveis de Fabrico, ESTGV, 2011

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

25


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

7. CÓDIGO COMPLETO 7.1.

FICHEIRO “OLASRICARDO.PRG”

%%% VERSION:1 LANGUAGE:ENGLISH %%% MODULE OlasRicardo PERS tooldata toolCFF:=[TRUE,[[0,0,215],[1,0,0,0]],[2,[85,0,85],[1,0,0,0],0.012,0.012,0.012]]; CONST jointtarget repouso:=[[0,0,0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; PERS robtarget pPegPecaBufTorno:=[[462.98,226.3,170.14],[0.012802,0.031885,0.707734,0.705644],[-1,2,1,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; PERS robtarget pColPecaTorno:=[[-84.06,1045.24,495.56],[0.484509,-0.518501,-0.482719,0.513216],[1,0,1,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; VAR robtarget pInterTorno; VAR robtarget pAproxBufTorno; VAR robtarget pAproxTorno; PERS ROBTARGET pPegPecaBufFresa:=[[434.66,-301.98,174.48],[0.001091,-0.035426,0.999259,-0.015057],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; PERS ROBTARGET pColPecaFresa:=[[-44.35,-1031.37,233.81],[0.521473,0.500285,0.484409,0.493082],[-2,1,-2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; VAR robtarget pInterFresa; VAR robtarget pAproxBufFresa; VAR robtarget pAproxFresa; VAR robtarget pTirPecaFresa; VAR intnum int_DescFresa; VAR intnum int_DescTorno; VAR clock clock_DescFresa; VAR clock clock_DescTorno; !contador para o tempo de operação VAR NUM TempoDeCiclo; !verificar se fresa está livre VAR BOOL FresaLivre:=TRUE; !verificar se torno está livre VAR BOOL TornoLivre:=TRUE; !contador do numero de peças concluidas no torno VAR NUM ContaTorno:=0; !contador do numero de peças concluidas na fresadora VAR NUM ContaFresa:=0; !flag q assinala quando se escreve o cabeçalho do ficheiro pela 1ª vez para a fresadora VAR bool bCabecalhoFresa:=FALSE; !flag q assinala quando se escreve o cabeçalho do ficheiro pela 1ª vez para o torno VAR bool bCabecalhoTorno:=FALSE; VAR iodev file; PROC main() IF TornoLivre=TRUE THEN IDelete int_DescTorno; CONNECT int_DescTorno WITH rTrap_DescTorno; ISignalDI\Single,DI10_1,1,int_DescTorno;

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

26


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial WaitTime 1; rCarregaTorno; ENDIF IF FresaLivre=TRUE THEN IDelete int_DescFresa; CONNECT int_DescFresa WITH rTrap_DescFresa; ISignalDI\Single,DI10_12,1,int_DescFresa; WaitTime 1; rCarregaFresa; ENDIF ENDPROC PROC rCondIniciais() rFechaPinca; rAbrePinca; SetDO Do12_2,1; !! liga alarme sonoro e luz vermelha waittime 0.5; SetDO Do12_2,0; !! desliga alarme sonoro e luz vermelha rAbrePortaFresa; rAbreVice; rFechaVice; rFechaPortaFresa; rAbrePortaTorno; rAbreChuck; rFechaChuck; rFechaPortaTorno; SetDO Do12_1,1; !!liga luz verde ENDPROC !////////////////////////////////////////////////////////////// !////////////////////// ROTINAS Do ROBO /////////////////////// !////////////////////////////////////////////////////////////// PROC rFechaPinca() SetDO DO10_1Pinca,1; WaitTime 0.5; ENDPROC PROC rAbrePinca() SetDO DO10_1Pinca,0; WaitTime 0.5; ENDPROC !///////////////////////////////////////////////////////////// !////////////////////// Rotinas do tipo TRAP ////////////// !///////////////////////////////////////////////////////////// TRAP rTrap_DescTorno ClkReset clock_DescTorno; ClkStart clock_DescTorno; pAproxBufTorno:=Offs(pPegPecaBufTorno,0,0,120); pAproxTorno:=Offs(pColPecaTorno,40,0,0); pInterTorno:=Offs(pColPecaTorno,40,-250,0); rAbrePinca; rAbrePortaTorno; MoveJ pInterTorno, v1000, z10, toolCFF; MoveL pColPecaTorno, v200, fine, toolCFF; rFechaPinca; rAbreChuck;

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

27


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial MoveL pAproxTorno, v200, z10, toolCFF; MoveJ pInterTorno, v1000, z10, toolCFF; MoveJ pAproxBufTorno, v1000, Z10, toolCFF; MoveL pPegPecaBufTorno, v200, fine, toolCFF; rAbrePinca; MoveJ pAproxBufTorno, v200, Z10, toolCFF; MoveAbsJ repouso\NoEOffs, v1000, fine, toolCFF; ClkStop clock_DescTorno; TempoDeCiclo:=ClkRead(clock_DescTorno); TPErase; TPWrite "****************************************"; TPWrite "* O robot descarregou o torno em (seg.): "\Num:=TempoDeCiclo; TPWrite "****************************************"; TornoLivre:=TRUE; ContaTorno:=ContaTorno+1; rProdTorno; ENDTRAP TRAP rTrap_DescFresa ClkReset clock_DescFresa; ClkStart clock_DescFresa; pAproxBufFresa:=Offs(pPegPecaBufFresa,0,0,160); pInterFresa:=Offs(pColPecaFresa,0,400,40); pAproxFresa:=Offs(pColPecaFresa,0,0,40); pTirPecaFresa:=Offs(pColPecaFresa,0,100,0); rAbrePinca; rAbrePortaFresa; MoveJ pInterFresa, v500, z10, toolCFF; MoveJ pTirPecaFresa, v500, fine, toolCFF; MoveL pColPecaFresa, v200, fine, toolCFF; rFechaPinca; rAbreVice; MoveL pAproxFresa, v200, z10, toolCFF; MoveJ pInterFresa, v1000, z10, toolCFF; MoveJ pAproxBufFresa, v500, Z10, toolCFF; MoveL pPegPecaBufFresa, v200, fine, toolCFF; rAbrePinca; MoveJ pAproxBufFresa, v200, Z10, toolCFF; MoveAbsJ repouso\NoEOffs, v500, fine, toolCFF; ClkStop clock_DescFresa; TempoDeCiclo:=ClkRead(clock_DescFresa); TPErase; TPWrite "****************************************"; TPWrite "* O robot descarregou a fresa em (seg.): "\Num:=TempoDeCiclo; TPWrite "****************************************"; FresaLivre:=TRUE; ContaFresa:=ContaFresa+1; rProdFresa; ENDTRAP !///////////////////////////////////////////////////////////// !////////////////////// ROTINAS DO TORNO ///////////////////// !///////////////////////////////////////////////////////////// PROC rCarregaTorno() IDisable; pAproxBufTorno:=Offs(pPegPecaBufTorno,0,0,120); pAproxTorno:=Offs(pColPecaTorno,40,0,0); pInterTorno:=Offs(pColPecaTorno,40,-250,0); rAbrePinca;

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

28


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial rAbrePortaTorno; rAbreChuck; MoveJ pAproxBufTorno, v1000, Z10, toolCFF; MoveL pPegPecaBufTorno, v200, fine, toolCFF; rFechaPinca; MoveL pAproxBufTorno, v200, z10, toolCFF; MoveJ pInterTorno, v1000, z10, toolCFF; MoveJ pAproxTorno, v200, z10, toolCFF; MoveL pColPecaTorno, v200, fine, toolCFF; rFechaChuck; rAbrePinca; MoveL pInterTorno, v200, z10, toolCFF; MoveAbsJ repouso\NoEOffs, v1000, fine, toolCFF; rFechaPortaTorno; WaitTime 1; TornoLivre:=FALSE; rStartTorno; IEnable; ENDPROC !PROC rDescTorno() !pAproxBufTorno:=Offs(pPegPecaBufTorno,0,0,120); !pAproxTorno:=Offs(pColPecaTorno,40,0,0); !pInterTorno:=Offs(pColPecaTorno,40,-250,0); !rAbrePinca; !rAbrePortaTorno; !MoveJ pInterTorno, v1000, z10, toolCFF; !MoveL pColPecaTorno, v200, fine, toolCFF; !rFechaPinca; !rAbreChuck; !MoveL pAproxTorno, v200, z10, toolCFF; !MoveJ pInterTorno, v1000, z10, toolCFF; !MoveJ pAproxBufTorno, v1000, Z10, toolCFF; !MoveL pPegPecaBufTorno, v200, fine, toolCFF; !rAbrePinca; !MoveJ pAproxBufTorno, v200, Z10, toolCFF; !MoveAbsJ repouso\NoEOffs, v1000, fine, toolCFF; !ENDPROC PROC rStartTorno() SetDO DO10_2,1; WaitTime 2; SetDo DO10_2,0; ENDPROC PROC rProdTorno() TPErase; TPWrite "***********************************"; TPWrite "* N Pecas produzidas no Torno *"; TPWrite " Total = "\Num:=ContaTorno; TPWrite "* *"; TPWrite "***********************************"; Open "home:"\File:="Mestrado/RicardoJoao/ProducaoTorno.txt",File\Append; IF bCabecalhoTorno=FALSE THEN Write File,"+*****************************************************************+"; Write File,"| |"; Write File,"| Numero de Peças efectuadas no Torno |"; Write File,"| |"; Write File,"+*****************************************************************+"; Write File,"| N. Peça Data Hora |";

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

29


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial Write File,"+================================================================+"; Write File," "; bCabecalhoTorno:=TRUE; ENDIF Write File," "\NONewLine; Write File,""\Num:=ContaTorno\NONewLine; Write File," "\NONewLine; Write File,CDate()\NONewLine; Write File," "\NONewLine; Write File,CTime(); Close File; TPErase; ENDPROC PROC rAbrePortaTorno() SetDO DO10_4,1; WaitTime 3; SetDO DO10_4,0; ENDPROC PROC rFechaPortaTorno() SetDO DO10_3,1; WaitTime 3; SetDO DO10_3,0; ENDPROC PROC rAbreChuck() SetDO DO10_8,1; WaitTime 2; SetDO DO10_8,0; ENDPROC PROC rFechaChuck() SetDO DO10_7,1; WaitTime 2; SetDO DO10_7,0; ENDPROC

!////////////////////////////////////////////////////////////// !////////////////////// ROTINAS DA FRESADORA ////////////////// !////////////////////////////////////////////////////////////// PROC rCarregaFresa() IDisable; pAproxBufFresa:=Offs(pPegPecaBufFresa,0,0,160); pInterFresa:=Offs(pColPecaFresa,0,400,40); pAproxFresa:=Offs(pColPecaFresa,0,0,40); pTirPecaFresa:=Offs(pColPecaFresa,0,100,0); rAbrePinca; rAbrePortaFresa; rAbreVice; MoveJ pAproxBufFresa, v500, Z10, toolCFF; MoveL pPegPecaBufFresa, v200, fine, toolCFF; rFechaPinca; MoveL pAproxBufFresa, v200, fine, toolCFF; MoveJ pInterFresa, v500, z10, toolCFF; MoveL pAproxFresa, v500, z5, toolCFF; MoveL pColPecaFresa, v200, fine, toolCFF; WaitTime 0.5; rFechaVice;

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

30


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial rAbrePinca; MoveL pTirPecaFresa, v200, fine, toolCFF; MoveJ pInterFresa, v500, z10, toolCFF; MoveAbsJ repouso\NoEOffs, v1000, fine, toolCFF; rFechaPortaFresa; WaitTime 2; FresaLivre:=FALSE; rStartFresa; IEnable; ENDPROC !PROC rDescFresa() !pAproxBufFresa:=Offs(pPegPecaBufFresa,0,0,160); !pInterFresa:=Offs(pColPecaFresa,0,400,40); !pAproxFresa:=Offs(pColPecaFresa,0,0,40); !pTirPecaFresa:=Offs(pColPecaFresa,0,100,0); !rAbrePinca; !rAbrePortaFresa; !MoveJ pInterFresa, v500, z10, toolCFF; !MoveJ pTirPecaFresa, v500, fine, toolCFF; !MoveL pColPecaFresa, v200, fine, toolCFF; !rFechaPinca; !rAbreVice; !MoveL pAproxFresa, v200, z10, toolCFF; !MoveJ pInterFresa, v500, z10, toolCFF; !MoveJ pAproxBufFresa, v500, Z10, toolCFF; !MoveL pPegPecaBufFresa, v200, fine, toolCFF; !rAbrePinca; !MoveJ pAproxBufFresa, v200, Z10, toolCFF; !MoveAbsJ repouso\NoEOffs, v500, fine, toolCFF; !ENDPROC PROC rStartFresa() SetDO DO10_13,1; WaitTime 1; SetDO DO10_13,0; ENDPROC PROC rProdFresa() TPErase; TPWrite "***************************************"; TPWrite "* N Pecas produzidas na Fresadora *"; TPWrite " Total = "\Num:=ContaFresa; TPWrite "* *"; TPWrite "***************************************"; Open "home:"\File:="Mestrado/RicardoJoao/ProducaoFresa.txt",File\Append; IF bCabecalhoFresa=FALSE THEN Write File,"+******************************************************************+"; Write File,"| |"; Write File,"| Numero de Peças efectuadas na Fresadora |"; Write File,"| |"; Write File,"+******************************************************************+"; Write File,"| N. Peca Data Hora |"; Write File,"+==================================================================+"; Write File," "; bCabecalhoFresa:=TRUE; ENDIF Write File," "\NONewLine; Write File,""\Num:=ContaFresa\NONewLine; Write File," "\NONewLine;

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

31


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial Write File,CDate()\NONewLine; Write File," "\NONewLine; Write File,CTime(); Close File; TPErase; ENDPROC PROC rAbrePortaFresa() SetDO DO10_16,1; WaitTime 3; SetDO DO10_16,0; ENDPROC PROC rFechaPortaFresa() SetDO DO10_9,1; WaitTime 3; SetDO DO10_9,0; ENDPROC PROC rAbreVice() SetDO DO10_15,1; WaitTime 1; SetDO DO10_15,0; ENDPROC PROC rFechaVice() SetDO DO10_14,1; WaitTime 1; SetDO DO10_14,0; ENDPROC ENDMODULE

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

32


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial

7.2.

FICHEIRO “ALARMES.PRG”

%%% VERSION:1 LANGUAGE:ENGLISH %%% MODULE alarme VAR iodev file; VAR NUM NumAlarme:=0; PROC main() WAITTIME 0.2; ! !Verifica se o Sensor óptico 1 (DI12_1) ou o Sensor óptico 2 (DI12_6) foram activados If (DI12_1=1 OR DI12_6=1) THEN ! !Se sim, pára todos os movimentos do robot StopMove; ! !Desliga a Baliza de sinalização (luz verde) SetDO DO12_1,0; ! !Liga a Baliza de sinalização (luz vermelha + alarme) SetDO DO12_2,1; ! !Limpa o ecra da consola e dá a informação de alarme activo TPErase; TPWrite "****************************************"; TPWrite "* !! ALARME ACTIVO !! *"; TPWrite "* *"; TPWrite "*Verificar estado dos sensores ópticos!*"; TPWrite "****************************************"; ! !Faz o registo do alarme no ficheiro de registo rRegistaAlarme; ! !Espera pelo OK do operador para continuar o funcionamento WaitDI DI12_3,1; WaitTime 0.5; ! !Desliga a Baliza de sinalização (luz vermelha + alarme) SetDO DO12_2,0; ! !Liga a Baliza de sinalização (luz verde) SetDO DO12_1,1; ! !Limpa o ecra da consola TPErase; ! !Inicia o movimento do robot StartMove; ENDIF ENDPROC

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

33


Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Viseu Mestrado em Engenharia Electrotécnica - Energia e Automação Industrial !************************************************ !****** Registar os alarmes num ficheiro ******* !************************************************ PROC rRegistaAlarme() NumAlarme:=NumAlarme+1; Open "home:"\File:="Mestrado/RicardoJoao/alarme_sensores.txt",file\Append; IF NumAlarme=1 THEN Write file,"++++ REGISTO DE ALARMES DOS SENSORES ++++"; ENDIF Write file,CDate()\NoNewLine; Write file," "\NoNewLine; Write file,CTime()\NoNewLine; Write file," "\NoNewLine; Write file,"Alarme número: "\Num:=NumAlarme; Close file; ENDPROC ENDMODULE

João Vítor Pereira Ôlas (nº1503) Ricardo Jorge de Loureiro Silva (nº1841)

34


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.