# scada_config **Repository Path**: sqtech2018/scada_config ## Basic Information - **Project Name**: scada_config - **Description**: 基于pyqt+sqlite的scada、gateway参数配置编辑工具 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-11-10 - **Last Updated**: 2025-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SCADA点表配置编辑工具设计文档 ## 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.8+ ## 3. 数据库设计 ### 3.1 实体关系图 text ``` channels (通道表) ├── devices (设备表) └── points (点表) ``` ### 3.2 数据表结构 #### 3.2.1 channels (通道表) | 字段名 | 类型 | 约束 | 说明 | | :----------- | :-------- | :------------------------ | :---------------------------------- | | id | INTEGER | PRIMARY KEY | 通道ID | | name | TEXT | UNIQUE, NOT NULL | 通道名称 | | description | TEXT | | 通道描述 | | channel_type | TEXT | DEFAULT 'TCP' | 通道类型(TCP/UDP/SERIAL/OPC/MODBUS) | | ip_address | TEXT | | IP地址 | | port | INTEGER | | 端口号 | | created_time | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 | | updated_time | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 更新时间 | #### 3.2.2 devices (设备表) | 字段名 | 类型 | 约束 | 说明 | | :----------- | :-------- | :------------------------ | :-------------------------------- | | id | INTEGER | PRIMARY KEY | 设备ID | | channel_id | INTEGER | FOREIGN KEY | 所属通道ID | | name | TEXT | NOT NULL | 设备名称 | | description | TEXT | | 设备描述 | | device_type | TEXT | | 设备类型(PLC/DCS/RTU/仪表/传感器) | | address | TEXT | | 设备地址 | | created_time | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 | | updated_time | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 更新时间 | #### 3.2.3 points (点表) | 字段名 | 类型 | 约束 | 说明 | | :----------- | :-------- | :------------------------ | :------------------------------------- | | id | INTEGER | PRIMARY KEY | 点ID | | device_id | INTEGER | FOREIGN KEY | 所属设备ID | | point_id | TEXT | NOT NULL | 点号 | | point_name | TEXT | NOT NULL | 点名 | | description | TEXT | | 点描述 | | data_type | TEXT | DEFAULT 'FLOAT' | 数据类型(BOOL/INT/FLOAT/DOUBLE/STRING) | | unit | TEXT | | 单位 | | min_value | REAL | DEFAULT 0 | 量程下限 | | max_value | REAL | DEFAULT 100 | 量程上限 | | address | TEXT | | 寄存器地址 | | read_write | TEXT | DEFAULT 'READ' | 读写权限(READ/WRITE/READ_WRITE) | | created_time | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 | | updated_time | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 更新时间 | ## 4. 模块详细设计 ### 4.1 数据库管理模块 (DatabaseManager) #### 4.1.1 职责 - 数据库连接管理 - 表结构初始化和维护 - 提供数据CRUD操作接口 - 处理数据导入导出 #### 4.1.2 核心方法 python ``` class 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 数据验证 python ``` def 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/GBK) ### 5.2 用户体验特性 #### 5.2.1 界面设计 - 直观的树形-表格布局 - 清晰的选中状态指示 - 实时操作计数显示 - 统一的视觉风格 #### 5.2.2 操作流程 ``` 添加通道 → 选择通道 → 添加设备 → 选择设备 → 管理点表 ↓ 导入数据 → 批量编辑 → 验证数据 → 导出配置 ``` #### 5.2.3 错误处理 - 友好的错误提示信息 - 详细的操作状态反馈 - 数据完整性验证 - 异常情况恢复机制 ## 6. 数据格式规范 ### 6.1 XML格式规范 xml ``` 反应釜温度 FLOAT 0 100 ``` ### 6.2 CSV格式规范 **中文列名格式:** csv ``` 点号,点名,描述,数据类型,单位,下限,上限,地址,读写权限 AI001,温度传感器1,反应釜温度,FLOAT,℃,0,100,40001,READ DI001,电机状态,电机运行状态,BOOL,,0,1,00001,READ ``` **英文列名格式:** csv ``` point_id,point_name,description,data_type,unit,min_value,max_value,address,read_write AI001,Temperature1,Reactor Temperature,FLOAT,℃,0,100,40001,READ ``` ## 7. 部署和运行要求 ### 7.1 系统要求 - **操作系统**: Windows 7+/Linux/macOS - **Python版本**: 3.8或更高版本 - **内存**: 最低512MB,推荐1GB - **存储**: 至少100MB可用空间 ### 7.2 依赖包 txt ``` PyQt6>=6.4.0 ``` ### 7.3 安装和运行 bash ``` # 安装依赖 pip install PyQt6 # 运行程序 python scada_config.py ``` ## 8. 测试策略 ### 8.1 单元测试 - 数据库操作测试 - 数据验证逻辑测试 - 业务逻辑测试 ### 8.2 集成测试 - 界面操作流程测试 - 数据导入导出测试 - 批量操作功能测试 ### 8.3 性能测试 - 大数据量处理性能 - 内存使用情况 - 响应时间测试 ## 9. 维护和扩展 ### 9.1 维护计划 - 定期备份数据库文件 - 日志记录关键操作 - 错误报告和修复 ### 9.2 扩展可能性 - 支持更多通信协议 - 添加数据校验规则 - 集成版本控制 - 支持模板功能 - 添加用户权限管理 ------ <<<<<<< HEAD email: sqtech_2018@163.com ======= >>>>>>> 48c58994b1f3b390ad3054987d6d427165fd792a