我有一台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. */
答案 0 :(得分:1)
Modbus通过仅让从站进行对话(如果它们首先被主站寻址)来避免冲突。这意味着您无法像使用以太网那样广播消息或被动收听。您可以像您和@Marker所说的那样轮询每个地址。只需注意错误代码,并将超时设置为1或2秒即可。
最好的选择是找出串行链接,并查看网络上所有设备的状态。您将知道轮询时期望有多少个从站,并且需要制造商和型号信息。有了这些信息,您就可以获得手册,并且知道每个寄存器的用途。如果该设备具有键盘样式的界面,则可能还可以找到从站地址。