|
|
4 gün önce | |
|---|---|---|
| src | 4 gün önce | |
| .gitignore | 1 hafta önce | |
| CLAUDE.md | 4 gün önce | |
| README.md | 1 hafta önce | |
| YZWater3.sln | 1 hafta önce | |
| xxx.xlsx | 4 gün önce |
基于 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 扬州æ—轩科技有é™å…¬å¸