Modbus 协议是什么
Modbus网关许多技术方面都超出了我们的想象。但在现场使用 Modbus 时,不需要了解更精细的技术细节,只需要知道Modbus是什么并合理使用它的价值。
集成网络在楼宇管理系统中都变得越来越重要,因此,BMS 工程师都要求至少对协议有一个基本的了解。幸运的是,网上有详细资料介绍您可能需要了解的有关Modbus 的所有信息;不幸的是,很多信息相互矛盾,而且通常并不是“所有”信息,有时会让您束手无策。
这篇文章Modbus中的信息,以便您了解足够多的信息,并希望应用您的项目中。
Modbus 协议有两种安装方式:
● 串行网络 - RS485
● TCP/IP 网络
最终结果是相同的,而且 Modbus 点寄存器通常是相同的,但两种安装之间存在差异,如果不仅仅是物理安装的话。
串行 RS485 Modbus
要建立 RS485 Modbus 网络,需要将双绞线电缆从网络主设备安装到从设备。
通常,带有屏幕的单双绞线电缆就可以完成这项工作,但如今越来越多的制造商推荐使用双绞线电缆。
推荐两对电缆线的原因是使一对可用于发送/接收线,而另一对可用作屏蔽线或排扰线。这样就可以覆盖所有的基地。
通过 RS485 网络连接 Modbus 设备时,它们应以菊花链形式连接在一起,不支持任何其他布线拓扑。
串行网络布线
整个网络中的连接应该保持不变:正对正,负对负。这些有时可能被标记为 A 和 B。如果这些被交叉,这可能会导致整个网络瘫痪并在主控制器内产生通信警报。
还值得一提的是,屏蔽电缆在整个网络中应保持完好无损,并且仅在控制器端接地。
TCP/IP 网络连接
根据 cat5/6 的限制,每个网段的最大长度为 100m,Wi-Fi 可能会根据安装的类型和质量达到更长的距离。
当通过其他网络进行通信时,需要在防火墙上打开一个通信端口,默认端口是:502,但如果需要,可以更改此端口。
在配置 TCP / IP Modbus 网络时,每个设备都需要使用网络上可用的唯一 IP 地址进行编程。
RS485 与 TCP / IP Modbus
典型的寄存器表
上表是一个有用的参考点,因为制造商的文献通常不会说明该点是什么类型的寄存器。根据您使用的系统,您可能无法在您包含的模拟可写对象上搜索输入寄存器;这是因为输入寄存器是只读的。
线圈点 00001 – 09999
将线圈点视为可写的数字点,例如数字输出。
读取线圈点时,您将看到真或假反馈值。它可以是两种状态之一,仅此而已。这同样适用于当你写到这一点时,你可以把它设为真或假。线圈点通常是设备内用于触发某些功能的数字点。
● Modbus 功能代码 1 = 读取线圈
● Modbus 功能代码 5 = 写入单个线圈
● Modbus 功能代码 15 = 写入多个线圈
连接 Modbus 串行设备时,每个网络限制为 32 个;由于主设备占用了网络上的地址,因此上述示例将分类为 4。如有必要,可以通过在网络上使用中继器和助推器来解决此限制。
不论增强器和中继器,串行网络的最大长度不能超过1200m。
在某些情况下,可能需要在通信对上安装终端电阻。通常,一个 120 欧姆的电阻可以正常工作,但如果需要,可以更准确地计算出来。越来越多的设备带有内置的端接跳线,可用于在需要时省去电阻的麻烦。
配置 RS485 串行 Modbus 网络时,您需要在每个设备中设置以下内容:
● 波特率
● 平价
● 停止位
● 数据位
这些通常可以通过板载跳线或软件进行配置。在开始此类项目时,需要进行板载跳线需要设置,直接开箱即可完成,而不是安装在天花板或现场任何地方要容易得多.
TCP / IP Modbus
要建立 TCP/IP Modbus 网络,所有设备必须在本地或通过网关连接连接到同一网络。通常,这些将是使用以太网电缆和 RJ45 端的有线连接,尽管现在更多的设备通过 Wi-Fi 连接,但两种解决方案都可以完成这项工作。
TCP / IP Modbus 并不像串行连接那样每个网络限制为 32 个设备,但是,每个主(客户端)设备都有其自身的限制,在开始设计系统之前应进行检查。
与 RS485 Modbus 网络的另一个区别是使用的术语,当谈到串行连接时,我们说“主从”,当谈到 TCP / IP Modbus 时,我们说“客户端和服务器”。
离散输入 10001 – 19999
这些点类似于线圈点,除了它们是只读的,就像数字输入一样。
读取离散输入时,它将反馈两个值之一,它是真或假,仅此而已。根据设备的不同,它可能被标记为 1 或 0、开或关等。这些类型的点通常用于显示控制器上数字输入的状态。
Modbus 功能代码 2 – 读取输入状态
输入寄存器 30001 – 39999
输入寄存器是由 16 位信息组成的只读点。模拟输入值将被归类为输入寄存器。
输入寄存器可以进一步分类为有符号或无符号,由于 16 位限制,无论哪种方式,都存在可以显示的最大信息量。
签名寄存器可以从 -32,768 到 32,767。这对温度传感器很有用。
无符号寄存器可以从 0 到 65,536。这对于消耗量表很有用,因为不需要负值。
Modbus 功能代码 4 – 读取输入寄存器
持有寄存器 40001 – 49999
保持寄存器是由 16 位信息组成的可写点。模拟输出值将被归类为保持寄存器。
就像输入寄存器一样,保持寄存器也可以有符号或无符号。16 位保持寄存器与上面详述的输入寄存器具有相同的范围限制
Modbus 功能代码 3 = 读取保持寄存器
Modbus 功能代码 6 = 写入保持寄存器
Modbus 功能代码 16 = 写入多个保持寄存器
字节顺序(MSB / LSB)
这是配置 Modbus 网络的鲜为人知的部分之一。以我的经验,这样做的原因是因为字节顺序通常总是 MSB > LSB,这是大多数控制器默认设置的。
● MSB = 最高有效位
● LSB = 最低有效位
这与控制器读取组成寄存器的各个位的顺序有关。正如我们前面所讨论的,标准输入或保持寄存器由 16 位组成,通常从位 0 到位 15 开始。
虽然这个设置经常被遗忘,但重要的是您要意识到它,因为它会在读取寄存器值时产生问题。
所有 16 位寄存器值都是使用二进制代码读取的,这就是存在最大值 65,535 的原因,即二进制的 16 个。
现在让我们假设我们正在尝试使用 Modbus 读取寄存器值。我们已经准备好网络设置,所有设备都在线并且工作(嗯,接收值),但我们还没有意识到这个设备首先使用 LSB 而不是 MSB。
默认情况下,我们将使用 MSB 顺序(从左到右)读取50,401的值
当设置为 LSB 时,我们读取的值为34,595(从右到左)。
看看为什么Modbus现在很重要?
如果您没有意识到这一点,您很容易浪费时间在数据表中寻找其他可能的寄存器来查找,当您一直都可以做到这一点时,只是字节顺序阻止了您获得正确阅读。
仅供参考,我只是在上面的示例中使用了一组随机的 1 和 0。要将这些转换为读数,您可以使用计算器上的“程序员”设置。
如果某些设备使用 MSB 而其他设备使用 LSB,则在同一网络上混合使用设备可能会给您带来问题。一些控制器甚至允许您更改每个设备或点的字节顺序设置,其他控制器只允许每个网络。
容易吧?
根据经验,设置任何集成网络最困难的部分是从您尝试与之通信的设备中获取正确的信息。制造商的文献常常令人困惑并且缺乏关键信息。例如,为什么电表没有 Modbus 标准?他们都提供相同的信息,但他们都给它贴上了不同的标签?通常正是这种事情阻止了两个设备之间的成功集成。
希望本文为您提供了对该主题的一些基本了解,并使您将来能够成功集成多个设备。