Modbus TCP 调试软件开发架构与技术指导

一、项目概述

本软件旨在为电气工程师提供一个功能丰富、操作便捷的 Modbus TCP 调试工具,具备连接管理、数据读写、数据显示、配置文件管理等多种功能,以满足日常调试需求。

二、功能需求

连接管理

  1. 设备连接:设置 IP 地址和端口号,实现连接与断开操作,并给出连接状态提示。
  2. 连接状态监控:实时显示连接状态。
  3. 搜索局域网设备:获取本机有效网卡,用户选择后自动设置网段地址为搜索范围。

数据读写

  1. 读取数据:支持读取线圈状态、离散输入、保持寄存器和输入寄存器,可指定起始地址和数量。
  2. 写入数据:支持向线圈和保持寄存器写入单个或多个数据。
  3. 特殊数据处理:能处理浮点数和不定长度字符串数据,并清晰展示。

数据显示

  1. 显示方式选择:提供数据图表(柱状图、饼图)和折线图供用户选择展示。
  2. 数据交互:支持数据选择、标注、图例说明,以及缩放、平移等操作。

配置文件管理

  1. 文件格式:采用 JSON 或 YAML 格式。
  2. 文件加载:支持手动和自动加载配置文件。
  3. 配置应用:将配置数据映射到监视界面,支持动态更新。

其他功能

  1. 安全与权限管理:用户认证和权限控制。
  2. 脚本自动化:脚本编写、执行、保存和加载。
  3. 设备模拟:Modbus 从站模拟和异常模拟。
  4. 数据导出与分享:导出为 CSV、Excel 等格式,生成报告并支持分享。
  5. 历史数据查询与回放:存储、查询和回放历史数据。
  6. 远程调试:远程连接和控制设备。
  7. 多语言支持:提供多种语言切换。

三、软件架构设计

分层架构

  1. 用户界面层(UI 层)
    • 负责与用户进行交互,包括窗口显示、按钮点击、数据输入等操作。使用 PyQt6 构建图形用户界面,提供直观、易用的操作界面。
  2. 业务逻辑层
    • 处理软件的核心业务逻辑,如连接管理、数据读写、配置文件解析等。调用数据访问层和通信层的接口完成具体业务。
  3. 数据访问层
    • 负责数据的存储和读取,包括历史数据的存储、配置文件的读写等。使用数据库(如 SQLite)存储历史数据,使用文件系统存储配置文件。
  4. 通信层
    • 实现与 Modbus TCP 设备的通信,包括连接建立、数据传输等。使用 pymodbus 库进行 Modbus TCP 通信。

模块划分

  1. 连接管理模块:负责设备连接、状态监控和局域网设备搜索。
  2. 数据读写模块:实现数据的读取和写入操作,处理特殊数据类型。
  3. 数据显示模块:根据用户选择的显示方式展示数据,提供交互功能。
  4. 配置文件管理模块:管理配置文件的加载、解析和应用。
  5. 安全与权限管理模块:实现用户认证和权限控制。
  6. 脚本自动化模块:支持脚本的编写、执行和管理。
  7. 设备模拟模块:模拟 Modbus 从站设备和异常情况。
  8. 数据导出与分享模块:实现数据导出、报告生成和分享功能。
  9. 历史数据查询与回放模块:负责历史数据的存储、查询和回放。
  10. 远程调试模块:实现远程连接和控制功能。
  11. 多语言支持模块:提供语言切换功能。

四、技术选型

  1. 编程语言:Python,具有丰富的库和简洁的语法,适合快速开发。
  2. GUI 框架:PyQt6,用于构建跨平台的图形用户界面。
  3. Modbus 通信库pymodbus,提供 Modbus TCP 通信功能。
  4. 数据库:SQLite,轻量级数据库,适合存储历史数据。
  5. 配置文件格式:JSON 或 YAML,易于读写和解析。
  6. 图表库matplotlibpyqtgraph,用于绘制数据图表和折线图。

五、详细设计

连接管理模块

  1. 功能实现
    • 使用 socket 库获取本机有效网卡信息。
    • 根据用户选择的网卡计算网段地址范围,使用 pymodbus 库在该范围内搜索在线设备。
    • 使用 pymodbus 库建立和管理与 Modbus TCP 设备的连接。
  2. 数据结构
    • 定义网卡信息类,包含网卡名称、IP 地址和子网掩码。
    • 定义设备连接信息类,包含 IP 地址、端口号和连接状态。

数据读写模块

  1. 功能实现
    • 使用 pymodbus 库的 read_holding_registersread_coils 等方法读取数据。
    • 使用 pymodbus 库的 write_single_registerwrite_multiple_registers 等方法写入数据。
    • 对于浮点数数据,使用 struct 模块进行格式转换;对于不定长度字符串数据,根据终止符进行处理。
  2. 数据结构
    • 定义数据读取请求类,包含起始地址、数量和数据类型。
    • 定义数据写入请求类,包含起始地址、数据值和数据类型。

数据显示模块

  1. 功能实现
    • 使用 matplotlibpyqtgraph 库绘制数据图表和折线图。
    • 根据用户选择的数据项和显示方式更新图表。
    • 实现数据标注、图例说明、缩放和平移等交互功能。
  2. 数据结构
    • 定义数据点类,包含时间戳和数据值。
    • 定义数据集类,包含多个数据点。

配置文件管理模块

  1. 功能实现
    • 使用 jsonyaml 库读取和解析配置文件。
    • 将配置数据映射到监视界面的控件上。
    • 当配置文件发生变化时,动态更新监视界面。
  2. 数据结构
    • 定义配置文件类,包含设备信息、监视地址等配置项。

其他模块

根据各模块的功能需求,选择合适的库和技术进行实现。例如,使用 hashlib 库实现用户认证,使用 pandas 库实现数据导出等。

六、开发计划

  1. 需求分析与设计阶段(1 - 2 周)
    • 明确软件的功能需求和设计架构。
    • 完成软件的详细设计文档。
  2. 基础功能开发阶段(3 - 6 周)
    • 实现连接管理、数据读写、数据显示和配置文件管理等基础功能。
    • 进行单元测试和集成测试。
  3. 扩展功能开发阶段(7 - 10 周)
    • 实现安全与权限管理、脚本自动化、设备模拟等扩展功能。
    • 进行系统测试和性能优化。
  4. 收尾与发布阶段(11 - 12 周)
    • 完成多语言支持、数据导出与分享等收尾工作。
    • 进行用户测试和修复漏洞。
    • 发布软件正式版本。

七、测试计划

  1. 单元测试:对每个模块的功能进行单独测试,确保模块的正确性。
  2. 集成测试:将各个模块集成在一起进行测试,检查模块之间的接口和交互是否正常。
  3. 系统测试:对整个软件系统进行全面测试,验证软件是否满足功能需求和性能要求。
  4. 用户测试:邀请用户进行实际使用测试,收集用户反馈并进行改进。

八、维护与升级

  1. 定期维护:定期检查软件的运行状态,修复潜在的漏洞和问题。
  2. 功能升级:根据用户需求和技术发展,对软件进行功能升级和优化。
  3. 技术支持:为用户提供技术支持和培训,帮助用户解决使用过程中遇到的问题。