首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MODBUS自动地址分配

MODBUS自动地址分配
EN

Stack Overflow用户
提问于 2012-11-08 22:50:46
回答 3查看 3.3K关注 0票数 3

有没有人知道一种能自动设置MODBUS地址的方案?在我的情况下,我将有许多奴隶供电,需要一些自动的方式分配他们的地址。

EN

回答 3

Stack Overflow用户

发布于 2021-09-11 14:22:10

我知道这是一个旧的职位,但我只是偶然发现,我想我会给出我的答案,以防有人试图这样做,现在或将来。如果目标是将一个从ID分配给一个新的从服务器(并且您正在为从设备开发固件),则可以将该ID存储在一个可以写入新ID的保存寄存器中。这确实要求:

  1. 你已经知道身份证了。也许所有新的奴隶都有一个默认的ID,比如ID = 1,这样您就可以预先知道ID了。
  2. 一次只能添加一个从服务器,并且必须在向网络中添加另一个从服务器之前更改ID。例如:连接并启动第一个从设备,该设备的默认ID为1。发送一个写命令,该命令将ID更改为2,并向主服务器发送响应(在响应中使用1的从ID,这样就不会超时)。现在从ID是2。接下来,将下一个从节点添加到网络中,它的ID是1。现在网络上有两个具有唯一ID的从站。只要重复你需要重复的次数。
票数 1
EN

Stack Overflow用户

发布于 2015-08-25 22:06:40

你是说奴隶身份证吗?如果是这样,那是不可能的.SlaveID对于客户端能够在串行网络上对所述从站进行寻址至关重要。(RS485串行网络,大概.)

因此,甚至无法发送Modbus消息并将其寻址到SlaveID 1,然后以某种方式将该设备设置为SlaveID 1,因为在这种情况下,所有设备都会尝试响应。更不用说,Modbus中没有给奴隶分配ID的方法.从另一方面看..。

您是在说执行某种类型的查询来询问从设备有哪些Modbus寄存器吗?同样,没有任何Modbus方法可以做到这一点,但是使用一些代码,您可以查询40001,如果您得到一个错误2返回,那么您就知道注册是不可用的。如果然后循环遍历所有寄存器,跟踪哪些寄存器返回无错误,那么您可以执行一种形式的“自动配置”,但是.老实说?我不建议这样做,而且我认为这样做也没有多大价值,因为您不仅必须知道寄存器号,您必须知道寄存器中的数据实际上意味着什么!

你到底想做什么?也许还有另外一种方法来实现这个目标呢?

票数 0
EN

Stack Overflow用户

发布于 2020-06-25 20:04:13

你想要的: Modbus RTU中的自动从ID分配。

您真正想要的是:使用Modbus TCP的常量公共从ID。

简而言之,所有Modbus从ID都被设置为固定的公共值,然后将它们与支持链接本地寻址或DHCP之类的TCP堆栈连接起来。然后,可以动态地处理TCP地址分配,同时为每个单元保留一个常数SlaveID。

这里有三个大致的选项,取决于您已经拥有的硬件:

  1. 有一些现成的商用设备(如)可以在RTU上模仿TCP。我并没有深入研究他们所支持的东西,以及他们的运作情况。
  2. 您还可以向RTU网桥中添加一整吨TCP,这将对TCP/IP层进行内置管理,然后使用真正的以太网布线。对于很多设备来说,这可能很快就会变得昂贵,但是有了以太网,你就有了各种各样的额外功能,比如基本无限的距离和改进的CRCs。如果你想便宜的去做这件事,抓住一个双口Linux (比如),然后把mbusd (从这里)扔到它上。
  3. 如果您可以自己访问或正在开发固件,您可以修改类似于uIP (更简单)或lwIP (更快)的东西,以便通过RS-485 (UART)进行通信。这当然是最便宜的选择。请注意,您还应该能够检测到RS-485上的冲突,以正确实现IP堆栈--这包括在任何时候回显接收器并检查数据输入和数据输出是否匹配。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13299291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档