代码之家  ›  专栏  ›  技术社区  ›  Umair

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

  •  0
  • Umair  · 技术社区  · 7 年前

    我有一台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 回复  |  直到 7 年前
        1
  •  1
  •   Ken    7 年前

    Modbus只允许从系统在主系统首先寻址时进行通信,从而避免冲突。这意味着无法像使用以太网那样广播消息或被动地收听。你可以像你和@marker说的那样对每个地址进行投票。只需注意错误代码并将超时设置为1或2秒。

    最好的办法是找出串行链路并查看网络上的所有设备。你知道在投票时会有多少奴隶,你知道制造商和型号信息。有了这些信息,您就可以获得手册,并知道每个寄存器的用途。如果设备有键盘式接口,您也可以找到从机地址。