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