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 串口通信方面的一些 ...
随机推荐
- sqlserver 跨服务器备份表
exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Querie ...
- MySQL 支持utf8mb4
utf8mb4 utf8mb3 utf8 Refer to The utf8mb4 Character Set The utf8 Character Set (Alias for utf8mb3) M ...
- CentOS7 配置静态 ip
1. 为 CentOS7 配置静态 ip 1.1 修改文件/etc/sysconfig/network-scripts/ifcfg-ens33 sudo vi /etc/sysconfig/netwo ...
- Spring hibernate 事务的流程
1 在业务方法开始之前 ①获取session ②把session和当前线程绑定,这样就可以在Dao中使用SessionFactory的getCurrentSession()方法来获取session了 ...
- 第7章 Linux文件与目录管理
目录与路径 相对路径与绝对路径 目录的相关操作 . 代表此层目录 .. 代表上层目录 - 代表前一个工作目录 ~ 代表"目前用户身份"所在的文件夹 ~account 代表accou ...
- python3: 数字日期和时间(2)
12.基本的日期与时间转换 Q: 你需要执行简单的时间转换,比如天到秒,小时到分钟等的转换 A: 为了执行不同时间单位的转换和计算,请使用 datetime 模块. 比如,为了表示一个时间段,可以创建 ...
- php包含那点事情[WOOYUN]
有空就多整理下曾经研究过的知识和需要温顾的知识,明年可能去寻工作络. 关于PHP中LFI(Local File Include,本地文件包含)漏洞,大家都很熟悉了;paper很多很多,特别是国外的.. ...
- Monad、Actor与并发编程--基于线程与基于事件的并发编程之争
将线程.事件.状态等包装成流的源. 核心:解决线程的消耗和锁的效率问题. Java和Node.js可以说分别是基于线程和基于事件的两个并发编程代表,它们互相指责瞧不起对方,让我们看看各种阵营的声音: ...
- vagrant up下载box慢的解决办法
即在运行vagrant up时得到其的下载路径,如: https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/20190101.0.0/prov ...
- SQL必知必会摘要
数据检索 2.2 检索单个列 SELECT prod_name FROM Products; SQL语句不区分大小写 2.3 检索多个列 SELECT prod_name,prod_id,prod ...