首页 > 编程语言 >ModbusTCP从站(服务端)扫描工具 python实现

ModbusTCP从站(服务端)扫描工具 python实现

时间:2024-05-16 08:58:20浏览次数:25  
标签:registers slave python Modbus client address print ModbusTCP 服务端

扫描指定IP网络下,有哪些modbusTCP服务端[1-247]

from pymodbus.client import ModbusTcpClient
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)
        # 检查result是否为ModbusIOException,如果是,则直接处理异常,不尝试访问registers属性
        if isinstance(result, ModbusIOException):
            raise result  # 重新抛出异常以便在外部统一处理

        print(f"Slave {slave_address}: {result.registers[0]}")
    except ConnectionException as e:
        # 如果连接问题或无此从站,则捕获异常并打印信息
        print(f"Error connecting to or reading from Slave {slave_address}: {e}")
    except ModbusIOException as e:
        # 其他Modbus通信错误
        print(f"Error communicating with Slave {slave_address}: {e}")
    except NoSuchSlaveException as e:
        # NoSuchSlaveException
        print(f"NoSuchSlaveException with Slave {slave_address}: {e}")


if __name__ == "__main__":
    # 初始化TCP客户端,这里以默认端口502为例
    client = ModbusTcpClient('localhost', port=502)  # 请将'localhost'替换为实际的Modbus TCP服务器IP地址

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

        # 循环遍历从站地址1至247
        for slave_address in range(1, 248):
            read_holding_registers(client, slave_address)
            time.sleep(0.500)  # 延迟50毫秒

        # 关闭连接
        client.close()
    else:
        print("Failed to connect to the Modbus TCP device.")

标签:registers,slave,python,Modbus,client,address,print,ModbusTCP,服务端
From: https://www.cnblogs.com/guyk/p/18195237

相关文章

  • 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......
  • python sftp文件上传和Dockerfile部署步骤
    ##1、脚本app.py#-*-coding:utf8-*-importosimportparamikofromdatetimeimportdatetime,timedeltafromflaskimportFlask,requestapp=Flask(__name__)#从环境变量中获取配置信息host=os.getenv("SFTP_HOST")port=int(os.getenv("SFTP_PORT&q......