Várias técnicas de programação no NI LabVIEW. Sistemas de controle automatizado de CPU e segurança industrial Então, o que é LabVIEW?

10.09.2021


NI LabVIEW - Ambiente de streaming programação gráfica. Ao escrever um programa em LabVIEW, o usuário define a sequência de operações de transformação do fluxo de dados usando um diagrama de blocos. As imagens são colocadas no diagrama de blocos unidades funcionais, conectados por condutores através dos quais o fluxo de dados passa de um nó para outro. Além disso, o LabVIEW possui uma série de ferramentas que violam o paradigma de programação de threads, porém, permitindo expandir significativamente a funcionalidade das aplicações nele desenvolvidas.

O que é uma técnica de programação

O termo “técnica de programação” combina uma seleção de diferentes linguagens de programação, modelos computacionais, níveis de abstração, métodos de trabalho com código e representação de algoritmos. Ao longo dos anos, a National Instruments desenvolveu a funcionalidade LabVIEW para fornecer suporte a uma ampla variedade de técnicas de programação.


Você pode apresentar código escrito usando diversas técnicas, bem como código de fluxo G em um diagrama de blocos, e o LabVIEW compilará instruções para os dispositivos de destino apropriados (PCs desktop comuns, plataformas RTOS, FPGAs, dispositivos móveis, dispositivos incorporados baseados em ARM)

Figura 1. Ampla gama de plataformas e técnicas de programação em LabVIEW



A transferência de dados entre seções de código escritas usando diferentes abordagens é organizada no LabVIEW de maneira muito simples - o fluxo de dados é o elo de ligação entre diferentes modelos e linguagens de computação. Na linguagem G, a entrada/saída de informações é realizada por meio de interface de usuário especializada (painel frontal), interfaces de rede, bibliotecas de análise, bancos de dados e outras ferramentas.

Programação em G
O advento da programação por streaming em 1986 foi verdadeiramente inovador. A sequência de execução das operações com dados na linguagem G é determinada não pela ordem em que ocorrem, mas pela presença de dados nas entradas desses nós. Operadores que não estão conectados por um fluxo de dados são executados em paralelo em ordem aleatória.

Os nós do diagrama representam instruções simples ou seus conjuntos - funções, dispositivos virtuais (VI). A execução das instruções do nó ocorre somente após os dados aparecerem em todos os terminais de entrada do nó. Após a execução das instruções, seu resultado é transmitido através dos terminais de saída do nó para as entradas dos nós seguintes.


Figura 2. Este exemplo adiciona A e B, multiplica a soma resultante por C e exibe o resultado


A Figura 2 mostra um exemplo de expressão matemática na linguagem G. O diagrama consiste em dois nós (adição e multiplicação) e três entradas (A, B e C). Primeiro, ocorre a adição de A e B. O código do nó de multiplicação não é executado até que os dados sejam recebidos em ambos os seus terminais de entrada e, portanto, aguarda o resultado do nó de adição. Assim que o resultado da adição chegar na primeira entrada do nó de multiplicação, seu código (A+B)*C será executado.

Apesar de a linguagem G permitir definir explicitamente o tipo de dados, uma das diferenças significativas entre esta linguagem e outras é a presença de condutores que executam funções de variáveis. Em vez de passar variáveis ​​entre funções, a transferência de dados é determinada por conexões de fios. Por outro lado, G também contém construções que são padrão em outras linguagens, como loops condicionais, loops contadores, estruturas de seleção, funções de retorno de chamada e funções lógicas.

Configuração interativa como base da programação
Em 2003, a National Instruments lançou o NI LabVIEW 7 Express, que introduziu a tecnologia Express Virtual Instruments (VII), uma tecnologia projetada para simplificar ainda mais o processo de desenvolvimento de algoritmos de aplicação. Ao contrário dos VIs regulares, os VIs expressos são estruturas de linguagem abstratas que implementam uma técnica de programação baseada na configuração interativa de componentes.


Figura 3. A paleta do Express VI, colocando o Express VI em um diagrama de blocos e exibindo o Express VI na visualização de ícones


Você pode distinguir um VP expresso de um VP normal pelo grande ícone azul. Na primeira vez que você coloca um Express VI em um diagrama de blocos, uma caixa de diálogo de personalização aparece. Após a conclusão da configuração, o LabVIEW gera automaticamente o código com base na configuração do Express VI que você criou. Você pode visualizar e editar este código ou alterar as configurações do Express VI reabrindo a caixa de diálogo clicando duas vezes no ícone do Express VI.

Como exemplo, considere a tarefa de inserir dados para análise de software. O LabVIEW torna a interface com uma variedade de hardware muito fácil porque inclui drivers para milhares de dispositivos. A tarefa de coletar dados pode ser implementada não apenas projetando vários VPs, mas também por uma opção mais simples - um VP expresso.

Basta especificar canais de leitura/gravação nas configurações do DAQ Assistance Express VI e configurar parâmetros como taxa de amostragem, escala, sincronização e triggers. Além disso, o Express VI oferece a capacidade de pré-coletar dados do dispositivo para verificar se as configurações de coleta de dados selecionadas estão corretas.


Figura 4. O DAQ Assistant Express VI facilita a configuração do tempo de disparo e dos parâmetros do canal



Figura 5. Código G equivalente ao DAQ Assistant Express VI


Apesar de todas as suas vantagens, os Express VIs não oferecem a possibilidade de controle e configuração de baixo nível do modo de operação do dispositivo, que é implementado por meio de dispositivos virtuais convencionais. Usuários novos no LabVIEW podem usar uma função integrada que converte um Express VI previamente configurado em uma sequência de VIs regulares. Isso pode ajudar os iniciantes a aprender código de baixo nível. Basta selecionar a linha Open Front Panel em menu de contexto Express VI em um diagrama de blocos. Deve-se notar que qualquer Express VI pode ser substituído por uma combinação de vários VIs regulares, e a versão LabVIEW Professional Development System permite que você crie seus próprios Express VIs.

Suporte para arquivos scripts.m
Com o módulo LabVIEW MathScript RT, você pode importar, editar e executar scripts de arquivo *.m tradicionalmente usados ​​em modelagem e análise matemática, processamento de sinais e cálculos matemáticos complexos. Você pode usá-los com código G para criar aplicativos independentes para desktop ou hardware em tempo real.

Existem diversas maneiras de trabalhar com MathScript no LabVIEW. Para trabalhar com scripts em modo interativo, utilize a janela MathScript mostrada na Fig. 6


Figura 6. Desenvolvimento interativo de algoritmos de texto na janela MathScript


Para usar scripts *.m em uma aplicação LabVIEW e combinar recursos de programação gráfica e de texto, você deve usar o nó MathScript, mostrado na Figura 7. Usar o nó MathScript permite implementar algoritmos de texto no código VI e usar os recursos gráficos da interface para controlar parâmetros de script (botões, controles deslizantes, controles, gráficos e outros elementos).


Figura 7. O nó MathScript facilita o uso de scripts .m em código G


O módulo LabVIEW MathScript RT possui seu próprio mecanismo de script *.m e não requer instalação de terceiros programas. Usar o nó MathScript permite combinar os benefícios dos algoritmos baseados em texto, o alto grau de integração de hardware do LabVIEW, uma interface de usuário interativa e outras técnicas de programação discutidas neste artigo em uma única aplicação.

Programação orientada a objetos
A programação orientada a objetos é um dos tipos de programação mais populares. Essa abordagem permite combinar muitos componentes diferentes em um programa em classes de objeto único. Uma definição de classe contém as características de um objeto e uma descrição das ações que o objeto pode executar, geralmente chamadas de propriedades e métodos. As classes podem ter filhos que herdam propriedades e métodos e podem substituí-los ou adicionar novos.


Figura 8. A abordagem orientada a objetos é baseada em classes (exemplo na imagem) e propriedades e funções associadas do VI


Usar OOP no LabVIEW tornou-se possível desde a versão 8.2

As principais vantagens desta abordagem são:

  • . Encapsulamento: Encapsulamento é o agrupamento de dados e métodos em uma classe de forma que eles só possam ser acessados ​​através de VIs que sejam membros da classe. Essa abordagem permite isolar seções de código e garantir que alterá-las não afetará o código no restante do programa.
  • . Herança: A herança permite usar classes existentes como base para definir novas classes. Quando uma nova classe é criada, ela herda os tipos de dados e os membros do VI da classe e, assim, implementa as propriedades e métodos da classe pai. Também é possível adicionar seus próprios VIs para alterar a funcionalidade da classe.
  • . Despacho dinâmico: A definição de métodos é possível usando vários VIs de mesmo nome na hierarquia de classes. Este método é denominado despacho dinâmico, pois a decisão sobre qual VI será chamado é feita na fase de execução do programa.
Esses recursos OOP permitem tornar o código mais compreensível e escalável e também, se necessário, limitar o acesso ao VI.

Modelagem e simulação
A modelagem e simulação de sistemas físicos é uma abordagem popular no desenvolvimento de sistemas descritos por equações diferenciais. O estudo do modelo permite identificar as características dos sistemas dinâmicos e desenvolver uma unidade de controle com o comportamento requerido.

A Figura 9 mostra o Control & Simulation Loop, que resolve uma equação diferencial usando algoritmos integrados ao LabVIEW em tempo real durante um determinado período de tempo. Esta abordagem de programação também é baseada em fluxo de dados, como a linguagem G, porém, geralmente é chamada de fluxo de sinal. Conforme mostrado na Figura 9, você pode combinar técnicas de modelagem matemática com outras técnicas, como G Data Streams e MathScript Node.


Arroz. 9. O diagrama de simulação mostra a propagação do sinal, o hardware de E/S e o nó MathScript.


O Loop de Controle e Simulação oferece suporte a funções usadas para implementar modelos de sistemas estacionários lineares em dispositivos que executam um sistema operacional em tempo real. Você pode usar essas funções para determinar modelos discretos especificando a função de transferência, diagrama de pólo zero e sistema de equações diferenciais. Ferramentas de análise no domínio do tempo e da frequência, como resposta ao intervalo de tempo ou gráfico de Bode, permitem analisar interativamente o comportamento de simulações/controles de malha aberta e fechada. Você também pode usar as ferramentas integradas de conversão de modelo desenvolvidas no ambiente de programação The MathWorks, Inc. Simulink®, o que permitirá sua utilização no ambiente LabVIEW. Esses sistemas dinâmicos podem ser instalados em dispositivos de sistema operacional de tempo real sem a necessidade de múltiplas etapas de conversão de programa, graças à funcionalidade da biblioteca LabVIEW Real-Time Module, que é ideal para desenvolver protótipos de sistemas de controle e aplicações de simulação de firmware.

Diagramas de estado
O módulo NI LabVIEW Statechart fornece ao desenvolvedor a capacidade de descrever a funcionalidade de um sistema da maneira mais abstrata possível usando diagramas de estado. A integração do código LabVIEW nos estados do diagrama permite criar uma especificação funcional real da aplicação. O módulo NI LabVIEW Statechart adiciona a capacidade de organizar o aninhamento hierárquico e a execução paralela à funcionalidade dos statecharts convencionais. Deve-se observar que os diagramas de estado permitem descrever como um sistema reage a eventos, o que os torna uma ferramenta muito útil para o desenvolvimento de sistemas reativos, como dispositivos embarcados, sistemas de controle e interfaces de usuário complexas.


Arroz. 10. O módulo LabVIEW Statechart descreve um sistema baseado em um diagrama de estado.


Muitas vezes, os statecharts são usados ​​para dividir uma aplicação em subsistemas, como aquisição de dados, saída de dados, comunicações de rede, registro de dados e gerenciamento de interface de usuário. Neste caso, os diagramas de estados definem quais informações são transferidas entre estados (subsistemas) e em que ordem elas operam.

A arquitetura de aplicativos baseada em statecharts permite desenvolver com mais eficiência sistemas de software, especialmente sistemas responsivos a eventos, como controladores de sistema dinâmicos, interfaces de usuário complexas e protocolos de comunicação digital.

VHDL para FPGA
O módulo LabVIEW FPGA permite usar a linguagem G para escrever código FPGA. Porém, como acontece com outras técnicas de desenvolvimento, você pode usar código previamente escrito ou simplesmente ter a opção de escolher como implementar o programa. A maioria dos FPGAs são programados usando a linguagem de programação de fluxo baseada em texto VHDL. Em vez de reescrever blocos IP existentes em G, você pode importar código VHDL usando um nó Component-Level IP (CLIP). Normalmente você precisa de um arquivo CLIP XML para configurar a interface entre os elementos do diagrama de blocos, mas o LabVIEW possui um CLIP Import Wizard que permite fazer isso automaticamente. Ele exibe uma lista de entradas e saídas do bloco IP, que pode ser arrastada com o mouse sobre o diagrama de blocos e utilizada na aplicação, conforme mostrado na Fig. 11.


Arroz. 11. Nó CLIP.


Como a NI usa FPGAs Xilinix e o conjunto de ferramentas de software Xilinx em um módulo LabVIEW FPGA, você pode usar o gerador de kernel Xilinx para criar um kernel compatível. Você também pode usar o Xilinx Embedded Development Kit para criar qualquer microprocessador de software. Finalmente, muitos desenvolvedores terceirizados fornecem vários tipos Blocos IP para gerenciamento de barramentos, processamento de sinais e núcleos específicos.

Integração de código semelhante a C
Você pode usar serial código de texto em seus VIs no diagrama de blocos em diversas versões. A primeira forma é o Formula Node, que suporta uma sintaxe semelhante à C, com definições de variáveis ​​e ponto e vírgula no final das linhas.

O Inline C Node é semelhante ao Formula Node e fornece recursos adicionais de programação de baixo nível e suporte a arquivos de cabeçalho sem a sobrecarga de chamadas de procedimento. Você pode usar o nó C embutido para incorporar qualquer código C, incluindo instruções #defines que estão sintaticamente entre parênteses no código C.

Interação com arquivos executáveis
Ao programar em LabVIEW, muitas vezes você precisa acessar arquivos e bibliotecas compilados de uma aplicação escrita em LabVIEW para reutilizar algoritmos previamente desenvolvidos em outros ambientes. Além disso, ao criar um projeto, você deve acessar aplicações escritas em LabVIEW a partir de outras aplicações.

O LabVIEW oferece uma ampla gama de ferramentas diferentes para resolver esses problemas. Primeiro, o LabVIEW pode chamar funções DLL, bem como usar interfaces ActiveX e .NET.

Segundo, uma aplicação escrita em LabVIEW pode fornecer sua funcionalidade para outra aplicação como uma DLL ou usando ferramentas ActiveX.

Caso você tenha código fonte C que deseja usar em sua aplicação LabVIEW, você pode compilar a DLL e conectá-la usando o nó Call Library Function. Por exemplo, você pode organizar cálculos paralelos usando algoritmos escritos em C, enquanto um programa escrito em LabVIEW gerencia os threads paralelos. Para facilitar o trabalho com bibliotecas externas, o LabVIEW possui um Import Shared Library Wizard que permite criar ou atualizar automaticamente um wrapper para chamar as bibliotecas apropriadas (arquivo .dll do Windows, arquivo .framework do Mac OS ou arquivo .so do Linux).

Além disso, usando System Exec.vi, você pode usar a interface linha de comando sistema operacional.

A combinação de diversas técnicas de programação em um ambiente de desenvolvimento possibilita o reaproveitamento de algoritmos desenvolvidos em outras linguagens. Além disso, o desenvolvedor pode combinar operações de alto e baixo nível em um aplicativo, tornando o código mais flexível e visual. Vários níveis de abstração permitem a visualização de algoritmos complexos, mantendo ao mesmo tempo um controle de baixo nível sobre o aplicativo e o hardware. Com forte integração de hardware, você pode usar ambas as abordagens para lidar com sinais em plataformas multi-core, FPGA e de processador incorporado.

Os problemas normalmente têm múltiplas soluções, e o ambiente de programação do LabVIEW é flexível o suficiente para permitir que você escolha a solução que melhor atende às suas necessidades.

Simulink® é uma marca registrada da The MathWorks, Inc.

ARM, Keil e µVision são marcas comerciais e marcas registradas da ARM Ltd ou de suas subsidiárias.



Quase todos os desenvolvedores de dispositivos microcontroladores, sejam amadores ou profissionais, mais cedo ou mais tarde precisam conectar um dispositivo microcontrolador ao seu “irmão mais velho”, ou seja, um PC. É aí que surge a dúvida: qual software devo utilizar para trocar com o microcontrolador, analisar e processar os dados dele recebidos? Muitas vezes, para trocar o MK por um computador, eles usam a interface e o protocolo RS232 - a boa e velha porta COM em uma implementação ou outra.

Do lado do computador, são utilizados vários programas de terminal, dos quais existem centenas. Mas esses programas fornecem apenas recepção e transmissão de informações. É difícil processá-lo e visualizá-lo de alguma forma de forma visual.

Alguns escrevem esse software de forma independente em alguma linguagem de programação (Delphi, C++), fornecendo a funcionalidade necessária. Mas essa tarefa não é fácil; é preciso conhecer, além da linguagem em si, a estrutura do sistema operacional, como trabalhar com portas de comunicação e muitas outras sutilezas técnicas que desviam a atenção do principal - a implementação do programa. algoritmo. Em geral, ser um programador Windows/Unix ao mesmo tempo.

O conceito de instrumentos virtuais (vi) difere nitidamente destas abordagens. Este artigo falará sobre produto de software LabView da Nationals Instruments. Estou apenas começando a dominar este produto maravilhoso, então posso cometer imprecisões e erros. Os especialistas irão corrigi-lo :-)) O que exatamente é o LabView?

LabView é um ambiente de desenvolvimento e plataforma para execução de programas escritos na linguagem de programação gráfica G. da National Instruments.

Falando em linguagem simples, LabView - É um ambiente de criação de aplicações para as tarefas de coleta, processamento, visualização de informações de diversos instrumentos, instalações laboratoriais, etc. E também para controlar processos e dispositivos tecnológicos. No entanto, usando o LabView você pode criar softwares aplicativos bastante comuns. Não tenho intenção de descrever este produto e trabalhar com ele em detalhes. Existem milhares de páginas de excelente documentação e centenas de livros escritos sobre LabView. A Internet está repleta de recursos dedicados ao LabView, onde você pode obter respostas para todas as suas dúvidas.

O objetivo do artigo é mostrar como é simples e conveniente, em comparação com a programação tradicional, criar aplicações para um PC e qual o poder do LabView. (Na verdade é discutível, porque na programação tradicional não é mais difícil fazer em Delphi. E em termos de eficiência dificilmente é pior, senão melhor. Mas para isso é preciso estudar Delphi por muito mais tempo. Tudo é rápido e limpei quase imediatamente o controle de irrigação e aquecimento para uma estufa de cânhamo Com todos os tipos de controladores PID levei para os potenciômetros e sensores do estande do laboratório que estava em nosso técnico e liguei essa unidade infernal. , sem depuração, todos os equipamentos do colisor de hádrons funcionam no LabView, e também muitos equipamentos científicos aprox. Afinal, a programação de PC é estranha para a maioria dos engenheiros eletrônicos, certo? Isso é o que tentaremos consertar. Para não estudar cavalos esféricos a vácuo, definiremos e implementaremos uma tarefa simples. A tarefa é muito simples, mas com base nela você poderá entender os princípios básicos da programação no LabView. Usaremos o LabView versão 2010. Para outras versões as diferenças serão mínimas.

Tarefa
Temos uma taxa com Microcontrolador AVR, conectado a um computador via RS232. O controlador é carregado com firmware, segundo o qual o controlador mede o valor da tensão em uma das entradas ADC e transmite o código ADC (de 0 a 1023) para o computador através de um canal serial. É necessário escrever um programa de PC que receba um fluxo de dados do ADC, exiba o código ADC, converta o código ADC em um valor de tensão em volts, exiba o valor de tensão em volts e represente graficamente a mudança de tensão ao longo do tempo.

Bem, provavelmente chega de letras, vamos começar!

Então, o que precisamos para trabalhar:

  • Na verdade, o próprio LabView. Você pode baixar a versão de teste no site da NI: http://www.ni.com/trylabview/. Também googles sem problemas versão pirata. Aliás, no rutracker.org, além de uma tonelada de piratas, há também uma versão para Linux para a qual o registro parece não ser necessário. A NI decidiu ir ao encontro do código aberto no meio do caminho?
  • Também é necessário baixar o componente NI VISA. Sem este programa, o LabView não “verá” a porta COM do computador. VISA contém funções para trabalhar com portas de comunicação e muito mais. Você pode baixá-lo em joule.ni.com. Instale LabView e VISA. A instalação deste software é padrão e não possui recursos especiais.

Em primeiro lugar, precisamos ter certeza de que o VISA encontrou uma porta COM no sistema e está funcionando corretamente. Você pode verificar isso assim: inicie o programa Measurement & Automation. Ele vem com LabView. Se não estiver instalado, você poderá instalá-lo manualmente. Está no disco (a imagem com LabView).

Obtemos algo assim:


Então, o que temos? A área de trabalho consiste em dois grandes painéis, Painel Frontal e Diagrama de Blocos. No painel frontal criaremos a interface do nosso programa usando os controles do painel Controles. Esses elementos representam as alças com as quais estamos acostumados resistores variáveis, LEDs, botões, instrumentos ponteiros, tela do osciloscópio, etc. Eles servem para inserir informações no programa e exibir os resultados da execução. O painel Diagrama de Blocos contém o próprio código do programa. Aqui precisamos recuar um pouco e explicar o princípio da programação no LabView. Um pequeno exemplo. É comum começar a trabalhar em um programa projetando a interface e depois implementando o algoritmo em um diagrama de blocos. Vamos fazer um programa simples para multiplicar dois números. Para fazer isso, colocaremos três controles no painel frontal arrastando-os, digamos, os elementos Knob e Numeric Indicator para exibir o resultado.

Ok, agora precisamos implementar a multiplicação real. Vamos ao painel Diagrama de blocos e vemos que um ícone correspondente foi criado para cada um de nossos controles. É melhor mudar imediatamente o modo de exibição para terminais. O diagrama não ficará tão confuso. Além disso, os terminais exibem o tipo de dados nos quais um determinado controle opera. Para fazer isso, clique com o botão direito no ícone e desmarque Exibir como ícone. Na parte superior da tela existe um controle em forma de terminal, na parte inferior e à direita em forma de ícone. Para configurar a visualização padrão do diagrama de blocos como terminais, você precisa selecionar o item de menu Ferramentas->Opções, selecionar Diagrama de blocos à esquerda e desmarcar Colocar terminais do painel frontal como ícones. É muito útil exibir ajuda contextual. Você pode exibi-lo usando a combinação Ctrl+H. Esta janela exibe informações sobre o objeto no qual o cursor está posicionado atualmente. Coisa mega conveniente.

O conceito mais importante na programação LabView é o conceito de DataFlows. A essência é esta: diferentemente das linguagens de programação imperativas, onde as instruções são executadas em ordem, no LabView as funções funcionam apenas se houver informações sobre todas as entradas da função (cada função possui valores de entrada e saída). Só então a função implementa seu algoritmo, e o resultado é enviado para a saída, que pode ser utilizada por outra função. Assim, dentro de um instrumento virtual, as funções podem operar independentemente umas das outras.

Agora, para dar vida ao nosso exemplo, precisamos seguir este conceito e alimentar as funções como entrada valores numéricos, que definimos por controles, obtemos o resultado da saída e o exibimos.

Para conectar elementos em um diagrama de blocos, use a ferramenta Connect Wire no painel Tools. Selecione-o e desenhe nossas conexões.

Como você pode ver, parece não haver nada complicado. Mas, ao mesmo tempo, o LabView permite resolver problemas de qualquer complexidade! Droga, o sistema de controle do TANK é feito nele! É isso.

Bem, agora vamos fazer coisas mais interessantes, ou seja, vamos fazer nosso voltímetro mais simples, do qual falei no início.

Então, o que precisamos fazer. Primeiro você precisa configurar e inicializar porta serial. Comece um loop infinito. No loop usamos a função de leitura da porta e recebemos as informações. Convertemos as informações para exibição no gráfico, recalculamos o código ADC em um valor de tensão em volts. Ao sair do loop, feche a porta.
Portanto, na interface do nosso programa não haverá elementos de controle exceto o botão Parar, mas apenas uma exibição do resultado. Faremos isso: primeiro criaremos um diagrama de blocos e depois adicionaremos os elementos que faltam à frente. painel. Embora você precise fazer o oposto! Mas neste caso é mais conveniente.

No painel do diagrama de blocos colocamos o elemento While Loop da paleta Structures, este é o nosso loop infinito. Desenhamos um quadro de loop em torno de uma área grande o suficiente para caber dentro do algoritmo. Há um ponto vermelho no canto inferior direito, clique com o botão direito nele e selecione Criar controle. Teremos imediatamente um botão Parar no painel frontal. Ao clicar nele, nosso programa terminará.

Você precisa criar controles para a função de inicialização da porta. Dois são suficientes para nós - velocidade da porta e nome da porta. Assim como criamos uma constante para a função de leitura, criamos controles. PCM nas entradas necessárias da função e item de inicialização

Criar->Controle.

Criar->Controle.

Estamos interessados ​​em duas entradas: Nome do recurso de visto E Taxa de transmissão(padrão 9600). Agora vamos ao painel frontal e adicionar os componentes necessários, nomeadamente a tela de desenho gráfico e rótulos para exibição do código ADC e tensão em volts.
Conseqüentemente, estes são elementos Waweform Chart da paleta Graph e dois elementos Numeric Indicator da paleta Numeric.

Vamos voltar ao diagrama de blocos e mover os elementos que aparecem dentro do loop. Estamos quase concluindo! A única coisa é que ainda precisamos converter a sequência de caracteres proveniente da saída da função Read para um formato que nossos indicadores possam digerir. E também implemente a matemática mais simples para converter o código ADC em volts. Abaixo estão capturas de tela do painel frontal e diagramas de blocos em nesta fase:



Para converter uma string, usaremos a função Scan from string da paleta String. Colocamos dentro do loop. Agora, para a matemática. Para converter o código ADC em um valor de tensão em volts, você precisa multiplicar o código pelo valor da tensão de referência (no meu caso é cinco volts) e dividir o valor resultante por 1023 (já que o ADC tem 10 largura de bits). Colocaremos as funções de multiplicação e divisão necessárias, bem como as constantes (5 e 1023) em um loop. Não farei capturas de tela de cada conexão, pois já existem muitas fotos. Darei a captura de tela final de todas as conexões. Tudo é extremamente simples lá.


Acho que está tudo claro, se tiver alguma dúvida pergunte nos comentários. Vamos descobrir juntos :-))) Enquanto isso, o programa está pronto.

Vamos para nossa interface e configurar um pouco o gráfico. Selecione o valor inferior ao longo do eixo Y e defina-o como 0. Selecione o valor superior e defina-o como 5. Assim, nossa escala ao longo do eixo Y está na faixa de 0-5 volts. Pois bem, selecionamos a porta COM, inserimos a taxa de transmissão, lançamos nosso programa usando o botão de seta e giramos furiosamente o resistor da placa, enquanto observamos livremente o resultado do nosso trabalho na tela. Clique no botão Parar para interromper o programa.

Você também pode combinar as peças em blocos funcionais para que não sobrecarreguem o diagrama.

Olá, colegas!

Em um artigo relativamente curto gostaria de falar sobre a linguagem de programação LabVIEW. Este produto muito interessante, infelizmente, não é muito popular e eu gostaria de preencher essa lacuna até certo ponto.

O que é LabVIEW?

LabVIEW é um dos principais produtos da National Instruments. Primeiramente, deve-se notar que LabVIEW é uma sigla que significa Laboratório oratório V virtual EU instrumentação E engenharia C banco de trabalho. Já no nome pode-se perceber o foco em pesquisas laboratoriais, medições e coleta de dados. Na verdade, construir um sistema SCADA em LabVIEW é um pouco mais fácil do que usar ferramentas de desenvolvimento “tradicionais”. Neste artigo eu gostaria de mostrar que o escopo possível do LabVIEW é um pouco mais amplo. Esta é uma linguagem de programação fundamentalmente diferente ou, se você quiser, toda uma “filosofia” de programação. Uma linguagem funcional que obriga você a pensar um pouco diferente e às vezes oferece oportunidades absolutamente fantásticas para o desenvolvedor. O LabVIEW é uma linguagem de programação? Esta é uma questão controversa - não existe um padrão aqui, como ANSI C. Em círculos estreitos de desenvolvedores, dizemos que escrevemos na linguagem “G”. Formalmente, tal linguagem não existe, mas esta é a beleza desta ferramenta de desenvolvimento: de versão para versão, mais e mais novas construções são introduzidas na linguagem. É difícil imaginar que a próxima reencarnação de C apresentará, por exemplo, uma nova estrutura para o loop for. E no LabVIEW isso é bem possível.
Porém, deve-se destacar que o LabVIEW está incluído na classificação de linguagens de programação TIOBE, ocupando atualmente o trigésimo lugar - algo entre Prolog e Fortran.

NI LabVIEW - história da criação

A National Instruments foi fundada em 1976 por três fundadores, Jeff Kodosky, James Truchard e Bill Nowlin, em Austin, Texas. A principal especialização da empresa foram ferramentas de medição e automação de produção.
A primeira versão do LabVIEW foi lançada dez anos após a fundação da empresa - em 1986 (era uma versão para AppleMac). Os engenheiros da NI decidiram desafiar as linguagens de programação “tradicionais” e criaram um ambiente de desenvolvimento totalmente gráfico. Jeff tornou-se o principal ideólogo da abordagem gráfica. Novas versões foram lançadas ano após ano. A primeira versão multiplataforma (incluindo Windows) foi a versão 3, lançada em 1993. A versão atual é a 8.6, lançada no ano passado.

A sede da empresa ainda hoje está localizada em Austin. Hoje a empresa emprega quase quatro mil pessoas e possui escritórios em quase quarenta países (há também um escritório na Rússia)

Minha introdução ao LabVIEW

Meu conhecimento do LabVIEW aconteceu há quase dez anos. Comecei a trabalhar com um novo contrato e meu então chefe me entregou uma pilha de CDs com os dizeres “agora você vai trabalhar nisso”. Instalei o LabVIEW (era a quinta versão), e depois de brincar um pouco, disse que nada sério poderia ser feito com ISSO, preferia fazer “à moda antiga” em Delphi... Ao que ele contou eu - você simplesmente ainda não experimentou. Trabalhe por uma ou duas semanas. Depois de um tempo entenderei que não poderei mais escrever em nada além do LabVIEW. Simplesmente me apaixonei por essa linguagem, embora não tenha sido “amor à primeira vista”.

De modo geral, é bastante difícil comparar linguagens de programação gráficas e textuais. Esta é, talvez, uma comparação como “PC” versus “MAC” ou “Windows” versus “Linux” - você pode argumentar o quanto quiser, mas o argumento é absolutamente sem sentido - todo sistema tem o direito de existir e cada um tem tanto apoiadores quanto oponentes. Além disso, cada produto possui seu nicho. LabVIEW é apenas uma ferramenta, embora muito flexível.

Então, o que é LabVIEW?

LabVIEW é um ambiente de desenvolvimento de aplicações gráficas multiplataforma. LabVIEW é, em princípio, uma linguagem de programação universal. Embora este produto às vezes esteja intimamente relacionado ao hardware da National Instruments, ele não está relacionado a uma máquina específica. Existem versões para Windows, Linux, MacOS. O código-fonte é portátil e os programas terão a mesma aparência em todos os sistemas. O código gerado pelo LabVIEW também pode ser executado no Windows Mobile ou PalmOS (para ser justo, deve-se notar que o suporte para PalmOS foi descontinuado, no entanto, o próprio Palm é o mais culpado aqui). Esta linguagem pode ser usada com sucesso para criar grandes sistemas, para processamento de textos, imagens e trabalho com bancos de dados.

LabVIEW é uma linguagem de altíssimo nível. Entretanto, nada impede você de incluir módulos de “baixo nível” em programas LabVIEW. Mesmo que você queira utilizar inserts em assembler, isso também é possível, bastando gerar uma DLL e inserir chamadas no código. Por outro lado, uma linguagem de alto nível permite executar facilmente operações não triviais com dados, que em uma linguagem regular poderiam ocupar muitas linhas (se não dezenas de linhas) de código. Porém, para ser justo, deve-se notar que algumas operações de linguagens de baixo nível (por exemplo, trabalhar com ponteiros) não são tão fáceis de implementar no LabVIEW devido à sua natureza de “alto nível”. É claro que a linguagem LabVIEW inclui construções de controle básicas que possuem análogos em linguagens “tradicionais”:

  • variáveis ​​(locais ou globais)
  • ramificação (estrutura de caso)
  • For – loops com e sem verificação de conclusão.
  • Enquanto - loops
  • Agrupamento de operações.

LabVIEW - recursos de programa e linguagem

No LabVIEW, os módulos de software que estão sendo desenvolvidos são chamados de “Instrumentos Virtuais” ou simplesmente VI. Eles são salvos em arquivos com extensão *.vi. VIs são os blocos de construção que compõem o programa LabVIEW. Todo programa LabVIEW contém pelo menos um VI. Em termos da linguagem C, você pode fazer uma analogia com segurança com uma função, com a única diferença de que no LabVIEW uma função está contida em um arquivo (você também pode criar bibliotecas de ferramentas). Nem é preciso dizer que um VI pode ser chamado de outro VI. Em princípio, cada VI consiste em duas partes – um Diagrama de Blocos e um Painel Frontal. O diagrama de blocos é o código do programa (mais precisamente, uma representação gráfica visual do código), e o Painel Frontal é a interface. Esta é a aparência de um exemplo clássico de Hello, World!

LabVIEW é baseado no paradigma de fluxo de dados. No exemplo acima, a constante e o terminal indicador estão conectados entre si por uma linha. Esta linha é chamada de Wire. Você pode chamá-lo de “fio”. Os fios transmitem dados de um elemento para outro. Todo esse conceito é chamado de Fluxo de Dados. A essência de um diagrama de blocos são os nós, as saídas de alguns nós são conectadas às entradas de outros nós. O nó iniciará a execução somente quando todos os dados necessários para a operação chegarem. Existem dois nós no diagrama acima. Um deles é uma constante. Este nó é independente – ele começa a ser executado imediatamente. O segundo nó é um indicador. Ele exibirá os dados que a constante transmite (mas não imediatamente, mas assim que os dados chegarem da constante).

Aqui está um exemplo um pouco mais complexo: adicionar e multiplicar dois números. Nas línguas tradicionais escreveríamos algo como

Int a, b, soma, mul;
//...
soma = a + b;
mul = a * b;

Aqui está o que parece no LabVIEW:

Observe que a adição e a multiplicação são realizadas automaticamente em paralelo. Em uma máquina com processador duplo, ambos os processadores serão usados ​​automaticamente.

E é assim que while / parece para laços e estrutura if/then/else:

Como já mencionado, todos os elementos serão executados em paralelo. Você não precisa pensar em como paralelizar uma tarefa em vários threads que podem ser executados em paralelo em vários processadores. EM versões mais recentes Você pode até especificar explicitamente em qual processador um loop while específico deve ser executado. Agora existem complementos para linguagens de texto que permitem obter facilmente suporte para sistemas multiprocessadores, mas isso provavelmente não é implementado em nenhum lugar tão facilmente quanto no LabVIEW. (bem, ainda comecei a comparar com idiomas de texto). Se já estamos falando de multithreading, devemos observar também que o desenvolvedor tem à sua disposição uma ampla seleção de ferramentas para sincronização de threads - semáforos, filas, rendezvous, etc.

O LabVIEW inclui conjuntos ricos de elementos para a construção de interfaces de usuário. As interfaces foram criadas rapidamente no Delphi, mas no LabVIEW esse processo acontece ainda mais rápido.

A entrega padrão do LabVIEW também inclui blocos para trabalhar com arquivos ini, registro, funções para trabalhar com arquivos binários e de teste, funções matemáticas, ferramentas poderosas para plotagem (e onde você estaria sem isso no laboratório), e além de A capacidade mencionada de chamar DLLs, o LabVIEW permite trabalhar com componentes ActiveX e .net. A partir da oitava versão, o suporte para classes foi adicionado ao LabVIEW - a linguagem passou a ser orientada a objetos. O suporte implementado não pode ser considerado completo, mas as principais características das linguagens orientadas a objetos - herança e polimorfismo - estão presentes. Além disso, a funcionalidade da linguagem pode ser expandida com módulos adicionais, por exemplo NI Vision Toolkit - para processamento de imagens e visão mecânica e outros. E usando o módulo Application Builder você pode gerar um arquivo exe executável. Usando o Internet Toolkit com o qual você pode trabalhar servidores FTP, usando o Database Connectivity Toolkit - com bancos de dados, etc.

Muitas vezes pode-se ouvir a opinião de que código gráfico Lemos mal. Na verdade, por hábito, a abundância de ícones e condutores é um tanto chocante. Os desenvolvedores novatos também criam programas de “folha” e programas de “espaguete”. Entretanto, um desenvolvedor experiente do LabVIEW nunca criará diagramas maiores que o tamanho da tela, mesmo que o programa consista em centenas de módulos. Um programa bem concebido é efetivamente “autodocumentado” porque já se baseia numa representação gráfica.

Por muito tempo, programando no LabVIEW, eu estava completamente confiante de que o LabVIEW era um intérprete e os diagramas de blocos eram constantemente interpretados pelo kernel. Depois de conversar com os engenheiros da NI, descobriu-se que não era esse o caso. LabVIEW é um compilador (a qualidade da geração de código, porém, deixa muito a desejar). Mas a compilação ocorre “on the fly” – a qualquer momento durante o desenvolvimento, o programa está sempre pronto para ser executado. O código do LabVIEW também pode ser compilado em um arquivo executável completo que pode ser executado em um computador sem o LabVIEW instalado (embora exija o LabVIEW Run-Time). Você também pode montar um pacote de instalação de instalação, utilitários de terceiros o tipo InstallShield não é necessário.

Mais e mais descrição detalhada Os recursos do pacote estão além do escopo deste artigo, mas simplesmente sugiro experimentá-lo (os links são fornecidos abaixo). Como disseram os grandes, “... a única maneira de dominar uma nova linguagem de programação é escrever programas nela”. Bem, programadores experientes serão capazes de extrapolar o conhecimento adquirido para suas próprias necessidades.

Quase todos os desenvolvedores de dispositivos microcontroladores, sejam amadores ou profissionais, mais cedo ou mais tarde precisam conectar um dispositivo microcontrolador ao seu “irmão mais velho”, ou seja, um PC. É aí que surge a dúvida: qual software devo utilizar para trocar com o microcontrolador, analisar e processar os dados dele recebidos? Muitas vezes, para trocar um MK por um computador, eles usam a interface e o protocolo RS232 - a boa e velha porta COM em uma implementação ou outra.

Do lado do computador, são utilizados vários programas de terminal, dos quais existem centenas. Mas esses programas fornecem apenas recepção e transmissão de informações. É difícil processá-lo e visualizá-lo de alguma forma de forma visual.

Alguns escrevem esse software de forma independente em alguma linguagem de programação (Delphi, C++), fornecendo a funcionalidade necessária. Mas essa tarefa não é fácil; é preciso conhecer, além da linguagem em si, a estrutura do sistema operacional, como trabalhar com portas de comunicação e muitas outras sutilezas técnicas que desviam a atenção do principal - a implementação do programa. algoritmo. Em geral, ser um programador Windows/Unix ao mesmo tempo.

O conceito de instrumentos virtuais (vi) difere nitidamente destas abordagens. Este artigo discutirá o produto de software LabView da Nationals Instruments. Estou apenas começando a dominar este produto maravilhoso, então posso cometer imprecisões e erros. Os especialistas irão corrigi-lo :-)) O que exatamente é o LabView?

LabView é um ambiente de desenvolvimento e plataforma para execução de programas escritos na linguagem de programação gráfica G da National Instruments.

Em termos simples, LabView é um ambiente de criação de aplicações para as tarefas de coleta, processamento, visualização de informações de diversos instrumentos, instalações laboratoriais, etc. E também para controlar processos e dispositivos tecnológicos. No entanto, usando o LabView você pode criar softwares aplicativos bastante comuns. Não tenho intenção de descrever este produto e trabalhar com ele em detalhes. Existem milhares de páginas de excelente documentação e centenas de livros escritos sobre LabView. A Internet está repleta de recursos dedicados ao LabView, onde você pode obter respostas para todas as suas dúvidas.

O objetivo do artigo é mostrar como é simples e conveniente, em comparação com a programação tradicional, criar aplicações para um PC e qual o poder do LabView. (Na verdade é discutível, porque na programação tradicional não é mais difícil fazer em Delphi. E em termos de eficiência dificilmente é pior, senão melhor. Mas para isso é preciso estudar Delphi por muito mais tempo. Tudo é rápido e limpei quase imediatamente o controle de irrigação e aquecimento para uma estufa de cânhamo Com todos os tipos de controladores PID levei para os potenciômetros e sensores do estande do laboratório que estava em nosso técnico e liguei essa unidade infernal. , sem depuração, todos os equipamentos do colisor de hádrons funcionam no LabView, e também muitos equipamentos científicos aprox. Afinal, a programação de PC é estranha para a maioria dos engenheiros eletrônicos, certo? Isso é o que tentaremos consertar. Para não estudar cavalos esféricos a vácuo, definiremos e implementaremos uma tarefa simples. A tarefa é muito simples, mas com base nela você poderá entender os princípios básicos da programação no LabView. Usaremos o LabView versão 2010. Para outras versões as diferenças serão mínimas.

Tarefa
Temos uma placa com microcontrolador AVR conectado a um computador via RS232. O controlador é carregado com firmware, segundo o qual o controlador mede o valor da tensão em uma das entradas ADC e transmite o código ADC (de 0 a 1023) para o computador através de um canal serial. É necessário escrever um programa de PC que receba um fluxo de dados do ADC, exiba o código ADC, converta o código ADC em um valor de tensão em volts, exiba o valor de tensão em volts e represente graficamente a mudança de tensão ao longo do tempo.

Bem, provavelmente chega de letras, vamos começar!

Então, o que precisamos para trabalhar:

  • Na verdade, o próprio LabView. Você pode baixar a versão de teste no site da NI: http://www.ni.com/trylabview/. A versão pirata também pode ser pesquisada no Google sem problemas. Aliás, no rutracker.org, além de uma tonelada de piratas, há também uma versão para Linux para a qual o registro parece não ser necessário. A NI decidiu ir ao encontro do código aberto no meio do caminho?
  • Também é necessário baixar o componente NI VISA. Sem este programa, o LabView não “verá” a porta COM do computador. VISA contém funções para trabalhar com portas de comunicação e muito mais. Você pode baixá-lo em joule.ni.com. Instale LabView e VISA. A instalação deste software é padrão e não possui recursos especiais.

Em primeiro lugar, precisamos ter certeza de que o VISA encontrou uma porta COM no sistema e está funcionando corretamente. Você pode verificar isso assim: inicie o programa Measurement & Automation. Ele vem com LabView. Se não estiver instalado, você poderá instalá-lo manualmente. Está no disco (a imagem com LabView).

No lado esquerdo da janela vemos os equipamentos detectados no sistema. Entre outras coisas, encontramos a nossa porta COM. À direita há um botão Painel de teste Open Visa. Com ele você pode testar o dispositivo selecionado. No caso de uma porta COM, você pode enviar ou receber uma sequência de caracteres padrão ou arbitrária. Se tudo estiver em ordem com a porta, podemos prosseguir diretamente para a criação do nosso programa.

Inicie o LabView. Na janela Primeiros passos, selecione o item Blank Vi para criar um novo dispositivo virtual.

Obtemos algo assim:

Então, o que temos? A área de trabalho consiste em dois grandes painéis, Painel Frontal e Diagrama de Blocos. No painel frontal criaremos a interface do nosso programa usando os controles do painel Controles. Esses elementos são os familiares botões de resistor variável, LEDs, botões, instrumentos ponteiros, tela do osciloscópio, etc. Eles servem para inserir informações no programa e exibir os resultados da execução. O painel Diagrama de Blocos contém o próprio código do programa. Aqui precisamos recuar um pouco e explicar o princípio da programação no LabView. Um pequeno exemplo. É comum começar a trabalhar em um programa projetando a interface e depois implementando o algoritmo em um diagrama de blocos. Vamos fazer um programa simples para multiplicar dois números. Para fazer isso, colocaremos três controles no painel frontal arrastando-os, digamos, os elementos Knob e Numeric Indicator para exibir o resultado.

Vamos criar a interface como desejar, por exemplo assim:

Ok, agora precisamos implementar a multiplicação real. Vamos ao painel Diagrama de blocos e vemos que um ícone correspondente foi criado para cada um de nossos controles. É melhor mudar imediatamente o modo de exibição para terminais. O diagrama não ficará tão confuso. Além disso, os terminais exibem o tipo de dados nos quais um determinado controle opera. Para fazer isso, clique com o botão direito no ícone e desmarque Exibir como ícone. Na parte superior da tela existe um controle em forma de terminal, na parte inferior e à direita em forma de ícone. Para configurar a visualização padrão do diagrama de blocos como terminais, você precisa selecionar o item de menu Ferramentas->Opções, selecionar Diagrama de blocos à esquerda e desmarcar Colocar terminais do painel frontal como ícones. É muito útil exibir ajuda contextual. Você pode exibi-lo usando a combinação Ctrl+H. Esta janela exibe informações sobre o objeto no qual o cursor está posicionado atualmente. Coisa mega conveniente.

Agora precisamos adicionar uma função de multiplicação ao diagrama de blocos. Clique com o botão direito no diagrama de blocos e selecione a função Multiplicar na paleta Numérica. Vamos colocar no diagrama. É importante notar que o LabView possui um conjunto simplesmente enorme de funções. Isso inclui diversas matemáticas, estatísticas, análise de sinais, regulação PID, processamento de vídeo, som e imagem. Você não pode listar tudo.

O conceito mais importante na programação LabView é o conceito de DataFlows. A essência é esta: diferentemente das linguagens de programação imperativas, onde as instruções são executadas em ordem, no LabView as funções funcionam apenas se houver informações sobre todas as entradas da função (cada função possui valores de entrada e saída). Só então a função implementa seu algoritmo, e o resultado é enviado para a saída, que pode ser utilizada por outra função. Assim, dentro de um instrumento virtual, as funções podem operar independentemente umas das outras.

Agora, para reviver nosso exemplo, precisamos seguir este conceito e alimentar a entrada da função com os valores numéricos que definimos com os controles, e obter o resultado da saída e exibi-lo.

Para conectar elementos em um diagrama de blocos, use a ferramenta Connect Wire no painel Tools. Selecione-o e desenhe nossas conexões.

Só isso, você pode rodar esse programa estúpido para execução cíclica e girar os botões, observando o resultado da multiplicação.

Como você pode ver, parece não haver nada complicado. Mas, ao mesmo tempo, o LabView permite resolver problemas de qualquer complexidade! Droga, o sistema de controle do TANK é feito nele! É isso.

Bem, agora vamos fazer coisas mais interessantes, ou seja, vamos fazer nosso voltímetro mais simples, do qual falei no início.

Então, o que precisamos fazer. Primeiro você precisa configurar e inicializar a porta serial. Comece um loop infinito. No loop usamos a função de leitura da porta e recebemos as informações. Convertemos as informações para exibição no gráfico, recalculamos o código ADC em um valor de tensão em volts. Ao sair do loop, feche a porta.
Portanto, na interface do nosso programa não haverá elementos de controle exceto o botão Parar, mas apenas uma exibição do resultado. Faremos isso: primeiro criaremos um diagrama de blocos e depois adicionaremos os elementos que faltam à frente. painel. Embora você precise fazer o oposto! Mas neste caso é mais conveniente.

No painel do diagrama de blocos colocamos o elemento While Loop da paleta Structures, este é o nosso loop infinito. Desenhamos um quadro de loop em torno de uma área grande o suficiente para caber dentro do algoritmo. Há um ponto vermelho no canto inferior direito, clique com o botão direito nele e selecione Criar controle. Teremos imediatamente um botão Parar no painel frontal. Ao clicar nele, nosso programa terminará.

Agora fora do loop devemos colocar as funções de inicialização e fechamento da porta. À esquerda está a inicialização, à direita está o fechamento. Novamente, clique com o botão direito e selecione as funções Configurar Porta, Ler e Fechar. Essas funções estão localizadas na paleta Instrument I/O –> Serial. Colocamos a função de leitura dentro do loop. Conectamos as saídas e entradas das funções por meio de uma bobina de fios. Para a função Read, devemos especificar o número de bytes que ela receberá. Clique com o botão direito na entrada central da função Read e selecione Criar->Constante, insira um valor, por exemplo 200. Neste estágio, deve se parecer com a captura de tela.

Você precisa criar controles para a função de inicialização da porta. Dois são suficientes para nós - velocidade da porta e nome da porta. Assim como criamos uma constante para a função de leitura, criamos controles. PCM nas entradas necessárias da função e item de inicialização

Criar->Controle.

Estamos interessados ​​em duas entradas: Nome do recurso de visto E Taxa de transmissão(padrão 9600). Agora vamos ao painel frontal e adicionar os componentes necessários, nomeadamente a tela de desenho gráfico e rótulos para exibição do código ADC e tensão em volts.
Conseqüentemente, estes são elementos Waweform Chart da paleta Graph e dois elementos Numeric Indicator da paleta Numeric.

Vamos voltar ao diagrama de blocos e mover os elementos que aparecem dentro do loop. Estamos quase concluindo! A única coisa é que ainda precisamos converter a sequência de caracteres proveniente da saída da função Read para um formato que nossos indicadores possam digerir. E também implemente a matemática mais simples para converter o código ADC em volts. Abaixo estão as capturas de tela do painel frontal e diagramas de blocos nesta fase:

Para converter uma string, usaremos a função Scan from string da paleta String. Colocamos dentro do loop. Agora, para a matemática. Para converter o código ADC em um valor de tensão em volts, você precisa multiplicar o código pelo valor da tensão de referência (no meu caso é cinco volts) e dividir o valor resultante por 1023 (já que o ADC tem 10 largura de bits). Colocaremos as funções de multiplicação e divisão necessárias, bem como as constantes (5 e 1023) em um loop. Não farei capturas de tela de cada conexão, pois já existem muitas fotos. Darei a captura de tela final de todas as conexões. Tudo é extremamente simples lá.

Acho que está tudo claro, se tiver alguma dúvida pergunte nos comentários. Vamos descobrir juntos :-))) Enquanto isso, o programa está pronto.

Vamos para nossa interface e configurar um pouco o gráfico. Selecione o valor inferior ao longo do eixo Y e defina-o como 0. Selecione o valor superior e defina-o como 5. Assim, nossa escala ao longo do eixo Y está na faixa de 0-5 volts. Pois bem, selecionamos a porta COM, inserimos a taxa de transmissão, lançamos nosso programa usando o botão de seta e giramos furiosamente o resistor da placa, enquanto observamos livremente o resultado do nosso trabalho na tela. Clique no botão Parar para interromper o programa.

Como você pode ver, tudo é bem simples. Este exemplo Esta é apenas uma pequena parte de todas as capacidades do LabView. Se este artigo ajudar alguém, ficarei feliz. Só não me bata muito nos comentários, não sou profissional. Outro pequeno truque. Se o diagrama se parecer com Cthulhu, você pode tentar usar o botão CleanUp Diagram. Isso dará ao diagrama uma forma mais ou menos divina, mas deve ser usado com cuidado. Aqui está o resultado do trabalho dela

Você também pode combinar as peças em blocos funcionais para que não sobrecarreguem o diagrama.

Olá, colegas!

Em um artigo relativamente curto gostaria de falar sobre a linguagem de programação LabVIEW. Este produto muito interessante, infelizmente, não é muito popular e eu gostaria de preencher essa lacuna até certo ponto.

O que é LabVIEW?

LabVIEW é um dos principais produtos da National Instruments. Primeiramente, deve-se notar que LabVIEW é uma sigla que significa Laboratório oratório V virtual EU instrumentação E engenharia C banco de trabalho. Já no nome pode-se perceber o foco em pesquisas laboratoriais, medições e coleta de dados. Na verdade, construir um sistema SCADA em LabVIEW é um pouco mais fácil do que usar ferramentas de desenvolvimento “tradicionais”. Neste artigo eu gostaria de mostrar que o escopo possível do LabVIEW é um pouco mais amplo. Esta é uma linguagem de programação fundamentalmente diferente ou, se você quiser, toda uma “filosofia” de programação. Uma linguagem funcional que obriga você a pensar um pouco diferente e às vezes oferece oportunidades absolutamente fantásticas para o desenvolvedor. O LabVIEW é uma linguagem de programação? Esta é uma questão controversa - não existe um padrão aqui, como ANSI C. Em círculos estreitos de desenvolvedores, dizemos que escrevemos na linguagem “G”. Formalmente, tal linguagem não existe, mas esta é a beleza desta ferramenta de desenvolvimento: de versão para versão, mais e mais novas construções são introduzidas na linguagem. É difícil imaginar que a próxima reencarnação de C apresentará, por exemplo, uma nova estrutura para o loop for. E no LabVIEW isso é bem possível.
Porém, deve-se destacar que o LabVIEW está incluído na classificação de linguagens de programação TIOBE, ocupando atualmente o trigésimo lugar - algo entre Prolog e Fortran.

NI LabVIEW - história da criação

A National Instruments foi fundada em 1976 por três fundadores, Jeff Kodosky, James Truchard e Bill Nowlin, em Austin, Texas. A principal especialização da empresa foram ferramentas de medição e automação de produção.
A primeira versão do LabVIEW foi lançada dez anos após a fundação da empresa - em 1986 (era uma versão para Apple Mac). Os engenheiros da NI decidiram desafiar as linguagens de programação “tradicionais” e criaram um ambiente de desenvolvimento totalmente gráfico. Jeff tornou-se o principal ideólogo da abordagem gráfica. Novas versões foram lançadas ano após ano. A primeira versão multiplataforma (incluindo Windows) foi a versão 3, lançada em 1993. A versão atual é a 8.6, lançada no ano passado.

A sede da empresa ainda hoje está localizada em Austin. Hoje a empresa emprega quase quatro mil pessoas e possui escritórios em quase quarenta países (há também um escritório na Rússia)

Minha introdução ao LabVIEW

Meu conhecimento do LabVIEW aconteceu há quase dez anos. Comecei a trabalhar com um novo contrato e meu então chefe me entregou uma pilha de CDs com os dizeres “agora você vai trabalhar nisso”. Instalei o LabVIEW (era a quinta versão), e depois de brincar um pouco, disse que nada sério poderia ser feito com ISSO, preferia fazer “à moda antiga” em Delphi... Ao que ele contou eu - você simplesmente ainda não experimentou. Trabalhe por uma ou duas semanas. Depois de um tempo entenderei que não poderei mais escrever em nada além do LabVIEW. Simplesmente me apaixonei por essa linguagem, embora não tenha sido “amor à primeira vista”.

De modo geral, é bastante difícil comparar linguagens de programação gráficas e textuais. Esta é, talvez, uma comparação como “PC” versus “MAC” ou “Windows” versus “Linux” - você pode argumentar o quanto quiser, mas o argumento é absolutamente sem sentido - todo sistema tem o direito de existir e cada um tem tanto apoiadores quanto oponentes. Além disso, cada produto possui seu nicho. LabVIEW é apenas uma ferramenta, embora muito flexível.

Então, o que é LabVIEW?

LabVIEW é um ambiente de desenvolvimento de aplicações gráficas multiplataforma. LabVIEW é, em princípio, uma linguagem de programação universal. Embora este produto às vezes esteja intimamente relacionado ao hardware da National Instruments, ele não está relacionado a uma máquina específica. Existem versões para Windows, Linux, MacOS. O código-fonte é portátil e os programas terão a mesma aparência em todos os sistemas. O código gerado pelo LabVIEW também pode ser executado no Windows Mobile ou PalmOS (para ser justo, deve-se notar que o suporte para PalmOS foi descontinuado, no entanto, o próprio Palm é o mais culpado aqui). Esta linguagem pode ser utilizada com sucesso para criar grandes sistemas de processamento de textos, imagens e trabalho com bancos de dados.

LabVIEW é uma linguagem de altíssimo nível. Entretanto, nada impede você de incluir módulos de “baixo nível” em programas LabVIEW. Mesmo que você queira utilizar inserts em assembler, isso também é possível, bastando gerar uma DLL e inserir chamadas no código. Por outro lado, uma linguagem de alto nível permite executar facilmente operações não triviais com dados, que em uma linguagem regular poderiam ocupar muitas linhas (se não dezenas de linhas) de código. Porém, para ser justo, deve-se notar que algumas operações de linguagens de baixo nível (por exemplo, trabalhar com ponteiros) não são tão fáceis de implementar no LabVIEW devido à sua natureza de “alto nível”. É claro que a linguagem LabVIEW inclui construções de controle básicas que possuem análogos em linguagens “tradicionais”:

  • variáveis ​​(locais ou globais)
  • ramificação (estrutura de caso)
  • For – loops com e sem verificação de conclusão.
  • Enquanto - loops
  • Agrupamento de operações.

LabVIEW - recursos de programa e linguagem

No LabVIEW, os módulos de software que estão sendo desenvolvidos são chamados de “Instrumentos Virtuais” ou simplesmente VI. Eles são salvos em arquivos com extensão *.vi. VIs são os blocos de construção que compõem o programa LabVIEW. Todo programa LabVIEW contém pelo menos um VI. Em termos da linguagem C, você pode fazer uma analogia com segurança com uma função, com a única diferença de que no LabVIEW uma função está contida em um arquivo (você também pode criar bibliotecas de ferramentas). Nem é preciso dizer que um VI pode ser chamado de outro VI. Em princípio, cada VI consiste em duas partes – um Diagrama de Blocos e um Painel Frontal. O diagrama de blocos é o código do programa (mais precisamente, uma representação gráfica visual do código), e o Painel Frontal é a interface. Esta é a aparência de um exemplo clássico de Hello, World!

LabVIEW é baseado no paradigma de fluxo de dados. No exemplo acima, a constante e o terminal indicador estão conectados entre si por uma linha. Esta linha é chamada de Wire. Você pode chamá-lo de “fio”. Os fios transmitem dados de um elemento para outro. Todo esse conceito é chamado de Fluxo de Dados. A essência de um diagrama de blocos são os nós, as saídas de alguns nós são conectadas às entradas de outros nós. O nó iniciará a execução somente quando todos os dados necessários para a operação chegarem. Existem dois nós no diagrama acima. Um deles é uma constante. Este nó é independente – ele começa a ser executado imediatamente. O segundo nó é um indicador. Ele exibirá os dados que a constante transmite (mas não imediatamente, mas assim que os dados chegarem da constante).

Aqui está um exemplo um pouco mais complexo: adicionar e multiplicar dois números. Nas línguas tradicionais escreveríamos algo como

Int a, b, soma, mul;
//...
soma = a + b;
mul = a * b;

Aqui está o que parece no LabVIEW:

Observe que a adição e a multiplicação são realizadas automaticamente em paralelo. Em uma máquina com processador duplo, ambos os processadores serão usados ​​automaticamente.

E aqui está a aparência dos loops while / for e da estrutura if / then / else:

Como já mencionado, todos os elementos serão executados em paralelo. Você não precisa pensar em como paralelizar uma tarefa em vários threads que podem ser executados em paralelo em vários processadores. Nas versões mais recentes, você pode até especificar explicitamente em qual processador um loop while específico deve ser executado. Agora existem complementos para linguagens de texto que permitem obter facilmente suporte para sistemas multiprocessadores, mas isso provavelmente não é implementado em nenhum lugar tão facilmente quanto no LabVIEW. (bem, ainda comecei a comparar com idiomas de texto). Se já estamos falando de multithreading, devemos observar também que o desenvolvedor tem à sua disposição uma ampla seleção de ferramentas para sincronização de threads - semáforos, filas, rendezvous, etc.

O LabVIEW inclui conjuntos ricos de elementos para a construção de interfaces de usuário. As interfaces foram criadas rapidamente no Delphi, mas no LabVIEW esse processo acontece ainda mais rápido.

A entrega padrão do LabVIEW também inclui blocos para trabalhar com arquivos ini, registro, funções para trabalhar com arquivos binários e de teste, funções matemáticas, ferramentas poderosas para plotagem (e onde você estaria sem isso no laboratório), e além de A capacidade mencionada de chamar DLLs, o LabVIEW permite trabalhar com componentes ActiveX e .net. A partir da oitava versão, o suporte para classes foi adicionado ao LabVIEW - a linguagem passou a ser orientada a objetos. O suporte implementado não pode ser considerado completo, mas as principais características das linguagens orientadas a objetos - herança e polimorfismo - estão presentes. Além disso, a funcionalidade da linguagem pode ser expandida com módulos adicionais, por exemplo NI Vision Toolkit - para processamento de imagens e visão computacional e outros. E usando o módulo Application Builder você pode gerar um arquivo exe executável. Usando o Internet Toolkit você pode trabalhar com servidores FTP, usando o Database Connectivity Toolkit - com bancos de dados, etc.

Muitas vezes você pode ouvir a opinião de que o código gráfico é difícil de ler. Na verdade, por hábito, a abundância de ícones e condutores é um tanto chocante. Os desenvolvedores novatos também criam programas de “folha” e programas de “espaguete”. Entretanto, um desenvolvedor experiente do LabVIEW nunca criará diagramas maiores que o tamanho da tela, mesmo que o programa consista em centenas de módulos. Um programa bem concebido é efetivamente “autodocumentado” porque já se baseia numa representação gráfica.

Por muito tempo, programando no LabVIEW, eu estava completamente confiante de que o LabVIEW era um intérprete e os diagramas de blocos eram constantemente interpretados pelo kernel. Depois de conversar com os engenheiros da NI, descobriu-se que não era esse o caso. LabVIEW é um compilador (a qualidade da geração de código, porém, deixa muito a desejar). Mas a compilação ocorre “on the fly” – a qualquer momento durante o desenvolvimento, o programa está sempre pronto para ser executado. O código do LabVIEW também pode ser compilado em um arquivo executável completo que pode ser executado em um computador sem o LabVIEW instalado (embora exija o LabVIEW Run-Time). Você também pode montar um pacote de instalação do instalador; utilitários de terceiros, como o InstallShield, não são necessários.

Uma descrição mais detalhada dos recursos do pacote está além do escopo deste artigo, mas simplesmente sugiro experimentá-lo (os links são fornecidos abaixo). Como disseram os grandes, “... a única maneira de dominar uma nova linguagem de programação é escrever programas nela”. Bem, programadores experientes serão capazes de extrapolar o conhecimento adquirido para suas próprias necessidades.