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

通常在每个寻址区中存储哪种数据?什么是Coil

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


#1 楼

虽然Bence是正确的,但是您也要求


我一直在阅读设备文档以找出要收集的数据存储在寄存器中的位置,但是我从未感到过就像我了解的那样
创建Modbus服务器的位置决定


查找数据在寄存器中的唯一方法是通过设备随附的文档。

现在讨论决定,关于将哪些数据放置在何处,请考虑以下示例,

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

然后,

打开/关闭状态:
如果要允许外部设备/软件打开/打开设备,关闭,然后将其放置在线圈中,否则,如果您只想通知用户打开/关闭状态,则可以将其放置在触点中,使其只读,从而限制了外部控制。

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

实际温度
由于要报告实际感测的温度,因此它始终是只读的,因此应将其放置在输入寄存器中。

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

https://github.com/NModbus/NModbus

希望能有所帮助。

#2 楼

从您已链接的文章开始:


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


因此回答您的问题。



每个寻址区通常存储哪些数据?

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

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


什么是线圈?

一个位变量,如布尔值。