首页 > 编程语言 >ModbusRTU从站扫描工具 python实现

ModbusRTU从站扫描工具 python实现

时间:2024-05-16 09:19:11浏览次数:23  
标签:registers slave python 扫描 ModbusRTU client result address print

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

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.")

执行效果图

标签:registers,slave,python,扫描,ModbusRTU,client,result,address,print
From: https://www.cnblogs.com/guyk/p/18195292

相关文章

  • ModbusTCP从站(服务端)扫描工具 python实现
    扫描指定IP网络下,有哪些modbusTCP服务端[1-247]frompymodbus.clientimportModbusTcpClientfrompymodbus.exceptionsimportModbusIOException,ConnectionException,NoSuchSlaveExceptionimporttimedefread_holding_registers(client,slave_address):""&quo......
  • python代码上传文件到fastdfs
    Install直接pip安装,需要Python3.10+pipinstallfastdfs-clientInitialclient可以用其他教程的client.conf配置文件的方式,也可以直接传入ip列表进行初始化fromfastdfs_clientimportFastdfsClientclient=FastdfsClient(trackers=('ip1','ip2',...))Uploadbyfil......
  • Python - pyenv, virtualenv, pipenv
    Pyenv可托管多个不同的Python版本。Installpyenv:gitclonehttps://github.com/pyenv/pyenv.git~/.pyenvAdd~/.pyenv/bintoPATH:if[[$(echo$PATH|grep'pyenv'|wc-l)-eq0]];thenPATH=$PATH:~/.pyenv/binfi 查看当前系统上已经安装和正在使用的......
  • Python - 数据库连接池
    目录SQLite自定义连接池使用sqlalchemy创建连接池SQLite自定义连接池importsqlite3fromqueueimportQueueclassSQLiteConnectionPool:def__init__(self,db_path,max_connection=10):self.db_path=db_path#数据库文件路径self.max_c......
  • 【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码
    问题描述对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢? 问题解答当然可以,AzurePortal上操作的所有资源都是通过RESTAPI来实现的,所以只要找到正确的API,就可以通过浏览器中抓取到的请求B......
  • python操作redis
    redis安装:https://github.com/tporadowski/redis/releases/一python操作redis1普通链接pipinstallredisimportredisconn=redis.Redis(host="localhost",port=6379,db=0,password=None)conn.set('name','lqz')con......
  • [HDCTF 2023]YamiYami python中的另一种反序列化--yaml
    今天做了到新颖的题,关于python中的yaml反序列化的题目,直接上题吧。发现第一个链接的参数是?url=XXXX,一眼利用点。嗯?直接出了flag,应该是非预期解。再看看有app.py,那就试试。发现app.*被过滤了,二次编码绕过试试。点击查看代码@app.route('/')defindex():session['pas......
  • Python: SunMoonTimeCalculator
     #encoding:utf-8#版权所有2024©涂聚文有限公司#许可信息查看:#描述:https://github.com/Broham/suncalcPy#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python3.11#Datetime:2024/5/1421:59#User:geovindu#Product......
  • 流畅的python--第四章
    Unicode文本和字节序列字符串是较简单的概念,一个字符串就是一个字符序列。问题在于“字符”是如何定义的。在2021年,“字符”的最佳定义是Unicode字符。因此从Python3的str对象中获取的项是Unicode字符。Unicode标准明确区分字符的标识和具体的字节表述。字符的标识,即码点,是0~1......
  • 接口自动化框架【python+requests+pytest+allure】需要安装的依赖包
    attrs23.2.0certifi2024.2.2cffi1.16.0charset-normalizer3.3.2colorama0.4.6cryptography42.0.5h110.14.0idna3.6iniconfig2.0.0outcome1.3.0.post0packaging24.0pluggy1.4.0pycparser2.21pyOpenSSL24.1.0PySocks1.7.1pytest8.1.1selenium4.2.0sniffio1.3.1......