1
CENTRO DE FORMAÇÃO PROFISSIONAL SENAI VOLKSWAGEN PROFESSOR CLEITON RODRIGUES MENDES
ROBÓTICA
3ª REVISÃO 2011
2
SUMÁRIO
CAPÍTULO 1 – ROBÓTICA INDUSTRIAL 1 HISTÓRICO.............................................................................................................06 1.1 LEIS DA ROBÓTICA............................................................................................08 2 CONCEITOS PRINCIPAIS......................................................................................09 2.1 GRAUS DE LIBERDADE ....................................................................................09 2.2 TIPOS DE JUNTAS OU EIXOS...........................................................................10 2.3 VOLUME DE TRABALHO....................................................................................12 2.4 CLASSIFICAÇÃO DOS ROBÔS INDUSTRIAIS................................................. 13 2.5 CARACTERÍSTICAS DOS ROBÔS INDUSTRIAIS............................................ 15 3 COMPONENTES DE UM ROBÔ INDUSTRIAL..................................................... 16 4 NORMAS DE SEGURANÇA ...................................... .................. ........................................... .......................................... ................... 18
CAPÍTULO 2 – MODO DE AJUSTAGEM 1 PROGRAMADOR (VKCP)......................................................................................29 2 PAINEL DE PROGRAMAÇÃO KUKA.IHM..............................................................31 3 SISTEMAS DE COORDENADAS...........................................................................34 4 DESLOCAMENTO MANUAL DO ROBÔ................................................................36 5 MODO DE SERVIÇO..............................................................................................38 5.1 AJUSTE DA POSIÇÃO DE ZERO MECÂNICO (MASTERIZAÇÃO)...................39 5.2 MEDIÇÃO DA FERRAMENTA (TCP)..................................................................42 5.3 ORIENTAÇÃO DA FERRAMENTA......................................................................46 5.4 DADOS DE CARGA DA FERRAMENTA.............................................................48 5.5 MEDIÇÃO DE BASE............................................................................................51
3
SUMÁRIO
CAPÍTULO 3 – MODO DE PROGRAMAÇÃO BÁSICA 1 ESTRUTURA DE PROGRAMAÇÃO.......................................................................54 1.1 ESTRUTURA DE UM PROGRAMA KRL.............................................................54 1.2 POSIÇÃO HOME.................................................................................................55 1.3 VARREDURA.......................................................................................................56 1.4 TIPO DE EXECUÇÃO DO PROGRAMA..............................................................56 1.5 AJUSTAR O OVERRIDE DO PROGRAMA (POV)..............................................57 2 TIPOS DE MOVIMENTOS......................................................................................57 2.1 MOVIMENTO PTP...............................................................................................57 2.2 MOVIMENTO LIN.................................................................................................60 2.3 MOVIMENTO CIRC..............................................................................................62 2.4 MODIFICAR PONTO PROGRAMADO................................................................66 2.5 APROXIMAÇÃO...................................................................................................67 3 INSTRUÇÕES LÓGICAS........................................................................................69 3.1 INSTRUÇÃO OUT................................................................................................70 3.2 INSTRUÇÃO PULSE............................................................................................71 3.3 INSTRUÇÕA ANOUT...........................................................................................72 3.4 INSTRUÇÃO WAIT..............................................................................................74 3.5 INSTRUÇÃO WAITFOR.......................................................................................75
4
SUMÁRIO
CAPÍTULO 4 – MODO DE PROGRAMAÇÃO AVANÇADA 1 METODOLOGIA DA PROGRAMAÇÃO AVANÇADA.............................................77 2 FLUXOGRAMA.......................................................................................................78 3 PROGRAMA KRL....................................................................................................81 3.1 COMENTÁRIOS...................................................................................................81 3.2 VARIÁVEIS E DECLARAÇÕES...........................................................................82 3.3 TIPOS DE DADOS SIMPLES..............................................................................83 3.4 MANIPULAÇÃO DE DADOS...............................................................................83 3.5 OPERADORES ARITMÉTICOS..........................................................................83 3.6 OPERADORES DE COMPARAÇÃO..................................................................84 3.7 OPERADORES LÓGICOS..................................................................................85 3.8 PRIORIDADE DOS OPERADORES...................................................................86 3.9 FUNÇÕES REGULARES....................................................................................86 3.10 INSTRUÇÃO DE SALTO (GOTO).....................................................................88 3.11 RAMIFICAÇÃO CONDICIONAL (IF ELSE)........................................................88 3.12 DISTRIBUIDOR (SWITCH)................................................................................89 3.13 LOOP DE CONTAGEM (FOR)..........................................................................90 3.14 LOOP DE REJEIÇÃO (WHILE)..........................................................................91 3.15 LOOP DE NÃO REJEIÇÃO (REPEAT)..............................................................91 3.16 LOOP INFINITO (LOOP)...................................................................................92 3.17 TEMPOS DE ESPERA (WAIT SEC).................................................................93 4 SUBPROGRAMAS E FUNÇÕES...........................................................................93 4.1 SUBPROGRAMA.................................................................................................94 4.2 FUNÇÕES............................................................................................................94 4.3 ATIVAÇÃO E TRANSFERÊNCIA DE PARÂMETROS........................................97 REFERÊNCIAS BIBLIOGRAFICAS........................................................................100
5
CAPÍTULO 1 – ROBÓTICA INDUSTRIAL
6
1 HISTÓRICO Ao lermos à palavra robótica imediatamente nós nos lembramos dos robôs mecanismos construídos em metal, semelhantes aos seres humanos e obedientes aos seus comandos. Ainda que instintivamente relacionemos os robôs aos seres humanos, podemos afirmar que a aparência de um robô industrial é muito diferente da do homem. Os robôs industriais foram projetados tendo como referência apenas uma parte do corpo humano, o membro superior (braço), capaz de executar diversos movimentos.
Características Antropomórficas
7
Características Antropomórficas do robô KUKA Segundo a Robotic Industries Association (RIA), robô industrial é definido como um "manipulador multifuncional reprogramável, projetado para movimentar materiais, partes, ferramentas ou peças especiais, através de diversos movimentos programados, para o desempenho de uma variedade de tarefas” (RIVIN, 1988). Uma definição mais completa é apresentada pela norma ISO (International Organization for Standardization) 10218: "uma máquina manipuladora com vários graus de liberdade, controlada automaticamente, reprogramável, multifuncional, que pode ter base fixa ou móvel, para utilização em aplicações de automação industrial". Porém, o termo robótica refere-se ao estudo e à utilização de robôs. O termo surgiu pela primeira vez pelo cientista americano e escritor, Isaac Asimov que escreveu prodigiosamente sobre uma vasta diversidade de disciplinas e objetos, ficando célebre pelos seus trabalhos de ficção científica. A palavra robótica foi usada pela primeira vez em uma pequena estória publicada em 1942. Tomado como provável que os robôs viessem a ter inteligência, Isaac Asimov formulou três leis, às quais acrescentou, posteriormente, uma quarta, a "lei zero".
8
1.1 LEIS DA ROBÓTICA Lei Zero:Um robô não pode causar mal à humanidade ou, por omissão, permitir que a humanidade sofra algum mal, nem permitir que ela própria o faça. Lei 1:Um robô não pode ferir um ser humano ou, por omissão, permitir que um ser humano sofra algum mal. Lei 2:Um robô deve obedecer às ordens que lhe sejam dadas por seres humanos, exceto nos casos que em tais ordens contrariem a Primeira Lei. Lei 3:Um robô deve proteger sua própria existência, desde que tal proteção não entre em conflito com a primeira e a segunda leis. A robótica tem como objetivo a automatização de tarefas que podem ser executadas pelo homem. Por sua vez, a palavra robô deriva do checo e significa trabalhador forçado. O termo, com a atual interpretação, foi inventado pelo escritor Checoslovaco, Karel Capek, em 1920. De uma forma simplista, um robô é uma máquina que, capaz de ações independentes, realiza uma dada tarefa, sem ser continuamente supervisionado por um operador humano, em contraste com uma máquina comandada à distância que necessita de alguém para controlar o seu movimento. É comum chamar de autômato a todo o tipo de robô, tentando generalizar um nome que teve a sua origem em bonecos mecânicos altamente sofisticados e implementados no século XVII. O desenvolvimento tecnológico da microeletrônica, acompanhado do freqüente avanço do software, linguagens e programas de computador, coloca-nos perante a chamada "Inteligência Artificial" num estágio já muito evoluído, que permite que um computador adquira conhecimentos da sua própria experiência, o que faz parecer que um robô se comporta com inteligência. Contudo um robô não pode pensar como nós fazemos. É bem possível que algo que hoje vemos em filmes de ficção científica num futuro, quem sabe próximo, poderemos ver na vida real.
9
2 CONCEITOS PRINCIPAIS 2.1 GRAUS DE LIBERDADE Os graus de liberdade (GL) determinam os movimentos do braço robótico no espaço bidimensional ou tridimensional. Cada junta define um ou dois graus de liberdade, e assim, o número de graus de liberdade do robô é igual a somatória dos graus de liberdade de suas juntas. Por exemplo, quando o movimento relativo ocorre em um único eixo, a junta tem um grau de liberdade; caso o movimento se dê em mais de um eixo, a junta tem dois graus de liberdade. Observa-se que quanto maior a quantidade de graus de liberdade, mais complicadas são a cinemática, a dinâmica e o controle do manipulador. O numero de graus de liberdade de um manipulador está associado ao número de variáveis posicionais independentes que permitem definir a posição de todas as partes de forma unívoca. Os graus de liberdade indicam o quanto um robô pode se mover no espaço sem as restrições. Um robô totalmente livre sem as restrições apresenta 6 graus de liberdade. Na medida em que adicionamos as restrições estes graus de liberdade vão diminuindo até o robô ficar totalmente fixo. Os seis movimentos possíveis são: •
1 movimento linear para os eixos X, Y e Z .
•
1 movimento rotacional para os eixos A, B e C.
10
2.2 TIPOS DE JUNTAS OU EIXOS Os braços de robôs podem ser formados por três tipos de juntas: •
Juntas deslizantes;
•
Juntas de rotação;
•
Juntas de encaixe esférico.
A maioria dos braços dos robôs é formada pelas juntas deslizantes e de revolução, embora alguns incluam o de bola e encaixe. A seguir será descrito cada um destes tipos de juntas. Juntas deslizantes Este tipo de junta permite o movimento linear entre dois vínculos. É composto de dois vínculos alinhados um dentro do outro, onde um vínculo interno escorrega pelo externo, dando origem ao movimento linear.
11
Juntas de rotação Esta conexão permite movimentos de rotação entre dois vínculos. Os dois vínculos são unidos por uma dobradiça comum, com uma parte podendo se mover num movimento cadenciado em relação à outra parte. As juntas de rotação são utilizadas em muitas ferramentas e dispositivos, tal como tesouras, limpadores de pára-brisa e quebra-nozes. Podem ser do tipo dobradiça ou eixo rotativo.
Junta de encaixe esférico Estas juntas são usadas em um pequeno número de robôs, devido à dificuldade de ativação. De qualquer maneira, para se ter a performance de uma junta de encaixe esférico, muitos robôs incluem três juntas rotacionais separadas, cujos eixos de movimentação se cruzam em um ponto.
12
2.3 VOLUME DE TRABALHO É o espaço dentro do qual o robô pode manipular a extremidade de seu punho (o efetuador). Em hipótese alguma poderá haver funcionários nesta região enquanto o robô estiver em funcionamento, evitando-se desta maneira acidentes. Alguns autores e fabricantes usam a expressão ‘Envelope de Trabalho’ para esta característica. A figura a seguir apresenta alguns exemplos:
Os catálogos de fabricantes de robôs normalmente ilustram os volumes de trabalho por diagramas, tais como, os mostrados abaixo, que são as vistas laterais e superiores da faixa de movimentos possíveis do robô.
13
Volume de trabalho do robô KUKA
2.4 CLASSIFICAÇÃO DOS ROBÔS INDUSTRIAIS a) Quanto à informação de de entrada e aprendizagem: aprendizagem: • Robô Seqüencial Cada passo do movimento é solicitado de uma seqüência preestabelecida. Divide-se em: - robô de seqüência fixa; - robô de seqüência programável.
14
• Robô “Play Back”, Repete a seqüência programada de movimentos, dirigindo fisicamente, ou por meio de um “Teach in Box”, a ponta do robô. • Robô NC, Programação feita com entrada de forma numérica. • Robô inteligente, O sistema robótico já dispõe de sensores externos (como visão, tato, etc.). b) Quanto aos tipos de coordenadas de movimento do braço manipulador, controlado manualmente pelo homem: •
Robô de coordenadas cartesianas;
•
Robô de coordenadas cilíndricas;
•
Robô de coordenadas esféricas ou polar;
15
•
Robô articulado;
2.5 CARACTERÍSTICAS DOS ROBÔS INDUSTRIAIS Velocidade de movimento Depende muito da estrutura mecânica do robô, de seu sistema de acionamento e sistema de controle e da carga controlada, podendo atingir valores de até 120°/s para movimentos rotacionais e até 3m/s para movimentos translacionais. Capacidade de carga ou “Payload” É o peso máximo que um robô consegue manipular mantendo as suas especificações. Nos robôs atuais esta capacidade de carga varia desde algumas gramas até aproximadamente 500 kg, dependendo do robô. Precisão de movimento A precisão de movimento é definida em função de três características: a) Resolução espacial: É o menor incremento de movimento em que o robô pode dividir seu volume de trabalho. É normalmente dependente da capacidade de carga do robô, e varia desde alguns milímetros até alguns centésimos de milímetro nos mais precisos. b) Precisão: Refere-se à capacidade de um robô de posicionar a extremidade de seu punho em um ponto meta desejado dentro de seu volume de trabalho.
16
c) Repetibilidade: É a capacidade do robô de posicionar seu punho ou órgão terminal ligado ao seu punho num ponto meta no espaço previamente indicado. 3 COMPONENTES DE UM ROBÔ INDUSTRIAL Do ponto de vista macroscópico, um sistema robótico pode ser “explodido” em três grandes componentes: •
1 - Manipulador;
•
2 - Programador;
•
3 - Controlador;
O manipulador, ou parte mecânica que apresenta liberdade de movimentos, se subdivide em cinco outros componentes: Base;
•
Braço;
•
Antebraço;
•
Punho;
•
Órgão terminal; O braço determina o alcance do órgão terminal no espaço “euclidiano”, enquanto o punho, sua orientação. •
17
O órgão terminal é escolhido em função da tarefa a ser realizada pelo robô e pode ser: •
Garra ou ventosa;
•
Tocha de solda;
•
Pistola de pintura.
O programador é responsável pela movimentação física de cada junta ou eixo do manipulador, além de acionar as juntas dos braços, do punho e vários tipos de “efetuadores”. Os dispositivos de acionamento têm a função de transformar energia elétrica, hidráulica, pneumática, ou uma combinação destas, em energia cinética para as juntas do braço, do punho e para o órgão terminal. O controlador é responsável pela coordenação e controle do movimento do Órgão Terminal, objeto principal de aplicação do robô. Sua forma mais simples consiste apenas em uma série de paradas mecânicas ajustáveis ou chaves limitadoras. Nas formas mais complexas, é necessário que o controle e a coordenação do movimento sejam efetuados por computador, que dispõe de uma memória programável, permitindo pilotar o órgão terminal ao longo de uma trajetória precisamente definida. Possibilita ainda o sincronismo com outros robôs e equipamentos periféricos (como por exemplo, esteira transportadora, prensas, aplicação de cola. Etc...).
18
4 NORMAS DE SEGURANÇA Como usar de maneira correta os robôs industriais. O aumento do número de robôs industriais devidamente utilizados nas indústrias trouxe evidente melhoria no processo produtivo tornando-nos mais competitivos nos mercados nacionais e internacionais. O ganho de qualidade nos produtos e a redução do tempo de fabricação foram os responsáveis diretos deste salto competitivo. Entretanto, toda a inovação tecnológica vem acompanhada da necessidade de mão-de-obra especializada e devidamente preparada para o convívio diário com esta tecnologia. Profissionais atuando conscientemente e adotando medidas consistentes de segurança. Afinal, por serem máquinas dotadas de grande mobilidade, flexibilidade e velocidade, devemos atentar cuidadosamente para os procedimentos relacionados à segurança das pessoas que trabalharão diretamente e também com as que eventualmente estarão nas proximidades do equipamento.
19
Risco de colisão Qual a intensidade do choque que um operador sofre numa colisão com um manipulador? Como isso não pode ser verificado na prática, foram realizados testes com corpos de prova semelhantes aos empregados em ensaios de acidentes automobilísticos. Ao submeter o corpo de prova a um choque em alta velocidade contra o manipulador de um robô tipo hidráulico de grande porte, detectou-se uma aceleração de choque de 200G. No caso de um robô tipo elétrico de porte médio, foram atingidos valores elevados, como 90G. Se o ser humano for submetido a uma aceleração de 100G, mesmo que instantaneamente, poderá ser fatal, conclui-se, então, o quão potente e perigoso é o manipulador de um robô. Testes realizados com corpos de prova
Robôs de grande porte desenvolvem uma aceleração de choque de 200G; robôs de porte médio, 90G (O ser humano corre risco de morte com 100G). Exemplos típicos de acidente É freqüente a ocorrência de acidentes no uso de máquinas automáticas e de sistemas automáticos de produção industrial. Esses acidentes podem ser, de maneira geral, classificados de acordo com seis exemplos seguintes: 1
O operador opera incorretamente a máquina e sofre o acidente;
20
2 Na ocorrência de um problema durante a operação da máquina automática, o operador tenta inadvertidamente fazer o reparo, introduzindo a mão ou entrando na área de risco, vindo a colidir com a parte móvel e sofrendo o acidente; 3 O operador, sem perceber que a máquina automática estava em operação, entra na linha de produção automática sem nenhuma proteção. É atacado por um movimento de uma direção não perceptiva, sofrendo um acidente; 4 Durante uma parada momentânea da máquina automática (em espera), o operador detecta um problema e resolve repará-lo, achando que a máquina está em repouso; quando é atingido por uma parte móvel, sofre o acidente; 5 Por um defeito no controlador, a máquina automática sai repentinamente do estado de repouso e, devido a um movimento descontrolado e na impossibilidade de ser paralisada, acaba causando acidente; 6 Devido a um defeito no dispositivo de segurança, a máquina automática não é paralisada e acaba ocasionando um acidente. Exemplos de acidentes a) Uma pessoa que estava treinando, querendo aproveitar às 3 horas do intervalo de descanso para estudos práticos junto ao robô, penetra na área de ação do robô de solda.
21
Quando o operador responsável retorna ao local, aciona o botão de operação sem perceber a presença dessa pessoa na área de ação, prensando o treinando.
b) Um robô, para descarte de item defeituoso que surge em uma correia transportadora, deixa cair uma peça. Percebendo isso, o operador tenta retirar a peça entrando na área de ação sem antes paralisar o robô. O operador acaba prensado entre a correia transportadora e o manipulador.
c) Para inspecionar o processo de MC (machining center, centro maquinário), o operador paralisa a linha automática de produção no modo bloqueio. Depois de constatar que todas as máquinas no seu campo de visão estão paradas, o operador entra na área de produção quando é atingido por um robô de carregamento aéreo.
22
d) Devido a uma falha no processo, o operador percebe que todas as máquinas ficaram paralisadas e sobe na correia transportadora para remover a peça defeituosa com as duas mãos. Quando a peça é removida, a chave de limite de carga (limit switch) do robô, acoplada à correia transportadora, é acionada e o operador fica comprimido pelas costas, entre o braço do robô e a correia transportadora.
23
e) Por um defeito no controlador, a máquina automática sai repentinamente do estado de repouso e, devido a um movimento descontrolado e na impossibilidade de ser paralisada, acaba causando acidente.
24
f) Enquanto o operador executava um processo de instrução de um robô em baixa velocidade, utilizando um teaching box (painel de instrução), um ruído eletromagnético gerado por faíscas de solda interfere no controlador, fazendo o manipulador trabalhar em alta velocidade, provocando acidente.
g) Durante a limpeza diária, o operador abre a porta e entra na área cercada do robô. Devido a uma falha na chave de segurança, o robô não é paralisado e causa o acidente.
25
Mesmo circundando a área de ação do robô com uma cerca de segurança, deve-se confirmar a paralisação do robô antes da aproximação do operador. Para isso, geralmente se instala uma chave de segurança na porta, de modo que o robô sempre seja paralisado assim que a porta é aberta, num modo interlock. A implementação deve ser tal que a paralisação do robô seja garantida mesmo em casos de falha na chave de segurança. Os exemplos anteriores evidenciaram-nos uma série de possíveis acidentes, e que devemos observar todos os quesitos relacionados à segurança sempre que o trabalho com os robôs ou equipamentos automáticos fizer-se necessário. Devemos dispensar toda atenção possível ao interagirmos com estes equipamentos, e os mesmos cuidados deverão ser observados pelos projetistas no desenvolvimento e implantação de sistemas robotizados. Um pequeno erro humano pode acabar num grave acidente causado pelo robô. Entretanto, não sendo possível eliminar totalmente as falhas humanas, torna-se necessário e importante incorporar dispositivos de segurança no controlador para que o robô seja paralisado quando for detectada a entrada do operador na área de ação. Para sua implementação, utilizam-se dispositivos de segurança junto ás portas como sensores ópticos, esteiras de segurança e os sensores de ultra-som. Entretanto, se o próprio dispositivo de segurança vier a falhar a presença humana não poderá ser detectada o que incorrerá num acidente. Uma vez que mesmo os dispositivos de segurança são susceptíveis a falha, é importante projetar o sistema de tal forma que o robô seja paralisado mesmo na falha de um dos dispositivos de segurança. Um sistema de segurança à prova de falhas (safe fail) é primordial para a segurança no trabalho.
26
Exemplo de célula de segurança
Para minimizar os riscos de acidentes de colisão em células com robô, é padrão o procedimento de montar uma cadeia de segurança para trabalho na célula, que é dividida em partes: Área de trabalho É a área de atuação do manipulador, onde o robô pode se movimentar devendo seu acesso permanecer restrito, para evitar riscos de colisão. Esta área deve ser cercada com grades de proteção ou protegida através de fotocélulas. Operadores e equipe de manutenção devem permanecer na área somente quando são executados reparos na célula, devendo para isso acionar a parada de emergência, ou ligar o robô em modo manual. Travas de segurança (fotocélulas ou grades de proteção) São dispositivos que quando atuados, bloqueiam o movimento do robô, acionando comando de emergência. Como padrão existe uma porta de entrada na célula, que possui uma chave fim de curso que quando a porta é aberta, aciona o comando de emergência.
27
Botões de emergência São botões de comando dos operadores, que bloqueiam imediatamente o robô caso sejam acionados. Existem nos painéis de comando da célula, no painel de comando do robô, na unidade de programação e em alguns casos em pontos estratégicos da célula. Botões de emergência e botões de homem morto na unidade de programação Ambos param o robô sendo usados somente quando o robô esta sendo programado. Modo de operação manual ou automático com velocidade reduzida. Quando robô esta sendo programado, ele roda no modo manual, obedecendo aos comandos da unidade de programação. Para teste inicial, a velocidade de robô é reduzida para evitar riscos.
28
CAPÍTULO 2 – MODO DE AJUSTAGEM
29
1 PROGRAMADOR (VKCP) Visão Frontal O VKCP (Volkswagen KUKA Control Panel) é uma unidade manual de programação para o sistema do robô. O VKCP dispõe de todas as funções necessárias à operação e à programação do sistema de robô.
30
Visão traseira
31
2 PAINEL DE OPERAÇÃO KUKA.IHM Statuskeys, menukeys, softkeys
32
Janela de superfície operacional
33
Barra de estado
34
3 SISTEMAS DE COORDENADAS
35
Sistema de coordenadas WORD ou MUNDIAL O sistema de coordenadas WORLD é um sistema de coordenadas cartesiano definido. A posição predeterminada do sistema de coordenadas WORLD é na base do robô.
Sistema de coordenadas BASE O sistema de coordenadas BASE é um sistema de coordenadas cartesiano que descreve a posição da peça. Ele refere-se ao sistema de coordenadas WORLD. Como ajuste predefinido, o sistema de coordenadas BASE é idêntico ao sistema de coordenadas WORLD. Ele é deslocado do robô para a peça.
36
Sistema de coordenadas TOOL ou FERRAMENTA O sistema de coordenadas TOOL é um sistema de coordenadas cartesiano que está no ponto de trabalho da peça. Ele refere-se ao sistema de coordenadas BASE. Como ajuste predefinido, a origem do sistema de coordenadas TOOL encontra-se no ponto central do flange. O sistema de coordenadas TOOL é deslocado da flange do robô para o ponto de trabalho da ferramenta.
4 DESLOCAMENTO MANUAL DO ROBÔ Há 2 modos de deslocar manualmente o robô: Deslocamento cartesiano O TCP é deslocado em direção positiva ou negativa, ao longo dos eixos de um sistema de coordenadas. •
Deslocamento específico do eixo Todos os eixos poderão ser deslocados individualmente na direção positiva e negativa. •
37
Movimentando o robô
38
Deslocamento específico eixo a eixo do robô.
5 MODO DE SERVIÇO Ajuste de contraste Para o tipo de deslocamento é necessário que a seguinte statuskey seja exibida:
39
5.1 AJUSTE DA POSIÇÃO DE ZERO MECÂNICO (MASTERIZAÇÃO) Durante o ajuste o robô é transportado para a posição zero mecânica e o valor do codificador para cada eixo é memorizado. Deste modo a posição zero mecânica e a posição zero eletrônica são colocados em concordância. Só um robô ajustado pode deslocar-se para posições programadas e movimentado cartesianamente. Um robô deve ser ajustado nos seguintes casos: „ •
Ao colocar em funcionamento pela primeira vez;
•
Após reparações (p.ex. após substituir o motor ou RDW);
•
Quando o robô foi movimentado sem a unidade de comando do robô (p.ex. com o dispositivo de rotação livre);
•
Após a substituição de uma engrenagem;
•
Após uma colisão;
40
41
42
5.2 MEDIÇÃO DA FERRAMENTA (TCP) Durante a medição da ferramenta o utilizador atribui um sistema de coordenadas cartesiano (Sistema de coordenadas TOOL) a uma ferramenta montada na flange de fixação. O sistema de coordenadas TOOL tem a sua origem em um ponto definido pelo utilizador. Este se chama TCP (Tool Center Point). Normalmente o TCP é colocado no ponto de trabalho da ferramenta. Vantagens da medição da ferramenta: •
A ferramenta pode ser deslocada em linha reta, na direção de trabalho;
•
A ferramenta pode ser girada em volta do TCP, sem alterar a posição do TCP;
•
No modo de programa: A velocidade de deslocamento programada é mantida no TCP ao longo do trajeto; São memorizados os seguintes dados:
X, Y, Z: Origem do sistema de coordenadas TOOL, referente ao sistema de coordenadas da FLANGE. •
43
A, B, C: Orientação do sistema de coordenadas TOOL, referente ao sistema de coordenadas da FLANGE. •
MEDIÇÃO DA FERRAMENTA
44
MÉTODO DE MEDIÇÃO DA FERRAMENTA
45
46
5.3 ORIENTAÇÃO DA FERRAMENTA
47
48
5.4 DADOS DE CARGA DA FERRAMENTA
49
50
51
5.5 MEDIÇÃO DE BASE
52
53
CAPÍTULO 3 – MODO DE PROGRAMAÇÃO BÁSICA
54
1 ESTRUTURA DE PROGRAMAÇÃO Gestor de pastas do navegador
1.1 ESTRUTURA DE UM PROGRAMA KRL
55
1.2 POSIÇÃO HOME A posição HOME é uma posição válida para todo do programa. Normalmente ela é utilizada como primeira e última posição no programa porque ela é inequivocamente definida e não crítica. A posição HOME é predefinida e criada na unidade de comando do robô. Podem ser programadas até 9 outras posições HOME. Uma posição HOME deve cumprir os seguintes requisitos: •
•
Favorável posição inicial para a execução do programa; Favorável posição de repouso. Por exemplo, o robô não deve apresentar um obstáculo quando estiver em repouso;
56
1.3 VARREDURA A varredura é o máximo número de conjuntos de movimentos que a unidade de comando do robô calcula e planeja antes da execução do programa. O número real depende do grau de aproveitamento do computador. A varredura refere-se à posição atual do apontador de passo. O valor predefinido é 3. Entre outros, a varredura é necessária para poder calcular movimentos de aproximação. Algumas instruções acionam uma parada da varredura. Instruções que influenciam a periferia, p.ex. instruções OUT fazem parte destas instruções. 1.4 TIPO DE EXECUÇÃO DO PROGRAMA O tipo de execução de programa é selecionado na barra de statuskey esquerda.
57
1.5 AJUSTAR O OVERRIDE DO PROGRAMA (POV) O override do programa é a velocidade do robô durante o deslocamento do programa.
O override do programa é exibido em porcentagem e refere-se à velocidade programada.
Aumentar ou reduzir o override na barra de statuskey direita.
2 TIPOS DE MOVIMENTOS Os seguintes tipos de movimentos podem ser programados: •
Movimento PTP;
•
Movimento LIN;
•
Movimento CIRC;
2.1 MOVIMENTO PTP Movimento PTP o robô conduz o TCP ao longo do trajeto mais rápido até o ponto de destino. Normalmente o trajeto mais rápido não é o trajeto mais curto e, portanto não é reto. Como os eixos do robô se movimentam em rotações, os trajetos em forma de arcos podem ser executados com maio rapidez do que trajetos retos.
58
A programação de um movimento PTP abrange: •
Memorizar as coordenadas do ponto de destino.
•
Configurar diversos parâmetros, p.ex. velocidade.
Formulário In line de movimento PTP
59
FIGURA DO DESLOCAMENTO DO MOVIMENTO PTP Janela de opções para os parâmetros de movimento (movimento PTP)
60
2.2 MOVIMENTO LIN Movimento LIN o robô conduz o TCP, com a velocidade definida, ao longo do trajeto mais curto, até o ponto de destino. O trajeto mais curto é sempre uma reta. A programação de um movimento LIN abrange: •
Memorizar as coordenadas do ponto de destino; „
•
Configurar diversos parâmetros, p.ex. velocidade;
Formulário In line de movimento LIN
61
62
FIGURA DO DESLOCAMENTO DO MOVIMENTO LIN
2.3 MOVIMENTO CIRC O robô conduz o TCP, com a velocidade definida, ao longo de um trajeto circular, até o ponto de destino. O trajeto circular é definido pelo ponto de partida, pelo ponto auxiliar e pelo ponto de destino. A programação de um movimento CIRC abrange: •
Memorizar as coordenadas do ponto de ajuda.
•
Memorizar as coordenadas do ponto de destino.
•
Configurar diversos parâmetros, p.ex. velocidade.
63
Formulário In line de movimento CIRC
64
FIGURA DO DESLOCAMENTO DO MOVIMENTO CIRC Janela de opções dos parâmetros de movimento (LIN E CIRC)
65
66
2.4 MODIFICAR PONTO PROGRAMADO
67
2.5 APROXIMAÇÃO
68
69
3 INSTRUÇÕES LÓGICAS
70
3.1 INSTRUÇÃO OUT
71
3.2 INSTRUÇÃO PULSE
72
3.3 INSTRUÇÃO ANOUT
73
74
3.4 INSTRUÇÃO WAIT
75
3.5 INSTRUÇÃO WAITFOR
76
CAPÍTULO 4 – PROGRAMAÇÃO AVANÇADA
77
1 METODOLOGIA DA PROGRAMAÇÃO AVANÇADA
78
2 FLUXOGRAMA
79
80
81
3 PROGRAMA KRL O software da unidade de comando KR C1 distingue entre o utilizador e o perito. O utilizador não necessita de conhecimentos acerca da sintaxe de programação, uma vez que ele cria os programas com a ajuda dos menus. Sempre que o sistema for iniciado, encontra--se selecionado, automaticamente, o nível de utilizador. Quando as funções do nível de utilizador se revelar insuficientes, poderá ser mudado para o nível de perito. O perito poderá então programar através do teclado ASCII na linguagem de programação de robôs KRL (KUKA Robot Language), bem como editar ficheiros de sistema ou de inicialização (sistemas de bus). KRL é uma linguagem de programação mais elevada, semelhante à linguagem PASCAL, sendo também adequada para a programação de tarefas complexas. O acesso ao nível de perito é protegido por uma senha. Para mudar para o nível de perito, acione o botão menukey “Config.” e abra um menu de seleção que contenha a opção “Grupo de utilizadores”, ao encontrar no nível de utilizador acione o botão softkey “Perito”, aparecerá o pedido de introduzir a senha de acesso ao nível de perito, que é “kuka”. NO MODO PERITO EXISTEM ARQUIVOS COM EXTENÇÃO DAT E SRC. SOMENTE OS ARQUIVOS SRC PODEM SER EDITADOS, OS ARQUIVOS DAT SÃO ARQUIVOS DE SISTEMA. 3.1 COMENTÁRIOS Os comentários são uma parte integrante muito importante de todos os programas de computador. Com a ajuda de um comentário, o programa poderá tornar mais claro e compreensível. A velocidade de processamento do programa não é influenciada pelos comentários. Os comentários poderão ser introduzidos em qualquer local do programa. São iniciados sempre com um ponto e vírgula “;”, p.ex.: PTP P1 ; Movimento para ponto de saída ; --- Fazer o reset das saídas --FOR I = 1 TO 16 $OUT[I] = FALSE ENDFOR
82
3.2 VARIÁVEIS E DECLARAÇÕES As variáveis são necessárias para a programação dos robôs industriais, p.ex., para a integração dos sensores. As variáveis permitem memorizar o valor lido pelo sensor e fazer a sua avaliação em vários locais do programa. Além disso, podem ser realizadas operações aritméticas, p.ex., para calcular uma posição nova. Uma variável é representada no programa por meio de um nome, podendo a designação do nome ser escolhida livremente, dentro de determinados limites. Os nomes em KRL: Podem ter um comprimento máximo de 12 caracteres; Podem conter letras (A--Z), números (0--9) e os caracteres ’_’e ’$’; Não podem começar com números; Não podem ser palavras chave (OUT, IN, INT, REAL); Uma variável deve ser considerada como uma área fixa da memória, cujo conteúdo é acessível através do nome da variável. Por isso, a variável é realizada em relação ao tempo de execução do programa, através de um espaço de memória (local) e um conteúdo de memória (valor). O símbolo de igualdade (=) atribui à variável valores. Assim, a instrução MENDES = 5 Implica que na área de memória com o endereço de MENDES é introduzido o valor 5.
83
3.3 TIPOS DE DADOS SIMPLES
Em KRL, poderá atribuir o numero 90 a uma variável INTEIRA de três maneiras diferentes: INT TESTE = 90 (sistema decimal) INT TESTE = ’B1011010’ (sistema binário) INT TESTE = ’H5A’ (sistema hexadecimal) 3.4 MANIPULAÇÃO DE DADOS Para a manipulação dos vários objetos de dados existe uma quantidade de operadores e funções, com a ajuda dos quais podem ser construídas fórmulas. O poder de uma linguagem de programação de robôs depende também dos objetos de dados admissíveis e das suas possibilidades de manipulação. 3.5 OPERADORES ARITMÉTICOS Os operadores aritméticos dizem respeito aos tipos de dados INTEIRO e REAL. Todos os tipos de cálculos básicos são admissíveis em KRL.
O resultado de uma operação aritmética é INT, apenas no caso de os dois operandos serem do tipo INTEIRO. Se o resultado de uma divisão (INTEIRO) não for números inteiros, a posição a seguir à vírgula é cortada. Se pelo menos um dos dois operandos for REAL, também o resultado é do tipo REAL
84
O exemplo de programa seguinte serve para a exemplificação: DEF ARITH() ;------------------------- Seção de declaração ------------------------INT A,B,C REAL K,L,M ;------------------------- Inicialização -----------------------------------;antes da inicialização todas as variáveis são declaradas A = 2 ;A=2 B = 9.8 ;B=10 C = 7/4 ;C=1 K = 3.5 ;K=3.5 L = 0.1 E01 ;L=1.0 M = 3 ;M=3.0 ;------------- Seção principal --------------------------------------------A =A *C ;A=2 B = B - ’HB’ ;B=-1 C =C +K ;C=5 K = K * 10 ;K=35.0 L = 10 / 4 ;L=2 L = 10 / 4.0 ;L=2.5 L = 10 / 4. ;L=2.5 L = 10./ 4 ;L=2.5 C = 10./ 4. ;C=3 M = (10/3) * M;M=9.0 END
3.6 OPERADORES DE COMPARAÇÃO Com a ajuda dos operadores de comparação podem ser formadas expressões lógicas. O resultado de uma comparação é sempre do tipo de dados BOOL, uma vez que uma comparação só pode ser verdadeira (TRUE) ou falsa (FALSE).
85
Exemplo: BOOL A,B B = 10 < 3 ;B=FALSE A = 10/3 == 3 ;A=TRUE B = ((B == A) <> (10.00001 >= 10)) == TRUE A = “F” < “Z” ;A=TRUE
;B=TRUE
3.7 OPERADORES LÓGICOS Os operadores destinam--se à interligação de variáveis booleanas, constantes e expressões lógicas simples, como aquelas que são formadas com a ajuda dos operadores de comparação. Assim, p.ex., a expressão (A > 5) AND (A < 12) tem o valor TRUE, apenas quando A se situa na gama entre o 5 e o 12. Estas expressões são utilizadas, freqüentemente, em instruções para o controle de execução.
Alguns exemplos em relação a interligações lógicas: BOOL A,B,C A = TRUE ;A=TRUE B = NOT A ;B=FALSE C = (A AND B) OR NOT (B EXOR NOT A) ;C=TRUE A = NOT NOT C ;A=TRUE
86
3.8 PRIORIDADES DE OPERADORES Se utilizar expressões mais complexas com vários operadores, terá de estar com atenção às diferentes prioridades dos vários operadores, uma vez que as várias expressões são executadas pela ordem da respectiva prioridade.
3.9 FUNÇÕES REGULARES Para o cálculo de determinados problemas matemáticos, já existem em KRL algumas funções regulares predefinidas. Estas podem ser utilizadas diretamente, sem declaração.
Montante A função ABS(X) calcula o montante do valor X, p.ex.: B = -3.4 A = 5 * ABS(B) ;A=17.0 Raiz quadrada SQRT(X) calcula a raiz quadrada do numero X, p.ex.: A = SQRT(16.0801) ;A=4.01
87
Seno, Coseno, Tangente As funções trigonométricas SIN(X), COS(X) e TAN(X) calculam o seno, coseno ou a tangente do ângulo X, p.ex.: A = SIN(30) ;A=0.5 B = 2*COS(45) ;B=1.41421356 C = TAN(45);C=1.0 Arco coseno A tangente de 90 e de múltiplas impares de 90 (270, 450, 630) é infinita. Por isso, a tentativa de calcular um destes valores dá origem a uma mensagem de erro. ACOS(X) é a função inversa de COS(X): A = COS(60) B = ACOS(A)
;A=0.5 ;B=60
Arco seno Para o arco seno, a função inversa de SIN(X), não há nenhuma função regular predefinida. Mas devido à relação SIN(X) = COS(90 -- X) poderá também calcular este de forma muito simples: A = SIN(60) ;A=0.8660254 B = 90-ACOS(A) ;B=60 Arco tangente A tangente de um ângulo é definida como o cateto oposto (Y) dividido pelo cateto análogo (X) no triângulo retangular. Se o comprimento dos dois catetos for conhecido, através do Arco tangente arco tangente poderá ser calculado o ângulo formado entre o cateto análogo e a hipotenusa. Ao considerar um círculo completo, são decisivos os sinais dos componentes X e Y. Se considerasse apenas o quociente, com o arco tangente só poderiam ser calculados ângulos entre os 0 ºe os 180º. É o que acontece também quando se usa uma calculadora de bolso habitual: do arco tangente de valores positivos resulta um ângulo entre os 0º e os 90º, e do arco tangente de valores negativos um ângulo entre os 90_e os 180º. Devido à indicação explícita de X e Y, o sinal destes determina claramente o quadrante, no qual se encontra o ângulo. Assim, também poderá calcular ângulos nos quadrantes III e IV. Para o cálculo do arco tangente na função ATAN2(Y,X) são também necessárias estas duas indicações, p.ex.: A B C D
= ATAN2(0.5,0.5) = ATAN2(0.5,-0.5) = ATAN2(-0.5,-0.5) = ATAN2(-0.5,0.5)
;A=45 ;B=135 ;C=225 ;D=315
88
3.10 INSTRUÇÃO DE SALTO (GOTO) A forma mais simples de ramificar um programa é a instrução de salto incondicional. Esta é executada, em qualquer dos casos, sem que haja uma reflexão sobre uma determinada condição. Com a instrução GOTO MARCA O ponteiro de programa salta para a posição MARCA. A posição também terá de ser definida com: MARCA: A instrução de salto propriamente dita não permite conclusões acerca da estrutura de programa criada desta forma. Por isso, o nome da marca de salto deverá ser escolhido de forma a que a ação de salto provocada se torne mais compreensível. Uma vez que a instrução GOTO pode dar origem, rapidamente, a programas não estruturados e confusos, e visto cada instrução GOTO poder ser substituída por uma instrução de loop, o GOTO deverá ser utilizado o menos possível. 3.11 RAMIFICAÇÃO CONDICIONAL (IF ELSE) A instrução estruturada IF permite a formulação de instruções condicionadas e a escolha entre duas alternativas. Na forma geral, a instrução é: IF condição de execução THEN Instruções ELSE Instruções ENDIF
89
A condição de execução é uma expressão booleana. Em função do valor da condição de execução é executado o primeiro bloco (bloco THEN) ou o segundo bloco de instrução (bloco ELSE). O bloco ELSE é opcional, e por isso também pode faltar. Se a condição de execução=FALSE, não é executada nenhuma instrução, continua--se com a instrução a seguir ao ENDIF. INT A,B INI IF $IN[10]==FALSE THEN PTP HOME ELSE IF A>B THEN $OUT[1]=TRUE LIN PONTO1 ENDIF A=A+1 PTP HOME ENDIF 3.12 DISTRIBUIDOR (SWITCH) Quando há mais que 2 alternativas, estas podem ser programadas através de uma construção IF ou - bastante mais simples - através do distribuidor SWITCH. A instrução SWITCH é uma instrução de seleção para vários ramos de programa. Um critério de seleção é definido por um determinado valor, antes da instrução SWITCH. Se este valor corresponder a uma identificação de bloco, é executado o respectivo ramo de programa e o programa salta para a instrução ENDSWITCH, sem considerar as identificações de bloco seguintes. Se nenhuma identificação de bloco corresponder ao critério de seleção, é executado um bloco DEFAULT, caso exista. Caso contrário, continua--se com a instrução a seguir à instrução ENDSWITCH. É permitido atribuir a um ramo de programa várias identificações de bloco. Ao contrário, não faz sentido utilizar uma identificação de bloco várias vezes, uma vez que é sempre considerado apenas o primeiro ramo de programa que tem a respectiva identificação. Os tipos de dados admissíveis do critério de seleção são INT, CHAR e ENUM. O tipo de dados do critério de dados terá de corresponder ao da identificação de bloco. A instrução DEFAULT pode faltar, mas numa instrução SWITCH poderá ser incluída apenas uma vez. Com a instrução SWITCH poderão ser ativados, p.ex., vários subprogramas, em função de um número de programa. O número de programa poderá ser enviado, p.ex., pelo PLC às entradas digitais da KR C1 Assim, este encontra--se à disposição como critério de seleção, na forma de um valor INTEIRO.
90
DEF MAIN( ) SIGNAL PROG_NR $IN[1] TO $IN[4] ;Na variável INT Nº_PROG o PLC introduz agora ;o número de programa pretendido SWITCH PROG_NR CASE 1 ;se Nº_PROG=1 TEIL_1( ) CASE 2 ;se Nº_PROG=2 TEIL_2 ( ) TEIL_2A( ) CASE 3,4,5 ;se Nº_PROG=3, 4 ou 5 $OUT[3]=TRUE TEIL_345( ) DEFAULT ;se Nº_PROG<>1,2,3,4 ou 5 ERROR_UP( ) ENDSWITCH END 3. 13 LOOP DE CONTAGEM (FOR) Os loops de contagem são executados até uma variável de contagem ultrapassar ou não atingir um determinado valor final, contando para baixo ou para cima. Para esse efeito, existe em KRL a instrução FOR. FOR contador = start TO fim STEP largura de passos instruções ENDFOR Poderá ser programado, com bastante clareza, um determinado número de passagens. Como o valor de início e valor do fim do contador e que indique sempre uma expressão do tipo INTEIRO. As expressões são avaliadas uma vez antes do início do loop. A variável INT contador (tem de ser declarada antes) é predefinida com um valor inicial, e depois de cada loop é aumentada ou reduzida pela largura de passo. A largura de passos não pode ser uma variável e não pode ser zero. Se a largura de passos não estiver indicada, ela tem o valor padrão 1. Para a largura de passos são também permitidos valores negativos. Para cada instrução FOR terá de haver uma instrução ENDFOR. Depois de terminar o último loop, o programa é continuado com a primeira instrução que se segue a ENDFOR. O valor do contador poderá ser utilizado, tanto fora como dentro do loop. Dentro dos loops, o valor do contador serve p.ex., como índex atual para a edição de campos. Depois de sair do loop, o contador fica com o último valor adotado (portanto fim+largura de passos).
91
DEF ( ) INT CONT ; declaração da variável CONT INI CONT = 0 ; atribuição do valor zero à variável CONT FOR CONT = 1 TO 5 PTP {A1 45} PTP {A2 -70,A3 50} PTP {A1 0,A2 -90,A3 90} ENDFOR END
3. 14 LOOP DE REJEIÇÃO (WHILE) O loop WHILE procura no início da repetição uma condição de repetição. Este loop é um loop de rejeição porque não é percorrido vez nenhuma, se a condição de execução não estiver já preenchida desde o início. A sintaxe do loop WHILE é: WHILE condição de execução instruções ENDWHILE A condição de execução é uma expressão lógica que poderá ser uma variável booleana, uma ativação de função booleana ou uma combinação lógica com um resultado booleano. O bloco de instruções é executado, desde que a condição lógica tenha o valor TRUE, ou seja, desde que a condição de execução esteja cumprida. Quando a condição lógica tem o valor FALSE, o programa continua com a instrução que se segue a ENDWHILE. Por isso, cada instrução WHILE terá de ser terminada com uma instrução ENDWHILE. A utilização de WHILE é explicada no exemplo: X = 1 W = 1 WHILE W < 5 ;percorrido enquanto W é MENOR que 5 X=X*W W = W + 1 ENDWHILE 3.15 LOOP DE NÃO REJEIÇÃO (REPEAT) O oposto do loop WHILE é o loop REPEAT. Com REPEAT é procurada uma condição de cancelamento, apenas no fim do loop. Assim, os loops REPEAT são percorridos, em qualquer dos casos, uma vez, mesmo quando a condição de cancelamento já se verifica antes de iniciar o loop.
92
REPEAT Instruções UNTIL condição de cancelamento A condição de cancelamento é, analogamente à condição de execução do loop WHILE, uma expressão lógica que poderá ser uma variável booleana, uma ativação de função booleana ou uma combinação lógica com um resultado booleano: INT W REPEAT PTP PALETTE $OUT[2]=TRUE PTP POS_2 $OUT[2]=FALSE PTP HOME UNTIL $IN[4] == TRUE ;percorrido até ser ativada a entrada 4 3.16 LOOP INFINITO (LOOP) Com a instrução LOOP podem ser programados loops infinitos: LOOP Instruções ENDLOOP A execução repetida do bloco de instruções só poderá ser terminada através da instrução EXIT. Qualquer loop poderá ser terminado antes do tempo, através de uma instrução EXIT. Ao ativar o EXIT dentro de um bloco de execução do loop, os percursos através dos loops são terminados de imediato, e o programa continua a seguir à instrução de loop. Se as condições de cancelamento ou execução forem escolhidas com perícia, a instrução EXIT nos loops REPEAT ou WHILE geralmente não é necessária. Para o loop infinito, EXIT representa, no entanto, a única hipótese de terminar os loops. Veja o exemplo seguinte:
93
DEF EXIT_PRO( ) PTP HOME LOOP ;Início do loop infinito PTP POS_1 LIN POS_2 IF $IN[1] == TRUE THEN EXIT ;Cancelamento, quando for ativada a entrada 1 ENDIF CIRC HELP_1,POS_3 PTP POS_4 ENDLOOP ;Fim do loop infinito PTP HOME END 3.17 TEMPOS DE ESPERA (WAIT SEC) A instrução WAIT SEC é utilizada para a programação de tempos de espera em segundos: WAIT SEC tempo Tempo é uma expressão REAL aritmética, através da qual é indicado o número de segundos, durante os quais a execução do programa deverá ser interrompida. Se o valor for negativo, a espera não se realiza. Exemplos: WAIT SEC 17.542 WAIT SEC TEMPO*4+1 4 SUBPROGRAMAS E FUNÇÕES Para reduzir o trabalho de escrita, quando se trata de seções de programa idênticas que se repetem com freqüência, e também para reduzir a extensão do programa, foram introduzidos subprogramas e funções como construções de linguagem. O efeito dos subprogramas e das funções que se faz sentir em programas mais extensos é considerável, uma vez que proporcionam a possibilidade de utilizar os algoritmos uma vez escritos em outros programas e, sobretudo, a utilização dos subprogramas na estruturação do programa. Esta estruturação poderá dar origem a uma construção hierárquica, de modo a que os vários subprogramas, ativados por um programa superior, podem executar tarefas parciais completas e fornecer os resultados.
94
4.1 SUBPROGRAMA
Um subprograma ou uma função constituem uma seção separada do programa, que dispõe de um cabeçalho de programa, uma seção de declaração e uma seção de instrução e que poderá ser ativada a partir de um local qualquer do programa principal. Depois da execução do subprograma ou da função realiza--se o regresso à instrução que se encontra a seguir à ativação do subprograma. A partir de um subprograma ou de uma função podem ser ativados outros subprogramas e/ou funções. 19 programas constituem o máximo admissível para a ativação sucessiva a partir de outros programas. Se este número for ultrapassado, é emitida a mensagem de erro “SOBRECARGA DE PROGRAMAS”. A ativação recursiva de subprogramas ou funções não é permitida. Isto significa que um subprograma ou uma função não podem ativar--se novamente a si próprios. Tal como os programas principais, são declarados também todos os subprogramas através da declaração DEF mais o nome, terminando com END, p.ex.:
4.2 FUNÇÕES Uma função é uma espécie de subprograma, mas o nome do programa é, simultaneamente, uma variável de um determinado tipo de dados. Assim, o resultado da função poderá ser transferido para uma variável, através de uma simples atribuição do valor. Na declaração das funções através da palavra chave especial DEFFCT, terá de ser indicado, além do nome da função, também o tipo de dados da função. Uma função é terminada com ENDFCT. Uma vez que uma função pretende transferir um valor, este valor terá de ser especificado através da instrução RETURN, antes da instrução ENDFCT. Exemplo:
95
DEFFCT INT FUNÇÃO( ) INSTRUÇÕES RETURN(X) ENDFCT EXEMPLO:
Há uma diferença substancial entre subprogramas ou funções locais e globais. Nos subprogramas ou funções locais, o programa principal e os subprogramas/funções encontram--se no mesmo ficheiro SRC. O ficheiro tem o nome do programa principal. No texto de origem, o programa principal encontra--se sempre em primeiro lugar, enquanto os subprogramas e funções se encontram a seguir ao programa principal, apresentando qualquer seqüência e qualquer número. Os subprogramas/funções locais só podem ser ativados dentro do ficheiro SRC no qual foram programados. Caso as ativações de subprogramas/funções devam ser possíveis também a partir de outros programas, estes terão de ser globais. Os subprogramas ou funções globais são memorizados num ficheiro SRC próprio. Assim, todos os programas ativados por outro programa (programa principal, subprograma ou função) são subprogramas.
96
Nos programas ou funções locais, são conhecidas todas as variáveis declaradas no programa principal, desde que não tenham sido declaradas com o mesmo nome novamente no subprograma ou na função. Nos subprogramas ou funções globais não são conhecidas as variáveis declaradas no programa principal. No programa principal não são conhecidas as variáveis declaradas nos subprogramas ou funções. Um programa principal não tem acesso a subprogramas ou funções locais de outro programa principal. O nome de subprogramas/funções locais pode ter um comprimento máximo de 12 caracteres. Nos subprogramas/funções globais, o nome pode ter um comprimento máximo de 8 caracteres (devido às extensões do ficheiro). DIFERENÇA ENTRE SUB-PROGRAMA E FUNÇAO LOCAL E GLOBAL
97
4.3 ATIVAÇÃO E TRANSFERÊNCIA DE PARÂMETROS
98
99
EXEMPLO: