¿çƽ̨ÎÛˮ´¦Àí¼à¿Øϵͳ

DESKTOP-74CLTRG\Leol 86638fd69d feat: 多项目页面模板系统(P6) il y a 1 mois
.github 7b8f1282ef 工业级改造: 10 项核心升级,成熟度 42→74 分 il y a 1 mois
deploy 7b8f1282ef 工业级改造: 10 项核心升级,成熟度 42→74 分 il y a 1 mois
docs 8da325383e feat: 泵控逻辑重构与泵站2D/3D可视化增强 il y a 1 mois
projects 86638fd69d feat: 多项目页面模板系统(P6) il y a 1 mois
scripts 7e32705e18 docs: 添加项目文档和脚本 il y a 1 mois
src 86638fd69d feat: 多项目页面模板系统(P6) il y a 1 mois
tests deb3425eae fix: 修复 7 项评估短板,任务完成度 72%→95% il y a 1 mois
.gitignore 4e3a001863 优化泵站监控界面与退出清理 il y a 2 mois
CLAUDE.md 1ff762f262 架构化 il y a 3 mois
Dockerfile 7b8f1282ef 工业级改造: 10 项核心升级,成熟度 42→74 分 il y a 1 mois
README.md b03f0ba1f7 改进: 项目整体优化与性能调优 il y a 1 mois
YZWater3.sln b4976547fd feat: 多项目适配架构 - 支持通过 JSON 项目档案切换不同泵站配置 il y a 1 mois
docker-compose.yml 7b8f1282ef 工业级改造: 10 项核心升级,成熟度 42→74 分 il y a 1 mois
findings.md 7e32705e18 docs: 添加项目文档和脚本 il y a 1 mois
progress.md 7e32705e18 docs: 添加项目文档和脚本 il y a 1 mois
task_plan.md 7e32705e18 docs: 添加项目文档和脚本 il y a 1 mois
yzwater-config.template.json b03f0ba1f7 改进: 项目整体优化与性能调优 il y a 1 mois

README.md

YZWater3 - 跨平台污水处理监控系统

基于 Avalonia UI 的跨平台污水处理厂监控系统,支持 Windows、Linux 和 macOS。

🚀 技术栈

组件 技术方案
UI 框架 Avalonia UI 12.1.1
运行时 .NET 8.0
MVVM 框架 CommunityToolkit.Mvvm 8.4.2
PLC 通信 HslCommunication 12.9.2
数据库 SqlSugar 5.1.4 + SQLite
图表 LiveCharts2 2.1.0
日志 Serilog 4.4.0
UI 控件库 Semi.Avalonia 12.1.0
报表 ReportService(HTML 日报/月报)
中控通信 WebSocket Hub(Server/Client 模式)

📁 项目结构

YZWater3/
├── src/
│   ├── YZWater.Core/              # 核心业务逻辑(UI 无关)
│   │   ├── Models/                # 数据模型(SqlSugar ORM)
│   │   │   ├── Person.cs         # 人员模型
│   │   │   ├── AlarmRecord.cs    # 报警记录
│   │   │   ├── FlowRecord.cs     # 流量记录
│   │   │   ├── AnalogRecord.cs   # 模拟量记录
│   │   │   ├── EquipmentStatus.cs # 设备状态
│   │   │   ├── AuditLog.cs       # 审计日志
│   │   │   ├── ProjectProfile.cs # 项目档案
│   │   │   └── SystemConfig.cs   # 系统配置
│   │   ├── Services/              # 服务层(单例/静态模式)
│   │   │   ├── PlcService.cs        # PLC 通信(西门子 S7)
│   │   │   ├── PlcPollingService.cs # PLC 轮询(单例)
│   │   │   ├── MockPlcService.cs    # 模拟 PLC 数据
│   │   │   ├── AlarmService.cs      # 报警服务(单例)
│   │   │   ├── DataLoggingService.cs # 数据日志
│   │   │   ├── AuthService.cs       # 认证(PBKDF2)
│   │   │   ├── ConfigService.cs     # JSON 配置
│   │   │   ├── DatabaseService.cs   # SqlSugar + SQLite
│   │   │   ├── HubServer.cs         # WebSocket 服务端
│   │   │   ├── HubClient.cs         # WebSocket 客户端
│   │   │   ├── ReportService.cs     # HTML 报表
│   │   │   ├── BackupService.cs     # 数据库备份/还原
│   │   │   ├── AuditService.cs      # 审计日志
│   │   │   ├── LanguageService.cs   # 中/英双语
│   │   │   ├── ThemeService.cs      # 深色/浅色主题
│   │   │   ├── ProjectService.cs    # 多项目管理
│   │   │   └── LogService.cs        # Serilog 初始化
│   │   ├── ViewModels/            # ViewModel 层
│   │   │   ├── MainViewModel.cs   # 主窗口(Tab 导航)
│   │   │   ├── LoginViewModel.cs  # 登录
│   │   │   ├── ViewAViewModel.cs  # 主工艺(接 PLC 实时数据)
│   │   │   ├── ViewBViewModel.cs  # 参数设置
│   │   │   ├── ViewCViewModel.cs  # 流量记录(图表+导出)
│   │   │   ├── ViewDViewModel.cs  # 报警记录
│   │   │   ├── ViewEViewModel.cs  # 关于
│   │   │   ├── ViewFViewModel.cs  # 审计日志
│   │   │   └── ProjectViewModel.cs # 项目档案
│   │   └── Utils/                 # 工具类
│   │       ├── ResolutionManager.cs # 分辨率管理
│   │       └── WinSize.cs          # 窗口尺寸
│   │
│   └── YZWater.Avalonia/          # Avalonia UI 项目
│       ├── Views/                 # AXAML 视图
│       │   ├── MainWindow.axaml   # 主窗口
│       │   ├── LoginView.axaml    # 登录窗口
│       │   ├── ViewAView.axaml    # 主工艺(工业控件)
│       │   ├── ViewBView.axaml    # 参数设置
│       │   ├── ViewCView.axaml    # 流量记录
│       │   ├── ViewDView.axaml    # 报警记录
│       │   ├── ViewEView.axaml    # 关于
│       │   ├── ViewFView.axaml    # 审计日志
│       │   └── ProjectView.axaml  # 项目档案
│       ├── Controls/              # 自定义工业控件(Render 绘制)
│       │   ├── WaterTankControl.cs # 水箱液位
│       │   ├── PumpControl.cs     # 泵(旋转动画)
│       │   ├── FanControl.cs      # 风扇(旋转动画)
│       │   ├── PipeLineControl.cs # 管道(流动虚线)
│       │   ├── ValveControl.cs    # 阀门(三态)
│       │   ├── GaugeControl.cs    # 仪表
│       │   ├── StatusCard.cs      # 状态卡片
│       │   └── PumpStation3DControl.cs # 泵站 3D 视图
│       ├── Themes/                # 深色/浅色主题
│       │   ├── IndustrialTheme.axaml
│       │   ├── IndustrialThemeLight.axaml
│       │   └── IndustrialStyles.axaml
│       ├── Converters/            # 值转换器
│       └── Assets/                # 资源文件
│
├── tests/
│   └── YZWater.Core.Tests/        # xUnit 单元测试
├── docs/                          # 文档
└── YZWater3.sln                   # 解决方案

🛠️ 开发环境

前置要求

  • .NET 8.0 SDK 或更高版本
  • Visual Studio 2022 或 JetBrains Rider(推荐)
  • Git

安装步骤

  1. 克隆仓库

    git clone <repository-url>
    cd YZWater3
    
  2. 还原依赖

    dotnet restore
    
  3. 构建项目

    dotnet build
    
  4. 运行应用

    dotnet run --project src/YZWater.Avalonia
    

🎯 功能特性

登录认证

  • 用户名/密码登录(PBKDF2-SHA256 哈希)
  • 4 种角色权限:Viewer / Operator / Engineer / Admin
  • 30 分钟会话超时自动登出
  • 审计日志记录所有登录/登出操作

运行模式(通过 yzwater-config.json → RunMode 配置)

模式 说明
Direct 直连 PLC(默认)
Server 连 PLC + 启动 WebSocket 服务端(端口 8765)
Client 连接 WebSocket 服务端接收数据,不直连 PLC
Mock 无 PLC 时使用模拟数据

主工艺视图 (ViewA)

  • 工业控件展示 - 使用自定义控件模拟真实工业界面
    • WaterTankControl - 水箱液位显示
    • PumpControl - 泵运行状态动画
    • FanControl - 风扇运行状态动画
    • PipeLineControl - 管道流动效果
    • ValveControl - 阀门状态显示
  • 实时显示 4 个水池液位
  • 进水/出水流量监测
  • 泵、风机、阀门控制
  • 自动/手动模式切换
  • 报警状态显示
  • 设备状态面板

参数设置 (ViewB)

  • PLC 连接配置(IP、端口)
  • 报警阈值设置(液位、流量)
  • 泵频率设置
  • 配置保存/加载

流量记录 (ViewC)

  • 进水/出水流量图表
  • 历史数据查询
  • 数据导出 CSV
  • 清除旧数据

报警记录 (ViewD)

  • 实时报警列表
  • 报警确认功能
  • 批量确认
  • 报警详情查看

关于 (ViewE)

  • 系统信息
  • 公司信息
  • 版本信息

审计日志 (ViewF)

  • 操作审计记录列表
  • 按用户、操作类型筛选
  • 登录/登出/配置变更追踪

项目管理 (ProjectView)

  • 多项目档案管理
  • 项目切换
  • 项目级配置独立存储

🔧 配置说明

PLC 配置

默认配置文件:yzwater-config.json

{
  "PlcIp": "192.168.0.150",
  "PlcPort": 5000,
  "AutoConnect": true,
  "LevelHighAlarm": 80.0,
  "LevelLowAlarm": 20.0,
  "FlowHighAlarm": 100.0,
  "FlowLowAlarm": 0.0,
  "PumpFrequency": 50.0,
  "SystemName": "污水处理监控系统",
  "CompanyName": "扬州旭轩科技有限公司",
  "ContactPerson": "赵经理",
  "ContactPhone": "18115099090",
  "RunMode": "Direct",
  "HubPort": 8765,
  "HubServerUrl": "",
  "HubToken": "",
  "IsDarkTheme": false,
  "IsChinese": true,
  "PlcAddresses": {}
}

数据库配置

数据库文件:yzwater.db(SQLite,SqlSugar ORM)

自动创建以下表:

  • users - 用户表(含角色、密码哈希、盐值)
  • persons - 人员表
  • alarm_records - 报警记录表
  • flow_records - 流量记录表
  • analog_records - 模拟量记录表
  • equipment_statuses - 设备状态表
  • audit_logs - 审计日志表

📦 依赖包

Core 项目

  • CommunityToolkit.Mvvm 8.4.2
  • SqlSugarCore 5.1.4.217
  • HslCommunication 12.9.2
  • Serilog 4.4.0
  • Serilog.Sinks.Console 6.1.1
  • Serilog.Sinks.File 7.0.0
  • SkiaSharp 4.151.1
  • Quartz 3.20.0
  • Stateless 5.20.1

Avalonia 项目

  • Avalonia 12.1.1
  • Avalonia.Desktop 12.1.1
  • Avalonia.Themes.Fluent 12.1.1
  • Avalonia.Fonts.Inter 12.1.1
  • Avalonia.Controls.DataGrid 12.1.2
  • LiveChartsCore.SkiaSharpView.Avalonia 2.1.0-dev-798
  • Semi.Avalonia 12.1.0.1

📐 解析度自适应

自适应机制

项目使用 AdaptiveContainer 控件实现解析度自适应:

  1. 设计基准: 1280 x 800
  2. 缩放方式: Uniform(等比缩放,保持宽高比)
  3. 缩放范围: 0.6x - 1.5x
  4. 自动居中: 内容在可用空间内自动居中

工作原理

┌─────────────────────────────────────────────────────────────┐
│  窗口实际大小 (1920 x 1080)                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  缩放后的内容区域 (1280 x 800 * 1.25)                │   │
│  │  ┌─────────────────────────────────────────────┐   │   │
│  │  │  设计内容 (1280 x 800)                       │   │   │
│  │  │  - 所有控件使用固定坐标                       │   │   │
│  │  │  - 由容器统一缩放                            │   │   │
│  │  └─────────────────────────────────────────────┘   │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

使用方式

<!-- 在 MainWindow.axaml 中 -->
<controls:AdaptiveContainer DesignWidth="1280" DesignHeight="800"
                             Stretch="Uniform" MinScale="0.6" MaxScale="1.5">
    <!-- 所有内容放在这里 -->
</controls:AdaptiveContainer>

分辨率管理器

ResolutionManager 提供全局分辨率信息:

// 获取当前缩放比例
var scale = ResolutionManager.Instance.UniformScale;

// 计算缩放后的尺寸
var scaledWidth = ResolutionManager.Instance.Scale(100);

// 计算缩放后的字体大小
var fontSize = ResolutionManager.Instance.ScaleFontSize(14);

🎨 自定义工业控件

WaterTankControl - 水箱控件

  • 显示液位百分比
  • 可配置水颜色和边框颜色
  • 支持文字标签

    <controls:WaterTankControl WaterLevel="75" Text="入口池" WaterColor="#178187"/>
    

PumpControl - 泵控件

  • 运行时显示旋转动画
  • 可配置旋转速度
  • 支持多颜色配置

    <controls:PumpControl IsRunning="{Binding Pump1Running}" Speed="2" Text="泵1"/>
    

FanControl - 风扇控件

  • 运行时显示风扇旋转动画
  • 可配置旋转速度
  • 支持文字标签

    <controls:FanControl IsRunning="{Binding Fan1Running}" Speed="1" Text="风扇1"/>
    

PipeLineControl - 管道控件

  • 显示流动效果(虚线动画)
  • 支持水平/垂直方向
  • 可配置管道颜色和水流颜色

    <controls:PipeLineControl IsFlow="True" IsHorizontal="True"/>
    

ValveControl - 阀门控件

  • 三种状态:关闭/中间/打开
  • 状态颜色指示(红/黄/绿)
  • 支持文字标签

    <controls:ValveControl Status="{Binding Valve1Status}" Text="进水阀"/>
    

🔄 与 YZWater2 的对比

特性 YZWater2 (WPF) YZWater3 (Avalonia)
跨平台 ❌ 仅 Windows ✅ Windows/Linux/macOS
UI 框架 WPF Avalonia UI 12
运行时 .NET Framework 4.8 .NET 8.0
MVVM Caliburn.Micro CommunityToolkit.Mvvm
图表 LiveCharts.Wpf LiveCharts2
控件库 HandyControl Semi.Avalonia
日志 NLog Serilog
工业控件 HslControls 自定义控件

📝 开发说明

添加新视图

  1. 在 YZWater.Core/ViewModels 中创建 ViewModel
  2. 在 YZWater.Avalonia/Views 中创建对应的 View
  3. 在 MainViewModel 中添加视图切换逻辑
  4. 在 MainWindow.axaml 中添加 TabItem

自定义控件

在 YZWater.Avalonia/Controls 目录中创建自定义控件,例如:

  • 水箱控件 (WaterTankControl)
  • 管道控件 (PipeLineControl)
  • 阀门控件 (ValveControl)

数据绑定

使用 CommunityToolkit.Mvvm 的源生成器:

public partial class MyViewModel : ObservableObject
{
    [ObservableProperty]
    private string _name = string.Empty;

    [RelayCommand]
    private async Task SaveAsync()
    {
        // 保存逻辑
    }
}

🐛 常见问题

1. PLC 连接失败

  • 检查 PLC IP 地址是否正确
  • 确认网络连接正常
  • 检查防火墙设置

2. 数据库错误

  • 删除 yzwater.db 文件重新启动
  • 检查磁盘空间

3. UI 显示异常

  • 更新显卡驱动
  • 检查 .NET 8.0 运行时是否安装

📄 许可证

© 2024-2026 扬州旭轩科技有限公司

👥 联系方式

  • 公司: 扬州旭轩科技有限公司
  • 联系人: 赵经理
  • 电话: 18115099090