精华内容
下载资源
问答
  • labview串口缓冲区大小
    千次阅读
    2015-07-03 14:06:44

    labview中接收串口缓冲区数据后循环转换成float型数据的程序框图

    这里写图片描述

    更多相关内容
  • LabVIEW串口通信

    万次阅读 2022-05-03 15:50:46
    LabVIEW串口通信使用范围非常广泛,例如,通过串口使用ModBus协议驱动仪器、串口驱动PLC设备等。在LabVIEW中有专业的VI(VISA)可以驱动串口进行数据读、写操作,在函数面板 → 仪器I/O → 串口子面板中。

    目录

    1、串口写入数据

    2、串口读取数据

    3、清除缓存区

    4、设置缓存区

    5、数据超时

    6、数据终止符


    串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。在LabVIEW中串口通信使用范围非常广泛,例如,通过串口使用ModBus协议驱动仪器、串口驱动PLC设备等。

    在LabVIEW中有专业的VI(VISA)可以驱动串口进行数据读、写操作,在函数面板 → 仪器I/O → 串口子面板中,如下图所示:

    相应的说明可参见帮助文档,如下图所示:

    通过几个简单的Demo示例了解VISA串口函数的使用方法。

    代码下载:LabVIEW串口通信-嵌入式文档类资源-CSDN下载

    1、串口写入数据

    打开串口COM3,通信速率115200/bps,写入数据:A1$,示例代码如下所示:

    2、串口读取数据

    打开串口COM8,通信速率115200/bps,读取20个字节长度数据,示例代码如下所示:

    3、清除缓存区

    以上两种方法介绍了LabVIEW串口最基本的读、写操作,实际上直接这样使用的存在问题的。 

    因为在大多数情况下串口设备不管在LabVIEW执行或着关闭的状态都一直在上传数据。端口在收到第一个字符的时候可能没有被配置好,所以它读到的是无效的缓冲区信息,这样直接开启后进行读、写数据极其容易导致错误。

    为了解决这样的问题,在串口配置后需要放一个延时(大约XXXms),就可以让Serial port有足够的时间完成设定。再来使用VISA清空I/O缓冲区函数,就可以将接收缓冲区中不正确的资料清除。对串口读取功能进行优化,示例代码如下所示:

    以下示例中读取数据长度的方式进行优化,通过属性节点(Bytes at Port)获取字节长度,无需再手动定义长度,避免定义长度太短导致接收不全或者定义数据过长导致浪费情况。

    4、设置缓存区

    目前VISA串口缓冲区大小最大可达到 2的32次方(4,294,967,296 字节),可以在该范围内定义缓存区大小,例如以下示例,定义缓冲区大小为80000字节。

    5、数据超时

    在初始化VISA串口时,可以设置超时时间,当读、写数据超出时间,会提示错误信息。

    以下示例定义串口通信超时时间是10秒。

    6、数据终止符

    在初始化VISA串口时,可以设置终止符,通过调用终止读取操作,从串行设备读取终止字符后读取操作会自动终止。例如以下示例,读取到“$”字符(十六进制:0X36)时,会停止读取操作。

    代码下载:LabVIEW串口通信-嵌入式文档类资源-CSDN下载


    拓展学习

    1、VISA错误代码 - LabVIEW 2016帮助 - National Instruments 

    2、用NI-VISA为串口分配大缓冲区时出现的问题 - National Instruments 

    3、LabVIEW智能示波器(普源DS1000E)_不脱发的程序猿的博客-CSDN博客

    4、LabVIEW串口调试助手_不脱发的程序猿的博客-CSDN博客 

    展开全文
  • LabVIEW串口通信实际操作

    千次阅读 2021-05-27 20:42:15
    LabVIEW串口通信基础知识 读取串口字节 我们新建一个空白 VI,借助串口调试助手和虚拟串口,在 LabVIEW 中编写的一个最简单的例子:写一个基本的读取串口字节的程序,在程序框图中编程如下: 注意这里,串口配置放...

    理论基础:
    LabVIEW串口通信基础知识

    读取串口字节

    我们新建一个空白 VI,借助串口调试助手和虚拟串口,在 LabVIEW 中编写的一个最简单的例子:写一个基本的读取串口字节的程序,在程序框图中编程如下:
    在这里插入图片描述
    注意这里,串口配置放到循环外,不要往复让这个执行。运行程序,在前面板我们可以看到:
    在这里插入图片描述
    在这里插入图片描述
    以下几点必须注意:
    (1)串口有个缓冲区,存在计算机内存里,VISA 读取,就是从缓冲区读取数据,读完之后,读取的就不存在缓冲区里了。如果你没读取,那就一直在缓冲区里,直到缓冲区溢出。
    (2)如果有多个线程,都有读 VISA,或者一个 while循环 里,多个地方同时读,这样,肯定会有错。记住,保证一个串口,只有一个读,或者写。232 接口里,读和写可以同时进行,因为他是全双工的。而 485 半双工 2 线制时候,请注意,读和写不可以同时,因为是半双工。
    (3) 如果你单片机数据是间隔的,而且每次发送的是固定的数据。请自己设定VISA 读取的,字节数,比如设置为 8。这样的话,比延时读取要靠谱的多。
    如果我们需要传递的数据是数值型数据呢?我们重新发送:

    在这里插入图片描述
    在这里插入图片描述
    这是怎么回事呢?
    LabVIEW 从串口接收数据时要注意:
    ①假设 LabVIEW 从串口接收到的数据为 “1234”(正常显示模式下),那么这个数据在串口底层的时候其实是这样的二进制数据:00110001 00110010 00110011 00110100。只是在 LabVIEW 中,这些二进制数据是以字符串形式显示出来的,它们的实质还是二进制数据,这几个二进制数据转换为十进制数据分别是“49,50,51,52”,由于字符串都是以ASCII 码形式保存在计算机中的,那么 49,50,51,52 这几个数在 ASCII 表中就表示是字符串“1,2,3,4”。所以这几个数据在 LabVIEW 中就显示为字符串的 1,2,3,4 了。

    如果明白这里面的转换关系,那么要进行数据转换时就很容易了,比如上面的VI中,如果LabVIEW 中接收到的是字符串 “XYabcdrfg0123456789”,而原本下位机传送的是数值型数据,只需要将 “XYabcdrfg0123456789” 字符串转换为对应的 ASCII 值就是实际上下位机传上来的数据了。LabVIEW 中将字符串转换为对应的 ASCII 值的函数是 “字符串至字节数组转换” 这个函数,如下所示:
    在这里插入图片描述
    在这里插入图片描述
    这个时候有人要问了,如果我们想把所有的字符串接收完后一次性取出来,也就是将串口没有接收的数据拼接到一起,然后集体提取,怎么办呢?这个,可以用移位寄存器或者反馈节点,然后用连接字符串拼接。我们稍微修改下程序框图,修改部分用红框框起来:

    在这里插入图片描述
    接下来,我们用串口助手给 Labview程序发生一段文字,看看它的拼接效果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    当串口资源被占用时,在 LabVIEW 中会报错,提示串口号存在,但当前不能对其进行操作,同时打开 MAX时也可以在对应的串口号下看到同样的错误,这表示这个串口已经被其它程序占用了,比如有时候打开了串口调试助手来调试串口,然后又想在 LabVIEW 里面试一下,这时就会报这个错,因为串口已经被串口调试助手调用了,它不能被二个程序同时使用。解决的方法是关掉其它程序即可,串口调试助手里也可以关闭这个串口。还有一种情况是调试 OK 后生成 EXE,运行 EXE 也出现这个问题,这时是因为串口被原来的 LabVIEW 程序打开,再用 EXE 打开时就会报错,解决办法是关掉原来的 LabVIEW 程序。最好是关掉 LabVIEW。在使用串口的过程中一定要关闭串口(使用 VISA CLOSE),否则程序在退出的时候会报错说数据丢失。

    写入和读取串口字节

    上一节我们了解了基本的读取串口字节的程序,接下来我们写一个稍微复杂点的程序,来实现即可写入又可读取串口的程序,如下所示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    运行程序,用Labview程序向串口调试助手发生数据:
    在这里插入图片描述
    在这里插入图片描述
    显然,通信没有问题!

    官方示例

    我们打开Labview中的一个官方示例,来欣赏下官方的基本串行写入和读取程序,打开程序框图如下:
    在这里插入图片描述
    再看看对应的前面板如下所示:
    在这里插入图片描述

    展开全文
  • 02 串口发送 先说明一下,跟串口相关的函数都位于下图所示的位置。...在发送缓冲区中填入“你好”,然后运行程序,可以看到在XCOM中收到了相同的文字。在运行LabVIEW程序前,需要先在XCOM软件中打开串口,这
  • LabVIEW串口通信基础知识

    万次阅读 多人点赞 2021-05-25 16:04:50
    Labview串口通信开发实例 LabVIEW学习笔记(十一)——利用VISA进行串口通信 随着VISA( Virtual Instruments Software Architecture,VISA ) 的出现,使得一套仪器控制程序适用于种硬件接口成为可能,通过调用相同的...

    参考:
    Labview串口通信开发实例
    LabVIEW学习笔记(十一)——利用VISA进行串口通信
    随着VISA( Virtual Instruments Software Architecture,VISA ) 的出现,使得一套仪器控制程序适用于种硬件接口成为可能,通过调用相同的VISA库函数并配置不同的设备参数,就可以编写控制各种 I/O 接口仪器的通用程序。 通过VISA用户能与大多数仪器总线连接,包括GPIB、USB、串口等等,无论底层是何种硬件接口,用户只需要面对统一的编程接口—VISA。所以今天来学习如何利用VISA进行串口通信。

    串口

    串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus 或者 USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据

    串口通信

    串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
    典型地,串口用于ASCII码字符的传输。通信使用3根线完成:
    (1)地线
    (2)发送
    (3)接收
    由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。
    串口通信最重要的参数是波特率数据位停止位奇偶校验
    对于两个进行通信的端口,这些参数必须匹配:

    a.波特率

    这是一个衡量通信速度的参数。他表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要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.奇偶校验位

    在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

    LabVIEW中的串口

    串口VI介绍

    LabVIEW的串口通讯VI位于Instrument I/O Platte的Serial中,包括:
    在这里插入图片描述

    VISA函数

    NI​驱动​程序​下载——VISA函数
    VISA 函数在函数面板的仪器I/O → 串口子面板中,通过串口子面板中的这些 VISA 函数可以与GPIB、USB、串口等中的任何一种总线通信。
    用 LabVIEW 来写串口驱动控制仪器,只需要下图的几个函数即可。事实上,真的只需要下面几个函数:
    在这里插入图片描述
    一般的串口控制结构是:配置(打开)串口、读写串口、关闭串口,接下来我们依次来学习这三个步骤。

    1.1 配置(打开)串口

    配置串口是进入串口通讯的门槛,只有配置成功了,才能进行正确的通讯。首先我们看下 VISA 配置串口函数:
    在这里插入图片描述
    这里有个小技巧,配置串口时最好是在对应的参数端口那里,右键,新建常量或者输入控件,然后再在新建出来的常量或者输入控件上面修改。因为,新建出来的数据类型,肯定是对的。接下来解释下主要的输入参数:
    (1) 启用终止符: 目的是使串行设备做好识别终止符的准备,默认值为TRUE, VI_ATTR_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 读取 的 “读取字节数” 这个输入端上即可,这样当前缓冲区中有多少个字节就读回多少个,不会有任何等待。
    目前串口的应用大致有两种类型:一种是仪器控制类型的,一般是上位机发送一个指令,然后下位机作出响应,返回数据给上位机,上位机再读取出来,完成一次通信,即一问一答;另一类是被动接收形的,即下位机会一直发送数据上来。

    展开全文
  • LabVIEW串口编程】03 串口接收

    千次阅读 2020-10-28 21:14:28
    上一篇说到,串口发送一次数据的步骤为:打开串口-->发送数据-->关闭串口。 参照串口发送的思路,串口接收一次数据的步骤为:打开串口-->接收数据-->关闭串口。但是这里有一个问题,数据的接收方是不...
  • Labview2014实现串口通信,并对输入的字符串进行CRC校验,可直接用于测试modbus485协议,并且程序对串口缓冲区数据进行了解析。
  • LabView串口调试助手

    2022-07-20 13:55:59
    LabView串口调试助手
  • LabVIEW串口调试工具

    2015-11-24 13:51:08
    LabVIEW 串口调试工具 波特率无限制、串口接受发送缓冲区可设置
  • LabView串口收发实验总结
  • 分享一下我自己做的一个串口数据采集上位机界面以及程序,它的优点有: 1.拥有起始校验位,所以当硬件要跟其进行通讯时,只需要在发数据前发一个字符作为起始校验,则该界面会自动从起始位后开始读取数据,则数据将会是...
  • LabVIEW串口编程】 02 串口发送

    千次阅读 多人点赞 2020-10-28 21:13:38
    先说明一下,跟串口相关的函数都位于下图所示的位置。官方的帮助文档对每个函数有详细介绍,大家有不懂的地方首先查看帮助文档,配合搜索引擎深化...在发送缓冲区中填入“你好”,然后运行程序,可以看到在XCOM中收到
  • LabViEW实现串口通信,完全的基于模拟的软件编写方法。可以实现单片机与电脑的通信。
  • 意思就是,前面的先侦测下串口缓冲区有多少数据,侦测完了就告诉 VISA 读,VISA就全读出来; 串口有个缓冲区,存在计算机内存里,VISA读取,就是从缓冲区读取数据,读完之后,读取的就不存在缓冲区里了。如果你没...
  • 设置单次发送数据量小于缓冲区大小 3.通过延时程序匹配发送与接收速度 4.设置缓冲区更大 5.先打开接收端 二.该运行一次的运行了很多次 使用条件结构 一些潦草的解释 读取文本文件: 功能框图如图: 当按下确认查询键...
  • labview制作串口助手(VISA)

    千次阅读 2021-04-10 17:08:26
    labview利用串口的visa函数制作串口助手,可实现基本通讯
  • labview写的串口一直读不到数据,找了很久终于发现原因了。 在写串口之前,先确定串口的配置有没有错。如波特率、校验位、停止位、流控制等。 然后是确定硬件能用。包括USB转串口,单片机。我用的是USB转TTL,最...
  • 供查询缓冲区方式接收数据,这需要占用大量的CPU时间,且实时性不佳。相对而言,使用微软提供的MSCOMM32控件的 中断函数处理功能,可以实现中断方式的接收数据。同时,MSCOMM32控件可以单独设置串口的每一个引脚,...
  • 很早就想做一个类似的东西了,正好这学期学了LabVIEW,作业就交了这个,基于LabVIEW的“串口示波器”上位机。 1.程序界面: 功能介绍:左边上方串口接收,下方为串口字符发送。右方为
  • Labview上位机串口通信-读写

    千次阅读 2019-04-04 22:35:23
    (1)相关配置:串口资源(波特率等设置)、VISA的打开、配置(接收和发送缓冲区)、调用属性结点(一有字节出现就马上接收,或者发送) (2)读取部分:首先依据协议进行包头的识别,再从后续的字节里读取字节...
  • labview 串口通信

    2010-11-09 19:51:32
    供查询缓冲区方式接收数据,这需要占用大量的CPU时间,且实时性不佳。相对而言,使用微软提供的MSCOMM32控件的 中断函数处理功能,可以实现中断方式的接收数据。同时,MSCOMM32控件可以单独设置串口的每一个引脚,便于实现...
  • 基于labview串口通信

    万次阅读 2017-06-09 15:23:46
    一、十六进制和ASCII之间的相互转换 有的仪器进行与labview通信,它以十六进制的形式返回信息。例如,它不会返回字母"L”,而是返回它对应的...在LabVIEW中,我们需要编程实现将这个十六进制表示转换为其对应的
  • labview做的一个简单的串口接收程序

    千次阅读 多人点赞 2020-06-19 21:42:11
    因为要用labview做一个数据采集,因此才刚刚接触这一方面,就分享出来最基础的用labview接收串口信息。希望能帮助到有需要的人。 首先说明一下要使用的工具 1、Configure Virtual Serial Port Driver 这是一个用来...
  • LabVIEW上位机串口数据接受不完整、不正常的...(可能1):数据量太大,缓冲区需要重新设计(不常见) (可能2)接收的数据较长,没有接收完就已经结束。 可以采用首位相接的方法,当可以达到接受数据次数时再停止。
  • Labview与单片机进行串口通信

    万次阅读 多人点赞 2021-05-27 12:36:31
    Labview与单片机进行串口通信 做毕业设计时,遇到需要使用Labview作上位机与单片机进行串口通信的情况,在这里与大家分享开发的过程。 一、简介 这里使用基于Labview设计的程序作为上位机,基于Keil设计单片机程序作...
  • 对于串口通信,labview提供了visa的写入和读取函数,网上关于如何使用有大把的介绍,但是其写入和读取都是缓冲区,所以对应的控件都是字符串,在串口通信是,自动转换成字符对应的ASCII码的十六进制值类似于0xf0,0x...
  • Labview 串口通信

    万次阅读 多人点赞 2017-04-24 23:55:14
    有的仪器进行与labview通信,它以十六进制的形式返回信息。例如,它不会返回字母"L”,而是返回它对应的十六进制表示"4C”。在LabVIEW中,我们需要编程实现将这个十六进制表示转换为其对应的ASCII表示实现通信。 将...
  • Labview_Note_2

    2022-02-09 20:56:41
    Labview_Note2
  • 1、串口数据查询接收在 while循环中; 2、使用属性节点获取数据;...3、当接收数据不为0时,进入条件判断接收并将缓冲区数据显示到窗口; 4、程序如下 5、安装虚拟串口,进行数据测试; 6、 ...
  • LabVIEW串口通信全方位了解

    千次阅读 2017-02-13 21:38:53
    串口可以说是我们最容易见到,也最容易接触到的一种总线,台式机上一般都有二个,而现在很多下位机、仪器等很多都还是使用串口通信的。...首先补充一个比较重要的问题,就是在LabVIEW中使用串口的话一

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 178
精华内容 71
热门标签
关键字:

labview串口缓冲区大小