查看: 6374|回复: 2

零成本学Arduino单片机之LabVIEW虚拟仪器

[复制链接]
  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-12-6 15:37:40 | 显示全部楼层 |阅读模式
    分享到:
    转自与非博客:宜昌城老张的博客
    500_400-1354759165_15a8272b.jpg

        LabVIEW(Laboratory Virtual Instrumentation Engineering Workbench,实验室虚拟仪器工程平台)是由美国国家仪器(NI)公司所开发的图形化程序编译平台,发明者为杰夫·考度斯基(Jeff Kodosky),程序最初于1986年在苹果电脑上发表。LabVIEW早期是为了仪器自动控制所设计,至今转变成为一种逐渐成熟的高级编程语言。
      LabVIEW是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而LabVIEW则采用数据流编程方式,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI指虚拟仪器,是LabVIEW的程序模块,类似于C和BASIC的子函数。
        LabVIEW提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。用户界面在LabVIEW中被称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。LabVIEW的图形化源代码在某种程度上类似于流程图,因此又被称作程序框图代码。
    Labview官方中文网址:http://china.ni.com/
    Labview中文门户网站:http://www.gsdzone.net/classroom.aspx
        美国国家仪器公司NI 通过LabVIEW软件平台率先引入了特别的虚拟仪表(VI)的概念,用户可通过人机界面直接控制,自行开发仪器。虚拟仪器的引入,引发了传统仪器领域的一场重大变革,使得计算机和网络技术得以长驱直入仪器领域,计算机技术和仪器技术结合起来,从而开创了“软件即是“仪器”的先河。
         虚拟仪器包括Labview图形化编程软件和模块化硬件采集设备,Labview提供了两者之间相互通信的多种协议,如VXI、GPIB,RS232和RS485等,其中最基本的通信协议就是RS232串口通信协议。因为Labview支持RS232协议,使得Labview与各种嵌入式微控制器的通信变得很容易实现,Arduino控制器作为嵌入式微控制器的一种,当然可行。Arduino控制器在处理I/O信号方面很在行,但是在人机界面方面的能力,却是软肋,正好Labview可以弥补Arduino这方面的不足。
        我的博客文章《基于Labview与Arduino的上下位机的蓝牙通信实验》,网址:http://www.eefocus.com/zhang700309/blog/12-06/280982_e03c3.html 。介绍了LabVIEW与Arduino结合,通过串口上下位机通信,制作出“温湿度”虚拟仪表,如下图。
    500_400-1354759289_7615e31.jpg

    Arduino如何在Proteus仿真环境下,与上位机串口通信,我刚刚写得两篇文章进行了详细介绍,这两篇文章为:《零成本学Arduino单片机之串行通讯》,
    网址:https://www.cirmall.com/bbs/thread-4695-1-1.html
    《零成本学Arduino单片机之Processing互动媒体》,
    网址:https://www.cirmall.com/bbs/thread-4696-1-1.html
          那么LabVIEW软件如何编写串口通信程序呢?看看这篇文章介绍的虚拟电压表项目,就知道了,该项目的全景图如下图所示。(所有图片可双击,放大观看!
    500_400-1354759165_15a8272b.jpg
       本篇文章的仿真项目任务是:在Proteus仿真图中,用鼠标调节电位计滑动抽头与地之间的电压,Arduino控制器采集这个电压值,正比转换后,通过串口通信,发送到上位机软件LabVIEW。LabVIEW再处理后,在LabVIEW前面板显示电压的数值和波形图。如视频所示。
    http://www.tudou.com/v/AytwNvJpY3E/&resourceId=96368873_04_02_99/v.swf


    双击网址,全屏看仿真实验现象,
    http://www.tudou.com/v/AytwNvJpY3E/&rpid=96368873&resourceId=96368873_04_05_99/v.swf
       Labview虚拟仪器程序由前面板和框图程序组成,前面板是人机交互的界面,界面上有用户输入和显示输出两类控件;框图程序则是用户编制的程序源代码,以定义和控制在前面板上的控件输入和输出功能。下面分别为虚拟数字电压表的前面板和框图程序。
    500_400-1354759497_bd84ff71.jpg
    虚拟数字电压表的前面板
    500_400-1354759519_dba00ec4.jpg

    虚拟数字电压表的框图程序
          LabVIEW前面板的UI设计比较酷,但支撑它的后台框图程序,却很简单,花短短20分钟来设计这个程序足以。在这个框图程序中就包含了LabVIEW串口通信程序段。
        要编写串口通信程序,不仅要具备Labview软件,还必须另外安装NI_VISA串口通讯协议驱动。NI_VISA串口驱动是一个免费的Labview附加组件,可以在官网下载到,或者点击网址下载:ftp://ftp.ni.com/support/visa/drivers/win32/4.0/visa400full.exe
         安装完NI_VISA,在框图程序界面右击鼠标,出现函数工具库面板,再点击“仪表I/O”→“串口”,就会出现串口函数VI子面板,如下图。
    500_400-1354759547_a8693b21.jpg

       框图程序是采用NI_VISA“串口”函数来访问和控制串口的。VISA中的“串口”函数库里包含如上图所示的八个子函数VI。本设计用到的三个VISA串口子函数分别是VISA 配置串口、VISA读取和VISA关闭。
    500_400-1354759574_816eb15.jpg


    VISA 配置串口函数的作用是完成串口参数的初始化设置,包括了串口资源名称,波特率,奇偶校验、数据比特、是否启用终止符等,虚拟数字电压表的框图程序中该函数连接了两个输入变量,它们分别连在串口资源名称和波特率参数端子上,变量值由前面板上的相应控件来设定,另外该函数在“是否启用终止符”的端子上还连接了一个布尔常量,常量值为false,含义是不启用终止符,其它输入参数采用默认值。VISA串口配置函数有两个输出端子,它的图标上面输出端子输出的是串口资源名称,下面输出端子输出的是错误码,输出端子向下游函数传递信息。
        VISA读取函数有三个输入端子,图中VISA读取函数图标的上面输入端子是前面VISA 配置串口函数传递的串口资源名称,下面的输入端子传递的是错误码,意思是若前面的函数出错了,会往这里输入一个错误码,然后继续往下面传递,有错误码出现时程序是不会工作的。中间输入端子是每次从串口读取的字符串字节数,本文串口通信的字节数应设置为1。

       框图程序中VISA读取函数包含在一个While循环结构中,每20ms从串口读取一个字节,并从该函数的中间输出端子,以字符串的形式输出。VISA读取函数图标上面输出端子输出的是串口资源名称,下面的输出端子输出的是错误码,继续向下游函数传递信息。在前面板按下“EXIT”按钮,可结束While 循环。
        VISA关闭函数的作用是当程序停止时,必须要把所用到的串口设备关闭,若不关闭,其他程序就不能使用该设备。
         从VISA读取函数输出的字符串,通过“字符串至字符数组转换”函数把字符串转换为字符数组,这个字符数组里只有一个字节数据,可以通过“索引数组”函数的第0元素,把这个字节数据从字符数组中取出,它包含了电位计电压值信息,一个字节的数值范围是0~255,如果为0,则电压值为0V,如果为255,电压值就对应着5V。所以在框图程序里做个正比换算,就可以把读取的字节数据换算为0~5V电压值。
        然后把换算后的电压值,发送到数据和图形显示VI,显示在LabVIEW前面板上。
        谈完了上位机Lavbiew程序,接下来,下位机Arduino的程序如何设计?Arduino程序的任务有两点:一、把电位计的电压值采样出来,由于Arduino模拟采集数据范围为10位二进制数据,范围是0~1023,因此要通过正比换算,处理成8位字节数据,范围为0~255,以便Arduino以单字节形式上传给LabVIEW;二、把包含电位计电压信息的单字节数据,通过串口不断上传给上位机,以便上位机Labview程序实时显示电压信息。
    Arduino程序:
    /*任务:调节电位计滑动抽头与地之间的电压,并把
    电压值采样到Arduino控制器,经数据换算后,通过串口,

    发送到上位机软件处理。*/

    int potpin = 0; //把电位计连在Arduino模拟端口0

    //初始化

    void setup()

    {

      Serial.begin(9600);//启动串行通讯,波特率为9600b/s

    }

    //主程序

    void loop()

    {

       //读取电位计的电压量采样值,采样值范围0-1023

      int sensorValue = analogRead(potpin);

      //把采样值正比转换为0-255字节值

      int data= sensorValue/4;

      Serial.print(data,BYTE); //发送到上位机处理   

      delay(20);  

    }

    Labview程序和Proteus原理图请下载:
    LabVIEW和Proteus程序下载.zip (29.77 KB, 下载次数: 46)

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-12-6 15:39:25 | 显示全部楼层
    沙发就是舒服!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-23 09:05
  • 签到天数: 518 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2012-12-6 16:26:46 | 显示全部楼层
    高档。。。。。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-24 23:49 , Processed in 0.152345 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.