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
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
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
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
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
Figura 7. O nó MathScript facilita o uso de scripts .m em código G
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
As principais vantagens desta abordagem são:
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.
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.
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.
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:
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.
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)
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.
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”:
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:
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.
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)
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.
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”:
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.