LABVIEW串口通信基础
写这一篇串口通信基础的契机是最近刚刚完成一个温箱的仪器控制程序,LABVIEW通过串口与温箱单片机通讯,我打算将过程中遇到的一些问题和收获列在这里方便有需求的网友比对、寻找答案。
学LABVIEW时间并不久,这个仪器控制程序也比较简单,行文中若有错误还望指出。
--------------------------------------------------------------------------------------------------------------------------------------------
LABVIEW串口通信基础
利用LABVIEW实现串口通信需要进行以下四部分准备:
1) 必要的硬件设备;
2)串口通信相关基础知识;
3)通讯协议;
4)基本的程序编写能力。
一、必要的硬件设备
在我的项目中,下位机的数据传输用的RS485,上位机是我的笔记本电脑,所以我的硬件设备只有三件:笔记本电脑、下位机和一根USB转RS485的转换线。
二、串口通信相关基础知识
1. 并行通信和串行通信
计算机通信可分为两大类:并行通信和串行通信。
并行通信通常是将数据字节的各位用多条数据线同时进行传送,如下图所示。

并行通信的特点是:控制简单、传输速度快。由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。
串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送,如下图。

串行通信的特点是:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备。但数据的传送控制比并行通信复杂。
串口通信即串行通信。
2. 异步通信和同步通信
本文主要涉及异步通信。
异步通信是以字符帧为单位进行传输,字符帧与字符帧之间的时间间隔是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间是异步的,但同一个字符内的各位是同步的。

为了实现异步传输字符的同步,采用的办法是使传送的每一个字符都以起始位“0”开始,以停止位“1”结束。这样,传送的每一个字符都用起始位来进行收发双方的同步。异步通信的数据格式如下图所示。

由图可见,异步通信的每帧数据由4部分组成:起始位(1位)、字符数据位(5-8位)、奇偶校验位(1位,也可以没有校验位)和停止位(1或2位)。空闲位和停止位均为高电平,接收设备一旦监视到“0”电平的到来,说明起始位出现,就开始接收所规定的数据位和奇偶校验位以及停止位。
同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留空隙,即保持位同步关系,也保持字符同步关系。
3. 串行通信的传输方向
串行通信依数据传输的方向及时间关系可分为:单工、半双工和全双工。

单工是指数据传输仅能沿一个方向,不能实现反向传输。
半双工是指数据传输可以沿两个方向,但需要分时进行。
全双工是指数据可以同时进行双向传输。
本文中采用的RS485为半双工。
4. 串口配置参数
串行通信中几个参数要格外注意:比特率、数据位、停止位和奇偶校验位。
比特率描述数据的传输速率,是每秒钟传输二进制代码的位数,单位是位/秒。如每秒钟传送240个字符,而每个字符格式包含10位,则此时的比特率为2400bps。
数据位是一个字节中包含的有效数据信息的位数。
停止位用于判断某个字符是否传输结束,以便开始进入监视状态准备接收下一个字符。
奇偶校验位则用于判断字符在传输过程中是否有错误,包括奇校验、偶校验和无校验。当约定为奇校验时,数据中1的个数与校验位中1的个数之和应为奇数,偶校验同理。接收方和发送方的校验方式应一致,接收字符时,对1的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。
数据位、停止位和奇偶校验位共同确定了串口通信中数据编码的方式,即字符结构。在概念上要和通讯协议中的起始码、终止码和校验码区分开。和英语写作做个类比,串口参数(数据位、停止位和奇偶校验位)确定了每个单词中各个字母的排列规则,而通讯协议规定的报文格式(起始码、终止码和校验码等)确定了句子的语法,是各个单词排列组合的规则。
另外,在实际操作中会遇见低n位、高n位的说法。比如串口参数为1个起始位、8个数据位、1个停止位和1个奇偶校验位。
当需要传输的数值为6000时,它的二进制表示为:00010111 01110000,显然需要占用2个字节。
则计算机编码的数据为两个各含11个位的字节,各包括1个起始位、8个数据位、1个停止位和1个奇偶校验位,其中8个数据位分别为00010111 和 01110000。
其中00010111为高八位,01110000为低八位。
根据通讯协议的要求,有时会是低位在前、高位在后,有时是高位在前、低位在后。数据处理中需格外注意。
三、通讯协议
仪器方会提供该仪器使用的通讯协议,所以这一部分只要搞清楚协议内容就好了。串口参数确定了每个数据怎么被计算机编码并传输,而通讯协议中的报文格式则会告诉我们怎样排列必要的数据以向下位机传达我们的命令。
比如每一条报文第一个字节写下位机的地址;第二个字节写功能码;第三、四两个字节写相关的寄存器地址等。上下位机之间基于这样的一种约定向彼此发送报文,同样基于这样一种约定解析对方发送来的报文,从而实现通信。
在报文的编写中可能遇到困难的一部分是校验码的计算。不过好在网络上已经有很多免费的校验码的小程序了,可以直接下载下来稍作修改作为子VI调用。
这有一个CRC校验的在线计算器,可以根据已有的正确报文判断其采用的校验方式,然后选择网络上已经有的对应的小程序进行修改和调用。
https://www.lammertbies.nl/comm/info/crc-calculation.html
这是一个CRC-CCITT的校验程序合集,另外pudn.com似乎是个不错的资源网站。
http://www.pudn.com/Download/item/id/1334218.html
校验码的计算中如果出现明明选择了对应的子VI并进行了正确的修改仍然无法正确输出校验码的情况,请务必检查一下数据输入、输出控件是正常显示的还是十六进制显示的,更改一下显示方式或许能解决问题。
四、LABVIEW串口通讯实现方法
百度一下“小草手把手教你LabVIEW仪器控制”。(写着写着不想写了哈哈,所以直接资源传送门)
其中提到要安装下位机的驱动,可能因为我的下位机比较低端,我是在连接下位机和笔记本后启动驱动精灵,自动扫描安装了一个对应的驱动。可以作为一种补充的方法吧。
另外个人感觉在串口通信中虚拟串口软件的用处并不大,其主要是用来检验下行报文的正确性,但其实在我编码完下行报文之后,写入VISA之前,只要输出一下我的下行报文不需要虚拟串口软件也是能够进行检查的。
最后读取报文回来的数据默认是十六进制显示,所以可以网上下载一个十六进制显示转化为正常显示的子VI,然后再进行报文解析。
最后,报文中负数的处理请把握两个关键词,1)补码和2)LABVIEW的I16和U16格式转化功能~
(I16是有符号十六进制;U16是无符号十六进制。)
串口基础知识部分参考书籍:《单片机原理及接口技术》(李全利等编著)
LABVIEW串口通信基础的更多相关文章
- LabVIEW串口通信
Instrument I/O 利用LabVIEW内置的驱动程序库和具有工业标准的设备驱动软件,可对 GPIB(通用接口总线).Ethernet(以太网)接口.RS-232(标准串行接口总线)/RS-4 ...
- 小草手把手教你 LabVIEW 串口仪器控制——初识VISA串口
有些人,学习一样东西时候,喜欢现成的例子.很多人学习一门技术,都喜欢现成的例子开始,比如学单片机的啊,最开始都是修改的例子吧,学语言的也是.最开始都是模仿.这个年头看书上的理论知识太浪费时间了.所以啊 ...
- 小草手把手教你LabVIEW串口仪器控制—安装使用仪器现有驱动
声明:很多仪器是没有驱动的.所以,具体问题具体分析.另外声明:所谓的驱动,也就是封装好的底层的串口通信程序,也是程序而已,只不过别人帮你做成了子 VI,让自己容易用.所以:不要弄混淆了概念.国外的很多 ...
- 小草手把手教你 LabVIEW 串口仪器控制——VISA 串口配置
建议大家按我发帖子的顺序来看,方便大家理解.请不要跳跃式的阅读.很多人现在看书,都跳跃式的看,选择性的看,导致有些细节的部分没有掌握到,然后又因为某个细节耽误很多时间.以上只是个人建议,高手可以略过本 ...
- 手把手教你 LabVIEW 串口仪器控制——VISA 驱动下载安装篇
仪器控制,核心在于 VISA 函数..有些仪器可能不需要 VISA,有自己的 DLL 什么的,我就管不着. 正常情况下,大家安装的 LabVIEW,都是不带 VISA 驱动 ...
- LabVIEW串口通信的一个例子-串口"示波器"
1.程序界面:<ignore_js_op> 功能介绍:左边上方串口接收区,下方为串口字符发送区.右方为一个波形图表,在程序内部每次将串口发送过来的数据,以f%格式化,显示在波形图表上.按钮 ...
- STM32 串口通信基础知识
1.串口通信简介 通信接口的两种方式: 并行通信 -传输原理:数据各个位同时传输. -优点:速度快 -缺点:占用引脚资源多 串行通信 -传输原理:数据按位顺序传输. -优点:占用引脚资源少 -缺点:速 ...
- [分享]我的LABVIEW快速开发串口测试软件实例
LABVIEW是美国国家仪器公司(National Instruments,简称NI)的创新产品,它允许编程人员使用图形方式来进行编程,摒弃了艰涩难懂的代码,只需要拖动相应图形控件然后连线,进行简单的 ...
- 一个由印度人编写的VC串口类
http://www.cnblogs.com/lwngreat/p/4098374.html 软件介绍 一个由印度人编写的VC串口类(也是一种VC串口控件),他还配合这个类写了VC 串口通信方面的一些 ...
随机推荐
- MyEclipse优化设置(最详细版本)
MyEclipse优化设置由于自己需要,在网上查了相关资料,现在总结如下: 本优化方法较全,希望能帮助到需要的人... 第一步: 取消自动validation validation有一堆,什么xml. ...
- 10分钟让你明白MySQL是如何利用索引的
一.前言 在MySQL中进行SQL优化的时候,经常会在一些情况下,对MySQL能否利用索引有一些迷惑. 譬如: MySQL 在遇到范围查询条件的时候就停止匹配了,那么到底是哪些范围条件? MySQL ...
- 小慢歌之基于RHEL8/CentOS8的网络IP配置详解
➡ 在rhel8(含centos8)上,没有传统的network.service,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,那么该如何进行网络配置呢. ➡ ...
- python基础学习21----进程
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程. 进程与线程的使用有很多相似之处,有关线程方面的知识请参考https://w ...
- ArcGIS pro2.3中添加天地图底图
应用背景: 很多时候,我们需要使用网络上的遥感影像或者百度地图.天地图等在线地图做一些矢量化工作或者其他. 笔者见过很多人都是把百度地图截图,然后把图片导如Arcmap或者Arcgis pro中,然后 ...
- 分布式全局ID生成器设计
项目是分布式的架构,需要设计一款分布式全局ID,参照了多种方案,博主最后基于snowflake的算法设计了一款自用ID生成器.具有以下优势: 保证分布式场景下生成的ID是全局唯一的 生成的全局ID整体 ...
- 关于Javascript的des加密
参考文章:https://www.cnblogs.com/MSMXQ/p/4484348.html 需要先下载CryptoJS文件,然后引入其中的两个文件,可以在github中找到. 直接上代码 &l ...
- 让sublime text3支持Vue语法高亮显示[转]
1.准备语法高亮插件vue-syntax-highlight. 下载地址:https://github.com/vuejs/vue-syntax-highlight 下载页面并下载: 解开压缩包vue ...
- PHP(Mysql/Redis)消息队列的介绍及应用场景案例--转载
郑重提示:本博客转载自好友博客,个人觉得写的很牛逼所以未经同意强行转载,原博客连接 http://www.cnblogs.com/wt645631686/p/8243438.html 欢迎访问 在进行 ...
- 配置使用;yum安装slatstack的master,minion<at>centos6_x86_64
使用: ####################################### 配置: ####################################### 安装: 服务端安装: [ ...