Estruturas de dados no LabVIEW

Incluído nesta seção

Dados do tipo string


String é uma sequência de caracteres ASCII que podem ser visíveis na tela ou não. Strings oferecem um formato independente de plataforma para informações e dados. Algumas das aplicações mais comuns de strings são:

  • Criação de mensagens simples de texto
  • Controle de instrumentos, pelo envio de comandos de texto ao instrumento e recebimento de respostas com valores de medições no formato de strings de caracteres ASCII ou binários, que serão convertidos em valores numéricos.
  • Armazenamento de dados numéricos em disco. Para armazenar dados numéricos em um arquivo ASCII, é necessário primeiro converter dados numéricos em strings antes que eles possam ser escritos em um arquivo do disco.
  • Envio de instruções ou solicitações ao usuário em caixas de diálogo.

No painel frontal, strings são mostrados como tabelas, caixas de entrada de texto e títulos. O LabVIEW contém VIs e funções integradas para realizar ações como a formatação, análise e outros tipos de edição em strings. O LabVIEW representa os dados da string na cor rosa.

Encontre mais informações sobre dados do tipo string

Dados do tipo numérico

O LabVIEW representa dados numéricos como números de ponto flutuante, números de ponto fixo, inteiros, inteiros não sinalizados e números complexos. Dados de precisão simples e dupla, assim como dados numéricos complexos, são representados na cor laranja no LabVIEW. Todos os dados numéricos inteiros são representados na cor azul.

Observação: A diferença entre os tipos de dados numéricos está no número de bits utilizado para armazenar dados e nos valores que eles representam.

Determinados tipos de dados também fornecem mais opções de configuração. Por exemplo, você pode associar unidades físicas de medição a dados de ponto flutuante, incluindo números complexos; além disso, você pode configurar a codificação e a faixa para dados de ponto fixo.

Encontre mais informações sobre dados numéricos

Veja uma tabela de tipos de dados numéricos

Dados do tipo booleano


O LabVIEW armazena dados booleanos como valores de 8 bits. Um dado booleano pode ser usado no LabVIEW para representar 0 ou 1, ou um valor FALSO ou VERDADEIRO. Se o valor de 8 bits for zero, o valor booleano será FALSO. Qualquer valor diferente de zero representa VERDADEIRO. Entre as aplicações comuns de dados booleanos estão a representação de dados digitais e seu uso como controle do painel frontal pela ação mecânica de uma chave, muitas vezes usada para controlar uma estrutura de execução como, por exemplo, uma estrutura Case. Um controle booleano é tipicamente usado como declaração condicional, para a saída de um loop While. No LabVIEW, a cor verde representa dados booleanos.

Encontre mais informações sobre o controle booleano de ações mecânicas

Dados do tipo dinâmico

A maior parte dos VIs Express aceita e/ou responde com dados do tipo dinâmico, que são mostrados na forma de um terminal de cor azul-escura.

Usando os VIs Convert to Dynamic Data e Convert from Dynamic Data, você pode converter dados numéricos de ponto flutuante ou dados booleanos para os seguintes tipos de dados:

  • Array 1D de dados de forma de onda
  • Array 1D de dados escalares
  • Array 1D de dados escalares — valor mais recente
  • Array 1D de dados escalares — um canal
  • Array 2D de dados escalares — as colunas são canais
  • Array 2D de dados escalares — as linhas são canais
  • Um valor escalar
  • Uma forma de onda

Conecte os dados do tipo dinâmico ao indicador mais adequado à apresentação dos dados. Os indicadores podem ser gráficos, registradores e indicadores numéricos ou booleanos. Entretanto, como os dados dinâmicos passam por uma conversão automática para combinarem com o indicador ao qual estão conectados, os VIs Express podem reduzir a velocidade de execução do diagrama de blocos.

Os tipos de dados dinâmico é usado com VIs Express. A maior parte dos outros VIs e funções fornecidos no LabVIEW não aceitam esse tipo de dados. Para utilizar um VI ou função do LabVIEW para analisar ou processar informações presentes em dados dinâmicos, você precisa converter esses dados.

Encontre mais informações sobre dados dinâmicos

Às vezes, pode ser útil agrupar dados relacionados entre si. Você pode usar arrays e clusters no LabVIEW para agrupar dados relacionados entre si. Arrays combinam pontos de dados de um mesmo tipo em uma estrutura de dados. Clusters combinam pontos de dados de tipos diferentes em uma mesma estrutura de dados.

Um array é formado por elementos e dimensões. Elementos são os pontos de dados que formam o array. Uma dimensão é o comprimento ou profundidade de um array. Um array pode ter uma ou mais dimensões, com até (231)—1 elementos por dimensão, desde que permitido pela memória disponível.

Você pode construir arrays de dados numéricos, booleanos, paths, strings, formas de onda e clusters. Arrays são indicados para trabalhar com conjuntos de pontos de dados similares e executar cálculos repetitivos. Arrays são ideais para o armazenamento de dados coletados de formas de onda ou dados gerados em loops, onde cada iteração de um loop produz um elemento do array.

Observação: Os índices do array no LabVIEW são contados a partir de zero. O índice do primeiro elemento em um array será sempre zero, independentemente de sua dimensão.

Os elementos de um array são ordenados. Os arrays utilizam índices, para que você possa acessar de imediato qualquer um de seus elementos. Esse índice é contado a partir de zero, o que significa que pode variar entre 0 e n-1, em que n é o número de elementos no array. Por exemplo, n-12 representa os doze meses do ano; logo, os índices vão de 0 a 11. Março é o terceiro mês, logo seu índice é 2.

A figura 1 mostra um exemplo de array de dados numéricos. O primeiro mostrado no array (3.00) está no índice 1, e o segundo elemento (1.00) está no índice 2. O elemento do índice 0 não é mostrado nesta imagem, pois o elemento 1 está selecionado no mostrador de índices. O elemento selecionado no mostrador de índices sempre se refere ao elemento mostrado no canto superior esquerdo do mostrador de elementos.

(1) Mostrador de índices  |  (2) Mostrador de elementos

Figura 1. Controle de dados numéricos do array

Como criar controles e indicadores de array

Para criar um controle ou indicador de array no painel frontal, você inclui uma "casca" de array no painel frontal, como a mostrada na figura 2, e arrasta um objeto ou elemento de dados, como um controle numérico ou de string, até a "casca" de arrays.

Figura 2. Como colocar um controle numérico em um shell de array

Se você tentar arrastar um controle ou indicador inválido para o shell do array, não poderá colocar o controle ou o indicador no shell.

Você deve inserir um objeto na moldura do array antes de usar esse array no diagrama de blocos. Caso contrário, o terminal do array será mostrado na cor preta, com o símbolo de colchetes vazios e nenhum tipo de dados associado a ele.

Arrays de duas dimensões

Os exemplos anteriores usam arrays 1D. Um array 2D armazena elementos em uma matriz. Ele requer um índice de coluna e um índice de linha para localizar um elemento, ambos baseados em zero. A figura 3 mostra um array 2D de 8 colunas por 8 linhas, que contém 8 × 8 = 64 elementos.

Figura 3. Array 2D

Para colocar um array multidimensional no painel frontal, clique com o botão direito no mostrador de índices e selecione Add Dimension no menu de atalho. Você pode também redimensionar o mostrador de índice para quantas dimensões quiser.

Inicialização de arrays

Você pode inicializar um array ou deixá-lo não inicializado. O array estará inicializado quando você tiver definido o número de elementos em cada dimensão e o conteúdo de cada elemento. Um array não inicializado contém um número fixo de dimensões, mas nenhum elemento. A figura 4 mostra um controle de array 2D não inicializado. Observe que todos os elementos estão mostrados em cor mais clara. Isso indica que o array não foi inicializado.

Figura 4. Array 2D não inicializado

Em um array 2D, após você ter inicializado um elemento, qualquer elemento não inicializado que estiver nessa coluna e nas colunas anteriores será inicializado e preenchido com o valor padrão para o tipo de dados definido. Na figura 5, o valor 4 foi introduzido na coluna 2 do array baseado em 0. Os elementos anteriores das colunas 0, 1 e 2 são inicializados em 0, o valor padrão para o tipo de dados numérico.

Figura 5. Array 2D inicializado com nove elementos

Como criar constantes de array

Para criar uma constante de array no diagrama de blocos, selecione uma constante de array na paleta de funções, coloque a casca de array no diagrama de blocos e coloque uma constante tipo string, numérica, booleana ou cluster na casca do array. Você pode usar uma constante de array para armazenar dados de constantes ou como base para a comparação com outro array.

Entradas de array com autoindexação


Se você conectar um fio entre um array e um loop For ou loop While, poderá ligar cada iteração do loop a um elemento deste array habilitando a função de autoindexação. A imagem do túnel é alterada, de um quadrado totalmente preenchido para a imagem acima, que indica a autoindexação. Clique com o botão direito do mouse no túnel e selecione Enable Indexing ou Disable Indexing no menu de atalho, para ativar ou desativar a autoindexação no túnel.

Entradas de array

Se você habilitar a autoindexação em um array conectado ao terminal de entrada de um loop For, o LabVIEW irá configurar o terminal loop count com o tamanho do array, não sendo, assim, necessário conectar o terminal loop count. Como você pode usar loops For para processar um elemento do array por vez, o LabVIEW habilita a autoindexação como padrão sempre que o array for conectado em um loop For. Você poderá desabilitar a autoindexação se não precisar processar individualmente cada um dos elementos do array.

Na figura 6, o loop For é executado em um número de vezes igual ao número de elementos do array. Normalmente, a seta de execução do VI estará quebrada enquanto o terminal de contagem do loop For não estiver conectado. Mas nesse caso, a seta de execução não está quebrada.

Figura 6. Array usado para definir a contagem do loop For

Se você habilitar a autoindexação para mais de um túnel ou se conectar o terminal de contagem, o número de iterações será o menor entre as opções disponíveis. Por exemplo, se dois arrays autoindexados entrarem no loop, com 10 e 20 elementos, respectivamente, e você conectar o valor 15 ao terminal de contagem, o loop ainda será executado somente 10 vezes, indexando todos os elementos do primeiro array mas somente os primeiros 10 elementos do segundo array.

Saídas do array

Quando você usa a autoindexação no túnel de saída de um array, o array de saída recebe um novo elemento a cada iteração do loop. Dessa maneira, os arrays de saída autoindexados têm um tamanho igual ao número de iterações.

O fio que vai do túnel de saída ao indicador do array fica mais grosso quando passa a array na borda do loop. O túnel de saída mostrará uma imagem com colchetes, para representar o array.

Figura 7. Saída autoindexada

Clique com o botão direito do mouse na borda do loop e selecione Enable Indexing ou Disable Indexing no menu de atalho para ativar ou desativar a autoindexação. A autoindexação é desabilitada como padrão em loops While.

Por exemplo, você deverá desabilitar a autoindexação quando precisar apenas do último valor que passar pelo túnel.

Como criar arrays de duas dimensões

Você pode usar dois loops For, um aninhado dentro do outro, para criar um array 2D. O loop For externo cria os elementos da linha, e o loop For interno cria os elementos da coluna.

Figura 8. Como criar um array 2D

Clusters

 

Vídeo: Clusters

Os clusters agrupam elementos de dados de diferentes tipos. Um exemplo de cluster é o cluster de erro do LabVIEW, que combina um valor booleano, um valor numérico e um string. O cluster é similar a um record ou struct em linguagens de programação baseadas em texto.

Agrupar vários elementos de dados nos clusters elimina o excesso de fios no diagrama de blocos e reduz o número dos terminais do painel de conectores necessários aos subVIs. O painel de conectores tem no máximo 28 terminais. Se o seu painel frontal tiver mais de 28 controles e indicadores que você quer passar a outro VI, agrupe alguns deles em um cluster e associe esse cluster a um dos terminais do painel de conectores.

A maior parte dos clusters no diagrama de blocos tem fios e terminais de tipo de dados na cor rosa como padrão. Clusters de erro têm fios e terminais de tipo de dados na cor amarela escura como padrão. Clusters de valores numéricos, às vezes referidos como "pontos", têm fios e terminais de tipo de dados na cor marrom como padrão. Você pode conectar clusters numéricos a funções numéricas, como soma e raiz quadrada, para executar as mesmas operações simultaneamente em todos os elementos do cluster.

Ordem dos elementos do cluster

Os elementos de clusters e arrays são ordenados, mas você deve desagrupar todos os elementos do cluster de uma vez, usando a função Unbundle. Você pode usar a função Unbundle By Name para desempacotar elementos do cluster com base no nome destes elementos. Para usar a função Unbundle By Name, será necessário que cada elemento do cluster tenha um nome. Os clusters também diferem dos arrays por terem tamanho fixo. Da mesma forma que um array, um cluster é um controle ou um indicador. Um cluster não pode conter ao mesmo tempo controles e indicadores.

Criação de controles e indicadores de cluster

Para criar um controle ou indicador de cluster no painel frontal, incluímos uma "casca" de cluster no painel frontal, como a mostrada no painel frontal mostrado abaixo, e arrastamos até essa "casca" um objeto ou elemento de dados, que pode ser um controle ou indicador numérico, booleano, string, path, refnum, array ou cluster.

Para redimensionar a moldura do cluster, arrastamos o cursor no momento em que colocamos a moldura do cluster no painel frontal.

Figura 9. Como criar um controle de cluster

A figura 10 mostra um  cluster que contém três controles: um string, uma chave booleana e um numérico:

Figura 10. Exemplo de controle de cluster

Como criar constantes de cluster

Para criar uma constante de cluster no diagrama de blocos, selecione uma constante de cluster na paleta Functions, coloque a casca de cluster no diagrama de blocos e coloque uma constante tipo string, numérica, booleana ou cluster na casca do cluster. Você pode usar uma constante de cluster para armazenar dados de constantes ou como base para a comparação com outro cluster.

Se você tiver um controle ou indicador de cluster na janela do painel frontal e quiser criar uma constante de cluster que contém os mesmos elementos no diagrama de blocos, poderá arrastar esse cluster da janela do painel frontal ao diagrama de blocos ou clicar com o botão direito no cluster da janela do painel frontal e selecionar Create»Constant no menu de atalho.

Como usar as funções de clusters

Você pode usar as funções de Cluster para criar e manipular clusters. Por exemplo, você pode executar tarefas como:

  • Extrair elementos de dados específicos de um cluster.
  • Incluir elementos de dados em um cluster.
  • Separar os elementos de dados de um cluster

Você pode usar a função Bundle para montar um cluster, as funções Bundle e Bundle by Name para modificar um cluster e as funções Unbundle e Unbundle by Name para desmontar clusters.

Você também pode colocar as funções Bundle, Bundle by Name, Unbundle e Unbundle by Name no diagrama de blocos, clicando com o botão direito do mouse em um terminal de cluster do diagrama de blocos e selecionando a paleta Cluster, Class & Variant no menu de atalhos. As funções Bundle e Unbundle conterão automaticamente o número correto de terminais. As funções Bundle by Name e Unbundle by Name mostram o primeiro elemento do cluster. Usando a ferramenta Positioning, você pode redimensionar as funções Bundle by Name e Unbundle by Name e visualizar os demais elementos do cluster.

Como montar clusters

A função Bundle pode ser usada para montar um cluster a partir de elementos individuais ou alterar os valores de determinados elementos em um cluster existente sem que seja necessário especificar valores novos para todos os elementos. Use a ferramenta Positioning para redimensionar a função ou clique com o botão direito do mouse na entrada de um elemento e selecione Add Input no menu de atalho aberto.

Figura 11. Como montar um cluster no diagrama de blocos

Como modificar um cluster

Você pode conectar na entrada do cluster somente os elementos que quer alterar. Por exemplo, a entrada Input Cluster, mostrada na figura 12, contém três controles.

Figura 12. Bundle usado para modificar um cluster

Se você conhecer a ordem de como o cluster foi montado, poderá usar a função Bundle para alterar o valor de  Command, conectando os elementos mostrados na figura 12.

Você pode também usar a função Bundle by Name para substituir ou acessar os elementos de um cluster existente que tiverem título. A função Bundle by Name trabalha como a função Bundle, mas em vez de referenciar os elementos do cluster por sua ordem no cluster, ela os referencia pelos seus rótulos. Você somente pode acessar elementos que tiverem rótulos. O número de entradas não precisa ser igual ao número de elementos no cluster de saída.

Use a ferramenta Operating para clicar em um terminal de entrada e selecionar um elemento no menu pull-down. Você pode também clicar com o botão direito em uma entrada e selecionar o elemento no menu de atalho Select Item.

Na figura 13, você pode usar a função Bundle by Name para atualizar os valores de Command and Function com os valores de New Command e New Function.

Figura 13. Uso de Bundle by Name para modificar um cluster

Você pode usar a função Bundle by Name para estruturas de dados que podem ser alteradas durante o desenvolvimento. Ao incluir um novo elemento ao cluster ou modificar a sua ordem, não precisará reconectar os fios da função Bundle by Name, pois os nomes usados ainda serão válidos.

Desmontagem de clusters

A função Unbundle pode ser utilizada para separar um cluster em seus elementos individuais.

A função Unbundle by Name pode ser usada para obter os elementos do cluster que tenham os nomes especificados por você. O número de terminais de saída não depende do número de elementos do cluster de entrada.

Use a ferramenta Operating para clicar em um terminal de saída e selecionar um elemento no menu pull-down. Você pode também clicar com o botão direito em um terminal de saída e selecionar o elemento no menu de atalho Select Item.

Por exemplo, se você usar a função Unbundle com o cluster mostrado na figura 14, ele terá quatro terminais de saída, que corresponderão aos quatro controles do cluster. Você precisará saber a ordem do cluster, para que possa associar o terminal booleano certo do cluster desmontado à chave correspondente no cluster. Nesse exemplo, os elementos são ordenados de cima para baixo a partir do elemento 0. Se você usar a função Unbundle by Name, poderá ter um número arbitrário de terminais de saída e acessar elementos específicos pelo nome, em qualquer ordem.

Figura 14. Unbundle e Unbundle by Name

Um enum (controle, constante ou indicador do tipo enumerado) é uma combinação de dados de tipos diferentes. Um enum representa um par de valores, um string e um numérico, podendo ser um membro de uma lista de valores. Por exemplo, se você tiver criado um tipo de enum chamado Mês, os pares de valores possíveis para a variável Mês são janeiro-0, fevereiro-1 e assim por diante, até dezembro-11. A figura 15 mostra um exemplo desses pares de dados na caixa de diálogo Properties de um controle enumerado. Você pode acessar essa janela diretamente, clicando com o botão direito no controle enumerado e selecionando Edit Items.

Figura 15. Propriedades do controle enumerado Mês

Enums são úteis porque é mais fácil manipular números no diagrama de blocos que strings. A figura 16 mostra o controle enumerado Month, a seleção de um par de dados no controle enumerado e o terminal correspondente no diagrama de blocos.

(1) Controle do painel frontal  |  (2)  Seleção de um item  |  (3) Terminal do diagrama de blocos

Figura 16. Controle enumerado Mês

Ferramenta Probe


Use a ferramenta Probe para verificar valores intermediários em um fio durante a execução de um VI.

A ferramenta Probe deve ser usada quando você tiver um diagrama de blocos complicado, com diversas operações que podem entregar dados incorretos. A ferramenta Probe pode ser usada em conjunto com as funções Highlight Execution, Single Stepping e Breakpoints para verificar se há dados incorretos e onde eles estão localizados. Se houver dados disponíveis a probe atualizará e apresentará de imediato os dados na janela Probe Watch durante a função execution highlight, passo a passo ou quando você interromper a execução em um breakpoint. Quando a execução for suspensa em um nó pelo uso da função Single Stepping ou por um breakpoint, você pode também usar um probe no fio que acabou de ser executado para ver o valor que passou por ele.

Aprenda os conceitos básicos do LabVIEW de uma nova maneira

Aprenda os conceitos do LabVIEW com nossa nova experiência interativa.

Continue seu aprendizado

Anterior Ferramentas de depuração no LabVIEW
Estruturas de execução Próxima