|
|
před 1 měsícem | |
|---|---|---|
| docs | před 1 měsícem | |
| projects | před 1 měsícem | |
| src | před 1 měsícem | |
| .gitignore | před 2 měsíci | |
| CLAUDE.md | před 3 měsíci | |
| README.md | před 3 měsíci | |
| YZWater3.sln | před 1 měsícem | |
| xxx.xlsx | před 3 měsíci |
基于 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 # 解决方案文件
克隆仓库
git clone <repository-url>
cd YZWater3
还原依赖
dotnet restore
构建项目
dotnet build
运行应用
dotnet run --project src/YZWater.Avalonia
默认配置文件: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 - 系统配置表项目使用 AdaptiveContainer 控件实现解析度自适应:
┌─────────────────────────────────────────────────────────────┐
│ 窗口实际大小 (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);
支持文字标签
<controls:WaterTankControl WaterLevel="75" Text="入口池" WaterColor="#178187"/>
支持多颜色配置
<controls:PumpControl IsRunning="{Binding Pump1Running}" Speed="2" Text="泵1"/>
支持文字标签
<controls:FanControl IsRunning="{Binding Fan1Running}" Speed="1" Text="风扇1"/>
可配置管道颜色和水流颜色
<controls:PipeLineControl IsFlow="True" IsHorizontal="True"/>
支持文字标签
<controls:ValveControl Status="{Binding Valve1Status}" Text="进水阀"/>
| 特性 | 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 | 自定义控件 |
YZWater.Core/ViewModels 中创建 ViewModelYZWater.Avalonia/Views 中创建对应的 ViewMainViewModel 中添加视图切换逻辑MainWindow.axaml 中添加 TabItem在 YZWater.Avalonia/Controls 目录中创建自定义控件,例如:
使用 CommunityToolkit.Mvvm 的源生成器:
public partial class MyViewModel : ObservableObject
{
[ObservableProperty]
private string _name = string.Empty;
[RelayCommand]
private async Task SaveAsync()
{
// 保存逻辑
}
}
yzwater.db 文件重新启动© 2024 扬州旭轩科技有限公司