labview从入门到出家9(进阶篇)--串口通讯
Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多。(很多开发者习惯把UART称为232,但很多萌新容易被误导。其实UART≠RS232,UART是TTL电平的,一般和单片机通讯时用的是TTL电平的串口信号。232,485和UART的电平都不同,这里不多说,不清楚的同仁找度娘呗)。串口通讯在应用上已经很成熟,无外乎是初始化配置波特率,数据位,停止位等,然后往寄存器或者往某个封装好的串口读写函数中,读取或写入对应的数据。而Labview对串口的运行显得更加的简单。
1、初始化配置
仪器IO->串口->VISA配置串口。VISA是NI自己开发的虚拟仪器软件包,包括还有其他的如DAQ,NI-Vision数据采集,视觉之类的软件包。这些都是和NI自主研发的仪器相配套的,也就是如果使用NI的采集卡或者其他仪器板卡,你可以直接使用DAQ的工具包对采集卡直接操作,并且配套有现成的程序例程,可以大大加快监控仪器或者产线自动化设备的开发。当然只要是标准的通讯设备,也是可以用NI工具包的。这里就拿串口通讯示例一下吧。
右键新建输入常量,端口号,波特率,数据位,检验方式等。一般按默认设置即可,如有特殊配置,请点击右侧“?”的按键,挪到该函数上了解各个接口的作用后自行配置。
2、添加“VISA打开”函数
仪器IO->VISA->高级VISA->VISA打开。
配置完串口后加20ms延时是为了连接更稳定一些,一般可不加。但是按以往的经验,不加一点延时的话,在某些快速打开和关闭串口的逻辑功能中,会出现偶尔通讯不上的情况,加了延时后该情况没有再复现。
3、添加“VISA写入”和“VISA读取”函数
仪器IO->VISA->VISA写入;仪器IO->VISA->VISA读取。
在“VISA读取”前面添加一个串口引用的属性节点,添加串口读取的数据量(字节数)。
该Serial Settings ->Number of Bytes at Serial Port属性节点,可预先获取串口缓存的数据大小。如果不给“VISA读取”输入数据大小参数的话,串口缓存上数据可能会没读完,需要读取两次以上(当然可以用程序逻辑处理这个问题,不过本次示例是单步写入读取串口数据,我们还是稳妥一点)
最后再添加一个“VISA关闭”,结束串口通讯。
4、添加“VISA写入”的数据
如果直接添加字符串数据到“VISA写入”函数,从单片机或者虚拟串口上读取的将是一组乱码。在Labview中,该函数写入的数据应该要转成字节数组,再由字节数组转成16进制的字符串发送到电脑串口上,这样在单片机或在虚拟串口上读取的才是16进制的一组数据。否则传进去的将是这组字符对应的ASCII码。
操作如下所示:将要传输的数据通过 创建数组(编程->数组->创建数组)的方式生成字节数据,再通过字节数组转字符串(编程->字符串->路径/数组/字符串转换->字节数组转字符串)的方式生成16进制的字符串给到“VISA写入”。
最后选择端口 如左侧所示COM8,运行即可发送010203的串口数据,如果单片机或者虚拟串口没有返回数据,则读取的数据为空。
将左侧数值常量转成u8类型。
大家可以尝试用状态机写一个串口助手,或者做个虚拟示波器的小工具,由单片机ADC采集电压,将电压值通过串口传给Labview上位机显示电压波形。串口助手我有空上传一个自己写的。虚拟示波器的话,倒有一个以前的毕业设计,如果有需要的话可以留下邮箱,我有空单独发过去,可能会缺少一些库,但是逻辑参考一下就好了。(脸皮较薄,以前写的代码太乱,就不放在CSDN的资源上了,有兴趣的我单独给,哈哈。。。。。手动滑稽)
原创不易,一键三连拉!
labview从入门到出家9(进阶篇)--串口通讯的更多相关文章
- labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用
跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...
- labview从入门到出家6(进阶篇)--移位寄存器的使用
前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...
- labview从入门到出家8(进阶篇)--简单好用的状态机
labview的状态机类似于一个软件框架的基本单元,好的软件框架和软件思路采用一个好的状态机,就如虎添翼了.这章给大家讲一个本人常用的一个状态机,基本上以前的项目都是建立在这个状态机上完成的,当然网上 ...
- labview从入门到出家7(进阶篇)--队列的使用
本节简单讲解队列在Labview中的使用,队列你可以认为就是一组先进先出的数据列表,在Labview中常用来缓存和传递数据.用了这么久的队列,个人认为有个方便的地方在于数据传递的把控,不管是局部变量还 ...
- labview从入门到出家4--用事件结构实现运算功能
使用事件结构可以快速定位响应界面的操作事件,如按下,拖动,双击的事件.基本上我们所要实现的所有功能,都可以通过条件结构+事件结构去实现,比如后面进阶篇将会讲到的状态机就是通过条件结构和事件结构组成的. ...
- labview入门到出家10(进阶)——CAN通讯
讲完串口,这边再讲一个labveiw工控程序中比较常用的CAN通讯吧.很久没有写过CAN通讯的程序了,网上一搜就是什么现场总线,控制器局域网总线,然后一堆复杂的协议.在这里还是一 ...
- labview从入门到出家3--制作和调用子VI
当程序越写越大的时候,我们会发现代码界面会比较乱(线太多),那要怎么做可以让代码更简洁一点,我只管直接调用某个功能函数,而不需要在一个VI上面去实现这个功能函数呢?--子VI.好比C语言里面的Main ...
- labview从入门到出家1--第一个加法程序
概述: Labview在众多编程语言中排名靠后,显然在当今互联网,物联网时代并非主流语言.但是俗话说行行 出状元,即便不是立身于某个主流的领域,用好了依旧可以独领风骚,而且Labview对于硬件出身的 ...
- labview从入门到出家2--将“加法程序”制作成“exe应用程序”
1.上一章主要讲了如何跑我们的第一个加法程序(这里向第一个程序的鼻祖"hello world"致敬),这一章我们直接进入主题,将我们写的程序生成exe文件放桌面运行. 2.要生成e ...
随机推荐
- 数据结构篇(3)ts 实现双向链表
如今终于到了双向链表了,此前在Node结构中的prev指针终于派上了用场.由于双向链表多了一个前向指针,所以有些操作和单向链表比较起来反而更加的简单. class DbList extends Cir ...
- python学习-Day23
目录 今日内容详细 logging模块(续集) 日志模块的主要组成部分 配置字典 配置字典在项目中的使用 第三方模块 如何利用工具下载第三方模块 查看当前解释器下载的第三方模块 下载第三方模块 直接使 ...
- [题解] [LOJ2743]「JOI Open 2016」摩天大楼
题目大意 将 \(N\) 个互不相同的整数 \(A_1 , A_2 , ⋯ , A_N\) 任意排列成 \(B_1 , B_2 , ⋯ , B_N\) . 要求 \(∑^{N−1}_{i=1} |B_ ...
- 【hexo博客搭建】将搭建好的hexo博客部署到阿里云服务器上面(下)
一.部署到阿里云服务器 既然博客也已经成功在本地部署,然后主题也成功安装,接下来就可以部署到服务器上面了,如果你也想要魔改matery主题,可以去各种博客上面找一找大佬的教程,或者联系我,也可以让你少 ...
- Java编程小技巧(1)——方法传回两个对象
原文地址:Java编程小技巧(1)--方法传回两个对象 | Stars-One的杂货小窝 题目是个伪命题,由Java语法我们都知道,方法要么返回一个对象,要么就不返回 当有这样的情况,我们需要返回两个 ...
- Docker将镜像文件发布到私服库
上一篇已经介绍如何将镜像发布到阿里云:https://www.cnblogs.com/sportsky/p/16246394.html 一.创建新镜像文件 1.创建容器并在容器内创建文件 在根目录下创 ...
- MPLS L3 跨域 optionB 配置
mpls跨域optionB optionB的核心思想是私网路由传递过程是 PE-ASBR1-ASBR2-PE2 在传递过程中私网标签发生了变化(由ASBR重新分配了私网标签),而在数据平面(不考虑PH ...
- 安装Redis到Linux(源码)
运行环境 系统版本:Ubuntu 16.04.2 LTS 软件版本:redis-5.0.4 硬件要求:无 安装过程 1.配置系统参数 root@localhost:~# vim /etc/sysctl ...
- .NET性能优化-推荐使用Collections.Pooled
简介 性能优化就是如何在保证处理相同数量的请求情况下占用更少的资源,而这个资源一般就是CPU或者内存,当然还有操作系统IO句柄.网络流量.磁盘占用等等.但是绝大多数时候,我们就是在降低CPU和内存的占 ...
- [算法学习] 换根dp
换根dp 一般来说,我们做题的树都是默认 \(1\) 为根的.但是有些题目需要计算以每个节点为根时的内容. 朴素的暴力:以每个点 \(u\) 作为 \(root\) 暴力dfs下去,复杂度\(O(n^ ...