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.
posso
arrastar qualquer imagem que o LV converte pra um icome 32x32 pixels.
obs:
o while loop sempre executa pelo menos uma vez, ao contrário do for loop com
N=0, que não executa nenhuma.
tenho
duas alternativas: shift registers ou feedback nodes. Estes ultimos podem
confundir, usar so qdo for necessário evitar muitos fios no diagrama.
é
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.
Obs:
o máximo número de terminais que um conector pane pode ter é 28. Recomenda-se
sempre usar o padrão 4x2x2x4.
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.
Para
alterar um único elemento de um cluster, posso passar o input cluster e acessar
só o elemento desejado nas funções de bundle.
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.
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.
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.
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.
select function ou case structures.
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.
Dica
prática: usar um enum como seletor dos casos. Facilita a documentação, pois o
texto de cada item aparece na estrutura case.
Formula
nodes atualmente aceitam a sintaxe da linguagem C. Isso inclui laços, switch,
etc.
->
funciona como um array 2D de strings.
Build
text Express Vi é uma mão na roda para criar texto utilizando valores numéricos
de entrada.
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.
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.
->
contém um wizard para realizar quaisquer operações numa placa de aquisição
de dados: analog input, analog output, digital I/O.
->
wizard para comunicação com instrumentos.
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.
show front panel when load/run e close afterwards ir
originaly closed.
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.
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)
-*-
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.
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.

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.

->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.
->
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.\
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.
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.
Obs:
na paleta de operações numéricas, além da constante numérica tenho
constantes enum e ring.
->
mudam sua aparência de acordo com as configurações de cada plataforma. Usam
as configurações padrão do sistema.
->
pode ser conectado a um seletor de case. Dentro de cada case coloco o
processamento do tab correspondente.
-> 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).
->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.
Recomenda-se
a organização hierárquica dos arquivos (vis) de acordo com a hierarquia
utilizada no código (subvis ocupam subdiretórios).
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.
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.
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:

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.
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.
Usadas
para passar dados entre objetos dentro de um mesmo diagrama sem utilizar fios.
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.
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.
Use
text format files for your data:

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