建议大家按我发帖子的顺序来看,方便大家理解。请不要跳跃式的阅读。很多人现在看书,都跳跃式的看,选择性的看,导致有些细节的部分没有掌握到,然后又因为某个细节耽误很多时间。以上只是个人建议,高手可以略过本帖。
从手把手系列第 1 贴我就写了,用 LabVIEW 来写串口驱动控制仪器,只需要下图的几个函数即可。
事实上,真的只需要下面几个函数。

<ignore_js_op>

所以,LabVIEW 写个串口程序,其实很简单的。
问题是,有很大部分的人,问的就是串口,这个问题,那个问题。没写过串口的人可能会问:你都说了串口很简单啊,就那么几个函数,为什么还有这么多人在问?
我只能回答:不注重细节和自己的程序思维。
一般的串口控制结构是:
①配置(打开)串口
②读写串口
③关闭串口
我觉得这几个之间,配置 VISA 串口,是个很需要斟酌的部分。配置串口是进入串口通讯的钥匙。首先你配置成功了,才能进行正确的通讯。
下面开始进入正题,先看下 VISA 配置串口函数。

<ignore_js_op>

配置串口时候,最好是在对应的参数端口那里,右键,新建常量或者输入控件,然后再在新建出来的上面修改。因为,新建出来的数据类型,肯定是对的。

<ignore_js_op>

需要注意的是:①停止位那里,不是常数  1 1.5 2 等,实际是 10,15,20 数值。这里最好右键新建常量然后选择对应的枚举类型,如上图所示。
更需要注意的是:②配置串口,顶端有个 启用终止符,一般默认是 真,终止符一般默认是 OA,即换行符。
<ignore_js_op> 
有些人接受的字符串,里面含有十六进制的 OA,然后每次数据接收到 OA 就停止了,然后就以为程序有什么问题,其实就是没有配置好 VISA,终止符没有设定为  假。
那为什么配置 VISA 要搞个终止符呢?
(注意:这个函数的终止符,只是接受的终止符,只是对 LabVIEW 接收而言,后面会具体讲。)
终止符,是个条件,很多仪器上,也有终止符,而且终止符的优先级高。
比如你要用”VISA 读取“接收 1000 个字符,而还没接受完毕,收到了终止符 OA,那么程序就当一个命令结束了。后面的字符串,放入下一个命令里面去。对编程很方便的,如果你传输的字符不可能出现 OA 或者自己设定的终止符,我建议用终止符来做终止条件,这样,比你在  VISA 读去里读取固定的字节好很多。
<ignore_js_op> 
<ignore_js_op> 

首先看下 VISA 读取帮助。左边输入有个必填参数,叫 VISA 字节总数,你必须指定你要读的字节数。

好了,说到了 VISA 读取,我们顺带看下 VISA 读取。
问题来了,这个字节数怎么确定呢?
一般的组合,如上图所示。
组合的前面,是 VISA 串口字节数,函数路径见上图,其实就是一个属性节点,看那个 bytes at port 英文就应该明白了。
它利用一个读取缓冲区字节数,读到字节数,就确定了 VISA 读取里面那个字节数,然后用读取 VISA 读出来。
意思就是,前面的先侦测下串口缓冲区有多少数据,侦测完了就告诉 VISA 读,VISA就全读出来,。
这个组合的功能是,读取 VISA 串口已有的全部数据。
很多人,也不明白什么意思,看到很多地方这么用,然后自己也这么用。还有的时候,如果是用 MODBUS 协议,你发送一个命令,会回复固定的字节数,这样 VISA 读取那个参数就确定了。
注明一点:串口有个缓冲区,存在计算机内存里,VISA 读取,就是从缓冲区读取数据,读完之后,读取的就不存在缓冲区里了。如果你没读取,那就一直在缓冲区里,直到缓冲区溢出。其实就好比一个水桶,写 VISA 是往水桶进水,读 VISA 是出水。你也可以想想队列的原理,差不多的。
现在看下图。
我用借助串口调试助手和虚拟串口,向 LabVIEW 编写的一个最简单的例子发送字符串。发送的字符串是 010203 0A 050607(十六进制显示)。VISA 串口配置我没都默认,结果我收到的字符串接收到  0A,就终止了。后面的 050607,到了下一次接收了。
这个例子很形象吧。说明了终止符的厉害,默认不配置就是启用终止符,终止符是 OA。
<ignore_js_op> 
<ignore_js_op> 
<ignore_js_op> 
以上程序,先配置串口,然后循环不停的读串口,用了读取串口字节判断该不该读,当串口有数据,即字节数不位零时,读取串口。
关键词:VISA 配置,停止位,终止符。
 
深入篇:
以上我们已经讲了 VISA 配置串口函数,熟悉串口通讯的,都应该熟悉这些参数的配置。然后需要注意的:停止位,跟终止符,我也给大家特别说明了。其实,这个函数,也不是最底层的 vi,你可以双击这个 vi,打开子 vi。
程序面板如下:
<ignore_js_op> 
其实就是属性节点了,只是给出了常用的几个而已。
事实上,有些仪器,我们要配置的可能多一点。这个“VISA 配置串口”函数满足不了要求。
具体配置,看你的仪器说明书,有些可能需要发送终止符,  有些需要握手协议。至于为什么要那些,都是仪器配置问题。自己通讯配置跟仪器一样的就行了。
===================================================
下面我们以 Keithley 2400 仪器来讲解。这个驱动来源于 NI 官网的仪器驱动。

<ignore_js_op>

我们打开一个例子:Read Single,就是读取单个点的值。例子无所谓,我们今天主要讲的核心是 VISA 串口配置。然后我们点击最开始的 Initialize.vi,就是这个仪器驱动的串口初始化程序。点击去后,如下图所示:
<ignore_js_op> 
我们分两部分讲,我画了两个圈。
====================
第一个圈:首先打开串口,然后清除串口的缓冲,然后,看到了一个属性节点。我们来放大它,看到第一行:timeout.这个是个超时,然后下面有个用户数据,再下面是个串口类型。

<ignore_js_op>

首先,超时是个什么意思呢?
LabVIEW 很多地方都有超时,特别是涉及到通信的,TCP 有,串口有,蓝牙有,队列有,通知有。
超时,其实是个约定。
打个比方:男女朋友约会几点见面,然后如果没有加超时,如果一方没来,另一方要一直等一直等,等到天荒地老…
但是,你们可以约定好,如果超过半小时,就不要等我了,说明我不来了。那你过了半小时,就可以走了,说明约会取消。
这个超过半小时,就取消约会。其实就是一个超时设置为半小时。
你也可以想象成打电话,拨对方电话,一分钟过去还没人接,就不再拨打。
你不设置超时,或者超时无限大,如果你读取 VISA,程序就一直在等 VISA 读取,一直等啊等啊,这时候你程序基本属于假死状态了,没救了。。。其他的操作也一样,可能一直等操作完成。
如果你设置了超时,等待超时时间到了,程序就不执行了,错误输出会输出错误。
其次,用户数据是什么意思呢?
其实就是一个变量,存在串口相关的内存里。自己以后变成会用到读取出来进行数据判断。具体怎么用看自己了。
你这里设置了用户数据,可以在后面利用属性节点读取出来。有人肯定要问,我自己设置一个全局变量,其他地方调用,不一样么?回答,不一样,你用这个不更简单么?不需要重新建立变量,而且数据是跟着连线走的。
第三,串口类型是什么?
这个,有些仪器是有 GPIB 接口和 232 接口的,GPIB 接口的需要买 GPIB 卡,使用的方式不一样,但是指令是可以一样的,为了驱动的通用性,就只能用程序判断了,不用人来判断。统自动检测串口类型,执行对应的程序,很智能化吧。
==================================================
好了,下面是第二个圈的内容。

<ignore_js_op>

这里都是属性节点。会用属性节点的,应该可以找到他们的配置,现在细讲。
①ASRL  End In。这个容易懂,串口接收终止符,这个“VISA 配置串口”函数用的就是
②ASRL End Out。这个跟接收相对的,串口发送终止符。这个有点特殊。你加了这个后,加入你发送的是 A,如果有这个终止符并且启用的终止符是 B,那么你发送出去的,实际是 AB 两个字节。
③终止符。这里一般是 OD,也就是回车符,当然你可以自己定义。
④流控制。这个针对仪器,仪器上有流控制,就跟仪器一样就可以了。具体什么意思,请百度,不需要搞清楚那么多,自己设置和仪器一样就可以了。有 XON/XOFF  DTR/DSR各种,跟仪器一样。记得一定要一样的啊。后面就没什么讲的了。
记得注意我红色标注的地方。有些仪器有这么些东西,所以,建议大家仪器,使用 NI
提供的驱动,这样配置方面就不需要自己想太多,因为别人都配置好了。
有人可能会问,这些属性节点怎么来的?
见下图,当然,你也可以在应用程序那个属性节点,连接到 VISA 引用,也可以得到。

<ignore_js_op>

点击选择对应的属性。

<ignore_js_op> 

好了,串口配置就讲完了。

小草手把手教你 LabVIEW 串口仪器控制——VISA 串口配置的更多相关文章

  1. 小草手把手教你LabVIEW串口仪器控制—安装使用仪器现有驱动

    声明:很多仪器是没有驱动的.所以,具体问题具体分析.另外声明:所谓的驱动,也就是封装好的底层的串口通信程序,也是程序而已,只不过别人帮你做成了子 VI,让自己容易用.所以:不要弄混淆了概念.国外的很多 ...

  2. 小草手把手教你 LabVIEW 串口仪器控制——初识VISA串口

    有些人,学习一样东西时候,喜欢现成的例子.很多人学习一门技术,都喜欢现成的例子开始,比如学单片机的啊,最开始都是修改的例子吧,学语言的也是.最开始都是模仿.这个年头看书上的理论知识太浪费时间了.所以啊 ...

  3. 手把手教你 LabVIEW 串口仪器控制——VISA 驱动下载安装篇

           仪器控制,核心在于 VISA 函数..有些仪器可能不需要 VISA,有自己的 DLL 什么的,我就管不着.        正常情况下,大家安装的 LabVIEW,都是不带 VISA 驱动 ...

  4. 微信小程序——手把手教你写一个微信小程序

    前言 微信小程序年前的跳一跳确实是火了一把,然后呢一直没有时间去实践项目,一直想搞但是工作上不需要所以,嗯嗯嗯嗯嗯emmmmm..... 需求 小程序语音识别,全景图片观看,登录授权,获取个人基本信息 ...

  5. 小姐姐手把手教你JS数组中的对象去重

    有时候数据库中的数据重复的,我们另一个需求需要数据的唯一性 那么这时候就用到这个方法了  我还是以截图的方式发粗来  不然太丑了 见谅 console.log(map)打印出来的结果已经帮我们把需要的 ...

  6. 手把手教windows上安装linux虚拟机及环境配置

    目录 版本说明 安装虚拟机 典型方式安装(推荐小白,带有图形界面,助于学习,但占用空间大) 自定义方式安装(推荐老司机) 创建快照 克隆虚拟机 windows上安装linux虚拟机不管是对于新人还是老 ...

  7. labview初始学习过程中遇到串口读取框红蓝色交替闪烁的处理

           labview工程的程序框图VISA串口读取框红蓝交替闪烁,前面板接收数据错乱,或者是接受不了,这是你不小心设置了断点.

  8. Python的扩展接口[0] -> VISA仪器控制

    VISA仪器控制 / VISA Instrument Control 1 VISA简介 / VISA Introduction VISA(Virtual Instrument Software Arc ...

  9. 手把手教你玩微信小程序跳一跳

    最近微信小程序火的半边天都红了,虽然不会写,但是至少也可以仿照网上大神开发外挂吧!下面手把手教妹纸们(汉纸们请自觉的眼观耳听)怎么愉快的在微信小游戏中获得高分. 废话不多说,咱们这就发车了!呸!咱们这 ...

随机推荐

  1. canvas练手项目(二)——各种操作基础

    想想应该在canvas上面作画了,那么就不得不提到事件了. (打着canvas的旗号,写着mouse事件.挂羊头卖狗肉!哈哈哈哈哈~) 先来看一看HTML事件属性,我们要用的就是Mouse事件,就先研 ...

  2. ThreadLocal用例之周期为一次请求的变量

    public class RecordedLocal { private static ThreadLocal<Recorded> local = new ThreadLocal<R ...

  3. IDEA2017版本打可运行jar包并运行

    一.打JAR包 JAR:From modules with dependencies  将依赖一起打包 一般依赖放在与xx.jar同级的libs文件夹中 敲黑板,下图第一个框是输出jar包的位置,第二 ...

  4. Java遍历二叉树深度宽度

    节点数据结构 class TreeNode { TreeNode left = null; TreeNode right = null; } 最大深度,基本思路是:使用递归,分别求出左子树的深度.右子 ...

  5. C++学习-4

    1.一个类重写了operator(),可以f()-相当于匿名对象-f()()相当于调用operator()函数  把对象名当成函数名来使用--伪函数 2.通过成员函数创建多线程 a)   可以用成员函 ...

  6. ajax+struts2 实现省份-城市-地区三级联动

    1.需求分析 2.js部分(通过ajax异步请求实现) 省份-->城市联动 城市-->地区 3.struts部分 struts.xml action部分 4.service部分 5.总结 ...

  7. PHP自动测试框架Top 10

    对于很多PHP开发新手来说,测试自己编写的代码是一个非常棘手的问题.如果出现问题,他们将不知道下一步该怎么做.花费很长的时间调试PHP代码是一个非常不明智的选择,最好的方法就是在编写应用程序代码之前就 ...

  8. 使用枚举enum

    枚举可以把常量按照类别组织起来, 并且提供了构造方法和其他访问方法 用法: package com.nel.testPro.useage.use_enum; public enum Color imp ...

  9. 常用的Maven依赖

    一.数据库类型 1.mysql驱动 <!-- mysql驱动支持 --> <dependency> <groupId>mysql</groupId> & ...

  10. thinkphp5 taglib自定义标签教程

    学着写了一下,终于搞定了,顺便分享一下!taglib是tp框架自定义标签功能,如果你用过cms,肯定见过类似: {dede:arclist typeid='' row='' col='' titlel ...