ModbusRTU从站扫描工具 python实现

扫描指定串口下,有哪些modbusRTU服务端[1-247]

参考连接:https://pymodbus.readthedocs.io/en/dev/source/examples.html

from pymodbus.client import ModbusSerialClient as ModbusClient
from pymodbus.exceptions import ModbusIOException, ConnectionException, NoSuchSlaveException
import time

def read_holding_registers(client, slave_address):
    """尝试读取指定从站的保持寄存器40001的数据"""
    try:
        # 使用client.read_holding_registers函数读取保持寄存器
        result = client.read_holding_registers(0, 1, slave_address)
        if isinstance(result, ModbusIOException):
            raise result  # 重新抛出异常以便在外部统一处理
        if isinstance(result, NoSuchSlaveException):
            raise result
            # 打印从站号和读取到的数据
        print(f"Slave {slave_address}: {result.registers[0]}")
    except NoSuchSlaveException:
        # 如果没有这样的从站,则捕获异常并打印信息
        print(f"Slave {slave_address} not found.")
    except ModbusIOException as e:
        # 其他Modbus通信错误
        print(f"Error communicating with Slave {slave_address}: {e}")

if __name__ == "__main__":
    # 初始化串口客户端,这里以9600波特率、8数据位、无校验、1停止位为例
    client = ModbusClient(port='COM1', baudrate=9600, bytesize=8, parity='N', stopbits=1)

    # 连接到Modbus RTU设备
    if client.connect():
        print("Connected to Modbus device.")

        # 循环遍历从站地址1至247
        for slave_address in range(1, 247):
            read_holding_registers(client, slave_address)
            time.sleep(0.200)  # 延迟200毫秒
        # 关闭连接
        client.close()
    else:
        print("Failed to connect to the Modbus device.")

执行效果图

posted @ 2024-05-16 09:17  生命在等待中延续  阅读(113)  评论(0编辑  收藏  举报