Estruturas de execução no LabVIEW

Incluído nesta seção

As estruturas de execução contêm partes de código gráfico e controlam como e quando esse código é executado.  As estruturas de execução mais comuns são loops While, loops For e estruturas Case. Você pode usá-las para repetir a execução de uma seção de código várias vezes ou para executar uma seção de código diferente, conforme alguma condição especificada.

 

Vídeo: Como criar loops no LabVIEW

Loops While

Similar a um loop Do ou loop Repeat-Until das linguagens de programação baseadas em texto, o loop While, mostrado na figura 1, executa o código nele contido até que uma determinada condição ocorra.

(1)  Loop While do LabVIEW  |  (2) Fluxograma  |  (3) Pseudocódigo

A figura 1 mostra um loop While no LabVIEW, juntamente com um fluxograma e
um exemplo de pseudocódigo equivalentes à sua função.

A função While Loop está localizada na paleta Programming>>Structures. Selecione o While Loop na paleta e use o cursor para arrastar um retângulo de seleção ao redor da seção do diagrama de blocos que você quer repetir. Quando você soltar o botão do mouse, um loop While será colocado ao redor da seção selecionada.

Para incluir objetos do diagrama de blocos no loop While, arraste esses objetos para dentro do loop.

O loop While executa o código que está dentro dele até que o terminal condicional, que é um terminal de entrada, receba um determinado valor booleano.

Você pode também realizar um tratamento básico de erros, usando o terminal condicional de um loop While. Quando você conecta um cluster de erro ao terminal condicional, somente o valor Verdadeiro ou Falso do parâmetro de status do cluster de erro é passado ao terminal. Além disso, os itens do menu de atalhos Stop if True e Continue if True são substituídos por Stop if Error e Continue while Error.


O terminal de iterações é um terminal de saída que contém o número de iterações concluídas.

A contagem de iterações para o loop While sempre começa em zero.

Observação: O loop While sempre é executado pelo menos uma vez.

Loops infinitos

Loops infinitos são erros de programação comuns, que provocam a execução sem fim de um loop.

Se o terminal condicional for Stop if True, coloque o terminal de um controle Boolean fora de um loop While. Se o controle for FALSO quando o loop for iniciado, você gerará um loop infinito.

Figura 2. Controle booleano fora do loop While

Alterar o valor do controle não interrompe o loop infinito, pois o valor é lido somente uma vez e isso ocorre antes do início do loop. Para que um controle possa interromper um loop While, é necessário colocar o terminal de controle dentro do loop.  Para interromper um loop infinito, será necessário abortar o VI, clicando no botão Abort Execution na barra de ferramentas.

Na figura 3, o loop While é executado até a saída da função de números aleatórios ser maior ou igual a 10,00 e o controle Enable estar no estado Verdadeiro. A função And somente responderá com o estado Verdadeiro se suas duas entradas estiverem no estado Verdadeiro. Caso contrário, ela responderá com Falso.

Na figura 3, temos um loop infinito, pois a função aleatória nunca vai gerar um valor igual ou superior a 10.

Figura 3. Loop infinito

Túneis nas estruturas

Túneis levam dados para dentro e para fora das estruturas. O túnel é mostrado como um bloco de cor sólida na borda do loop While. A cor do bloco dependerá do tipo de dados conectado ao túnel. Os dados são colocados na saída do loop assim que ele é concluído. Quando um túnel passa dados a um loop, o loop é executado somente após os dados terem chegado ao túnel.

Na figura 4, o terminal de iterações é conectado a um túnel. O valor no túnel somente é passado ao indicador de iterações quando o loop While conclui sua execução.

Figura 4. Túnel do loop While

Somente o último valor do terminal de iterações é mostrado no indicador "Iterations"

Loops For

lançado com o niBCVideo v1.1

Vídeo: Como utilizar loops no LabVIEW

Um loop For executa um subdiagrama por um número definido de vezes. A figura 5 mostra um loop For no LabVIEW, juntamente com um fluxograma e um exemplo de pseudocódigo equivalentes à sua função.

(1) Loop For do LabVIEW |  (2) Fluxograma  |  (3) Pseudocódigo

Figura 5. Loop For

A função For Loop está localizada na paleta Structures. Você pode também colocar um loop While no diagrama de blocos, clicar com o botão direito na borda deste loop While e selecionar Replace with For Loop no menu de atalhos, substituindo esse loop While por um loop For.


O terminal de contagem é um terminal de entrada cujo valor indica quantas vezes o subdiagrama será repetido.


O terminal de iterações é um terminal de saída que contém o número de iterações concluídas.

A contagem de iterações para o loop For sempre começa em zero.

A diferença entre as funções For Loop e While Loop é que o loop For é executado um número determinado de vezes. O loop While somente interromperá sua execução quando assim determinado pelo valor enviado ao terminal condicional.

O loop For mostrado na figura 6 gera um número aleatório a cada segundo durante 100 segundos e exibe os números aleatórios em um indicador numérico.

Figura 6. Exemplo de loop For

Como incluir temporização nos loops

Quando um loop termina de executar uma iteração, ele começa imediatamente a executar a próxima, a menos que tenha ocorrido sua condição de parada. Muitas vezes, você precisa controlar a frequência ou temporização da iteração. Por exemplo, se você estiver adquirindo dados e quiser adquirir esses dados somente a cada 10 segundos, precisará de uma maneira de temporizar as iterações do loop de forma que elas ocorram uma vez a cada 10 segundos. Mesmo se você não precisar que a execução ocorra a uma determinada frequência, será necessário dar ao processador o tempo necessário para que ele complete outras tarefas, como por exemplo, responder à interface do usuário.

Função Wait

Quando colocada no interior de um loop, a função Wait coloca o VI em hibernação por determinado intervalo de tempo. Isso permite que o seu processador cuide de outras tarefas durante o tempo de espera. As funções de espera utilizam o clock de milissegundos do sistema operacional.


A função Wait (ms) aguarda o contador de milissegundos contar um valor igual ao da entrada especificada por você. Essa função garante que a taxa de execução do loop será pelo menos igual ao valor de entrada especificado.

Estruturas Case

lançado com o niBCVideo v1.1

Vídeo: Como usar estruturas Case no LabVIEW


Uma estrutura Case tem dois ou mais subdiagramas, ou casos.

Somente um subdiagrama é mostrado na tela por vez, e a estrutura executa apenas um caso por vez. Um valor de entrada seleciona o subdiagrama a ser executado. A estrutura Case é similar a declarações de seleção ou comandos if...then...else das linguagens de programação baseadas em texto.


O seletor de caso, localizado na parte superior da estrutura Case, apresenta no centro o nome do valor de seletor que corresponde ao caso, além de setas de incremento e decremento de cada lado.

Clicando nas setas de decremento e incremento, você pode ver todos os casos disponíveis. Você pode também clicar na seta que aponta para baixo, ao lado do nome do caso, e selecionar um caso no menu aberto.


Conecte um valor de entrada, ou seletor, ao terminal do seletor para determinar qual caso será executado.

Você deve conectar um valor inteiro, booleano, string ou enumerado no terminal do seletor. Você pode também posicionar o terminal do seletor em qualquer local da borda da estrutura Case. Se o tipo de dados no terminal seletor for booleano, a estrutura terá um caso Verdadeiro e um caso Falso. Se o terminal seletor for um valor inteiro, string ou enumerado, a estrutura poderá ter qualquer quantidade de casos.

Observação: Por padrão, o terminal seletor diferencia maiúsculas e minúsculas nos valores de string conectados a ele. Para deixar de diferenciar maiúsculas de minúsculas, conecte um valor string ao terminal seletor, clique com o botão direito na borda da estrutura Case e selecione Case Insensitive Match no menu de atalho.

Se não especificar qual será o caso padrão da estrutura Case para valores não previstos, você deverá relacionar explicitamente cada valor de entrada possível. Por exemplo, se o seletor for um valor inteiro e você especificar casos para 1, 2 e 3, será necessário especificar um caso padrão a ser executado se o valor de entrada for 4 ou qualquer outro valor inteiro não especificado.

Observação: Você não poderá especificar um caso padrão se conectar um controle booleano ao seletor. Se clicar com o botão direito no título do seletor de caso, a opção Make This The Default Case não será exibida no menu de atalhos. Defina o controle booleano como VERDADEIRO ou FALSO para determinar qual será o caso a ser executado.

Clique com o botão direito na borda da estrutura Case para incluir, duplicar, remover ou reorganizar casos, além de selecionar um caso padrão.

Como selecionar um caso

A figura 7 mostra um VI que utiliza uma estrutura Case para executar códigos diferentes dependendo da unidade de medida de temperatura escolhida pelo usuário,°C ou °F. O diagrama de blocos de cima mostra o caso Verdadeiro em primeiro plano. No diagrama de blocos do meio, o caso Falso está selecionado. Para selecionar um caso, introduza o valor no identificador do seletor de casos ou use a ferramenta Labeling para editar os valores. Após ter selecionado outro caso, esse caso será exibido no diagrama de blocos, como mostrado no diagrama inferior da figura 7.

Figura 7. Como mudar o caso visualizado em uma estrutura Case

Se você introduzir um valor de seletor que não for do mesmo tipo que o objeto conectado ao terminal seletor, seu valor será mostrado na cor vermelha. Isso indica que você precisará apagar ou editar esse valor para que o VI possa ser executado. Além disso, como há a possibilidade de erros de arredondamento inerentes à aritmética de ponto flutuante, você não poderá usar números de ponto flutuante como valores para o seletor de caso. Se você conectar um valor de ponto flutuante ao seletor de caso, o LabVIEW arredondará o valor para o número inteiro mais próximo. Se digitar um valor de ponto flutuante no título do seletor de caso, o valor será mostrado em vermelho, para indicar que você precisará apagar ou editar esse valor para poder executar a estrutura.

Túneis de entrada e saída

Você pode criar vários túneis de entrada e saída em uma estrutura Case. As entradas estarão disponíveis para todos os casos, mas não será necessário que todas as entradas sejam utilizadas por todos os casos. Entretanto, você precisará definir um túnel de saída para cada um dos casos.

Veja o seguinte exemplo: uma estrutura Case no diagrama de blocos tem um túnel de saída, mas em pelo menos um dos casos não há valor de saída conectado ao túnel. Se você executar esse caso, o LabVIEW não saberá qual o valor que irá colocar na saída. O LabVIEW indica esse erro deixando o centro do túnel na cor branca. O caso desconectado pode não ser o caso mostrado no diagrama de blocos no momento.

Para corrigir esse erro, selecione o caso ou os casos que tiverem um túnel de saída desconectado e conecte uma saída a esse túnel. Você pode também clicar com o botão direito no túnel de saída e selecionar Use Default If Unwired no menu de atalhos. Com isso, você utilizará o valor padrão para o tipo de dados do túnel em todos os túneis desconectados. Quando a saída estiver conectada em todos os casos, o túnel de saída será mostrado em uma cor sólida.

Mas evite usar a opção Use Default If Unwired. O uso dessa opção não documenta bem o diagrama de blocos e pode confundir outros programadores que venham a utilizar o seu código. A opção Use Default If Unwired também dificulta a depuração do código. Se você for usar essa opção, lembre-se de que o valor padrão utilizado será o valor padrão do tipo de dados conectado ao túnel. Por exemplo, se o túnel utilizar dados booleanos, seu valor padrão será FALSO.

Tipo de dados Valor padrão
Numérico 0
Booleano FALSO
String vazia (“”)

Quadro 1. Valores padrão dos diferentes tipos de dados

Outras estruturas

O LabVIEW tem outros tipos de estruturas de execução mais avançadas, como estruturas Event (usadas para tratar de tarefas que trabalham com interrupções, como a interação com interfaces de usuário) e estruturas Sequence (usadas para forçar uma ordem de execução), que não serão descritas neste material introdutório. Para conhecer melhor essas estruturas, consulte o tópico correspondente no LabVIEW Help.

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 Estruturas de dados
Como enviar dados entre as iterações de um loop Próxima