Objetivos

Trataremos aqui da construção, execução e depuração de programas com LabVIEW.

Introdução

Este post é uma continuação do post anterior, Programação com LabVIEW -1. Nele tratamos de conceitos gerais da programação com o LabVIEW e de como se apresentam os dados em LabVIEW.  Aqui trataremos da construção e da execução de um programa em LabVIEW e de como podemos acompanhar a execução e rastrear erros.

.

O ambiente LabVIEW

Os programas feitos em LabVIEW são desenvolvidos no ambiente gráfico do LabVIEW.  Cada programa em LabVIEW é construido em 2 janelas, que são: o painel frontal e o diagrama de blocos. Cada uma delas tem suas particulares paletas de ferramentas, que são acessíveis acionando-se o botão direito do mouse em cada uma dessas janelas. A figura 1 apresenta os menus mais utilizados em cada uma das janelas.

Figura 1- Paletas de ferramentas: a) do painel frontal; b) do diagrama de blocos

O ambiente do LabVIEW prevê diferentes tipos de apontador de mouse, um para cada tipo de função a ser executada no LabVIEW. A figura 2 mostra as diversas formas com que o apontador do mouse pode apresentar-se.

Figura 2 – Na parte de cima da figura: formatos do apontador do mouse, conforme a sua função. Todas essas apresentações de apontador do mouse são contextuais, exceto o caso de mudança de cor. Embaixo, o processo de conectar dois blocos no diagrama de blocos, através de um fio de conexão. Embaixo, à direita, a paleta de apontadores de mouses (Tools palette), mostrando o botão de modo automático.

O apontador do mouse pode ser selecionado manual ou automaticamente.  O default é o modo automático.  Entretanto, a seleção automática é válida somente para os casos  em que o contexto puder indicar qual o apontador válido (nesse caso o apontador é dito contextual , isot é, é definido pelo contexto). Por exemplo, o pincel e o conta-gotas não são definidos pelo contexto, pois podem ser usados em diversos lugares (contextos) em que se queira aplicar uma dada cor decorativa. Já o caso da função conectar (ver fig.2), é definida para contextos (locais) específicos: os terminais de um bloco e os fios de conexão, no diagrama de blocos.  Para se mudar manualmente o apontador, deve-se abrir a paleta de apontadores de mouses (Tools palette). Ela pode ser obtida do menu View >> Tools Palette  obtido na barra de menus da janela ou, usando-se o atalho de teclado e mouse  Shift-Menu (botão direito). Vide figura 3.

Figura 3 – Barra de menus da janela. Na versão 8 do LabVIEW, as opções são: File, Edit, View, Project, Operate, Tools, Window e Help. No exemplo acima, está sendo selecionada a opção View >> Tools Palette, que exibe a paleta de mouses (Tools Palette).

.

Construção de programas no LabVIEW

Os programas feitos em LabVIEW são visuais e são construidos na janela denominada diagrama de blocos (block diagram).

Quando se faz um programa em uma linguagem de programação textual, deve-se escrever uma ou mais linhas de programa contendo a instrução de programação, que é um operador que atua em um conjunto de variáveis e parâmetros (constantes) de entrada e fornece uma ou mais variáveis de saída calculadas pelo operador usando as entradas.

Em uma linguagem de programação visual, faz-se o mesmo, porém os operadores são representados pelos ícones dos blocos e as variáveis e parâmetros são dados pelos terminais do bloco, ao qual se ligam os “fios” (links).  A figura 4 compara os dois casos.

textual-visual

Figura 4 – a) Programação textual. b) Programação Visual

Em uma lingagem textual, a passagem de uma instrução para a seguinte se dá pela sequência de escrita do texto. Em algumas linguagens a passagem se faz mudando-se de uma linha para outra através de um caracter enter (carriage return). Em outras, usa-se um delimitador de linhas (por exemplo, em C e Java, usa-se ponto e vírgula no final da instrução).

Em uma linguagem visual, a passagem de uma instrução para outra é feita através dos links (“fios”de conexão) entre os blocos. Eles conduzem os resultados de uma saída do bloco anterior para uma entrada do bloco seguinte. A sequência de execução não mais é linear, como no caso textual. Cada bloco seguinte executa no momento em que todas as suas entradas já receberam seu dados para execução. Se  uma das entradas ainda não estiver pronta, com seus dados, o bloco não executa. Portanto, nesse caso quem define a sequência de execução é o fluxo dos dados entre os blocos. Esse modelo (paradigma) de programação denomina-se programação orientada pelo fluxo de dados (dataflow programing).

dataflow

Figura 5 – Monitoração do fluxo de dados durante a execução. O botão de execução contínua encontra-se à esquerda do botão de parada, em ambas janelas. O botão de monitoração da execução aparece apenas na janela do diagrama de blocos.

O LabVIEW é uma linguagem de programação visual tipo dataflow. Você pode visualizar o fluxo de dados executando continuamente um programa como o que está mostrado na figura 5, com a opção de monitoração da execução acionada. Para fazer isso, aperte o botão de execução contínua na barra de ferramentas e o botão de monitoração dos dados (ver fig. 5), na janela do diagrama de blocos.

A construção de um programa em LabVIEW consiste em:

  1. Especificar todas as entradas e saídas de dados do programa. A maior parte delas encontrar-se-á no painel frontal, por onde se opera o programa. O restante são dados provenientes de hardware acessado pelo programa ( placas de aquisição, mouse, teclado, microfone, alto-falantes, portas de comunicação, etc).
  2. Selecionar os blocos a serem utilizados em cada operação e conectá-los aos dados através dos fios (links).

A seleção dos blocos é feita procurando-se nas paletas de funções, como a mostrada na figura 1b. O funcionamento dos blocos é explicado resumidamente pela janela de ajuda contextual ( context help), mostrada na figura 6. Em muitos casos, nessa janela aparece um hiperlink apontando para uma página de ajuda (Help)  com mais detalhes (Detailed Help). Essas páginas de ajuda mais completas também podem ser obtidas buscando-se na barra de menus da janela, na entrada Help, como indicado na fig. 6.

help_contextual

Figura 6 – Helps do LabVIEW: há o help contextual, que se abre acionando-se o botão indicado acima ou digitando-se Ctrl-H; e há o help completo, obtido através do menu Help acima indicado.

.

Depuração de programas no LabVIEW

Depurar (em inglês: debug ) um programa consiste em identificar e corrigir os erros ( bugs ) existentes no programa.

Há dois tipos de erro:

  • erros sintáticos – são falhas na declaração ou construção das instruções. O LabVIEW detecta essas falhas automaticamente. Ele mostra as falhas pressionando-se o botão de exibição de erros ( show errors ) . Ver figura 7.
  • erros lógicos – são erros conceituais. São resultantes de um uso errôneo dos blocos ou uma concepção errada do que o programa deveria fazer. Esses erros devem ser detectados pelo usuário usando-se as técnicas de depuração.

debug-1a)

debug-2b)

Figura 7 – Exibição de erro sintático – a) Os 3 indicadores visuais de erro. Apontando-se com o mouse junto dos “fios quebrados”  e terminais com erros aparecem textos explicativos. A janela de help contextual também exibe o erro ao se apontar o mesmo com o mouse. O botão “run” (de execução) vira uma “seta quebrada” e torna-se o botão “Show errors“.  b) Acionando-se com o mouse o botão “Show errors”, abre-se a janela com a lista dos erros.  Selecionando-se um erro, os correspondentes detalhes são exibidos.

Os erros conceituais devem ser depurados através de técnicas de depuração, que consistem em monitorar as variáveis calculadas durante a execução do programa sob condições controladas. Esse procedimento denomina-se error tracing ou execution trace. Para fazê-lo pode-se utilizar os seguintes recursos:

  • Inserir breakpoints – Se você suspeita de uma região específica do programa, pode inserir um ponto de parada (breakpoint) que faz com que ao se executar o programa,  ele pare nesse ponto, entrando em pausa. Dessa forma você poderá  executar o programa passo a passo a partir desse ponto, monitorando a execução com os recursos que serão apresentados a seguir. O  botão continue / pause (ver figura  8.) permite retornar à execução automática a partir do ponto em que o programa estiver parado.  Para inserir um breakpoint, aponte com o mouse o “fio” onde quer interromper a execução e, usando o botão direito do mouse, selecione no menu Set breakpoint. Para removê-lo, use o mesmo menu selecionando Clear breakpoint.

debug-3a)

debug-6b)

Figura 8 – Uso de breakpoints. a) Inserindo um breakpoint. b) Execução passo a passo após alcançar um breakpoint. O bloco no qual a execução está parada fica piscando (flashing) aguardando uma ação (stepping ou continue).

  • Inserir probes – As probes são janelas para monitoração de variáveis específicas.As probes têm aspecto semelhante ao da variável a ser monitorada.  Assim, a probe para um array ou um cluster será também um array ou cluster respectivamente (experimente). Quem define  o tipo de probe é o tipo do “fio” na qual ela é criada. Para criar uma probe em um determinado fio, use o botão direito do mouse sobre esse fio e selecione no menu para inserir a probe (ver figura 9).  Para remover a probe, basta fechar sua respectiva janela. A probe é visível tanto no diagrama de blocos quanto no painel frontal.

probe

a)buttons-5-debug

b)

Figura 9 – a) Uso de probes. b) Apontadores de mouse nos modos de inserir breakpoint e probe. Pode-se selecionar esses mouses usando-se a paleta Tools (confrome explicado anteriormente).

  • Monitorar o fluxo de cálculo ( highlight execution ) – já examinamos esse processo na figura 5. Ele permite que, ao retomar a execução do programa após ela ter sido interrompida (pausada) ao se atingir um breakpoint, possa a partir de então examinar os detalhes do processo de cálculo, quer sob execução automática, ou execução passo-a-passo.
  • Executar o programa passo-a-passo ( step execution ) – quando a execução estiver em pausa, pode-se prossegui-la passo-a-passo, usando-se os botões mostrados na figura 10.  Basta is acionando repetidamente os botões mostrados na fig.10, para prosseguir passo-a-passo. Para retornar à execução automática, basta acionar o botão continue, mostrado na figura 8.

single-stepping

Figura 10 – Execução passo-a-passo (step execution) – O botão step into passa a execução para dentro do bloco que está piscando,  mostrando os detalhes de sua estrutura (abre o sub-vi em outra janela mostrando seu diagrama de blocos). Para sair de dentro do bloco, use o botão step out. Para executar o bloco completamente, sem mostrar seus detalhes passo -a-passo, use o botão step over. Quando um bloco estiver em execução step over ou quando ele não permitir a observação de seus detalhes internos, aparece sobre o bloco uma seta verde, como indicado à direita da figura.

  • Retenção dos valores nos fios após execução (retain wire values) – se você quiser examinar os valores calculados nos fios após uma execução ter terminado, deve acionar antes da execução o botão retain wire values (ver figura 11). Para examinar o valor em um fio, crie uma probe nele e ela mostrará o valor que foi retido.

buttons-2

Figura 11 – Botões para monitoração de valores nos fios