打印
[LabVIEW教程]

www6668088com/LabVIEW模块之I4787396/I6I/Modbus介绍

[复制链接]
1096|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
18088355911|  楼主 | 2019-12-25 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LabVIEW模块之Modbus介绍

Modbus协议遵循主从架构,其中主设备向从设备发送请求并等待响应。该架构使主设备可以完全控制信息流,这对旧的多点串行网络有益。即使在现代TCP / IP网络上,它也能让主设备对从机行为进行高度控制,这在某些设计中很有用。

第一层是应用程序数据单元(ADU),这是大多数人认为使用的Modbus的“类型”。有三个ADU:ASCII,远程终端单元(RTU)和TCP / IP。

TCP是一种现代格式,允许在软件中有效处理Modbus请求和响应,以及通过为每个请求使用专用连接和标识符来实现更高效的网络连接。RTU和ASCII是较旧的串行ADU格式,两者之间的主要区别在于RTU使用紧凑的二进制表示,而ASCII将所有请求作为ASCII字符流发送。

对于大多数应用,首选ADU取决于所需的物理网络(以太网,串行或其他),网络上的设备数量以及网络上主设备和从设备支持的ADU。从使用Modbus的应用程序的角度来看,数据应该简单地暴露,就好像ADU不存在一样。

在每个ADU中,有一个协议数据单元(PDU),它是Modbus协议的核心。每个PDU包含功能代码和相关数据。每个功能代码都有一个明确定义的响应,您可以将此功能代码视为发送给从站的命令。

在某些情况下,可能会发生错误。Modbus为异常定义了一个特定的PDU,让主人知道发生了什么。大多数驱动程序将其转换为对使用中的语言或应用程序有意义的形式。

Modbus数据模型
Modbus简单灵活地管理数据访问。本地,Modbus支持两种数据类型:布尔值和无符号的16位整数。

在SCADA系统中,嵌入式设备通常将某些值定义为输入,例如增益或比例积分微分(PID)设置,而其他值则是输出,如当前温度或阀门位置。为满足这一需求,Modbus数据值分为四个范围(见表1)。从站可以在每个范围内定义多达65,536个元素。
表1. Modbus数据模型块
在许多情况下,传感器和其他设备生成的数据类型不仅仅是布尔值和无符号整数。从设备通常将这些较大的数据类型转换为寄存器。例如,压力传感器可以在两个16位寄存器之间分割32位浮点值。

Modbus以完全概念的方式公开这些值,这意味着它们实际上可能不存在于内存中。例如,可以定义从设备,使得保持寄存器和输入寄存器实际上共享相同的存储器,如果该行为对从设备有意义的话。在大多数情况下,从站将它支持的每种类型的数据存储在单独的内存中,并限制主站可以访问的数据元素的数量。这种灵活性是一种选择,因为数据通过Modbus功能代码明确定义的行为公开。
Modbus功能代码
Modbus功能代码确定主机如何访问和修改数据。与概念上的数据范围不同,功能代码具有明确定义的行为。当要求从站执行功能代码时,它使用该功能的参数来执行明确定义的行为。图2显示了功能请求和设备实际内存之间的这种联系。
最常见的功能代码以它们修改或访问的概念数据范围命名。例如,“读取保持寄存器”采取将数据从定义为保持寄存器的存储器中拉出并将其返回到主机的操作。表2列出了最常见的功能代码。

表2. 通用功能代码
LabVIEW中的Modbus入门
NI提供三种与Modbus设备连接的主要机制:(1)高级OPC服务器,(2)Modbus I / O服务器,以及(3)通过LabVIEW在NI LabVIEW 2014软件中引入的低级Modbus API实时或LabVIEW数据记录和监控(DSC)模块。
LabVIEW Modbus API
当您的应用程序需要对Modbus请求的排序和时序进行高级别控制时,低级Modbus API是首选方案。在灵活性至关重要的情况下,低级API通常也是首选。相比之下,LabVIEW Modbus API提供的灵活性和功能也意味着您的应用程序代码必须更加复杂才能正确管理API。为了帮助您理解这种复杂性,LabVIEW提供了两个示例。

Modbus介绍示例
第一个示例Modbus Library.lvproj提供了API功能的基本概述。它还演示了PC上的实现与实时目标之间的差异。图3显示了Real-Time Modbus Master示例中涉及的代码。

此示例演示了使用LabVIEW API的Modbus应用程序的核心要求。首先,创建一个Modbus实例。在这种情况下,TCP主服务器。但是,您可以通过更改多态实例选择器将此示例切换为串行主机。

创建实例后,您可以开始轮询从设备以获取数据。该示例显示了功能代码读取输入寄存器的使用。API支持的所有Modbus功能代码都显示在相应的调色板上。由于协议的实现,从属API具有主无法实现的附加功能。例如,从器件可以写入输入寄存器范围,而主器件只能从该范围读取。图5显示了功能代码。

最后,关闭Modbus实例,取消分配与实例关联的内存。这也会关闭所有引用,包括实例使用的TCP连接或NI-VISA串行引用。
到目前为止,只讨论了主要的例子; 但是,每个示例都遵循大多数LabVIEW用户所熟悉的相同基本模式:打开,读/写和关闭。
最后,尽管API看起来确实相同,但了解关键差异非常重要。如果您的设备是主设备,它必须通过网络向相应的从设备发送请求以获取数据。另一方面,从属设备有自己的本地数据存储,可以快速访问它。

冗余主示例
基本示例可能足以满足某些应用; 但是,对于目标是与传感器或网关通信的复杂应用来说,这可能还不够。为了弥补这一差距,示例应用程序展示了如何使用两个主设备与给定的从设备进行通信。如果其中一个主设备发生故障并且与从机或人机界面(HMI)失去连接,则另一个主设备接管。

如果此设计满足您的应用程序的需要,或者您对更复杂的Modbus通信示例感兴趣,请在示例查找器中查看Redundant Modbus Masters.lvproj。
Modbus I / O服务器
Modbus I / O服务器位于LabVIEW DSC和LabVIEW Real-Time模块中,为通过Modbus进行通信提供了高级引擎。您可以注册要访问的数据集,而不是指定要发送的功能代码,I / O服务器会以指定的速率自动调度请求。
要使用I / O服务器,请将新的I / O服务器添加到项目中的所需目标。与低级API一样,您可以在Modbus主站或从站之间进行选择,这些会导致其他参数。例如,主站具有定义的轮询速率 - 每个请求发送到从站的速率,而从站必须等待这些请求并且没有预定义的时序。
创建I / O服务器后,您可以指定要读取的设备上的项目。与您必须自己生成和处理请求的低级API不同,Modbus I / O服务器允许您从各种格式和数据类型中进行选择。例如,您可以通过将变量映射到项400001来读取地址0处的保持寄存器,通过选择400001.1读取该寄存器的第一位,并通过选择F400001读取存储在寄存器0和1中的单精度浮点数。
选择要访问的变量后,可以使用框图上的共享变量节点读取或写入这些变量。您甚至可以为变量名称添加别名。

与I / O服务器应用程序相关的编程工作极少且易于理解。请记住,这种易用性有限制。数据仅以预定义的速率更新,并且无法在运行时添加或删除请求的数据。如果您的应用程序可以接受这些限制,则建议使用I / O服务器作为跨平台选项。
带OPC I / O服务器或OPC UA的NI OPC服务器
对于涉及通过不同协议进行通信的许多从设备的复杂应用,标准Modbus I / O可能还不够。常见的解决方案是使用OPC服务器,它充当所有系统的数据聚合器,然后使用LabVIEW DSC模块中包含的OPC I / O服务器与该OPC服务器通信。
图8显示了该架构的一个示例,NI OPC服务器使用Modbus直接与传感器通信,OPC UA与NI CompactRIO PAC通信。在NI OPC服务器中聚合数据后,OPC I / O服务器可以检索数据并与LabVIEW应用程序共享。
还可以开发使用OPC UA Toolkit的类似架构(2017年之前的LabVIEW DSC模块中包含OPC UA功能)代替OPC I / O服务器。但是,OPC UA驱动程序是低级驱动程序,不提供OPC I / O服务器提供的易用性。
要开发这样的应用程序,必须首先为NI OPC服务器生成有效配置,以便与从属设备进行通信。这是通过生成定义驱动程序配置的通道和设备来完成的,这些通道定义了该驱动程序的单个端点。配置设备后,您可以生成标签。
配置NI OPC服务器后,可以配置OPC I / O服务器与这些标签进行通信。当Modbus I / O服务器配置为访问寄存器时,OPC I / O服务器配置为访问OPC服务器中的标签。
此绑定过程会生成您可以在应用程序中使用的变量。
在使用OPC将LabVIEW连接到任何PLC时,可以完整地了解此过程。
Modbus是一种简单的协议,您可以通过各种方式使用它来实现功能强大的应用程序。
对于Modbus通信,NI提供三个主要选项,提供各种功能以满足您的应用需求。首先,低级API提供对协议的精细控制,具有高性能,但代价是易于使用。使用低级API时,必须手动完成所有操作。对于更简单的监控应用,Modbus I / O服务器为访问或提供Modbus数据提供了更简单,更简单的API。为了便于使用,I / O服务器放弃了对某些应用程序可能需要的协议的严格控制。最后,对于大型复杂系统,将全功能OPC服务器视为数据聚合器可能是有益的。然后,只需使用LabVIEW OPC UA Toolkit或OPC I / O服务器等工具

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝