Notas Sobre Labview

 

(Leitura da apostila LV Basics I)

 

 

Bizus do Ambiente

 

ctrl F  -> acha qualquer controle ou vi na memória

 

shift right click -> abre a tools pallete

 

Desligando o auto tool selection na tools pallete, posso trocar de ferramenta usando o tab ou a barra de espaço (que alterna as 2 ferramentas mais úteis na janela em que estou).

 

Para duplicar um objeto apertar ctrl e arrastar.

 

Pra abrir direto o diagrama de uma subvi, ctrl + duplo click no icone.

 

Restringir a movimentação vertical/horizontal de um objeto -> shift + arrastar.

 

Redimensionar proporcionalmente -> shift + redimensionar.

 

Redimensionar nos dois sentidos -> ctrl + redimensionar

 

Abrir espaço no diagrama -> ctrl + selecionar um retangulo.

 

Ícones

posso arrastar qualquer imagem que o LV converte pra um icome 32x32 pixels.

 

Laços de Repetição

 

obs: o while loop sempre executa pelo menos uma vez, ao contrário do for loop com N=0, que não executa nenhuma.

 

Para acessar valores de iterações anteriores em um loop

tenho duas alternativas: shift registers ou feedback nodes. Estes ultimos podem confundir, usar so qdo for necessário evitar muitos fios no diagrama.

 

Auto indexing

é uma forma conveniente de criar arrays. Obs: num array bidimensional, o loop de fora cria as linhas e o de dentro as colunas.

 

 

 

 

 

De forma mais geral, o primeiro índice é linha, o segundo é coluna. Se eu colocar outra dimensão no array, esta seria criada pelo for mais interno. Ou seja, as dimensões são acrescentadas de fora pra dentro em uma recursão deste tipo. Nota: no array indicator, as duas últimas dimensões são desenhadas como linha e coluna respectivamente.

 

 

Máximo número de terminais

 

Obs: o máximo número de terminais que um conector pane pode ter é 28. Recomenda-se sempre usar o padrão 4x2x2x4.

 

Funções bundle e unbundle

 

As funções bundle e unbundle disponibilizam os elementos de um cluster pela ordem de cada elemento. (cluster order) –Logo, se eu reordenar os elementos posso causar erros, se estes já estiverem conectados a outras estruturas.

 

Alterar um único elemento de um cluster

 

Para alterar um único elemento de um cluster, posso passar o input cluster e acessar só o elemento desejado nas funções de bundle.

 

Error clusters

 

contém status (bool) , code (num) e source (string). Usados também para estabelecer uma ordem de execução entre as subvis. Podem ser passados para a condição de parada de um while ou para um case selector.

você pode conectar um cluster de erro diretamente no selection node de um  select case, ou ainda no stop condidion de um while loop. Nesses dois casos, o status do erro é utilizado.

 

Waveform Chart

 

 Possui 3 modos:

·         strip (sai plotando todos os dados e rolando os antigos pra trás),

·         scope (apaga e segue redesenhando o próximo range de dados), e

·         sweep (redesenha o próximo range sem apagar no recomeço, substituindo dados velhos pelos novos à medida que uma linha vermelha varre o gráfico).

 

Obs: Registram valores numéricos ao longo do tempo, como uma pena sobre um rolo de papel em movimento. Entro com um valor escalar, ou vários associados em um cluster.

 

Waveform Graph

Passo um vetor. Ou um cluster que além do vetor contem t0 e dt. Pra plotar mais de uma curva, montas arrays com as waveforms.

 

XY graph

aceita um cluster com dois arrays, um pra z e outro pra y. Ou ainda um array de pontos, onde cada ponto é um cluster com as coordenadas x e y. Para plotar gráficos múltiplos, coloca-los em um array.

 

Tomada de decisões

 

select function ou case structures.

 

use default if unwired

 

Obs: no túnel de um case, posso setar “use default if unwired”, e caso o valor não esteja sendo passado em algum caso, será passado o valor que seria passado no caso default.

 

enum como seletor dos casos

 

Dica prática: usar um enum como seletor dos casos. Facilita a documentação, pois o texto de cada item aparece na estrutura case.

 

Sintaxe dos Formula Nodes

 

 

Formula nodes atualmente aceitam a sintaxe da linguagem C. Isso inclui laços, switch, etc.

 

Controle Tabela

-> funciona como um array 2D de strings.

Build text Express Vi

Build text Express Vi é uma mão na roda para criar texto utilizando valores numéricos de entrada.

 

Scan  strig & format into string

 

Pra converter uma string em um número, existe a função scan string. Clicando com o botão direito, aparece uma opção de configurar a função scan string, que ajuda a selecionar o formato de entrada da função. (%4f, etc...) O mesmo ocorre com a função format into string.

 

Obs: A função format into string pode receber como parâmetros de entrada strings ou diversos tipos numéricos, e concatena tudo isso.

 

 

Tipos de arquivos

 

Manipulação de arquivos: low level: open, read, write, close.

 

Obs: o Labview salva arquivos em 3 formas diferentes: numerico (cada numero representado por 4 bytes, ou seja, um single float precision ou um 32 bits integer), ASCII ou datalog. Depende somente da entrada na função write: numero, string ou um cluster personalizado, respectivamente.

 

DAQ Assistant Express VI

 -> contém um wizard para realizar quaisquer operações numa placa de aquisição de dados: analog input, analog output, digital I/O.

 

Instrument I/O Assistant

 -> wizard para comunicação com instrumentos.

 

Personalizando VI’s

 

Em options, window size, é possível configurar a vi pra redimensionar os objetos quando a janela é redimensionada, ou manter as proporções do painel quando a vi é executada em monitores de diferentes resoluções.

 

SubVI node setup

show front panel when load/run e close afterwards ir originaly closed.

 

Teclas de Atalho

Quando a vi está rodando, o tab muda o foco do controle ativo no momento. (não nos indicadores, pois não se pode passar dados num indicador). No controle em foco, pode-se digitar o valor desejado ou, se é um booleano, apertar enter ou espaço para alterar seu valor.

Em advanced -> key navigation posso setar uma tecla de atalho para o controle, ou ainda selecionar skip control when tabing.

 

Diretórios

 

Adicionando controles à paleta: basta copiá-los para a pasta labview\user.lib. Cada subdiretório corresponde a uma subpaleta.

 

Instrument drivers devem ser adicionados em labview\instr.lib.

 

 

 

(Fim da leitura da apostila LV Basics I)

 

-*-

 

 

(Leitura da apostila LV Basics II)

 

 

Delay dentro de um loop

Sempre colocar um delay dentro de um loop, principalmente se ele estiver monitorando entradas do usuário. Do contrário, é um desperdício dos recursos da máquina.

 

Parallel loop architecture

 

Quando o programa deve executar várias tarefas concorrentes. Processos múltiplos simultâneos e concorrentes. No entanto, não é possível passar fios de um loop para outro, pois isso impediria a simultaneidade. Alguma técnica de mensagem entre os loops deve ser utilizada. Abaixo, note que o segundo loop lê uma variável local do stop do primeiro loop.

 

 

 

 

 

 

Vários casos dentro de um mesmo loop

 

 

Outra opção: vários casos dentro de um mesmo loop. Indicado para vários botões no painel que executam diferentes tarefas, poucas e pequenas. Não é possível priorizar determinadas tarefas.

 

 

 

 

 

Máquina de estados

->a única desvantagem é a possibilidade de perder algum estado (se o usuário aperta o botão enquanto a vi está executando algum caso). A solução pra isso é a fila de eventos, vista no curso LV advanced.

 

 

 

Ação mecânica dos botões

-> latch when pressed -> muda o valor quando pressiono, e volta ao valor original quando o LabView lê o valor do controle, mesmo que o mouse continue pressionado sobre o botão. Indicado para parar while loops ou executar tarefas (botão de menu no painel frontal, etc.) latch when released é similar, sendo usado em diálogos e botões do sistema.\

 

Variável local de um botão

 

Obs: não se pode usar uma variável local com um botão no modo latch, pois a primeira variável local a ler o valor do controle resetará seu valor para o default.

 

 

Monitorar a interface com o usuário sem usar eventos

 

Estrutura básica de monitorar a interface com o usuário: lê um array de botões, search 1D array, se algum é true retornar o index. Se não, retorna –1. Na máquina de estados, o caso –1 será o default que monitora a interface, e haverá um caso para cada botão, de 0 a N-1 botões.

 

Constantes enum e ring

 

Obs: na paleta de operações numéricas, além da constante numérica tenho constantes enum e ring.

 

Dialog Controls

 -> mudam sua aparência de acordo com as configurações de cada plataforma. Usam as configurações padrão do sistema.

 

Tab control

 

 -> pode ser conectado a um seletor de case. Dentro de cada case coloco o processamento do tab correspondente.

 

Redimensionamento automático de objetos

 

-> vi properties-> window size. Permite estabelecer o tamanho mínimo, ou alterar o tamanho com as dimensões da janela ou a resolução do monitor. (Obs: alterar o tamanho com a resolução não é utilizado por softwares profissionais).

 

Bom estilo no diagrama de blocos

 

->da esquerda para direita, de preferência usando uma só tela.

 

Não passar fios para uma estrutura se o dado não é utilizado dentro da estrutura. Pensar num fio como uma variável, e na estrutura como um escopo do programa.

 

Sempre documentar os diagramas com labels, localizados na paleta de decorações. Principalmente aquilo que não está conectado por fios: variáveis locais, controles com conexões datasocket, etc.

 

Use the following checklist to ensure you use proper block diagram design

in your VIs.

 

  1. Avoid creating extremely large block diagrams. Limit the scrolling necessary to see the entire block diagram to one direction.
  2. Label controls, important functions, constants, property nodes, local variables, global variables, and structures appropriately.
  3. Add comments. Use object labels instead of free labels where applicable and scrollable string constants for long comments.
  4. Use standard size fonts for comments and labels.
  5. Right-justify text if you place a label to the left of an object.
  6. Use standard, consistent font conventions throughout.
  7. Use Size to Text for all text and add carriage returns if necessary.
  8. Reduce white space in smaller block diagrams but allow at least three or four pixels between objects.
  9. Flow data from left to right. When possible, wires should enter from the left and exit to the right, not the top or the bottom.
  10. Align and distribute functions, terminals, and constants.
  11. Label long wires with small labels with white backgrounds.
  12. Do not wire behind objects.
  13. Make good use of reusable, testable subVIs.
  14. Make sure the program can deal with error conditions and invalid values.
  15. Show the name of source code or include source code for any CINs.
  16. Save with the most important or the first frame of structures showing.
  17. Review for efficiency, especially data copying, and accuracy, especially parts without data dependency.

 

 

Organização hierárquica dos arquivos

 

Recomenda-se a organização hierárquica dos arquivos (vis) de acordo com a hierarquia utilizada no código (subvis ocupam subdiretórios).

 

Estrutura de seqüência

 

Dica: a estrutura de seqüência serve para ordenar o código quando não existe uma dependência natural de dados. Antes de usar isso, verificar se o código não pode ser ordenado pela conexão dos clusters de erro. (Note que o VL 7 acrescentou uma vi time delay que possui entrada e saída de erros, justamente pra isso...)

 

Uma alternativa à estrutura de seqüência é usar um case dentro de um loop, com a vantagem que cada frame pode atualizar um controle, como mestrado na figura abaixo:

 

 

 

 

 

Outra vantagem é que posso interromper a execução do loop se um dos frames retornar um erro. Isso não ocorre na estrutura de seqüência, que executará tudo até concluir o último frame.

 

Menus estáticos

São salvos como arquivos .rtm, e devem ser salvos em um dos diretórios do projeto, de modo que a VI possa encontrar esse arquivo na hora de executar.

 

 

Obs: property nodes com mais de um terminal executam em ordem de cima pra baixo.

 

Control Reference

 

Posso passar a referência de um controle para uma subvi, e alterar suas propriedades ou chamar um método de dentro da subvi, para alterar o controle no painel frontal.

 

Quando o controle da referência possui uma estrela vermelha no canto inferior esquerdo, é do tipo strictly typed. Significa que só posso conectar a ele referencias de objetos do mesmo tipo. (por exemplo, se crio um controle a partir de uma referencia de um bool, não posso conectar a referencia de uma string pra alterar uma propriedade comum a ambos...) Mas posso criar referencias do tipo weakly typed, se coloco o de controle de um control refnum diretamente no painel frontal. Com isso, posso conectar um array de referências de objetos de tipos diferentes ao mesmo property node, e alterar no mesmo property node as propriedades comuns a todos eles.

 

Exemplo:

 

 

 

 

 

 

 

 

Type Definitions

 

Salvar como controle -> Posso customizar um controle e salvá-lo para reutilizar em outras vis. Funciona como um controle do LV, posso alterar suas propriedades, data type, etc.

 

Salvar como Data Type -> Amarro o tipo de dado. Por exemplo, se defino que o controle é I32, o usuário não vai poder alterar pra DBL. Se eu alterar o tipo de dado no arquivo do controle, automaticamente todas as suas instâncias em vis são alteradas. Contudo, ainda é possível alterar a aparência de cada instância do controle. Quando não quero permitir que o usuário altere nem mesmo a aparência do controle, salvo como stric type. O strict type é indicado quando quero vários objetos idênticos colocados em vários lugares, e quero poder altera-los todos ao mesmo tempo, alterando simplesmente o arquivo .ctl.

 

 

 

 

A type definition can have a different name, description, default value, size,

color, or style of control, such as a knob instead of a slide, as long as the data

type matches the master copy of the control. A type definition only identifies

the correct type for each instance of a custom control. The type does not

include things like data range for numeric controls, or item names in a ring

control. If you change the data range on a numeric control or an item name

on a ring control that are part of a type definition control, these properties

do not change on all instances of the control. However, if you change the

item name in a type definition for an enumerated type control, all instances

change as well, since the item name is part of the type for an enumerated

type control. You also can use property nodes with type definition controls

as you would with a standard control.

A strict type definition forces almost everything about the control to be

identical, including its size, color, and appearance. Strict type definitions are

more restrictive, and unlike General type definitions, they define other

values, such as range checking on numeric controls and item names on ring

controls. The only flexibility to a strict type definition is the name,

description, and default value which all can be different for separate

instances of the a strict type definition control. The only properties available

for a strict type definition control are those that affect the appearance of the

control such as Visible, Disabled, Key Focus, Blinking, Position, and

Bounds. For example, if you have a strict type definition which is made up

of a cluster of various controls, properties for each individual control would

not be available. Only appearance properties for the overall custom control

are customizable.

Type definitions and strict type definitions are typically used to create a

custom control using a cluster of many controls. If you need to add a new

control and pass a new value to every subVI, you can add the new control to

the custom control cluster, instead of having to add the new control to each

subVIs front panel and making new wires and terminals.

 

 

Write and Read Locals

Ler essas expressões como local para escrever (write local) e local para ler (read local). Assim um read local é como um controle, e um write local é como um indicador no diagrama de blocos.

 

Variáveis Locais

 

Usadas para passar dados entre objetos dentro de um mesmo diagrama sem utilizar fios.

 

Variáveis Globais

 

São objetos do LabView. VIs sem diagrama de blocos, só com painel frontal. Funcionam como uma região comum que todas as VIs carregadas na memória podem acessar. Pode conter um ou vários objetos.

 

Obs. Tanto as variáveis locais quanto as globais são identificadas pelo Label dos objetos que elas referenciam.

 

Cuidados com variáveis Globais e Locais

 

Deve-se ter cuidado com a temporização, pois posso ler o mesmo valor várias vezes achando que são medições diferentes, ou pelo contrário, posso perder dados se leio numa freqüência menor do que a geração dos dados. A dica é utilizar um boolean global para fazer o controle: esse dado já foi lido ou não?

 

When using globals, if you are not careful, you may read values more than once,

or you may not read them at all. If you must process every single update, take special care

to ensure that a new value is not written to a global variable until the previous one has

been read, and that after a global has been read, it is not read again until another value

has been written to the global.

 

Obs: passar dados por fios é a melhor forma de clarificar o código e de utilizar eficientemente a memória.

 

Obs: deve-se tomar o cuidado de inicializar as variáveis globais adequadamente.

 

Obs: São exceções ao modelo de fluxo de dados do LabView.

 

Pra evitar racing conditions, recomenda-se escrever em um único local, para evitar que dois códigos em paralelo tentem modificar o mesmo valor. A leitura pode ser feita de vários pontos do código.

 

Arquivos de Texto

 

Use text format files for your data:

 

 

 

 

Arquivos Binários

 

A função write é polimórfica. Entrando com conteúdo binário, ela gravará arquivos binários. Vetores e matrizes podem ser gravados, mas deve-se ter cuidado de definir um cabeçalho para recuperar depois os dados.

 

Cada valor numérico é salvo num espaço de 4 bytes.

 

Use binary data files when:

• Other users or applications are unlikely to need access to your data.

• You need to perform random access file I/O in the data file.

• Disk space and file I/O speed are crucial.

 

Usar bite stream files (binário) pra acessar randomicamente uma posição, por exemplo, o nono número de um array.

 

Arquivos Datalog

 

Salva os dados contidos em clusters personalizados.

 

Como criar e abrir datalog files.

 

 

Use datalog files when:

• Your data is made up of mixed or complicated data types.

• Other users or applications are unlikely to need access to your data.

• Users who write VIs to access the data know the datalog structure.

 

Disk Streaming

 

Técnica de Disc Streaming: abrir o arquivo, fazer todas as operações de escrita necessárias e, só quando terminar, fechar o arquivo.

 

Disk streaming is a technique of writing data to a file multiple times without

closing the file after each write operation. Recall that the high-level file VIs

open and close files each time they run, incurring unnecessary overhead in

each iteration of the loop.

 

Criando Executáveis

 

Build Application or Shared Library (DLL)

Target: exe ou dll; posso salvar as subvis em arquivos separados (programa.exe + vi lib) pra reduzir o tamanho do executável.

 

Source Files:

            Top level vi: a vi principal da aplicação. O LV automaticamente inclui todas as subvis, menus e dlls necessárias. Se o programa chama alguma vi dinamicamente, esta deve ser incluída manualmente. Arquivos de dados ou inicialização também devem ser carregados manualmente. Há botões específicos pra essas duas últimas operações.

 

Vi settings: permite eliminar partes do código que não serão necessárias na aplicação (diagramas, informações de debug, etc).

 

Aplication settings: ícones, active-x server, etc.

 

Data Socket

 

It is a protocol-independent, language-independent, and OS-independent API designed to simplify

binary data publishing. The DataSocket API is implemented so you can use it in any programming environment and on any operating system.

 

Arquitetura:

 

Publisher  -> DS Server  -> Subscriber

 

LV Webserver

 

Habilitar para ver o front panel em um browser. Options – web publishing tool -> embedded ou snapshot. Com a opção de solicitar o controle da vi.

 

 

 

Hosted by www.Geocities.ws

1