# 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. **克隆仓库** ```bash git clone cd YZWater3 ``` 2. **还原依赖** ```bash dotnet restore ``` 3. **构建项目** ```bash dotnet build ``` 4. **运行应用** ```bash dotnet run --project src/YZWater.Avalonia ``` ## 🎯 功能特性 ### 主工艺视图 (ViewA) - **工业控件展示** - 使用自定义控件模拟真实工业界面 - WaterTankControl - 水箱液位显示 - PumpControl - 泵运行状态动画 - FanControl - 风扇运行状态动画 - PipeLineControl - 管道流动效果 - ValveControl - 阀门状态显示 - 实时显示 4 个水池液位 - 进水/出水流量监测 - 泵、风机、阀门控制 - 自动/手动模式切换 - 报警状态显示 - 设备状态面板 ### 参数设置 (ViewB) - PLC 连接配置(IP、端口) - 报警阈值设置(液位、流量) - 泵频率设置 - 配置保存/加载 ### 流量记录 (ViewC) - 进水/出水流量图表 - 历史数据查询 - 数据导出 CSV - 清除旧数据 ### 报警记录 (ViewD) - 实时报警列表 - 报警确认功能 - 批量确认 - 报警详情查看 ### 关于 (ViewE) - 系统信息 - 公司信息 - 版本信息 ## 🔧 配置说明 ### PLC 配置 默认配置文件:`yzwater-config.json` ```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) │ │ │ │ │ │ - 所有控件使用固定坐标 │ │ │ │ │ │ - 由容器统一缩放 │ │ │ │ │ └─────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ### 使用方式 ```xml ``` ### 分辨率管理器 `ResolutionManager` 提供全局分辨率信息: ```csharp // 获取当前缩放比例 var scale = ResolutionManager.Instance.UniformScale; // 计算缩放后的尺寸 var scaledWidth = ResolutionManager.Instance.Scale(100); // 计算缩放后的字体大小 var fontSize = ResolutionManager.Instance.ScaleFontSize(14); ``` ## 🎨 自定义工业控件 ### WaterTankControl - 水箱控件 - 显示液位百分比 - 可配置水颜色和边框颜色 - 支持文字标签 ```xml ``` ### PumpControl - 泵控件 - 运行时显示旋转动画 - 可配置旋转速度 - 支持多颜色配置 ```xml ``` ### FanControl - 风扇控件 - 运行时显示风扇旋转动画 - 可配置旋转速度 - 支持文字标签 ```xml ``` ### PipeLineControl - 管道控件 - 显示流动效果(虚线动画) - 支持水平/垂直方向 - 可配置管道颜色和水流颜色 ```xml ``` ### ValveControl - 阀门控件 - 三种状态:关闭/中间/打开 - 状态颜色指示(红/黄/绿) - 支持文字标签 ```xml ``` ## 🔄 与 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 的源生成器: ```csharp 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