Files
DMS/README.md
2025-10-02 17:41:29 +08:00

65 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DMS - 工业设备数据管理与监控系统
## 1. 项目简介
DMS (Device Management System) 是一个基于 .NET 技术栈构建的、功能强大且高度可扩展的工业数据平台。它旨在解决工业4.0场景下多设备、多协议的数据采集、处理、存储和监控需求。
项目采用现代化的软件架构和设计模式,确保了代码的高质量、可维护性和可扩展性,使其不仅是一个功能系统,也是一个优秀的.NET架构实践范例。
## 2. 核心功能
- **多协议支持**: 内置对 `S7``OPC UA` 等主流工业协议的支持,可轻松连接和采集不同厂商的设备数据。
- **实时数据监控**: 提供WPF桌面应用程序用于实时展示和监控设备变量状态。
- **动态UI生成**: 支持通过数据库配置动态生成导航菜单,实现灵活的界面布局。
- **强大的数据处理链**: 项目的核心特色。所有采集到的数据都会流经一个由多个处理器组成的管道,进行一系列的链式处理。该处理链完全可配置,允许开发者通过增减处理器来定制业务逻辑。
- **灵活的值转换**: 支持通过自定义公式(如 `x * 10 + 5`对原始数据进行二次计算生成用于UI展示的最终值。
- **高效的数据存储**: 内置数据批处理机制,可将大量、高频的数据变更(如历史数据、实时值)缓存并批量写入数据库,显著降低数据库负载。
- **灵活的触发器系统**: 支持创建基于多变量的复杂触发器,以响应特定的条件和事件。
## 3. 技术架构
项目遵循清晰的 **整洁架构 (Clean Architecture)** 思想,将系统分为四个独立的层次,实现了高度的解耦和关注点分离。
- **`DMS.Core` (核心层)**: 定义了项目的领域模型、业务接口和最核心的业务规则,不依赖任何外部技术。
- **`DMS.Application` (应用层)**: 包含了应用特有的业务逻辑如数据处理链的编排、应用服务等。它依赖核心层但与UI和基础设施层解耦。
- **`DMS.Infrastructure` (基础设施层)**: 提供了所有与外部技术相关的实现,如数据库访问 (仓储模式)、设备通信 (S7/OPC UA服务)、日志记录等。
- **`DMS.WPF` (表现层)**: 基于WPF和MVVM模式构建的桌面用户界面负责与用户交互和数据展示。
### 关键设计模式
- **MVVM (Model-View-ViewModel)**: 在WPF项目中用于UI与业务逻辑的解耦。
- **仓储模式 (Repository Pattern)**: 将数据持久化逻辑与业务逻辑分离。
- **责任链模式 (Chain of Responsibility)**: 在数据处理链中被广泛使用,每个处理器都是链上的一个节点,负责一项特定的任务。
- **依赖注入 (Dependency Injection)**: 在整个项目中用于管理组件的生命周期和依赖关系。
## 4. 技术栈
- **.NET / C#**: 主要开发语言和平台。
- **WPF**: 用于构建桌面用户界面。
- **CommunityToolkit.Mvvm**: 用于实现MVVM模式。
- **SqlSugar**: 一个高性能、轻量级的ORM框架用于数据库操作。
- **AutoMapper**: 用于在不同层之间自动映射对象模型。
- **S7netplus / Opc.UaFx**: (推断) 用于与西门子S7和OPC UA设备通信的库。
## 5. 数据处理链详解
数据处理链是DMS系统的核心。当一个变量的值发生变化时它会被包装成一个 `VariableContext` 对象,并依次流经以下处理器:
1. **`ValueConvertProcessor` (值转换处理器)**:
- 将从设备读取的原始值 (如 `byte[]`) 转换为 `NumericValue` (double类型)。
- 根据变量配置的 `ConversionFormula` (转换公式) 计算出最终用于UI的 `DisplayValue`
2. **`UpdateDbVariableProcessor` (数据库更新处理器)**:
- 将变量的最新值暂存到队列。
- 通过批处理机制,在满足条件(数量或时间)时,将多个变量的最新值一次性更新到数据库。
3. **`HistoryProcessor` (历史记录处理器)**:
- 判断变量是否启用了历史记录。
- 通过批处理机制,将变量的历史变化记录批量存入数据库。
4. **`AlarmProcessor` (报警处理器)**:
- (推断) 检查变量值是否触发了报警规则。
5. **`MqttPublishProcessor` (MQTT发布处理器)**:
- (推断) 将变量变更发布到MQTT主题用于与其他系统集成。