使用Top Server为Wonderware揭开Modbus寄存器寻址的神秘面纱

    从1979年开始,Modbus已经作为一种“开放式”协议使用,多年来各行各业对Modbus有许多不同的解释。对于那些不同的Modbus解释,有很多关于访问数据的不同术语的困惑。在这篇文章中,我将逐步介绍Modbus寻址的基础知识,包括偏移如何发挥作用,以及它们如何影响在TOP Server for Wonderware应用程序中使用的地址。

    由于在世界各地几乎有同样多的不同设备制造商在同时实现Modbus协议,因此设备文档有时不清楚该为特定数据请求什么数字地址。所以,本文的目的是为Modbus寻址如何工作提供一个解释,以便更容易理解如何使用TOP Server访问Modbus设备中的数据。

Modbus地址的类型

当我们讨论Modbus协议以及如何处理特定的数据位置时,通常有四种不同类型的Modbus地址:

     1.保持寄存器 - 具有读/写访问权限的16位地址(4xxxxx)

     2.内部寄存器 - 具有只读访问权限的16位地址(3xxxxx)

     3.输入线圈 - 具有只读访问权限的1位(布尔)地址(1xxxxx)

     4.输出线圈 - 具有读/写访问权限的1位(布尔)地址(0xxxxx)

由于某些设备文档没有提供对地址类型(如4xxxxx或保持寄存器)引用的Modbus地址的详细列表,因此考虑根据特定地址包含的数据类型以及是否可以读取和写入或者仅能读取来读取Modbus地址是有意义的。

modbus 1

由于它们所代表的数据类型,您还可能会看到离散或数字地址的模拟或线圈寄存器。

偏移寻址:4001和40001和400001之间有区别吗?

正如我之前提到的,Modbus协议已经存在了几十年,可以说是世界上最广泛使用的设备通信协议。话虽如此,随着Modbus协议的诞生,当内存大小不做出改变时,与目前可用的大量内存相比,70年代后期设备上的内存总量很小。

在考虑TOP Server Modbus Suite是否与设备兼容时,最常见的问题之一是TOP Server是否支持特定的地址范围。TOP Server支持的列出的地址范围如下:

  • 保持寄存器-400001- 465536
  • 内部寄存器-300001- 365536
  • 输入线圈 - 100001-165536
  • 输出线圈 - 000001- 065536

对于许多设备,支持的地址范围远小于此。例如,通过保持寄存器,在这样的设备中,4001的地址作为起始地址无法接近400001。那么,鉴于这些数据,TOP Server如何声称对Modbus设备有如此广泛的支持?

事实上,TOP Server Modbus Suite支持4001,40001甚至400001。TOP Server支持所有Modbus地址,因为Modbus使用一种称为偏移寻址的寻址。为了说明偏移地址的工作原理,请注意一下在上图中,我们是怎么将起始编号与地址的其余部分分开的。

图中的地址“4001”,有两条我们感兴趣的信息:

   1.起始编号“4”表示应该从设备请求什么类型的地址。(保持寄存器 = 4)

   2.数字“001”表示应该从设备请求哪个地址偏移。(偏移 = 1)

根据这些知识,我们将相同的原理应用于TOP Server支持的起始保持寄存器地址“400001”。

   1.我们的起始编号是“4”,这意味着我们要有保持寄存器。

   2.移除“4”后的剩余数字是“00001”,其在数值上与“001”相同,并且表示相同的偏移量“1”。

请一定注意,许多Modbus设备可能不支持TOP Server支持的所有数据偏移。为了避免在输入此类设备的地址时出现错误,TOP Server Modbus驱动程序会根据在地址字段中输入的内容“填充”地址(添加一个或多个数字)。 因此,TOP Server会自动在中间考虑“额外”的零,并根据需要填充地址。

对于所有不同的Modbus地址类型(内部寄存器 = 3,输入线圈 = 1,输出线圈 = 0),同样的原则也适用。原因是Modbus在发出请求后发送到Modbus设备时不包含“400001”或“4001”。而只有地址偏移量作为命令的一部分和指定读取或写入操作的代码以及Modbus地址类型(保持寄存器等)一起发送。

您需要什么类型的Modbus地址?

确定在TOP Server中使用哪个地址的最简单方法是确定您在设备中访问的是哪种地址:

1.您的文档指定特定的数据片段是模拟的(非布尔/二进制/离散 - 例如2,500或2.5689或58,535等),您具有对此数据的读写权限:

  • 您需要访问保持寄存器。
  • 您可以在文档指定的任何地址偏移的开头添加“4”。

2.您的文档指定一段数据是模拟的,您只能读取此数据:

  • 您需要访问内部寄存器。
  • 您可以在文档指定的任何地址偏移的开头添加“3”。

3.您的文档指定了布尔/二进制/离散值(如 开/关,真/假或0/1),您只具有对此地址的只读访问权限:

  • 您需要访问输入线圈。
  • 您可以在文档指定的任何地址偏移的开头添加“1”。

4.您的文档指定了布尔/二进制/离散值,您具有对此地址的读写权限:

  • 您需要访问输出线圈
  • 您可以在文档指定的任何地址偏移的开头添加“0”。

准备开始从您自己的Modbus设备访问数据了吗?

             TOP Server OPC Server v6.6更新信息                                TOP Server OPC Server v6.6试用版下载

猜你喜欢

转载自blog.csdn.net/weixin_43746001/article/details/84635679