Escolar Documentos
Profissional Documentos
Cultura Documentos
LABVIEW
Interfaces em LABVIEW
Em LABVIEW o desenvolvimento ocorre basicamente em duas telas: o painel, onde
são colocados os “instrumentos” e o diagrama, que é o “código fonte” do programa. No
painel estão localizados todos os comandos e indicadores, como botões, caixas de texto,
checkboxes e janelas gráficas que serão utilizados pelos usuários para comandar o Servo,
como mostrado nas interfaces apresentadas no Capitulo 3.
109
Figura 6. 1 Interface em Malha Aberta para Identificação
software, por exemplo, o MatLAB e/ou o Excel. Estas considerações implicam que no
mínimo a interface deve dispor de ferramentas que possibilitem selecionar entre quais sinais
se deseja para realizar o teste e quais os parâmetros desse sinal, como amplitude, freqüência,
nível DC, etc. Além de opções para salvar ou não os dados em um arquivo, ver figura 6.1.
Estas considerações dizem respeito ao que estará disponível para o usuário interagir com a
planta.
110
Figura 6. 2 Estrutura Básica do um programa em LABVIEW: while loop.
O loop contém dois elementos importantes: o critério de parada (vide figura 6.2) e o
número de iteração. O critério de parada determina qual condição irá terminar a execução,
que, em geral, está associada ao botão, . Pode-se criá-lo com clique direito sobre o
critério, selecionando stop if true (termina o loop se assumir valor booleano verdadeiro) e em
seguida, novamente com o botão direito selecionando create control (cria automaticamente
um botão no painel para controlar o loop).
Com isso a estrutura básica do aplicativo está pronta. O programa se resume às tarefas
que são executadas no loop. A execução permanecerá dentro da estrutura até que o usuário
pressione o botão no painel. A partir deste ponto, o programador deve pensar em que o
seu aplicativo irá realmente fazer, para então inserir as funções adequadas no loop.
Assim, num primeiro momento se faz necessário estabelecer a comunicação serial com
o Servo. Para isto, o LABVIEW possui um conjunto de módulos especiais que estão
111
disponíveis na paleta de funções, functions/ all functions / instruments IO / serial. Estas
funções operam bem em ambiente Microsoft Windows 2000/XP/2003.
Pressupõe-se que o hardware esteja corretamente configurado (drivers instalados) e a
porta serial esteja disponível (nenhum aplicativo esteja utilizando-a). Se esses requisitos
forem atendidos, os módulos do LABVIEW podem ser utilizados com poucas possibilidades
de falhas.
O uso da comunicação serial é realizado em três passos distintos:
1. Inicialização: são carregados todos os parâmetros de comunicação e a porta é
deixada em estado de espera para recepção ou transmissão de dados. Para
efetuar esta operação o módulo VISA Configure Serial Port (ver figura 6.3) é
usado.
2. Leitura e escrita: as operações efetivas na porta serial são a leitura e escrita de
bytes. Para isso, as funções VISA Read e VISA write podem ser utilizadas.
Ocasionalmente, os módulos VISA bytes at serial port e serial break podem
auxiliar estes processos. Recomenda-se que as operações de leitura e escrita
não sejam realizadas em paralelo. É preciso lembrar também que os dados que
fluem no canal serial são do tipo caracter (ASCII) e por isso precisam ser
convertidos antes de adentrar o meio. Para isso, a função byte array to string
(string/ array/ path conversion) pode ser utilizada.
3. Término: após o fim das operações a porta deve ser fechada. Isto impede que o
dispositivo permaneça indisponível para futuras aplicações e até mesmo
ocasione problemas para o sistema operacional. Para efetuar esta operação, o
módulo VISA close pode ser utilizado.
No que diz respeito à comunicação serial o aplicativo do Servo foi estruturado para
realizar as seguintes tarefas:
1. Antes de iniciar o loop principal, iniciar o hardware, mantendo-o neste estado
até o término do loop. Neste mesmo momento, os estados iniciais de alguns
controles e indicadores são estabelecidos, por exemplo, as janelas gráficas são
limpas e os botões play/stop e encerrar são desabilitados, ver figura 6.3;
2. Realizar, em seqüência, a operação de leitura da porta e em seguida escrita.
Em paralelo, há o tratamento dos sinais recebidos e dos que serão enviados à porta.
Por exemplo, os dados recebidos contem somente informações de quantas ranhuras
variaram naquele período de amostragem, sendo necessário converter esta
informação para velocidade e/ou posição numa determinada unidade de medida,
112
neste caso, a unidade utilizada é o radiano por segundo, para a velocidade, e o
radiano, para a posição. Filtragem de dados também pode ser realizada nesta etapa.
Os dados que serão enviados à porta também necessitam ser tratados, uma vez que,
envia-se dois bytes ao Servo, mais detalhes serão mostrados adiante;
3. Ao terminar o loop, fechar o driver. Em seqüência, o programa acessa um
diretório determinado pelo usuário para salvar os dados do ensaio, nesta etapa.
Como pode ser visto na figura 6.3 o módulo VISA Configure Serial Port foi utilizado
para carregar o driver da porta. Isto é feito com o auxílio de constantes que determinam os
parâmetros de configuração. São elas:
• Baud rate (taxa de transferência): 19200.
• Data bits (bits de dados): 8 bits (default).
• Visa Resource name (porta utilizada): (COM1).
• Stop bit (bits de parada): 1 bit(default).
• Parity (paridade): sem paridade (default).
• Buffer size (tamanho do buffer de dados): 1024 bytes (default).
Notar que o procedimento de inicialização foi realizado antes e fora do loop principal.
Além disso, ele foi posto no interior de uma estrutura de seqüência (structures/ sequence).
Esta estrutura é utilizada para assegurar que os procedimentos contidos em seus quadros
113
sejam executados um após o outro. Além disso, estabeleceu-se uma ligação entre um
elemento de dentro do sequence com o loop principal. Isto foi feito para garantir que o loop
só executará quando aquele dado estiver disponível (mesmo que para nenhum fim), forçando
a inicialização do driver antes de executar qualquer tarefa.
Procede-se então com a operação de leitura e escrita na porta serial dentro do loop
principal. As figuras 6.3 e 6.4 ilustram os dois casos.
Como pode ser visto nas figuras 6.3 e 6.4, o procedimento de leitura e escrita é feito de
forma seqüencial, usando a estrutura sequence, dentro do loop while. Inicia-se o processo
utilizando o bloco VISA read, utilizando como argumentos o dup VISA resource name
provindo da inicialização e o número de bytes a serem lidos (neste caso, um). Em seguida, o
caracter detectado é convertido para o formato inteiro, através da função string to byte array
(/string/array/path conversion). O resultado deste bloco é uma matriz de números inteiros.
Para capturar o byte utiliza-se a função index array (paleta funções, array). Esta
função é utilizada sempre que se quer acessar os elementos de uma matriz. Neste caso. Além
disso, ela aceita “prolongamentos” que permitem que ela forneça mais de uma saída,
fornecendo mais um argumento. Para realizar um prolongamento da função, basta clicar e
114
arrastar a borda inferior do bloco (quando permitido) para gerar uma nova saída. Assim, o
bloco automaticamente gera um novo parâmetro de entrada. Os argumentos desta função são
os índices dos elementos desejados. Frisa-se de antemão, que o sistema de indexação do
LABVIEW utiliza números inteiros não negativos, isto é, o primeiro elemento de uma matriz
(ou vetor) é referenciado com zero. Desta forma, fornecendo zero ao argumento de index
array, obtém-se o primeiro byte enviado pelo Servo.
115
Figura 6. 6 Filtro digital implementado.
Como foi discutido com mais detalhe no Capítulo 2, o módulo do sinal de tensão a ser
aplicado na armadura do motor é um valor que varia entre -6 e 6 Volts (tensão de
116
alimentação). Esta informação deve ser enviada ao Servo em dois bytes: o primeiro contém os
8 bits mais significativos do ciclo de trabalho do PWM. O segundo, contém 3 bits de
informação: os dois primeiros são os dois bits menos significativos do PWM e o sétimo é a
polaridade do sinal de tensão.
Assim, o usuário deve fornecer através da interface, como amplitude do sinal de
referência, no caso da malha aberta, um valor entre -6 e +6 volts e o programa deve converter
esta informação em dois bytes. Para o caso de malha fechada, o algoritmo de controle fornece
este sinal, denominado de sinal de controle. Isto se procede da seguinte maneira:
1. Determina-se o módulo da tensão desejada, convertendo-o imediatamente em
um número inteiro entre 0 e 1023 (correspondente a uma palavra de 10 bits).
Isto pode ser feito através da função int na equação:
117
Isso se dá pois, seja um número de 10 bits: N = b0 + b1 × 2 1 + … + b9 2 9 . Se os oito
bits mais significativos fossem escritos em um único byte, este seria:
Byte = b2 2 0 + b3 21 + … + b9 2 7 . Para obter este resultado a partir de d, basta dividi-lo por 4
hipótese são os menos significativos, que organizados no mesmo byte determinam um arranjo
da seguinte forma:
Para inserir o dígito s na posição indicada (7o bit) sem alterar a informação, basta
somar o resultado anterior (b0 b1) este dígito multiplicado por 32 ou 25 , já que isto o coloca
imediatamente na posição do 7o bit.
s b1 b0
O VISA Write utiliza os dados no formato caracter (ASCII), logo ainda se faz
necessário converter os resultados para caracter, com este fim utiliza-se à função Byte Array
to string.
Por fim, quando o usuário solicitar o término do programa a função VISA Close é
usada para fechar o driver, ver figura 6.8. Nesta etapa pode-se ainda, em seqüência, acessar
um diretório determinado pelo usuário para salvar os sinais utilizados durante o ensaio, como
mostra a figura 6.9.
118
Figura 6. 9 Rotina para salvar os sinais do ensaio em um arquivo para analise posterior.
Para salvar os dados utiliza-se a função Write Character To File. Na figura 6.8,
observa-se que é necessário um tratamento dos sinais para tornar possível salvá-los.
Basicamente, concatena-se todos os sinais desejados em um único vetor através da função
Build Array. Transpõe-se utilizando a função Transpose 2D Array. Converte-se para string.
Substui-se ‘,’ por ‘.’ com a função search and replace string e finalmente, a função Write
Character To File armazena os dados no local especificado pelo usuário.
119