labview实例之IO输入.docx
- 文档编号:11337362
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:11
- 大小:523.51KB
labview实例之IO输入.docx
《labview实例之IO输入.docx》由会员分享,可在线阅读,更多相关《labview实例之IO输入.docx(11页珍藏版)》请在冰豆网上搜索。
labview实例之IO输入
实验名称:
LabVIEWIO输出实验
组号:
62同组者:
吕隆斐日期:
5.5
【一】实验目的
掌握LabVIEW串口通信的工作原理、功能和使用方法;
掌握LabVIEW的编程方法。
【二】实验主要仪器设备
一台安装LabVIEW、Proteus、IN_VISA串口通讯协议驱动和虚拟串口软件VSPD的PC机;
【三】实验原理
被动接收型的串口通信稍微麻烦一点,由于上位机是被动接收的,上位机不知道什么时候开始下位机就已经有数据上来了,很有可能下位机发送到一半时,上位机刚好开始接收数据,这时只能接收到后面一半的数据了,所以对于这种通信,一般是采用数据帧的方式进行通信。
这种数据帧的通信方式至少由三部分数据组成:
帧头、数据、帧尾(如果数据是固定长度的话,似乎帧尾也可以省掉)。
帧头是为了告诉上位机:
从这以后的数据就是有用的数据了,相当于约定好的暗号。
一般,帧头至少会用二个以上字节,如果只用一个字节的话,万一数据中的数据和这个帧头一样,就会误以为这个数据是帧头,从而导致解析数据出错;帧尾的作用也差不多,告诉上位机从这之前的数据才是有用的数据。
但实际上一般的数据帧远不止这几个部分,还会加上一些校验字节、时间信息、帧计数器之类的信息在上面。
其中校验字节是为了检查数据在传输过程中有没有出错的,跟串口的校验位要区分清楚,校验位也是检查数据传输时有没有出错的,但由底层硬件来实现,校验方法由标准规定好,但有几种可以选择,只有一个位(Bit,只能是0或1)。
校验字节是由软件层来实现的,至少有一个字节(Byte,有8个位),而且校验方式由用户定义,非常灵活。
由于被动方式中串口的缓冲区中一直会有数据在,为了保持数据的连续性,在读取数据时跟第一种仪器控制类型不一样,而是将读取的所有的串口数据都保存在移位寄存器中,在软件上处理完这些数据后再将它们从移位寄存器中删除。
由于VISAREAD的输出是字符串,所以一般使用“连接字符串”这个函数将它们连接起来,然后接到循环结构中的移位寄存器中进行保存,当移位寄存器中的数据量达到一定时或满足数据处理的条件时,才停止这个循环输出读取到的数据。
在接收下位机发送的帧数据时,一定要先了解帧格式,这样才能正确地解析出帧内的数据。
下面以例子来说明数据帧格式的通信。
设定通信数据帧每7个字节为一帧数据,其中以0xAC、0x96二个字节作为数据帧头,第3、4个字节为帧计数器,最大值为0xFFFF,到达最大值后重新从0开始计数。
第5、6、7三个字节是数据信息,分别代表数据的高中低位。
在实际应用中,数据帧格式可以根据需求自己定义。
由于LabVIEW中接收到的数据都是以字符串的形式显示出来的,所以需要将字符串转换为ASCII码,一般可以直接使用“转换为U8数组”这个函数,如下图所示:
图8-1字符串转换为U8字节
转换为U8字节后,得到的是所传输字符的ASCII码,我们就很容易进行数据帧的判断了。
现收到以下的字符串数据:
图8-2实际接收到的字符串
上图中下半部分显示的数组是使用“字符串转换为U8数组”的函数转换之后得到的数组,一个是十六进制显示,另一个为十进制显示。
对照定义的数据帧格式,就很容易得到我们需要的数据了。
首先是要看从哪里开始才是完整的第一帧,从上面十六进制显示的数组中我们可以看到,并不是第一个字节就是我们需要的帧头,因为下位机是一直处于发送数据的状态,很可能在串口发送一帧数据的过程中串口就被初始化或者被清空了一次缓冲区,那么这一帧数据的前面部分数据可能就会丢失,只留下后面一部分数据。
以上图为例子,第一二个字节为0x32、0x22,显示不是我们要的帧头,我们要的帧头是在第6、7个字节。
以程序来实现的话就是先查找第一个帧头,使用“搜索字符串”,如果找到则判断它下一个字节是否是第二个帧头,如果是,表明已经找到帧头,输出帧头的位置;如果它下一个字节不是第二个帧头,说明这里不是真正的帧头,继续查找下一个帧头,直到找到帧头或搜索完整个字符串都找不到帧头。
这是一个程序的算法问题,具体实现的程序如下图所示:
图8-3帧头查找程序
查找帧头到以后,再找数据就容易了。
根据之前的定义,第5、6、7个字节是才是我们要的数据,所以直接使用索引号进行索引输出即可(注意数组下标)。
图8-4获取实际数据
一般情况下,如果是用三个字节表示一个数据的话,那么这三个字节分别表示为一个数据的高中低字节,即高字节要乘以25536再加上中字节乘以256再加上低字节的值,这样定义后可表示的数据的范围就会扩大很多。
这里为了说明问题,直接认为三个字节的数据相加就是我们要的实际数据,在实际使用过程中应该根据帧格式的字义来解析这个数据。
另外,帧格式中定义了最后一个字节为状态标志位,所以提取数据前还要检查一下这个标志位是否正常,不正常时要进行相应的处理,这里不再详细描述。
至此完成一次数据帧的提取。
有一些对测试时间有要求的地方,就会要求在最短的时间内得到最多的信息。
图8-2中我们可以看到,接收到的数据帧中,除了中间一个完整的帧之外,头尾还有一些无用的数据,其实这些数据中也包含了有用的信息的!
比如我们可以从0xAC、0x96这二个帧的位置中推断中它前面的0x22、0x2A、0x38这三个字节也是我们想要的数据字节,但是由于没有接收到它的帧头,所以程序没能提取出来。
但我们可以从后一帧的帧头推算出前面那一帧的数据字节是哪些,即使没收到前面那一帧的帧头。
这里只给出一个流程,不再给出具体的程序。
另外,有可能接收的数据长度比较长,这是就不止包含了一帧的数据在里面,所以在程序中也要判断一下剩下的数据还够不够一帧的数据长度,如果够则可以根据上一次查找的帧头位置+数据帧长度来确定下一个数据帧的帧头位置了,不需要使用搜索的方法。
也可能存在处理完一帧数据后,剩下的数据不够一个帧的,这时可以将这些剩下的数据保留起来,将它添加到下一次接收到的数据前面,组成新的数据再进行处理。
去掉已经处理的数据可以使用“删除数组元素”这个函数来实现。
这里也不再给出具体的程序。
【四】实验内容
.实验步骤
1、课内题1
2、课内题2
.实验结果(包括程序代码)
1、课内题
2、课内题2
【五】实验总结与讨论
这个实验很有趣
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- labview 实例 IO 输入