tag 标签: Arduino与LabVIEW开发实战

相关博文
  • 热度 3
    2022-5-19 20:31
    4961 次阅读|
    0 个评论
    因为种种原因开始接触Arduino和LabVIEW,科班出身有些基础,一开始感觉LabVIEW相较于文本编程来说也太麻烦了,但是直到这几天接触了《Arduino与LabVIEW开发实战》这本书,感觉LabVIEW还是不错的,从2022.5.19开始记录学习 《Arduino与LabVIEW开发实战》的过程,会把学习的过程记录下来,分享学习中的一些心得和写的程序。如果有啥问题,欢迎联系交流。 一、 准备工作 器材:开发板一块(型号以 Arduino Uno 为例)、 LabVIEW2017 安装包、破解工具 NI License Activator 。 获取方法: Arduino 开发板可以自己打板焊元件也可以直接淘宝购买(国产的几十块钱,意大利原装的需要一两百); LabVIEW2017 安装包在( Index of /evaluation/labview/ekit/other/downloader (ni.com) )网址获得(可以通过浏览器搜索功能,快捷键 ctrl+F ,搜索 2017LV-WinChn.exe ,点击即可下载);破解工具 NI License Activator 可通过百度网盘获取(链接: https://pan.baidu.com/s/1dwsyMuX8IQRYNWeB_cZoGQ 提取码: hx2v ,如果链接失效,可以网上搜索)。 软件安装(以 LabVIEW2018 为例,其他版本类似): ( 1 )双击 ,进入解压软件界面,如图 1-1 。 图 1-1 【解压 LabVIEW2018 】 ( 2 )解压完成(如图 1-2 )后,自动启动 setup.exe ,如果未启动,请到第一步的解压路径中手动双击 setup.exe 。前面的安装过程直接选择下一步即可. 图 1-2 【解压完成】 ( 3 )这步不需要填入序列号,直接下一步,如图 1-3 。 图 1-3 【无须填入序列号】 ( 4 )选择合适路径安装,安装内容默认即可,如图 1-4 。 图 1-4 【安装路径和安装内容】 ( 5 )取消产品通知,接受许可,然后等待安装完成,如图 1-5 。 图 1-5 【无须通知,接受许可】 ( 6 )等待安装过程中,会询问如图 1-6 所示的问题,选择不需要支持即可,最后可以看到安装完成的通知。 图 1-6 【安装问题和安装完成】 ( 7 )安装完成后,先不着急运行软件,双击 ,将所有的模块都右击 -Activate , Activate 成功的软件或者工具包前面的方框将显示绿色,否则显示白色,如图 1-7 。 图 1-7 【激活软件】 至此, LabVIEW2018 中文版就安装完成,可以正常使用。 二、 连接 LabVIEW 和 Arduino 本节将详细地介绍 Arduino 与 LabVIEW 的连接方式,主要包括 LabVIEW Interface for Arduino 方式、串口控制方式、无线串口方式和 Ethernet 方式,并给出详细的实验示例,包含实现原理和具体代码其实,从本质上来说,前三种方式都是通过 串口 实现 Arduino 与 LabVIEW 的连接的,而且需要使用 VISA 插件实现 LabVIEW 串口编程,但是三者各有特点: ( 1 ) LabVIEW Interface for Arduino 方式,只需要将给定的 Arduino 程序烧写进 Arduino 控制器,然后完成 LabVIEW 部分的编程即可,由于不涉及 Arduino 程序设计,只使用官方给出的 Arduino 函数库, Arduino 的传感器选用上有很大的局限性,可扩展性较差。 ( 2 )串口控制方式,需要完成 Arduino 与 LabVIEW 两部分的编程,使用 USB to Serial 电缆连接, Arduino 部分有着很好的可扩展性,两者需要制定合适的通信协议。 ( 3 )无线串口方式,使用串口无线数传模块替代串口连接电缆线,实现了 Arduino 与 LabVIEW 的无线连接,扩展了 Arduino 与 LabVIEW 的应用范围,而且可以通过选择不同类型和不同功率的无线传输模块,以实现近距离、中距离和远距离的无线数据传输。 与前三种方式使用串口来实现 Arduino 与 LabVIEW 的连接不同, Ethernet 方式采用网络编程来实现二者的连接。 Arduino 端需要采用 网络扩展板 ,并连接至路由器上,而不是仅仅通过串口; LabVIEW 端需要使用 TCP 协议函数库 来完成程序设计,而不是使用 VISA 插件来实现串口编程的。与其他三种连接方式相比, Ethernet 方式将 Arduino 与 LabVIEW 都接入了网络中,极大地扩展了应用范围;由于互联网无处不在,若将二者都接入互联网中,则可以通过互联网来构建基于 Arduino 与 LabVIEW 的远程测控系统。 三、LabVIEW Interface for Arduino 方式 LabVIEW Interface for Arduino Toolkit ( LIAT )是 NI 公司(美国国家仪器公司)为 Arduino 开发的接口工具包,借助于这个工具包,可以很方便地使用 LabVIEW 软件与 Arduino 控制器实现联合开发。 目前, LIAT 支持 LabVIEW2010 及更高版本,提供的函数库中传感器有热敏电阻、光敏电阻、 8 段数码管、 RGB 灯、舵机等。在 LabVIEW 中使用打开、读写、关闭等库函数,就可以实现对 Arduino 控制器的数字、模拟、 PWM 、 I2C 、 SPI 信号的读取与控制。但是, LIAT 仅支持 Arduino Uno 、 Arduino2009 和 Mega2560 控制板,而且库函数的数量有限,传感器类型较为单一,存在一定的局限性,极大地限制了对 Arduino 的开发使用。当使用的传感器不是官方函数库中已有函数的传感器时,就无法使用 LabVIEW 对 Arduino 进行交互控制。 由于 LabVIEW Interface for Arduino 只需要对 LabVIEW 编程,而不需要对 Arduino 编程,甚至不需要底层硬件知识,适合了解 LabVIEW 编程而不懂 Arduino 编程的玩家或入门爱好者,由于其简单、易操作,所以也不失为新手入门的一个路径。 下面介绍该方法的操作方式 ( 1 ) LIAT 的下载与安装。想要利用 LIAT 函数库来实现 LabVIEW 软件与 Arduino 控制器的交互需要安装三个软件: 1 ) 2010 及以上版本的 LabVIEW 软件; 2 )与 LabVIEW 软件配套的 VI Packge Manager ; 3 ) LabVIEW Interface for Arduino Toolkit 。 LabVIEW2017 版本及之后的版本都已经将 VI Packge Manager 集成进去,不需要额外安装,所以只需要打开 VI Packge Manager 搜索 Arduino找到LabVIEW Interface for Arduino 即可完成安装。 ( 2 ) LIAT 函数库及使用。当 LabVIEW 安装 LabVIEW Interface for Arduino 工具包之后,在前面板和程序框图中的函数栏目中就会出现 Arduino 控件和操作函数库。 Arduino 控件包含模拟 I/O 、数字 I/O 、 Pin Mode 、 Board Type 和连接方式等,如图 3-6 所示;操作函数库包含有 Arduino INIT 、 Arduino CLOSE 、 Low Level 、 Sensors 、 Examples 等,如图 3-7 所示。其中, Arduino INIT 和 Arduino CLOSE 是每个程序必备的,即与 Arduino 控制器建立连接,完成对 Arduino 预先设定的操作之后,断开与 Arduino 控制器的连接,释放 Arduino 控制器的串口资源。 12.2.2 串口控制方式 本节将采用有线串口连接的方式实现 Arduino 与 LabVIEW 的连接,并介绍 LabVIEW VISA 串口编程。 VISA 的下载地址是( 下载 NI-VISA - NI ),下载版本选择最低的 5.4 即可 。 VISA 是虚拟仪器软件体系结构( Virtual Instruments Software Architecture )的缩写,实质上是一个 I/O 口软件库及其规范的总称。 VISA 是应用于仪器编程的标准 I/O 应用程序接口,是工业界通用的仪器驱动器标准 API (应用程序接口),采用面向对象编程,具有很好的兼容性、扩展性和独立性。用户可用一个 API 控制包括 VXI 、 GPIB 及串口仪器在内的不同种类的仪器。它还支持多平台工作、多接口控制,是一个多类型的函数库。 在 LabVIEW 中利用 VISA 节点进行串行通信编程。为了方便用户使用, LabVIEW 将这些 VISA 节点单独组成一个子模块,共包含 8 个节点,分别实现初始化串口、串口写、串口读、中断以及关闭串口等功能。安装 VISA 之后,在程序框图界面上右击鼠标,依次选择“函数”→“仪器 I/O ”→“串口”,即会出现如图 3-80 所示的串口函数。 在 LabVIEW 中,普通串口通信的基本步骤分为 3 步: ( 1 )串口初始化,利用 VISA Configure SerialPort 节点设定串口的端口号、波特率、停止位、校验位、数据位。 ( 2 )读写串口,利用 VISA Read 节点和 VISA Write 节点对串口进行读写。 ( 3 )关闭串口,停止所有读写操作,释放串口资源。 按照串口编程的 3 个基本步骤,图 3-85 给出了典型的串口读写程序框图。首先,对所选择的串口进行配置(初始化),然后将需要发送的数据写入串口,等待合适的时间,接着判断出串口中数据的字节数并从串口中读取数据,最后关闭串口,释放串口资源。 实验: Arduino 与 LabVIEW 串口通信的实现 实验分为两个部分: 1 ) LabVIEW 控制 Arduino 板载 LED : LabVIEW 发送开关命令, Arduino 接收开关命令,并控制板载 LED 灯的亮灭; 2 )虚拟电压表: Arduino 测量电压并通过串口发送, LabVIEW 接收电压值并显示在前面板的仪表板上。 今天先完成实验的第一部分: LabVIEW 控制 Arduino 板载 LED ( 1 )实验目的 通过 LabVIEW 前面板上的开关按钮实现对 Arduino Uno 控制板上 13 号管脚上 LED 灯开关控制,实现 LabVIEW 与 Arduino 单向数据传输(由 LabVIEW 向 Arduino 控制板发送数据)。 ( 2 )硬件连接 本实验只需要使用 USB 电缆将 Arduino Uno 控制板连接至电脑 USB 端口即可。 ( 3 ) Arduino 程序设计 Arduino Uno 控制器通过串口获取 LabVIEW 上位机发来的命令码,判断接收到的命令是为“打开”命令还是“关闭”命令,并执行“打开”或“关闭”命令。程序代码如下: byte comdata; // 定义变量,用于存放串口读取的数据 int LED = 13; // 定义数字口13为LED的控制引脚 void setup() { // put your setup code here, to run once: Serial.begin(9600); // 初始化串口波特率为9600 pinMode(LED, OUTPUT); // 将LED控制引脚设置为输出 } void loop() { // put your main code here, to run repeatedly: 0) // 不断检测串口缓冲区是否有数据 { comdata =Serial.read(); // 从串口缓冲区读取一个字节的数据 if(comdata == 0x01) // 判断是否为关灯命令 { digitalWrite(LED, LOW); // 关闭LED灯 } if(comdata ==0x02 ) // 判断是否为开灯命令 { digitalWrite(LED,HIGH); // 打开LED灯 } } } 由以上程序,可以知道 Arduino 程序的基本框架由 setup() 和 loop() 两部分组成。在 Arduino 控制器中程序运行时将首先执行 setup() 函数,然后执行 loop() 函数,并且不断循环执行 loop() 函数。每次 Arduino 上电或重启后,都会首先执行 setup() 函数,而且 setup() 函数只运行一次。 setup() 函数用于设置引脚的输入 / 输出类型、配置串口、引入类库文件、外围器件使用前的初始化等。 loop() 函数在程序运行过程中不断地循环,根据所编写的程序,完成指定的输入 / 输出功能。 ( 4 ) LabVIEW 程序设计 LabVIEW 通过事件结构来响应“打开”和“关闭”的指令,分别发送不同的指令,并通过串口电缆发送至 Arduino Uno 控制板, Arduino Uno 控制板通过读取串口缓冲区中的数据,然后分析数据并执行“打开”或“关闭”的动作。 LabVIEW 软件的前面板如图 3-86 所示。 LabVIEW 程序框图如图 3-87 和图 3-88 所示。 分析一下这个 LabVIEW 的程序框图程序,该程序由函数选板 “编程” “结构”中的 分割成三个部分,这三个部分也就对应上面介绍的串口通信的三个步骤:( 1 ) VISA 配置串口 ,完成串口初始化, LED 灯初始化为关闭状态;( 2 ) While 循环结构中放置了一个事件结构,该事件结构中有两个分支,一个是打开按钮值改变时控制 LED 灯亮起,一个是关闭按钮值改变时控制 LED 灯关闭。这个控制由 VISA 写入 将“ 2 ”和“ 1 ”分别发送给 Arduino ;( 3 )最后一部分就是用 VISA 关闭 将串口连接关闭。简易错误处理器 显示错误信息。“ 2 ”和“ 1 ”的转换操作可以通过 LabVIEW 提供的即时帮助和 LabVIEW 帮助手册观察一下 VISA 写入 所需要的输入,就可以理解“ 2 ”和“ 1 ”的转换操作是怎么一回事了。 找了很久也没找到 《Arduino与LabVIEW开发实战》中这里的配套程序,想想还是自己敲了。之前学了不少编程语言,编程语言基本要素差不多一样,不想再学一遍LabVIEW的了,就连蒙带猜地观察 图 3-87 和图 3-88,把程序给捣鼓了出来,明天和实验的第二部分一起上传到百度网盘吧,和小伙伴们分享一下。敲完这个程序终于让我有种恍然大悟的感觉,LabVIEW是可以用的。但是对比起文本编程还是感觉勉勉强强,各有各的好吧,针对人群不一样,而且LabVIEW这是把上位机编程也完成了,而且是可视化的那种,和普通的串口调试助手还不一样。