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

磊 曹 1dd4571a1c 切换主题时清空并重新加载资源字典 - 触发DynamicResource更新 3 mesi fa
src 1dd4571a1c 切换主题时清空并重新加载资源字典 - 触发DynamicResource更新 3 mesi fa
.gitignore 845655b463 添加解析度自适应功能 3 mesi fa
README.md 845655b463 添加解析度自适应功能 3 mesi fa
YZWater3.sln 845655b463 添加解析度自适应功能 3 mesi fa

README.md

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

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

🚀 技术栈

组件 技术方案
UI 框架 Avalonia UI 11.2.3
运行时 .NET 8.0
MVVM 框架 CommunityToolkit.Mvvm
PLC 通信 HslCommunication
数据库 FreeSql + SQLite
图表 LiveCharts2
日志 Serilog

📁 项目结构

YZWater3/
├── src/
│   ├── YZWater.Core/              # 核心业务逻辑(共享)
│   │   ├── Models/                # 数据模型
│   │   │   ├── Person.cs         # 人员模型
│   │   │   ├── AlarmRecord.cs    # 报警记录
│   │   │   ├── FlowRecord.cs     # 流量记录
│   │   │   ├── EquipmentStatus.cs # 设备状态
│   │   │   └── SystemConfig.cs   # 系统配置
│   │   ├── Services/              # 服务层
│   │   │   ├── DatabaseService.cs # 数据库服务
│   │   │   ├── PlcService.cs     # PLC 通信服务
│   │   │   └── ConfigService.cs  # 配置服务
│   │   ├── ViewModels/            # ViewModel 层
│   │   │   ├── MainViewModel.cs  # 主窗口
│   │   │   ├── ViewAViewModel.cs # 主工艺
│   │   │   ├── ViewBViewModel.cs # 参数设置
│   │   │   ├── ViewCViewModel.cs # 流量记录
│   │   │   ├── ViewDViewModel.cs # 报警记录
│   │   │   └── ViewEViewModel.cs # 关于
│   │   └── Utils/                 # 工具类
│   │       ├── Nlogger.cs        # 日志工具
│   │       └── WinSize.cs        # 窗口尺寸工具
│   │
│   └── YZWater.Avalonia/          # Avalonia UI 项目
│       ├── Views/                 # XAML 视图
│       │   ├── MainWindow.axaml  # 主窗口
│       │   ├── ViewAView.axaml   # 主工艺视图(工业控件)
│       │   ├── ViewBView.axaml   # 参数设置视图
│       │   ├── ViewCView.axaml   # 流量记录视图
│       │   ├── ViewDView.axaml   # 报警记录视图
│       │   └── ViewEView.axaml   # 关于视图
│       ├── Controls/              # 自定义工业控件
│       │   ├── WaterTankControl.cs # 水箱控件
│       │   ├── PumpControl.cs    # 泵控件
│       │   ├── FanControl.cs     # 风扇控件
│       │   ├── PipeLineControl.cs # 管道控件
│       │   └── ValveControl.cs   # 阀门控件
│       ├── Converters/            # 值转换器
│       └── Assets/                # 资源文件
│
└── 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
    

🎯 功能特性

主工艺视图 (ViewA)

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

参数设置 (ViewB)

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

流量记录 (ViewC)

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

报警记录 (ViewD)

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

关于 (ViewE)

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

🔧 配置说明

PLC 配置

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

{
  "PlcIp": "192.168.0.150",
  "PlcPort": 5000,
  "AutoConnect": true,
  "LevelHighAlarm": 80.0,
  "LevelLowAlarm": 20.0,
  "FlowHighAlarm": 100.0,
  "PumpFrequency": 50.0,
  "SystemName": "污水处理监控系统",
  "CompanyName": "扬州旭轩科技有限公司",
  "ContactPerson": "赵经理",
  "ContactPhone": "18115099090"
}

数据库配置

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

自动创建以下表:

  • persons - 人员表
  • alarm_records - 报警记录表
  • flow_records - 流量记录表
  • system_config - 系统配置表

📦 依赖包

Core 项目

  • CommunityToolkit.Mvvm 8.2.2
  • FreeSql.Provider.Sqlite 3.2.800
  • FreeSql.Repository 3.2.800
  • HslCommunication 12.0.1
  • Serilog 4.0.2
  • Serilog.Sinks.Console 6.0.0
  • Serilog.Sinks.File 6.0.0

Avalonia 项目

  • Avalonia 11.2.3
  • Avalonia.Desktop 11.2.3
  • Avalonia.Themes.Fluent 11.2.3
  • Avalonia.Fonts.Inter 11.2.3
  • LiveChartsCore.SkiaSharpView.Avalonia 2.0.0-rc4.5
  • Semi.Avalonia 11.2.1.4

📐 解析度自适应

自适应机制

项目使用 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 11
运行时 .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 扬州旭轩科技有限公司

👥 联系方式

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