Modbus 寻址区域之间有什么区别?

物联网 协议
2021-05-30 04:42:10

我正在尝试实现一个通过 Modbus 与许多分布式设备(服务器)进行通信的控制软件(客户端)。我一直在阅读设备文档以找出我想要收集的数据存储在寄存器中的哪个位置,但我从来没有觉得我理解为创建 Modbus 服务器而做出的位置决定。

每个寻址区中通常存储哪些类型的数据?什么是Coil

取自http://www.simplymodbus.ca/FAQ.htm

2个回答

虽然本斯是正确的,但你也问过

我一直在阅读设备文档以找出我想要收集的数据在寄存器中的存储位置,但我从来没有觉得我理解为创建 Modbus 服务器而做出的位置决定

查找数据在寄存器中的位置的唯一方法是通过设备提供的文档。

现在谈论决定,关于在哪里放置哪些数据,请考虑以下示例,

您有一个温度控制器,它为您提供以下数据: 1. 开/关状态 2. 温度设置点 3. 实际温度(通常称为过程值)

然后,

开/关状态: 如果您想允许外部设备/软件打开/关闭设备,则将其放置在线圈内,否则,如果您只想通知用户开/关状态,则将其放置在联系人中使其只读,从而限制外部控制。

设置点 通常,您会希望操作员更改设置点,而该值需要不止一点,因此将其放置在保持寄存器中,以便您可以对其进行读写。

实际温度 这是在您报告实际感测温度时始终是只读的,因此应放置在输入寄存器中。

如果您想将 MODBUS 通信集成到您的软件中,请尝试 NMODBUS,它是一个免费的 MODBUS 库,对我来说非常有用。

https://github.com/NModbus/NModbus

希望有帮助。

从您链接的文章中:

两个表存储开/关离散值(线圈)和两个存储数值(寄存器)。(...) 每个线圈或触点为 1 位 (...) 每个寄存器为 1 个字 = 16 位 = 2 个字节

所以来回答你的问题。

  1. 每个寻址区中通常存储哪些类型的数据?

    线圈/接触区存储单个位。例如,在照明系统中,您可以将其想象为建筑物中每个光源都有一个开/关位,可用于打开或关闭特定光源。有第二个区域保存完全相同的数据,但只允许读取访问。

    寄存器区域存储数字数据。例如,如果我们谈论输出数据,则传感器读数。这也是表名所暗示的:“模拟输出保持寄存器”。

  2. 什么是线圈?

    一位变量,就像一个布尔值。