Поиск ведомых устройств с помощью Python pymodbus

У меня есть прибор, подключенный к COM-порту компьютера и общающийся с ним по протоколу Modbus. К этому прибору может быть подключено до 40 таких же ведомых приборов. Как с использованием Pymodbus найти все ведомые приборы? Я знаю, что, чтобы понять нужный ли тип устройства я нашел по определенному адресу, мне нужно сделать запрос к регистру 976 и если он ответит числом 60, значит все верно. Я делаю это следующим образом:

from pymodbus.client.sync import ModbusSerialClient as ModbusClient


def get_slaves(port):
    client = ModbusClient(method='rtu', port=port, stopbits=2, bytesize=8, parity='N', baudrate=19200)
    client.connect()
    slaves = []
    for i in range(1, 250):
        try:
            response  = client.read_holding_registers(address=976, count=1, unit=i)
            registers_values = response.registers
            print(registers_values)
            # if registers_values[0] == 60:
            slaves.append(i)
            print(slaves)
        except:
            print('ошибка')
            continue
    print(slaves)

То есть т.к. у master-устройства может быть до 250 slave-устройств, я прохожу по всем возможным адресам с помощью параметра unit функции read_holding_registers. Такой опрос занимает довольно много времени, т.к. приходится ждать около 1 секунды, если по адресу вообще нет устройства. Можно ли как-то заранее узнать на каких адресах подключены ведомые устройства?


Ответы (0 шт):