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 ...
随机推荐
- python3.5上使用virtualenv创建虚拟环境的坑
一.坑一:安装的virtualenv版本太高 显示使用virtualenv 安装虚拟环境报错 出现这个问题就是说明你的virtualev安装的版本太高,降低一下版本重新安装即可,我这里使用的是15这个 ...
- c/c++递归打印文件夹
调用linux的系统函数,实现tree的功能,递归打印文件夹 使用到得函数: DIR *opendir(const char *name); // 打开文件夹 struct dirent *readd ...
- vue - vue基础/vue核心内容(终结篇)
今天是vue基础.vue核心内容第三天,也是最后一天,后面开始进入组件化学习,整个基础内容以生命周期的结束而结束,不得不说,张天禹把这节课讲活了,开始觉得vue是一个有生命的东西,包括前面所说的很多脏 ...
- 《计算机组成原理/CSAPP》网课总结(二)——编译原理基础
这部分是四月份的安排,拖到五一放假了,主要是对源码编译过程的一次总结,总的来说,大致可分为预编译.编译.汇编和链接四部分.这里简单记录一下: 一 概述 1.预处理 或者说是预编译,指的是在编译前需要做 ...
- DOM 事件与事件委托
DOM 事件与事件委托 本文写于 2020 年 5 月 28 日 先思考一个问题:我们如何给一百个 button 添加点击事件? 遍历? 那岂不是要添加一百个监听器? 这就需要事件委托了. 其实这根本 ...
- AC自动机:Tire树+KMP
简介 AC自动机是一个多模式匹配算法,在模式匹配领域被广泛应用,举一个经典的例子,违禁词查找并替换为***.AC自动机其实是Trie树和KMP 算法的结合,首先将多模式串建立一个Tire树,然后结合K ...
- [python][flask] Flask 图片上传与下载例子(支持漂亮的拖拽上传)
目录 1.效果预览 2.新增逻辑概览 3.tuchuang.py 逻辑介绍 3.1 图片上传 3.2 图片合法检查 3.3 图片下载 4.__init__.py 逻辑介绍 5.upload.html ...
- 多态——JavaSE基础
多态 同一个方法可以根据对象的不同采取不同的动作 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多 基本条件: 有继承关系 子类重写父类方法 父类引用指向子类对象Father f1 = ne ...
- 《C Primer Plus》第六版笔记--4~6章
目录 第四章 字符串和格式化输入/输出 第五章 运算符.表达式和语句 第六章 C控制语句:循环 虽然匆匆忙忙,但还是要做笔记,虽然大概都知道...... 挑一些容易忘记的地方 第四章 字符串和格式化输 ...
- python基础学习10
python基础学习 内容概要 文件内光标的移动 文件数据修改 函数简介 函数语法结构 内容详情 文件内光标的移动 with open(r'路径','r',encoding='utf8') as f: ...