Você está na página 1de 217

SOFTWARE

KR C...

Programação perito

KUKA System Software (KSS)


Release 4.1

Situação: 15/01/2004 Versão: 06


ProgExpPHR4.1.7 12.03.06 pt

1 de 212
e Copyright KUKA Roboter GmbH
Este documento ou extratos do mesmo não podem ser reproduzidos ou disponibilizados a terceiros sem autorização expressa do editor.
Outras funções de comando não descritas nesta documentação poderão ser postas em prática. No entanto, não está previsto qualquer tipo
de reclamação quanto a estas funções em caso de nova remessa ou de serviço.
Verificámos que o conteúdo do prospeto é compatível com o software e com o hardware descrito. Porém, não são de excluir exeções, de forma
a que não nos responsabilizamos pela total compatibilidade. Os dados contidos neste prospeto serão verificados regulamente e as correções
necessárias serão incluídas nas próximas edições.
Reservado o direito a alterações técnicas que não influenciem o funcionamento.

PD Interleaf

ProgExpPHR4.1.7 12.03.06 pt

2 de 212
Índice

1 Generalidades acerca dos programas KRL . . . . . . . . . . . . . . . . . . . . . . . . 7


1.1 Concepção e elaboração de programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Painel de programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.2 Conceito de ficheiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1.3 Estrutura de ficheiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Criar e editar programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1 Criar um programa novo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.2 Editar, compilar e vincular programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Alteração de programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.1 Correção de programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.2 Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.2.1 Funções de bloco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.2.2 Copiar (CTRL--C) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.2.3 Inserir (CTRL--V) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.2.4 Cortar (CTRL--X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.2.5 Apagar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.2.6 Procurar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.2.7 Substituir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 Ocultar partes de programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4.1 FOLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4.1.1 Programa de exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5 Modos de execução dos programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6 Tratamento de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.7 Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2 Variáveis e declarações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1 Variáveis e nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2 Objetos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.1 Declaração e inicialização de objetos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.2 Tipos de dados simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.3 Campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.2.4 Seqüências de caratéres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2.5 Estruturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2.6 Tipos de enumeração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.3 Manipulação de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.3.1 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.3.1.1 Operadores aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.3.1.2 Operador geométrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.1.3 Operadores de comparação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.3.1.4 Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.1.5 Operadores de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.3.1.6 Prioridades de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.2 Funções regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.4 Variáveis de sistema e ficheiros de sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

ProgExpPHR4.1.7 12.03.06 pt

3 de 212
Programação perito

3 Programação de movimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.1 Utilização de diversos sistemas de coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.2 Movimentos ponto--a--ponto (PTP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.2.1 Generalidades (PTP sincronizado) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.2.2 Perfil de deslocação mais elevado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2.3 Instruções de movimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.3 Movimentos de trajetória (Movimentos--CP = Continuous Path) . . . . . . . . . . . . . . . . . . . . . . 77
3.3.1 Velocidade e aceleração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.3.2 Orientação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.3.3 Movimentos lineares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.3.4 Movimentos circulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.4 Avanço do computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.5 Movimentos de aproximação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.5.1 Aproximação PTP--PTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.5.2 Aproximação LIN--LIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.5.3 Aproximação CIRC--CIRC e aproximação CIRC--LIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.5.4 Aproximação PTP -- trajetória . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.5.5 Aproximação aperfeiçoada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.5.6 Mudança da ferramenta durante a aproximação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.6 A programação (“teach”) dos pontos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.7 Parâmetros de movimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

4 Assistente KRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106


4.1 Indicações da posição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.2 Posicionamento [PTP] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
4.3 Movimento direito [LIN] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4.4 Movimento circular [CIRC] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

5 Controle de execução do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116


5.1 Ramificações de programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.1.1 Instrução de salto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.1.2 Ramificação condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.1.3 Distribuidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
5.2 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.2.1 Loop de contagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.2.2 Loop de rejeição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
5.2.3 Loop de não rejeição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
5.2.4 Loop infinito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.2.5 Terminar os loops antes do tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.3 Instruções de espera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.3.1 Espera por um acontecimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.3.2 Tempos de espera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
5.4 Paragem do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
5.5 Confirmação de mensagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

ProgExpPHR4.1.7 12.03.06 pt

4 de 212
6 Instruções de entrada/saída . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.1 Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.2 Entradas/saídas binárias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6.3 Entradas/saídas digitais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
6.3.1 Declaração do sinal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
6.3.2 Definir saídas no ponto de destino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
6.4 Saídas de impulso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
6.5 Entradas/saídas analógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.5.1 Saídas analógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.5.2 Entradas analógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.6 Entradas digitais predefinidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

7 Subprogramas e funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148


7.1 Declaração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
7.2 Ativação e transferência de parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

8 Tratamento de interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156


8.1 Declaração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
8.2 Ativação de interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
8.3 Parar movimentos em curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.4 Cancelar rotinas de interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
8.5 Utilização de flags cíclicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

9 Trigger – ações de comutação referentes à trajetória . . . . . . . . . . . . . . . 168


9.1 Ação de comutação no ponto de início ou de destino da trajetória . . . . . . . . . . . . . . . . . . . . 168
9.2 Ação de comutação em qualquer ponto da trajetória . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
9.3 Tips & Tricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.3.1 Sobreposição de instruções de trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

10 Listas de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178


10.1 Listas de dados locais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
10.2 Listas de dados globais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

11 Editor externo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182


11.1 Iniciar o editor externo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
11.2 Operação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
11.3 Menu “Ficheiro” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
11.3.1 Abrir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
11.3.2 Memorizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
11.3.3 Imprimir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
11.3.4 Fechar ficheiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
11.3.5 Terminar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
11.4 Menu “Editar” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
11.4.1 Cortar (“CTRL”--“X”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

ProgExpPHR4.1.7 12.03.06 pt

5 de 212
Programação perito

11.4.2 Copiar (“CTRL”--“C”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189


11.4.3 Inserir como ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
11.4.4 Apagar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
11.4.5 Selecionar tudo (“CTRL”--“A”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
11.5 Menu “Extras” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.5.1 Reflexo dos eixos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.5.2 Deslocação manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
11.5.3 Alteração por blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
11.5.4 Limpar lista de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
11.5.5 Adaptação TCP ou BASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
11.6 Menu “HotEdit” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
11.6.1 Base, TCP e World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
11.6.2 TTS (Sistema de coordenadas de correção) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
11.6.2.1 Ponto no TTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
11.6.3 Tolerâncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
11.6.3.1 Limits--Base/World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
11.6.3.2 Tolerâncias TTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.7 Menu “ExtExtras” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.7.1 Ficheiro -- Reflexo dos eixos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.7.2 Ficheiro -- Deslocar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
11.7.2.1 Utilizar o ficheiro de referência existente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
11.7.2.2 Criar novo ficheiro de referência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
11.7.3 Definir interruptores de fim de curso do software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
11.8 Menu “Opções” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
11.8.1 Definição de saídas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
11.9 Menu “Ajuda” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
11.9.1 Versão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
11.9.2 Sempre no primeiro plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

ProgExpPHR4.1.7 12.03.06 pt

6 de 212
1 Generalidades acerca dos programas KRL

1 Generalidades acerca dos programas KRL


1.1 Concepção e elaboração de programas
1.1.1 Painel de programa
Logo que tenha mudado para o nível de perito, o painel de operação é alterado da forma
seguinte:

Enquanto para o utilizador todos os ficheiros de sistema se mantêm invisíveis, o perito pode
ver estes ficheiros agora na janela de programas e também os pode editar. Além dos nomes
dos ficheiros e dos comentários, são também indicados no nível de perito as extensões, os
atributos e os tamanhos dos ficheiros.
Na imagem acima apresentada, os ficheiros e arquivos do caminho de “R1” são mostrados
na janela de programas.

ProgExpPHR4.1.7 12.03.06 pt

7 de 212
Programação perito

Após a instalação do software da KRC1 existem no diretório “KRC:\R1\MADA\”, normal-


mente, os ficheiros a seguir apresentados:

Ficheiro Significado
$MACHINE.DAT Lista dos dados de sistema com variáveis de sistema para a adap-
tação da unidade de comando e do robô
$ROBCOR.DAT Listagem dos dados de sistema com dados para o modelo de
dinâmica do robô
MACHINE.UPG Ficheiro de sistema para upgrades futuros
ROBCOR.UPG Ficheiro de sistema para upgrades futuros

No diretório “KRC:\R1\SYSTEM\” encontram--se os ficheiros seguintes:

Ficheiro Significado
$CONFIG.DAT Lista dos dados de sistema com dados de configuração gerais
BAS.SRC Pacote básico para o controle dos movimentos
IR_STOPM.SRC Programa para o tratamento de erros aquando do surgimento de
avarias no robô
SPS.SUB Ficheiro submit para a supervisão paralela

No diretório “KRC:\R1\TP\” encontram--se os ficheiros seguintes:

Ficheiro Significado
A10.DAT Pacote de tecnologia para a soldadura a arco com tensões de
A10.SRC comando analógicas
A10_INI.DAT Pacote de tecnologia para a inicialização da soldadura a arco com
A10_INI.SRC tensões de comando analógicas
A20.DAT Pacote de tecnologia para a soldadura a arco com números de
A20.SRC programa digitais
A50.DAT Pacote de tecnologia para a utilização do sensor do arco
A50.SRC
ARC_MSG.SRC Programa para a programação de mensagens para a soldadura
com gás de proteção
ARCSPS.SUB Ficheiro submit para a soldadura a arco
BOSCH.SRC Programa para a soldadura de pontos com interface série para o
temporizador de soldadura de pontos Bosch PSS5200.521C
COR_T1.SRC Programa para a correção da ferramenta (versão antiga)
CORRTOOL.DAT Programa para a correção da ferramenta
CORRTOOL.SRC
FLT_SERV.DAT Programa para o tratamento de erros definido pelo
FLT_SERV.SRC utilizador aquando da soldadura a arco
H50.SRC Pacote de garra
H70.SRC Pacote de Touchsensor
MSG_DEMO.SRC Programa com exemplos de mensagens de utilizador
NEW_SERV.SRC Programa para a alteração de reações de erro para FLT_SERV
P00.DAT Pacote de programa para o acoplamento a um PLC
P00.SRC

ProgExpPHR4.1.7 12.03.06 pt

8 de 212
1 Generalidades acerca dos programas KRL (continuação)

PERCEPT.SRC Programa para a ativação do protocolo PERCEPTRON


USER_GRP.DAT Programa para o comando da garra, definida pelo
USER_GRP.SRC utilizador
USERSPOT.DAT Pacote de programa para a soldadura de pontos definida pelo
USERSPOT.SRC utilizador
WEAV_DEF.SRC Programa para movimentos de oscilação á soldadura com gás
de proteção

No diretório “KRC:\R1\” encontram--se os ficheiros seguintes:

CELL.SRC Programa para o comando dos robôs através de um PLC central.


De acordo com um número de programa, é selecionado um pro-
grama de peças.

1.1.2 Conceito de ficheiro


Um programa KRL poderá ser constituído por ficheiros DAT e SRC.

Mais informações acerca da elaboração de programas encontram--se neste capítulo,


parágrafo [Criar e editar programas].

O ficheiro “SRC” é o ficheiro com o código de programa propriamente dito. Existem as


variantes DEF e DEFFCT (com valor de retorno). O ficheiro “DAT”, por outro lado, contém
os dados de programa específios. Esta divisão baseia--se no conceito de ficheiro da KRL:
Além da execução do processamento, o programa ainda contém várias ações a executar
pelo robô. Estas podem ser determinados movimentos, a abertura ou o fecho de uma ferra-
menta de garra ou mesmo execuções mais complexas, como, p.ex., o comando de uma
pinça de soldadura tendo em consideração as condições secundárias.
Para testar o programa é vantajoso ou necessário poder executar tarefas parciais individual-
mente. O conceito de ficheiro realizado na KCP está adequado às necessidades especiais
da programação de robôs.

1.1.3 Estrutura de ficheiro


Um ficheiro constitui a unidade que é programada pelo programador. Assim, um ficheiro
corresponde a um ficheiro no disco duro ou na memória (RAM). Cada programa em KRL
poderá ser constituído por um ou vários ficheiros. Os programas simples abrangem exata-
mente um ficheiro. As tarefas complexas resolvem--se melhor com um programa composto
por vários ficheiros.

Informações detalhadas acerca dos subprogramas e das funções encontram--se no pará-


grafo [Subprogramas e funções].

A estrutura interior de um ficheiro KRL é constituída por uma seção de declaração, uma
seção de instrução e por um máximo de 255 subprogramas e funções locais.

DEF O nome do objeto sem extensão é, simultaneamente, o nome do ficheiro, sendo, por isso,
indicado na declaração com DEF. O nome pode ser composto por um máximo de 24 caraté-
res, mas não poderá ser uma palavra chave (ver parágrafo [Variáveis e declarações]).
Cada ficheiro começa com a declaração “DEF” e termina com “END”:

ProgExpPHR4.1.7 12.03.06 pt

9 de 212
Programação perito

DEF NAME(X1:IN)
Declarações
Instruções
END

Declaração As declarações já são avaliadas antes do processamento do programa, ou seja, durante a


tradução. Por isso, não poderá haver nenhuma instrução na seção de declaração. A primeira
instrução constitui também o início da seção de instrução.
Instruções Ao contrário das declarações, as instruções têm um caráter dinâmico e são executadas du-
rante o processamento do programa.

Lista de Um programa de robô poderá ser constituído apenas por um ficheiro de programa ou por
dados um ficheiro de programa com a respetiva lista de dados. A lista de dados e o ficheiro
apresentam o mesmo nome, o que os identifica como conjunto. Os nomes distinguem--se
apenas pela extensão, p.ex.:
Ficheiro: PROG1.SRC
Lista de dados: PROG1.DAT

Nas listas de dados são admissíveis apenas atribuições de valores “=”. Quando a
lista de dados e o ficheiro apresentam o mesmo nome, as variáveis declaradas na lista de
dados podem ser utilizadas da mesma forma que as variáveis declaradas no ficheiro SRC.

Informações detalhadas acerca deste assunto encontram--se no parágrafo [Listas de


dados].

ProgExpPHR4.1.7 12.03.06 pt

10 de 212
1 Generalidades acerca dos programas KRL (continuação)

1.2 Criar e editar programas


1.2.1 Criar um programa novo
Uma vez que um programa de robô também poderá ser escrito sem lista de dados, a nível
de perito o ficheiro e a lista de dados não são criados automaticamente em simultâneo. Para
criar um programa prima a softkey “Novo”. Surge a janela seguinte:
Seleção de template
Nome de fich. Comentario de filtro

Escolha um template

Terá de selecionar um template. Use as teclas de seta e confirme com a softkey “OK“ ou
com a tecla Enter.

Os templates disponíveis não poderão ser criados em todos os diretórios.

Mais informações acerca dos templates encontram--se no Manual de operação na


documentação Operação, capítulo [Navigator], parágrafo [Anexo].

Os vários templates ao pormenor:


Modul:
É criado um ficheiro SRC e DAT que contém uma estrutura base de um programa.
Expert:
É criado um ficheiro SRC e DAT que contém apenas a linha de cabeçalho DEF¼ e END.
Cell:
Aqui é criado apenas um ficheiro SRC que contém uma estrutura base de um programa.
Este programa destina--se ao comando do robô por meio de um PLC central.
Function:
Aqui é criada uma função (ficheiro SRC) que contém a linha de cabeçalho DEF¼ e END.
Submit:
É criado um ficheiro SUB com uma estrutura base de programa. O ficheiro submit con-
tém instruções e poderá ser usado, p.ex., para o supervisionamento cíclico (garra etc.).
O ficheiro submit trabalha paralelamente ao funcionamento do robô e é executado pelo
interpretador da unidade de comando.
Expert Submit:
Como no template submit, é criado um ficheiro SUB, mas que contém apenas a linha de
cabeçalho DEF¼ e END.

A linha de cabeçalho DEF¼ e END e as estruturas de programa dos vários templates en-
contram--se, p.ex., para o template cell, em C:\KRC\ROBOTER\TEMPLATE\CellVorga-
be.src”.

ProgExpPHR4.1.7 12.03.06 pt

11 de 212
Programação perito

Depois de ter sido selecionado o respetivo template, será solicitado a introduzir um nome
para o ficheiro criado.

Nome de ficheiro Extensão do ficheiro Comentário


(máx. 24 caratéres) (SRC, DAT ou SUB)

O único elemento absolutamente obrigatório é o nome de ficheiro que poderá apresentar um


máximo de 24 caratéres. A extensão do ficheiro é inserida automaticamente. Se quiser inse-
rir um comentário, use a tecla de seta para a direita e mova o cursor até ao respetivo campo e
depois introduza o texto pretendido.
Para confirmar estas entradas prima a softkey “OK“ ou a tecla Enter.

A lista de dados é obrigatória, quando também pretende introduzir no seu ficheiro SRC
instruções guiadas por menus.

1.2.2 Editar, compilar e vincular programas


Depois de ter elaborado um ficheiro ou uma lista de ficheiros através da softkey “Novo”,
poderá editá--lo. Para esse efeito é usada a softkey “Abrir”. Ao fechar o editor, é compilado
o código de programa completo, isto é, o código de KRL textual é traduzido numa linguagem
de máquina compreensível para a unidade de comando.

Para que o programa se mantenha bem legível, é necessário fazer as respetivas tabula-
ções em vários níveis, p.ex., quando se trata de ramificações. No editor isto poderá ser
feito com a ajuda de espaços.
Compilador O compilador controla o código com vista à sua exatidão sintática e semântica. Caso haja
erros, é emitida uma mensagem e criado um ficheiro de erros com a extensão “.ERR”.

Apenas programas sem erros poderão ser selecionados e executados.

Mais informações acerca do tratamento de erros de edição encontram--se no parágrafo


[Tratamento de erros].

Editor de Ao carregar um programa através da softkey “Selecionar”, são vinculados todos os ficheiros
ligação e listas de dados necessários para um programa. Ao ligá--los é verificado se todos os
módulos estão presentes, analisados e sem erros. Além disso, durante uma transferência
de parâmetros, o editor de ligação verifica a compatibilidade de tipo entre os parâmetros
transferidos. Caso surjam erros durante a vinculação, é criado um ficheiro de erros com a
extensão “.ERR”, tal como na compilação.

ProgExpPHR4.1.7 12.03.06 pt

12 de 212
1 Generalidades acerca dos programas KRL (continuação)

Um programa KRL também poderá ser escrito com qualquer editor de texto usual e carre-
gado para a memória de sistema com a ajuda da softkey “Carregar”. No entanto, nesse
caso, terá de verificar por si próprio se todas as inicializações necessárias (p.ex., velocida-
des dos eixos) foram realizadas.

A seguir, um exemplo de programa simples para a definição das velocidades e acelerações


dos eixos:

DEF PROG1()

;----- Seção de declaração -----


INT J

;------ Seção de instrução -------


$VEL_AXIS[1]=100 ;Determinação das velocidades dos eixos
$VEL_AXIS[2]=100
$VEL_AXIS[3]=100
$VEL_AXIS[4]=100
$VEL_AXIS[5]=100
$VEL_AXIS[6]=100

$ACC_AXIS[1]=100 ;Determinação das acelerações dos eixos


$ACC_AXIS[2]=100
$ACC_AXIS[3]=100
$ACC_AXIS[4]=100
$ACC_AXIS[5]=100
$ACC_AXIS[6]=100

PTP {A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

FOR J=1 TO 5
PTP {A1 4}
PTP {A2 -7,A3 5}
PTP {A1 0,A2 -9,A3 9}
ENDFOR

PTP {A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}


END

ProgExpPHR4.1.7 12.03.06 pt

13 de 212
Programação perito

1.3 Alteração de programas


Basicamente, existem duas hipóteses de alterar um programa, quando o painel de operação
está em nível de perito:
G Correção de programa (PROKOR)
G Editor

1.3.1 Correção de programa


A correção de programa é o método normal. Ao selecionar um programa ou ao parar um
programa em execução, entra--se, automaticamente, no modo PROKOR.
Aqui podem ser introduzidas ou processadas instruções, com a ajuda do formulário Inline
ou do código ASCII (a nível de peritos) que têm efeito sobre uma linha de programa. Por-
tanto, não podem ser introduzidas ou editadas estruturas de controlo (loops etc.) ou decla-
rações de variáveis.
No estado selecionado, as entradas erradas são imediatamente apagadas depois da
saída da linha de programa, aparecendo na janela de mensagens uma mensagem de erro.

1.3.2 Editor
Por isso, para editar ou introduzir determinadas instruções KRL ou estruturas de programa,
será necessário o editor. Como ao fechar o editor é compilado o código completo, também
podem ser detectados erros que só surgem em relação a várias linhas (p.ex., variáveis mal
declaradas).

1.3.2.1 Funções de bloco


As funções de bloco só estão disponíveis no editor a partir do nível de utilizador “Perito”.
Terá de abrir o programa, cujo conteúdo pretende alterar por meio das funções de bloco,
através da softkey “Editar”. A maneira de mudar antes para o nível de “Perito” é descrita
no capítulo [Configurar o sistema], parágrafo “Grupos de utilizadores”.
Em primeiro lugar, coloque o cursor de edição intermitente no início ou no fim da parte de
programa que pretende deslocar. Depois mantenha premida a tecla “Shift”, enquanto move
o cursor para baixo ou para cima. Assim, está a marcar uma parte do programa que então
é processada no próximo passo de trabalho com a ajuda das funções de bloco. A parte
marcada distingue--se por meio da sua cor diferente.
Prima a menukey “Processar” e do menu que agora se abre, escolha a função pretendida.
Se o bloco de números e o campo de teclado forem usados para as funções de bloco, a
função NUM terá de estar desligada. Nesse caso, prima a tecla “Num” no teclado. A indica-
ção na linha de estado está apagada.

1.3.2.2 Copiar (CTRL--C)


A parte marcada do programa é memorizada temporariamente, a fim de estar disponível
para qualquer outro processamento. A seguir, poderá ser inserida num outro local.

ProgExpPHR4.1.7 12.03.06 pt

14 de 212
1 Generalidades acerca dos programas KRL (continuação)

Como alternativa, poderá manter premida a tecla CTRL no bloco de números e premir no
teclado a tecla C. A seguir, solte ambas as teclas.

1.3.2.3 Inserir (CTRL--V)


Coloque agora o cursor de edição no local, onde pretende introduzir a parte de programa
anteriormente “cortada” ou “copiada”.

Selecione agora a opção “Inserir”. A parte de programa anteriormente marcada é inserida


agora por baixo do cursor de edição.

Como alternativa, poderá manter premida a tecla CTRL no bloco de números e premir no
teclado a tecla V. A seguir, solte ambas as teclas.

1.3.2.4 Cortar (CTRL--X)


Se selecionar no menu a opção “Cortar”, a parte marcada do programa é introduzida na
memória temporária, ao mesmo tempo que é apagada da listagem de programa.

Como alternativa, poderá manter premida a tecla CTRL no bloco de números e premir no
teclado a tecla X. A seguir, solte ambas as teclas.

1.3.2.5 Apagar
A área marcada poderá ser removida do programa. Nesse caso, não haverá uma memoriza-
ção temporária. A parte de programa removida é irremediavelmente perdida.

ProgExpPHR4.1.7 12.03.06 pt

15 de 212
Programação perito

Por essa razão, é emitida uma pergunta de segurança na janela de mensagens que terá de
ser respondida por meio da barra de softkeys.

G Cancelar A ação “Apagar” é cancelada.


G Sim A área marcada é irremediavelmente apagada.
G Não A função “Apagar” é cancelada.

Ao selecionar no menu a opção “Apagar”, a parte marcada do programa é apagada da lista


de programas, sem memorização temporária.

1.3.2.6 Procurar

Mais informações encontram--se no Manual de operação na documentação


Programação utilizador, capítulo [Editar um programa], parágrafo [Trabalhar com o
editor de programas].

1.3.2.7 Substituir
A função “Procurar e substituir“ está disponível apenas a nível de perito e aí, exclusiva-
mente, no editor. Esta aplicação realiza uma busca no programa, com vista a encontrar uma
determinada seqüência de caratéres na área visível (não linhas de Folds ou Folds abertas)
e permite a substituição com uma determinada seqüência de caratéres definida.
Para esse efeito, selecione no menu “Processar” a opção “Substituir”.

ProgExpPHR4.1.7 12.03.06 pt

16 de 212
1 Generalidades acerca dos programas KRL (continuação)

É aberta a janela seguinte:

A barra de softkeys é alterada.

Introduza uma seqüência de caratéres na linha de localização e depois mude com a tecla
de seta para baixo, para a linha de substituição. Aí insira o termo com que pretende substituir
o termo procurado.

Se o termo procurado aparecer várias vezes no documento, mas você pretender substitui--lo
apenas num determinado local, prima a softkey “Localizar” as vezes que forem necessárias
para encontrar o local procurado. A seguir, prima “Substituir”. O termo procurado é substi-
tuído pelo termo indicado.
Se quiser substituir o termo procurado em todos os locais ou numa área previamente mar-
cada no programa, prima depois da introdução no formulário de localização/substituição a
softkey “Repor tudo”.

ProgExpPHR4.1.7 12.03.06 pt

17 de 212
Programação perito

Na janela de mensagens aparece a mensagem “A procura na área indicada ou marcada foi


concluída” (confirmação que a busca se realizou em todo o programa ou na área marcada).
Ao premir a softkey “Cancelar” sai do modo de substituição, e na janela de mensagens é
indicado o número de substituições realizadas desde a ativação desta função.

ProgExpPHR4.1.7 12.03.06 pt

18 de 212
1 Generalidades acerca dos programas KRL (continuação)

1.4 Ocultar partes de programa


Ao contrário dos editores normais, o editor KCP permite uma indicação dos conteúdos dos
programas, de acordo com as exigências específicas. Assim, o utilizador, p.ex., vê apenas os
conteúdos essenciais de um programa, enquanto a nível de perito é visível todo o programa.

1.4.1 FOLD
O painel de operação KUKA usa uma técnica especial para uma representação clara dos
programas. As indicações introduzidas na forma de comentários KRL permitem suprimir a
indicação de partes seguintes do programa. Assim, o programa é dividido em partes
adequadas que, de acordo com a sua característica tipo pasta, são denominados “FOLDS”.
As “FOLDS” estão normalmente “fechadas” e só poderão ser “abertas” a nível de perito.
Contêm informações que se mantêm invisíveis para o utilizador no painel de operação
KUKA (KUKA--BOF). A nível de perito terá a possibilidade de tornar um bloco KRL invisível
para o utilizador. Para esse efeito, as respetivas declarações ou instruções são iniciadas
com “;FOLD“ e terminadas com “;ENDFOLD”.
As “Folds” dentro de um programa poderão ser visualizadas ou ocultas, se premir a softkey
“Processar” e selecionar, a seguir, “FOLD” e o respetivo comando.

Programa no editor Programa selecionado

Estão disponíveis as opções seguintes:


G FOLD atual abr/fech abre ou fecha a FOLD da linha, na qual se
encontra o cursor de edição
G Abrir todas as FOLD abre todas as FOLDs do programa
G Fechar todas as FOLD fecha todas as FOLDs do programa

Ao fazer o reset de um programa selecionado que tem pastas abertas, estas pastas
são automaticamente fechadas.

Da seqüência...
;FOLD RESET OUT

FOR I=1 TO 16
$OUT[I]=FALSE
ENDFOR

;ENDFOLD

ProgExpPHR4.1.7 12.03.06 pt

19 de 212
Programação perito

...são visíveis no painel de operação e com a Fold fechada, apenas as palavras “RESET
OUT”. Esta instrução permite, p.ex., tornar invisível para o utilizador a parte de declaração
e a parte de inicialização.
1.4.1.1 Programa de exemplo

DEF FOLDS()

;FOLD DECLARATION;% mais informações


;--------- Seção de declaração ---------
EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME
INT I
;ENDFOLD

;FOLD INITIALISATION
;---------- Inicialização ---------
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 ) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
FOR I=1 TO 16
$OUT[I]=FALSE
ENDFOR
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}
;ENDFOLD

;------------- Seção principal ------------


PTP HOME ;Movimento SAK
LIN {X 540,Y 630,Z 1500,A 0,B 90,C 0}
PTP HOME

END

O programa de exemplo tem o seguinte aspeto no painel de operação:

O mesmo programa com Folds abertas:

ProgExpPHR4.1.7 12.03.06 pt

20 de 212
1 Generalidades acerca dos programas KRL (continuação)

Na FOLD fechada só é visível a expressão a seguir à palavra chave “FOLD”. Na FOLD


aberta, ao contrário, são visíveis todas as instruções e declarações.

“FOLD” constitui apenas uma instrução para o editor. O compilador interpreta as instru-
ções FOLD como um comentário normal, devido ao ponto e vírgula colocado antes.

ProgExpPHR4.1.7 12.03.06 pt

21 de 212
Programação perito

1.5 Modos de execução dos programas


Os modos de execução dos programas determinam se o processamento do programa
deverá ser realizado
G sem parada do programa,
G em passos de programa ou
G em passos individuais.
Na tabela seguinte são descritos todos os tipos de execução dos programas.

Modo de Descrição
execução
GO
Todas as instruções são processadas no programa sem STOP, até
ao fim do programa.

MSTEP Motion Step (passo de movimento)


O programa é executado passo a passo, isto é, o programa pára
após cada passo de movimento.
O programa é processado sem avanço inicial.
ISTEP Inkremental Step (passo individual)
O programa é executado em passos individuais, isto é, com um
STOP depois de cada instrução (também linha vazia).
O programa é processado sem avanço inicial.
PSTEP
Program Step (passo de programa)
Os subprogramas são executados por completo.
O programa é executado sem avanço inicial.

CSTEP Continuous Step (passo de movimento)


O programa é executado passo a passo, isto é, o programa pára
após cada passo de movimento com parada exata.
O programa é executado com avanço inicial, isto é, realiza--se
uma passagem por todos os pontos com um posicionamento
aproximado.
Os modos de execução do programa GO, MSTEP e ISTEP podem ser ajustados na KCP
por meio de uma statuskey ou através da variável $PRO_MODE”. PSTEP e CSTEP só po-
dem ser ajustados através da variável “$PRO_MODE”. Para alterar o respetivo estado, ative
a função de menu “Display” --> “Variável” --> “Individual”. A seguir, introduza no campo de
entrada “Nome” a variável “$PRO_MODE” e no campo “Valor novo” o valor pretendido.

ProgExpPHR4.1.7 12.03.06 pt

22 de 212
1 Generalidades acerca dos programas KRL (continuação)

Os modos de execução do programa “#PSTEP” e “#CSTEP” só poderão ser selecionados


por meio da correção de variável e não através da statuskey.

Mais pormenores encontram--se no capítulo [Variáveis e declarações], parágrafo


[Objetos de dados], em (Tipos de enumeração).

ProgExpPHR4.1.7 12.03.06 pt

23 de 212
Programação perito

1.6 Tratamento de erros


Caso surja um erro durante a compilação ou durante a ligação, aparece na janela de men-
sagens uma mensagem de erro e caso surja um erro, o ficheiro que contém os erros é
identificado no Navigator.

Como exemplo temos o ficheiro “ERROR.SRC” que foi elaborado com erros:

Depois de fechar o editor, aparece agora na janela de mensagens uma mensagem de aviso
com o número de erros verificados.

Ao mesmo tempo, os ficheiros em questão são marcados durante este processo com uma
cruz vermelha.

Você tem à sua disposição a barra de softkeys seguinte:

A softkey “Abrir” carrega o ficheiro para o editor, e ao premir a softkey “Lista de dados”, o
ficheiro DAT é aberto com o editor. Se quiser apagar os ficheiros que contêm os erros, prima
“Apagar”. Com “Novo” poderá criar então um ficheiro novo.

ProgExpPHR4.1.7 12.03.06 pt

24 de 212
1 Generalidades acerca dos programas KRL (continuação)

Ao premir a softkey “Editar ERR” (“Lista de erros”) é aberta a lista de erros.

Indicação de erro (error.SRC) Linha de título com o nome do ficheiro


Linha Coluna No de erro Descrição
Tipo de variável...
Expressão diferente...
Espera--se ’[’
Descrição resumida

Número de erro

*1
Número da linha e coluna que contêm
o erro

Linha de origem que contém o erro


Tipo de variável de loop diferente de INT Descrição do erro = Descrição resumida

Assim, muda a barra de softkeys:

AVISO
*1 Os números de linha indicados correspondem aos números de linha absolutos no
programa, tal como seriam indicados por um editor ASCII normal. A fim de obter
uma correspondência entre os números de linha da indicação de erro e os
números de linha do KCP, teriam de ser abertas todas as pastas e ativadas a vista
de pormenores e a linha DEF. No entanto, esta apresentação é pouco clara, uma
vez que são visualizadas todas as informações, apesar de não serem
necessárias. Mais informações acerca da vista de pormenores e da linha DEF
encontram--se no parágrafo [Ocultar partes de programa].

Na indicação de erros é visível que ocorreram os erros seguintes:


G 3 linhas no ficheiro SRC contêm erros;
G as linhas que contêm erros são as linhas com os números 51, 52 e 55;
G na linha 51 os números dos erros
-- 2263: tipo da variável de laço não igual a INT;
G na linha 52 o número de erro
-- 2249: Expressão não igual a INT;
G na linha 55 a mensagem de erro
-- 2309: espera--se o caráter “(”.
Das mensagens de erro “2263” depreende--se rapidamente que a variável I não foi decla-
rada como número inteiro. A mensagem de erro 2249 também resulta da declaração com
erros, uma vez que num ciclo de contagem o contador deve ser sempre do tipo INT. A
mensagem “2309” significa: O compilador interpreta a linha como ativação do subprograma
onde faltam, no entanto, os parênteses.

ProgExpPHR4.1.7 12.03.06 pt

25 de 212
Programação perito

O significado dos números dos erros poderá ser visualizado Online com a ajuda da função
de menu “Display” --> “Variável” --> “Individual”. Para esse efeito, introduza na janela de
estado, no campo de entrada “Nome”, o caráter “&” seguido pelo número de erro que,
nesse caso, é, p.ex, “&2263”, e prima a tecla Enter.

Se carregar agora o ficheiro SRC (neste caso “ERROR.SRC”) para o editor, poderá proce-
der às respetivas correções. Para simplificar, o cursor a piscar é posicionado na primeira
linha que contém erros.Verifique se a visibilidade limitada está desligada e a linha DEF visí-
vel. Mais pormenores encontram--se no parágrafo [Ocultar partes de programa].
No exemplo aqui apresentado, as Folds não precisam de ser abertas. Mas se quiser abri--
las, use a instrução de menu “Editar” --> “FOLD” --> “Abrir todas as FOLD”.

A linha “INT I” que falta no programa inicialmente criado terá de ser inserida antes da
linha “INI”. Isto só é possível quando a linha “DEF ERROR ( )” for visível.

Portanto, insira a linha


INT I
antes da linha INI e remova na linha 10 um símbolo de igualdade.
I = I + 1

Inserir esta linha aqui

Remover um símbolo
de igualdade

Depois de fechar o editor e de guardar o ficheiro corrigido, poderá premir na lista de erros a soft-
key “Atualizar”. A lista de erros desaparece depois de todos os erros estarem corrigidos.

ProgExpPHR4.1.7 12.03.06 pt

26 de 212
1 Generalidades acerca dos programas KRL (continuação)

1.7 Comentários
Os comentários constituem uma parte integrante muito importante de qualquer programa de
computador. Eles tornam o seu programa mais claro e compreensível também para outros.
A velocidade de processamento do programa não é afetada pelos comentários.
Os comentários poderão ser inseridos em qualquer local do programa. São iniciados sempre
com um ponto e vírgula “;”, p.ex.:
¼
PTP P1 ;Movimento em direção ao ponto de saída
¼
;--- Fazer o reset das saídas ---
FOR I = 1 TO 16
$OUT[I] = FALSE
ENDFOR
¼

ProgExpPHR4.1.7 12.03.06 pt

27 de 212
Programação perito

ProgExpPHR4.1.7 12.03.06 pt

28 de 212
2 Variáveis e declarações

2 Variáveis e declarações
2.1 Variáveis e nomes
Além da utilização de constantes, ou seja, de uma indicação direta dos valores na forma de
números, caratéres etc., podem também ser utilizadas em KRL variáveis e outras formas
de dados no programa.
Para a programação de robôs industriais, as variáveis são necessárias, 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.

Nomes Os nomes em KRL

S podem ter um comprimento máximo de 24 caratéres,


S podem conter letras (A--Z), números (0--9) e os caratéres ’_’ e ’$’,
S não podem começar com números,
S não podem ser palavras chave.

Uma vez que todas as variáveis de sistema (ver parágrafo 2.4) começam com o símbolo
’$’, este não deverá ser usado como o primeiro símbolo em nomes definidos por você
próprio.

Nomes KRL válidos são, p.ex.;


SENSOR_1
BICO_DE_COLAGEM13
P1_ATÉ_P12
Uma variável deve ser considerada como uma área fixa da memória, cujo conteúdo é aces-
sí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).
Atribuição de O símbolo de igualdade (=) atribui às variáveis valores. Assim, a instrução
valor
NÚMERO = 5
implica que na área de memória com o endereço de NÚMERO é introduzido o valor 5. O
aspeto exato do endereço não é relevante para o programador, por isso, o compilador
atribui--o automaticamente. Apenas é relevante que o seu nome dá acesso, a qualquer
momento, ao conteúdo da memória no programa.
Uma vez que objetos de dados diferentes (ver parágrafo 2.2) também têm uma necessidade
de memória diferente, o tipo de dados de uma variável tem de ser declarado antes da sua
aplicação (ver parágrafo 2.2.1).

ProgExpPHR4.1.7 12.03.06 pt

29 de 212
Programação perito

Tempo de vida O tempo de vida de uma variável é o tempo durante o qual é atribuído à variável um espaço
de memória. O tempo de vida depende do fato de a variável estar declarada num ficheiro
SRC ou numa lista de dados.
G Variável declarada num ficheiro SRC
O tempo de vida é limitado ao tempo de execução do programa. Depois de terminada a exe-
cução, a zona de memória é liberta, e, portanto, o valor da variável é perdido.
G Variável declarada numa lista de dados (ver parágrafo Listas de dados)
O tempo de vida não depende do tempo de execução do programa. A variável existe
enquanto existe a lista de dados. Estas variáveis são, portanto, permanentes (até à
ativação/desativação seguinte).

ProgExpPHR4.1.7 12.03.06 pt

30 de 212
2 Variáveis e declarações (continuação)

2.2 Objetos de dados


Por objetos de dados entendem--se unidades de memória de um determinado tipo de dados.
As unidades de memória podem ser constituídas por um numero diferente de células de
memória (bytes, palavras etc.). Se um objeto de dados deste tipo for declarado pelo progra-
mador sob um nome, é obtida uma variável. A variável ocupa agora uma ou várias células
de memória, nas quais os dados podem ser escritos ou lidos pelo programa. Devido à deno-
minação simbólica das células de memória com nomes de escolha livre, a programação
torna--se mais simples e clara, e o programa apresenta uma melhor legibilidade.
Para explicar o conceito “tipo de dados” tome--se o exemplo seguinte: Numa célula de
memória de 8 bits encontra--se a combinação de bits
00110101
Como deverá ser interpretada esta combinação de bits? Trata--se da representação binária
do numero 53 ou do símbolo ASCII “5”, o que é representado com o mesmo padrão de bits?
Para poder responder claramente a essa pergunta, ainda falta uma informação importante,
Tipo de dados ou seja, a indicação do tipo de dados de um objeto de dados. No caso acima apresentado,
isto poderia ser, p.ex., o tipo “numero inteiro” (INTEGER) ou “caráter” (CHARACTER).
Além dessa razão técnica para a introdução dos tipos de dados, relacionada com o computa-
dor, a utilização de tipos de dados também proporciona facilidades ao operador, uma vez
que este poderá trabalhar exatamente com os tipos que são adequados para as respetivas
aplicações especiais.

2.2.1 Declaração e inicialização de objetos de dados


DECL A atribuição de um nome de variável a um tipo de dados e a reserva do espaço de memória
realiza--se em KRL com a ajuda da declaração DECL. Com
DECL INT QUANTIDADE,NÚMERO
são declaradas, p.ex., duas variáveis QUANTIDADE e NÚMERO do tipo de dados “numero
inteiro” (Integer).
Assim, o compilador reconhece estas duas variáveis e o respetivo tipo de dados, e durante
a aplicação da variável poderá verificar se este tipo de dados permite a operação pretendida.
A declaração começa, como mostra o exemplo, com a palavra chave DECL, seguida pelo
tipo de dados e pela lista de variáveis que deverão ter este tipo de dados.

Ao declarar variáveis e campos de um tipo de dados previamente definido, poderá


prescindir--se da palavra--chave DECL. Além dos tipos de dados simples INT, REAL,
CHAR e BOOL (ver parágrafo 2.2.2) são também predefinidos, entre outros, os tipos de
dados estruturais POS, E6POS, FRAME, AXIS e E6AXIS (ver parágrafo 2.2.5).
Para as variáveis (não campos!) do tipo de dados POS, poderá prescindir--se da
declaração completa. O tipo de dados POS é considerado o tipo de dados padrão para
variáveis. A palavra--chave DECL é imprescindível para a declaração de tipos de estrutura
ou de enumeração de definição livre (ver parágrafo 2.2.5 e 2.2.6).

Inicialização Depois da declaração de uma variável, o valor desta é colocado, primeiramente, em inválido,
caso contrário ia depender da ocupação ocasional da memória. Para poder trabalhar com
a variável, esta terá de ser predefinida com um determinado valor. Esta primeira atribuição
de um valor a uma variável chama--se inicialização.

Ao elaborar ficheiros novos através da softkey “Novo” no painel de operação KUKA, é


também produzida automaticamente uma seqüência INI. A declaração de variáveis terá
de ser sempre realizada antes dessa seqüência.
A atribuição de um valor a uma variável constitui uma instrução e, por isso, não pode estar,
nunca, na seção de declaração. Mas a inicialização poderá ser realizada, em qualquer
momento, na seção de instrução. No entanto, é vantajoso se todas as variáveis declaradas
forem inicializadas numa seção de inicialização, diretamente a seguir à seção de declaração
(ver Fig. 1).

ProgExpPHR4.1.7 12.03.06 pt

31 de 212
Programação perito

Só nas listas de dados é permitido inicializar as variáveis diretamente na linha de declaração.

DEF NOME()

;---- Seção de declaração ----


¼

;---- Seção de inicialização ----


¼

;---- Seção de instrução ----


¼

END

Fig. 1 Estrutura base de um programa de robô

Mais informações encontram--se no capítulo [Listas de dados].

ProgExpPHR4.1.7 12.03.06 pt

32 de 212
2 Variáveis e declarações (continuação)

2.2.2 Tipos de dados simples


Por tipos de dados simples entendem--se alguns tipos de dados básicos que existem na
maioria das linguagens de programação. Os tipos de dados simples contêm, ao contrário
dos tipos de dados estruturados (ver parágrafo 2.2.3--2.2.6), apenas um único valor. Os
tipos de dados conhecidos em KRL são apresentados em Tab. 1, juntamente com a sua
respetiva gama de valores.

Tipo de dados Integer Real Boolean Character


Palavra chave INT REAL BOOL CHAR
Significado numero inteiro número de estado lógico 1 caráter
vírgula
deslizante
Gama de --231¼231-1 ±1.1E-38¼ TRUE, FALSE Caratéres
valores ±3.4E+38 ASCII

Tab. 1 Tipo de dados simples

INT O tipo de dados constitui uma quantidade parcial da quantidade de números inteiros, porque
nenhum computador é capaz de apresentar a quantidade teoricamente infinita dos números
inteiros. Os 32 bits previstos na KR C... para tipos Integer dão, portanto, 231 números intei-
ros, mais o sinal. O numero 0 conta como numero positivo.
Com
NÚMERO = -23456
é atribuído à variável NÚMERO o valor -23456.
Se atribuir a uma variável INTEGER um valor REAL, o valor é arredondado segundo as
regras gerais (x.0 a x.49 arredondar para baixo, x.5 a x.99 arredondar para cima). Com a
instrução
NÚMERO = 45.78
a variável INTEGER NÚMERO recebe o valor 46.

Exceção: Ao dividir um Integer, a posição depois da vírgula é cortada, p.ex.:


7/4 = 1

Enquanto o Homem pensa e faz contas no sistema decimal, um computador conhece


apenas os números zero e um, que representam os dois estados Desligado e Ligado. Um
estado (Desligado e Ligado) é representado, portanto, por um bit. Por razões de rapidez,
o computador recorre, geralmente, a todo um pacote de zeros e uns. 8 bits (=1 Byte), 16
bits ou 32 bits são grandezas de pacote típicas. Quando se trata de operações relacionadas
Sistema binário com a máquina, geralmente é vantajosa a representação no sistema binário (sistema de dois
Sistema números: 0 e 1) ou no sistema hexadecimal (sistema de 16 caratéres: 0--9 e A--F). Os valores
hexadecimal Integer binários ou hexadecimais poderão ser indicados em KRL com a ajuda da vírgula alta
(‘) e da indicação B para a representação binária ou H para a representação hexadecimal.

D 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
H 0 1 2 3 4 5 6 7 8 9 A B C D E F 10

Tab. 2 Os primeiros 17 números no sistema decimal e hexadecimal

Em KRL, poderá atribuir o numero 90 a uma variável Integer de três maneiras diferentes:

ProgExpPHR4.1.7 12.03.06 pt

33 de 212
Programação perito

NÚMEROINT = 90 ;sistema decimal


NÚMEROINT = ’B1011010’ ;sistema binário
NÚMEROINT = ’H5A’ ;sistema hexadecimal
Bin ® Dec O cálculo que transpõe os números binários para sistema decimal realiza--se da forma
seguinte:

1 0 1 1 0 1 0
= 1S26+0S25+1S24+1S23+0S22+1S21+0S20= 90
26 25 24 23 22 21 20

Hex ® Dec Para transferir os números do sistema hexadecimal no sistema decimal, proceda da forma
seguinte:

5 A
=5S161+10S160=90
161 160

REAL No conceito de representação da vírgula deslizante, trata--se da divisão de um numero em


mantissa e expoente e da sua representação numa forma normalizada. Assim, é represen-
tado, p.ex.:
5.3 como 0.53000000 E+01
-100 como -0.10000000 E+03
0.0513 como 0.51300000 E-01

Ao fazer cálculos com valores reais, é preciso ter em atenção, devido ao numero limitado
de posições de vírgulas deslizantes e da imprecisão inerente, que as habituais leis da álge-
bra não são válidas em todos os casos. Assim, aplica--se, p.ex., na álgebra:
1⋅3 = 1
3
Se estes cálculos forem realizados por um computador, é possível que o resultado apenas
seja 0.99999999 E+00. Uma comparação lógica deste numero com o numero 1 teria o
valor FALSE. Para aplicações práticas na área do robô, esta precisão é, geralmente,
suficiente, tendo em consideração que a realização do teste lógico relativamente à igual-
dade das grandezas reais só faz sentido dentro de uma área de tolerância pequena.
Atribuições admissíveis de variáveis reais são, p.ex.:
NÚMEROREAL1 = -13.653
NÚMEROREAL2 = 10
NÚMEROREAL3 = 34.56 E-12

Se a uma variável REAL for atribuído um valor INTEGER, é realizada uma conversão
automática do tipo em REAL. A variável NÚMEROREAL2 tem, portanto, após a atribuição
acima indicada, o valor 10.0!
BOOL As variáveis booleanas destinam--se à descrição dos estados lógicos (p.ex., entradas/
saídas). Só podem ter os valores TRUE (verdadeiro) e FALSE (falso):
ESTADO1 = TRUE
ESTADO2 = FALSE

ProgExpPHR4.1.7 12.03.06 pt

34 de 212
2 Variáveis e declarações (continuação)

CHAR As variáveis Character podem representar exatamente 1 caráter do conjunto de caratéres


ASCII. Ao atribuir um caráter ASCII a uma variável CHAR, o caráter atribuído deverá estar
entre aspas (”):
CARÁTER1 = “G”
CARÁTER2 = “?”
Para a memorização de seqüências de caratéres completas, ver parágrafo 2.2.4.

2.2.3 Campos
Por campos entende--se a junção de objetos com o mesmo tipo de dados, de modo a ser
obtido um objeto de dados, podendo os vários componentes de um campo ser ativados por
meio de índices. Através da declaração
DECL INT OTTO[7]
Índex de cam- poderá depositar, p.ex., 7 números Integer diferentes no campo OTTO[]. Poderá aceder a
po cada componente individual do campo, através da indicação do respetivo índex (o primeiro
índex é sempre o 1):
OTTO[1] = 5 ; ao 1º elemento é atribuído o numero 5
OTTO[2] = 10 ; ao 2º elemento é atribuído o numero 10
OTTO[3] = 15 ; ao 3º elemento é atribuído o numero 15
OTTO[4] = 20 ; ao 4º elemento é atribuído o numero 20
OTTO[5] = 25 ; ao 5º elemento é atribuído o numero 25
OTTO[6] = 30 ; ao 6º elemento é atribuído o numero 30
OTTO[7] = 35 ; ao 7º elemento é atribuído o numero 35
Para uma melhor compreensão, imagine o campo com o nome OTTO[] como uma estante
com 7 gavetas. Com as atribuições realizadas, a ocupação das gavetas seria a seguinte:

5 10 15 20 25 30 35

OTTO [1] [2] [3] [4] [5] [6] [7]

Fig. 2 Representação de um campo unidimensional

Se pretender inicializar todos os elementos de um campo com o mesmo número, p.ex, 0,


não terá de programar, explicitamente, todas as atribuições, mas pode “automatizar” a
predefinição com a ajuda de um loop e uma variável de contagem:
FOR I = 1 TO 7
OTTO[I] = 0
ENDFOR

Mais informações encontram--se no capítulo [Controle de execução do programa],


parágrafo [Loops].

A variável de contagem é, neste caso, a variável Integer I. Ela terá de ser declarada como
Integer antes da aplicação.

ProgExpPHR4.1.7 12.03.06 pt

35 de 212
Programação perito

S O tipo de dados de um campo pode ser escolhido livremente. Assim, os vários


elementos poderão estar constituídos de tipos de dados compostos
(p.ex., campo de campos)
S Para os índices só são admissíveis tipos de dados Integer
S Além de constantes e variáveis, para o índex são também admissíveis
expressões aritméticas (ver parágrafo 2.3.1)
S O índex conta sempre a partir do 1

2--dimens. Além dos campos unidimensionais dos quais acabamos de falar, ou seja, campos com
apenas um índex, poderá também utilizar em KRL campos bi ou tridimensionais. Com
DECL REAL MATRIX[5,4]
é declarado um campo bidimensional 5×4 com 5×4=20 elementos REAL. Para uma
melhor compreensão, imagine este campo como uma matriz com 5 colunas e 4 linhas. Com
a seqüência de programa
I[3] = 0
FOR COLUNA = 1 TO 7
FOR LINHA = 1 TO 3
I[3] = I[3] + 1
MATRIZ[COLUNA,LINHA] = I[3]
ENDFOR
ENDFOR
os elementos da matriz são definidos por um valor que corresponde à seqüência da sua
ocupação. Assim, é obtida a definição seguinte da matriz:

Plano 1

Linha 1

Linha 2
1
Linha 3 5
2 9
6 13
Linha 4 10 17
3
7 14
4 11 18
8 15
12 19
Coluna 1

16
Coluna 2

20
Coluna 3
Coluna 4
Coluna 5

Fig. 3 Representação de um campo bidimensional

ProgExpPHR4.1.7 12.03.06 pt

36 de 212
2 Variáveis e declarações (continuação)

3--dimens. E finalmente, imagine os campos tridimensionais como várias matrizes bidimensionais


sucessivas. A terceira dimensão indica, por assim dizer, o nível no qual se encontra a matriz
(ver Fig. 4). É declarado um campo tridimensional em análogo aos campos uni ou
bidimensionais, p.ex.:
DECL BOOL CAMPO_3D[5,3,4]
A seqüência de inicialização poderia ser a seguinte:
FOR PLANO = 1 TO 3
FOR COLUNA = 1 TO 5
FOR LINHA = 1 TO 4
CAMPO_3D[PLANO,COLUNA,LINHA] = FALSE
ENDFOR
ENDFOR
ENDFOR

Plano 3

Plano 2

41
Plano 1 45
42 49
21 46 53
Linha 1 25 50 57
22 29 54
Linha 2 26 33 58
1
5 30 37 55
Linha 3 34 59
2 9
6 13 38 56
Linha 4 10 17 35 60
3
7 14 39
4 11 18 36
8 15 40
12 19
Coluna 1

16
Coluna 2

20
Coluna 3
Coluna 4
Coluna 5

Fig. 4 Representação de um campo tridimensional

ProgExpPHR4.1.7 12.03.06 pt

37 de 212
Programação perito

2.2.4 Seqüências de caratéres


Com o tipo de dados CHAR poderá, como já descrito, memorizar apenas caratéres
individuais. Para a utilização de seqüências de caratéres inteiras, ou seja, de palavras, é
definido, simplesmente, um campo unidimensional do tipo CHAR:
DECL CHAR NAME[8]
Agora poderá, como habitualmente, ativar cada elemento individual do campo NAME[],
p.ex.:
NAME[3] = “G”

Mas também poderá introduzir logo seqüências de caratéres inteiras:


NAME[] = “ABCDEFG”
define os primeiros sete elementos do campo NAME[] com as letras A, B, C, D, E, F
e G:

A B C D E F G

2.2.5 Estruturas
Quando se pretende combinar vários tipos de dados, o campo não é adequado, e é preciso
STRUC recorrer a uma forma mais geral da composição. Com a instrução de declaração STRUC
podem ser combinados tipos de dados diferentes, que anteriormente foram definidos ou que
são tipos de dados predefinidos, de forma a resultar um tipo de dados compostos novo.
Particularmente também podem ser parte integrante de uma composição outras
composições e outros campos.
Um exemplo típico para a utilização de composições é o tipo de dados padrão POS. Ele é
constituído por 6 valores REAL e 2 valores INT e foi definido no ficheiro $OPERATE.SRC da
forma seguinte:
STRUC POS REAL X, Y, Z, A, B, C, INT S, T
Ponto Se utilizar agora, p.ex., uma variável POSIÇÃO do tipo de dados estruturais POS, poderá
separador definir os elementos individualmente com a ajuda do ponto separador, p.ex.:
POSIÇÃO.X = 34.4
POSIÇÃO.Y = -23.2
POSIÇÃO.Z = 100.0
POSIÇÃO.A = 90
POSIÇÃO.B = 29.5
POSIÇÃO.C = 3.5
POSIÇÃO.S = 2
POSIÇÃO.T = 6
Agregado ou em conjunto, através de um chamado agregado
POSIÇÃO={X 34.4,Y -23.2,Z 100.0,A 90,B 29.5,C 3.5,S 2,T 6}

Mais informações encontram--se no capítulo [Variáveis e declarações], parágrafo


[Declaração e inicialização de objetos de dados].

Aos agregados aplicam--se as regras seguintes:

ProgExpPHR4.1.7 12.03.06 pt

38 de 212
2 Variáveis e declarações (continuação)

S Os valores de um agregado podem ser simples constantes ou outros agregados.


S Num agregado não terão de ser indicados todos os componentes da estrutura.
S Não é necessário indicar os componentes na mesma seqüência na qual foram
definidos.
S Cada componente só pode estar contido num agregado uma única vez.
S Quando se trata de campos de estruturas, um agregado descreve o valor de um
elemento de campo individual.
S No início de um agregado pode ser indicado o nome do tipo de estrutura, separado por
dois pontos.
Portanto, as atribuições seguintes são admissíveis, p.ex., também para variáveis POS:
POSIÇÃO={B 100.0,X 29.5,T 6}
POSIÇÃO={A 54.6,B -125.64,C 245.6}
POSIÇÃO={POS: X 230,Y 0.0,Z 342.5}

Com estruturas POS, E6POS, AXIS, E6AXIS e FRAME, os componentes que


faltam não são alterados. Em todos os outros agregados, os componentes não
existentes são colocados em inválido.
O procedimento para a elaboração de variáveis com estruturas próprias é explicado com
a ajuda do exemplo seguinte:
Num subprograma referente à soldadura a arco, deverá ser transmitida numa variável
S_PARA a seguinte informação:
REAL V_ARAME Velocidade do arame
INT L_CARACT Linha característica 0...100%
BOOL ARCO Com/sem arco (para simulação)
A variável S_PARA terá de ser constituída por 3 elementos com tipos de dados diferentes.
Em primeiro lugar, é necessário definir um novo tipo de dados que preenche estes requisitos:
STRUC TIPO_SOLDAD REAL V_ARAME, INT L_CARACT, BOOL ARCO
Desta forma, foi criado um novo tipo de dados com a designação TIPO_SOLDAD
(TIPO_SOLDAD não é uma variável). TIPO_SOLDAD é composto por 3 componentes
V_ARAME, L_CARACT e ARCO. Agora poderá declarar uma variável qualquer com o novo
tipo de dados, p.ex.:
DECL TIPO_SOLDAD S_PARA
Assim criou uma variável S_PARA com o tipo de dados TIPO_SOLDAD. Os vários elementos
podem ser ativados, como já descrito, com a ajuda do ponto separador ou do agregado:
S_PARA.V_ARAME = 10.2
S_PARA.L_CARACT = 66
S_PARA.ARCO = TRUE
ou
S_PARA = {V_ARAME 10.2,L_CARACT50, ARCO TRUE}

Para poder destinguir melhor os tipos de dados das variáveis que você próprio definiu,
é vantajoso iniciar ou terminar os nomes dos novos tipos de dados com ¼TIPO.

ProgExpPHR4.1.7 12.03.06 pt

39 de 212
Programação perito

Estruturas No ficheiro $OPERATE.SRC encontram--se predefinidas as estruturas seguintes:


predefinidas
STRUC AXIS REAL A1,A2,A3,A4,A5,A6
STRUC E6AXIS REAL A1,A2,A3,A4,A5,A6,E1,E2,E3,E4,E5,E6
STRUC FRAME REAL X,Y,Z,A,B,C
STRUC POS REAL X,Y,Z,A,B,C, INT S,T
STRUC E6POS REAL X,Y,Z,A,B,C,E1,E2,E3,E4,E5,E6, INT S,T
Os componentes A1¼A6 da estrutura AXIS são valores angulares (eixos rotativos) ou
valores translatóricos (eixos translatóricos) para o deslocamento específico dos eixos 1¼6
do robô.
Através dos componentes adicionais E1¼E6 na estrutura E6AXIS podem ser ativados os
eixos adicionais.
Na estrutura FRAME podem ser fixados 3 valores de posição no espaço (X, Y e Z), bem como
3 orientações no espaço (A, B e C). Assim, um ponto no espaço fica claramente definido,
tanto no que se refere à sua posição como à sua orientação.
Uma vez que existem robôs que se podem deslocar ao mesmo ponto no espaço estando
os eixos em várias posições, as variáveis de Integer S e T na estrutura POS destinam--se
à fixação de uma posição inequívoca do eixo.

Mais informações encontram--se no capítulo [Programação de movimentos], parágrafo


[Instruções de movimento] Status (S) e Turn (T).

Através dos componentes E1¼E6 na estrutura E6POS também podem ser ativados os eixos
adicionais.
Tipos de Os tipos AXIS, E6AXIS, POS, E6POS e FRAME chamam--se também tipos de dados
dados geométricos, visto o programador poder utilizá--los para declarar, de modo simples, relações
geométricos geométricas.

Mais informações encontram--se no capítulo [Programação de movimentos], parágrafo


[Utilização de diversos sistemas de coordenadas].

2.2.6 Tipos de enumeração


Um tipo de dados de enumeração é um tipo de dados que é composto por uma quantidade
limitada de constantes. As constantes podem ser definidas livremente pelo utilizador. Uma
variável deste tipo de dados (variável de enumeração) só poderá adotar o valor de uma des-
tas constantes.
Para explicação tome--se a variável de sistema $MODE_OP. Nessa variável é memorizado
qual dos modos de serviço está selecionado naquele momento. A seleção poderá ser feita
entre os modos de serviço T1, T2, AUT e EX.
Agora, $MODE_OP poderia ser declarada como variável de Integer, e a cada modo de serviço
poderia ser atribuído um numero, o qual seria memorizado então em $MODE_OP. Mas isto
seria pouco claro.
ENUM O tipo de enumeração proporciona uma solução muito mais razoável. Para esse efeito, foi
gerado no ficheiro $OPERATE.SRC um tipo de dados de enumeração com o nome MODE_OP:
ENUM MODE_OP T1, T2, AUT, EX, INVALID
A instrução para a declaração dos tipos de enumeração é, portanto, ENUM. As variáveis do
tipo de enumeração MODE_OP podem adotar os valores T1, T2, AUT, EX ou INVALID.
A declaração da variável realiza--se novamente através da palavra chave DECL:
DECL MODE_OP $MODE_OP

ProgExpPHR4.1.7 12.03.06 pt

40 de 212
2 Variáveis e declarações (continuação)

A variável de enumeração $MODE_OP poderá ser definida agora através da atribuição


normal comum dos quatro valores do tipo de dados MODE_OP. Para diferenciar constantes
simples, as constantes de enumeração definidas por você começam nas inicializações ou
# -- interrogações com o caráter “#”, p.ex.:
caráter $MODE_OP = #T1
Com ENUM poderá ser produzido qualquer numero de tipos de dados de enumeração por
você definidos.

ProgExpPHR4.1.7 12.03.06 pt

41 de 212
Programação perito

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

2.3.1 Operadores
Por operandos entende--se os operandos matemáticos habituais, ao contrário das funções,
Operando como, p.ex., SIN(30), que proporciona o seno do ângulo de 30_. Assim, na operação 5+7,
o 5 e o 7 são designados os operandos e o + o operador.
Em cada operação, o compilador controla a admissibilidade dos operandos. P.ex., 7 – 3,
como a subtração de dois números Integer, é uma operação admissível, mas 5 + “A”, como
a adição de um valor Integer a um caráter, é uma operação inválida.
Em algumas operações, como 5 + 7.1, portanto, a adição de números Integer a valores
reais, é realizada uma adaptação de tipos, e o valor Integer 5 é transformado no valor real
5.0. Esta problemática ainda será tratada mais pormenorizadamente, quando se falar dos
vários operadores.

2.3.1.1 Operadores aritméticos


Os operadores aritméticos dizem respeito aos tipos de dados INTEGER e REAL. Todos os
tipos de cálculos básicos são admissíveis em KRL (ver Tab. 3).

Operator Descrição
+ Adição ou sinal positivo
-- Subtração ou sinal negativo
* Multiplicação
/ Divisão

Tab. 3 Operadores aritméticos

O resultado de uma operação aritmética é INT, apenas no caso de os dois operandos serem
do tipo INTEGER. Se o resultado de uma divisão Integer 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 (ver Tab. 4).

Operandos INT REAL


INT INT REAL
REAL REAL REAL

Tab. 4 Resultado de uma operação aritmética

ProgExpPHR4.1.7 12.03.06 pt

42 de 212
2 Variáveis e declarações (continuação)

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 inválidas!
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

2.3.1.2 Operador geométrico

O operador geométrico é simbolizado em KRL por dois pontos “:”, Entre os tipos de dados
FRAME e POS, o operador geométrico realiza uma interligação de frame.
A interligação de dois frames é a transformação habitual de sistemas de coordenadas.
Assim, a interligação de uma estrutura FRAME com uma estrutura POS só tem efeito sobre
o frame dentro da estrutura POS. Os componentes S e T não são afetados pela
transformação e, por isso, também não precisam de estar definidos por um valor. No
entanto, os valores X, Y, Z, A, B e C têm de estar sempre definidos por um valor, tanto com
operandos POS como também com operandos FRAME.
Interligação Uma interligação de frame é avaliada da esquerda para a direita. O resultado tem sempre
de frame o tipo de dados do operando mais à direita (ver Tab. 5).

Operando esquerdo Operador Operando direito Resultado


(SC de referência) (SC de destino)
POS : POS POS
POS : FRAME FRAME
FRAME : POS POS
FRAME : FRAME FRAME

Tab. 5 Combinações de tipos de dados no operador geométrico

ProgExpPHR4.1.7 12.03.06 pt

43 de 212
Programação perito

Quando o operando esquerdo apresenta o tipo de dados POS, realiza--se uma adaptação
de tipo. A posição indicada pela estrutura POS é transformada num frame. Isto significa
que o sistema determina o frame da ferramenta em relação a essa posição.
O modo de atuar do operador geométrico é explicado através de um exemplo simples (ver
Fig. 5):
Numa sala encontra--se uma mesa. O sistema de coordenadas ESPAÇO é definido como um
sistema de coordenadas fixo no canto esquerdo anterior da sala.
A mesa encontra--se em paralelo às paredes da sala. O canto esquerdo anterior da mesa
situa--se a uma distância exata de 600 mm da parede da frente e 450 mm da parede do lado
esquerdo da sala. A mesa tem uma altura de 800 mm.
Em cima da mesa encontra--se uma peça quadrangular. O sistema de coordenadas PEÇA
é colocado, como mostrado em Fig. 5, num canto da peça. Para poder manusear mais tarde
a peça convenientemente, o eixo Z do sistema de coordenadas PEÇA aponta para baixo.
Em relação ao eixo Z do sistema de coordenadas MESA, a peça está rodada 40_. A posição
do sistema de coordenadas PEÇA, em relação ao sistema de coordenadas MESA, é: X=80
mm, Y = 110 mm e Z = 55 mm.

Base=Mesa:Peça

ZR

XB

YR YB

ZB
Base

Peça
ZT YT

XT

Mesa

XR

Fig. 5 Modo de atuação do operador geométrico

A tarefa agora é descrever o sistema de coordenadas PEÇA em relação ao sistema de


coordenadas ESPAÇO. Para esse efeito, declare, em primeiro lugar, as variáveis de frame
seguintes:
FRAME MESA, PEÇA, BASE
O sistema de coordenadas ESPAÇO já está fixado especificamente para o sistema. Os
sistemas de coordenadas MESA e PEÇA são inicializados agora, de acordo com as condições
secundárias:
MESA = {X 450,Y 600,Z 800,A 0,B 0,C 0}
PEÇA = {X 80,Y 110,Z 55,A -40,B 180,C 0}

ProgExpPHR4.1.7 12.03.06 pt

44 de 212
2 Variáveis e declarações (continuação)

O sistema de coordenadas PEÇA, em relação ao sistema de coordenadas ESPAÇO, resulta


agora com a ajuda do operador geométrico da forma seguinte:
BASE = MESA:PEÇA
No nosso caso, BASE tem a definição seguinte:
BASE = {X 530,Y 710,Z 855,A 140,B 0,C -180}
Uma outra hipótese seria:
BASIS = {X 530,Y 710,Z 855,A -40,B 180,C 0}

Só nesse caso especial, os componentes de BASE resultam da adição dos


componentes de MESA e PEÇA. Isto deve--se ao fato de o sistema de coordenadas
MESA não estar torcido em relação ao sistema de coordenadas ESPAÇO.
Mas de uma maneira geral, uma adição simples dos componentes não é possível!
Uma interligação de frames também não é comutativa, ou seja, uma troca entre o
frame de referência e o frame de destino irá também alterar, normalmente, o
resultado!

Mais informações encontram--se no capítulo [Programação de movimentos] parágrafo


[Utilização de diversos sistemas de coordenadas].

Mais um exemplo para a aplicação do operador geométrico: É feita a deslocação a vários


sistemas de coordenadas e à interligação de sistemas de coordenadas. Para tornar explíci-
tas as alterações de orientação, a ponta da ferramenta desloca--se, em todos os sistemas
de coordenadas, primeiro um pouco na direção X, depois um pouco na direção Y e final-
mente um pouco na direção Z.

ProgExpPHR4.1.7 12.03.06 pt

45 de 212
Programação perito

DEF GEOM_OP ( );

--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME ;Variável HOME do tipo AXIS
DECL FRAME MYBASE[2] ;Campo do tipo FRAME;

---------- Inicialização ---------


BAS (#INITMOV,0 ) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}; definir sistemas
de coordenadas da base
$BASE={X 1000,Y 0,Z 1000,A 0,B 0,C 0}REF_POS_X={X 100,Y 0,Z 0,A
0,B 0,C 0} ;Pos.referência.
REF_POS_Y={X 100,Y 100,Z 0,A 0,B 0,C 0}
REF_POS_Z={X 100,Y 100,Z 100,A 0,B 0,C 0}; definir sistemas de
coordenadas próprios
MYBASE[1]={X 200,Y 100,Z 0,A 0,B 0,C 180}
MYBASE[2]={X 0,Y 200,Z 250,A 0,B 90,C 0};

------------- Seção principal ------------


PTP HOME ; Movimento SAK; Movimento em relação ao sistema de
coordenadas $BASE
PTP $FRAMEZERO ;Deslocação direta ao SC $BASE
WAIT SEC 2 ;esperar 2 segundos
PTP REF_POS_X ;deslocar 100 mm na direção x
PTP REF_POS_Y ;deslocar 100 mm na direção y
PTP REF_POS_Z ,deslocar 100 mm na direção z; movimento
em relação ao SC $BASE, deslocado por MYBASE[1]
PTP MYBASE[1]
WAIT SEC 2
PTP MYBASE[1]:REF_POS_X
PTP MYBASE[1]:REF_POS_Y
PTP MYBASE[1]:REF_POS_Z;Movimento em relação ao SC $BASE
deslocado por MYBASE[2]
PTP MYBASE[2]
WAIT SEC 2
PTP MYBASE[2]:REF_POS_X
PTP MYBASE[2]:REF_POS_Y
PTP MYBASE[2]:REF_POS_Z; Movimento em relação ao SC $BASE
deslocado por MYBASE[1]:MYBASE[2]
PTP MYBASE[1]:MYBASE[2]
WAIT SEC 2
PTP MYBASE[1]:MYBASE[2]:REF_POS_X
PTP MYBASE[1]:MYBASE[2]:REF_POS_Y
PTP MYBASE[1]:MYBASE[2]:REF_POS_Z; Movimento em relação ao SC
$BASE deslocado por MYBASE[2]:MYBASE[1]
PTP MYBASE[2]:MYBASE[1]
WAIT SEC 2
PTP MYBASE[2]:MYBASE[1]:REF_POS_X
PTP MYBASE[2]:MYBASE[1]:REF_POS_Y
PTP MYBASE[2]:MYBASE[1]:REF_POS_Z
PTP HOME
END

ProgExpPHR4.1.7 12.03.06 pt

46 de 212
2 Variáveis e declarações (continuação)

2.3.1.3 Operadores de comparação


Com a ajuda dos operadores de comparação indicados em Tab. 6 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).

Operador Descrição Tipos de dados admissíveis


== igual INT, REAL, CHAR, ENUM, BOOL
<> desigual INT, REAL, CHAR, ENUM, BOOL
> maior INT, REAL, CHAR, ENUM
< mais pequeno INT, REAL, CHAR, ENUM
>= maior igual INT, REAL, CHAR, ENUM
<= mais pequeno INT, REAL, CHAR, ENUM
igual
Tab. 6 Operadores de comparação

As comparações podem ser utilizadas em instruções de execução do programa (ver capítulo


5), e o resultado de uma comparação poderá ser atribuída a uma variável booleana.

O teste de verificação da igualdade ou desigualdade com valores reais só faz


sentido em determinadas condições, uma vez que erros de arredondamento
provocados durante os cálculos comparativos dos valores pertencentes a
fórmulas algébricas idênticas podem proporcionar valores desiguais (ver 2.2.2).

S As combinações de operandos de INT, REAL, e CHAR são possíveis.


S Um tipo ENUM só pode ser comparado com o mesmo tipo ENUM.
S Um tipo BOOL só pode ser comparado com um tipo BOOL.

A comparação entre valores numéricos (INT, REAL) e valores de caratéres (CHAR) é


possível porque a cada caráter ASCII é atribuído um código ASCII. Este código é um numero
que determina a seqüência dos caratéres no registro de caratéres.
As várias constantes de um tipo de enumeração são numeradas aquando da sua declara-
ção, pela ordem em que surgem. Os operadores de comparação referem--se a estes núme-
ros.
Além de comparações simples, são também admissíveis comparações múltiplas. Eis alguns
exemplos:
¼
BOOL A,B
¼
B = 10 < 3 ;B=FALSE
A = 10/3 == 3 ;A=TRUE
B = ((B == A) <> (10.00001 >= 10)) == TRUE ;B=TRUE
A = “F” < “Z” ;A=TRUE
¼

ProgExpPHR4.1.7 12.03.06 pt

47 de 212
Programação perito

2.3.1.4 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 (ver capítulo 5).
Os operadores lógicos estão enumerados em Tab. 7.

Operador Número de Descrição


operandos
NOT 1 Inversão
AND 2 E lógico
OR 2 OU lógico
EXOR 2 OU exclusivo

Tab. 7 Operadores lógicos

Os operandos de uma interligação lógica terão de ser do tipo BOOL, e o resultado também
é sempre do tipo BOOL. Em Tab. 8 são representados os resultados da respetiva interligação
em função do valor dos operandos.

Operação NOT A A AND B A OR B A EXOR B


A = TRUE B = TRUE FALSE TRUE TRUE FALSE
A = TRUE B = FALSE FALSE FALSE TRUE TRUE
A = FALSE B = TRUE TRUE FALSE TRUE TRUE
A = FALSE B = FALSE TRUE FALSE FALSE FALSE

Tab. 8 Tabela de verdade para interligações lógicas

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
¼

ProgExpPHR4.1.7 12.03.06 pt

48 de 212
2 Variáveis e declarações (continuação)

2.3.1.5 Operadores de bits


Com a ajuda dos operadores de bits (ver Tab. 9) podem ser interligados números inteiros,
na medida em que são interligados logicamente os vários bits dos números. Os operadores
de bits interligam os vários bits da mesma forma que os operadores lógicos interligam dois
valores booleanos, se se considerar o valor de bit 1 TRUE e o valor 0 FALSE.
Uma interligação de bits E dos números 5 e 12 dá como resultado o numero 4, uma interliga-
ção de bits OU o numero 13 e uma interligação de bits OU exclusivo o numero 9:

0 1 0 1 = 5
1 1 0 0 = 12
AND 0 1 0 0 = 4
OR 1 1 0 1 = 13
EXOR 1 0 0 1 = 9

Na inversão dos bits, estes não são simplesmente virados ao contrário. Em vez disso, ao
utilizar B_NOT, é somado ao operando 1 e o sinal é invertido, p.ex.:
B_NOT 10 = -11
B_NOT -10 = 9
Os operadores de bits são utilizados, p.ex., para interligar sinais de entrada/saída digitais
(ver 6.3).

Operador Número de Descrição


operandos
B_NOT 1 inversão de bits
B_AND 2 interligação de bits E
B_OR 2 interligação de bits OU
B_EXOR 2 interligação de bits OU exclusivo

Tab. 9 Operadores de bits lógicos

Uma vez que os caratéres ASCII também podem ser ativados através do CÓDIGO ASCII
de números inteiros, o tipo de dados dos operandos poderá ser, além de INT, também
CHAR. O resultado é sempre do tipo INT.

ProgExpPHR4.1.7 12.03.06 pt

49 de 212
Programação perito

Exemplos para a utilização de operadores de bits:


¼
INT A
¼
A = 10 B_AND 9 ;A=8
A = 10 B_OR 9 ;A=11
A = 10 B_EXOR 9 ;A=3
A = B_NOT 197 ;A=-198
A = B_NOT ’HC5’ ;A=-198
A = B_NOT ’B11000101’ ;A=-198
A = B_NOT “E” ;A=-70
¼
Suponhamos que você definiu uma saída digital com uma largura de 8 bits. A saída poderá
ser ativada através da variável INTEGER DIG. Para definir os bits 0, 2, 3 e 7, poderá agora
programar simplesmente
Introduzir bits DIG = ’B10001101’ B_OR DIG
Todos os outros bits não sofrem influências, independentemente do valor que apresentam.
Se, p.ex., quiser retirar os bits 1, 2 e 6, terá de programar
Retirar bits DIG = ’B10111001’ B_AND DIG
Todos os outros bits não são alterados por essa operação.
Da mesma forma simples, poderá verificar com a ajuda dos operadores de bits se os vários
bits da saída foram ativados. A expressão
Filtrar bits (’B10000001’ B_AND DIG) == ’B10000001’
torna--se TRUE, quando estão definidos os bits 0 e 7, caso contrário é FALSE.
Caso queira apenas verificar se pelo menos um dos dois bits 0 ou 7 foi ativado, a interligação
de bits E apenas terá de ser maior que zero:
(’B10000001’ B_AND DIG) > 0

ProgExpPHR4.1.7 12.03.06 pt

50 de 212
2 Variáveis e declarações (continuação)

2.3.1.6 Prioridades de operadores


Se utilizar expressões mais complexas com vários operadores, terá de estar com atenção
Prioridade às diferentes prioridades dos vários operadores (ver Tab. 10), uma vez que as várias expres-
sões são executadas pela ordem da respetiva prioridade.

Prioridade Operador
1 NOT B_NOT
2 * /
3 + -
4 AND B_AND
5 EXOR B_EXOR
6 OR B_OR
7 == <> < > >= <=

Tab. 10 Prioridades de operadores

Em princípio é aplicável:
G As expressões entre parênteses são executadas em primeiro lugar.
G Quando se trata de expressões sem parênteses, a avaliação realiza--se pela
ordem da prioridade.
G As interligações com operadores da mesma prioridade são executadas da es-
querda para a direita.
Exemplos:
¼
INT A,B
BOOL E,F
¼
A = 4
B = 7
E = TRUE
F = FALSE
¼
E = NOT E OR F AND NOT (-3 + A * 2 > B) ;E=FALSE
A = 4 + 5 * 3 - B_NOT B / 2 ;A=23
B = 7 B_EXOR 3 B_OR 4 B_EXOR 3 B_AND 5 ;B=5
F = TRUE == (5 >= B) AND NOT F ;F=TRUE
¼

ProgExpPHR4.1.7 12.03.06 pt

51 de 212
Programação perito

2.3.2 Funções regulares


Para o cálculo de determinados problemas matemáticos, já existem em KRL algumas
funções regulares predefinidas (ver Tab. 11). Estas podem ser utilizadas diretamente, sem
declaração.

Descrição Função Tipo de Gama de Tipo de Gama de


dados valores dados valores
argumento argumento função resultado
Montante ABS(X) REAL --∞¼+∞ REAL 0¼+∞
Raiz SQRT(X) REAL 0¼+∞ REAL 0¼+∞
Seno SIN(X) REAL --∞¼+∞ REAL -1¼+1
Coseno COS(X) REAL --∞¼+∞ REAL -1¼+1
Tangente TAN(X) REAL --∞¼+∞* REAL --∞¼+∞
Arco coseno ACOS(x) REAL -1¼+1 REAL 0_¼180_
Arco seno ATAN2(Y,X) REAL --∞¼+∞ REAL -90_¼+90_
* nenhumas múltiplas impares de 90_, isto é, X ¸ (2k-1)*90_, kÎ8

Tab. 11 Funções matemáticas regulares

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 SQRT(X) calcula a raiz quadrada do numero X, p.ex.:
A = SQRT(16.0801) ;A=4.01
Seno As funções trigonométricas SIN(X), COS(X) e TAN(X) calculam o seno, coseno ou a tan-
coseno gente do ângulo X, p.ex.:
tangente
A = SIN(30) ;A=0.5
B = 2*COS(45) ;B=1.41421356
C = TAN(45) ;C=1.0
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.
Arco coseno ACOS(X) é a função inversa de COS(X):
A = COS(60) ;A=0.5
B = ACOS(A) ;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
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
se considerasse apenas o quociente, com o arco tangente só poderiam ser calculados ângu-
los 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_.

ProgExpPHR4.1.7 12.03.06 pt

52 de 212
2 Variáveis e declarações (continuação)

Devido à indicação explícita de X e Y, o sinal destes determina claramente o quadrante, no


qual se encontra o ângulo (ver Fig. 6). 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 = ATAN2(0.5,0.5) ;A=45
B = ATAN2(0.5,-0.5) ;B=135
C = ATAN2(-0.5,-0.5) ;C=225
D = ATAN2(-0.5,0.5) ;D=315

II I
X=COS(a)

Y=SIN(a)
a
0

III IV

Fig. 6 Utilização de X e Y na função ATAN2(Y,X)

Mais informações encontram--se no capítulo [Subprogramas e funções].

ProgExpPHR4.1.7 12.03.06 pt

53 de 212
Programação perito

2.4 Variáveis de sistema e ficheiros de sistema


Uma condição muito importante para a execução de aplicações complexas na técnica de
robôs é uma unidade de comando com uma programação livre e fácil.
Para esse efeito, a funcionalidade da unidade de comando do robô terá de ter uma
programação simples na linguagem de robôs. Só quando a integração dos parâmetros de
comando num programa de robô estiver completa e for simples de realizar, poderá ser tirado
partido da funcionalidade total da unidade de comando de um robô. Na KR C..., esta tarefa
é solucionada por excelência, através do conceito das variáveis e ficheiros predefinidos de
sistema.
Exemplos para variáveis predefinidas são $POS_ACT (posição atual do robô), $BASE
(sistema de coordenadas da base) ou $VEL.CP (velocidade de trajetória).

Uma listagem de todas as variáveis predefinidas encontra--se na documentação própria


[Variáveis de sistema].

As variáveis de sistema estão totalmente integradas no conceito de variáveis da KRL. As


variáveis de sistema possuem um respetivo tipo de dados correspondente e podem ser lidas
ou escritas como qualquer outra variável no programa, desde que não haja restrições
relacionadas com o tipo de dados. A posição atual do robô, p.ex., só poderá ser lida e não
escrita. Este tipo de restrições é verificado pela unidade de comando.
Sempre que possível, do ponto de visto da técnica de segurança, você dispõe de um acesso
de escrita aos dados de sistema. Assim, terá muitas possibilidades para um diagnóstico,
uma vez que o KCP e o sistema de programação têm capacidade para carregar ou influen-
ciar um numero múltiplo de dados de sistema.
As variáveis de sistema úteis com acesso de escrita são, p.ex., $TIMER[] e $FLAG[].
Temporizador As 16 variáveis de temporização $TIMER[1]...$TIMER[16] destinam--se à medição dos
processos no tempo e, assim, podem ser utilizadas como “cronômetros”. O início e a parada
do processo de medição realiza--se através das variáveis de sistema
$TIMER_STOP[1]...$TIMER_STOP[16]:
$TIMER_STOP[4] = FALSE
inicia, p.ex., o temporizador 4,
$TIMER_STOP[4] = TRUE
pára o temporizador 4 de novo. O reset da respetiva variável de temporizador poderá ser
realizado, a qualquer momento, por meio de uma atribuição de valor normal, p.ex.:
$TIMER[4] = 0
Se o valor de uma variável de temporizador mudar de menos para mais, o flag respetivo é
definido com TRUE (condições de temporizador desligado), p.ex.:
$TIMER_FLAG[4] = TRUE
Durante a entrada em funcionamento da unidade de comando, todas as variáveis de tempo-
rizador estão predefinidas com 0, os flags
$TIMER_FLAG[1]...$TIMER_FLAG[16] com FALSE e as variáveis
$TIMER_STOP[1]...$TIMER_STOP[16] com TRUE.
A unidade das variáveis de temporizador é o milisegundo (ms). A atualização de
$TIMER[1]...$TIMER[16] e de $TIMER_FLAG[1]...$TIMER_FLAG[16]
realiza--se num ciclo de 12 ms.

ProgExpPHR4.1.7 12.03.06 pt

54 de 212
2 Variáveis e declarações (continuação)

Flags Os 1024 flags $FLAG[1]...$FLAG[1024] são utilizados como marcas globais. Estas variá-
veis booleanas são predefinidas com FALSE. O valor atual dos flags pode ser visualizado,
a qualquer momento, no painel de operação, selecionando a opção “Display”.
Flags cíclicos Além disso, existem na KR C1 32 flags cíclicos
$CYCFLAG[1]...$CYCFLAG[32]. Depois da entrada em funcionamento, todos estão pre-
definidos com FALSE.
Os flags estão ativos ciclicamente apenas a nível de robô. Num ficheiro Submit, os flags cícli-
cos são admissíveis, mas não há uma avaliação cíclica.
Os flags cíclicos também podem ser definidos e ativados em subprogramas, funções e sub-
programas de Interrupt.
$CYCFLAG[1]...$CYCFLAG[32] têm o tipo de dados BOOL. Com uma atribuição a um flag
cíclico, pode ser usada uma expressão booleana qualquer.
São admissíveis
G variáveis de sistema booleanas
G variáveis booleanas que estão declaradas numa lista de dados e inicializadas.
Não são admissíveis
G funções que devolvem um valor booleano.
A instrução
$CYCFLAG[10] = $IN[2] AND $IN[13]
tem por conseqüência, p.ex., que a expressão booleana “$IN[2] AND $IN[13]” é ava-
liada ciclicamente. Isto significa que, logo que a entrada 2 ou a entrada 13 sejam alteradas,
é também alterado $CYCFLAG[10], sendo irrelevante o local onde se encontra o ponteiro
de programa depois da execução da expressão acima indicada.
Todos os flags cíclicos definidos mantêm--se válidos, até que um módulo seja desselecio-
nado ou até ser realizada a seleção de um passo. Ao ser atingido o final do programa, todos
os flags cíclicos continuam ativos.

Mais informações encontram--se no capítulo [Tratamento de interrupt], parágrafo


[Utilização de flags cíclicos].

$ -- caráter De uma maneira geral, os nomes das variáveis predefinidas são escolhidos de modo a que
sejam fáceis de fixar. Começam todos por um caráter $ e depois são constituídos por uma
abreviatura compreensível em inglês. Uma vez que são tratadas como variáveis habituais,
não será necessário decorar instruções pouco habituais ou opções fora do vulgar.

Para evitar enganos, você próprio não deverá declarar variáveis que começam
com um caráter $.
Uma parte das variáveis predefinidas refere--se à unidade de comando KR C... em geral
(p.ex., $ALARM_STOP para a definição da saída para o sinal de parada de emergência
enviado ao PLC). Outras são apenas relevantes para o robô (p.ex., $BASE para o sistema
de coordenadas da base).

ProgExpPHR4.1.7 12.03.06 pt

55 de 212
Programação perito

No painel de operação KUKA aparece a drive de robô na qual se encontram os dados rele-
vantes para a unidade de comando no diretório “Steu” e os dados relevantes para o robô
no diretório “R1”.

Fig. 7 Vários níveis no painel de operação KUKA


Ao programar a KR C..., podem ser elaborados ficheiros de programa e listas de dados. Nos
ficheiros de programa encontram--se definições de dados e instruções executáveis, nas
listas de dados só se encontram definições de dados e, eventualmente, inicializações.

Mais informações encontram--se no capítulo [Listas de dados].

Além das listas de dados que são elaboradas durante a programação, na KR C... também
existem listas de dados definidas por KUKA que são fornecidas juntamente com o software
de comando. Estas listas de dados chamam--se listas de dados predefinidas e contêm,
principalmente, as variáveis predefinidas.
As listas de dados predefinidas não podem ser apagadas, nem podem ser elaboradas por
você. São criadas durante a instalação do software e estão sempre disponíveis. Também
os nomes das listas de dados predefinidas começam, tal como os nomes dos dados
predefinidos, com um caráter $.
Na KR C... existem as listas de dados predefinidas seguintes:
G $MACHINE.DAT
é uma lista de dados predefinida que contém, exclusivamente, variáveis de sistema
predefinidas. Com os dados de máquina, a unidade de comando é adaptada ao robô
ligado (ciclos, cinemática, parâmetros de regulação etc.). Um $MACHINE.DAT existe
no sistema de comando, mas também no sistema de robô. Não podem ser elaboradas
variáveis novas, nem apagadas variáveis existentes.

Exemplos:
$ALARM_STOP Sinal para parada de emergência (específico para a unidade de
comando)
$NUM_AX Número dos eixos do robô (específico para o robô)
G $CUSTOM.DAT
é uma lista de dados que só existe no sistema de comando. A lista contém dados que
permitem a projetação ou parametrização de determinadas funções de comando. O
programador tem apenas a possibilidade de alterar os valores das variáveis predefini-
das. Não podem ser elaboradas variáveis novas, nem apagadas variáveis existentes.

Exemplos:
$PSER_1 Parâmetros de controlo do interface série 1
$IBUS_ON Ativação de grupos de Interbus alternativos

ProgExpPHR4.1.7 12.03.06 pt

56 de 212
2 Variáveis e declarações (continuação)

G $CONFIG.DAT
é uma lista de dados predefinida por KUKA, mas que não contém variáveis de sistema
predefinidas. Existe uma $CONFIG.DAT a nível de comando e a nível de robô. Aqui
podem ser definidas variáveis, estruturas, canais e sinais, válidos durante um tempo
prolongado e muito relevantes para vários programas.
A nível de robô a lista de dados está dividida nos blocos seguintes:
-- BAS
-- AUTOEXT
-- GRIPPER
-- PERCEPT
-- SPOT
-- A10
-- A20
-- TOUCHSENSE
-- USER
As declarações globais do utilizador deverão ser introduzidas, no bloco USER. Só aqui
são copiadas as declarações aquando de uma atualização posterior do software.
G $ROBCOR.DAT
O ficheiro $ROBCOR.DAT contém dados específicos para o robô que se destinam ao
modelo dinâmico do robô. Estes dados são necessários para o planeamento da
trajetória. Também aqui não podem ser elaboradas variáveis novas ou apagadas
variáveis existentes.

Tab. 12 fornece um resumo das listas de dados predefinidas.

Lista de dados Sistema Atribuição de valor


Unidade Robô durante através de
de
comando
$MACHINE.DAT n n Entrada em serviço KUKA/utilizador
$CUSTOM.DAT n Entrada em serviço Utilizador/KUKA
$CONFIG.DAT n n Construção ou Utilizador/KUKA
alteração da célula
$ROBCOR.DAT n Fornecimento KUKA

Tab. 12 Listas de dados predefinidas na KR C...

ProgExpPHR4.1.7 12.03.06 pt

57 de 212
Programação perito

ProgExpPHR4.1.7 12.03.06 pt

58 de 212
3 Programação de movimento

3 Programação de movimento
Uma das tarefas mais importantes da unidade de comando de um robô é o movimento do
robô. O programador realiza o comando dos movimentos do robô com a ajuda de instruções
de movimento especiais. Estas formam também a característica principal que distingue as
linguagens do robô das linguagens de programação habituais para computadores, tais como
C ou Pascal.
Instruções de Conforme o tipo de comando, estas instruções de movimento podem ser divididas em
movimento instruções para simples movimentos ponto--a--ponto e instruções para movimentos de
trajetória. Enquanto nos movimentos de trajetória, o efeito final (p.ex., a garra ou a
ferramenta) descreve uma trajetória com uma definição geométrica bem definida (reta ou
círculo), a trajetória dos movimentos ponto--a--ponto depende da cinemática do robô e não
é previsível com precisão. Ambos os tipos de movimento têm em comum que a
programação se realiza, partindo da posição atual para chegar a uma posição nova. Assim,
com uma instrução de movimento, geralmente, só é necessária a indicação da posição de
destino (exceção: movimentos circulares 3.3.4).
As coordenadas das posições podem ser especificadas textualmente, através da introdução
de valores numéricos ou por deslocação do robô e memorização dos valores reais (teach).
Em ambos os casos, existe a possibilidade de referir as indicações a vários sistemas de
coordenadas.
Outras características de movimento, como as velocidades e as acelerações, bem como a
orientação podem ser definidas através de variáveis de sistema. A aproximação a pontos
auxiliares é inicializada por meio de parâmetros opcionais na instrução de movimento. Para
a aproximação terá de ser definido um avanço do computador.

3.1 Utilização de diversos sistemas de coordenadas


Para poder indicar a posição ou a orientação de um ponto no espaço, são utilizados diversos
Sistemas de sistemas de coordenadas. Basicamente, podem ser diferenciados sistemas de coordena-
coordenadas das específicos dos eixos e sistemas de coordenadas cartesianos.
específicos No sistema de coordenadas específico dos eixos, são indicadas as deslocações (no
dos eixos caso dos eixos translatóricos) ou as rotações (no caso dos eixos rotatóricos) de todos os
eixos do robô. Com um robô de braço flexível de 6 eixos, têm de ser indicados todos os 6
ângulos de articulação do robô, a fim de determinar claramente a posição e a orientação
Fig. 8).

Fig. 8 Sistema de coordenadas específico dos eixos de um robô de braço flexível de 6 eixos

ProgExpPHR4.1.7 12.03.06 pt

59 de 212
Programação perito

A descrição de uma posição específica do eixo realiza--se na KR C... através do tipo de


estrutura predefinido AXIS, cujos componentes têm, conforme o tipo de eixo, o significado
de ângulos ou comprimentos.

Mais informações encontram--se no capítulo [Variáveis e declarações], parágrafo


[Estruturas].

As posições específicas dos eixos só podem ser executadas em ligação com passos de
movimento PTP. Se um movimento de trajetória for programado com uma posição de robô
específica do eixo, é provocado um erro.
Transformação Uma vez que o Homem como programador pensa em coordenadas cartesianas, a
de coordenadas programação no sistema de coordenadas específico dos eixos é, geralmente, muito pouco
prática. Por isso, a unidade de comando oferece vários sistemas de coordenadas
cartesianos para a programação, cujas coordenadas são transformadas, automaticamente,
no sistema específico dos eixos (ver Fig. 9), antes da execução do movimento.

Transformação para a frente

A1, A2, A3, A4, A5, A6

X, Y, Z, A, B, C (, S, T)

Transformação para trás

Fig. 9 Transformação de coordenadas

cartesiano Num sistema de coordenadas cartesiano, os 3 eixos de coordenadas X, Y e Z encon-


tram--se verticalmente sobrepostos, formando, nessa ordem, um sistema direito.

ProgExpPHR4.1.7 12.03.06 pt

60 de 212
3 Programação de movimento (continuação)

No sistema de coordenadas cartesiano, a posição de um ponto no espaço é determinada


claramente através da indicação das coordenadas X, Y e Z. Estas resultam das distâncias
translatóricas do valor de cada coordenada em relação à origem da coordenada (ver
Fig. 10).

Z
P

Z1

Y1

X1 X

P(X1=5, Y1=2, Z1=4)

Fig. 10 Descrição translatórica da posição de um ponto

Para poder fazer a deslocação a todos os pontos no espaço, com uma orientação qualquer,
além dos três valores translatóricos são necessárias ainda três indicações rotatóricas.
Os ângulos designados na KR C... com A, B e C descrevem rotações em torno do eixo de
coordenadas Z, Y e X. A ordem das rotações deverá ser mantida:
1. Rotação em torno do eixo Z, descrevendo o ângulo A
2. Rotação em torno do novo eixo Y, descrevendo o ângulo B
3. Rotação em torno do novo eixo X, descrevendo o ângulo C
Esta seqüência de rotação corresponde aos ângulos roll--pitch--yaw (rolar--acenar--guinar)
conhecidos da aviação. O ângulo C corresponde ao rolar, o ângulo B ao acenar e o ângulo
A ao guinar (ver Fig. 11).

ProgExpPHR4.1.7 12.03.06 pt

61 de 212
Programação perito

A B C
Z’ Y’
Z B
A Y ’’

Z ’’
Y X’ Y ’’’

Z ’’’
X
C
X ’’ X ’’’

Fig. 11 Descrição rotatórica da orientação de um ponto

Com a ajuda das translações X, Y e Z e das rotações A, B e C, poderá ser descrita clara-
mente a orientação de um ponto no espaço. Na KR C... isto é realizado através da estrutura
predefinida FRAME.

Mais informações encontram--se no capítulo [Variáveis e declarações], parágrafo


[Estruturas].

Quando se trata de movimentos de trajetória, a indicação das coordenadas FRAME é


sempre clara e suficiente. No entanto, com deslocações ponto--a--ponto e determinadas
cinemáticas do robô (p.ex., braço flexível de seis eixos), a deslocação ao mesmo ponto
(posição e orientação) no espaço poderá ser realizada com várias posições dos eixos. Com
mais duas indicações, “S” e “T”, esta ambigüidade poderá ser resolvida. Na KR C..., está
prevista a estrutura POS para um frame alargado por “S” e “T”.

Mais informações encontram--se no capítulo [Variáveis e declarações], parágrafo


[Estruturas] e parágrafo [Instruções de movimento].

ProgExpPHR4.1.7 12.03.06 pt

62 de 212
3 Programação de movimento (continuação)

Na KR C... estão predefinidos os sistemas de coordenadas cartesianos seguintes (Tab. 13


e Fig. 12):

Sistema de coordenadas Variável de Estado


sistema
Sistema de coordenadas mundial $WORLD protegido contra a
escrita
Sistema de coordenadas do robô $ROBROOT protegido contra a
escrita (alterável
em R1\MADA\$MA-
CHINE.DAT )
Sistema de coordenadas da ferramenta $TOOL possível escrever
Sistema de coordenadas da base (peça) $BASE possível escrever

Tab. 13 Sistemas de coordenadas cartesianos em robôs

y
z

SC ferramenta
z x

z y
SC base x
y
SC mundial
z
SC robô
y x

Fig. 12 Sistemas de coordenadas cartesianos em robôs

Sistema de coordenadas mundial


O sistema de coordenadas do mundo é um sistema de coordenadas fixo (= não acompanha
o movimento do robô) que é utilizado como sistema de coordenadas de origem para um
sistema de robô (robô, apoio da peça ou ferramenta). Assim, este sistema representa o
sistema de referência, tanto para o sistema de robô como para a periferia da célula.

Sistema de coordenadas do robô


Este sistema de coordenadas encontra--se na base do robô e serve como sistema de
coordenadas de referência para a construção mecânica do robô. Refere--se novamente ao
sistema de coordenadas mundial, e à saída da fábrica é idêntico a este. Com $ROBROOT
poderá ser definida uma deslocação do robô em relação a $WORLD.

Sistema de coordenadas da ferramenta


O sistema de coordenadas da ferramenta tem a sua origem na ponta da ferramenta. A
orientação poderá ser escolhida de forma a que o seu eixo X seja idêntico à direção de

ProgExpPHR4.1.7 12.03.06 pt

63 de 212
Programação perito

trabalho da ferramenta apontando para fora da ferramenta. Ao ser movimentada a ponta da


ferramenta, movimenta--se também o sistema de coordenadas da ferramenta.

À saída da fábrica, o sistema de coor-


denadas da ferramenta situa--se na
flange do robô (eixo Z é idêntico ao
eixo 6). Através da transformação re-
fere--se ao sistema de coordenadas
Y do robô.

X
Z

Depois de uma mudança da ferramenta, o programa original poderá continuar a ser utili-
zado, após ter sido realizada uma medição nova, uma vez que o computador conhece as
coordenadas da ponta da ferramenta.

Sistema de coordenadas da base


O sistema de coordenadas da base é utilizado como sistema de coordenadas de referência
para a descrição da posição da peça. A programação do robô realiza--se no sistema de coor-
denadas da base. Tem o sistema de coordenadas mundial como sistema de coordenadas
de referência. À saída da fábrica é $BASE=$WORLD.
Através de uma alteração de $BASE podem ser trabalhadas, p.ex., várias peças iguais em
vários locais diferentes, utilizando o mesmo programa.
interpolação Durante a interpolação da trajetória de movimento, a unidade de comando do robô calcula,
referente à ba- num caso normal (ferramenta na flange do robô), a posição atual ($POS_ACT) com referên-
se cia ao sistema de coordenadas $BASE (ver Fig. 13).

z
$TOOL
y
z
x
$POS_ACT

y
$BASE x
x
$ROBROOT
z y

$WORLD x

Fig. 13 Corrente cinemática com interpolação referente à base

ProgExpPHR4.1.7 12.03.06 pt

64 de 212
3 Programação de movimento (continuação)

ferramenta Na prática industrial, é usado cada vez mais o processo de ancorar a ferramenta (p.ex.,
fixa maçarico de soldadura) fixamente no espaço e levar a peça a passar pela ferramenta fixa,
utilizando para o efeito uma garra adequada.

A variável $TOOL refere--se sempre à ferramenta ou à peça que se encontra no robô. A


variável $BASE, por seu lado, refere--se sempre à ferramenta ou à peça externa.

interpolação Uma vez que a peça e a ferramenta trocaram de posição, mas o movimento em relação à
referente à peça terá de continuar, a interpolação da trajetória de movimento terá de realizar--se agora
garra através do sistema de coordenadas $TOOL. Esta atribuição do tipo de interpolação realiza--
se, implicitamente, quando for utilizado um TCP normal ou externo. A variável de sistema
$IPO_MODE permite definir este tipo de interpolação. A linha de programa
$IPO_MODE = #TCP
permite uma interpolação referente à garra no sistema de coordenadas $TOOL. A posição
atual $POS_ACT é calculada agora em relação a $TOOL (ver Fig. 14). Com
$IPO_MODE = #BASE
é feito o reset do tipo de interpolação para a interpolação referente à base para casos
normais. Esta é também a definição padrão para a entrada em funcionamento da unidade
de comando.

$TOOL y

x
z z
$POS_ACT

z y

x
$BASE
x
$ROBROOT
z y

$WORLD x

Fig. 14 Corrente cinemática com interpolação referente à garra

Um exemplo para a deslocação dos sistemas de coordenadas encontra--se no capítulo


[Variáveis e declarações], parágrafo [Operador geométrico].

ProgExpPHR4.1.7 12.03.06 pt

65 de 212
Programação perito

3.2 Movimentos ponto--a--ponto (PTP)


3.2.1 Generalidades (PTP sincronizado)
PTP O movimento ponto--a--ponto (PTP) é a maneira mais rápida de movimentar a ponta da
ferramenta (Tool Center Point: TCP) da posição momentânea até a uma posição de destino
programada. Para esse efeito, a unidade de comando calcula as diferenças angulares
necessárias para todos os eixos.
Com a ajuda da variável de sistema
G $VEL_AXIS[número de eixo] são programadas as velocidades máximas especí-
ficas para os eixos,
e com
G $ACC_AXIS[número de eixo] as acelerações máximas específicas para os eixos.
Todas as indicações são feitas em percentagem, tomando como base um valor máximo defi-
nido nos dados de máquina. Caso estas duas variáveis não tenham sido programadas em
relação a todos os eixos, ao executar o programa é emitida a respetiva mensagem de erro.
Os movimentos dos vários eixos são sincronizados (PTP sincronizado) de forma a que todos
os eixos iniciem e terminem o movimento em simultâneo. Isto significa que só o eixo com
o trajeto mais comprido, ou seja, o chamado eixo dominante, se desloca com o valor limite
programado para a aceleração e a velocidade. Todos os outros eixos movimentam--se ape-
nas com a aceleração e a velocidade que são necessárias para atingir o ponto de destino
do movimento no mesmo momento, independentemente dos valores programados em
$VEL_AXIS[Nr] e $ACC_AXIS[Nr].
Se estiver ativada a adaptação da aceleração ou o perfil de andamento mais elevado
($ADAP_ACC=#STEP1, $OPT_MOVE=#STEP1), os eixos são adicionalmente deslocados
com sincronização de fases, isto é, todos os eixos em simultâneo encontram--se na fase de
aceleração, andamento constante e desaceleração.

Uma vez que nos movimentos PTP com coordenadas de destino cartesianas, geralmente
não se sabe qual é o eixo dominante, na maioria dos casos é vantajoso definir a aceleração
e a velocidade com os mesmos valores para todos os eixos.

O movimento sincronizado no tempo minimiza o esforço mecânico do robô, uma vez que
são reduzidos os binários do motor e da engrenagem de todos os eixos com trajetos de movi-
mento mais curtos. O movimento sincronizado na fase leva (adicionalmente) a uma trajetó-
ria de movimento que, independentemente da velocidade programada e da aceleração pro-
gramada, se mantém sempre igual no espaço.

Mais informações encontram--se no capítulo [Programação de movimento], parágrafo


[Movimentos de aproximação].

ProgExpPHR4.1.7 12.03.06 pt

66 de 212
3 Programação de movimento (continuação)

3.2.2 Perfil de deslocação mais elevado


Normalmente é usado para os movimentos PTP um perfil de movimento mais elevado. Com
passos PTP individuais e passos PTP de aproximação, este modelo permite uma deslo-
cação otimizada no tempo, desde o ponto de início até ao ponto de destino. Isto significa
que as engrenagens e motores existentes não permitem uma deslocação mais rápida. Os
momentos admissíveis são aproveitados ao máximo, em cada ponto da trajetória, o que se
aplica, sobretudo, também à fase de velocidade constante. A velocidade é adaptada sempre
de modo a que os torques não sejam ultrapassados.
Nos passos de aproximação, uma alteração dos valores de velocidade ou de aceleração
também só tem por conseqüência uma alteração do perfil de velocidade na trajetória. A
curva geométrica no espaço mantém--se sem alteração.
As atribuições de velocidade e os valores--limite de aceleração (indicação em percentagem)
podem ser ajustados individualmente para cada eixo. No entanto, este valor--limite não atua
diretamente sobre a aceleração, mas sim sobre o binário de aceleração do eixo. Isto é, um
valor de aceleração do eixo de 50% não reduz, necessariamente, a aceleração para a
metade.

ProgExpPHR4.1.7 12.03.06 pt

67 de 212
Programação perito

3.2.3 Instruções de movimento


O exemplo de programa seguinte PTP_AXIS.SRC representa, em princípio, o programa
mais pequeno executável em KRL:

DEF PTP_AXIS() ;o nome do programa é PTP_AXIS

$VEL_AXIS[1]=100 ;determinação das velocidades dos eixos


$VEL_AXIS[2]=100
$VEL_AXIS[3]=100
$VEL_AXIS[4]=100
$VEL_AXIS[5]=100
$VEL_AXIS[6]=100

$ACC_AXIS[1]=100 ;determinação das acelerações dos eixos


$ACC_AXIS[2]=100
$ACC_AXIS[3]=100
$ACC_AXIS[4]=100
$ACC_AXIS[5]=100
$ACC_AXIS[6]=100

PTP {AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

END

Nesse programa são determinadas, em primeiro lugar, as velocidades e acelerações dos


eixos. Antes de poder ser executado um movimento ponto--a--ponto, terão de ser realiza-
das estas definições.
Depois disso, o robô desloca cada eixo até às posições angulares especificadas na estrutura
AXIS. Por exemplo, o eixo 1 é colocado em 0_, o eixo 2 em –90_, o eixo 3 em 90_, o eixo
4 em 0_, o eixo 5 em 0_ e o eixo 6 em 0_.

Fig. 15 Posição zero mecânica

ProgExpPHR4.1.7 12.03.06 pt

68 de 212
3 Programação de movimento (continuação)

Se ao indicar as coordenadas dos eixos forem omitidos alguns componentes, o robô só


desloca os eixos indicados, os outros não alteram a sua posição. Com
PTP PTP {A3 45}
p.ex., apenas o eixo 3 é colocado em 45_. É preciso ter em atenção que nas indicações dos
ângulos na instrução PTP se trata de valores absolutos. Isto é, o robô não roda o eixo mais
45_, mas desloca o eixo até à posição absoluta de 45_.
A instrução PTP_REL destina--se a deslocação relativa. Para rodar, p.ex., os eixos 1 e 4 em
35_, programe, simplesmente:
PTP_REL PTP_REL {A1 35,A4 35}

A3 = 0_
PTP {A3 45}

A3 = 90_

PTP_REL {A3 45}

Fig. 16 Diferença entre coordenadas absolutas e relativas específicas para os eixos

Com uma deslocação relativa, é preciso ter em atenção que um movimento


parado durante a execução não pode ser retomado sem problemas. Depois
de um novo arranque e uma nova seleção do passo ou uma mudança do tipo
de execução do programa, a unidade de comando não pode ter em conta o
trajeto já realizado e executa a distância relativa programada novamente
por completo, o que leva, consequentemente, a um ponto de destino errado.

ProgExpPHR4.1.7 12.03.06 pt

69 de 212
Programação perito

A deslocação em coordenadas específicas do eixo é, geralmente, pouco prática, uma vez


que o Homem pensa e age em termos de espaço cartesiano. Para esse efeito, destina--se
a indicação das coordenadas cartesianas, através de uma estrutura POS, como aquela que
se utiliza no exemplo seguinte:

DEF PTP_POS()

$BASE = $WORLD ;definição do sistema de coordenadas da base


$TOOL = $NULLFRAME ;definição do sistema de coordenadas da
;ferramenta

$VEL_AXIS[1]=100 ;determinação das velocidades dos eixos


$VEL_AXIS[2]=100
$VEL_AXIS[3]=100
$VEL_AXIS[4]=100
$VEL_AXIS[5]=100
$VEL_AXIS[6]=100

$ACC_AXIS[1]=100 ;determinação das acelerações dos eixos


$ACC_AXIS[2]=100
$ACC_AXIS[3]=100
$ACC_AXIS[4]=100
$ACC_AXIS[5]=100
$ACC_AXIS[6]=100

PTP {POS:X 1025,Y 0,Z 1480,A 0,B 90,C 0,S ’B 010’,T ’B 000010’}

END

É preciso ter em atenção que ao indicar o ponto de destino em coordenadas


cartesianas, além das indicações referentes à velocidade e à aceleração, é
obrigatório também a definição do sistema de coordenadas da base e do sistema
de coordenadas da ferramenta.

Sistema de No nosso caso, o sistema de coordenadas da base ($BASE) foi igualado ao sistema de coor-
coordenadas denadas mundial ($WORLD) que, regularmente, se encontra na base do robô ($ROBROOT).
O sistema de coordenadas da ferramenta ($TOOL) foi definido com o frame zero ($NULL-
FRAME = {FRAME: X 0, Y 0, Z 0,A 0,B 0,C 0}), o que significa que todas as
indicações se referem ao centro da flange. O centro da ferramenta (Tool Center Point: TCP)
encontra--se, portanto, no centro da flange. Ao montar uma ferramenta, estes valores teriam
de sofrer a respetiva correção. Em relação a esse assunto, remete--se para os documentos
relativos à medição das ferramentas.
Com a instrução PTP acima indicada, o robô desloca--se agora de forma a que no ponto de
destino do movimento o TCP fique deslocado da base do robô, 1025 mm na direção x, 0 mm
na direção y e 1480 mm na direção z. As indicações “A”, “B” e “C” definem a orientação do
TCP. O Status “S” e o Turn “T” definem a posição dos eixos.
Desde que ensaie o exemplo num robô KR6, é obtido o mesmo resultado do exemplo acima
apresentado. O robô desloca--se à posição de zero mecânico. As duas instruções são,
portanto, idênticas para este tipo de robô.
Também na indicação do ponto de destino em coordenadas cartesianas, podem ser omiti-
dos alguns componentes da indicação geométrica. A instrução
PTP {Z 1300, B 180}
proporciona um movimento do TCP na direção do eixo z para a posição absoluta de
1300 mm e um “acenar” do TCP de 180_.

ProgExpPHR4.1.7 12.03.06 pt

70 de 212
3 Programação de movimento (continuação)

Para a deslocação relativa do robô é usada novamente a instrução PTP_REL. Com


PTP_REL {Z 180, B -90}
o robô poderá ser colocado novamente na sua posição original. Também aqui é preciso ter
em atenção que os movimentos relativos não podem ser ativados de novo depois de uma
interrupção.

ZBASE

PTP {X 50, Y 50} PTP_REL {X 50, Y 50}

YBASE

200

150

100

50

XBASE
50 100 150 200

Fig. 17 Diferença entre coordenadas cartesianas absolutas e relativas

Com coordenadas cartesianas é possível realizar uma interligação de frames, através do


operador geométrico, diretamente na instrução de movimentos. Assim, poderá ser
iniciado, p.ex., uma deslocação em relação ao sistema de coordenadas da base, sem
alterar a variável $BASE.

Além disso, a deslocação da base com a ajuda do operador de dois pontos ainda
tem uma vantagem decisiva em relação a uma definição nova de $BASE:
O deslocamento realiza--se no passo de movimento, enquanto uma definição de
$BASE terá de ser feita, algures, antes do passo de movimento. Assim, também
com uma parada do programa e ativação de passo seguinte, é sempre
selecionado, em qualquer dos casos, a base correta para o movimento.
Uma definição nova múltipla de $BASE, como na seqüência seguinte,
¼
$BASE = $WORLD
¼
PTP POS_1
$BASE = {X 100,Y -200,Z 1000,A 0, B 180,C 45)
PTP POS_2
¼
pelo contrário, iria levar depois da interrupção do passo de movimento POS_2 e da nova
ativação do passo POS_1 a um ponto de destino errado, uma vez que também para o passo
de movimento POS_1 é necessária a base nova. O mesmo acontece também com uma
parada do primeiro passo de movimento, desde que esteja definido o respetivo avanço do
computador.

ProgExpPHR4.1.7 12.03.06 pt

71 de 212
Programação perito

Mais informações encontram--se no capítulo [Programação de movimento], parágrafo


[Avanço do computador].

Por essa razão, sempre que possível, $BASE e $TOOL só deverão ser definidos
uma vez, p.ex., na seção de inicialização do programa. Outras deslocações
poderão ser realizadas então com a ajuda do operador geométrico.

Num TouchUp com o pacote básico fornecido normalmente, são guardados na lista de
dados para cada ponto automaticamente $BASE e $TOOL.

No exemplo seguinte, é realizada na segunda instrução PTP uma deslocação das coorde-
nadas do ponto de destino, ou seja, 300 mm na direção X, --100 mm na direção Y e uma
rotação de 90_ em torno do eixo Z.

DEF FR_VERS ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME ;Variável HOME do tipo AXIS
DECL FRAME BASE1 ;Variável BASE1 do tipo FRAME

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
BASE1={FRAME: X 300,Y -100,Z 0,A 90,B 0,C 0}

;------------- Seção principal ------------


PTP HOME ; Movimento SAK
; Movimento em relação ao sistema de coordenadas $BASE
PTP {POS: X 540,Y 630,Z 1500,A 0,B 90,C 0,S 2,T 35}
; Movimento em relação ao SC $BASE deslocado em BASIS1
PTP BASE1:{POS: X 540,Y 630,Z 1500,A 0,B 90,C 0,S 2,T 35}
PTP HOME
END

Além disso, neste exemplo, as definições necessárias das velocidades, acelera-


ções e dos sistemas de coordenadas $BASE e $TOOL já não são realizadas
“manualmente”. Em vez disso, é utilizado para isso o pacote base “BAS.SRC” que
existe em todos os tipos de execução padrão. Para esse efeito, em primeiro lugar,
o programa terá de tomar conhecimento do mesmo, através da instrução EXT.
Com a instrução de inicialização
INI BAS (#INITMOV, 0)
são definidas, finalmente, todas as variáveis de sistema relevantes com valores padrão.

Mais informações encontram--se no capítulo [Subprogramas e funções],


parágrafo [Declaração].

ProgExpPHR4.1.7 12.03.06 pt

72 de 212
3 Programação de movimento (continuação)

SAK Antes de poder editar um programa, é necessário estabelecer a coincidência de passos


(SAK), isto é, a posição atual do robô terá de corresponder à posição programada. Uma vez
que o movimento SAK não é um movimento programado e ensaiado, terá de ser realizado
com a tecla de arranque premida (função de homem morto), ao mesmo tempo que a veloci-
dade é reduzida automaticamente. Ao atingir a trajetória programada, o movimento pára e
o programa poderá ser continuado, premindo novamente a tecla de arranque.

No modo “Automático Externo” não é realizado qualquer movimento SAK!

Como primeira instrução de movimento recomenda--se uma deslocação “Home”,


em que o robô é levado a uma posição inicial segura, claramente definida, na qual
é depois também estabelecida a coincidência de passos. Também é essa a
posição, para a qual o robô deverá ser levado no fim do programa.
SeT As indicações “S” e “T” numa indicação POS destinam--se a escolher entre várias posições
possíveis do robô para a mesma posição no espaço (devido às singularidades da
cinemática), uma determinada posição claramente definida.
Na primeira instrução de movimento e no caso de serem utilizadas coordenadas cartesia-
nas, é muito importante programar também “Status” e “Turn”, a fim de definir uma posição
de saída inequívoca. Uma vez que nos movimentos de trajetória (ver 3.3) “S” e “T” não são
tidos em consideração, a primeira instrução de movimento de um programa (deslocação
Home) deverá ser uma instrução PTP completa, que inclui a indicação de “Status” e “Turn”
(ou instrução PTP completa com as coordenadas dos eixos).
Nas instruções PTP seguintes, as indicações de “S” e “T” já podem ser omitidas, desde que
uma determinada posição do eixo não seja necessária, p.ex., devido a obstáculos. O robô
mantém o valor S antigo e escolhe o valor T que proporciona o trajeto axial mais curto reali-
zável que, devido à programação única de “S” e “T”, é sempre o mesmo no primeiro passo
PTP, em execuções de programa diferentes.

Status e Turn requerem ambos indicações de Integer que deverão ser realizadas em forma
binária.

Turn A extensão de uma indicação de posição cartesiana pela indicação de Turn permite também
a deslocação a ângulos de eixos maiores que +180_ ou mais pequenos que –180_, sem que
haja a necessidade de uma estratégia de deslocação especial (p.ex., pontos auxiliares).
Com eixos rotatóricos, os vários bits determinam o sinal do valor axial da forma seguinte:
Bit x = 0: ângulo do eixo x ³ 0_
Bit x = 1: ângulo do eixo x < 0_

Valor Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 A6 ³ 0_ A5 ³ 0_ A4 ³ 0_ A3 ³ 0_ A2 ³ 0_ A1 ³ 0_
1 A6 < 0_ A5 < 0_ A4 < 0_ A3 < 0_ A2 < 0_ A1 < 0_

Tab. 14 Significado dos bits de Turn

Assim, a indicação T ’B 10011’ significa que os ângulos dos eixos 1, 2 e 5 são negativos e
os ângulos dos eixos 3, 4 e 6 positivos (todos os bits 0 com valores mais elevados podem
ser omitidos).
Status Com o Status S são resolvidas as ambigüidades da posição dos eixos (ver Fig. 18). Assim,
S depende da respetiva cinemática do robô.

ProgExpPHR4.1.7 12.03.06 pt

73 de 212
Programação perito

Ambigüidades
Eixo 5

Eixo 3
Eixo 2

Eixo 5

Eixo 4 Eixo 6

Fig. 18 Exemplos para cinemáticas de robô ambíguas

O significado dos vários bits é o seguinte:


Bit 0: posição do ponto de carpo (zona base / zona acima da cabeça)
Bit 1: configuração do braço
Bit 2: configuração do manípulo

Para todos os robôs de braço flexível de 6 eixos, os bits são definidos de acordo com a tabela
seguinte:

Valor Bit 2 Bit 1 Bit 0


0 0_ £ A5 < 180_ A3 < f Zona base
A5 < --180_ (f depende do tipo de robô)
1 --180_ £ A5 < 0_ A3 ³ f Zona acima da cabeça
A5 ³ 180_ (f depende do tipo de robô)

Tab. 15 Bits de Status para robôs de braço flexível de 6 eixos

No sentido figurado, a zona base/acima da cabeça pode ser imaginada de forma cartesiana.
Para esse efeito, são definidos os conceitos seguintes:
Ponto de carpo: Interface dos eixos do manípulo
Sistema de coordenadas A1: Com o eixo 1 em 0_, é idêntico ao sistema de coordenadas
$ROBROOT. Com valores diferentes de a 0_, acompanha o
movimento do eixo 1.
Assim, a zona base/acima da cabeça poderá ser definida da forma seguinte:
G Se o valor x do ponto de carpo, expresso no sistema de coordenadas A1, for positivo,
o robô encontra--se na zona base.
G Se o valor x do ponto de carpo, expresso no sistema de coordenadas A1, for negativo,
o robô encontra--se na zona acima da cabeça.

ProgExpPHR4.1.7 12.03.06 pt

74 de 212
3 Programação de movimento (continuação)

O bit 1 indica a posição do braço. A definição do bit depende do respetivo tipo de robô. Com
robôs cujos eixos 3 e 4 se cruzam, aplica--se: bit 1 tem o valor 0, quando o eixo 3 < 0_, de
resto, o bit 1 é = 1. Com robôs com um offset que se situa entre o eixo 3 e o eixo 4 (p.ex.,
KR 30, ver Fig. 19), a posição angular, na qual o valor do bit 1 é alterado, depende da
dimensão deste offset.

Offset

Fig. 19 Offset entre o eixo 3 e o eixo 4 com um KR 30

Em Fig. 20 são representados os efeitos que os bits de Status exercem sobre a configuração
do robô. A deslocação ao mesmo ponto no espaço foi realizada com quatro posições dife-
rentes do robô. Na primeira posição, o robô encontra--se na posição inicial. O eixo 5 tem um
valor de cerca de 45_, o eixo 3 um valor de cerca de 80_.
Em relação à segunda configuração do robô, a diferença praticamente não é perceptível.
Apenas o eixo 4 foi rodado 180_ e os outros eixos fizeram o respetivo acompanhamento.
Enquanto a configuração do braço se manteve igual, foi alterada a configuração do
manípulo: o eixo 5 tem agora cerca de –45_, portanto o bit de Status 2 é 1.
Da posição 2 para a posição 3 é alterada agora a configuração do braço. O eixo 3 roda para
uma posição angular de cerca de –50_, e o bit de Status 1 adota o valor 0.
Na quarta posição, finalmente, o robô encontra--se na posição acima da cabeça. Para
esse efeito foi sobretudo o eixo 1 que realizou uma rotação de 180_. O bit de Status 0
muda para 1.

ProgExpPHR4.1.7 12.03.06 pt

75 de 212
Programação perito

Fig. 20 Efeitos exercidos pelos bits de Status sobre a posição do robô

ProgExpPHR4.1.7 12.03.06 pt

76 de 212
3 Programação de movimento (continuação)

3.3 Movimentos de trajetória (Movimentos--CP = Continuous Path)

3.3.1 Velocidade e aceleração

Ao contrário do que acontece com os movimentos PTP, nos movimentos de trajetória não
são indicadas apenas as posições de arranque e de destino. Adicionalmente, é exigido que
a ponta da ferramenta do robô se movimente sobre uma trajetória linear ou circular entre
estes pontos.
Assim, as velocidades e acelerações a indicar já não se referem apenas aos vários eixos,
mas sim ao movimento do TCP, o que significa que a ponta da ferramenta é movimentada
com uma velocidade que foi definida com precisão. As velocidades e acelerações terão de
ser programadas em relação à translação, ao ângulo de oscilação e ao ângulo de rotação.
Tab. 16 fornece um resumo geral das variáveis de sistema a programar e da sua unidade.

Nome de Tipo de Uni- Função


variável dados dade
Velocidades $VEL.CP REAL m/s Velocidade de trajetória
$VEL.ORI1 REAL _/s Velocidade de oscilação
$VEL.ORI2 REAL _/s Velocidade de rotação
Acelerações $ACC.CP REAL m/s@ Aceleração de trajetória
$ACC.ORI1 REAL _/s@ Aceleração de oscilação
$ACC.ORI2 REAL _/s@ Aceleração de rotação

Tab. 16 Variáveis de sistema para velocidades e acelerações de movimentos

Pelo menos um dos componentes de movimento translação, oscilação ou rotação executa


o movimento, a qualquer momento, com a aceleração ou velocidade programada. Os
componentes não dominantes são adaptados, de forma a ficarem fase sincronizados no
tempo.

Também as velocidades e acelerações dos movimentos de trajetória são predefinidas com


os valores máximos definidos em $CONFIG.DAT ou nos dados de máquina, aquando da
ativação da seqüência de inicialização do pacote base.

Além disso, nos movimentos CP a velocidade e a aceleração do eixo são supervisionados e,


em caso de ultrapassagem dos limites de supervisionamento definidos nas variáveis de sis-
tema $ACC_ACT_MA e $VEL_ACT_MA, é provocada uma reação de stop e emitida uma men-
sagem de erro. Estes limites situam--se, normalmente, em 250% da aceleração nominal do
eixo (Acceleration) e em 110% da velocidade nominal do eixo (Velocity). Estas áreas de su-
pervisionamento são aplicáveis a todos os modos de serviço e à deslocação manual.
Através da variável de sistema $CP_VEL_TYPE, existe a possibilidade de reduzir os avan-
ços dos eixos e, desta forma, a aceleração e a velocidade, a fim de evitar uma resposta dos
limites de supervisionamento (reação stop). Como ajuste por defeito, a variável é definida
com #CONSTANT, ou seja, no modo de programa a redução não está ativa. Para ativar esta
função no modo de serviço T1, é definida #VAR_T1 (em T1 são usadas velocidades e acele-
rações de eixo mais reduzidas) e em todos os modos de serviço #VAR_ALL. Em modo ma-
nual a redução está sempre ativa.
Com a variável de sistema $CPVELREDMELD é conseguida uma mensagem nos dois modos
de teste, caso a velocidade de trajetória seja reduzida. Para esse efeito, a variável para uma
mensagem deve ser definida com “1”.

ProgExpPHR4.1.7 12.03.06 pt

77 de 212
Programação perito

3.3.2 Orientação
Caso se pretenda alterar a orientação da ferramenta no espaço durante o movimento de
trajetória, o tipo de orientação pode ser definido com a ajuda da variável de sistema
$ORI_TYPE (ver Fig. 21):

G $ORI_TYPE = #CON- Durante o movimento de trajetória, a orientação


STANT mantém--se constante; para o ponto final a orientação
programada é ignorada, sendo utilizada a do ponto de
início.
G $ORI_TYPE = #VAR Durante o movimento de trajetória, a orientação é alte-
rada continuamente, desde a orientação no início até
à orientação no fim. Este valor também é definido
aquando da inicialização, através de BAS(#INIT-
MOV,0).

Fig. 21 Alteração da orientação durante um movimento linear

ProgExpPHR4.1.7 12.03.06 pt

78 de 212
3 Programação de movimento (continuação)

Com movimentos circulares, além da orientação constante e variável ainda poderá ser feita
a escolha entre uma orientação referente ao espaço e uma orientação referente à trajetória:

G $CIRC_TYPE = #BASE orientação referente ao espaço durante o movimento


circular. Este valor também é definido por BAS
(#INITMOV,0), aquando da inicialização.
G $CIRC_TYPE = #PATH orientação referente à trajetória durante o movimento
circular.
constante + Na orientação referente à trajetória, realiza--se a orientação do eixo longitudinal da
referente à ferramenta, em relação ao plano do círculo e à tangente de círculo. Estas relações podem
trajetória ser explicadas mais pormenorizadamente com a ajuda da chamada tecnologia tripla que
acompanha a trajetória (ver Fig. 22).

Fig. 22 Orientação constante referente à trajetória durante os movimentos circulares

A tecnologia tripla que acompanha a trajetória é composta do vector da tangente de círculo


t, do vector da normal n e do vector da binormal b. A orientação da ferramenta é
acompanhada em Fig. 22 pela tecnologia tripla no segmento do círculo. No que se refere
à tecnologia tripla que acompanha a trajetória, não há uma alteração da orientação em
relação às posições da ferramenta. Este é, entre outros, um requisito muito importante para
a soldadura a arco.
No exemplo mostrado, a orientação da ferramenta em relação à tecnologia tripla que
acompanha a trajetória não é alterada durante o movimento realizado desde o ponto de
início até ao ponto de destino ($ORI_TYPE=#CONST).

ProgExpPHR4.1.7 12.03.06 pt

79 de 212
Programação perito

variável + Caso se pretenda uma alteração da orientação referente à trajetória entre a posição de
referente à início e a posição de destino ($ORI_TYPE=#VAR), esta é realizada, em relação à tecnologia
trajetória tripla, por uma sobreposição dos movimentos de rotação e oscilação (ver Fig. 23). Por
conseguinte, na tecnologia tripla que acompanha a trajetória, a orientação durante os movi-
mentos circulares é totalmente análoga à que se realiza durante os movimentos lineares.

Fig. 23 Orientação variável referente à trajetória durante os movimentos circulares

ProgExpPHR4.1.7 12.03.06 pt

80 de 212
3 Programação de movimento (continuação)

constante + Na orientação ao espaço, esta realiza--se em relação ao sistema base atual ($BASE).
referente ao
espaço A orientação referente ao espaço é vantajosa, sobretudo, em todas as aplicações em que
o ponto fulcral é o movimento de trajetória, ou seja, a orientação da ponta da ferramenta
sobre o trajeto circular. Nomeadamente quando se trata de uma alteração mínima da orien-
tação entre o ponto de início e o ponto de destino ou de aplicações com uma orientação
exata e constante no espaço (ver Fig. 24) durante um movimento circular (p.ex., aplicações
de cola com um bico de colagem simétrico--rotativo).

Fig. 24 Orientação constante referente ao espaço durante os movimentos circulares

ProgExpPHR4.1.7 12.03.06 pt

81 de 212
Programação perito

variável + Uma alteração da orientação referente ao espaço ($ORI_TYPE=#VAR) entre a posição de


referente ao início e a posição de destino realiza--se também aqui através da sobreposição dos movimen-
espaço tos de oscilação e rotação (ver Fig. 25). Neste caso, porém, em relação ao sistema de
coordenadas da base.

Fig. 25 Orientação variável referente ao espaço durante os movimentos circulares

Em Tab. 17 encontra--se uma lista das predefinições das variáveis de sistema em relação
à orientação durante os movimentos de trajetória:

no sistema por BAS(#INITMOV,0)


$ORI_TYPE #VAR
$CIRC_TYPE #PATH #BASE

Tab. 17 Predefinições de $ORI_TYPE e $CIRC_TYPE

ProgExpPHR4.1.7 12.03.06 pt

82 de 212
3 Programação de movimento (continuação)

3.3.3 Movimentos lineares


LIN Com um movimento linear, a KR C... calcula uma reta que vai da posição atual (no programa
este é o último ponto programado) até à posição indicada na instrução de movimento.
A programação de um movimento linear realiza--se por meio das palavras chave LIN ou
LIN_REL, juntamente com a indicação do ponto de destino, portanto, analogamente à
programação PTP. Para movimentos lineares, a posição de destino é indicada em valores
cartesianos. Portanto, são admissíveis apenas os tipos de dados FRAME ou POS.

Com movimentos lineares, o estado angular do ponto de destino terá de ser igual
ao do ponto de início. Assim, uma indicação de Status e Turn num ponto de
destino do tipo de dados POS é ignorada. Por isso, antes da primeira instrução
LIN, já terá de ter sido programado um movimento PTP com a indicação
completa das coordenadas (p.ex., movimento HOME).
A definição das variáveis de velocidade e aceleração, necessária para os movimentos de
trajetória, bem como a definição dos sistemas de coordenadas da base e da ferramenta
realizam--se no exemplo de programa seguinte novamente através da rotina BAS.SRC.

DEF LIN_BEW ()

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND: IN, REAL: IN)
DECL AXIS HOME ;Variável HOME de tipo AXIS

;---------- Inicialização ---------


BAS (#INITMOV, 0) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
HOME = {AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Seção principal ------------


PTP HOME ; Movimento SAK
PTP {A5 30}

; Movimento linear em direção à posição indicada, a orientação


; é alterada continuamente, com vista à orientação de destino
LIN {X 1030,Y 350,Z 1300,A 160,B 45,C 130}

; Movimento linear no plano Y-Z, S e T são ignorados


LIN {POS: Y 0,Z 800,A 0,S 2,T 35}

; Movimento linear em direção à posição indicada, a orientação


; não é alterada
$ORI_TYPE=#CONST
LIN {FRAME: X 700,Y -300,Z 1000,A 23,B 230,C -90}

; A orientação continua a não ser alterada


LIN {FRAME: Z 1200,A 90,B 0,C 0}

; Movimento relativo ao longo do eixo X


LIN_REL {FRAME: X 300}

PTP HOME
END

ProgExpPHR4.1.7 12.03.06 pt

83 de 212
Programação perito

3.3.4 Movimentos circulares


CIRC Para uma definição inequívoca de um círculo ou de um arco circular no espaço são necessá-
rios 3 pontos diferentes que não se encontram sobre uma reta.
O ponto de início de um movimento circular é dado pela posição atual, como em PTP ou LIN.
Para a programação de um movimento circular com as instruções CIRC ou CIRC_REL,
é necessário programar, além do ponto de destino, também um ponto auxiliar. Com os
cálculos da trajetória de movimento realizados pela unidade de comando, são avaliados
apenas os componentes translatóricos (X, Y, Z) do ponto auxiliar. Assim, a orientação da
ponta da ferramenta é alterada, continuamente, desde o ponto de início até ao ponto de
CA destino, conforme a orientação definida, ou mantém--se constante.

Adicionalmente à posição auxiliar e à posição de destino ainda pode ser programado um


ângulo circular, através da opção CA (Circular Angle). A geometria do arco circular
continua a ser determinada pelos pontos de início, auxiliar e de destino. Mas a posição de
destino situada no arco circular para onde se pretende realizar a deslocação, é
determinada através do ângulo circular programado. Este procedimento é útil, sobretudo,
para a programação posterior da posição de destino – sem alteração da geometria de
círculo.
O arco circular a executar poderá ser prolongado ou reduzido, de acordo com o ângulo circu-
lar. A orientação de destino programada é atingida então no ponto de destino real. Através
do sinal do ângulo circular, poderá ser determinado o sentido de rotação, ou seja, a direção
na qual deverá ser executado o arco circular (ver Fig. 26):
CA > 0_ no sentido programado (ponto de início ® ponto auxiliar ®
ponto de destino)
CA < 0_ ao contrário do sentido programado (ponto de início ® ponto de
destino ® ponto auxiliar)

O valor do ângulo circular não é limitado. Sobretudo, podem ser programados também
círculos completos (> 360_).

CA > 0° CA < 0°

Ponto de destino real


Ponto auxiliar

´
Ponto auxiliar
´ Ponto de
destino
programado
CA = 235°
´ Ponto de destino
programado
´
Ponto de
destino real
CA = --235°
Ponto de início Ponto de início

Fig. 26 Efeito da opção CA sobre a instrução CIRC ou CIRC_REL

As indicações relativas à posição auxiliar e à posição de destino (CIRC_REL) referem--se


sempre à posição de início. Tal como nos movimentos LIN, as indicações de posição espe-
cíficas para os eixos não são admissíveis. Também $BASE e $TOOL têm de estar totalmente
definidos, antes de poder ser executado um movimento circular.

ProgExpPHR4.1.7 12.03.06 pt

84 de 212
3 Programação de movimento (continuação)

DEF CIRC_BEW ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Seção principal ------------


PTP HOME ;Movimento SAK
PTP {POS: X 980,Y -238,Z 718,A 133,B 66,C 146,S 6,T 50}

; orientação variável referente ao espaço (predefinição)


CIRC {X 925,Y -285,Z 718},{X 867,Y -192,Z 718,A 155,B 75,C 160}

; orientação constante referente ao espaço


; ponto de destino determinado através da indicação do ângulo
$ORI_TYPE=#CONST
CIRC {X 982,Y -221,Z 718,A 50,B 60,C 0},{X 1061,Y -118,Z 718,
A -162,B 60,C 177}, CA 300.0

; orientação constante referente à trajetória


; ponto de destino por indicação do ângulo (para trás)
$CIRC_TYPE=#PATH
CIRC {X 867,Y -192,Z 718},{X 982,Y -221,Z 718,A 0}, CA -150

$ORI_TYPE=#VAR
LIN {A 100} ; reorientação do TCP

; orientação variável referente à trajetória


CIRC {X 963.08,Y -85.39,Z 718},{X 892.05,Y 67.25,Z 718.01,
A 97.34,B 57.07,C 151.11}

; movimento circular relativo


CIRC_REL {X -50,Y 50},{X 0,Y 100}

PTP HOME
END

ProgExpPHR4.1.7 12.03.06 pt

85 de 212
Programação perito

3.4 Avanço do computador


Uma característica essencial de um robô industrial é a rapidez com a qual ele pode realizar
as suas tarefas. Além da dinâmica do robô, tem um significado decisivo a efetividade da
execução do programa de utilizador, que além dos movimentos é constituído também por
instruções aritméticas que comandam a periferia.
Uma execução mais rápida do programa pode ser conseguido
G pela redução da duração do movimento e
G pela redução do tempo de parada entre os movimentos.
Com condições secundárias predefinidas, como as velocidades e acelerações máximas dos
eixos, o primeiro ponto pode ser conseguido por uma aproximação dos movimentos,
otimizada no tempo.

Mais informações encontram--se no capítulo [Programação de movimento], parágrafo


[Movimentos de aproximação].

O tempo de parada entre os movimentos poderá ser reduzido, quando as instruções de


aritmética e lógica demoradas são realizadas entre os passos de movimento, durante o
movimento do robô, ou seja, durante o avanço (as instruções “têm um avanço” em relação
ao movimento).
$ADVANCE A variável de sistema $ADVANCE permite determinar o numero de passos de movimento que
o avanço poderá estar à frente do tratamento principal (ou seja, à frente do passo de movi-
mento atual). O indicador principal que durante a execução do programa é visível no painel
de operação, mostra sempre o passo de movimento que naquele momento está a ser execu-
tado.
Pelo contrário, o indicador do avanço não é visível, e tanto pode apontar para instruções que
são totalmente executadas pela unidade de comando, como para passos de movimento que
apenas são preparados pela unidade de comando, para serem executados mais tarde, ou
seja, no tratamento principal (ver Fig. 27).

Indicador principal

O indicador do avanço encontra--se neste lo-


cal; $ADVANCE = 1

Fig. 27 Indicadores principal e de avanço

ProgExpPHR4.1.7 12.03.06 pt

86 de 212
3 Programação de movimento (continuação)

No excerto de programa acima mostrado, o avanço é definido com 1 e o indicador principal


encontra--se na linha 16 (o que significa que está a ser executado, nesse momento, o
movimento LIN). Um avanço do computador de 1 significa que as instruções da linha 16 até
à linha 22 já foram executadas por completo, paralelamente à execução dos movimentos,
e que os dados relativos aos movimentos PTP na linha 24 estão a ser preparados.

Para permitir uma aproximação, terá de ser definido um avanço do computador de pelo
menos 1 (a variável $ADVANCE possui normalmente o valor “3”. Possíveis são, no
máximo, 5 passos de avanço).
Num subprograma Interrupt não é possível qualquer avanço do computador. A unidade
de comando executa os programas Interrupt sempre linha por linha, por isso, não é
possível fazer aproximações em programas Interrupt.

Predefinições de $ADVANCE:

no sistema por BAS (#INITMOV, 0)


$ADVANCE 0 3

parada As instruções e os dados que exercem uma influência sobre a periferia (p.ex., ins-
automática do
avanço truções de entrada/saída) ou se referem ao estado atual do robô, provocam uma
paragem do avanço (ver Tab. 18). Isto é necessário para garantir a seqüência
temporal correta das instruções e dos movimentos do robô.

Instruções ANOUT ON ANOUT OFF


ANIN ON ANIN OFF
DIGIN ON DIGIN OFF
PULSE
HALT WAIT
CREAD CWRITE COPEN CCLOSE
SREAD SWRITE
Combinação CP-PTP sem aproximação
Instruções em END (caso no módulo não tenha sido definido um interrupt global)
combinação
INTERRUPT DECL (caso o interrupt já tenha sido declarado)
com um inter-
rupt RESUME sem BRAKE
Variáveis de $ANOUT[Nr] $ANIN[Nr]
sistema habi-
habi
$DIGIN1 $DIGIN2 ¼ $DIGIN6
tuais
$OUT[Nr] $IN[Nr]
$AXIS_ACT $AXIS_BACK $AXIS_FOR $AXIS_RET
$POS_ACT $POS_BACK $POS_FOR $POS_RET
$AXIS_INC $AXIS_INT $POS_ACT_MES $POS_INT
$TORQUE_AXIS $ASYNC_AXIS
$TECH[X].MODE, $TECH[X].CLASS com determinadas operações
$LOAD, $LOAD_A1, $LOAD_A2, $LOAD_A3 (caso se trate de
um robô absolutamente preciso com mudança da carga)

ProgExpPHR4.1.7 12.03.06 pt

87 de 212
Programação perito

Outras variá- $ALARM_STOP $AXIS_ACTMOD $INHOME_POS $ON_PATH


veis de sistema $EM_STOP $EXTSTARTTYP $REVO_NUM $SAFETY_SW
$ACT_TOOL $PAL_MODE $ACT_BASE $ACT_EX_AX
$OV_PRO $WORKSPACE $IBUS_OFF $IBUS_ON
$ASYNC_EX_AX
_DECOUPLE
Variáveis todas, com
importadas acesso
Sonstiges Caso entre passos com aproximação haja uma mudança de filtro, é
provocada uma paragem de avanço.

Tab. 18 Instruções e variáveis que provocam uma parada automática do avanço

CONTINUE Nos casos de aplicação, nos quais esta parada do avanço deverá ser impedida, a instrução
CONTINUE terá de ser programada diretamente antes da respetiva instrução. Nesse caso,
a unidade de comando continua o avanço. Mas o efeito é limitado à linha de programa
seguinte (também linha vazia!!).

Se, pelo contrário, quiser parar o avanço num determinado local, sem ter de alterar a
variável de sistema $ADVANCE, poderá recorrer a um pequeno truque: Programe nesse
local simplesmente um tempo de espera de 0 segundos. Nesse caso, a instrução WAIT
provoca uma parada automática do avanço, mas não tem outros efeitos:

WAIT SEC 0

Mais informações encontram--se no capítulo [Controle de execução do programa],


parágrafo [Tempos de espera].

ProgExpPHR4.1.7 12.03.06 pt

88 de 212
3 Programação de movimento (continuação)

3.5 Movimentos de aproximação


Para aumentar a velocidade, poderá haver um posicionamento aproximado naqueles
pontos aos quais não é preciso fazer uma deslocação exata. O robô encurta o caminho,
como se mostra na Fig. 28.
Contorno de O contorno de aproximação é gerado, automaticamente, pela unidade de comando. O
aproximação programador só tem uma influência sobre o início e o fim da aproximação. Para calcular o
passo de aproximação, a unidade de comando necessita dos dados do ponto de início, do
ponto de aproximação e do ponto de destino.

A fim de permitir uma aproximação, o avanço do computador ($ADVANCE) deverá


ser definido com 1. Caso o avanço do computador seja muito pequeno, aparece
a mensagem “Aproximação impossível”, e a deslocação aos pontos é exata.
Se depois de uma instrução de aproximação programar uma instrução que dá origem a uma
parada automática do avanço, a aproximação não é possível.

Mais informações acerca da instrução TRIGGER como solução encontram--se no capítulo


[Ações de comutação referentes ao trigger e à trajetória].

Aproximação

Ponto auxiliar

Ponto de destino

Ponto de início

Fig. 28 Aproximação a pontos auxiliares

ProgExpPHR4.1.7 12.03.06 pt

89 de 212
Programação perito

3.5.1 Aproximação PTP--PTP


Para o posicionamento aproximado PTP, a unidade de comando calcula as distâncias que
os eixos terão de percorrer na zona da aproximação e planeia em relação a todos os eixos
os perfis de velocidade que asseguram as passagens tangenciais dos passos individuais
ao contorno de aproximação.
Início do A aproximação começa quando o último eixo (= eixo dominante) fica abaixo de um determi-
posicionamento nado ângulo estabelecido em relação ao ponto de aproximação. Nos dados de máquina há
aproximado um ângulo predefinido para cada eixo:
$APO_DIS_PTP[1] = 90

$APO_DIS_PTP[6] = 90
Com a ajuda de $APO.CPTP pode ser indicado no programa o início da aproximação, num
valor percentual em relação a estes valores máximos. P.ex.:
$APO.CPTP = 50
Nesse caso, a aproximação começa quando ao primeiro eixo ainda falta percorrer um
ângulo restante de 45_ (50% de 90_) até ao ponto de aproximação. A aproximação realiza--
se exatamente no momento em que o primeiro eixo já percorreu um ângulo de 45_ desde
o ponto de aproximação.

Þ Quanto maior $APO.CPTP, mais arredondada é a trajetória.

A aproximação nunca poderá ser realizada a meio do passo! Nesse caso, o sistema realiza
automaticamente o limite ao meio do passo.
O posicionamento aproximado a um ponto é indicado numa instrução PTP, colocando no
C_PTP fim a palavra chave C_PTP:
PTP PONTO4 C_PTP
Também o passo de aproximação PTP é realizado com uma otimização do tempo. Isto signi-
fica que durante a aproximação há sempre pelo menos um dos eixos que se desloca com
o valor limite programado em relação à aceleração ou à velocidade. Ao mesmo tempo fica
garantido que nenhum dos eixos ultrapassa os binários admissíveis da engrenagem e do
motor. O perfil de andamento mais elevado, ajustado por norma, garante que os movimentos
são executados sem variação da velocidade ou da aceleração.

Mais informações encontram--se no capítulo [Programação de movimento], parágrafo


[Perfil de deslocação mais elevado].

O exemplo seguinte mostra o efeito proporcionado pela instrução de aproximação e pela


variável $APO.CPTP. A trajetória percorrida é representada em Fig. 29, no plano x--y.
Nomeadamente, aqui é também visível que com movimentos PTP, o TCP não se
movimenta, formando uma reta entre os pontos de destino.

ProgExpPHR4.1.7 12.03.06 pt

90 de 212
3 Programação de movimento (continuação)

DEF UEBERPTP ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Seção principal ------------


PTP HOME ; Movimento SAK

PTP {POS:X 1159.08,Y -232.06,Z 716.38,A 171.85,B 67.32,C


162.65,S 2,T 10}

;Posicionamento aproximado ao ponto


PTP {POS:X 1246.93,Y -98.86,Z 715,A 125.1,B 56.75,C 111.66,S 2,T
10} C_PTP

PTP {POS:X 1109.41,Y -0.51,Z 715,A 95.44,B 73.45,C 70.95,S 2,T


10}

;Posicionamento aproximado a dois pontos


$APO.CPTP=20
PTP {POS:X 1296.61,Y 133.41,Z 715,A 150.32,B 55.07,C 130.23,S
2,T 11} C_PTP
PTP {POS:X 988.45,Y 238.53,Z 715,A 114.65,B 50.46,C 84.62,S 2,T
11} C_PTP

PTP {POS:X 1209.5,Y 381.09,Z 715,A -141.91,B 82.41,C -159.41,S


2,T 11}

PTP HOME
END

ProgExpPHR4.1.7 12.03.06 pt

91 de 212
Programação perito

x=1296,61
y=133,41

x=1246,93
y=--98,86

x=1209,5
y=381,09

x=1159,08
y=--232,06

x=1109,41
y=--0,51

x=988,45
y=238,53

Fig. 29 Exemplo para um posicionamento aproximado PTP--PTP

Uma vez que a trajetória de um movimento PTP, geralmente, não é uma reta, nem se situa
num plano espacial, em princípio, também não deveria ser representada como em Fig. 29.
Apesar do fato de o valor z de todos os pontos do exemplo ser igual, nem todos os pontos
da trajetória de movimento se situam no plano z=715 mm. A trajetória representada é,
portanto, apenas uma projeção da trajetória real no plano x--y.

ProgExpPHR4.1.7 12.03.06 pt

92 de 212
3 Programação de movimento (continuação)

3.5.2 Aproximação LIN--LIN


Para um movimento contínuo ao longo de trajetórias complexas, há a necessidade de reali-
zar posicionamentos aproximados também entre passos individuais lineares. Nos passos
LIN, a passagem entre os vários movimentos de orientação também tem de ser contínua.

Como contorno de aproximação, a unidade de comando calcula uma trajetória em forma


de uma parábola, visto que esta forma de contorno proporciona uma aproximação muito
eficaz da trajetória dos passos individuais, ao mesmo tempo que permite aproveitar ao
máximo as reservas de aceleração na zona da aproximação.

Início da apro- Para a determinação do início da aproximação existem três variáveis predefinidas (ver
ximação Tab. 19):

Variável Tipo de Uni- Significado Palavra chave


dados dade na instrução
$APO.CDIS REAL mm Critério de distância translatórico C_DIS
$APO.CORI REAL _ Distância de orientação C_ORI
$APO.CVEL INT % Critério de velocidade C_VEL

Tab. 19 Variáveis de sistema para a determinação do início da aproximação

Critério de Às variáveis $APO.CDIS poderá ser atribuída uma distância translatórica. Ao realizar--se
distância o trigger com esta variável, a unidade de comando sai do contorno do passo individual exata-
mente no momento em que a distância ao ponto de destino fica abaixo do valor definido em
$APO.CDIS.
Critério de À variável $APO.CORI poderá ser atribuída uma distância de orientação. Nesse caso, a
orientação saída do contorno do passo individual realiza--se exatamente no momento em que o ângulo
de orientação dominante (oscilação ou rotação do eixo longitudinal da ferramenta) fica
abaixo da distância ao ponto de aproximação programado, definido em $APO.CORI.
Critério de À variável $APO.CVEL poderá ser atribuído um valor percentual. Este valor indica a
velocidade percentagem da velocidade programada ($VEL) em que deverá ser iniciado o processo de
aproximação na fase de frenagem do passo individual. Aqui é avaliado o componente
resultante dos fatores translação, oscilação e rotação que durante o movimento atinge o
valor de velocidade programado ou o que mais se aproxima dele.

Þ Quanto maiores são os valores em $APO.CDIS, $APO.CORI ou


$APO.CVEL, mais cedo começa a aproximação.
Internamente, o sistema permite, eventualmente, a redução da aproximação
(meio do passo, critério de simetria), mas nunca o aumento.
C_DIS A aproximação é ativada por acrescentar à instrução LIN ou LIN_REAL uma das palavras
C_ORI chave C_DIS, C_ORI ou C_VEL.
C_VEL
O exemplo seguinte pretende tornar o assunto mais explícito, em ligação com Fig. 30:

ProgExpPHR4.1.7 12.03.06 pt

93 de 212
Programação perito

DEF UEBERLIN ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Seção principal ------------


PTP HOME ; Movimento SAK

PTP {POS: X 1159.08,Y -232.06,Z 716.38,A 171.85,B 67.32,C


162.65,S 2,T 10}

;Posicionamento aproximado ao ponto segundo o critério de distância


$APO.CDIS=20
LIN {X 1246.93,Y -98.86,Z 715,A 125.1,B 56.75,C 111.66} C_DIS
LIN {X 1109.41,Y -0.51,Z 715,A 95.44,B 73.45,C 70.95}

;Posicionamento aproximado a dois pontos


LIN {X 1296.61,Y 133.41,Z 714.99,A 150.32,B 55.07,C 130.23}
C_ORI
LIN {X 988.45,Y 238.53,Z 714.99,A 114.65,B 50.46,C 84.62} C_VEL

LIN {X 1209.5,Y 381.09,Z 715,A -141.91,B 82.41,C -159.41}

PTP HOME
END

x=1296,61
y=133,41

x=1246,93
y=--98,86
x=1209,5
y=381,09

x=1159,08
y=--232,06

x=1109,41
y=--0,51

x=988,45
y=238,53

Fig. 30 Exemplo para um posicionamento aproximado LIN--LIN

ProgExpPHR4.1.7 12.03.06 pt

94 de 212
3 Programação de movimento (continuação)

A posição na qual o contorno de aproximação passa ao passo LIN seguinte, é calculada


automaticamente pela unidade de comando. Caso $ACC e $VEL sejam idênticos para
ambos os passos individuais e os comprimentos dos passos sejam suficientes, a parábola
de aproximação decorre simetricamente, em relação à bissetriz angular entre os dois
passos individuais. Quando se trata de passos individuais curtos, o início do
posicionamento aproximado é limitado para a metade do comprimento do passo. A
velocidade é reduzida de forma a que uma parada exata que eventualmente se possa
seguir, seja sempre cumprida.

As passagens entre os passos individuais e o contorno de aproximação são contínuas e


decorrem tangencialmente, o que garante uma passagem “suave”, pouco desgastante para
os sistemas mecânicos, uma vez que os componentes de velocidades são sempre constan-
tes.
O contorno gerado pela unidade de comando na zona da aproximação não depende de alte-
rações do override, as quais são admissíveis a qualquer momento do movimento.

ProgExpPHR4.1.7 12.03.06 pt

95 de 212
Programação perito

3.5.3 Aproximação CIRC--CIRC e aproximação CIRC--LIN


A questão que se põe na aproximação entre dois passos CIRC e outros passos CP (LIN
ou CIRC) é quase idêntica à que se verifica entre dois passos LIN. Tanto o movimento de
orientação como o movimento translatórico devem ser realizados, de forma a que a passa-
gem de um contorno de passo individual a outro se realize sem saltos de velocidade. O início
da aproximação é definido também aqui pelas variáveis $APO.CDIS, $APO.CORI ou
$APO.CVEL, cuja avaliação é totalmente idêntica à dos passos LIN. A definição do critério
de aproximação pretendido também se realiza com a ajuda das palavras chave C_DIS,
C_ORI ou C_VEL (ver 3.5.2).

Mais informações encontram--se no capítulo [Programação de movimento], parágrafo


[Aproximação LIN--LIN].

Também a aproximação CIRC--CIRC deverá ser tornada mais explícita, com a ajuda de um
exemplo e da trajetória de movimento representada (ver Fig. 31):

DEF UEBERCIR ( );--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME;---------- Inicialização ---------
BAS (#INITMOV,0 ) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0};-------------
Seção principal ------------
PTP HOME ; Movimento SAK
PTP {POS: X 980,Y -238,Z 718,A 133,B 66,C 146,S 6,T 50}
; Orientação variável referente ao espaço
; Aproximação segundo o critério de distância
$APO.CDIS=20
CIRC {X 925,Y -285,Z 718},{X 867,Y -192,Z 718,A 155,B 75,C 160}
C_DIS

; Orientação constante referente ao espaço


; Ponto de destino determinado pela indicação do ângulo
; Aproximação não é possível devido à paragem do avanço através
de $OUT
$ORI_TYPE=#CONST
CIRC {X 982,Y -221,Z 718,A 50,B 60,C 0},{X 1061,Y -118,Z 718,A
-162,B 60,C 177}, CA 150 C_ORI
$OUT[3]=TRUE

; Orientação variável referente à trajetória


; Aproximação segundo o critério de orientação
$ORI_TYPE=#VAR
$CIRC_TYPE=#PATH
CIRC {X 963.08,Y -85.39,Z 718},{X 892.05,Y 67.25,Z 718.01,A
97.34,B 57.07,C 151.11} C_ORI

ProgExpPHR4.1.7 12.03.06 pt

96 de 212
3 Programação de movimento (continuação)

; Movimentos circulares relativos

; Aproximação segundo o critério de velocidade


$APO.CVEL=50
CIRC_REL {X -50,Y 50},{X 0,Y 100} C_VEL

; Aproximação segundo o critério de distância


$APO.CDIS=40
CIRC_REL {X -50,Y 50},{X 0,Y 100} C_DIS

CIRC_REL {X -50,Y 50},{X 0,Y 100}

PTP HOME
END

x=980
y=--238

150_

y=100 y=100 y=100

x=867
y=--192

Fig. 31 Exemplo para um posicionamento aproximado CIRC--CIRC

Devido à necessidade de passagens tangenciais, na aproximação com passos CIRC


geralmente não pode ser calculado um contorno de aproximação simétrico. Assim, a
trajetória de aproximação é constituída por dois segmentos de parábola, cuja passagem
de um ao outro é tangencial e que passam também tangencialmente aos passos
individuais (ver Fig. 32).

ProgExpPHR4.1.7 12.03.06 pt

97 de 212
Programação perito

Aproximação
LIN--CIRC

Final de aproximação

Início de aproximação

Fig. 32 Contorno de aproximação com passos LIN--CIRC

Na aproximação CIRC realiza--se sempre uma interpolação referente ao espaço.


A orientação de início é sempre a orientação atingida no ponto de aproximação.
Mesmo quando dois passos de aproximação são realizados com uma orientação
referente à trajetória, a nova orientação na zona de aproximação é referente ao
espaço.

ProgExpPHR4.1.7 12.03.06 pt

98 de 212
3 Programação de movimento (continuação)

3.5.4 Aproximação PTP -- trajetória

Existe a possibilidade de fazer um posicionamento aproximado nos passos de movimento


PTP específicos do eixo e nos passos de movimento de trajetória cartesianos. O movimento
PTP oferece as vantagens seguintes:
G É sempre mais rápida do que o seu oposto cartesiano, sobretudo perto de posições
singulares.
G Ao contrário da interpolação cartesiana, permite uma mudança da configuração, p.ex.,
uma passagem da zona da base para a zona acima da cabeça ou uma passagem pela
posição estendida do manípulo.

A trajetória exata de um movimento PTP não pode ser definida antecipadamente, uma vez
que o robô usa o caminho que ele acha mais rápido. A trajetória sofre alguma influência por
vários fatores (como, por exemplo, a velocidade de deslocação).

As vantagens da interpolação específica dos eixos só podem ser aproveitadas ao máximo,


desde que haja uma passagem contínua entre os passos específicos dos eixos e os passos
cartesianos, visto que com uma paragem exata, uma grande parte do tempo ganho é
perdido novamente.
A programação da aproximação PTP -- trajetória realiza--se totalmente em análogo aos
processos até aqui apresentados. A zona de aproximação é definida da forma seguinte:

Aproximação PTP ® trajetória

Aproximação O início do posicionamento aproximado é determinado pelo critério PTP $APO.CPTP, de


PTP®trajetória modo habitual (ver 3.5.1). Em relação ao passo de movimento seguinte pode ser indicado,
explicitamente, um critério de aproximação (C_DIS, C_ORI, C_VEL), que determina a
entrada no passo CP.
Isto é realizado através da seqüência de instruções:
PTP PONTO1 C_PTP C_DIS
LIN PONTO2
Se faltar no passo PTP uma indicação para o critério de aproximação pretendido no passo
CP, para a definição da entrada no passo CP é utilizado C_DIS, como valor por defeito.

O contorno de um posicionamento aproximado PTP--trajetória ou trajetória--PTP é um


movimento PTP. Assim, uma definição precisa da trajetória do posicionamento exato não
é possível.
Exemplo:
Se houver a necessidade de uma trajetória exata, p.ex., um movimento CP paralelamente
à mesa, é preciso cuidado na aproximação ao sair desta trajetória com a combinação CP--
PTP. O mesmo também se aplica a um movimento PTP--CP para chegar a essa trajetória.

P3
Programa:
CP--PTP
...
LIN P1
LIN P2 C_DIS
PTP P3 P1 P2
...
Aqui surge o problema de o movimento de
aproximação não ser previsível. Seria possí-
vel uma colisão com a mesa.

Mesa

ProgExpPHR4.1.7 12.03.06 pt

99 de 212
Programação perito

Para contrariar o problema acima surgido e CP--CP--PTP P3


para evitar uma parada exata, deverá ser in-
serido um outro movimento CP (P2_HILF).
P2_HILF
Programa:
... P1
LIN P1
LIN P2 C_DIS P2
LIN P2_HILF C_DIS
PTP P3
...
Mesa

Aproximação trajetória ® PTP


Aproximação Para o passo CP conta o critério de aproximação programado, para o passo PTP recorre--se
trajetória®PTP a $APO.CPTP.
Uma seqüência de instruções poderia ter, então, o aspeto seguinte:
CIRC AUX PONTO1 C_VEL
PTP PONTO2

A aproximação CP--PTP, no entanto, só poderá ser garantida, desde que nenhum dos
eixos do robô rode mais que 180_ no passo de trajetória e que o Status S não mude, uma
vez que estas mudanças de posição não são previsíveis aquando do planeamento do
contorno da aproximação. Caso surja uma alteração da configuração no passo de
trajetória antes da aproximação (alteração de S ou T), o passo de trajetória é executado
como um passo individual, até ao ponto de destino programado, sendo emitida a
mensagem de erro confirmável “Aproximação CP/PTP não realizável”. Nesse caso, o
utilizador deverá dividir o passo CP em vários passos individuais, de modo a que o passo
individual antes da aproximação CP--PTP seja suficientemente curto para poder excluir
uma alteração de S ou T em todos os eixos do robô.

Mais informações encontram--se no capítulo [Programação de movimento], parágrafo


[Instruções de movimento].

No exemplo seguinte foi programada uma aproximação PTP--LIN, uma aproximação LIN--
CIRC e uma aproximação CIRC--PTP (ver Fig. 33):

ProgExpPHR4.1.7 12.03.06 pt

100 de 212
3 Programação de movimento (continuação)

DEF UEBERB_P ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;Inicialização de velocidades,
;Acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Seção principal ------------


PTP HOME ; Movimento SAK
PTP {POS: X 1281.55,Y -250.02,Z 716,A 79.11,B 68.13,C 79.73,S
6,T 50}

PTP {POS: X 1209.74,Y -153.44,Z 716,A 79.11,B 68.13,C 79.73,S


6,T 50} C_PTP C_ORI
LIN {X 1037.81,Y -117.83,Z 716,A 79.11,B 68.13,C 79.73}

$APO.CDIS=25
LIN {X 1183.15,Y -52.64,Z 716,A 79.11,B 68.13,C 79.73} C_DIS
CIRC {POS: X 1134,Y 53.63,Z 716},{X 1019.21,Y 124.02,Z 716,A
79.11,B 68.12,C 79.73}

CIRC {POS: X 1087.47,Y 218.67,Z 716},{X 1108.78,Y 267.16,Z 716,A


79.11,B 68.12,C 79.73} C_ORI
PTP {POS: X 1019.31,Y 306.71,Z 716,A 80.8,B 68,C 81.74,S 6,T
59}

PTP HOME
END

CIRC LIN PTP x


(C_ORI) (C_DIS) (_PTP C_ORI)
PTP CIRC LIN x=1281,55
y=--250,02

x=1209,74
y=--153,44
x=1183,15
y=--52,64

x=1108,78 x=1134
y=267,16 y=53,63
HP
x=1087,47
y=218,67
HP

x=1037,81
x=1019,31 x=1019,21 y=--117,83
y=306,71 y=124,02

Fig. 33 Aproximação PTP--trajetória e aproximação trajetória--trajetória

ProgExpPHR4.1.7 12.03.06 pt

101 de 212
Programação perito

3.5.5 Aproximação aperfeiçoada


Na aproximação entre movimentos CP e PTP (“aproximação mista”) a KSS oferece um pro-
cedimento aperfeiçoado que normalmente está ativado. Em muitos casos é, assim, possível
ganhar tempo de ciclo, uma vez que o trajeto do eixo na área da aproximação é percorrido
dentro de um tempo mais reduzido.
A aproximação aperfeiçoada faz com que os casos excepcionais onde a KSS reduz a distân-
cia de aproximação e a velocidade na área da aproximação surjam com bastante menos
freqüência.

Uma alteração do contorno de aproximação é de esperar em todos os programas cujos


passos de movimento não foram programados com o procedimento aperfeiçoado. Por
isso, os respectivos programas devem ser verificados e, eventualmente, corrigidos.

O aperfeiçoamento da aproximação mista é ligado (“TRUE”) ou desligado (“FALSE”) no ar-


quivo “$OPTION.DAT” (caminho “C:\KRC\Steu\Mada\”).
...
BOOL $IMPROVEDMIXEDBLENDING = TRUE
...

Numa instalação nova, a aproximação aperfeiçoada é ligada automaticamente. Num up-


date esta opção só é aceite no caso de já ter sido definida (“TRUE”). Caso contrário, é defi-
nida com “FALSE”.

ProgExpPHR4.1.7 12.03.06 pt

102 de 212
3 Programação de movimento (continuação)

3.5.6 Mudança da ferramenta durante a aproximação


Esta funcionalidade está disponível em todas as combinações de passos individuais PTP,
LIN e CIRC.
Também é possível mudar uma ferramenta virtualmente durante a aproximação. Ou seja,
uma ferramenta é programada duas vezes, mas de forma diferente. P.ex., numa pistola de
aplicação a distância em relação à peça é de 5 cm com “TOOL1” e de 10 cm com “TOOL2”.

Exemplo
Neste exemplo pretende--se substituir, no início do movimento de aproximação de P1
para P2, a ferramenta TOOL_DATA1[1] pela ferramenta TOOL_DATA[2].
$TOOL=TOOL_DATA[1]
PTP P0_TOOL1; O ponto é programado com a ferramenta TOOL_DATA[1]
LIN P1_TOOL1 C_DIS; O ponto é programado com a ferramenta TOOL_DATA[1]
$TOOL=TOOL_DATA[2]
LIN P2_TOOL2; O ponto é programado com a ferramenta TOOL_DATA[2]

TOOL2
Flange

TOOL1 TOOL1

Início de aproximação1

P2_TOOL2
P0_TOOL1 P1_TOOL1
TOOL2
Fim de aproximação 2

P1_TOOL2
P0_TOOL2
Início de aproximação2

Neste exemplo, a mudança da ferramenta realiza--se durante a aproximação. Isto é, ao


entrar no passo intermédio, a posição cartesiana salta de Início de aproximação1 para Início
de aproximação2; os ângulos dos eixos e também a posição cartesiana e a velocidade da
flange são guiados continuamente durante todo o movimento. O salto na posição TCP carte-
siana é reduzido apenas durante o movimento de Fim de aproximação2 para P2_TOOL2, de
modo a que a trajetória não decorra na ligação linear no espaço de P1_TOOL1 para
P2_TOOL2, mas numa parte da trajetória programada com parada exata para TOOL2.

ProgExpPHR4.1.7 12.03.06 pt

103 de 212
Programação perito

3.6 A programação (“teach”) dos pontos


A integração do processo Teach--In constitui uma característica de qualidade essencial de
qualquer linguagem de programação de robôs.
!--caráter Em KRL é programado simplesmente um caráter ! cuja função é manter o espaço para as
coordenadas que são programadas posteriormente:
PTP !
LIN ! C_DIS
CIRC ! ,CA 135.0
As respetivas coordenadas podem ser copiadas para o programa, através da unidade de
comando, premindo a softkey “Modif.” e depois a softkey “TouchUp”. As coordenadas atuais
são escritas diretamente no código SRC, na estrutura escolhida, p.ex.:
PTP {POS:X 145.25,Y 42.46,Z 200.5,A -35.56,B 0.0,C 176.87,S 2,T 2}
LIN {X -23.55,Y 0.0,Z 713.56,A 0.0,B 34.55,C -90.0} C_DIS
CIRC {X -56.5,Y -34.5,Z 45.56,A 35.3,B 0.0,C 90.0},{X 3.5,Y 20.30,
Z 45.56,A 0.0,B 0.0,C 0.0}, CA 135.0

Ao programar (“teach”) coordenadas cartesianas, é sempre utilizado como


sistema de referência, o sistema de coordenadas da base ($BASE) válido no
momento no sistema. Por isso, antes de proceder à programação, verifique se
está definido o sistema de coordenadas da base utilizado para o movimento que
depois deverá ser executado.

A KR C... permite ainda uma outra variante de programação: Programe uma instrução de
movimento com uma variável que NÃO é declarada na seção de declaração, p.ex.:

PTP PONTO_INÍCIO
Depois de ter premido as softkeys “Modif” e “Var”, surge o pedido de escolher a estrutura
desejada. Depois de ter feito isso, é declarada na respetiva lista de dados automatica-
mente uma variável PONTO_INÍCIO que é definida pelas coordenadas reais atuais, em
relação ao $BASE atual, p.ex.:
DECL FRAME PONTO_INÍCIO={X 15.2,Y 2.46,Z 20.5,A -35.5,B 9.0,C 16.87}
Caso não tenha sido criada a lista de dados, é emitida a respetiva mensagem de erro.

Mais informações acerca deste assunto “Listas de dados” encontram--se no capítulo


[Listas de dados].

Desde que tenha sido criada uma instrução de movimento através dos formulários inline,
os pontos programados com a ajuda dos formulários poderão também ser usados mais
tarde numa instrução de movimento KRL.
Estes pontos são depositados na respetiva lista de dados com o nome indicado no formu-
lário e com um X no início (por isso, os nomes dos pontos nos formulários inline admitem,
no máximo, 11 em vez de 12 caratéres).
O ponto P7 no formulário inline

poderá ser ativado mais tarde como XP7 numa instrução KRL:
LIN XP7
Também aqui é preciso ter em atenção que em ambos os casos tem de ser utilizado o
mesmo sistema de coordenadas da base, para que a deslocação se realize ao mesmo
ponto!!

ProgExpPHR4.1.7 12.03.06 pt

104 de 212
3 Programação de movimento (continuação)

3.7 Parâmetros de movimento


Esta função permite alterar a manga de supervisionamento para a colisão. Desta forma, po-
derá ser definida a sensibilidade do supervisionamento da colisão.

Depois da ativação desta instrução, é aberto o formulário inline seguinte:

Os valores determinados nos dados de máquina (“C:\Programme\KRC\MaDa\Steu\$cus-


tom.dat”) são utilizados como valores por defeito. Alternativamente, o utilizador pode deter-
minar níveis de sensibilidades diferentes para os vários movimentos e execuções.

Como alternativa, é o próprio usuário que pode definir em quanto o torque nominal pode di-
vergir do torque real. Em caso de ultrapassagem, o robô é parado.

Exemplo
No formulário inline foram definidos para os eixos A1...A6 sempre 50%. Se o torque real
divergir agora em mais de ¦50% do torque máximo do torque nominal calculado, o robô é
parado sendo emitida na janela de mensagens a respetiva mensagem.

MMax

+50% de MMax
Manga de supervisionamento

Torque (real) verificado

--50% de MMax
Torque nominal
0

O supervisionamento não oferece garantias contra as danificações da ferramenta


em caso de uma colisão, mas mantém os danos num nível mais reduzido.

Mais pormenores acerca do supervisionamento de colisão encontram--se no Manual de pro-


gramação na documentação [Configuração], no capítulo [Configurar sistema perito].

ProgExpPHR4.1.7 12.03.06 pt

105 de 212
Programação perito

4 Assistente KRL

Os pacotes tecnológicos da KUKA incluem as funções mais importantes para uma utilização
habitual dos robôs. As funções especiais que não estão incluídas nos pacotes de tecnologia
KUKA poderão ser realizadas pelo usuário, através da programação direta do sistema de
robô, em “KRL”, ou seja, na “KUKA Robot Language”.
Para facilitar a programação efetiva de funções especiais também aos utilizadores que não
usam esta linguagem de programação com freqüência, foi integrado o “Assistente KRL”.
O “Assistente KRL” oferece ao seu utilizador uma programação apoiada na sintaxe. Depois
de ter selecionado o comando KRL pretendida, são emitidas indicações em máscaras que
acompanham esse comando. Os conteúdos dessas máscaras podem ser aceites ou
alterados. Todos os conteúdos poderão ser alterados novamente, num momento posterior.

Operação

Para a programação de uma instrução de movimento, terá de ativar um programa ou


carregá--lo para o editor. Os pormenores acerca da elaboração e alteração de programas
encontram--se no capítulo [Generalidades acerca dos programas KRL], parágrafo
[Criar e editar programas].

Esteja atento à posição do cursor de


edição. A linha de programa que
elaborou é introduzida como linha
nova, por baixo do cursor.

Prima a menukey “Instruç” e abra o menu. Selecione “KRL--Assist.”. A imagem mostrada


agora é a seguinte:

Aqui poderá selecionar uma das instruções de movimento disponíveis.

ProgExpPHR4.1.7 12.03.06 pt

106 de 212
4 Assistente KRL (continuação)

4.1 Indicações da posição

O símbolo de espaço “!”

O caráter “!” é um símbolo de espaço. Com a ajuda deste caráter é possível elaborar um
programa de movimento, sem conhecer a posição exata dos pontos que futuramente irão
determinar o trajeto do robô.
Ao ser executado mais tarde, o programa é parado nesse local, e você poderá incluir o ponto,
como descrito a seguir:

Se aparecer, mais tarde, durante a execução do programa, na janela de mensagens


a informação “Instrução não permitida”, apague esta mensagem com a ajuda da
softkey “Confirmar”.

Instução não permitida

Desloque o sistema de robô para a posição pretendida.

Aí pressione a softkey “Touch Up”. Veja a informação que se encontra agora na janela
de mensagens.
Na janela de mensagens aparece a confirmação da memorização da posição.

TPEXPERT posição actual “{POS: X 1620, YO, Z 1910, A 0, B 90, C 0, S 2, T 2}” foi introduzida

Esta mensagem poderá ser apagada, através da softkey “Confirmar”.

Indicação da posição por meio de variáveis

Em vez do símbolo de espaço, também poderá ser introduzido o nome válido de uma
variável. Uma lista das palavras chave reservadas para KRL, as quais, portanto, não
poderão ser utilizadas, encontram--se no [KRL Reference Guide].

O sistema de robô deverá ser colocado na posição pretendida, antes de ser programada
essa função.

As informações acerca do movimento manual do robô encontram--se no Manual de


operação na documentação Operação, capítulo [Deslocação manual do robô].

Se o sistema ainda não conhecer o nome que você introduziu, aparece na linha de softkeys
a softkey “VAR”. Através desta softkey será formulado o pedido de atribuir ao nome um
formato de dados.
Depois de ter pressionado essa softkey é alterada a linha de softkeys:

ProgExpPHR4.1.7 12.03.06 pt

107 de 212
Programação perito

A barra de softkeys está disponível apenas quando além do ficheiro “SRC” existir também
uma lista de dados “DAT”.
Depois de pressionar uma das softkeys “E6POS”, “POS”, “FRAME”, “E6AXIS” ou “AXIS”,
é memorizada a posição atual do sistema de robô no formato de dados selecionado. Esta
memorização é confirmada por uma informação na janela de mensagens.

As coordenadas actuais foram transferidas para o ponto KUKA01

Esta mensagem poderá ser novamente apagada através da softkey “Confirmar”.

Memorização da posição através de “Touch Up”

Antes de poder memorizar posições num programa por meio de “Touch Up”, a unidade de
comando terá de receber os dados relativos à posição válida do sistema de coordenadas
de robô e os dados válidos em relação à ferramenta/peça.
Para esse efeito, é necessário passar a seqüência INI na cabeça do programa.

O sistema de robô deverá ser colocado na posição pretendida, antes de ser programada
essa função.

Se pressionar a softkey “Touch Up”, é memorizada a posição atual do sistema de robô.

Na janela de mensagens aparece a confirmação da memorização da posição.

TPEXPERT posição actual “{POS: X 1620, YO, Z 1910, A 0, B 90, C 0, S 2, T 2}” foi introduzida
Esta mensagem poderá ser novamente apagada através da softkey “Confirmar”.

Indicação manual da posição

Adicionalmente à possibilidade de memorizar posições para as quais já foi feita a desloca-


ção, os pontos no espaço também poderão ser indicados manualmente.

Depois de abrir o formulário inline, pressione a softkey “{ ? }”. A definição da linha de softkeys
é alterada:

Depois de escolher um formato de dados e de pressionar a respetiva softkey, a posição atual


é introduzida no formulário inline.

ProgExpPHR4.1.7 12.03.06 pt

108 de 212
4 Assistente KRL (continuação)

Com a ajuda das funções de edição, as indicações referentes às posições poderão ser agora
alteradas, de acordo com aquilo que se pretende.

O operador geométrico “:”

Com a ajuda do operador geométrico “:”, são interligadas as indicações de posição dos tipos
POS e FRAME. Este procedimento é necessário sempre que, p.ex., a origem de um sistema
de coordenadas tenha de ser deslocada um valor de correção.

Mais informações acerca deste assunto encontram--se no capítulo [Variáveis e declara-


ções] parágrafo [Manipulação de dados], em “Operador geométrico”.

ProgExpPHR4.1.7 12.03.06 pt

109 de 212
Programação perito

4.2 Posicionamento [PTP]


O posicionamento do sistema de robô realiza--se pelo trajeto mais rápido entre dois pontos
no espaço de trabalho. Uma vez que o movimento começa e termina em todos os eixos ao
mesmo tempo, torna--se necessário sincronizar os eixos. Nesse procedimento, o trajeto
percorrido pelo robô não é previsível com precisão.

Ao utilizar esso comando, não é possível prever com precisão o trajeto exato percor-
rido pelo robô. Por isso, nas proximidades de obstáculos existentes dentro do espaço
de trabalho, subsiste o perigo de colisão. Nas proximidades de obstáculos, o compor-
tamento de movimento do robô terá de ser ensaiado com uma velocidade reduzida!

Símbolo de espaço para a


indicação da posição
Voltar

Expressões geométricas
para a indicação da posição,
cartesiano

Expressões geométricas
para a indicação da posição,
referentes ao eixo

Símbolo de espaço para a


indicação da posição

Mudança entre PTP, LIN e CIRC

Mudança entre PTP e PTP REL

Voltar

Aproximação entre dois


movimentos PTP
Aproximação entre PTP e
LIN ou instruções CIRC. Cri-
térios: distância (DIS), velo-
cidade (VEL), e orientação
ferramenta/peça (ORI)

Memorizar posição momentânea

ProgExpPHR4.1.7 12.03.06 pt

110 de 212
4 Assistente KRL (continuação)

Símbolo de espaço para a in-


dicação da posição

Voltar

Expressões geométricas
para a indicação da posição,
cartesiano

Expressões geométricas
para a indicação da posição,
referentes ao eixo

Mudança entre PTP_REL e PTP

Voltar

Aproximação entre dois


movimentos PTP
Aproximação entre PTP e
LIN ou instruções CIRC. Cri-
térios: distância (DIS), velo-
cidade (VEL), e orientação
ferramenta/peça (ORI)

Memorizar posição momentânea

ProgExpPHR4.1.7 12.03.06 pt

111 de 212
Programação perito

4.3 Movimento direito [LIN]


O posicionamento do sistema de robô realiza--se, neste caso, pelo trajeto mais curto entre
dois pontos no espaço de trabalho, numa reta. Os eixos do sistema de robô são sincroniza-
dos de forma a que a velocidade de trajetória se mantenha sempre igual nessa reta.

Símbolo de espaço para a


indicação da posição
Voltar

Expressões geométricas para


a indicação da posição, carte-
siano

Símbolo de espaço para a in-


dicação da posição

Mudança entre LIN, CIRC e PTP

Mudança entre LIN e LIN_REL

Voltar

Aproximação entre PTP e


LIN ou instruções CIRC. Cri-
térios: distância (DIS), velo-
cidade (VEL), e orientação
ferramenta/peça (ORI)

Memorizar posição momentânea

ProgExpPHR4.1.7 12.03.06 pt

112 de 212
4 Assistente KRL (continuação)

Símbolo de espaço para a in-


dicação da posição
Voltar

Expressões geométricas para


a indicação da posição, carte-
siano

Mudança entre LIN_REL e LIN

Voltar
Aproximação entre PTP e
LIN ou instruções CIRC. Cri-
térios: distância (DIS), velo-
cidade (VEL), e orientação
ferramenta/peça (ORI)

Memorizar posição momentânea

ProgExpPHR4.1.7 12.03.06 pt

113 de 212
Programação perito

4.4 Movimento circular [CIRC]


O posicionamento do sistema de robô realiza--se, neste caso, ao longo de um trajeto circular
no espaço de trabalho, sendo definido pelo ponto de início, ponto auxiliar e ponto de destino.
Os eixos do sistema de robô são sincronizados de forma a que a velocidade de trajetória
se mantenha sempre igual nesse trajeto circular.

Símbolo de espaço para a in-


dicação da posição
Voltar

Expressões geométricas para


a indicação da posição, carte-
siano

Símbolo de espaço para a in-


dicação da posição

Mudança entre CIRC, PTP e LIN

Mudança entre CIRC e CIRC_REL

Indicação do ângulo a descrever;


prioridade mais elevada que a do ponto de destino

Voltar

Aproximação entre PTP e


LIN ou instruções CIRC. Cri-
térios: distância (DIS), velo-
cidade (VEL), e orientação
ferramenta/peça (ORI)

Memorizar posição momentânea

ProgExpPHR4.1.7 12.03.06 pt

114 de 212
4 Assistente KRL (continuação)

Símbolo de espaço para a in-


dicação da posição
Voltar

Expressões geométricas para


a indicação da posição, carte-
siano

Mudança entre CIRC e CIRC_REL

Indicação do ângulo a descrever;


prioridade mais elevada que a do ponto de destino

Voltar

Aproximação entre PTP e


LIN ou instruções CIRC. Cri-
térios: distância (DIS), velo-
cidade (VEL), e orientação
ferramenta/peça (ORI)

Memorizar posição momentânea

ProgExpPHR4.1.7 12.03.06 pt

115 de 212
Programação perito

5 Controle de execução do programa


5.1 Ramificações de programa
5.1.1 Instrução de salto
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 GOTO MARCA

o ponteiro de programa salta para a posição MARCA. A posição também terá de ser definida
com
MARCA:
algures no programa. 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. P.ex.,
há uma diferença entre
GOTO MARCA_1
ou
GOTO STOP_COLA

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.

Neste capítulo encontra--se um exemplo para “GOTO” no parágrafo [Loops] em


“Loop de não rejeição”.

ProgExpPHR4.1.7 12.03.06 pt

116 de 212
5 Controle de execução do programa (continuação)

5.1.2 Ramificação condicional


IF 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

A condição de execução é uma expressão booleana. Se a condição de execução


estiver cumprida, é executado o bloco THEN. No outro caso, o bloco ELSE poderá ser
executado ou poderá prescindir--se do bloco ELSE. Prescindir significa uma saída imediata
da ramificação.
Qualquer número de instruções é admissível. As instruções podem também ser, sobretudo,
instruções IF. Um encadeamento de blocos IF é, portanto, possível. Mas cada instrução
IF terá de ser terminada com um ENDIF próprio.
Na seqüência de programa seguinte, realiza--se a deslocação à posição HOME, desde que
a entrada 10 seja FALSE. Se a entrada 10 estiver ativada e o valor da variável A for maior
do que o da variável B, é ativada a saída 1 e realizada a deslocação ao ponto 1. Independen-
temente de A e B, com uma entrada 10 ativada, a variável A é sempre aumentada 1, e depois
é realizada a deslocação à posição HOME.
¼
INT A,B
¼
IF $IN[10]==FALSE THEN
PTP HOME
ELSE
IF A>B THEN
$OUT[1]=TRUE
LIN PONTO1
ENDIF
A=A+1
PTP HOME
ENDIF
¼

ProgExpPHR4.1.7 12.03.06 pt

117 de 212
Programação perito

5.1.3 Distribuidor
Quando há mais que 2 alternativas, estas podem ser programadas através de uma
construção IF empilhada ou – bastante mais simples – através do distribuidor SWITCH.
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
Identificação corresponder a uma identificação de bloco, é executado o respetivo ramo de programa e
de bloco 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, é execu-
tado 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 conside-
rado apenas o primeiro ramo de programa que tem a respetiva 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 C... (ver parágrafo 6.3 acerca da instrução SIGNAL). Assim, este
encontra--se à disposição como critério de seleção, na forma de um valor Integer.

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
PARTE_1()
CASE 2 ;se Nº_PROG=2
PARTE_2()
PARTE_2A()
CASE 3,4,5 ;se Nº_PROG=3, 4 ou 5
$OUT[3]=TRUE
PARTE_345()
DEFAULT ;se Nº_PROG<>1,2,3,4 ou 5
ERROR_UP()
ENDSWITCH
¼
END

O programa CELL possui uma estrutura semelhante (CELL.SRC) que normalmente existe
na unidade de programa.

ProgExpPHR4.1.7 12.03.06 pt

118 de 212
5 Controle de execução do programa (continuação)

5.2 Loops
A estrutura base seguinte para o controle de execução do programa são os loops, que
contêm a execução repetida e uma ou várias instruções, até surgir uma determinada
condição. Os loops distinguem--se através da forma da condição e da posição da interro-
gação relativamente à continuação.

Um salto proveniente do exterior para penetrar numa estrutura de loop não é


permitido e é recusado pela unidade de comando (mensagem de erro).

5.2.1 Loop de contagem


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

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 valor início e valor fim do contador indique sempre uma expressão do tipo Integer.
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).
No exemplo seguinte, são definidas, inicialmente, as velocidades dos eixos
$VEL_AXIS[1]¼$VEL_AXIS[6] com 100%. A seguir, os componentes de um campo
bidimensional são inicializados com os valores calculados. O resultado é representado em
Tab. 20.

ProgExpPHR4.1.7 12.03.06 pt

119 de 212
Programação perito

DEF FOR_PROG()
¼
INT I,J
INT CAMPO[10,6]
¼
FOR I=1 TO 6
$VEL_AXIS[I] = 100 ;todas as velocidades dos eixos em 100%
ENDFOR
¼
FOR I=1 TO 9 STEP 2
FOR J=6 TO 1 STEP -1
CAMPO[I,J] = I*2 + J*J
CAMPO[I+1,J] = I*2 + I*J
ENDFOR
ENDFOR
;I tem agora o valor 11, J o valor 0
¼
END

Index I =
1 2 3 4 5 6 7 8 9 10
6 38 8 42 24 46 40 50 56 54 72
5 27 7 31 21 35 35 39 49 43 63
4 18 6 22 18 26 30 30 42 34 54
J =
3 11 5 15 15 19 25 23 35 27 45
2 6 4 10 12 14 20 18 28 22 36
1 3 3 7 9 11 15 15 21 19 27

Tab. 20 Resultado do cálculo apresentado no exemplo 5.2

ProgExpPHR4.1.7 12.03.06 pt

120 de 212
5 Controle de execução do programa (continuação)

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

DEF WHILE_PR()
¼
INT X,W
¼
WHILE $IN[4] == TRUE ;percorrido enquanto estiver ativada a
entrada 4
PTP PALETTE
$OUT[2] = TRUE
PTP POS_2
$OUT[2] = FALSE
PTP HOME
ENDWHILE
¼
X = 1
W = 1
WHILE W < 5; ;percorrido enquanto W é mais pequeno que 5
X = X * W
W = W + 1
ENDWHILE
;W é agora 5
¼ ;X é agora 1S2S3S4 = 24
W = 100
WHILE W < 100 ;loop não é percorrido, W mantém-se em 100
$OUT[15] = TRUE
W = W + 1
ENDWHILE
¼ ;loop não é percorrido, W mantém-se em 100
END

ProgExpPHR4.1.7 12.03.06 pt

121 de 212
Programação perito

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

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:

DEF REPEAT_P()
¼
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
¼
X = 1
W = 1
REPEAT
X = X * W
W = W + 1
UNTIL W == 4 ;percorrido até W se tornar igual a 4
;W é agora 4
¼ ;X é agora 1S2S3S4 = 24
W = 100
REPEAT
$OUT[15] = TRUE
W = W + 1
UNTIL W > 100 ;percorrido até W ser maior que 100
¼ ;percorrido pelo menos 1 vez, isto é,
;W é agora 101, a saída 15 está ativada
END

ProgExpPHR4.1.7 12.03.06 pt

122 de 212
5 Controle de execução do programa (continuação)

WHILE e REPEAT são ferramentas muito poderosas que permitem uma programação
estruturada, com a ajuda das quais poderá ser substituída a maioria das instruções GOTO.
A seqüência de instruções
¼
X = 0
G = 0
MARCA:
X = X + G
G = G + 1
IF G > 100 THEN
GOTO PRONTO
ENDIF
GOTO MARCA:
PRONTO:
¼
poderá ser realizada com bastante menos complicações através de REPEAT:
¼
X = 0
G = 0
REPEAT
X = X + G
G = G + 1
UNTIL G > 100
¼

ProgExpPHR4.1.7 12.03.06 pt

123 de 212
Programação perito

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

Mais informações acerca da instrução Exit encontram--se no subparágrafo seguinte.

5.2.5 Terminar os loops antes do tempo


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:

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

ProgExpPHR4.1.7 12.03.06 pt

124 de 212
5 Controle de execução do programa (continuação)

5.3 Instruções de espera


WAIT Com a instrução WAIT poderá ser conseguida a paragem do programa, até surgir uma deter-
minada situação. Há uma diferença entre a espera por um determinado acontecimento e a
introdução de tempos de espera.

5.3.1 Espera por um acontecimento


Com a instrução

WAIT FOR condição

a execução do programa poderá ser parada, até surgir o acontecimento especificado com
condição:
G Se a expressão lógica condição já estiver TRUE durante a ativação de WAIT, a execu-
ção do programa não é parada (mesmo assim, é provocada uma paragem do avanço).
G Se a condição for FALSE, a execução do programa é parada, até a expressão tomar
o valor TRUE.
A condição WAIT FOR pode ser aplicada às variáveis $IN[], $OUT[], $CYCFLAG[], $TI-
MER[], $TIMER_FLAG[], $FLAG[] e I[].

O compilador não reconhece uma situação em que a expressão nunca poderá


adotar o valor TRUE, devido a uma formulação errada. Nesse caso, a execução
do programa é parada infinitamente, porque o interpretador espera por uma
condição que nunca se poderá verificar.

Valores numéricos
A cada variável é atribuído um número.

WAIT FOR ... Saída caixa de mensagens Significado


$IN[5] Espera por entrada 5 Espera até a entrada 5 ser TRUE
$OUT[5]==FALSE Espera por não saída 5 Espera até a saída 5 ser FALSE
$TIMER[5]>=300 Espera por temporizador 5 Espera até o temporizador 5 ter
>= 300 atingido pelo menos 300ms
$TIMER_FLAG[5] Espera por flag de tempori- Espera até o flag de temporiza-
zador 5 dor 5 ser TRUE
$FLAG[5]==FALSE Espera por não flag 5 Espera até o flag 5 ser FALSE
$CYCFLAG[5] Espera por marca 5 Espera até a marca 5 ser TRUE
I[5]==9 Espera por contador 5 = = 9 Espera até o contador 5 ter o
valor “9”

ProgExpPHR4.1.7 12.03.06 pt

125 de 212
Programação perito

Valores variáveis
Em vez de um número é transmitida uma variável. Para isso é necessário que a variável
esteja declarada na lista de dados (*.dat). Uma declaração no ficheiro de fonte (*.src) deter-
mina o valor da variável.

Lista de dados: Ficheiro de fonte:

DEFDAT PROG1 DEF PROG1()


... ...
DECL INT INT_VAR INT_VAR=7
... ...

No exemplo é atribuído à variável INT_VAR o valor “7”.

WAIT FOR ... Saída caixa de mensagens Significado


$IN[INT_VAR] Espera por entrada 7 Espera até a entrada 7 ser TRUE
$OUT[INT_VAR] Espera por não saída 7 Espera até a saída 7 ser FALSE
=FALSE
$TIMER[INT_VAR] Espera por temporizador 7 Espera até o temporizador 7 ter
>=300 >= 300 atingido pelo menos 300ms
$TIMER_FLAG Espera por flag de tempori- Espera até o flag de temporiza-
[INT_VAR] zador 7 dor 7 ser TRUE
$FLAG[INT_VAR] Espera por não flag 7 Espera até o flag 7 ser FALSE
==FALSE
$CYC- Espera por marca 7 Espera até a marca 7 ser TRUE
FLAG[INT_VAR]
I[INT_VAR]==9 Espera por contador 7 = = 9 Espera até o contador 7 ter o
valor “9”

Nos modos de teste “T1” e “T2” é emitida uma mensagem de aviso se a variável local a
transmitir não estiver declarada na lista de dados.

Um cálculo de termos também é possível. No exemplo é atribuído à variável X o valor “1”, à


variável Y o valor “2” e à variável Z o valor “3”.

WAIT FOR ... Saída caixa de mensagens Significado


$IN[x+y+z] Espera por entrada 6 Espera até a entrada 6 ter o
valor TRUE
$CYCLAG[Z-- X] Espera por não marca 2 Espera até a marca 2 ser FALSE
==FALSE

A mensagem ”Processo ativo” é exibida quando uma das variáveis não está declarada na
lista de dados.

ProgExpPHR4.1.7 12.03.06 pt

126 de 212
5 Controle de execução do programa (continuação)

Textos longos
Se a uma das variáveis estiver atribuído um texto longo, não é exibido o índex numérico.

Condição de espera Texto longo atribuído Saída na caixa de mensagens


WAIT FOR ...
$IN[5] MinhaEntrada5 Espera por MinhaEntrada5
$OUT[3] MinhaSaída3 Espera por MinhaSaída3
$TIMER[8]>150 MeuTemporizador8 Espera por MeuTemporizador8
> 150
$FLAG[16]==FALSE MeuFlag16 Espera por não MeuFlag16
$CYCFLAG[4] MeuCycflag4 Espera por MeuCycflag4
I[7]==9 MeuContador7 Espera por MeuContador7 == 9

Declarações de sinal
Numa declaração de sinal constituída por várias entradas e saídas é emitido somente o
nome do sinal. No exemplo são definidos os sinais “EIN_NAME $IN[7] TO $IN[17]” e
“AUS_NAME $OUT[7] TO $OUT[17]”.

Condição de espera Saída na caixa de Significado


WAIT FOR ... mensagens
EIN_NAME Espera por NAME_EIN Espera até todas as entradas da
declaração de sinal estarem
TRUE
AUS_NAME==FALSE Espera por não NAME_AUS Espera até todas as saídas da
declaração de sinal estarem
FALSE

5.3.2 Tempos de espera


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

ProgExpPHR4.1.7 12.03.06 pt

127 de 212
Programação perito

5.4 Paragem do programa


STOP Caso queira interromper a execução do programa e parar a edição, programe a instrução

STOP

A última instrução de movimento percorrida ainda é executada por completo. A continuação


da execução do programa só é possível se for premida a tecla de arranque. Depois é execu-
tada a instrução que se segue a STOP.

Exceção: Numa rotina Interrupt, a execução do programa é parada por uma


instrução STOP, apenas depois da execução completa do avanço inicial (ver
parágrafo 8 Interrupt).
Exceção: Com a programação de uma instrução BRAKE, a parada é imediata.

ProgExpPHR4.1.7 12.03.06 pt

128 de 212
5 Controle de execução do programa (continuação)

5.5 Confirmação de mensagens


CONFIRM Com a instrução

CONFIRM V_número

poderá confirmar as mensagens, guiado pelo programa. Depois de uma confirmação bem
sucedida, a mensagem especificada com o número de gestão V_número deixou de existir.
Depois de anular o sinal Stop, é sempre emitida, p.ex., uma mensagem de confirmação.
Antes de continuar, esta terá de ser confirmada. O seguinte subprograma detecta e confirma
esta mensagem automaticamente, desde que tenha sido selecionado o modo de serviço
correto (não pode ser modo manual) e o estado Stop tenha sido realmente anulado (uma
vez que um programa de robô não pode arrancar enquanto há uma mensagem de
confirmação, o subprograma terá de decorrer num ficheiro Submit):

DEF AUTO_QUIT()
INT M
DECL STOPMESS MLD ;tipo de estrutura predefinido para mensa-
gens de erro
IF $STOPMESS AND $EXT THEN ;verificar mensagem de stop e
modo de serviço
M=MBX_REC($STOPMB_ID,MLD) ;ler estado atual em MLD
IF M==0 THEN ;verificar se a confirmação é permitida
IF ((MLD.GRO==2) AND (MLD.STATE==1)) THEN
CONFIRM MLD.CONFNO ;confirmação desta mensagem
ENDIF
ENDIF
ENDIF
END

ProgExpPHR4.1.7 12.03.06 pt

129 de 212
Programação perito

6 Instruções de entrada/saída
6.1 Generalidades
A KR C... conhece 1026 entradas e 1024 saídas. No armário de comando padrão KUKA,
o utilizador tem à sua disposição na ficha X11 (módulo MFC) as entradas e saídas seguintes:
Entradas 1 ¼16
Saídas 1 ¼16 (carga máx. 100 mA; 100% de simultaneidade)
Saídas 17 ¼20 (carga máx. 2 A; 100% de simultaneidade)
Opcionalmente, poderão ser projetadas ainda mais entradas/saídas, p.ex., através de um
bus de campo.
As entradas podem ser lidas e as saídas podem ser lidas e escritas. São ativadas através
das variáveis de sistema $IN[Nr] ou $OUT[Nr]. As saídas não utilizadas podem ser
usadas como marcas.
As entradas/saídas do módulo MFC podem ser desviadas no ficheiro “IOSYS.INI” para
outras áreas.

A unidade de comando tipo “KR C2” é fornecida, normalmente, sem E/S.

Por razões de segurança, todas as instruções de entrada/saída e acessos a


variáveis de sistema para a entrada/saída, provocam uma paragem do avanço.
Com uma instrução CONTINUE no início, os acessos às variáveis de sistema para a
entrada/saída não provocam a parada do avanço.

Mais informações encontram--se no capítulo [Programação de movimento], parágrafo


[Avanço do computador].

ProgExpPHR4.1.7 12.03.06 pt

130 de 212
6 Instruções de entrada/saída (continuação)

6.2 Entradas/saídas binárias


Se as entradas/saídas forem ativadas individualmente, fala--se de entradas/saídas binárias.
As saídas binárias só podem ter dois estados: Low ou High. Por isso, são tratadas como
variáveis do tipo BOOL.
Assim, as saídas podem ser ativadas através das variáveis de sistema
$OUT[Nr] = TRUE sendo o seu reset feito com
$OUT[Nr] = FALSE
O estado de uma entrada $IN[Nr] pode ser lido para uma variável booleana ou utilizado
como expressão booleana nas instruções de execução do programa, Interrupt e trigger.

Mais informações encontram--se no capítulo [Controle de execução do programa], no


capítulo [Tratamento de interrupt], e no capítulo [Ações de comutação referentes à
trajetória].
As seqüências de instrução
BOOL COMUTADOR

COMUTADOR = $IN[6]
IF COMUTADOR == FALSE THEN

ENDIF
e
IF $IN[6] == FALSE THEN

ENDIF
têm o mesmo significado.
SINAL Na KR C... também é possível atribuir nomes às várias entradas e saídas. A declaração de
sinais destina--se a esse fim. Como todas as declarações, também esta terá de encontrar--
se na seção de declaração do programa. Assim, também se pode efetuar a programação
seguinte:
SINAL COMUTADOR $IN[6]

IF COMUTADOR == FALSE THEN

ENDIF
A variável comutador também é declarada internamente como BOOL.

As entradas e saídas de sistema também podem ser ativadas com $IN e $OUT. As saídas
de sistema estão protegidas contra a escrita.
A entrada 1025 é sempre TRUE, a entrada 1026 é sempre FALSE. Estas entradas são utili-
zadas nos dados de máquina, p.ex., como variáveis “Dummy”. É admissível uma utiliza-
ção múltipla.

ProgExpPHR4.1.7 12.03.06 pt

131 de 212
Programação perito

O modo de ativar as entradas /saídas é explicado no exemplo 6.1:

DEF BINSIG ( )
;--------- Seção de declaração ---------
EXT BAS (BAS_COMMAND:IN,REAL:IN )
DECL AXIS HOME
SINAL CANCELAMENTO $IN[16]
SINAL ESQUERDA $OUT[13]
SINAL CENTRO $OUT[14]
SINAL DIREITA $OUT[15]
;---------- Inicialização ---------
BAS (#INITMOV,0 ) ;inicialização de velocidades,
;acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Seção principal ------------


PTP HOME ;movimento SAK
ESQUERDA=FALSE
CENTRO=TRUE ;na posição central
DIREITA=FALSE

WHILE CANCELAMENTO==FALSE ;cancelamento, quando estiver


ativada a entrada 16
IF $IN[1] AND NOT ESQUERDA THEN ;entrada 1 ativada
PTP {A1 45}
ESQUERDA=TRUE ;na posição esquerda
CENTRO=FALSE
DIREITA=FALSE
ELSE
IF $IN[2] AND NOT CENTRO THEN ;entrada 2 ativada
PTP {A1 0}
ESQUERDA=FALSE
CENTRO=TRUE ;na posição central
DIREITA=FALSE
ELSE
IF $IN[3] AND NOT DIREITA THEN ;entrada 3 ativada
PTP {A1 -45}
ESQUERDA=FALSE
CENTRO=FALSE
DIREITA=TRUE ;na posição direita
ENDIF
ENDIF
ENDIF
ENDWHILE
PTP HOME
END
Através da ativação das entradas 1, 2 e 3, o robô poderá ser levado a três posições diferen-
tes. A chegada do robô à posição pretendida, é indicada pela ativação das respetivas saídas
13, 14 ou 15.
Uma vez que estas saídas indicam sempre a posição atual do robô, por meio da interrogação
IF $IN[1] AND NOT $OUT[13] THEN

ENDIF
também se poderá evitar que o robô tente de novo deslocar--se à posição que ele já tem,
cada vez que percorre o loop While. Assim, o robô só se desloca, desde que tenha sido
ativada uma entrada (ou seja, que tenha sido dada a instrução para a deslocação à posição
pretendida) e desde que a respetiva saída não esteja ativada (ou seja, que o robô ainda não
se encontre nessa posição) (ver Tab. 21).
Ao ativar a entrada 16, o loop While, e por conseguinte, o programa, é terminado.

ProgExpPHR4.1.7 12.03.06 pt

132 de 212
6 Instruções de entrada/saída (continuação)

$OUT[Nr]
$IN [Nr] AND NOT $OUT[Nr]
TRUE FALSE
TRUE FALSE TRUE
$IN[Nr]
FALSE FALSE FALSE

Tab. 21 Tabela de verdade para uma combinação lógica “AND NOT”

ProgExpPHR4.1.7 12.03.06 pt

133 de 212
Programação perito

6.3 Entradas/saídas digitais


6.3.1 Declaração do sinal
Através da declaração do sinal, não podem ser apenas atribuídos nomes às várias entradas/
saídas, mas também é possível juntar várias entradas ou saídas binárias, sendo o resultado
um sinal digital. Através da declaração
SINAL AUS $OUT[10] TO $OUT[20]
podem ser ativadas agora, p.ex., as saídas 10 a 20, por meio da variável AUS declarada
internamente como Integer, como uma palavra de 11 bits.
A saída digital assim declarada pode ser descrita à variável AUS através de qualquer
atribuição Integer possível, p.ex.:
AUS = 35
AUS = ’B100011’
AUS = ’H23’

G As entradas/saídas têm de ser indicadas na declaração de sinal, sem intervalo e por


ordem crescente.
G No máximo, podem ser juntadas 32 entradas ou saídas, de modo a resultar um sinal
digital.
G Uma saída pode aparecer em várias declarações de sinal.

Ao juntar, desta forma, as saídas 13 a 15 do exemplo 6.1, de modo a resultar uma variável
POSITION, temos o seguinte programa modificado:

ProgExpPHR4.1.7 12.03.06 pt

134 de 212
6 Instruções de entrada/saída (continuação)

DEF BINSIG_D ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND:IN,REAL:IN )
DECL AXIS HOME
SINAL CANCELAMENTO $IN[16]
SINAL POSITION $OUT[13] TO $OUT[15]

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;inicialização de velocidades,
;acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

;------------- Seção principal ------------


PTP HOME ;movimento SAK

POSITION=’B010’ ;na posição central

WHILE CANCELAMENTO==FALSE ;cancelamento, quando estiver


ativada a entrada 16

IF $IN[1] AND (POSITION<>’B001’) THEN ;entrada 1 ativada


PTP {A1 45}
POSITION=’B001’ ;na posição esquer-
da
ELSE
IF $IN[2] AND (POSITION<>’B010’) THEN ;entrada 2 ativada
PTP {A1 0}
POSITION=’B010’ ;na posição central
ELSE
IF $IN[3] AND (POSITION<>’B100’) THEN;entrada 3 ativada
PTP {A1 -45}
POSITION=’B100’ ;na posição direita
ENDIF
ENDIF
ENDIF

ENDWHILE

PTP HOME
END

Mais informações encontram--se neste capítulo, no parágrafo [Entradas digitais predefi-


nidas].

ProgExpPHR4.1.7 12.03.06 pt

135 de 212
Programação perito

6.3.2 Definir saídas no ponto de destino


Logo que o robô tenha atingido o ponto de destino de um passo de movimento, podem ser
definidas até 8 saídas referentes ao avanço principal e sem parada do avanço inicial. Para
isso é usada a instrução seguinte:

$OUT_C[Saída] = Expressão booleana

Argumento Tipo de Significado


dados
Saída INT Expressão aritmética que determina o número da saída a
ativar. Estão disponíveis as saídas 1 ... 1024.
Expressão BOOL Expressão lógica que indica se a respetiva saída é defi-
booleana nida com “TRUE” ou com “FALSE”.

Normalmente, podem ser utilizadas as saídas 1 ... 1024. Tendo sido ativada a variável
“$SET_IO_SIZE” estão disponíveis 2048 ou 4096 saídas.

No momento em que o ponteiro de avanço inicial atinge a instrução, é interpretada, em primeiro


lugar, a expressão booleana. A respetiva expressão é transformada numa constante. Quando
for atingido o ponteiro de avanço principal, são, então, ativadas as saídas interpretadas.

Uma atribuição poderia ter, por exemplo, o aspecto seguinte:


$OUT_C[TOOL[ex]+WELD[y]] = ((NOT(x==100)) AND (SAFE==TRUE))

Depois da interpretação (ponteiro de avanço inicial), a instrução interna tem, por


exemplo, o aspecto seguinte:
$OUT_C[5] = TRUE

Assim, ao ser atingido o ponto de destino (ponteiro de avanço principal), a saída 5 é


definida com o valor “TRUE”.

No momento em que o ponteiro de avanço principal atinge o ponto de destino, a saída é


definida com o respetivo valor booleano que estava válido no momento da interpretação,
mesmo no caso de este valor entretanto ter sofrido uma modificação.

Ao contrário de “$OUT[x]”, uma instrução “$OUT_C[x]” não produz qualquer efeito sobre o
avanço inicial do computador.
$OUT_C[x] só pode ser escrito, para a leitura de uma saída deve ser utilizado “$OUT[x]”.

A seleção de um passo apaga todas as atribuições “$OUT_C[x]” interpretadas mas ainda


não ativadas, o que se verifica aquando da seleção de um passo e do reset de um pro-
grama.

ProgExpPHR4.1.7 12.03.06 pt

136 de 212
6 Instruções de entrada/saída (continuação)

Exemplo PTP, LIN e CIRC


Com todas as instruções PTP, LIN e CIRC absolutas e relativas, a saída é ativada direta-
mente depois da respetiva instrução de movimento:

PTP P1
$OUT_C[10]=TRUE
$OUT_C[11]=FALSE
$OUT_C[12]=TRUE
LIN P2

Se no ponto “P1” se verificar uma parada exata, são ativadas, nesse momento, as saídas
10 ... 12, de acordo com as suas definições.
Se, ao contrário, a deslocação ao ponto “P1” se realizar com aproximação, as saídas 10 ...
12 são ativadas apenas quando for atingido o centro da área de aproximação. Se a
aproximação não for possível, são ativadas as saídas no ponto “P1”.

Nos modos de execução do programa “Single--Step” (MSTEP) e “I--Step” (ISTEP) realiza--


se em primeiro lugar no ponto P1 um stop do avanço inicial, as saídas não são ativadas
neste local. Só depois de largar a tecla “Iniciar” e de apertá--la novamente, são ativadas as
saídas definidas.

Um movimento para estabelecer a coincidência de passos também provoca um stop do


avanço inicial. Só depois de o programa ser iniciado novamente, as saídas são ativadas de
acordo com a sua definição.

Comparação com trigger


Tanto com “$OUT_C[x]” como também com “trigger” as saídas podem ser ativadas com re-
ferência ao avanço principal e sem um stop do avanço inicial.

$OUT_C[x]:
PTP P1 C_PTP
$OUT_C[5]=TRUE
PTP P2
Trigger:
TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[5]=TRUE
PTP P1 C_PTP
PTP P2
Em ambos os casos é ativada a saída 5, logo que seja atingido o centro da área de aproxima-
ção de “P1”.

Ponteiro de avanço principal


Se o ponteiro de avanço principal for idêntico ao ponteiro de avanço inicial, isto é, se o robô
atualmente não executar qualquer passo de movimento, a atribuição realiza--se logo que
seja atingida a instrução “$OUT_C[]”.

PTP P1
WAIT FOR $IN[22]==TRUE
$OUT_C[12]=FALSE
PTP P2

No exemplo é provocado na linha “WAIT...” um stop do avanço inicial, enquanto a entrada 22


for “FALSE”. Logo que a entrada 22 seja definida com “TRUE”, é ativada a saída 12.

ProgExpPHR4.1.7 12.03.06 pt

137 de 212
Programação perito

Sinal
Uma saída também pode ser ativada através de uma declaração de sinal de 1 bit.

SIGNAL Test $OUT_C[7]

PTP P1
Test = TRUE
PTP P2

No exemplo, a saída 7 é definida com “TRUE”, logo que o ponteiro de avanço principal tenha
atingido o passo de movimento “P1”.

Nas condições seguintes “$OUT_C[x]” não é permitido:


G Dentro de programas interrupt ou declarações interrupt
G Num programa submit
G Relacionado com “$CYCFLAG[x]”
G Dentro de uma instrução trigger
G Em conexão com a correção de variáveis

ProgExpPHR4.1.7 12.03.06 pt

138 de 212
6 Instruções de entrada/saída (continuação)

6.4 Saídas de impulso


PULSE A instrução PULSE permite ativar as várias saídas, durante um determinado tempo, ou fazer
o seu reset. A instrução
PULSE($OUT[4],TRUE,0.7)
ativa, p.ex., a saída 4 durante um tempo de 0,7 segundos, mantendo--a no nível High. O
impulso poderá decorrer em paralelo ao programa do robô (nesse caso, o interpretador não
é parado).
No lugar da indicação direta da saída com $OUT[Nr] também poderá haver uma variável
de sinal.

Mais informações encontram--se neste capítulo, no parágrafo [Entradas/saídas


binárias].

Os tempos de impulso realizáveis situam--se entre 0.012 e 231 segundos. A grelha é de


0,1 segundos. A unidade de comando arredonda todos os valores para décimos.

G No máximo, podem ser programadas 16 saídas de impulso em simultâneo.


G Podem ser programados impulsos High, mas também impulsos Low.
G Com “RESET programa” ou “Desselecionar programa”, o impulso é
cancelado.
G Um impulso ativado pode ser influenciado por um Interrupt.
G As saídas de impulso também podem ser programadas a nível da unidade de
comando.
G A instrução PULSE dá origem a uma parada do avanço inicial. Apenas na
instrução TRIGGER, é executada, acompanhando o movimento.

Um impulso NÃO é interrompido


G com uma PARADA DE EMERGÊNCIA, parada de operação ou parada devido
a um erro,
G ao atingir o fim do programa (instrução FIM),
G ao soltar a tecla de arranque, desde que o impulso tenha sido programado
antes da primeira instrução de movimento e o robô ainda não tenha
estabelecido a coincidência de passos.

ProgExpPHR4.1.7 12.03.06 pt

139 de 212
Programação perito

No programa seguinte encontram--se alguns exemplos para a aplicação da instrução


PULSE:

DEF PULSIG ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME
INT I
SINAL OTTO $OUT[13]

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;inicialização de velocidades,
;acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

FOR I=1 TO 16
$OUT[I]=FALSE ;colocar todas as saídas em LOW
ENDFOR

;------------- Seção principal ------------


PULSE ($OUT[1],TRUE,2.1) ;impulso vem diretamente durante 2.1s
PTP HOME ;movimento SAK

OTTO=TRUE ;colocar saída 13 em TRUE


PTP {A3 45,A5 30}
PULSE (OTTO,FALSE,1.7) ;impulso LOW durante 1.7s na saída 13
;impulso só vem depois do movimento
WAIT SEC 2

FOR I=1 TO 4
PULSE ($OUT[I],TRUE,1) ;sucessivamente as saídas 1-4
WAIT SEC 1 ;durante 1s em High
ENDFOR

;aplicação de um impulso referente à trajetória


TRIGGER WHEN DISTANCE=0 DELAY=50 DO PULSE ($OUT[8],TRUE,1.8)
LIN {X 1391,Y -319,Z 1138,A -33,B -28,C -157}

PTP HOME
CONTINUE ;impedir paragem do avanço para
;a saída 15
PULSE ($OUT[15],TRUE,3) ;impulso vem diretamente (em avanço)
;na saída 15
PULSE ($OUT[16],TRUE,3) ;impulso só vem depois do movimento
END ;HOME e continua depois de END

Verifique nestes exemplos, exatamente, a partir de quando os impulsos programados estão


ativados nas saídas: em princípio, a instrução PULSE provoca sempre a parada do avanço do
computador. Portanto, o impulso é ativado apenas depois de terminar o movimento.
Tem dois modos de impedir a parada do avanço:
G Programação de uma instrução CONTINUE, imediatamente antes da instrução PULSE
G Utilização da instrução PULSE numa instrução TRIGGER (ação de comutação referente
à trajetória)

Mais informações encontram--se no capítulo [Programação de movimentos], parágrafo


[Avanço do computador] (CONTINUE) e capítulo [Trigger -- ações de comutação refe-
rentes à trajetória] (TRIGGER).

ProgExpPHR4.1.7 12.03.06 pt

140 de 212
6 Instruções de entrada/saída (continuação)

6.5 Entradas/saídas analógicas


Além das entradas/saídas binárias, a KR C conhece também entradas/saídas analógicas.
Através de sistemas de bus opcionais, a KR C... põe à disposição 32 entradas analógicas
e 32 saídas, também analógicas. As saídas podem ser lidas ou escritas através das va-
riáveis de sistema $ANOUT[1] ¼ $ANOUT,[32] as entradas só podem ser lidas através das
variáveis $ANIN[1] ¼ $ANIN[32].
ANIN As entradas e saídas analógicas podem ser ativadas tanto estática, como dinamicamente,
ANOUT isto é, através de uma interrogação constante no ciclo de interpolação (atualmente 12 ms).
Enquanto a leitura e escrita estática se realizam, como nos sinais binários, através de atribui-
ções de valores simples, para a edição cíclica são utilizadas as instruções especiais ANIN
e ANOUT.

6.5.1 Saídas analógicas


Os valores de saída para as 32 saídas analógicas da KR C situam--se entre --1.0 ¼ +1.0
e estão normalizados, tendo em consideração a tensão de saída de ±10.0 V. Caso o valor
de saída ultrapasse os limites de ±1.0, o valor é cortado.
Para ativar um canal analógico, é atribuído à respetiva variável $ANOUT simplesmente um
valor:
$ANOUT[2] = 0.5 ;canal 2 analógico é ativado com +5V
ou
REAL V_COLA

V_COLA = -0.9
$ANOUT[15] = V_COLA ;o canal analógico 15 é ativado com –9V
Estas atribuições são estáticas, uma vez que o valor do canal ativado só é alterado quando
for atribuído à respetiva variável de sistema $ANOUT[Nr] explicitamente um valor novo.
No entanto, muitas vezes é útil que uma determinada saída analógica seja calculada conti-
nuamente de novo durante a execução do programa, dentro de um tempo de ciclo definido.
Esta saída analógica realiza--se através da instrução ANOUT. Através da instrução
ANOUT ON ARAME = 0.8 * V_ARAME
poderá ser alterada a saída analógica especificada através da variável de sinal ARAME,
p.ex., através de uma atribuição de valor simples à variável V_ARAME. A tensão na respetiva
saída segue, assim, a variável V_ARAME.
A variável ARAME terá de ser declarada, naturalmente, através da declaração SINAL, p.ex.:
SINAL ARAME $ANOUT[2]
Com
ANOUT OFF ARAME
a saída analógica é novamente terminada.
A expressão ciclicamente atualizada que terá de ser indicada para o cálculo do valor de
saída analógico, não poderá ultrapassar uma determinada complexidade. Assim, a sintaxe
permitida é limitada, sendo orientada pela tecnologia. A sintaxe completa para iniciar a saída
analógica cíclica é

ANOUT ON ANOUT ON nome de sinal = fator * elemento regulador á± offsetñ


áDELAY=tñ áMINIMUM=U1ñ áMAXIMUM=U2ñ

e para terminar a saída analógica cíclica

ANOUT OFF ANOUT OFF nome de sinal

ProgExpPHR4.1.7 12.03.06 pt

141 de 212
Programação perito

O significado dos vários argumentos consta de Tab. 22.

Argumento Tipo de Significado


dados
Nome de REAL Variável de sinal que especifica a saída analógica (terá
sinal de ser declarada com SINAL). Não é admissível uma
indicação direta de $ANOUT[Nr].
Fator REAL Fator qualquer que pode ser uma variável, o nome de
um sinal ou uma constante
Elemento REAL Através do elemento regulador é influenciada a saída
regulador analógica. Pode ser uma variável ou o nome de um sinal
Offset REAL Opcionalmente, poderá ser programado um offset em
relação ao elemento regulador. O offset terá de ser uma
constante.
t REAL Com a palavra chave DELAY e uma indicação de tempo
positiva ou negativa, em segundos, poderá ser emitido o
sinal de saída ciclicamente calculado com atraso (+) ou
antes do tempo (--).
U1 REAL A palavra chave MINIMUM determina a tensão mínima que
se verifica na saída. Os valores admissíveis situam--se en-
tre –1.0 ... 1.0 (o que corresponde a –10V ... +10V). O valor
mínimo deve ser inferior ao valor máximo, caso sejam utili-
zados os dois valores.
Como valor é admissível também uma variável, um
componente estrutural ou um elemento array.
U2 REAL A palavra chave MAXIMUM determina a tensão máxima que
se verifica na saída. Os valores admissíveis situam--se en-
tre –1.0 ... 1.0 ( o que corresponde a –10V ... +10V). O va-
lor máximo deve ser maior que o valor mínimo, caso sejam
utilizados os dois valores.
Como valor é admissível também uma variável, um
componente estrutural ou um elemento array.

Tab. 22 Argumentos na instrução ANOUT

Os parâmetros opcionais “Mínimo” e “Máximo” não estão disponíveis nos formulários in-
line, uma vez que estes são utilizados, exclusivamente, para a tecnologia “Colar”.

ProgExpPHR4.1.7 12.03.06 pt

142 de 212
6 Instruções de entrada/saída (continuação)

Neste exemplo foi definido tanto um valor mínimo como um valor máximo. As respetivas
entradas são “MÍNIMO=0.3” e “MÁXIMO=0.95”.

10 000
Máximo

8 000
Tensão analógica [mV]

UArame [mV]
6 000

4 000
Mínimo

2 000
UPadrão [mV]

0 100 200 300 400 500

Velocidade de trajetória [mm/s]

Fig. 34 Tensão analógica em função da velocidade de trajetória

ProgExpPHR4.1.7 12.03.06 pt

143 de 212
Programação perito

6.5.2 Entradas analógicas


As 32 entradas analógicas da KR C... podem ser lidas através das variáveis $ANIN[1] a
$ANIN[32], por meio de uma atribuição de valor simples a uma variável REAL:
REAL PARTE

PARTE = $ANIN[3]
ou
SINAL SENSOR3 $ANIN[3]
REAL PARTE

PARTE = SENSOR3
Os valores em $ANIN[Nr] movem--se entre +1.0 e --1.0 e representam uma tensão de
entrada de +10V a --10V.
ANIN Para a leitura cíclica das entradas analógicas é utilizada a instrução ANIN. Esta instrução
permite a leitura simultânea de 3 entradas analógicas. Por isso, a leitura realiza--se no ciclo
de interpolação.
Através da seqüência de instruções
SINAL SENSOR3 $ANIN[3]
REAL PARTE

ANIN ON PARTE = 1 * SENSOR3
poderá ler então ciclicamente a entrada analógica 3, e a instrução
ANIN OFF SENSOR3
permite terminar a leitura.

É preciso ter em atenção que apenas 3 instruções ANIN ON podem estar ativas em simul-
tâneo. É permitido usar nas duas instruções o mesmo interface analógico ou declarar a
mesma variável.
A sintaxe completa para a leitura cíclica de uma entrada analógica é:
ANIN ON ANIN ON valor = fator * nome de sinal á± offsetñ

O fim do controlo cíclico é iniciado com


ANIN OFF ANIN OFF nome de sinal

O significado dos argumentos consta em Tab. 23.

Argumento Tipo de Significado


dados
Valor REAL O valor pode ser uma variável ou o nome de um sinal (de
saída). Em valor é depositado o resultado da leitura
cíclica.
Nome de REAL Variável de sinal que especifica a entrada analógica (terá
sinal de estar declarada com SINAL). Não é admissível uma
indicação direta de $ANIN[Nr].
Fator REAL Fator qualquer que pode ser uma variável, o nome de
um sinal ou uma constante.
Offset REAL Opcionalmente, poderá ser programado um offset. O
offset pode ser uma constante, uma variável ou o nome de
um sinal.

Tab. 23 Argumentos na instrução ANIN

ProgExpPHR4.1.7 12.03.06 pt

144 de 212
6 Instruções de entrada/saída (continuação)

No exemplo seguinte são ilustradas as instruções para a entrada e saída analógica. Com
a ajuda da variável de sistema $TECHIN[1] e de um sensor de seguimento da trajetória
ligado a uma entrada analógica, poderá ser realizada, p.ex., uma correção da trajetória
durante o movimento. A variável $VEL_ACT que contém sempre a velocidade de trajetória
atual, pode ser utilizada para uma saída analógica proporcional à velocidade, desde que
sejam também considerados os respetivos fatores, p.ex., para o controle da quantidade de
cola aplicada.

DEF ANSIG ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME
INT I
SINAL COLA $ANOUT[1] ;abertura do injetor da cola
SINAL CORREÇÃO $ANIN[5] ;sensor de seguimento da trajetória

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;inicialização de velocidades,
;acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}

FOR I=1 TO 16
$ANOUT[I]=0 ;ativar todas as saídas com 0V
ENDFOR

;------------- Seção principal ------------


PTP HOME ;movimento SAK

$ANOUT[3] = 0.7 ;saída analógica 3 com 7V

IF $ANIN[1] >= 0 THEN ;processo de colagem apenas quando a


entrada analógica 1
;tem uma tensão positiva
PTP POS1

;correção de trajetória conforme o sinal do sensor, com a ajuda da


;variável de sistema $TECHIN
ANIN ON $TECHIN[1] = 1 * CORREÇÃO + 0.1

;saída analógica proporcional à velocidade; variável de


sistema $VEL_ACT contém a velocidade de trajetória atual
ANOUT ON COLA = 0.5 * $VEL_ACT + 0.2 DELAY = -0.12

LIN POS2
CIRC HILFSPOS,POS3
ANOUT OFF COLA
ANIN OFF CORREÇÃO

PTP POS4

ENDIF

PTP HOME
END

ProgExpPHR4.1.7 12.03.06 pt

145 de 212
Programação perito

6.6 Entradas digitais predefinidas


A unidade de comando dispõe de 6 entradas digitais que podem ser lidas através das
variáveis de sistema $DIGIN1¼$DIGIN6. As entradas constituem parte das entradas de
utilizador normais. Podem ter um comprimento de 32 bits e uma saída Strobe
correspondente.
A projetação das entradas digitais realiza--se nos dados de máquina: “/mada/
steu/$maschine.dat”. Através da declaração de sinal é determinada, em primeiro lugar,
a zona e a dimensão da entrada digital:
SINAL $DIGIN3 $IN[1000] TO $IN[1011]
Através das outras variáveis de sistema $DIGIN1CODE¼$DIGIN6CODE,
$STROBE1¼$STROBE6 e $STROBE1LEV¼$STROBE6LEV são definidas as
interpretações dos sinais, as saídas Strobe correspondentes e o tipo do sinal Strobe:
DECL DIGINCODE $DIGIN3CODE = #UNSIGNED ;sem sinal
SINAL $STROBE3 $OUT[1000] ;determinar saída Strobe
BOOL $STROBE3LEV = TRUE ;Strobe é um impulso High
Uma saída Strobe é uma saída da KR C... com um determinado impulso que congela o sinal
de um equipamento externo (p.ex., codificador rotativo) para a leitura:

Enquanto várias entradas digitais podem usar a mesma entrada, os sinais Strobe NÃO
podem descrever a mesma saída.

A gama de valores de $DIGIN1¼$DIGIN6 depende do comprimento de bit definido, bem


como da interpretação dos sinais (#SIGNED ou #UNSIGNED):
12 bits com sinais (#SIGNED) Gama de valores: --2048¼2047
12 bits sem sinal (#UNSIGNED) Gama de valores: 0¼4095
As entradas digitais podem ser lidas estaticamente, com a ajuda de uma atribuição de valor
habitual:
INT NÚMERO

NÚMERO = $DIGIN2
DIGIN ou então ciclicamente, por meio de uma instrução DIGIN:
INT NÚMERO

DIGIN ON NÚMERO = FATOR * $DIGIN2 + OFFSET

DIGIN OFF $DIGIN2
Simultaneamente são admissíveis 6 instruções DIGIN ON. Na instrução DIGIN ON podem
também ser utilizados sinais de entrada analógicos (p.ex., como FATOR). A sintaxe é
totalmente análoga à instrução ANIN ON:

DIGIN ON DIGIN ON valor = fator * nome de sinal á± offsetñ

DIGIN OFF DIGIN OFF nome de sinal

O significado dos vários argumentos encontra--se descrito em Tab. 24.

ProgExpPHR4.1.7 12.03.06 pt

146 de 212
6 Instruções de entrada/saída (continuação)

Argumento Tipo de Significado


dados
Valor REAL O valor pode ser uma variável ou o nome de um sinal
(de saída). Em valor é depositado o resultado da
leitura cíclica.
Nome de REAL Variável de sinal que especifica a entrada digital. São
sinal apenas admissíveis $DIGIN1¼$DIGIN6.
Fator REAL Fator qualquer que pode ser uma variável, o nome de
um sinal ou uma constante.
Offset REAL Opcionalmente, poderá ser programado um offset. O
offset pode ser uma constante, uma variável ou o nome
de um sinal.

Tab. 24 Argumentos na instrução DIGIN

ProgExpPHR4.1.7 12.03.06 pt

147 de 212
Programação perito

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

7.1 Declaração
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 (ver Fig. 35).
A partir de um subprograma ou de uma função podem ser ativados outros subprogramas
e/ou funções. 20 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 PROGRAMA”. A ativação recursiva de subprogramas ou funções é
permitida. Isto significa que um subprograma ou uma função podem ativar--se novamente
a si próprios.
DEF 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.:
DEF SUBPR()
¼
END

PROG.SRC

DEF PROG() ;programa principal


¼
SUBPR() ;ativação do subprograma
¼
SUBPR() ;ativação do subprograma
¼
END ;fim do programa principal

DEF SUBPR() ;subprograma


¼
END ;fim do subprograma

Fig. 35 Ativação do subprograma e regresso

ProgExpPHR4.1.7 12.03.06 pt

148 de 212
7 Subprogramas e funções (continuação)

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
DEFFCT das funções através da palavra chave especial DEFFCT, terá de ser indicada, 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:
DEFFCT INT FUNÇÃO()
¼
RETURN(X)
ENDFCT
local Há uma diferença substancial entre subprogramas ou funções locais e globais. Nos subpro-
gramas 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.
global 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, isto é, memorizados num
ficheiro SRC próprio. Assim, todos os programas ativados por um outro programa (programa
principal, subprograma ou função) são subprogramas.

G Nos subprogramas locais e nas funções são conhecidas todas as variáveis declara-
das na lista de dados do programa principal. As variáveis que foram declaradas no
programa principal (ficheiro SRC) são as chamadas variáveis “Runtime” que só pode-
rão ser usadas no programa principal. Uma tentativa de usar estas variáveis no sub-
programa provoca a respetiva mensagem de erro.
Nos subprogramas ou funções globais não são conhecidas as variáveis
declaradas no programa principal.
G No programa principal não são conhecidas as variáveis declaradas nos
subprogramas ou funções.
G Um programa principal não tem acesso a subprogramas ou funções locais de um
outro programa principal.
G O nome de subprogramas/funções locais pode ter um comprimento máximo de 24
caratéres. Nos subprogramas/funções globais, o nome pode ter um comprimento
máximo de 20 caratéres (devido às extensões do ficheiro).
Para que o programa principal conheça o subprograma global, apenas é necessário ativar
este dentro do programa principal (por exemplo: PROG_2()). Com a indicação da lista de
parâmetros (ver 7.2), é também definido claramente o espaço de memória necessário.
Exemplos:
PROG_3()
FUNCTION(REAL:IN)
Na Fig. 36 é representada a diferença entre subprogramas/funções locais e globais:
PROG.SRC, PROG_1.SRC e PROG_3.SRC são programas principais autônomos,
enquanto PROG_2FUN.SRC é uma função. A ativação de um programa (por exemplo
PROG_1.SRC) a partir de PROG.SRC, faz com que este se torne automaticamente um
subprograma global. LOCAL() é um subprograma local e LOCALFUN() uma função local de
PROG.SRC.

ProgExpPHR4.1.7 12.03.06 pt

149 de 212
Programação perito

PROG.SRC PROG_1.SRC

DEF PROG() DEF PROG_1()


EXT PROG_1() ¼
EXT PROG_3() END
¼
A=A*LOCALFUN()
LOCAL()
¼ PROG_2FUN.SRC
PROG_3()
PROG_1()
¼ DEFFCT INT PROG_2FUN()
END INT A
EXT PROG_1()
PROG_1()
DEF LOCAL() PROG_1()
EXTFCT PROG_2FUN() ¼
PROG_2FUN() ENDFCT
G=PROG_2FUN()
H=5+LOCALFUN()
END PROG_3.SRC

DEFFCT INT LOCALFUN()


DEF PROG_3()
INT INTVAR
¼
RETURN INTVAR
END
ENDFCT

Fig. 36 Diferença entre subprogramas locais e globais

ProgExpPHR4.1.7 12.03.06 pt

150 de 212
7 Subprogramas e funções (continuação)

7.2 Ativação e transferência de parâmetros


A ativação de um subprograma realiza--se simplesmente através da indicação do nome do
subprograma e parênteses curvos, parecendo assim uma instrução (ver cap. 1.1), p.ex.:
SUBPROG1()
A ativação de uma função é uma forma especial da atribuição de um valor. Por isso, uma
função nunca poderá estar sozinha, mas o valor da função terá de ser atribuído sempre no
âmbito da expressão de uma variável do mesmo tipo de dados, p.ex.:
INTVAR = 5 * INTFUNÇÃO() + 1
REALVAR = REALFUNÇÃO()
Nos subprogramas locais e nas funções são conhecidas todas as variáveis declaradas na
lista de dados do programa principal. Nos subprogramas globais, ao contrário, estas
Lista de variáveis não são conhecidas. Mas com a ajuda de uma lista de parâmetros, os valores
parâmetros também podem ser transferidos a subprogramas ou funções globais.
Muitas vezes, a transferência de listas de parâmetros também é útil em subprogramas e
funções locais, visto que, desta forma se consegue uma separação clara entre o programa
principal e o subprograma/função: As variáveis declaradas no programa principal (ficheiro
SRC) são utilizadas apenas aí, todas as transferências a subprogramas e funções (locais
e globais) realizam--se através de listas de parâmetros. Esta programação estruturada
permite reduzir claramente os erros de programação.
Para a transferência dos parâmetros existem dois mecanismos distintos:
G Call by value (IN)
Com este modo de transferência, um valor do programa principal é transferido para
uma variável do subprograma ou da função. O valor transferido pode ser uma
constante, uma variável, a ativação de uma função ou uma expressão. Quando os tipos
de dados são diferentes, realiza--se, sempre que possível, uma adaptação do tipo.
G Call by reference (OUT)
Com “Call by reference”, é apenas o endereço de uma variável do programa principal
que é transferido para o subprograma ou a função. O subprograma ou a função ativada
pode sobrescrever agora a área de memória, por meio de um nome de variável próprio,
e alterar, por conseguinte, também o valor da variável no programa principal. Por isso,
os tipos de dados têm de ser idênticos, uma vez que aqui não é possível uma
adaptação do tipo de dados.
Em Fig. 37 é representada a diferença entre os dois métodos. Enquanto a variável X com
“Call by value” se mantém inalterada no programa principal, devido às áreas de memória
separadas, com “Call by reference” ela é sobrescrita pela variável NÚMERO na função.

ProgExpPHR4.1.7 12.03.06 pt

151 de 212
Programação perito

X Call by value
15 GLOBAL DEFFCT INT QUADRADO
15 (NÚMERO:IN)
15 NÚMERO INT NÚMERO
225 NÚMERO=NÚMERO*NÚMERO
225 RETURN(NÚMERO)
DEF PROG() ENDFCT
INT X,Y,E
¼
X=5*3
Þ X=15
Y=QUADRADO(X) Y= 225
;Y=225 E=15
E=Y/X
¼
END 15
225
X,NÚMERO Call by reference
15
GLOBAL DEFFCT INT
225 QUADRADO(NÚMERO:OUT)
INT NÚMERO
NÚMERO=NÚMERO*NÚMERO
RETURN(NÚMERO)
ENDFCT

Þ X=225
Y= 225
E=1

Fig. 37 Diferença entre “Call by value” e “Call by reference”

“Call by value” é indicado no cabeçalho do subprograma ou da função pela palavra chave


IN, a seguir a cada variável na lista de parâmetros. “Call by reference” é obtida através da
indicação OUT. OUT é também a definição por defeito. Exemplo:
DEF CALCULAR(X:OUT,Y:IN,Z:IN,B)
Se o subprograma global a ativar ou a função global não estiver declarada como GLOBAL,
é necessário indicar na declaração externa no programa principal, qual é o tipo de dados
que se pretende dar à respetiva variável e qual é o mecanismo de transferência que se
pretende utilizar. OUT é também aqui a definição por defeito. Exemplo:
EXTFCT REAL FUNÇ1(REAL:IN,BOOL:OUT,REAL,CHAR:IN)
A utilização de IN e OUT é explicada mais pormenorizadamente, através do exemplo
seguinte. O subprograma e a função são globais.

ProgExpPHR4.1.7 12.03.06 pt

152 de 212
7 Subprogramas e funções (continuação)

DEF PROG()
CALCULAR (INT:OUT,INT:IN,INT:IN)
FUNÇ1(REAL:IN,REAL:OUT,REAL:OUT,REAL:IN,REAL:OUT)
INT A,B,C
REAL D,E,F,G,H,X

A = 1
B = 2
C = 3
D = 1
E = 2
F = 3
G = 4
H = 5

CALCULAR(A,B,C)
;A é agora 11
;B é agora 2
;C é agora 3

X = FUNÇ1(H,D,E,F,G)
;D é agora 3
;E é agora 8
;F é agora 3
;G é agora 24
;H é agora 5
;X é agora 15
END
DEF CALCULAR(X1:OUT,X2:IN,X3:IN) ;SP global
INT X1,X2,X3
X1=X1+10
X2=X2+10
X3=X3+10
END
DEFFCT REAL FUNÇ1(X1:IN,X2:OUT,X3:OUT,X4:IN,X5:OUT);Funç. global
REAL X1,X2,X3,X4,X5
X1 = X1*2
X2 = X2*3
X3 = X3*4
X4 = X4*5
X5 = X5*6
RETURN(X4)
ENDFCT

Na transferência de um campo, este campo tem de ser declarado novamente no subpro-


grama ou na função, mas sem índex. Segue--se um exemplo, onde os valores de um campo
X[] são duplicados (a função é global):

ProgExpPHR4.1.7 12.03.06 pt

153 de 212
Programação perito

DEF ARRAY ( )
EXT BAS (BAS_COMMAND:IN,REAL:IN)
INT X[5] ;declaração de campo
INT I

BAS (#INITMOV,0)

FOR I=1 TO 5
X[I]=I ;Array X[] inicializar
ENDFOR ;X[1]=1,X[2]=2,X[3]=3,X[4]=4,x[5]=5

DUPLO (X[]) ;Ativar subprograma com parâmetros de campo


;X[1]=2,X[2]=4,X[3]=6,X[4]=8,X[5]=10
END

DEF DUPLO (A[]:OUT)


INT A[] ;Nova declaração do campo
INT I
FOR I=1 TO 5
A[I]=2*A[I] ;Duplicação dos valores de campo
ENDFOR
END

Na transferência de campos multidimensionais, também não são indicados índices, mas a


dimensão do campo terá de ser especificada através da indicação de vírgulas, exemplos:
A[,] para campos bidimensionais
A[,,] para campos tridimensionais

ProgExpPHR4.1.7 12.03.06 pt

154 de 212
7 Subprogramas e funções (continuação)

ProgExpPHR4.1.7 12.03.06 pt

155 de 212
Programação perito

8 Tratamento de interrupt
Quando os robôs são utilizados em instalações de produção complexas, é necessário que
o robô possa reagir de uma forma objetiva e imediata, perante determinados acontecimen-
tos externos e internos, ao mesmo tempo que se realizam ações em paralelo ao processo
do robô. Isto significa que o programa de robô que está a ser executado terá de ser interrom-
pido, ao mesmo tempo que é iniciado um programa ou uma função de interrupção. Depois
da execução do programa de interrupção, o programa de robô interrompido deverá ser
continuado, desde que não tenha sido declarado um procedimento diferente.
Esta interrupção objetiva ou o início de um programa são possíveis devido à instrução de
Interrupt. Assim, o utilizador tem a possibilidade de reagir através do programa perante um
acontecimento não sincronizado no tempo em relação à execução do programa.
Os interrupts podem ser provocados
G por equipamentos, tais como sensores, unidades periféricas, etc.
G por mensagens de erro
G pelo utilizador ou
G por circuitos de segurança
P.ex., ao premir o interruptor de parada de emergência, pode ser ativada uma rotina de
interrupt, que se encarrega de fazer o reset de determinados sinais de saída (programa
preparado IR_STOPM.SRC).

ProgExpPHR4.1.7 12.03.06 pt

156 de 212
8 Tratamento de interrupt (continuação)

8.1 Declaração
Antes de poder ser ativado um interrupt, terão de ser definidas as causas possíveis para
uma interrupção e a respetiva reação do sistema perante estas interrupções.
INTERRUPT Isto realiza--se através de uma declaração de interrupt, em que terá de atribuir a cada
interrupção uma prioridade, um acontecimento e a rotina de interrupt a ativar. A sintaxe
completa é:

INTERRUPT DECL prioridade WHEN acontecimento DO subprograma

O significado dos argumentos consta em Tab. 25.

Argumento Tipo de Significado


dados
Prioridade INT Expressão aritmética que indica a prioridade da inter-
rupção. Estão disponíveis os níveis de prioridade 1...39 e
81...128. Os valores 40...80 estão reservados para uma
atribuição automática da prioridade por parte do sistema.
A interrupção do nível 1 tem a prioridade máxima.
Aconteci- BOOL Expressão lógica que define o acontecimento de inter-
mento rupção. São admissíveis:
S uma constante booleana
S uma variável booleana
S o nome de um sinal
S uma comparação
Subprograma Nome do programa de interrupt que deverá ser
executado quando se verifica o acontecimento.

Tab. 25 Argumentos na declaração de interrupt

A instrução
INTERRUPT DECL 4 WHEN $IN[3]==TRUE DO UP1()
declara, p.ex., um interrupt da prioridade 4, que ativa o subprograma SP1(), logo que a
entrada 3 adotar o valor High.

A declaração de interrupt é uma instrução. Por isso, não pode estar na seção de
declaração!

Um interrupt é reconhecido apenas a partir do nível de programa no qual está declarado. Nos
níveis de programa superiores, o interrupt não é reconhecido, apesar da ativação. Isto signi-
fica que um interrupt declarado num subprograma não é reconhecido no programa principal
(ver Fig. 38).
Mas se o interrupt for declarado como GLOBAL, poderá ser declarado num subprograma
qualquer e não perde a sua validade ao sair deste nível. (ver Fig. 38).
GLOBAL INTERRUPT DECL 4 WHEN $IN[3]==TRUE DO UP1()

ProgExpPHR4.1.7 12.03.06 pt

157 de 212
Programação perito

G Uma declaração pode ser sobrescrita, a qualquer momento, por uma declaração
nova.
G A diferença entre um interrupt GLOBAL e um interrupt normal é que um interrupt global
continua a ser válido também depois de sair do subprograma no qual foi declarado.
G Simultaneamente, podem estar declarados, no máximo, 32 interrupts.
G Na condição de interrupt, não deverão ser utilizadas variáveis ou componentes de
estrutura.
G Não podem ser transferidas variáveis de tempo de execução como parâmetros da
rotina de interrupt, salvo se se tratar de variáveis GLOBAL ou variáveis declaradas
na lista de dados.

Programa principal

DEF MAIN()

INTERRUPT DECL 1 ¼ Subprograma
INTERRUPT DECL 3 ¼

UP()
DEF UP()


END
GLOBAL INTERRUPT DECL 23
¼
INTERRUPT DECL 2 ¼

END

Validade interrupt 1,3,23

Validade interrupt 2

Fig. 38 Âmbito de validade de um interrupt, em função do local e tipo de declaração

ProgExpPHR4.1.7 12.03.06 pt

158 de 212
8 Tratamento de interrupt (continuação)

8.2 Ativação de interrupts


Ativar o Depois da declaração, o interrupt mantém--se desativado. Com a instrução
interrupt
INTERRUPT ON 4
é ativado o interrupt com a prioridade 4, com
INTERRUPT ON
são ativados todos os interrupts. Só depois da ativação poderá haver uma reação perante
a interrupção definida. O acontecimento de interrupção é agora controlado ciclicamente.
Trigger de O controle do acontecimento verifica--se com trigger de flancos, o que significa que um
flancos interrupt só é provocado, quando a condição lógica muda do estado FALSE para o estado
TRUE, mas não quando a condição já tinha sido TRUE no momento da ativação.

Por razões de tempo necessário para os cálculos, só podem estar ativados simultanea-
mente 16 interrupts. Este fato deverá ser tido em consideração, sobretudo, aquando da
ativação global de todos os interrupts.

Desativar A desativação de alguns ou de todos os interrupts funciona da mesma forma que a ativação:
interrupts
INTERRUPT OFF 4
ou
INTERRUPT OFF
Bloquear / Com as palavras chave ENABLE e DISABLE os interrupts ativados podem ser liberados ou
liberar bloqueados individual ou globalmente.
A instrução de bloqueio permite a proteção de determinadas seções do programa, antes da
interrupção. Um interrupt bloqueado é detectado e memorizado, mas não é executado. Só
quando há uma liberação, os interrupts verificados são executados pela ordem da sua
prioridade.
DISABLE 4
ou
DISABLE
Um acontecimento memorizado não provoca uma reação, desde que o interrupt tenha sido
desativado antes de poder ser provocado. Caso o interrupt se verifique várias vezes durante
o seu bloqueio, ele é executado apenas uma única vez depois da sua liberação.

As condições para ser provocado um interrupt são as seguintes:


S O interrupt terá de estar declarado (INTERRUPT DECL ¼)
S O interrupt terá de estar ativado (INTERRUPT ON)
S O interrupt não pode estar bloqueado
S Terá de se verificar o respetivo acontecimento (trigger de flancos)

Prioridade Quando surgem, simultaneamente, vários interrupts, é executado, em primeiro lugar, o


interrupt com a prioridade mais elevada e depois os interrupts com uma prioridade inferior.
O nível de prioridade 1 significa prioridade máxima, o nível 128 a prioridade mais baixa.
Ao detectar um acontecimento, é memorizada a posição real do robô e ativada a rotina de
interrupt. O interrupt verificado, bem como todos os interrupts com uma prioridade mais
baixa são bloqueados durante todo o tempo de execução da rotina. Ao regressar do
programa de interrupt, o referido bloqueio implícito é novamente retirado, incluindo o do
interrupt atual.
Ao surgir novamente o interrupt (mesmo durante o programa de interrupt), este poderá ser
executado novamente. Para impedir este procedimento, o interrupt terá de ser bloqueado
ou desativado, explicitamente, antes do regresso.

ProgExpPHR4.1.7 12.03.06 pt

159 de 212
Programação perito

Depois da primeira instrução no programa de interrupt, um interrupt poderá ser interrompido


por interrupts com uma prioridade mais elevada. Na primeira instrução, o programador tem
então a possibilidade de impedir este procedimento, bloqueando/desativando um ou todos
os interrupts. Se um interrupt se desligar automaticamente durante o programa de interrupt,
este é naturalmente executado até ao fim.
Depois de terminar um interrupt com uma prioridade mais elevada, o programa de interrupt
interrompido é continuado no local onde foi interrompido.

G Podem ser transferidos parâmetros IN para um programa de interrupt.


G Caso se pretenda que um subprograma local devolva um parâmetro, a variável terá
de ser declarada na lista de dados do programa principal. Quando se trata de
programas de interrupt globais, é necessário trabalhar com a lista de dados
$CONFIG.DAT.
G As alterações de $TOOL e $BASE no programa de interrupt só são eficazes nesse
mesmo programa (modo de comando).
G No programa de interrupt não há um avanço do computador, uma vez que o programa
é executado a nível de comando, ou seja, passo a passo (Þ não são permitidas
atribuições $ADVANCE). Assim, sendo não é possível uma aproximação.

Exceções:

S Os interrupts provocados pelas variáveis de sistema $ALARM_STOP e $STOPMESS


são também executados no caso de se verificar um erro, isto é, apesar de uma
parada do robô, são executadas as instruções de interrupt (sem movimentos).

S Durante uma parada de operação poderá ser detectado qualquer interrupt declarado
e ativado. Depois de um novo arranque, os interrupts verificados são executados,
pela ordem da sua prioridade (caso estejam liberados), seguindo--se a continuação
do programa.

Um movimento de robô que está a decorrer no momento em que é ativado um programa


de interrupt, não é cancelado. Enquanto o programa de interrupt está a ser executado, são
ainda terminados todos os movimentos já preparados no programa interrompido. Se o
programa de interrupt for totalmente executado dentro deste tempo, o programa
interrompido continua, sem que os movimentos parem, isto é, sem que o tempo de execução
seja prolongado. Pelo contrário, se a ação de interrupt ainda não estiver concluída, o robô
pára, até ser preparado e continuado o movimento seguinte depois do regresso.
Se se encontrarem instruções de movimento no próprio programa de interrupt, este pára na
primeira instrução de movimento, até o avanço do programa principal ter sido executado.
O exemplo seguinte pretende explicar a utilização das instruções de interrupt e das variáveis
de sistema especiais. Aqui são permanentemente controlados, durante um movimento
linear, dois sensores (nas entradas 1 e 2). Logo que um sensor detecte uma peça (adote
o valor High), é ativado um subprograma de interrupt, sendo memorizada a posição da peça
e ativada a respetiva saída, como forma de indicação. O movimento do robô não é
interrompido. A seguir, realiza--se uma nova deslocação até às peças detectadas.

ProgExpPHR4.1.7 12.03.06 pt

160 de 212
8 Tratamento de interrupt (continuação)

DEF INTERRUP ( )

;--------- Seção de declaração ---------


EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME
POS TEIL[2]
INT I

;---------- Inicialização ---------


BAS (#INITMOV,0 ) ;inicialização de velocidades,
;acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}
FOR I=1 TO 16
$OUT[I]=FALSE ;reset de todas as saídas
ENDFOR
INTERRUPT DECL 10 WHEN $IN[1]==TRUE DO SAVEPOS (1 )
INTERRUPT DECL 11 WHEN $IN[2]==TRUE DO SAVEPOS (2 )

;------------- Seção principal ------------


PTP HOME ;movimento SAK

PTP {X 1320,Y 100,Z 1000,A -13,B 78,C -102}

INTERRUPT ON ;ativar todos os interrupts


LIN {X 1320,Y 662,Z 1000,A -13,B 78,C -102} ;percurso de busca
INTERRUPT OFF 10 ;desativar interrupt 10
INTERRUPT OFF 11 ;desativar interrupt 11

PTP HOME

FOR I=1 TO 2
IF $OUT[I] THEN
LIN TEIL[I] ; deslocar à peça detectada
$OUT[I]=FALSE
PTP HOME
ENDIF
ENDFOR

END

;----------- Programa de interrupt ----------


DEF SAVEPOS (NR :IN ) ;peça detectada
INT NR
$OUT[NR]=TRUE ;ativar marca
PEÇA[NR]=$POS_INT ;memorizar posição
END

Além do pacote base (BAS.SRC), existe, por nome, na unidade de comando, também um
ficheiro IR_STOPM(). Este subprograma executa, em caso de um erro, algumas instru-
ções básicas, das quais fazem parte, além de ações tecnológicas específicas, também
o reposicionamento do robô na trajetória de movimento. O fato é que, enquanto o robô se
mantém na trajetória depois de ter sido premido um interruptor de PARADA DE
EMERGÊNCIA, o hardware não realiza uma parada sobre a trajetória, quando se trata de
equipamentos de segurança que dizem respeito diretamente ao operador (p.ex., porta de
segurança).
Por isso, deverá implementar sempre na seção de inicialização dos seus programas a se-
qüência seguinte (encontra--se regularmente na pasta BAS INI):
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3

ProgExpPHR4.1.7 12.03.06 pt

161 de 212
Programação perito

A instrução PTP $POS_RET no ficheiro IR_STOPM() dá origem ao reposicionamento, e,


por conseguinte, também é estabelecida a coincidência de passos.
Outras variáveis de sistema úteis para o trabalho com interrupts encontram--se enumeradas
em Tab. 26. As posições referem--se sempre aos sistemas de coordenadas atuais no trata-
mento principal.

específico cartesiano descrição


para o eixo
$AXIS_INT $POS_INT posição na qual foi provocado o interrupt
$AXIS_ACT $POS_ACT posição REAL atual
$AXIS_RET $POS_RET posição na qual se realizou a saída da trajetória
$AXIS_BACK $POS_BACK posição do ponto de início da trajetória
$AXIS_FOR $POS_FOR posição do ponto de destino da trajetória

Tab. 26 Variáveis de sistema úteis no tratamento de interrupt

Com movimentos de aproximação, as posições ..._BACK e ..._FOR dependem da posição


do tratamento principal do programa. Relativamente a este assunto, ver Fig. 39 a Fig. 40.

$POS_RET
$POS_INT
$AXIS_RET P2
$AXIS_INT

$POS_FOR
$AXIS_FOR
P1 P3
$POS_BACK $POS_ACT
$AXIS_BACK $AXIS_ACT

Fig. 39 Variáveis de sistema de interrupt em pontos de parada exata

P2

$POS_INT $POS_RET
$AXIS_INT $AXIS_RET

$POS_FOR
$AXIS_FOR

$POS_BACK $POS_ACT
$AXIS_BACK $AXIS_ACT

P1 P3

Fig. 40 Variáveis de sistema de interrupt com um interrupt numa zona de aproximação

ProgExpPHR4.1.7 12.03.06 pt

162 de 212
8 Tratamento de interrupt (continuação)

8.3 Parar movimentos em curso


BRAKE Caso se pretenda parar os movimentos do robô que estão a decorrer no momento em que
surge um interrupt, é utilizada a instrução BRAKE no programa de interrupt. Se programar
BRAKE
sem parâmetros, há uma frenagem do movimento com os valores de trajetória ou acelera-
ção de eixo programados. O comportamento é igual ao que se realiza ao premir a tecla
STOP. Não se verifica uma saída da trajetória de movimento programada.
Com a instrução
BRAKE F
(brake fast) pode conseguir um percurso de frenagem mais reduzido. O robô é frenado com
o retardamento máximo sobre a trajetória.

A instrução BRAKE só pode estar num programa de interrupt. Em outros programas


provoca uma parada devido a um erro.

Não é necessário que a instrução BRAKE se encontre diretamente a seguir à ativação, pode
estar em qualquer local do programa de interrupt. O seu efeito depende do fato de no
momento da sua realização ainda ser executado um movimento do programa interrompido.
Com o robô parado, a instrução não tem qualquer efeito. Um movimento do programa
interrompido ainda em curso, é parado com o modo de frenagem programado. No entanto,
a instrução BRAKE não substitui a instrução STOP, quando se pretende parar a execução
do programa. O programa de interrupt só é continuado com a instrução seguinte, depois de
o robô estar parado.

Depois do regresso ao programa interrompido, é continuado um


movimento parado no programa de interrupt com BRAKE ou BRAKE F!

ProgExpPHR4.1.7 12.03.06 pt

163 de 212
Programação perito

8.4 Cancelar rotinas de interrupt


No exemplo 8.1, 2 detectores de proximidade detectam, no máximo, 2 objetos, cujas
posições são registradas com vista a uma deslocação posterior.
O percurso de busca é percorrido totalmente, mesmo no caso de os dois objetos já terem
sido detectados. Para poupar tempo, é útil cancelar o movimento, logo que o número
máximo de peças tenha sido detectado.
O cancelamento de um movimento do robô é possível na KR C... com a instrução
RESUME
RESUME RESUME cancela todos os programas de interrupt em curso e também todos os subprogra-
mas até ao nível em que o interrupt atual foi declarado.

Tal como a instrução BRAKE, também a instrução RESUME só é permitida num programa
de interrupt.
No momento da instrução RESUME, o indicador do avanço não pode estar no nível em que
o interrupt foi declarado, mas pelo menos um nível abaixo deste.

Uma vez que se pretende cancelar o percurso de busca com RESUME, o movimento de
busca terá de ser programado num subprograma. No exemplo seguinte, este procedimento
realiza--se em MOVEP(), o programa de interrupt chama--se IR_PROG().
É importante que nos subprogramas que foram cancelados com RESUME, o avanço seja
parado antes da última linha. Só assim, pode ser garantido que o indicador do avanço com
RESUME não se encontra no mesmo nível em que o interrupt foi declarado. Em MOVEP()
isto foi realizado com a atribuição $ADVANCE=0.
No próprio programa de interrupt, o movimento de busca é parado através de BRAKE, logo
que um sensor na entrada 1 tenha detectado 4 peças, sendo cancelado então por meio da
instrução RESUME (uma vez que além de IR_PROG() é terminado também MOVEP()). Sem
a instrução BRAKE, o movimento de busca ainda seria executado no avanço.
Depois de RESUME o programa principal é continuado com a instrução que se segue à ativa-
ção do subprograma, ou seja, $ADVANCE=3 (reset do avanço).

ProgExpPHR4.1.7 12.03.06 pt

164 de 212
8 Tratamento de interrupt (continuação)

DEF SEARCH ( )
;--------- Seção de declaração ---------
EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL AXIS HOME
;---------- Inicialização ---------
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3 ;tratamento de erro padrão
BAS (#INITMOV,0 ) ;inicialização de velocidades,
;acelerações, $BASE, $TOOL, etc.
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}
INTERRUPT DECL 11 WHEN $IN[1] DO IR_PROG ( )
I[1]=0 ;colocar contador predefinido em 0
;------------- Seção principal ------------
PTP HOME ;movimento SAK
INTERRUPT ON 11
MOVEP ( ) ;percorrer o percurso de busca
$ADVANCE=3 ;reset do avanço
INTERRUPT OFF 11
GRIP ( )
PTP HOME
END
;-------- Subprograma ------------
DEF MOVEP ( ) ;subprograma para percorrer o percurso de busca
PTP {X 1232,Y -263,Z 1000,A 0,B 67,C -90}
LIN {X 1232,Y 608,Z 1000,A 0,B 67,C -90}
$ADVANCE=0 ;parar avanço
END ;
;------ Programa de interrupt ---------
DEF IR_PROG ( ) ;memorizar posição das peças
;INTERRUPT OFF 11
I[1]=I[1]+1
POSITION[I[1]]=$POS_INT ;memorizar a posição
IF I[1]==4 THEN ;4 peças são detectadas
BRAKE ;parar o movimento
RESUME ;cancelar IR_PROG & MOVE
ENDIF
;INTERRUPT ON 11
END
;-------- Subprograma ------------l

DEF GRIP ( ) ;pegar nas peças detectadas


INT POS_NR ;variável de contagem
FOR POS_NR=I[1] TO 1 STEP -1
POSITION[POS_NR].Z=POSITION[POS_NR].Z+200
LIN POSITION[POS_NR] ;fazer a deslocação 200mm acima da peça
LIN_REL {Z -200} ;fazer a deslocação à peça na vertical
; pegar na peça
LIN POSITION[POS_NR] ;voltar para cima
LIN {X 634,Y 1085,Z 1147,A 49,B 67,C -90}
; depositar peça
ENDFOR
END

ProgExpPHR4.1.7 12.03.06 pt

165 de 212
Programação perito

Quando existe o perigo de um interrupt ser provocado, por engano, duas vezes, devido
a um sensor muito sensível (“ricochete”), poderá desativar o interrupt na primeira linha do
programa de interrupt, a fim de evitar essa situação. No entanto, nesse caso, também não
é detectado um interrupt real durante a execução do interrupt. Se pretende manter o
interrupt ativo, terá de ativá--lo novamente, antes do regresso.

Caso um movimento seja interrompido com RESUME, como mostrado no exemplo acima,
o movimento seguinte não deverá ser um movimento CIRC, visto que o ponto de início
varia sempre (Þ círculos diferentes).

Na ação de busca programada no exemplo 8.2, as entradas são questionadas no ciclo de


interpolação (atualmente 12 ms). Nesse processo, há uma imprecisão máxima de cerca de
12 ms, vezes a velocidade de trajetória.
“Medição Para evitar essa imprecisão, o detector de proximidade não poderá ser ligado às entradas
rápida” de utilizador, mas terá de utilizar entradas especiais (4 unidades) na ficha periférica X11.
Estas entradas podem ser ativadas através das variáveis de sistema
$MEAS_PULSE[1]...MEAS_PULSE[4] (tempo de reação 125 µs).
Ao ligar o interrupt, não poderá estar ativado o impulso de medição, caso contrário, será
emitida a respetiva mensagem de erro.

ProgExpPHR4.1.7 12.03.06 pt

166 de 212
8 Tratamento de interrupt (continuação)

8.5 Utilização de flags cíclicos


Na instrução para a declaração do interrupt, não são admissíveis combinações lógicas.
Assim, para poder definir acontecimentos complicados, terá de trabalhar com flags cíclicos,
uma vez que só estes permitem uma atualização constante.
A seqüência

$CYCFLAG[3] = $IN[1] AND ([$IN[2] OR $IN[3])
INTERRUPT DECL 10 WHEN $CYCFLAG[3] DO IR_PROG()
INTERRUPT ON 10

permite controlar, simultaneamente, 3 entradas e fazer a sua combinação lógica.

Mais informações encontram--se no capítulo [Variáveis e declarações], parágrafo


[Variáveis de sistema e ficheiros de sistema].

ProgExpPHR4.1.7 12.03.06 pt

167 de 212
Programação perito

9 Trigger – ações de comutação referentes à trajetória


Ao contrário das funcionalidades de interrupt independentes do movimento, alguns casos
de aplicação requerem também ações de comutação que são provocadas em função da
trajetória de movimento. Esses casos de aplicação são, p.ex.:
G Fechar ou abrir a pinça de soldadura durante a soldadura a pontos
G Ligar/desligar a corrente de soldadura durante a soldadura a arco
G Ligar/desligar o fluxo volumétrico durante a colagem ou vedação
Na KR C..., estas ações de comutação referentes à trajetória são possíveis com a instrução
TRIGGER. Paralelamente ao movimento seguinte do robô, TRIGGER permite executar um
subprograma, em função de um critério de percurso, ou realizar a atribuição de um valor a
uma variável ou uma instrução PULSE ou ativada uma saída.

9.1 Ação de comutação no ponto de início ou de destino da trajetória


TRIGGER Se pretender uma ação de comutação em relação ao ponto de início ou ao ponto de destino
de uma trajetória de movimento, programe, antes da respetiva instrução de movimento
(PTP, LIN ou CIRC), uma instrução TRIGGER com a sintaxe seguinte:

TRIGGER WHEN DISTANCE=ponto de comutação DELAY=tempo DO instrução


PRIO=prioridade

Os argumentos são descritos mais pormenorizadamente na tabela seguinte.

Argumento Tipo de Significado


dados
Ponto de INT Nos passos individuais, DISTANCE=0 define o ponto de
comutação início e DISTANCE=1 o ponto de destino do movimento
seguinte. Nos passos de aproximação, a indicação
DISTANCE=1 marca o meio do arco de aproximação
seguinte.
Se o passo anterior também é um passo de aproximação,
DISTANCE=0 marca o ponto de destino do arco de
aproximação anterior.
Tempo INT A indicação DELAY permite atrasar ou adiantar o ponto de
comutação durante um determinado tempo. No entanto,
ao deslocar o ponto de comutação, este terá sempre de
manter--se ainda dentro do respetivo passo.
A unidade é o milisegundo.
Instrução A instrução poderá ser
S a ativação de um subprograma
S a atribuição de um valor a uma variável
S uma instrução OUTPUT (também Pulse).
Prioridade Prioridade INT A cada instrução TRIGGER com ativação de sub-
programa, terá de ser atribuída uma prioridade. São
admissíveis os valores de 1...39 e 81...128. Trata--se aqui
das mesmas prioridades que nos interrupts (ver capí-
tulo 8).
Os valores 40...80 estão reservados a uma atribuição de
prioridade automática através do sistema. Por isso,
programe PRIO=--1.

Tab. 27 Argumentos na instrução TRIGGER

ProgExpPHR4.1.7 12.03.06 pt

168 de 212
9 Trigger – ações de comutação referentes à trajetória (continuação)

Através da seqüência de instruções



LIN PONTO2

TRIGGER WHEN DISTANCE = 0 DELAY=20 DO $OUT[4]=TRUE
TRIGGER WHEN DISTANCE = 1 DELAY=-25 DO UP1() PRIO=-1
LIN PONTO3

LIN PONTO4

é ativada, durante o movimento linear ao PONTO3, a saída 4 exatamente 20 milisegundos
depois do início do movimento, e 25 milisegundos antes de atingir o ponto de destino é
ativado o subprograma SP1(). A atribuição da prioridade realiza--se automaticamente,
através do sistema.
Para uma explicação mais pormenorizada acerca do efeito diferente que a indicação
DISTANCE exerce sobre os passos individuais e os passos de aproximação, ver Fig. 41 --
Fig. 44.

DISTANCE Zona de DELAY


comutação
0 0 -- 1 +
1 1 -- 0 --
0
PONTO2 +

--
PONTO3

1
Fig. 41 Zonas de comutação e possíveis valores de retardamento, quando os pontos
de início e de destino são pontos de parada exata

ProgExpPHR4.1.7 12.03.06 pt

169 de 212
Programação perito

0 PONTO2 DISTANCE Zona de


comutação
DELAY

+ 0 0 -- 1a +
1 1a -- 1b ±

1a

-- 1
1b
PONTO3 PONTO4
+

Fig. 42 Zonas de comutação e possíveis valores de retardamento, quando o ponto de


início é um ponto de parada exata e o ponto de destino um ponto de aproximação

PONTO2 DISTANCE Zona de DELAY


comutação
0 0 -- 1a +
1 1a -- 1b ±
0
+

1a

-- 1
1b
PONTO3 PONTO4
+

Fig. 43 Zonas de comutação e possíveis valores de retardamento, quando os pontos de


início e de destino são pontos de aproximação

ProgExpPHR4.1.7 12.03.06 pt

170 de 212
9 Trigger – ações de comutação referentes à trajetória (continuação)

DISTANCE Zona de DELAY


comutação
0 0 -- 1 +
PONTO2
1 1 -- 0 --

0
+
--

1
PONTO3

Fig. 44 Zonas de comutação e possíveis valores de retardamento, quando o ponto de


início é um ponto de aproximação e o ponto de destino um ponto de parada exata

ProgExpPHR4.1.7 12.03.06 pt

171 de 212
Programação perito

9.2 Ação de comutação em qualquer ponto da trajetória


A instrução TRIGGER referente ao percurso permite provocar a ação de comutação em
qualquer ponto da trajetória. Tal como nas ações de comutação em relação aos pontos de
início e de destino, também esta poderá ser deslocada no tempo.
A ação de comutação referente ao percurso só é permitida em movimentos de trajetória
(LIN ou CIRC). A instrução TRIGGER refere--se ao passo de movimento programado a
seguir e tem a sintaxe:

TRIGGER WHEN PATH = percurso DELAY = tempo DO instrução


áPRIO=prioridadeñ

Os argumentos são descritos mais pormenorizadamente na tabela seguinte.

Argumento Tipo de Significado


dados
Percurso INT Com percurso indique a distância pretendida ao ponto
de destino, programado depois do trigger.
Se este ponto de destino for um ponto com posiciona-
mento aproximado, percurso indica a distância preten-
dida da ação de comutação da posição da zona de aproxi-
mação que se encontra mais próxima do ponto de destino.
Um percurso negativo permite adiantar o ponto de
comutação até ao ponto de início. Se o ponto de início for
um ponto de aproximação, o ponto de comutação pode ser
deslocado até ao início da zona de aproximação.
Uma indicação positiva de percurso permite uma
deslocação até ao ponto de parada exata seguinte,
programado depois do trigger.
A unidade é o milímetro.
Tempo INT A indicação DELAY permite atrasar (+) ou adiantar (--) o
ponto de comutação em relação à indicação PATH, du-
rante um determinado tempo.
O ponto de comutação só pode ser deslocado na área de
comutação mencionada atrás (por forma a atingir o
seguinte ponto de parada exata). Com movimentos de
aproximação, o ponto de comutação pode ser deslocado
para a frente, no máximo, até ao início de aproximação do
ponto de início.
A unidade é o milisegundo.
Instrução A instrução pode ser
S a ativação de um subprograma
S a atribuição de um valor a uma variável
S uma instrução OUTPUT (também Pulse).
Prioridade Prioridade INT A cada instrução TRIGGER com ativação de subprograma,
terá de ser atribuída uma prioridade. São admissíveis os
valores de 1...39 e 81...128. Trata--se aqui das mesmas
prioridades que nos interrupts (ver capítulo 8).
Os valores 40...80 estão reservados a uma atribuição de
prioridade automática através do sistema. Por isso,
programe PRIO=--1.

Tab. 28 Argumentos na instrução TRIGGER

ProgExpPHR4.1.7 12.03.06 pt

172 de 212
9 Trigger – ações de comutação referentes à trajetória (continuação)

Seqüência de instruções

PTP PONTO2
TRIGGER WHEN PATH = 20 DELAY=-10 DO $OUT[2]=TRUE
LIN PONTO3 C_DIS
LIN PONTO4 C_DIS
LIN PONTO5

Uma vez que o ponto de comutação pode ser deslocado a partir do ponto de movimento
antes do qual foi programado, passando por todos os pontos de aproximação seguintes, até
ao ponto de parada exata próximo, é possível uma deslocação do ponto de comutação do
início da aproximação PONTO2 até ao PONTO5. Se nesta seqüência de instruções não hou-
vesse uma aproximação ao PONTO2, o ponto de comutação só poderia ser deslocado até
ao ponto de parada exata PONTO2.

PONTO2

--

DELAY X
-- PONTO5
+
PATH Y<0
DELAY X
-- +
PONTO3 PONTO4
DELAY=0
PATH=0 PATH Y>0 +

Exemplo de números:
X= --10, Y= --20

PONTO2

Ponto de
comutação
DELAY= -10

PONTO5

PATH= -20

PONTO4
PONTO3

Fig. 45 Zonas de comutação, quando o ponto de início é um ponto de aproximação

ProgExpPHR4.1.7 12.03.06 pt

173 de 212
Programação perito

Exceções:

G Movimento SAK
Caso seja realizada uma seleção de passos a seguir a um movimento de trajetória, este
é realizado como movimento SAK. Uma vez que neste movimento SAK o ponto de início
é um ponto qualquer, não pode ser considerado um ponto de início útil para uma indicação
de distância. Caso tenham sido programadas instruções TRIGGER com a indicação de
PATH e caso haja a seguir a estas instruções uma seleção de passos, todas as instruções
são executadas no ponto de destino.
G Aproximação impossível
Caso a aproximação não seja possível, realiza--se nesse local um movimento de parada
exata que, neste caso, é tratado como um movimento de aproximação. Outras ações de
comutação que se encontram na trajetória, mantêm--se memorizadas e são provocadas
no local correspondente. Mas normalmente, já não são exatas, uma vez que a trajetória
e, por conseguinte, também o comprimento da trajetória são agora diferentes. As ações
de comutação que foram colocadas na primeira metade da zona de aproximação, devido
a um valor PATH negativo, não podem agora ser provocadas antes do ponto de
aproximação:

LIN P1 C_DIS
TRIGGER WHEN PATH=-120 DELAY=0 DO UP1() PRIO=-1
TRIGGER WHEN PATH=-70 DELAY=0 DO $OUT[2]=TRUE
LIN P2 C_DIS

No exemplo acima apresentado, a distância entre o ponto de início e o ponto de destino
deverá situar--se em 100 mm. Se for possível fazer a aproximação em P1, a ativação do
subprograma SP1() é realizada 20 mm antes de atingir o ponto da trajetória que se situa
mais próximo de P1. A saída 2 é ativada 30 mm a seguir a este ponto da trajetória. Caso
não tenha sido possível executar o movimento de aproximação em P1, a trajetória passa
pelo ponto P1, onde também se realiza o posicionamento. A ativação do subprograma
SP1() realiza--se agora logo depois de deixar P1, e a saída 2 é ativada a uma distância
de 30 mm de P1.
G Cancelar um movimento
Se um movimento for cancelado, p.ex., devido à seleção de um passo ou a um reset, não
sendo portanto executado até ao fim, as ações de comutação ainda não executadas também
já não serão realizadas, mas apagadas, tal como acontece na indicação DISTANCE.
G Instrução TRIGGER para um movimento PTP referente ao percurso
Se adicionalmente a um movimento PTP for programada uma instrução PATH-TRIGGER
com indicação de caminho, este procedimento é recusado pelo interpretador durante a
execução.
G Aproximação PTP--trajetória
Caso seja programada uma instrução PATH-TRIGGER em relação a um movimento cujo
ponto de início é um ponto de aproximação PTP--trajetória, a ação de comutação não poderá
ser executada antes do fim desta zona de aproximação, uma vez que em toda a zona de
aproximação ainda se realiza um movimento PTP.
Numa zona de aproximação trajetória--PTP, ainda são executadas no ponto de início da zona
de aproximação, todas as instruções TRIGGER que até aí não foram executadas. A partir daí
realiza--se então o movimento PTP, e deixa de ser possível uma atribuição da trajetória.

ProgExpPHR4.1.7 12.03.06 pt

174 de 212
9 Trigger – ações de comutação referentes à trajetória (continuação)

No exemplo seguinte são programadas ações de comutação com a indicação DISTANCE,


e também com a indicação PATH. Os vários pontos de comutação e a trajetória de
movimento encontram--se representados em Fig. 46.

DEF TRIG ( )
;--------- Seção de declaração ---------
EXT BAS (BAS_COMMAND :IN,REAL :IN)
DECL AXIS HOME
INT I
SINAL COLA $OUT[3]
;---------- Inicialização ---------
INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 ) ;inicialização de velocidades,
;acelerações, $BASE, $TOOL, etc.
$APO.CDIS=35 ;determinar distância de aproximação
HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 30,A6 0}
POS0={POS: X 1564,Y -114,Z 713,A 128,B 85,C 22,S 6,T 50}
POS1={X 1383,Y -14,Z 713,A 128,B 85,C 22}
POS2={X 1383,Y 200,Z 713,A 128,B 85,C 22}
POS3={X 1527,Y 200,Z 713,A 128,B 85,C 22}
POS4={X 1527,Y 352,Z 713,A 128,B 85,C 22}
FOR I=1 TO 16
$OUT[I]=FALSE
ENDFOR
;------------- Seção principal ------------
PTP HOME ;movimento SAK
PTP POS0
TRIGGER WHEN DISTANCE=0 DELAY=40 DO $OUT[1]=TRUE
TRIGGER WHEN PATH=-30 DELAY=0 DO SP1(2) PRIO=-1
LIN POS1
TRIGGER WHEN DISTANCE=1 DELAY=-50 DO COLA=TRUE
TRIGGER WHEN PATH=180 DELAY 55 DO PULSE($OUT[4],TRUE,0.9)
TRIGGER WHEN PATH=0 DELAY=40 DO $OUT[6]=TRUE
LIN POS2 C_DIS
TRIGGER WHEN DISTANCE=0 DELAY=40 DO PULSE ($OUT[5],TRUE,1.4 )
TRIGGER WHEN PATH=-20 DELAY=-15 DO $OUT[8]
LIN POS3 C_DIS
TRIGGER WHEN DISTANCE=1 DELAY=-15 DO SP1 (7 ) PRIO= -1
LIN POS4
PTP HOME
END
DEF SP1 (NR :IN )

INT NR
IF $IN[1]==TRUE THEN
$OUT[NR]=TRUE
ENDIF
END

ProgExpPHR4.1.7 12.03.06 pt

175 de 212
Programação perito

POS 1 2’B POS 2


$OUT[3]
30 2’
$OUT[6]

$OUT[2] 2’E
$OUT[5]

3’B

180
8
$OUT[1] $OUT[8]

20
POS 0 $OUT[4] $OUT[7]
3’
3’E
POS 3
POS 4

Fig. 46 Pontos de comutação e trajetória de movimento referentes


ao exemplo anterior

ProgExpPHR4.1.7 12.03.06 pt

176 de 212
9 Trigger – ações de comutação referentes à trajetória (continuação)

9.3 Tips & Tricks


9.3.1 Sobreposição de instruções de trigger
O programa apresentado pode ser executado, mas a mesma prioridade das instruções de
trigger pode criar um problema.

;FOLD PTP P1
TRIGGER WHEN DISTANCE=0 DELAY=0 DO SUB1() PRIO=15
PTP P1
...
;ENDFOLD
...
...
;FOLD PTP P2
TRIGGER WHEN DISTANCE=0 DELAY=-- 75 DO SUB1() PRIO=15
...
;ENDFOLD

Se a primeira instrução de trigger ainda não estiver terminada, enquanto já está a ser
executada a segunda instrução de trigger, é emitida uma mensagem de erro chamando a
atenção para o tempo de execução. Este pode ser o caso, por exemplo, quando os dois
pontos estiverem muito próximos um do outro.

Para a solução há duas alternativas:


G Atribuir manualmente uma prioridade diferente às duas instruções de trigger;
G Atribuir às duas instruções de trigger a prioridade “--1”, para que o sistema atribua
automaticamente a prioridade correta.

ProgExpPHR4.1.7 12.03.06 pt

177 de 212
Programação perito

10 Listas de dados
10.1 Listas de dados locais
As listas de dados destinam--se a disponibilizar as declarações específicas do programa ou
as declarações superiores. Destas fazem parte também as informações acerca dos pontos,
p.ex., as coordenadas:
G Uma lista de dados pode ser elaborada em relação a qualquer ficheiro SRC. A lista de
dados tem então o mesmo nome que o ficheiro SRC, mas termina com a extensão
“.DAT”.
G A lista de dados é local, embora seja um ficheiro próprio.
G Numa lista de dados só podem estar declarações e inicializações.
G Na mesma linha pode haver declarações e inicializações.
G As variáveis de sistema não são aceites.
A declaração das listas de dados realiza--se analogamente à declaração dos ficheiros SRC:
DEFDAT A declaração é iniciada com a palavra chave DEFDAT e o nome de programa e terminada
com a palavra chave ENDDAT.
A inicialização das variáveis realiza--se através da atribuição de um valor à respetiva
variável, diretamente na linha de declaração.

PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
¼ DEFDAT PROG_1
HALT No início, OTTO é “0” INT OTTO = 0
¼ ENDDAT
OTTO = 25
¼
HALT
END
DEFDAT PROG_1
Depois da execução do INT OTTO = 25
programa, OTTO = 25 ENDDAT

Fig. 47 Inicialização e atribuição de valores a variáveis declaradas em listas de dados


Uma vez que a declaração e a inicialização se realizam na lista de dados, não é necessário
repetir este procedimento no programa principal. Se for atribuído à variável OTTO um valor
novo no programa principal, este é introduzido também na lista de dados onde se mantém
memorizado permanentemente (ver Fig. 47).
Depois de desligar/ligar a unidade de comando, os trabalhos são executados com o valor
novo. Este procedimento é indispensável para uma correção On--line e outras correções do
programa.
Quando se pretende iniciar um programa principal sempre com o mesmo valor, é necessário
predefinir a respetiva variável no programa principal com o valor pretendido.
Nas listas de dados podem encontrar--se as declarações seguintes:
G Declarações externas para subprogramas e funções que são utilizadas no ficheiro
SRC.
G Declarações de importação para variáveis importadas.
G Declarações e inicializações de variáveis que são utilizadas no ficheiro SRC.
G Declarações de nomes de sinais e nomes de canais que são utilizados no ficheiro SRC.
G Declarações de tipos de dados e tipos de enumeração (Struc, Enum) que são utilizados
na lista de dados ou no ficheiro SRC.

ProgExpPHR4.1.7 12.03.06 pt

178 de 212
10 Listas de dados (continuação)

10.2 Listas de dados globais


As variáveis definidas numa lista de dados podem ser tornadas acessíveis a um programa
principal “estranho”.
PUBLIC Para esse efeito, a lista de dados tem de ser definida na linha de cabeçalho como “publi-
camente acessível”, através da palavra chave PUBLIC. Agora existem duas possibilidades
para a declaração da variável:
G Uma variável é definida na lista de dados, p.ex., com INT OTTO = 0, e no programa
IMPORT principal estranho esta variável terá de ser importada através da instrução Import,
a fim de torná--la acessível.
A uma variável importada pode ser atribuído no programa principal um nome diferente
do que ela tem na lista de dados, de onde foi importada.
Assim, se quiser utilizar num programa PROG_2() a variável OTTO da lista de dados
PROG_1 acima indicada, terá de programar, além da palavra chave PUBLIC na lista de
dados, a declaração de importação seguinte no programa PROG_2():
IMPORT INT OTTO_2 IS /R1/PROG_1..OTTO
A variável OTTO da lista de dados PROG_1.DAT no diretório /R1 é conhecida sob o
nome OTTO_2 agora também no programa PROG_2() (ver Fig. 48).

PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
¼ DEFDAT PROG_1 PUBLIC
HALT INT OTTO = 0
¼ ENDDAT
OTTO = 25
¼
END

PROG_2.SRC
DEF PROG_2 ( )
IMPORT INT OTTO_2 IS /R1/PROG_1..OTTO
¼
¼
END

Fig. 48 Importar variáveis de listas de dados “estranhas” com Import

ProgExpPHR4.1.7 12.03.06 pt

179 de 212
Programação perito

Global G A variável é declarada como “Variável global”, p.ex., DECL GLOBAL INT OTTO = 0
e está acessível em cada programa principal estranho sem instrução de importar.
Se foi declarada uma variável global, não é possível alterar o nome da variável num
programa principal estranho.

PROG_1.SRC PROG_1.DAT
DEF PROG_1 ( )
¼ DEFDAT PROG_1 PUBLIC
HALT DECL GLOBAL INT OTTO = 0
¼ ENDDAT
OTTO = 25
¼
END

PROG_2.SRC
DEF PROG_2 ( )
¼
¼
END

Fig. 49 Importar variáveis de listas de dados “estranhas” sem Import

A declaração de uma variável global só é admissível em listas de dados, ao usá--la em


ficheiros SRC ou SUB, é emitida uma mensagem de erro.

Na lista de dados de sistema global previamente definida $CONFIG.DAT, podem ser defini-
das variáveis, estruturas, canais e sinais que sejam válidos durante um tempo prolongado e
que tenham um significado superior para muitos programas. As variáveis na $CONFIG.DAT
não terão de ser declaradas com IMPORT, uma vez que todos os programas de usuário as
reconhecem automaticamente.

Mais informações acerca da $CONFIG.DAT encontram--se no capítulo [Variáveis e


declarações], parágrafo [Variáveis de sistema e ficheiros de sistema].

ProgExpPHR4.1.7 12.03.06 pt

180 de 212
10 Listas de dados (continuação)

ProgExpPHR4.1.7 12.03.06 pt

181 de 212
Programação perito

11 Editor externo
Este programa adicional proporciona ao software do robô funções que não estão disponíveis
no painel de operação.

Limpar programa
Pontos de trajetória e parâmetros de movimento não referenciados são apagados na
lista de dados.

Ativar e deslocar interruptores de fim de curso

Manipulações de bloco
-- Marcar bloco e copiar, apagar ou cortar.
-- Converter a trajetória do robô na área marcada, isto é, o ponto da seção de trajetória
marcada que foi o primeiro a ser programado é atingido em último lugar – mas o último
ponto programado é o primeiro a ser atingido.
-- Refletir a trajetória do robô na área marcada no plano X--Z do sistema de coordenadas
do mundo.
-- Alterar os parâmetros de movimento (velocidade, aceleração, etc.) na área marcada.
-- Deslocar todos os pontos dentro da seção de trajetória marcada no sistema de
coordenadas da peça (BASE), da ferramenta (TOOL) ou do mundo (WORLD). A
deslocação ou rotação poderá ser realizada pela introdução manual de um offset no
respetivo sistema de coordenadas ou pela programação de pontos de referência.
-- Deslocação específica dos eixos de todos os pontos na área marcada.

Adaptar pontos de trajetória


-- a um outro sistema de coordenadas da ferramenta ou
-- a um outro sistema de coordenadas da peça.

Adaptar pontos de trajetória


-- enquanto está a ser executado um programa na unidade de comando, as coordena-
das de ponto podem ser deslocadas no sistema de coordenadas da ferramenta, da
base e do mundo.

ProgExpPHR4.1.7 12.03.06 pt

182 de 212
11 Editor externo (continuação)

11.1 Iniciar o editor externo

O Editor Externo está disponível apenas a partir do grupo de usuários “Perito”.

Entr. Serv Medição


Ajustar DSE--RDW
Ative o editor externo com a ajuda
Desajustar Determinação da carga do menu “Entr.Serv” e da opção aí
Software--Update Editor externo disponibilizada “Assistência”.
Assistência Configurar eixos externos
Nome de robot Texto comprido

Editar FOLD Com um programa selecionado o


Copiar menu “Entrada em serviço” não está
Inserir disponível. Nesse caso use a instru-
Cortar ção de menu “Editar” --> “Corrigir” que
Apagar
Procurar está disponível a partir do nível de pe-
Substituir ritos.
Cancelar programa
RESET programa
Corrigir A10 Online
Ponto

A seguir, é aberto o editor externo e você pode proceder às correções necessárias.

Selecionar ficheiros

Logo depois do arranque do editor, aparece o diálogo “Selecionar ficheiros”. Use aqui as te-
clas do cursor “¯” e “­” para selecionar o ficheiro que pretende editar. Estão disponíveis to-
dos os arquivos SRC do diretório R1, exceto “R1\MADA\”, “R1\SYSTEM\”. Além disso, podem
ser definidos arquivos padrão (“C:\KRC\UTIL\HOTEDIT.INI”) que também não são exibidos.

Se o “Editor externo” for iniciado como programa offline, o software KRC é iniciado auto-
máticamente.

ProgExpPHR4.1.7 12.03.06 pt

183 de 212
Programação perito

Se você marcou o arquivo desejado desta forma, ele é carregado para o editor
se você apertar a respectiva softkey ou a tecla “Enter”. A duração deste pro-
cesso de carregamento depende do tamanho do arquivo.

Se aparecer a mensagem “Ficheiro *.DAT não encontrado”, significa que tentou carregar
para o editor um programa em relação ao qual não existe nenhuma lista de dados.

Se o ficheiro foi carregado, o programa é mostrado de forma semelhante à que é usada pelo
editor do painel de operação.

Na linha de estado do editor é indicado se a ativação se realizou através do menu de entrada


em serviço ou através de “Editar” --> “Corrigir”.

ProgExpPHR4.1.7 12.03.06 pt

184 de 212
11 Editor externo (continuação)

11.2 Operação
Os elementos do painel de operação normal também se encontram no do editor externo.
Também aqui existem as menukeys, statuskeys, softkeys, uma caixa de programa, uma
caixa de mensagens e uma barra de estado.

Os menus podem ser abertos alternativamente, premindo simultaneamente a tecla “ALT”


e a letra sublinhada na menukey. A seleção de uma opção de menu realiza--se de forma
análoga.

Statuskeys
As statuskeys “Para cima” ou “Para baixo” permitem deslocar a marcação da linha (foco),
linha por linha, na direção do início ou do fim da lista. As teclas do cursor “"” ou “#” e as teclas
“PGUP“ ou “PGDN“ têm a mesma função.

foco

foco

Com as teclas “PgUp” ou “PgDn” você pode folhear para trás ou para a frente. Para isso
tem de desligar a função “NUM” ou usar um teclado externo.

O conteúdo da caixa de mensagens é apagado.

Se você apertar a statuskey “KRL”, é mostrado o programa da mesma forma como no modo
de perito, com as definições “Abrir todas as FOLDS” e “Vista de pormenor (ASCII)”.
Na área “FOLD” é mostrada a instrução marcada com o foco (ficheiro SRC”). Na área
“Dados” são mostrados os dados pertencentes à instrução marcada (ficheiro “DAT”).

ProgExpPHR4.1.7 12.03.06 pt

185 de 212
Programação perito

Ao premir a statuskey “Lupa –“ você volta à representação do programa inteiro.

Barra de softkeys
Esta softkey corresponde à instrução de menu “Fechar ficheiro” que fecha
o programa atual, mas deixa continuar o editor.
Caixa de mensagens
Na caixa de mensagens são mostradas as mensagens relevantes para o Editor Externo.
Nº Tempo Mensagem Result
003 7:51:36 Carregar... OK
002 7:51:32 Fichiero Abrir OK
001 7:51:32 ExtEdit Start OK

No: Tipo e número da mensagem


Tempo: O momento em que a mensagem foi retirada
Mensagem: O tipo de mensagem
Result: A informação sobre a execução da ação
Barra de estado
Na barra de estado são mostradas outras informações.

NUM: O bloco numérico está ativado


CAPS: A tecla de maiúsculas está desligada
ExtEdit: O módulo “Editor externo” está ativo tendo sido ativado através do menu
“Entrada em serviço” (Setup) --> “Assistência”.
Beispiel: O nome do programa atualmente aberto
08:43: O tempo de sistema atual

ProgExpPHR4.1.7 12.03.06 pt

186 de 212
11 Editor externo (continuação)

11.3 Menu “Ficheiro”


Ficheiro Abrir
Memorizar
Imprimir Programa atual
Neste menu encontram--se as funções
Fechar ficheiro Todos os usuários para lidar com os ficheiros.
Terminar

11.3.1 Abrir
Ao usar esta opção, aparece
a janela “Selecionar fichei-
ros”, como já descrito ante-
riormente no parágrafo 11.2.

11.3.2 Memorizar
Se o conteúdo do ficheiro carregado para o editor foi alterado com a ajuda das funções
disponíveis, antes de guardar a nova versão deste ficheiro ou antes de terminar a sessão
do editor, é feita uma pergunta para confirmar a introdução das alterações realizadas.

Sim Não

Para introduzir as alterações realizadas, basta premir a tecla Enter para confirmar a
preseleção.
Neste processo, os conteúdos da versão existente do ficheiro editado são, pelo menos em
parte, irremediavelmente perdidos.

Para cancelar a ação, você deve premir primeiro uma das teclas do cursor, para deslocar o
foco até ao botão “Não”. Ao premir agora a tecla Enter, a seleção é executada. Neste caso, a
versão já existente do ficheiro editado mantém--se inalterada.

11.3.3 Imprimir
Ficheiro Abrir Esta instrução permite a saída de pro-
Memorizar gramas no meio definido em “Op-
Imprimir Programa atual
Fechar ficheiro Todos os usuários
ções”--> “Definição de saídas”.
Terminar

Estão disponíveis as funções seguintes:


Programa atual
O ficheiro mostrado no editor externo é emitido de forma igual ao modo representado
na caixa do editor.

ProgExpPHR4.1.7 12.03.06 pt

187 de 212
Programação perito

KRC:\Palette.SRC

*************************************

INI
1:PTP HOME Vel=100 % DEFAULT

2:PTP P1 CONT Vel=100 % PDAT1 Tool[1] Base[0]


3:LIN P2 CONT Vel=1.5 m/s CPDAT1 Tool[1] Base[0]
4:CIRC P3 P4 Vel=2 m/s % CPDAT2 Tool[1] Base[0]

5:PTP HOME Vel=100 % DEFAULT


END

Todas os usuários
Todos os programas de usuário são emitidos.

Caso ainda não tenha sido definido um caminho de saída através de “Set diretório”, as
saídas nos meios “Impressora” ou “Arquivo” são definidas tipo padrão no diretório
“C:\USERPROG”.

A opção “Imprimir” não está disponível quando o meio de saída é o “Editor”.


A saída através da opção “Todos os usuários” pode levar algum tempo, conforme os fichei-
ros que estão a sair.

11.3.4 Fechar ficheiro


Caso o ficheiro que se encontra no editor tenha sido modificado desde o seu carregamento,
você pode guardar as modificações (como descrito no parágrafo 11.3.2).
Depois de fechar o ficheiro que se encontra no editor, as opções de menu “Ficheiro” e depois
a opção “Abrir” (ver também parágrafo 11.3.1) permitem carregar para o editor um outro
ficheiro.

11.3.5 Terminar
Caso o ficheiro que se encontra no editor tenha sido modificado desde o seu carregamento,
você pode guardar as modificações (como descrito no parágrafo 11.3.2).
A janela do editor é fechada aparecendo novamente o painel de operação do software do
robô.

ProgExpPHR4.1.7 12.03.06 pt

188 de 212
11 Editor externo (continuação)

11.4 Menu “Editar”


Editar Cortar Este menu contém uma série de funções de bloco.
Copiar
Inserir como Trajeto original
Apagar Trajeto inverso
Selecionar tudo

Para marcar uma área, mantenha a tecla “SHIFT” premida e depois prima
uma das duas statuskeys “Para cima” ou “Para baixo” ou a respetiva tecla
do cursor.

Área marcada
(marcação de bloco)

A marcação de um bloco pode ser novamente anulada com a tecla “ESC”.


ESC

11.4.1 Cortar (“CTRL”--“X”)

Apaga a seção de trajetória marcada do programa e mantém--la na memória temporária,


pronta para qualquer inserção.

11.4.2 Copiar (“CTRL”--“C”)

Copia a seção de trajetória marcada para a memória temporária e mantém--na aí pronta para
qualquer inserção.

11.4.3 Inserir como ...

Trajeto original (“CTRL”+“V”)


Insere novamente o conteúdo da memória temporária seguindo a mesma ordem em que foi
cortado, ou seja, copiado.
Trajeto inverso
Insere o conteúdo da memória temporária na ordem inversa.
O último ponto de trajetória da seção de trajetória marcada e cortada ou copiada é colocado
no início do bloco inserido; o primeiro ponto de trajetória é colocado no fim.
Caso tenha sido programado, por exemplo, o trajeto até a um dispositivo, este trajeto pode ser
inserido como trajeto inverso. Assim, já não há necessidade de programar o trajeto inverso.

11.4.4 Apagar

A seção de trajetória marcada é apagada sem ser guardada na memória temporária.

Ao apagar uma seção de trajetória, esta é irremediavelmente perdida. Caso tenha


apagado algumas partes do programa por engano, feche o ficheiro sem guardar as
alterações e depois abra--o de novo.

11.4.5 Selecionar tudo (“CTRL”--“A”)

Todo o programa carregado para o editor é marcado.

ProgExpPHR4.1.7 12.03.06 pt

189 de 212
Programação perito

11.5 Menu “Extras”


Extras Reflexo dos eixos Neste menu encontram--se opções para a
Deslocação manual Base manipulação geométrica do programa.
Alteração por blocos TCP
Limpar lista de dados World
Adaptação TCP Eixos
Adaptação Base

As teclas do cursor “­” ou “¯” permitem mover a marca de inserção de um


campo de entrada ao outro.

Com esta softkey você aceita os valores introduzidos.


Esta softkey termina a entrada sem aceitar os valores.

11.5.1 Reflexo dos eixos


+Z

Com a ajuda desta função


poderá refletir a posição dos
pontos de trajetória progra-
mados no plano X--Z do sis-
tema de coordenadas $RO-
BROOT. Uma condição pré-
via é que pelo menos um
P1’ passo de movimento esteja
marcado.

P1

P2’
P2

ROBROOT P3’

--Y
P3
+X

Depois de ter sido selecionada uma


opção, é aberta uma janela de
diálogo onde terá de indicar o nome
do ficheiro no qual o programa
carregado com os pontos de
trajetória refletidos é guardado.

O processo é iniciado premindo a tecla “Enter”, ao mesmo tempo que o programa


é guardado sob o nome indicado. A seguir, você pode carregar este programa para
o editor.

ProgExpPHR4.1.7 12.03.06 pt

190 de 212
11 Editor externo (continuação)

Para cancelar a ação, prima a tecla Esc.


ESC

11.5.2 Deslocação manual


Esta função permite deslocar a posição dos pontos de trajetória programados no:

-- sistema de coordenadas da peça(BASE)


-- sistema de coordenadas do mundo(WORLD)
-- sistema de coordenadas da ferramenta(TOOL) ou
-- específico dos eixos (Eixos).

Ao ser selecionada uma das opções possíveis, é aberta uma caixa para a introdução dos
valores desejados. Em função do sistema de coordenadas, você introduz ou a deslocação e
torção ou os ângulos dos eixos.
BASE
Por uma deslocação de ponto cartesiana base entende--se que um ponto qualquer no es-
paço sofra uma deslocação relativa no sistema de coordenadas da origem (WORLD) que se
encontra na base do robô. Com a ajuda do exemplo aqui representado, a deslocação de
ponto cartesiana BASE é explicada mais pormenorizadamente:

Valores de entrada =
valores relativos
--Y [mm]; --X [mm]; A+[°]

Z+

Neste exemplo iria realizar--se uma


deslocação relativa negativa em X,
Y e uma rotação relativa positiva
em torno de Z.

A+
Pnovo
Y+
X+
Pantigo Xantigo
Yantigo --Yr
--Xr

ESC A entrada do vector de deslocação realiza--se de forma numérica no respetivo campo de


entrada. O acesso aos campos de entrada é possível com as teclas “¯ “ e “­ “. A deslocação
é iniciada com “Instrução OK” podendo ser cancelada, a qualquer momento, com “Cancelar”
ou “Esc”.

ProgExpPHR4.1.7 12.03.06 pt

191 de 212
Programação perito

Introduza os valores relativos à deslocação (X, Y, Z) em [mm] e à torção (A, B, C) em [graus]


nos respetivos campos de entrada.

TCP
Uma deslocação de ponto cartesiana TCP significa que um ponto qualquer no espaço sofre
uma deslocação relativa em relação ao sistema de coordenadas TOOL. Com a ajuda do
exemplo aqui representado, a deslocação de ponto cartesiana TCP é explicada mais porme-
norizadamente:

Pnovo
Zantigo
--Zr
--Yr Y+
C°r

Pantigo X+
Yantigo

Z+ Valores de entrada =
valores relativos
Neste exemplo iria realizar--se uma
--Y [mm]; --Z [mm]; C+[°]
deslocação relativa negativa em Y, Z
e uma rotação relativa positiva em
torno de X[°].
Uma deslocação relativa em X não é
tomada em conta!

A entrada do vector de deslocação realiza--se de forma numérica no respetivo campo de


entrada. O acesso aos campos de entrada é possível com as teclas “¯ “ e “­ “. A deslocação
é iniciada com “Instrução OK” podendo ser cancelada, a qualquer momento, com “Cancelar”
ou “Esc”.
Introduza os valores relativos à deslocação (X, Y, Z) em [mm] e à torção (A, B, C) em [graus]
nos respetivos campos de entrada.

ProgExpPHR4.1.7 12.03.06 pt

192 de 212
11 Editor externo (continuação)

WORLD
Sob uma deslocação de ponto WORLD entende--se que o sistema de coordenadas de origem
que normalmente se encontra na base do robô sofre uma deslocação relativa. Com a ajuda do
exemplo aqui representado, a deslocação de ponto WORLD é explicada mais pormenorizada-
mente:

Valores de entrada =
valores relativos
+Y [mm]; +X [mm]; A--[°]
Z+

Neste exemplo iria realizar--se uma


deslocação relativa positiva em X, Y Porg
e uma rotação relativa negativa em
torno de Z.

Z+novo
Y+

Pnovo +Xr
X+
X+novo
+Yr A--

Y+novo

Introduza os valores relativos à deslocação (X, Y, Z) em [mm] e à torção (A, B, C) em [graus]


nos respetivos campos de entrada.

ProgExpPHR4.1.7 12.03.06 pt

193 de 212
Programação perito

Eixos
Sob uma deslocação de ponto específica dos eixos entende--se que um ponto qualquer no
espaço é atingido por um movimento relativo dos eixos. Com a ajuda da figura aqui represen-
tada pretende--se proceder a uma deslocação relativa do eixo 5.

Palt

a A5a A5 alt
neu

Pneu

Valores de entrada =
Neste exemplo iria realizar--se uma valores relativos
rotação relativa positiva do A5 [_]. +A5 [°]
Uma rotação relativa dos outros eixos
não é tomada em conta!

A entrada da rotação do eixo realiza--se em graus ou em incrementos, em relação ao


respetivo eixo. O acesso aos campos de entrada é possível com as teclas “¯“ e “­“. A
deslocação é iniciada com “Instrução OK” podendo ser cancelada, a qualquer momento,
com “Cancelar” ou “Esc”.
Introduza os valores relativos aos ângulos dos eixos (A1 ... A6) em [graus].

As indicações também podem ser feitas de forma incremental (E1--E6)[Inc].

Incrementos = Impulsos de rotação dos outros acionamentos de eixo

ProgExpPHR4.1.7 12.03.06 pt

194 de 212
11 Editor externo (continuação)

11.5.3 Alteração por blocos


Esta função permite alterar dados de movimento nas partes marcadas de um programa.
Ajuda de memória: A marcação de blocos realiza--se através de uma das teclas de estado
“Para cima” ou “Para baixo”, ao mesmo tempo que se mantém premida a tecla “SHIFT”.
Ao ativar a função aparece a janela abaixo representada:

As teclas do cursor “®” ou “¬” permitem mover a marca de inserção de um campo de


entrada ao outro.

Os campos de lista são abertos com a ajuda da combinação de teclas “ALT”+“¯”, ou


“ALT”+“­”.

Alterar Depois de ter introduzido as alterações pretendidas, prima a softkey “Alte-


rar”.

Cancelar Pode sair da função, a qualquer momento, premindo a softkey “Cancelar”.

11.5.4 Limpar lista de dados


Ao ativar esta função, são apagados da lista de dados (*.DAT) pertencente ao programa
os pontos de trajetória e parâmetros de movimento não referenciados.

ProgExpPHR4.1.7 12.03.06 pt

195 de 212
Programação perito

11.5.5 Adaptação TCP ou BASE

Esta função permite adaptar um programa carregado para o editor a um outro sistema de
coordenadas da ferramenta (TOOL) ou da peça (BASE).
Ao ativar esta função, aparece a janela abaixo representada. Como exemplo, foi escolhida
aqui a adaptação TCP.

São mostrados todos os programas incluindo os respetivos pontos afetados pela adaptação
Tool ou Base.
Para poder mover a marca de inserção de campo para campo, terão de estar ativadas as
funções de comando do cursor no bloco de números. Para esse efeito, prima brevemente
a tecla “NUM”. A seguir, a combinação de teclas “SHIFT”+“TAB” permite passar a marca de
inserção de um campo ao outro.

Os campos de lista são abertos com a ajuda da combinação de teclas “ALT”+“¯”, ou


“ALT”+“­”.

No campo de lista selecione na área “Dados TCP novos” a ferramenta à qual pretende adap-
tar o programa carregado. Nos campos de entrada “X=”, “Y=”, “Z=”, “A=”, “B=” e “C=”, os
novos dados de ferramenta poderão ser introduzidos também manualmente.
Depois de ter introduzido as alterações pretendidas, prima a softkey “Alterar”. Pode sair da
função, a qualquer momento, premindo a softkey “Fim”.

ProgExpPHR4.1.7 12.03.06 pt

196 de 212
11 Editor externo (continuação)

11.6 Menu “HotEdit”


HotEdit Base O menu “HotEdit” permite deslocar as
TCP coordenadas de ponto no sistema de
World
TTS Limits -- Base/World coordenadas da ferramenta, da base ou
Limits Limits -- TTS do mundo, online, ou seja, durante a exe-
cução do programa. A opção “Limits” per-
mite limitar a deslocação.
A correção online dos pontos só é tida em consideração se naquele momento o ponteiro de
avanço principal ou de avanço inicial ainda não tiver atingido o passo de instrução.
Os valores máximos para a deslocação são definidos através do menu “Limite”.

A instrução de menu “HotEdit” --> “TCP” está disponível somente no caso de o editor ter
sido iniciado através do menu de entrada em serviço.

11.6.1 Base, TCP e World


Marque o passo de movimento ou os vários passos de movimento que deseja deslocar. De-
pois da seleção de uma das opções, aparece na margem inferior do display uma janela de
diálogo onde pode ser introduzida a deslocação (X, Y, Z) e a torção (A, B, C) referente ao
respetivo sistema de coordenadas.

Se estiverem marcados vários passos de movimento, estes são corrigidos no sistema de


coordenadas WORLD ou BASE.

A janela de diálogo aqui mostrada


representa também um exemplo
para as outras janelas de diálogo.

O acesso aos campos de entrada é possível com as teclas “¯” e “­”.


Depois de você ter dado todas as indicações necessárias para a desloca-
ção, prima a softkey “OK”.
Para terminar a ação sem realizar uma deslocação do programa, prima a
softkey “Cancelar”.
A caixa de diálogo torna--se cinzenta, ao mesmo tempo que aparecem mais
duas outras softkeys.

ProgExpPHR4.1.7 12.03.06 pt

197 de 212
Programação perito

Com a softkey “Cancelar” você pode terminar a entrada, a qualquer mo-


mento, sem que as modificações sejam guardadas.
Agora, você pode atribuir os valores introduzidos premindo a respetiva soft-
key. As alterações realizadas nos dados ainda não são guardadas aqui e,
por isso, podem ser novamente anuladas.
Se resolveu fazer outra coisa, pode anular novamente esta atribuição. A
softkey mostrada ao lado tem essa função. Este botão só está disponível
depois da atribuição dos valores. Esta função é útil, sobretudo, quando você
quer controlar o efeito da deslocação durante a execução do programa.
Se a deslocação corresponder às necessidades, você pode guardar a modi-
ficação das coordenadas dos pontos no ficheiro “DAT”.

Se um dos valores introduzidos se situar fora das tolerâncias, aparece na caixa de deslo-
cação do programa um aviso ou uma mensagem de erro a informar que o valor introduzido
ultrapassa as tolerâncias.

ProgExpPHR4.1.7 12.03.06 pt

198 de 212
11 Editor externo (continuação)

11.6.2 TTS (Sistema de coordenadas de correção)


Esta função destina--se à otimização de pontos no espaço, com a ajuda do triedro de tecno-
logia que acompanha a trajetória (TTS), e pode ser usada com instruções de tecnologia (por
exemplo, a soldadura com gás de proteção ou a colagem). A correção TTS está disponível a
partir do grupo de usuários “perito” e pode ser usada em todos os modos de serviço.
Com TTS podem ser corrigidas as coordenadas cartesianas de um ponto, com tecnologia
KUKA ou tecnologia do cliente. A correção realiza--se ao longo da direção de trabalho da
ferramenta.

Normalmente, a direção de trabalho é o eixo X da ferramenta medida. Em função da confi-


guração pode também ser usado o eixo Z da ferramenta como direção de trabalho.

Nº Tempo Mensagem Result


003 9:50:04 Hotedit Posição S1R1P11 calculada
002 9:50:03 Hotedit Direção de trabalho Z = True
001 9:49:50 Hotedit Deslocação: TTS

Em cada correção de ponto, os pontos necessários com coordenadas cartesianas são pro-
curados na lista de dados local (*.DAT). Se um dos pontos necessários não for encontrado, é
emitida uma mensagem de erro.
A procura do ponto que define a direção da trajetória realiza--se sempre para cima, a partir do
local onde se encontra o ponto a corrigir. Excetua--se o ponto final de um contorno de solda-
dura ou colagem, uma vez que aqui é procurado sempre nos números de passo seguintes
mais baixos.
Devem ser consideradas as seguintes exceções:
G Uma mudança do sistema de coordenadas da base entre dois passos de movimento
é ignorada;
G Os passos CIRC com uma indicação de ângulo circular (CA) não são corrigidos;
G Na correção de um ponto auxiliar é usada a orientação da ferramenta igual à do ponto
de início;
G As coordenadas de um ponto são uma simples variável da lista de dados ou um compo-
nente desta (não são permitidas variáveis importadas, mesmo variáveis de dados de
máquina).

ProgExpPHR4.1.7 12.03.06 pt

199 de 212
Programação perito

11.6.2.1 Ponto no TTS

Marque no editor externo a instru-


ção de movimento desejada e use
o comando “HotEdit” --> “TTS”. No
display é aberta a caixa seguinte.

A opção “Ponto no TTS” só está disponível se estiver selecionado um passo de movimento


para soldar ou colar.

Se estiverem marcadas várias instruções de movimento, a correção refere--se sempre à


primeira instrução marcada.

Use as teclas do cursor “­” ou “¯” e coloque o foco no local desejado. Introduza os novos
valores através das teclas do bloco numérico.
Eixo X
O eixo X no sistema de coordenadas TTS corresponde a um vector de unidade ao longo da
tangente de trajetória.
+Z

+Y P2
+X

+Z

+Y
+X

Na instrução LIN o eixo X


decorre ao longo da traje-
tória de movimento
P1

+Z
+Y
+Z

+Y +X
+X

P2

Na instrução CIRC o eixo X


decorre ao longo das tan-
P1 gentes de trajetória

O eixo X do sistema de coordenadas da ferramenta não deve decorrer paralelamente à


tangente de trajetória, caso contrário, não pode ser formado o sistema de coordenadas de
correção. Nesse caso, é emitida a respetiva mensagem de erro.

ProgExpPHR4.1.7 12.03.06 pt

200 de 212
11 Editor externo (continuação)

Eixo Y
Do vector de unidade ao longo da tangente de trajetória (+X) e do eixo X do sistema de coor-
denadas da ferramenta (+XTool) é formado um plano de fixação. O eixo Y encontra--se verti-
calmente em relação a este plano.

+Z
+Y
+X

+XTool P2

O eixo Y encontra--se verticalmente no plano


de fixação formado por “+X” e “+XTool”.

P1

Eixo Z
Do vector de unidade ao longo da tangente de trajetória (+X) e do eixo Y (+Y) é formado um
plano de fixação. O eixo Z encontra--se verticalmente em relação a este plano.

+Z
+Y
+X

P2

O eixo Z encontra--se verticalmente no


plano de fixação formado por “+X” e “+Y”

P1

Correção de ponto PTP, LIN


Com a softkey “Cancelar” você pode terminar a entrada, a qualquer momen-
to.
Depois de você ter introduzido as alterações nos campos de entrada, aperte
esta softkey.
Agora, você pode atribuir os valores introduzidos premindo a respetiva soft-
key. As alterações realizadas nos dados ainda não são guardadas aqui e,
por isso, podem ser novamente anuladas.
Se resolveu fazer outra coisa, pode anular novamente esta atribuição. A
softkey mostrada ao lado tem essa função. Este botão só está disponível
depois da atribuição dos valores.
Salve as modificações.

ProgExpPHR4.1.7 12.03.06 pt

201 de 212
Programação perito

Correção de ponto CIRC


Com a softkey “Cancelar” você pode terminar a entrada, a qualquer mo-
mento, sem que as modificações sejam guardadas.
Depois da entrada das alterações atribua as correções ao ponto auxiliar
(PA).
Com esta softkey selecione o ponto de destino (PD), depois de as altera-
ções terem sido introduzidas nos campos de entrada.
Agora, você pode atribuir os valores introduzidos premindo a respetiva soft-
key. As alterações realizadas nos dados ainda não são guardadas aqui e,
por isso, podem ser novamente anuladas.
Se resolveu fazer outra coisa, pode anular novamente esta atribuição. A
softkey mostrada ao lado tem essa função. Este botão só está disponível
depois da atribuição dos valores.
Se a deslocação corresponder às respectivas necessidades, salve as coor-
denadas do ponto.

11.6.3 Tolerâncias
Uma correção online é permitida somente até aos valores máximos ajustáveis através de
“Tolerâncias Base/World” ou “Tolerâncias TTS”.

As tolerâncias máximas admissíveis são fixadas através do ficheiro “C:\KRC\Util\HotEdit.ini”.


Se for introduzido um valor maior, é emitida uma mensagem de erro.

Para a correção TTS não é conveniente definir valores--limite superiores a 5 mm.

Use as teclas do cursor “­” ou “¯” e coloque o foco no local desejado. Introduza a nova tole-
rância através das teclas do bloco numérico.
Os valores introduzidos não são transferidos.

Salva a tolerância introduzida.

11.6.3.1 Limits--Base/World

Com a seleção da opção de


menu é aberta a caixa onde po-
dem ser introduzidos e altera-
dos correspondentemente os
valores de deslocação máxi-
mos.

Com esta softkey você pode terminar a entrada a qualquer momento.

Aperte esta softkey para salvar os valores e para fechar a caixa.

ProgExpPHR4.1.7 12.03.06 pt

202 de 212
11 Editor externo (continuação)

11.6.3.2 Tolerâncias TTS


Aqui você pode definir os valores--limite da
correção TTS. Estes valores--limite são veri-
ficados automaticamente na correção do
ponto.

11.7 Menu “ExtExtras”


Aqui você terá à sua
Ext. Extras Ficheiro -- Reflexão dos eixos
Ficheiro -- Deslocar 2 puntos disposição as fun-
Definir interruptores de fim de curso de 6 puntos ções para a reflexão
software do eixo, a desloca-
ção e a definição dos

Este menu só está disponível enquanto não for carregado nenhum programa para o editor
externo.

11.7.1 Ficheiro -- Reflexo dos eixos


Ao contrário da função “Reflexão de eixos”, que permite refletir pontos de trajetória marca-
dos de determinados passos de movimento selecionados, “Ficheiro -- Reflexão dos eixos”
permite a reflexão de programas de movimento completos.
Depois de iniciar a função, introduza primeiro o ficheiro de origem que deve ser refletido.

ProgExpPHR4.1.7 12.03.06 pt

203 de 212
Programação perito

Use as teclas do cursor “"” ou “#” e selecione um ficheiro para a reflexão de eixos.
Pode sair da função, a qualquer momento, premindo a softkey “Cancelar”.
Depois de ter marcado o ficheiro selecionado, prima a softkey “Seta para
a direita”.

Introduza para o ficheiro refletido um nome que não deve ter mais que 8 caratéres.
Esta softkey permite voltar à página anterior onde você pode selecionar um
outro ficheiro de origem.
Depois de ter introduzido um nome para o ficheiro, prima esta softkey.

ProgExpPHR4.1.7 12.03.06 pt

204 de 212
11 Editor externo (continuação)

Agora, você tem a possibilidade de introduzir um comentário que então é mostrado no


navegador.
Esta softkey permite voltar à página anterior onde você pode introduzir o
nome do ficheiro a criar (refletido).
Depois de ter introduzido o comentário desejado, prima esta softkey. A se-
guir, é criado o respetivo programa.

11.7.2 Ficheiro -- Deslocar


Esta função permite deslocar a posição dos pontos de trajetória marcados programados
com a ajuda de um vector (2 pontos) ou deslocar e simultaneamente rodar o sistema de coor-
denadas usado (6 pontos).
2 pontos
Para a funcionalidade deslocação 2 pontos terá de ser programado um ficheiro de referência
(qualquer nome; .src, .dat). Nesse ficheiro de referência são guardados dois pontos. Estes
pontos definem o vector de deslocação pelo qual os pontos marcados são deslocados.
6 pontos
A funcionalidade deslocação 6 pontos trabalha segundo o mesmo princípio. No respetivo
ficheiro de referência devem ser programados, ao todo, seis pontos. Os primeiros três pon-
tos definem a base de origem, os últimos três pontos a base de destino. Para origem e des-
tino devem ser introduzidos sempre pontos idênticos. Com estes valores são calculadas as
bases. A deslocação e a torção entre a base de origem e a base de destino determinam o
valor em torno do qual os pontos marcados são deslocados.

O vector terá de ser guardado num ficheiro antes de ativar a função.


Além disso, terão de ser marcados os passos de movimento que se pretendem deslocar.

ProgExpPHR4.1.7 12.03.06 pt

205 de 212
Programação perito

Depois da seleção da opção deslocação de 2 pontos ou 6 pontos, o programa necessita da


indicação do respetivo ficheiro de referência.

Pode sair da função, a qualquer momento, premindo a softkey “Cancelar”.

11.7.2.1 Utilizar o ficheiro de referência existente


Com esta softkey você pode indicar um ficheiro de referência e um ficheiro
a deslocar.

Em primeiro lugar, use as teclas do cursor e selecione o ficheiro de referên-


cia e a seguir prima a softkey “Seta para a direita”.

ProgExpPHR4.1.7 12.03.06 pt

206 de 212
11 Editor externo (continuação)

Com esta softkey você volta à página anterior.

Use novamente as teclas do cursor para marcar o ficheiro que pretende


deslocar. A seguir volte a premir a softkey “Seta para a direita”.
Com esta softkey você volta à página anterior.

A seguir, o ficheiro a deslocar é carregado para o editor. Marque aqui as instruções de


movimento que devem ser deslocadas.

ProgExpPHR4.1.7 12.03.06 pt

207 de 212
Programação perito

Prima novamente a softkey “Seta para a direita”. A seguir, os pontos sele-


cionados são deslocados no ficheiro. O decurso é indicado por uma indica-
ção de progresso por cima da janela de mensagens.
Com esta softkey você volta à página anterior.

Na janela de mensagens é mostrado o resultado da ação.


Nº Tempo Mensagem Resultado
004 13:30:53 iro 2 puntos Deslocar Posição XP1 to XP4 shifted
003 13:30:40 iro 2 puntos Deslocar On
002 13:30:37 Ficheiro abrir OK
001 13:30:37 ExtEdit start OK

11.7.2.2 Criar novo ficheiro de referência

Esta softkey permite criar um novo fi-


cheiro de referência. A seguir, é selecio-
nado este novo programa de referência,
para que o operador possa programar os
pontos necessários.

Depois da programação desselecione o programa e inicie o editor externo de novo. Depois


proceda de acordo com a descrição no capítulo 11.7.2.1.

ProgExpPHR4.1.7 12.03.06 pt

208 de 212
11 Editor externo (continuação)

11.7.3 Definir interruptores de fim de curso do software


Esta função permite adaptar os interruptores de fim de curso de software dos vários eixos
aos programas de movimento.
Para esse efeito, inicie a função “Definir interruptores de fim de curso de software” e depois
volte novamente ao painel de operação do software de robô, com a ajuda da tecla de janela.
Aí você inicia os programas de movimento cujos valores de eixo são supervisionados no
fundo. Depois de terem passado todos os programas relevantes para si, ative a função de
novo. Os valores assim determinados podem ser definidos como interruptores de fim de
curso de software.

As posições dos eixos são supervisionadas no fundo enquanto a função “Definir


interruptores de fim de curso de software” estiver ativa.

Os respetivos valores mínimos ou máximos verificados bem como as posições atuais dos
eixos A1 ... A6 são introduzidos nos campos correspondentes.
Os eixos para os quais devem ser definidos os interruptores de fim de curso po-
dem ser marcados com a ajuda de uma caixa de verificação. Para a seleção dos
eixos desejados use as teclas do cursor. A tecla de espaço permite a ativação ou
desativação do respetivo eixo. Um tique significa que para este eixo pode ser defi-
nido o interruptor de fim de curso de software.
“Reset” repõe os valores originais dos interruptores de fim de curso de softwa-
re.
A softkey “Set” define os interruptores de fim de curso de software dos eixos
selecionados de novo. Esta ação poderá ser anulada, a qualquer momento,
mesmo numa altura posterior, premindo a softkey “Reset”.

Aos valores medidos dos eixos é adicionado um tampão de 5°.

ProgExpPHR4.1.7 12.03.06 pt

209 de 212
Programação perito

11.8 Menu “Opções”


Opções Impressora No menu “Opções” podem ser defini-
Editor
Definição de saÍdas Ficheiro
das determinadas definições básicas
Diretório Set do editor externo.

11.8.1 Definição de saídas

Através deste menu pode ser definido o meio de saída desejado, ou seja, aquele que é
usado com “Saída” --> “Programa atual” ou “Imprimir” --> “Aplicações”.

Enquanto não for definido um meio de saída, a saída se realiza como arquivo de texto,
através do caminho definido em “Set diretório”. Se não existir um caminho de saída defi-
nido, é usado o caminho padrão “C:\USERPROG”.

Impressora
Se houver uma impressora configurada no sistema operativo, é esta que é usada para a
saída. Caso não tenha sido configurada uma impressora, a janela de mensagens mostra a
respectiva mensagem.

Nº Tempo Mensagem Resultado


005 16:54:58 Saída à impressora OK: C:\USERPROG\Beispiel.txt
004 16:54:49 Saída: à impressora OK
003 16:54:44 Carregar... OK
002 16:54:42 Ficheiro Abrir OK

Editor
O programa selecionado é carregado para o editor disponibilizado pelo sistema operativo
“WordPad”, a fim de ser editado.

ProgExpPHR4.1.7 12.03.06 pt

210 de 212
11 Editor externo (continuação)

Ficheiro
Em caso de saída do programa atual através de “Imprimir”, este programa é guardado como
ficheiro de texto no caminho ou com o nome de ficheiro definido através de “Diretório set”.
Se a saída de todos os programas de usuário se realizar através de “Imprimir”, na pasta
definida com “Diretório set” é criado o subdirectório “USERPROG” onde os programas são
guardados como ficheiros de texto.
Com um editor de texto, qualquer programa guardado pode ser visualizado ou modificado.

Diretório set
Esta opção só é necessária quando se pretende guardar os programos como ficheiros no
disco duro. Na janela de diálogo pode ser indicado o diretório de destino e o nome do ficheiro
que se pretende imprimir. Se todos os programas de usuário saírem através de “Arquivo”
(Ficheiro) é criado o subdirectório “USERPROG” e os ficheiros de texto são guardados aí.

ProgExpPHR4.1.7 12.03.06 pt

211 de 212
Programação perito

11.9 Menu “Ajuda”


Ajuda
Versão Neste menu você pode verificar a versão e escolher
Sempre no primeiro plano uma opção de configuração.

11.9.1 Versão
Na janela de mensagens é mostrado o número de versão do editor externo.
Nº Tempo Mensagem Resultado
003 17:16:31 Versão 5.0.26
002 17:16:27 Ficheiro Abrir OK
001 17:16:27 ExtEdit start OK Número de versão

11.9.2 Sempre no primeiro plano


Ao selecionar esta opção, o painel de operação do software de robô já não é mostrado em
primeiro plano, até ao momento em que o editor é terminado.

NOTAS:

ProgExpPHR4.1.7 12.03.06 pt

212 de 212
Index

Símbolos $TOOL, 63, 70


$VEL.CP, 77
.ERR, 12
$VEL.ORI1, 77
!, 107
$VEL.ORI2, 77
! -- caráter, 104
$VEL_AXIS, 66
?, 108
$WORLD, 63, 70
:, 109
# -- caráter, 41
#BASE, 65, 79 Números
#CONSTANT, 78 2--dimens., 36
#INITMOV, 78, 79 3--dimens., 37
#PATH, 79
#TCP, 65
A
#VAR, 78
A10.DAT, 8
$ -- caráter, 55
A10.SRC, 8
$ACC.CP, 77
A10_INI.DAT, 8
$ACC.ORI1, 77
A10_INI.SRC, 8
$ACC.ORI2, 77
A20.DAT, 8
$ACC_AXIS, 66
A20.SRC, 8
$ADVANCE, 86
A50.DAT, 8
$ALARM_STOP, 55, 56
A50.SRC, 8
$APO.CDIS, 93, 96
Abrir todas as FOLD, 19
$APO.CORI, 93, 96
ABS(X), 52
$APO.CPTP, 90
Ação de comutação, 172
$APO.CVEL, 93, 96
Aceleração, 77
$APO_DIS_PTP, 90
Acelerações dos eixos, 68
$BASE, 63, 70
ACOS(x), 52
$CIRC_TYPE, 79, 82
Adaptação BASE, 196
$CONFIG.DAT, 8, 57
Adaptação TCP, 196
$CUSTOM.DAT, 56 Agregado, 38
$CYCFLAG, 55 Alteração de programas, 14
$FLAG, 54 Alteração por blocos, 195
$IBUS_ON, 56 Ambigüidades, 74
$IPO_MODE, 65 Ângulo circular, 84
$MACHINE.DAT, 8, 56 ANIN, 144
$NULLFRAME, 70 ANIN OFF, 144
$NUM_AX, 56 ANIN ON, 144
$ORI_TYPE, 78, 82 ANIN/ANOUT, 141
$OUT_C, 136 ANOUT OFF, 141
$POS_ACT, 65 ANOUT ON, 141
$PRO_MODE, 22 Apagar, 15
$PSER, 56 Aproximação, 89
$ROBCOR.DAT, 8, 57 Aproximação CIRC--CIRC, 96
$ROBROOT, 63, 70 Aproximação CIRC--LIN, 96
$SET_IO_SIZE, 136 Aproximação LIN--CIRC, 98
$TIMER, 54 Aproximação LIN--LIN, 93
$TIMER_FLAG, 54 Aproximação PTP -- trajetória, 99
$TIMER_STOP, 54 Aproximação PTP--PTP, 90

Index -- i
Index

Aproximação trajetória -- PTP, 100 Concepção e elaboração de programas, 7


Arco coseno, 52 CONFIRM, 129
Arco seno, 52 Constante + referente à trajetória, 79
Arco tangente, 52 Constante + referente ao espaço, 81
ARCSPS.SUB, 8 CONTINUE, 88
Assistente KRL, 106 Continuous Path, 77
ATAN2(Y,X), 52 Contorno de aproximação, 89
Ativar o interrupt, 159 Controle de execução do programa, 116
Atribuição de valor, 29 Copiar, 14
Avanço, 86 Correção de programa, 14
Avanço do computador, 86 Corrente cinemática, 64, 65
AXIS, 40, 60, 108 Cortar, 15
COS(X), 52
B Criar e editar programas, 11
Criar um programa novo, 11
B_AND, 49, 51
Critério de distância, 93
B_EXOR, 49, 51
Critério de orientação, 93
B_NOT, 49, 51
Critério de velocidade, 93
B_OR, 49, 51
CSTEP, 22
BAS.SRC, 8, 72
CTRL--C, 14
BASE, 65
CTRL--V, 15
Bin Dec, 34
CTRL--X, 15
Bloquear / Liberar, 159
Cursor de edição, 106
BOOL, 33, 34
BOSCH.SRC, 8
BRAKE, 163 D
DECL, 31
C Declaração, 10
DEF, 9, 148
C_DIS, 93, 96, 110
DEFDAT, 178
C_ORI, 93, 96, 110
DEFFCT, 149
C_PTP, 90, 110
Desativar interrupts, 159
C_VEL, 93, 96, 110
Deslocação Home, 73
CA, 84
Deslocação manual, 191
Campo bidimensional, 36
DIGIN, 146
Campo tridimensional, 37
DIGIN OFF, 146
Campos, 35
DIGIN ON, 146
CELL.DAT, 8
DISTANCE, 169
CELL.SRC, 8, 9
CHAR, 33, 35
Cinemáticas de robô ambíguas, 74 E
CIRC, 84, 114 E6AXIS, 40, 108
CIRC !, 104 E6POS, 108
CIRC_REL, 84, 114 Editar, 12
Coincidência de passos, 73 Editor, 14
Comentário, 27 Editor de ligação, 12
Compilador, 12 Editor externo, 182
Compilar, 12 ELSE, 117
Conceito de ficheiro, 9 END, 9

Index -- ii
Index

ENDFOLD, 19 Índex, 35
ENDFOR, 119 Índex de campo, 35
ENDLOOP, 124 Indicação da posição, 108
ENDWHILE, 121 INI, 72
Entradas analógicas, 144 Início da aproximação, 93
Entradas digitais, 146 Instrução de salto, 116
Entradas/saídas binárias, 131 Instruções, 10
Entradas/saídas digitais, 134 Instruções de entrada/saída, 130
ENUM, 40 Instruções de espera, 125
Específicos dos eixos, 59 Instruções de movimento, 59
Estrutura de ficheiro, 9 INT, 33
Estruturas, 38 Interligação, 48
Estruturas predefinidas, 40 Interligação de bits E, 49
EXIT, 124 Interligação de bits OU, 49
EXT, 72 Interligação de bits OU exclusivo, 49
Interligação de frame, 43
F Interpolação referente à base, 64
Interpolação referente à garra, 65
Fechar todas as FOLD, 19
Interrupt, 157
Ferramenta fixa, 65
Interruptores de fim de curso do software, 209
Ficheiros de sistema, 54
Introduzir, 15
Filtrar bits, 50
Introduzir bits, 50
Flags, 55, 167
Inversão de bits, 49
Flags cíclicos, 55
IR_STOPM.SRC, 8
FLT_SERV.DAT, 8
ISTEP, 22
FLT_SERV.SRC, 8
FOLD, 19
FOLD atual abr/fech, 19 K
FOR, 119 KUKA--Robot--Language, 106
Frame, 40, 108
Funções, 9, 148
L
Funções de bloco, 14
Limpar lista de dados, 195
LIN, 83, 112
G LIN !, 104
Global, 149, 180 LIN_REL, 83, 112
Go, 22 Linguagem de máquina, 12
GOTO, 116 Lista de dados, 10
Lista de parâmetros, 151
H Listas de dados, 178
Listas de dados globais, 179
H50.SRC, 8
Listas de dados locais, 178
H70.SRC, 8
Local, 149
Hex Dec, 34
LOOP, 124
Loop de contagem, 119
I Loop de não rejeição, 122
Identificação de bloco, 118 Loop de rejeição, 121
IF, 117 Loop infinito, 124
Imprimir, 187 Loops, 119

Index -- iii
Index

M Prioridades de operadores, 51
Programação (“teach”) dos pontos, 104
Manipulação de dados, 42
Programação de movimento, 59
Marca, 116
PROKOR, 14
Medição rápida, 166
PSTEP, 22
Modos de execução dos programas, 22
PTP, 66, 69, 110
Montante, 52
PTP !, 104
Movimentos circulares, 84
PTP sincronizado, 66
Movimentos de aproximação, 89
PTP_REL, 69, 110
Movimentos de trajetória, 77
PUBLIC, 179
Movimentos lineares, 83
PULSE, 139
Movimentos ponto--a--ponto, 66
Movimentos--CP, 77
MSG_DEMO.SRC, 8 R
MSTEP, 22 Raiz, 52
Mudança da ferramenta, 103 Ramificação condicional, 117
Ramificações de programa, 116
REAL, 33, 34
N
Reflexo dos eixos, 190
NEW_SERV.SRC, 8 REPEAT, 122
Nome, 29 RESUME, 164
Retirar bits, 50
O
Objetos de dados, 31 S
Ocultar partes de programa, 19 S e T, 73
Operador, 42 Saídas analógicas, 141
Operador geométrico, 43 Saídas de impulso, 139
Operador geométrico “:”, 109 SAK, 73
Operadores aritméticos, 42 Seção de declaração, 9
Operadores de bits, 49 Seção de instrução, 9
Operadores de comparação, 47 Seno, coseno, tangente, 52
Operadores lógicos, 48 Seqüências de caratéres, 38
Operando, 42 Símbolo de espaço, 107
Orientação, 78 SIN(X), 52
SINAL, 131
Singularidades da cinemática, 73
P
Sistema binário, 33
P00.DAT, 8 Sistema de coordenadas, 70
P00.SRC, 8 Sistema de coordenadas cartesiano, 60
Parada automática do avanço, 87 Sistema de coordenadas da base, 64
Paragem do avanço, 130 Sistema de coordenadas da ferramenta, 63
Parâmetros de movimento, 105 Sistema de coordenadas de correção, 199
PERCEPT.SRC, 9 Sistema de coordenadas do robô, 63
Perfil de deslocação mais elevado, 67 Sistema de coordenadas mundial, 63
Ponto de carpo, 74 Sistema decimal, 33
Ponto separador, 38 Sistema hexadecimal, 33
POS, 40, 108 Sistemas de coordenadas, 59
Posição zero mecânica, 68 SPS.SUB, 8
Prioridade, 51, 159, 168, 172 SQRT(X), 52

Index -- iv
Index

Status, 73 Velocidade, 77
STOP, 128 Velocidade dos eixos, 68
STRUC, 38 Vincular, 12
Subprogramas, 9, 148
Substituir, 16
SWITCH, 118 W
WAIT, 125
T
WEAV_DEF.SRC, 9
TAN(X), 52
WHILE, 121
TCP, 65
Tempo de vida, 30
Temporizador, 54 Z
Tipo de dados, 31 Zona acima da cabeça, 74
Tipos de dados geométricos, 40
Zona base, 74
Tipos de dados simples, 33
Tipos de enumeração, 40
Tolerâncias, 202
Tool Center Point, 66
Touch Up, 108
Transferência de parâmetros, 151
Transformação das coordenadas, 60
Transformação para a frente, 60
Transformação para trás, 60
Translações, 62
Tratamento de erros, 24
Tratamento de interrupt, 156
Tratamento principal, 86
Triedro que acompanha a trajetória, 199
Trigger, 168
Trigger de flancos, 159
TTS, 199
Turn, 73

U
UNTIL, 122
USER_GRP.DAT, 9
USER_GRP.SRC, 9
USERSPOT.SRC, 9

V
VAR, 107
Variáveis de sistema, 54
Variáveis e declarações, 29
Variáveis e nomes, 29
Variável + referente à trajetória, 80
Variável + referente ao espaço, 82
Variável global, 180

Index -- v

Você também pode gostar