使用Python pymodbus查找从设备

问题描述 投票:0回答:1

我有一个设备连接到计算机的 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)

也就是说,因为一个主设备最多可以有 250 个从设备,所以我使用 read_holding_registers 函数的单元参数遍历所有可能的地址。这样的调查需要相当多的时间,因为。如果该地址根本没有设备,则必须等待大约 1 秒。是否有可能以某种方式提前找出从设备连接的地址?

python protocols modbus master-slave pymodbus
1个回答
0
投票

您可以通过将超时设置为较低的值来减少所需的时间

response  = client.read_holding_registers(address=976, count=1,timeout=0.3 unit=i)

您必须测试从站的响应时间,以避免在实际设备上超时。

© www.soinside.com 2019 - 2024. All rights reserved.