基于pyqt+sqlite的scada、gateway参数配置编辑工具

发布时间:2026/9/13 3:00:13
基于pyqt+sqlite的scada、gateway参数配置编辑工具 1. 项目概述1.1 项目背景SCADA数据采集与监视控制系统、网关机在工业自动化领域广泛应用点表配置是SCADA系统实施的重要环节。传统的手工配置方式效率低下且容易出错需要一款专业的点表配置工具来提高工程实施效率。1.2 项目目标开发一款基于PyQt6的SCADA点表配置编辑工具具备以下特点支持通道-设备-点表三级结构管理提供Excel式的批量操作功能支持XML和CSV格式的导入导出使用SQLite数据库进行数据持久化提供直观的图形用户界面1.3 目标用户SCADA系统工程师自动化系统集成商工业控制系统维护人员2. 系统架构设计2.1 总体架构┌─────────────────────────────────────────────────┐ │ 表示层 (Presentation) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ 主窗口 │ │ 对话框 │ │ 右键菜单 │ │ │ │ MainWindow │ │ Dialogs │ │ ContextMenu │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ 业务逻辑层 (Business Logic) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ 点表编辑器 │ │ 批量操作 │ │ 导入导出 │ │ │ │ PointEditor │ │ BatchOps │ │ ImportExport│ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ 数据访问层 (Data Access) │ │ ┌─────────────────┐ │ │ │ 数据库管理器 │ │ │ │ DatabaseManager │ │ │ └─────────────────┘ │ └─────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ 数据持久层 (Persistence) │ │ ┌─────────────────┐ │ │ │ SQLite数据库 │ │ │ │ scada_points.db│ │ │ └─────────────────┘ │ └─────────────────────────────────────────────────┘2.2 技术栈GUI框架: PyQt6数据库: SQLite3数据格式: XML, CSV编程语言: Python 3.83. 数据库设计3.1 实体关系图textchannels (通道表) ├── devices (设备表) └── points (点表)3.2 数据表结构3.2.1 channels (通道表)字段名类型约束说明idINTEGERPRIMARY KEY通道IDnameTEXTUNIQUE, NOT NULL通道名称descriptionTEXT通道描述channel_typeTEXTDEFAULT TCP通道类型(TCP/UDP/SERIAL/OPC/MODBUS)ip_addressTEXTIP地址portINTEGER端口号created_timeTIMESTAMPDEFAULT CURRENT_TIMESTAMP创建时间updated_timeTIMESTAMPDEFAULT CURRENT_TIMESTAMP更新时间3.2.2 devices (设备表)字段名类型约束说明idINTEGERPRIMARY KEY设备IDchannel_idINTEGERFOREIGN KEY所属通道IDnameTEXTNOT NULL设备名称descriptionTEXT设备描述device_typeTEXT设备类型(PLC/DCS/RTU/仪表/传感器)addressTEXT设备地址created_timeTIMESTAMPDEFAULT CURRENT_TIMESTAMP创建时间updated_timeTIMESTAMPDEFAULT CURRENT_TIMESTAMP更新时间3.2.3 points (点表)字段名类型约束说明idINTEGERPRIMARY KEY点IDdevice_idINTEGERFOREIGN KEY所属设备IDpoint_idTEXTNOT NULL点号point_nameTEXTNOT NULL点名descriptionTEXT点描述data_typeTEXTDEFAULT FLOAT数据类型(BOOL/INT/FLOAT/DOUBLE/STRING)unitTEXT单位min_valueREALDEFAULT 0量程下限max_valueREALDEFAULT 100量程上限addressTEXT寄存器地址read_writeTEXTDEFAULT READ读写权限(READ/WRITE/READ_WRITE)created_timeTIMESTAMPDEFAULT CURRENT_TIMESTAMP创建时间updated_timeTIMESTAMPDEFAULT CURRENT_TIMESTAMP更新时间4. 模块详细设计4.1 数据库管理模块 (DatabaseManager)4.1.1 职责数据库连接管理表结构初始化和维护提供数据CRUD操作接口处理数据导入导出4.1.2 核心方法pythonclass DatabaseManager: def init_database(self) # 初始化数据库表结构 def update_table_structure(self) # 更新表结构 def add_channel(self, name, description, ...) # 添加通道 def get_channels(self) # 获取所有通道 def add_device(self, channel_id, name, ...) # 添加设备 def get_devices_by_channel(self, channel_id) # 获取通道下的设备 def add_point(self, device_id, point_data) # 添加点 def get_points_by_device(self, device_id) # 获取设备下的点 def batch_add_points(self, device_id, points_data) # 批量添加点 def import_points_from_csv(self, device_id, csv_file_path) # 从CSV导入点 def export_to_xml(self) # 导出为XML def import_from_xml(self, xml_file_path) # 从XML导入4.2 用户界面模块4.2.1 主窗口 (PointTableEditor)主要组件:树形视图显示通道-设备层级结构表格视图显示点表数据工具栏常用操作快捷访问菜单栏完整功能访问状态栏操作反馈和状态显示核心功能:通道、设备、点的增删改查批量操作复制、粘贴、删除、编辑数据导入导出实时XML预览4.2.2 对话框组件ChannelDialog: 通道配置对话框DeviceDialog: 设备配置对话框PointDialog: 点表配置对话框BatchAddDialog: 批量添加点表对话框BatchEditDialog: 批量编辑对话框4.3 业务逻辑模块4.3.1 数据验证pythondef validate_point_data(point_data): 验证点表数据有效性 # 检查必要字段 if not point_data.get(id) or not point_data.get(name): return False, 点号和点名不能为空 # 检查数据类型 valid_data_types [BOOL, INT, FLOAT, DOUBLE, STRING] if point_data.get(data_type) not in valid_data_types: return False, 无效的数据类型 # 检查量程范围 try: min_val float(point_data.get(min_value, 0)) max_val float(point_data.get(max_value, 100)) if min_val max_val: return False, 量程下限必须小于上限 except ValueError: return False, 量程值必须为数字 return True, 验证通过4.3.2 批量操作逻辑复制: 支持多选复制格式化为制表符分隔文本粘贴: 从剪贴板解析数据智能匹配字段批量编辑: 选择多个点表项统一修改特定字段批量删除: 支持多选删除带进度提示5. 功能规格说明5.1 核心功能5.1.1 层级管理支持通道-设备-点表三级结构树形视图直观展示层级关系右键菜单快速操作5.1.2 点表编辑单个点表项添加、编辑、删除、上移、下移批量点表项添加文本输入类似Excel的表格操作体验实时数据验证5.1.3 批量操作多选复制粘贴批量字段编辑批量删除确认操作进度反馈5.1.4 数据导入导出XML格式: 标准SCADA配置格式CSV格式: 兼容Excel和其他表格软件支持中英文列名自动识别自动编码检测UTF-8/GBK5.2 用户体验特性5.2.1 界面设计直观的树形-表格布局清晰的选中状态指示实时操作计数显示统一的视觉风格5.2.2 操作流程添加通道 → 选择通道 → 添加设备 → 选择设备 → 管理点表 ↓ 导入数据 → 批量编辑 → 验证数据 → 导出配置5.2.3 错误处理友好的错误提示信息详细的操作状态反馈数据完整性验证异常情况恢复机制6. 数据格式规范6.1 XML格式规范xml?xml version1.0 encodingUTF-8? scada_config channel name通道1 typeTCP ip192.168.1.100 port502 device namePLC1 typePLC address1 point idAI001 name温度传感器1 address40001 read_writeREAD description反应釜温度/description data_typeFLOAT/data_type unit℃/unit min_value0/min_value max_value100/max_value /point /device /channel /scada_config6.2 CSV格式规范中文列名格式:csv点号,点名,描述,数据类型,单位,下限,上限,地址,读写权限 AI001,温度传感器1,反应釜温度,FLOAT,℃,0,100,40001,READ DI001,电机状态,电机运行状态,BOOL,,0,1,00001,READ英文列名格式:csvpoint_id,point_name,description,data_type,unit,min_value,max_value,address,read_write AI001,Temperature1,Reactor Temperature,FLOAT,℃,0,100,40001,READ7. 部署和运行要求7.1 系统要求操作系统: Windows 7/Linux/macOSPython版本: 3.8或更高版本内存: 最低512MB推荐1GB存储: 至少100MB可用空间7.2 依赖包txtPyQt66.4.07.3 安装和运行bash# 安装依赖 pip install PyQt6 ​ # 运行程序 python scada_config.py8. 测试策略8.1 单元测试数据库操作测试数据验证逻辑测试业务逻辑测试8.2 集成测试界面操作流程测试数据导入导出测试批量操作功能测试8.3 性能测试大数据量处理性能内存使用情况响应时间测试9. 维护和扩展9.1 维护计划定期备份数据库文件日志记录关键操作错误报告和修复9.2 扩展可能性支持更多通信协议添加数据校验规则集成版本控制支持模板功能添加用户权限管理