首页 > 编程知识 正文

labview串口监测数据(labview实现串口通信)

时间:2023-05-05 20:05:54 阅读:76746 作者:4884

参考:

Labview串口通信开发案例

LabVIEW学习笔记(11 ) ——使用visa的串行通信

虚拟互操作软件架构(VISA )的出现允许将一系列设备控制程序应用于各种硬件接口,并调用同一VISA库函数VISA用户可以连接到大多数设备总线,包括GPIB、USB和串行端口。 无论基础是什么硬件接口,用户都只能面对统一的编程接口VISA。 所以今天我要学习如何使用VISA进行串行通信。

串行端口是用于与计算机上非常通用的设备进行通信的协议。 请勿与通用串行总线通用串行总线或USB混淆。 大多数计算机都包含两个基于RS232的串行端口。 串行端口也是仪器仪表设备通用的通信协议; 许多支持GPIB的设备也具有RS-232端口。 同时,串口通信协议也可以用于获取远程采集设备的数据

串行通信串行通信的概念非常简单,串行以位为单位发送和接收字节。 虽然比“字节”(byte )并行通信慢,但串行端口可以在一条线上发送数据,在另一条线上接收数据。 简单,可以进行长距离通信。 例如IEEE488定义平行通行状态时,规定设备线全长不得超过20米,任意两个设备之间的长度不得超过2米; 串行端口时,长度可达1200米。

典型地,串行端口用于传输ASCII码字符。 通信使用3条线进行:

(1)地线

)2)寄送

(3)接收

由于串行通信是异步的,因此端口可以在一个线上发送数据,在另一个线上接收数据。 其他线用于握手,但不是必须的。

串行通信最重要的参数为波特率数据位停止位奇偶校验

对于进行通信的两个端口,这些参数必须匹配。

a .波特率这是测量通信速度的参数。 他表示每秒发送的位数。 例如,300波特表示每秒发送300位。 所谓时钟周期,是指波特率。 例如,如果协议需要4800波特率,则时钟为4800HZ。 也就是说,串行通信在数据线上的采样率为4800HZ。 电话线的波特率通常为14400、28800和36600。 波特率可以远大于这些值,但波特率和距离成反比。 高波特率用于经常安装的近设备之间的通信,典型的示例是GPIB设备的通信。

b .数据位这是测量通信中实际数据位的参数。 计算机发送数据包时,实际数据不是8位,标准值为5、7、8位。 如何设定取决于想发送的信息。 例如,标准ASCII代码为0-127(7位)。 扩展的ASCII代码为0-255(8位)。 在数据中使用简单文本(标准ASCII码)时,每个数据包使用7位数据。 每个包都指向一个字节,包括开始/停止位、数据位和奇偶校验位。 由于实际数据位取决于通信协议的选择,因此术语“分组”是指任何通信情况。

c .停止位用于表示单个分组的最后一个位。 典型值为1,1.5和2位。 由于数据在传输线路上定时,每个设备都有自己的时钟,因此在通信过程中两台设备之间很可能发生小的异步。 因此,停止位不仅指示传输的结束,而且提供计算机校正时钟同步的机会。 应用于停止位的位数越多,不同的时钟同步容忍程度越高,但数据传输率也同时变慢。

d .奇偶校验是串行通信中一种简单的检错方式。 有偶数、奇、高、低四种检查方法。 当然,没有奇偶校验位也可以。 在偶数和奇数检查中,串行端口设置奇偶校验位(数据位后面的1位),并确保在单个值中传输的数据具有偶数或奇数逻辑高位。 例如,当数据为011时,对于奇偶校验,奇偶校验比特为0,保证逻辑上的高位数是偶数。 奇偶校验时,奇偶校验位为1,逻辑上为前3位。 高位和低位很容易设置逻辑高或逻辑低的检查,而不是真正的检查数据。 据此,接收装置能够得知1位的状态,有判断噪声是否与通信不干扰,或者收发数据是否不同步的机会。

LabVIEW的串行端口VI表示LabVIEW的串行端口通信VI位于Instrument I/O Platte的串行上。 包括以下内容:

VISA函数NI驱动程序下载——VISA函数

VISA函数位于函数面板的设备I/O 串行端口的子面板中,可以通过串行端口子面板中的这些VISA函数与GPIB、USB、串行端口等总线之一进行通信。

用LabVIEW写串行驱动控制设备需要下图中的几个函数。 实际上,只需要以下函数:

典型的串行控制机制是配置(打开)串行端口、读写串行端口和关闭串行端口。 在这里,我们将依次学习这三个步骤。

1.1配置(打开)串行端口配置串行端口是进入串行端口通信的门槛,只有配置成功才能进行正确的通信。 首先,让我们看看VISA配置串行函数。

这里有诀窍。 放置串行端口时,在相应的参数端口处单击鼠标右键,然后创建新的常量,或输入控件,并在新创建的常量或输入控件上进行修改。 为什么这么说,是因为新制作的数据类型一定是正确的。 接下来,我将介绍主要的输入参数。

(1)启用结束符)的目的是串行设备准备识别结束符,默认值为TRUE,VI_AT

TR_ASRL_END_IN属性设置为识别终止符;如值为FALSE,VI_ATTR_ASRL_END_IN属性设置为0(无)且串行设备不识别终止符。
(2)终止符:通过调用终止读取操作。从串行设备读取终止符后读取操作终止。 0xA是换行符( n )的十六进制表示。消息字符串的终止符由回车( r )改为0xD。
终止符的设置如下所示:

(3) 超时:指定读/写操作的时间,以毫秒为单位。 默认值为10000ms,即10s。如果你设置了超时,等待超时时间到了,程序就不执行了,错误输出会输出错。
(4)VISA资源名称:指定要打开的资源。VISA资源名称控件也可指定会话句柄和类。
(5)波特率是传输速率。 默认值为9600。
(6) 数据位是输入数据的位数。 数据位的值介于5和8之间。默认值为8。
(7)奇偶指定要传输或接收的每一帧使用的奇偶校验。

1.2 VISA读取

首先看下 VISA 读取帮助:

左边输入有个 VISA 字节总数,你必须指定你要读的字节数。那么问题来了,这个字节数怎么确定呢?

一般读取串口的通信程序都如上图所示, VISA 读取函数 的 “读取字节数” 这个输入端口设置十分关键。由于在串口通信中,如果指定读取 100 个串口缓冲区的字节数,如果当前缓冲区的数据量不足 100 个时,程序会一直停在 VISA 读取 这个节点上,如果在超时的时间(默认是 10 秒)内还没有凑足 100 个数据的话,程序就会报 “Time out” 的错误,如果超时时间设置得太长,有可能导致程序很长时间停止在 VISA 读取 这个节点上。
因此, 我们常采用上面的解决的办法:使用 “Bytes at Port” 这个串口的属性节点,在仪器I/O子面板下,如下图:

也可以在 VISA 资源线上右键 >> 创建 >> Instr类的属性 >> Serial Settings >> Number of Bytes at Serial Port,如下图所示:


这个属性节点读取当前串口缓冲区有字节数,然后将它的输出连接到 VISA 读取 的 “读取字节数” 这个输入端上即可,这样当前缓冲区中有多少个字节就读回多少个,不会有任何等待。
目前串口的应用大致有两种类型:一种是仪器控制类型的,一般是上位机发送一个指令,然后下位机作出响应,返回数据给上位机,上位机再读取出来,完成一次通信,即一问一答;另一类是被动接收形的,即下位机会一直发送数据上来。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。