¿çƽ̨ÎÛË®´¦Àí¼à¿ØÏµÍ³

磊 曹 da86766a6e 默认浅色主题 + 用GetVisualDescendantsé历视觉树更新主题 6 天之å‰
src da86766a6e 默认浅色主题 + 用GetVisualDescendantsé历视觉树更新主题 6 天之å‰
.gitignore 845655b463 添加解æžåº¦è‡ªé€‚应功能 1 周之å‰
README.md 845655b463 添加解æžåº¦è‡ªé€‚应功能 1 周之å‰
YZWater3.sln 845655b463 添加解æžåº¦è‡ªé€‚应功能 1 周之å‰

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