获取地址未知的所有Modbus连接的设备

时间:2018-07-17 05:52:29

标签: c linux modbus

我有一台Linux机器,在Modbus RTU(通过rs485)上,多个设备连接到该Linux机器。我不知道连接设备的地址。我想获取连接设备的列表。有什么办法可以获取所有已连接的设备?

我正在使用libmodbus。

这是可读取具有已知地址的设备的代码。

  modbus_t *modbusCtxPtr=NULL;
  int modbus_id=9; // Modbus address 

  modbusCtxPtr = modbus_new_rtu(TTYDEVICE, BAUDRATE, 'N', 8, STOPBITS);
  if (modbusCtxPtr == NULL) 
  {
     errorAndLogLogger(TTY_ERROR, "ERROR - Unable to create the libmodbus context.");
     return;
  }
  if (modbus_set_slave(modbusCtxPtr, modbus_id) == -1)
        errorAndLogLogger(TTY_ERROR, "ERROR - Error in setting slave id.");
  if (modbus_connect(modbusCtxPtr) == -1)
        errorAndLogLogger(TTY_ERROR, "ERROR - Modbus Connection failed.");

  /* Here, I called read register over Modbus, function. */

1 个答案:

答案 0 :(得分:1)

Modbus通过仅让从站进行对话(如果它们首先被主站寻址)来避免冲突。这意味着您无法像使用以太网那样广播消息或被动收听。您可以像您和@Marker所说的那样轮询每个地址。只需注意错误代码,并将超时设置为1或2秒即可。

最好的选择是找出串行链接,并查看网络上所有设备的状态。您将知道轮询时期望有多少个从站,并且需要制造商和型号信息。有了这些信息,您就可以获得手册,并且知道每个寄存器的用途。如果该设备具有键盘样式的界面,则可能还可以找到从站地址。