# GeneralUpperComputer **Repository Path**: MagicHand/GeneralUpperComputer ## Basic Information - **Project Name**: GeneralUpperComputer - **Description**: 基于 .NET Framework 4.7.2 + WPF (Material Design) 的通用上位机数据采集平台。通过**插件式设备驱动**接入 OPC UA 等工业数据源,实现多服务器连接管理、定时/触发采集、参数下发、MySQL + Redis 数据存储、断线续传、用户权限管理(RBAC)与日志审计。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-09 - **Last Updated**: 2026-09-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 上位机通用平台 基于 .NET Framework 4.7.2 + WPF (Material Design) 的通用上位机数据采集平台。通过**插件式设备驱动**接入 OPC UA 等工业数据源,实现多服务器连接管理、定时/触发采集、参数下发、MySQL + Redis 数据存储、断线续传、用户权限管理(RBAC)与日志审计。 ## 功能特性 > 标注说明:(未实现)表示该子项尚未实现;未标注的均为已实现功能。 - **用户与权限**:用户/角色管理,基于 RBAC 的权限矩阵(操作员 / ME / PE / 管理员),空闲超时自动退出(未实现:仅有 `LogoutTimeoutMinutes` 配置项,无超时检测逻辑),权限操作审计日志 - **连接管理**:多服务器配置、连接测试、批量连接/断开、状态实时监测、自动重连 - **数据采集**:采集组配置(周期/触发节点/字段映射),订阅与轮询双模式,高频变量内存缓存 - **参数下发**:触发式/周期式参数写入,结果实时反馈 - **数据存储**:MySQL 主存储(自动建库建表,采集数据含开始时间与最近更新时间;自动分表未实现)、Redis 缓存、SQLite 离线缓存 - **断线续传**:MySQL 不可用时自动落盘 SQLite,网络恢复后自动回传 - **数据查询**:按时间范围/设备查询历史数据,支持导出(未实现:导出按钮为占位);生产记录采集信息展示开始时间/最近更新时间两列 - **生产管理**:产线工站管理、条码采集与去重、返工信息记录、生产记录聚合 - **仪表盘**:服务器连接状态实时监测与批量连接/断开、缓存变量/关键缓存变量实时刷新(启动即按组配置展示,采集启动后订阅刷新)、今日采集量统计、系统状态总览 - **日志系统**:log4net 分级日志,界面查看/过滤/导出,自动清理 - **系统配置**:数据库/Redis 连接卡片式配置,配置变更实时生效并记录变更日志 ## 界面预览 | 仪表盘 | 设备连接管理 | |--------|------------| | ![仪表盘](docs/images/仪表盘.png) | ![设备连接管理界面](docs/images/设备连接管理界面.png) | | 服务器编辑 | 采集组管理 | |-----------|-----------| | ![服务器编辑](docs/images/服务器编辑.png) | ![采集组管理](docs/images/采集组管理.png) | | 预览采集组 | 数据查询 | |-----------|---------| | ![预览采集组](docs/images/预览采集组.png) | ![数据查询](docs/images/数据查询.png) | | 产线管理 | 返工操作 | |---------|---------| | ![产线管理](docs/images/产线管理.png) | ![返工操作](docs/images/返工操作.png) | | 日志记录 | 系统配置 | |---------|---------| | ![日志记录](docs/images/日志记录.png) | ![系统配置](docs/images/系统配置.png) | ## 技术栈 | 分类 | 技术 | |------|------| | 运行时 | .NET Framework 4.7.2(C# 9.0,SDK 风格项目) | | UI | WPF + MaterialDesignThemes 4.9.0 + Microsoft.Xaml.Behaviors.Wpf | | 设备通信 | OPC Foundation NetStandard 1.5.378.106(插件化驱动) | | 数据存储 | MySQL (MySql.Data 9.6.0)、Redis (StackExchange.Redis)、SQLite (System.Data.SQLite) | | 日志 | log4net 3.3.0 | | 测试 | MSTest 2.2.10 | | 其他 | Newtonsoft.Json、BouncyCastle.Cryptography、BitFaster.Caching | ## 解决方案结构 ``` GeneralUpperComputer.sln ├── Contracts/ # 契约层:驱动接口(IDeviceDriver/IDeviceConnection/IDeviceSession 等)、 │ # 事件、模型、服务接口定义 ├── Core/ # 核心层:连接管理、采集、缓存刷新、数据库心跳、配置管理、 │ # 断线续传、日志、生产记录聚合等业务服务 ├── GeneralUpperComputer/ # WPF 主程序:仪表盘、服务器配置、组管理、缓存配置、数据查询、 │ # 工站管理、返工操作、日志、系统配置等页面 ├── Plugins/ │ └── OpcUaDriver/ # OPC UA 驱动插件(构建后自动部署到主程序 bin\plugins\) ├── Core.Tests/ # MSTest 单元测试 ├── Config/ # 运行配置:settings.json、servers.json、groups.json、 │ # cache_variables.json、field_mappings.json、menu.json、log4net.config ├── database/ # init_mysql.sql(MySQL 初始化脚本) ├── docs/ # 项目开发文档、任务/BUG 修复记录 └── tools/ # 辅助工具脚本 ``` **依赖方向**:`GeneralUpperComputer → Core → Contracts`,插件(OpcUaDriver)仅依赖 `Contracts`,通过反射从 `plugins\` 目录动态加载。 ## 环境要求 - Windows + Visual Studio 2022/2026 或 .NET SDK(需支持 net472 目标包) - MySQL 服务器(执行 `database/init_mysql.sql` 初始化) - Redis 服务器(可选,用于缓存存储) - 可访问的 OPC UA 服务器(数据源) ## 快速开始 1. **还原并构建** ```bash dotnet build GeneralUpperComputer.sln -c Debug ``` 构建说明: - 输出路径为 `GeneralUpperComputer\bin\Debug\`(项目已配置不追加 net472 子目录) - `OpcUaDriver` 构建后自动将其依赖 DLL 复制到主程序输出目录、插件本体复制到 `plugins\` 子目录 - SQLite x86/x64 Interop DLL 由主工程自动复制,无需手动处理 - 主程序编译时自动递增版本号(`AutoVersion.ps1`) 2. **初始化数据库** 在 MySQL 中执行 `database/init_mysql.sql`。程序启动时也会自动检查并创建缺失的表(主库、离线缓存、安全库均幂等建表)。 3. **首次配置** 启动程序后以管理员登录,通过右键菜单打开**系统配置**,配置数据库连接(支持多库主从)与 Redis 连接;在**服务器配置**页面添加 OPC UA 服务器。 4. **运行测试** ```bash dotnet test Core.Tests\Core.Tests.csproj ``` ## 插件开发 设备驱动通过 `Contracts` 中的接口实现,支持驱动 discovery: - 实现 `IDeviceDriver`、`IDeviceConnection`、`IDeviceSession`、`IDeviceSubscription`、`IDeviceLogger` 等接口 - 使用 `DeviceDriverAttribute` 标注驱动元数据 - 新建类库项目引用 `Contracts`,编译后将插件 DLL 放入主程序目录的 `plugins\` 文件夹 - 参考 `Plugins\OpcUaDriver` 的实现与构建后自动部署配置(`DeployPlugin` Target) ## 文档索引 - [docs/设备驱动接口使用指导.md](docs/设备驱动接口使用指导.md) — 驱动插件开发指南:契约接口规范、加载机制、部署约束与常见陷阱 - [docs/项目开发文档.md](docs/项目开发文档.md) — 功能模块总览与详细说明、权限矩阵、数据库表结构 - [docs/数据库采集列配置说明.md](docs/数据库采集列配置说明.md) — 采集列配置说明 - [docs/程序版本号与自动更新.md](docs/程序版本号与自动更新.md) — 版本号策略 - [database/init_mysql.sql](database/init_mysql.sql) — 数据库初始化脚本