Relat 3
Relat 3
Relat 3
DE SANTA CATARINA
UNIVERSIDADE FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE AUTOMAÇÃO E SISTEMAS
LABORATÓRIO DE AUTOMAÇÃO INDUSTRIAL
CURSO TÉCNICO DE ELETROTÉCNICA - Código 02
Florianópolis
Abril de 2004
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA
DE SANTA CATARINA
UNIVERSIDADE FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE AUTOMAÇÃO E SISTEMAS
LABORATÓRIO DE AUTOMAÇÃO INDUSTRIAL
CURSO TÉCNICO DE ELETROTÉCNICA - Código 02
Florianópolis
Abril de 2004
DEDICATÓRIA
A
Ivando
Marlize
Rodrigo
e Junior
AGRADECIMENTOS
Lista de Figuras
1 Introdução 8
2 A empresa 10
3 Cronograma de Atividades 11
4 Atividades Desenvolvidas 12
4.1.2.3 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.1.2.4 Laços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1.2.6 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.1.2.7 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.2.8 Estruturas . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.3.3 Herança . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2.1 Modelagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2.2 Implementação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 O robô . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4.2.3 Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4.2.4 Joystick . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5 Conclusões 50
Referências 56
LISTA DE FIGURAS
3 Situação de deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Hoje em dia é comum empresas investirem em novos ramos que surgiram com o apa-
rato tecnológico, tais como as áreas de automação e robotização. Isso porque algumas
vantagens desses processos caracterizam, muitas vezes, a elevação da qualidade e da quan-
tidade do trabalho em relação à mão-de-obra humana e até a substituição da atividade
do homem em lugares de difı́cil acesso e insalubres.
Esse robô faz parte de um projeto chamado Roboturb que visa criar um sistema au-
tomatizado capaz de realizar recuperação de superfı́cies erodidas por cavitação de rotores
de turbinas de hidrelétricas de grande porte. Esse sistema será dotado de uma etapa de
9
Durante 10 meses foram feitas nove atividades. Cada ponto da tabela relaciona uma
atividade realizada com a semana correspondente.
Curso da Lin- • • • •
guagem C
Curso da Lin- • • • •
guagem C++
Projeto C++ • • •
com Threads
Montagem • • • • •
do Controle
Remoto (CR)
Implementação • • • •
dum Software
usando CR
Perı́odo Novembro Dezembro Janeiro Fevereiro Março
2003/2004 -semanas- - semanas - - semanas - - semanas - - semanas -
Atividades 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
Implementação • • • • • •
dum Software
para execução
de trajetórias
Integração do • • •
trigger no con-
trolador
Integração do • • • • •
Sistema de
Soldagem
Manutenção • • • • • • •
do Software
4 ATIVIDADES
DESENVOLVIDAS
O curso a seguir foi ministrado ao estagiário por causa do constante uso da pro-
gramação para o cumprimento das tarefas realizadas ao longo do estágio, principalmente
atividades relacionadas com a construção de programas. Nesse capı́tulo descreve-se o
porquê do uso da programação, bem como a explicação teórica dos tópicos aprendidos no
curso.
Uma linguagem pode ser definida como de nı́vel baixo, médio e alto. Esses nı́veis
caracterizam a forma de como se programa. A linguagem de baixo nı́vel é voltada para
13
Uma conclusão que se pode tirar a partir desses exemplos é que uma linguagem de
baixo nı́vel é muito flexı́vel, porém complicada e trabalhosa, já uma linguagem de alto
nı́vel é o oposto, fácil de trabalhar e não muito flexı́vel.
Outra nomeação para as linguagens de programação é que elas podem ser do tipo
linear, estruturada ou orientada a objeto.
Linguagens lineares são bem primitivas e geralmente são caracterizadas como de baixo
nı́vel. A idéia de linearidade consiste em ter uma lista de comandos e um ponteiro que
aponta para um determinado comando dessa lista. Então toda vez que for executado um
comando, ele pula para o próximo comando da lista.
Linguagens estruturadas variam entre nı́vel baixo e médio. Elas usam conceitos de pro-
cedimentos e funções, que se interligam através de três mecanismos básicos: a sequência,
tomada de decisão e iteração. Esses itens tornam mais legı́vel e organizado o programa.
Já as linguagens orientadas a objeto são de alto nı́vel e têm tem como principal ob-
jetivo atingir um desenvolvimento interativo e incremental, criação rápida de protótipos,
códigos reutilizáveis e extensı́veis através do encapsulamento dos dados e uma modela-
14
Com uma linguagem computacional em mãos, é possı́vel criar um código fonte que
posteriormente será compilado. A compilação consiste em transformá-lo em arquivos
do tipo .obj que formarão uma aplicação. No caso da linguagem C, o código fonte
deverá ter uma extensão do tipo .c, isto é, o arquivo a ser compilado deverá ser do tipo
nomeDoArquivo.c.
Uma vez compilado um arquivo .c, é preciso utilizar o chamado ligador, responsável
pelo ligamento dos .obj . Após essa etapa, tem-se como saı́da uma aplicação, que poderá
ter, por exemplo, um sufixo do tipo .exe1 , que caracteriza um arquivo de execução, diga-
se por passagem, um programa. Porém, é possı́vel gerar outros tipos de extensões, tal
como o .dll2 , que caracteriza um aglomerado de funções num arquivo que pode ser usado
em outras aplicações.
Um programa em C é composto por funções, isto é, porções menores de código que
1
extensão dos binários do Windows
2
extensão das bibliotecas do Windows
15
realizam determinadas tarefas, e por dados, ou seja, variáveis ou tabelas que são decla-
radas antes do inı́cio do programa. Existe uma função especial denominada main, onde a
execução do programa se inicia. As funções podem ser organizadas em módulos agrupa-
dos em arquivos fonte. Em C, é de suma importância a separação do código em arquivos,
principalmente para programas complexos e grandes. O arquivo fonte principal, passado
como argumento para o compilador, define uma unidade de compilação[2]. Veja a figura
1.
Elas podem assumir diferentes tipos de dados, e cada tipo ocupa uma certa quantidade
de espaço na memória em bytes3 . Em C existem apenas cinco tipos básicos de variáveis,
ver tabela 1.
As constantes são uma espécie de variável fixa, isto é, variáveis que não podem ser
modificadas no programa, ou seja, são variáveis mantidas constantes pelo compilador.
3
unidade básica de memória computacional
16
Como foi dito, toda variável possui um espaço reservado na memória. Para garantir
que esse lugar na memória não seja violado, define-se um endereço na memória para
cada variável. É a partir dessa idéia que se criou um conceito chamado ponteiro, uma
ferramenta extremamente poderosa que a linguagem C oferece.
Console é uma interface de comunicação com o usuário que possibilita a saı́da e entrada
de dados. A entrada de dados geralmente é estabelecida através do teclado. E a saı́da
compreende mostrar caracteres e textos no painel do console.
É muito importante conhecer as rotinas de entrada e saı́da do console, pois com elas
se pode criar elementos gráficos, ou seja, programas com interface gráfica. As aplicações
feitas durante o curso da linguagem C foram compiladas para DOS (Sistema Operacional
de Disco).
4.1.2.3 Operadores
sentada com o sı́mbolo ZERO (0), já a condição verdadeira pode assumir qualquer valor
diferente de zero e é representado pelo sı́mbolo UM (1).
Há também a possibilidade de fazer comparações bit a bit5 . Para tanto se utilizam os
operadores lógicos binários.
• Operador E (pelo menos uma condição falsa pra o resultado ser falso);
• Operador OU (pelo menos uma condição verdadeira para o resultado ser verdadeiro);
4.1.2.4 Laços
A idéia de laço é ter um pedaço de código que é reutilizado para fins de organização
e compactação. Por exemplo, imagine imprimir na tela cem (100) vezes a mesma frase.
Há duas maneiras de fazer essa impressão, uma seria escrever 100 vezes a frase, a outra
seria criar um laço que contenha a frase a ser repetida 100 vezes.
O laço FOR é muito útil quando é desejável repetir num número finito de vezes um
certo pedaço de código que necessita ter um controle do número de iterações6 .
5
O bit significa dı́gito binário. 1 byte possui 8 bits, sendo que cada bit pode assumir o valor de 0 ou
1. Por exemplo, a representação binária do número 7 é dada pelos seguintes bits 00000111
6
número de vezes que o laço é reiniciado
18
Já o laço WHILE é geralmente usado quando se queira um laço infinito, isto é, um laço
que sempre repetirá a instrução determinada. Também pode ser usado quando é preciso
repetir um número indeterminado de vezes.
E finalmente o laço DO-WHILE, muito semelhante ao WHILE, com a única diferença que
inicialmente executa-se a instrução determinada, e só depois se verifica a expressão de
teste.
O comando CONTINUE força a próxima iteração do laço e pula as instruções que esti-
verem abaixo.
O comando IF é usado para testar uma condição, caso seja verdadeira ele executa a
instrução definida; caso contrário, ele ignora a instrução definida.
Já o comando IF-ELSE define duas instruções, uma para a condição verdadeira e outra
para condição falsa.
4.1.2.6 Funções
Na seção 4.1.2.2 citou-se as funções para console. Com elas não é preciso reescrever
nenhuma linha de código de como é o procedimento de impressão ou leitura no console,
somente usam-se as funções fornecidas por esse serviço.
Outra função importante citada foi na seção 4.1.2, a função main, responsável pelo
19
inı́cio do programa.
4.1.2.7 Matrizes
Uma matriz é um tipo de dado usado para representar uma certa quantidade de
variáveis do mesmo tipo.
Por exemplo, caso queira-se armazenar as notas de uma turma de 50 alunos. Pode-se
criar uma matriz de 50 elementos do tipo inteiro.
A linguagem C fornece várias funcionalidades para trabalhar com matrizes - acesso aos
elementos a partir de um ı́ndice, alocação de memória estática na declaração da matriz,
declaração de matrizes bidimensionais, tridimensionais. . . .
Em C existem várias funções para manipular strings, tais como funções para com-
paração, para obtenção do número de caracteres, para concatenação8 e para copiar o
conteúdo de uma string à outra.
4.1.2.8 Estruturas
Estruturas são um conjunto de dados de diferentes tipos. Note que uma matriz é um
conjunto de dados com tipos iguais. Sendo assim, uma estrutura pode conter matrizes
e/ou tipos básicos de dados.
Outro exemplo de maior complexidade seria uma estrutura que representasse a ficha
básica de um funcionário. A estrutura deve conter uma string para o nome da pessoa,
um tipo inteiro para a idade, um tipo float para o salário.
Como nas matrizes, é possı́vel ter acesso a todos os elementos da estrutura. Dessa
forma pode-se trabalhar separadamente com os tipos básicos de variáveis da própria es-
trutura.
Na seção 4.1.2.1, definiu-se o que é um ponteiro. Ponteiros são tipos de dados que
armazenam o endereço de memória onde uma variável armazena o seu dado. Desta forma,
emprega-se o endereço dos ponteiros como uma forma indireta de acessar e manipular o
dado de uma variável.
Por exemplo, declara-se uma variável normal do tipo inteiro. O sistema irá alocar
estaticamente dois bytes na memória. Agora considere um ponteiro do tipo inteiro. Com
essa declaração é possı́vel alocar memória para múltiplos de dois bytes no meio da execução
do programa. Note que depois de alocada dinamicamente a memória para esse ponteiro,
ele se comportará como uma matriz do mesmo tipo do ponteiro.
Como C é uma linguagem extremamente flexı́vel para alocação de memória, há também
a possibilidade de liberar a memória através de funções determinadas para esse fim.
A linguagem C fornece várias funções que trabalham com arquivos, tanto para escrita
e leitura de dados. É interessante comentar que a abertura de arquivos pode ser tanto em
modo binário como em modo texto.
Arquivos em modo texto operam com dados armazenados em formato texto, ou seja,
21
os dados são traduzidos para caracteres e estes caracteres são escritos nos arquivos. Por
esta razão, fica mais fácil de compreender os seus formatos e localizar possı́veis erros[1].
Como foi comentado na seção 4.1.2.2, o programa foi criado para DOS. No anexo A
encontram-se algumas tomadas de tela da calculadora.
A programação orientada a objeto foi uma idéia muita bem aceita para resolver os
problemas surgidos com a evolução dos programas. Ela busca modelar um ambiente
utilizando os próprios elementos presentes nesse ambiente, ou seja, os objetos[1].
Por exemplo, precisa-se criar um programa para cadastro de livros. Nesse caso pode-
se considerar o livro como um objeto. É interessante observar que esse jeito de programar
é bem próximo da linguagem humana, facilitando muito a linha de raciocı́nio.
Apesar dessas quebras de paradigmas, C++ assemelha-se em muita coisa com a lin-
9
American Standard Code for Information Interchange, código de informação padrão para letras e
sı́mbolos (codificação binária)
22
guagem C, como por exemplo, as tomadas de decisões (ver seção 4.1.2.5) e laços (ver seção
4.1.2.4) estão idênticas. De qualquer maneira, todas as funcionalidades de C podem ser
aplicadas para C++, isto é, funções, estruturas, alocação de memória... .
Entretanto, essa nova linguagem fornece outras utilidades, como novos comandos para
entrada e saı́da de console, novas maneiras para alocação de memória, diferentes formas
de passar parâmetros para funções.
Um objeto é uma abstração de alguma coisa da vida real, geralmente de coisas fı́sicas,
como uma casa, um avião... . Cada objeto possui caracterı́sticas (propriedades) que são
chamadas de atributos.
O Display teria como atributo uma string que representaria o que está escrito na
tela. Poderia-se ter o método Mostrar que requer como parâmetro o texto ou número a
ser impresso, isto é, ele alteraria o valor do atributo da classe.
Já o objeto Operador teria como atributo um número que representaria o valor que
está sendo operado. Outra idéia, caso a calculadora fosse mais complexa, seria ter um
23
Por trás dessa modelagem existe um conceito muito empregado pelos criadores de
software - o encapsulamento. Esta idéia consiste em empacotar os dados (atributos) e as
operações sobre estes (métodos), facilitando o trabalho do programador.
Como foi visto na seção 4.1.2.3 existem vários tipos de operadores. A sobrecarga de
operadores consiste em implementar os mesmos para objetos de uma determinada classe.
Por exemplo, cria-se uma classe Matriz. Inicialmente não se pode somar matrizes,
então para suprir esse comando pode-se sobrecarregar o operador de adição (+) para
receber objetos do tipo Matriz.
Esse tipo de sobrecarga também pode ser feito com métodos, e nomeia-se essa operação
como polimorfismo.
4.1.3.3 Herança
• classe Aeronave;
• classe Navio.
A maioria das pessoas está acostumada a trabalhar com programas com uma interface
gráfica agradável e fácil de manipular, muito diferente que aqueles programas que rodam
em DOS, como o caso da calculadora no anexo A.
Já os aplicativos gráficos com uma interface amigável são principalmente executa-
dos em cima de Desktops 10 , como por exemplo o Windows 98/2000/XP da Microsoft,
KDE/GNOME/WM do projeto GNU/LINUX. Os aplicativos geralmente caracterizam-
se por um formulário11 que pode conter botões, ı́cones, textos e até outros formulários.
Então basicamente, toda vez que ocorre um evento, define-se uma função que tratará
essa ação. E dentro dessa função, pode-se definir chamadas para outras funções e/ou
métodos.
As aplicações gráficas feitas durante o curso de C/C++ são compiladas para rodarem
no Windows. Construir programas usando as bibliotecas que esse sistema operacional
fornece, a chamada API12 do Windows, sem utilizar nenhuma ferramenta auxiliar é uma
tarefa árdua e complexa.
gráficas, que encapsulam várias funções dessas bibliotecas, formando componentes gráficos,
tais como botões, caixas de textos, formulários... . Facilitando muito o trabalho dos pro-
gramadores.
Com esse intuito, foi designado ao estagiário, criar um aplicativo que gerasse processos
paralelos, também conhecidos como multithreads.
Existem vários problemas clássicos que utilizam esse tipo de processamento. Geral-
mente são programas que lançam várias threads, e estas precisam disputar algum tipo de
recurso. Por exemplo, um número X de threads tentando entrar numa porta que somente
entra-se uma por vez.
Como projeto, escolheu-se o problema do Jantar dos Filósofos, um dos mais famosos
do gênero. Esse trabalho tem como objetivo reunir os conceitos de programação orientado
a objeto e desenvolver implentações usando interface gráficas do Windows. A construção
desse programa será divida em duas etapas, a modelagem e a implementação.
26
4.2.1 Modelagem
O modelo do Jantar dos Filósofos consiste em emular uma disputa fictı́cia. Imagine
uma mesa redonda, onde estão sentados cinco filósofos. Na frente de cada filósofo existe
um prato que indubitavelmente está sempre cheio de comida. Entre dois pratos existe um
único garfo. Veja a figura 2.
A disputa está envolvida com ação de pegar os garfos para comer. Para um filósofo
poder comer precisa-se ter em mãos os dois garfos. Porém, somente têm-se cinco garfos
para cinco filósofos, logo, percebe-se que somente dois filósofos poderão estar comendo ao
mesmo tempo, uma vez que somente pode-se pegar os garfos que estão ao lado deles.
Quando um filósofo não está comendo, existem duas possibilidades - o filósofo está
pensando, ou filósofo está com fome. Essa segunda opção ocorre quando o filósofo deseja
comer, porém um ou os dois garfos não estão disponı́veis. Caso somente tenha-se um
garfo disponı́vel, o filósofo iria pegá-lo e esperar que o outro torne-se disponı́vel.
Baseado nos casos estabelecidos pode-se definir algumas classes para o sistema. A
classe Filósofo com atributos que iriam representar o estado do mesmo. Também teria
métodos para mudar esses atributos, como por exemplo, os métodos Comer, Pensar,
FicarComFome.
A classe Garfo teria como atributo o seu estado - disponı́vel e não disponı́vel. Como
27
Para construir um programa que simule essa disputa é necessário que ele se assemelhe
o mais próximo possı́vel de uma situação real, isto é, não deverá ocorrer injustiças ou
absurdos de dois filósofos lado a lado comendo.
4.2.2 Implementação
Os tempos de comer e pensar são todos aleatórios, isto é, não se sabe quanto tempo
um filósofo ficará com fome.
Uma solução para esse problema seria considerar que os filósofos somente peguem os
garfos caso os dois estejam disponı́veis, porém nessa situação podem ocorrer inúmeras
injustiças já que os tempos de pensar e de comer são aleatórios.
Outro detalhe de implementação para essa disputa, é quando dois filósofos tentam
pegar um garfo ao mesmo tempo. Essa situação é chamada de seção crı́tica, e ela é
tratada da seguinte maneira. Cria-se uma região crı́tica para cada garfo onde somente
uma thread poderá entrar. A região crı́tica pode ser definida como uma função ou um
conjunto de instruções dentro de uma função ou método. Dentro dessa região deverá estar
a rotina de mudança do atributo da classe Garfo. Com isso será virtualmente impossı́vel
dois filósofos ao mesmo tempo pegarem um único garfo.
4.3 O robô
Na teoria de controle dos robôs existem duas formas usuais, o controle a partir de
malha aberta e malha fechada. O controle de malha aberta consiste em enviar informações
aos atuadores de tal forma que ele se mova até uma posição estabelecida, sem se preocupar
se ele irá deslocar-se por motivos de inércia, gravidade ou forças externas. Já o controle
de malha fechada irá constantemente verificar a posição de um eixo, e compensar caso ele
30
Outro dado importante é o número de eixos que o robô possui. No projeto a estrutura
é de sete eixos, um a mais que o habitualmente usado. Diga-se por passagem, um robô
redundante. Optou-se por essa configuração por tornar mais flexı́vel a movimentação.
Nota-se que esse robô é bem menor que os tradicionais robôs industriais, devido ao
seu propósito de construção, recuperar turbinas de hidrelétricas de grande porte. Esse
ambiente de trabalho é extremamente pequeno e apertado.
31
Outra vantagem é que se pode mudar facilmente o eixo que é trabalhado, ou trabalhar
com vários eixos ao mesmo tempo.
No Projeto Roboturb, usa-se um controle remoto com duas manoplas, várias botuei-
ras, duas chaves e um LCD. Na seção 4.4, ter-se-á mais detalhes sobre esse instrumento.
Apesar dessa facilidade que a NI dispõe, é muito trabalhoso usar essas funções. Isso
porque a maioria das rotinas é usada para movimentar ou obter informações de um único
eixo do manipulador, e também é preciso passar parâmetros especı́ficos para cada função.
Com esse intuito optou-se abstrair ainda mais rotinas de movimento e leitura de
32
dados do robô. Para facilitar também a programação, criou-se uma classe robô. Esta
classe possui atributos que especificam as caracterı́sticas de todos os eixos do robô que as
funções da FlexMotion exigem.
• Botoeiras: Dispositivo de comando para interagir com as opções que irão aparecer
no visor de cristal lı́quido. Todas as botoeiras são normalmente abertas.
• Ajuste fino: Conhecido também como track-wheel, é utilizado para realizar pequenos
movimentos no robô.
O botão de parada de emergência encontra-se separado destes blocos por ser ligado
diretamente ao controlador do robô.
A fixação externa de todos os dispositivos já estava pronta quando se iniciou a mon-
tagem do controle remoto. Basicamente o trabalho consiste em estruturar a alimentação
do mesmo e realizar as conexões dos itens anunciados na seção 4.4.1.
13
movimento num sentido para cada eixo
34
O robô manipulador pode ser controlado de duas maneiras, através do PXI (compu-
tador industrial usado no projeto) ou pelo controle remoto (CR). Entretanto, como o CR
não possui nenhum microprocessador para processar as informações adquiridas por seus
dispositivos, é necessário estabelecer uma comunicação com o computador.
conjunto de manoplas.
Outra caracterı́stica do conector LEMO é uma linha visı́vel que circunda os pinos de
ligação. Na figura 8 ela é representada pela linha pontilhada. Por motivos de organização
e manutenção, optou-se em utilizar várias cores para a fiação, que estão especificadas na
mesma figura.
Cor Descrição
Branco Responsável pelo cabeamento do botão de emergência
Cinza Segundo fio responsável pelo ”cabeamento”do botão de emergência
Roxo VCC de 12 volts
Azul TERRA - GND
Verde Comunicação do Controlador com o Joystick (confirmação de transmissão)
Amarelo Comunicação do Controlador com o Joystick (prosseguir transmissão)
Laranja Comunicação do Controlador com o Joystick (recebimento de dados)
Vermelho Comunicação do Controlador com o Joystick (transmissão de dados)
Marrom Comunicação do Controlador com o Display (recebimento de dados)
Preto Comunicação do Controlador com o Display (entrega de dados)
Os capacitores têm como função evitar ruı́dos, por isso são conectados em paralelo
15
borracha isolante que contrai ao ser aquecida
37
4.4.2.3 Display
No bloco do display existe uma entrada para conector do tipo DB-9. Essa entrada
possui a mesma configuração que a saı́da da serial do PXI com o acréscimo de mais dois
cabos para a alimentação - terra e VCC 5 volts.
4.4.2.4 Joystick
Esse bloco inferior do controle remoto baseia-se em uma placa de controle de interface
produzida pela Happ Controls chamada CIB-1000. Sua comunicação também é feita
a partir de uma serial, porém sua alimentação é de 12 volts, devido à mesma possuir
embutido um regulador de tensão[9].
Nota-se que a chave de três posições é representada por S2a e S2b. Por tanto é
impossı́vel fisicamente ambas estarem acionadas ao mesmo tempo.
O display possui rotinas de saı́da de dados para o LCD e entrada de dados pelo teclado
e botoeiras. Similar ao caso da seção 4.1.2.2 de entrada/saı́da para o console.
Já o joystick baseia-se numa varredura das informações contidas nos seus dispositivos.
Isso quer dizer que toda vez que é necessário verificar se uma manopla está deslocada ou
saber qual posição está uma chave é preciso utilizar uma função de leitura de dispositivos
logo após uma atualização dos estados do mesmo.
Note que no display, quando é apertado um botão, envia-se informações para o com-
putador, enquanto que no joystick quando é deslocada uma manopla ou uma chave, não
ocorre nenhum envio de informações, o programador deverá ler sempre os estados dos
dispositivos para determinar as informações.
Uma vez implementadas rotinas para comunicação com o controle remoto, é preciso
agora estabelecer uma comunicação com o controlador a fim que se possa definir movi-
mentos ao manipulador segundo informações do controle remoto.
necessário utilizar uma thread que interaja com o CR e com o robô. Desta maneira o
programa principal fica livre para outros fins como parada de emergência e interrupção
da comunicação com o CR.
O objetivo dessa tarefa é gerar uma trajetória de modo rápido e visual, utilizando a
facilidade aparente do controle remoto para posicionar o manipulador.
Implementou-se dois modos de capturar uma coordenada, via software ou via controle-
remoto. Em ambos os casos, os dados são adicionados na Tabela no momento seguinte à
leitura da posição do robô.
No software, basta clicar num botão na interface, que chamará uma rotina para leitura
da posição que o robô se encontra.
Via controle-remoto, o usuário terá que girar o track-wheel para captura de coor-
41
denadas. Optou-se por esse modo de comando devido ao problema localizado na placa
do display que é responsável pela envio de informações de todos os botões e botoeiras
presentes no controle remoto, indisponibilizando o uso dos mesmos.
Basicamente, a leitura da posição do robô só será efetuada no momento que o usuário
terminar o giro do track-wheel. Aconselha-se girá-lo levemente para a captura das coor-
denadas.
Seleciona-se uma coordenada da Tabela, e clica-se num botão especı́fico para mover
o manipulador até essa coordenada.
Define-se trajetória como um conjunto de pontos que tem como objetivo formar um
caminho de interesse. Além disso, é preciso fornecer uma velocidade com que o corpo irá
se mover ao longo da trajetória.
42
Entretanto, para que o efetuador final simule um trajeto com uma certa velocidade
constante, necessita-se calcular para todos os eixos do robô que posição irão deslocar-se.
Imagine um robô com dois graus de liberdades (dois eixos). Para que o efetuador final
faça uma reta, é preciso combinar o movimento dos dois eixos. Agora, imagine um robô de
sete eixos, que é o caso do robô do projeto, desenvolveu-se toda uma teoria para cálculos
de trajetórias.
Além de definir o quanto cada eixo irá deslocar-se, precisa-se calcular também a
velocidade e a aceleração que um eixo deverá executar de um ponto a outro. Sendo que
a combinação desses parâmetros para cada eixo irá impor uma velocidade constante no
efetuador final.
Desta forma, não há preocupação em definir uma velocidade constante ao efetuador
final, somente se preocuparia com a posição que se encontra o robô no momento da
aquisição da imagem.
Entretanto, toda trajetória é formada por pontos, e esses pontos precisam estar pré-
definidos. Por isso, no software somente é possı́vel executar um trajeto se for carregado
arquivos que contenham parâmetros da trajetória.
• Usa-se uma função para executar o movimento, de acordo com os valores carregados.
• O processo entra num laço que fica verificando se todos os eixos chegaram na posição
definida, isto é, se o robô está parado ou não.
Outro detalhe é que a execução do cordão deve ser de maneira constante e uniforme,
isto é, necessita-se impor uma velocidade constante no bico da tocha.
• Usa-se uma função para executar o movimento, de acordo com os valores carregados.
Note que a tocha está ligada nesse momento.
• O processo entra num laço que fica verificando se o robô chegou na posição definida.
Essa seção irá se aprofundar no que diz respeito à integração do trigger em nı́vel de
hardware. Este termo em inglês significa na informática um sinal que causa o começo de
uma certa atividade. No robô, essa atividade consiste no disparo do sensor laser que está
localizada no efetuador final, junto com a câmera.
46
Como toda comunicação com o robô passa primeiramente pelo controlador, com trig-
ger não seria diferente. Entretanto, não se dimensionou uma saı́da do controlador para
esse fim. Precisou-se, então, incrementar uma conexão a mais na caixa que contêm todo
os sistema de potência. Usou-se uma furadeira manual para perfurar o revestimento de
alumı́nio.
Figura 13: Detalhe das várias camadas do cabo coaxial e o conector macho BNC
• Por uma camada isolante flexı́vel que envolve o condutor interno, a fim de protegê-lo
eletricamente;
• Uma blindagem para o condutor interno com uma malha ou trança magnética, com
o intuito de proteger o condutor interno magneticamente;
Basicamente a medição de uma cavidade será feita a partir de três feixes de luz
infravermelhos paralelos. Em uma deformidade na superfı́cie, esses feixes de luz não
estarão paralelos, e é a partir da distorção visualizada pela câmera que será traçada a
estratégia de medição e soldagem.
Para tal processo é necessário captar uma imagem com e sem a presença do laser, e
obter uma imagem resultante a partir da diferença entre as ditas cujas. É nesse momento
que entra o papel do trigger, fazer essa intercalação da presença dos feixes de luzes.
transferindo calor para a peça-obra. No momento que o arame entra na região onde se
encontra o gás ionizado, cria-se um curto entre o eletrodo e a peça-obra, podendo liberar
energia suficiente para a fusão do mesmo[7].
Outro gráfico que se pode traçar é a velocidade do arame em função do tempo, que
também terá um formato quadrangular. Estes dois parâmetros, corrente e velocidade,
devem estar em fase, pois em momentos de elevadas correntes é necessário arame suficiente
para compensar a energia empregada no processo, a fim de obter um filamento de solda
constante e uniforme.
Nas duas grandezas, é preciso definir o tempo de pulso e o tempo de base. Outros
parâmetros de soldagem seriam a corrente de abertura, corrente final, tempo inicial, tempo
final e os tempos de subida e de descida da rampa de corrente.
Criou-se uma classe que encapsulasse toda a comunicação com a máquina de solda a
partir de uma porta serial. Também se criou uma interface ao usuário para estabelecer
essa comunicação.
Na interface, pode-se definir a porta serial que a DIGITEC está conectada. Configura-
se também a taxa de transferência de dados pela serial.
podem acusar dois erros. Um dos erros refere-se à abertura da porta serial no caso de ela
já estiver aberta, ou na ausência da mesma. O outro erro refere-se ao não recebimento
da resposta que é enviada pela DIGITEC, ou seja, quando a porta serial escolhida não
estiver conectada à máquina de solda.
Há também uma interface para a especificação dos parâmetros de soldagem comentada
no começo da seção 4.8.1. Esses parâmetros podem ser especificados de duas maneiras:
Para encaminhar esses dados à máquina de solda, existe um botão na interface. Essa
operação pode ser executada durante o processo de soldagem, isto quer dizer que os
parâmetros de soldagem podem variar ao longo da reparação de uma cavidade sem precisar
paralisar a solda.
5 CONCLUSÕES
com a alimentação do mesmo. Usou-se um cabo coaxial e conectores do tipo BNC, que
garantiram a robustez do acionamento do sensor.
Como perspectivas futuras, há a necessidade de projetar o software que será usado
pelo operador final. Com tanto, é preciso modelar e rever vários pontos do sistema,
definindo novas funcionalidades e cortando outras, para que o resultado final esteja o
mais otimizado possı́vel e extremamente automatizado.
ANEXO A -- PROGRAMA DA
CALCULADORA
ANEXO C -- ESPECIFICAÇÃO DO
REGULADOR DE TENSÃO
55
REFERÊNCIAS
[6] MIZRAHI, Victorine Viviane. Treinamento em Linguagem C++, Rio de Janeiro, 1994.
[8] JAMSA, Kris; KLANDER, Lars. Programando em C/C++ “A Bı́blia”, São Paulo,
1999.
[9] DE CONTO, Augusto Marasca. Proposta de um Teach Pendant Para Robô de Eixo
Reduntante, CTC - Florianópolis, 2003.