如何在LabVIEW中使用Modbus通信

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在LabVIEW中使用Modbus通信相关的知识,希望对你有一定的参考价值。

参考技术A LabVIEW中有第三方的Modbus通信模块,也可以自己编写。关键是看你用来做什么。
(1)如果你仅仅使用LabVIEW开发上位机,而你的下位机支持Modbus协议的话,那么你只需要看懂协议,然后读取所需要的数据即可。
(2)如果你开发的LabVIEW作为中间级的监控,需要以Modbus协议上传数据到更高一级的主控中心,我一般采取的方法是自己编写Modbus协议上传数据。
以上仅供参考!本回答被提问者采纳

LabVIEW串口通信

目录

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中使用Modbus通信的主要内容,如果未能解决你的问题,请参考以下文章

如何在LabVIEW中使用Modbus通信

如何在LabVIEW中使用Modbus通信

如何在LabVIEW中使用Modbus通信

如何在LabVIEW中使用Modbus通信

请教如何在LabVIEW中使用Modbus通信

怎么在LabVIEW中使用Modbus通信