更改初版
This commit is contained in:
347
OrpaonEMS.App/ViewModels/ControlConfigViewModel.cs
Normal file
347
OrpaonEMS.App/ViewModels/ControlConfigViewModel.cs
Normal file
@@ -0,0 +1,347 @@
|
||||
using OrpaonEMS.App.Models;
|
||||
using OrpaonEMS.App.Services;
|
||||
using OrpaonEMS.Core;
|
||||
using Prism.Commands;
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
|
||||
namespace OrpaonEMS.App.ViewModels
|
||||
{
|
||||
public class ControlConfigViewModel : NavigationViewModel
|
||||
{
|
||||
public ControlConfigViewModel(YuePuRunModelService yuePuRunModelService, ConfigDataService configDataService)
|
||||
{
|
||||
YuePuRunModelService = yuePuRunModelService;
|
||||
ConfigDataService = configDataService;
|
||||
|
||||
// 从配置文件加载参数
|
||||
if (ConfigDataService.ControlConfigValue != null)
|
||||
{
|
||||
SolarToEsAsFullSoc = ConfigDataService.ControlConfigValue.SolarToEsAsFullSoc;
|
||||
Master_ToSlaveByMasterSoc = ConfigDataService.ControlConfigValue.Master_ToSlaveByMasterSoc;
|
||||
Master_ToSlaveBySlaveSoc = ConfigDataService.ControlConfigValue.Master_ToSlaveBySlaveSoc;
|
||||
Master_SolarToSlaveEsFullByMasterSoc = ConfigDataService.ControlConfigValue.Master_SolarToSlaveEsFullByMasterSoc;
|
||||
Slave_ToMasterBySlaveSoc = ConfigDataService.ControlConfigValue.Slave_ToMasterBySlaveSoc;
|
||||
Slave_ToMasterByMasterSoc = ConfigDataService.ControlConfigValue.Slave_ToMasterByMasterSoc;
|
||||
Slave_SolarToMasterEsFullBySlaverSoc = ConfigDataService.ControlConfigValue.Slave_SolarToMasterEsFullBySlaverSoc;
|
||||
NightMaster_ToMasterFullSoc = ConfigDataService.ControlConfigValue.NightMaster_ToMasterFullSoc;
|
||||
NightSlave_ToSlaveFullSoc = ConfigDataService.ControlConfigValue.NightSlave_ToSlaveFullSoc;
|
||||
|
||||
// 加载放电模式列表与已选项
|
||||
var list = ConfigDataService.GetDisChargeModel();
|
||||
DisChargeModels = new ObservableCollection<DisChargeModelItem>(list);
|
||||
var sel = ConfigDataService.ControlConfigValue.SelectedDisChargeModel;
|
||||
if (DisChargeModels != null && DisChargeModels.Count > 0)
|
||||
{
|
||||
// 若配置中无效则回落到第一个项
|
||||
if (DisChargeModels.Any(m => m.Model == sel))
|
||||
SelectedDisChargeModelId = sel;
|
||||
else
|
||||
SelectedDisChargeModelId = DisChargeModels[0].Model;
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectedDisChargeModelId = 1;
|
||||
}
|
||||
// 与旧逻辑保持同步(可选)
|
||||
if (System.Enum.IsDefined(typeof(DisChargeType), SelectedDisChargeModelId))
|
||||
SelectedDisChargeType = (DisChargeType)SelectedDisChargeModelId;
|
||||
}
|
||||
|
||||
// 同步到运行模式服务
|
||||
YuePuRunModelService.SolarToEsAsFullSoc = SolarToEsAsFullSoc;
|
||||
YuePuRunModelService.Master_ToSlaveByMasterSoc = Master_ToSlaveByMasterSoc;
|
||||
YuePuRunModelService.Master_ToSlaveBySlaveSoc = Master_ToSlaveBySlaveSoc;
|
||||
YuePuRunModelService.Master_SolarToSlaveEsFullByMasterSoc = Master_SolarToSlaveEsFullByMasterSoc;
|
||||
YuePuRunModelService.Slave_ToMasterBySlaveSoc = Slave_ToMasterBySlaveSoc;
|
||||
YuePuRunModelService.Slave_ToMasterByMasterSoc = Slave_ToMasterByMasterSoc;
|
||||
YuePuRunModelService.Slave_SolarToMasterEsFullBySlaverSoc = Slave_SolarToMasterEsFullBySlaverSoc;
|
||||
YuePuRunModelService.NightMaster_ToMasterFullSoc = NightMaster_ToMasterFullSoc;
|
||||
YuePuRunModelService.NightSlave_ToSlaveFullSoc = NightSlave_ToSlaveFullSoc;
|
||||
|
||||
|
||||
//SelectedDisChargeType=
|
||||
}
|
||||
|
||||
|
||||
private DelegateCommand<string> _BtnConfigSave;
|
||||
/// <summary>
|
||||
/// 运行模式操作
|
||||
/// </summary>
|
||||
public DelegateCommand<string> BtnConfigSave
|
||||
{
|
||||
set
|
||||
{
|
||||
_BtnConfigSave = value;
|
||||
}
|
||||
get
|
||||
{
|
||||
if (_BtnConfigSave == null)
|
||||
{
|
||||
_BtnConfigSave = new DelegateCommand<string>((par) => BtnConfigSaveCall(par));
|
||||
}
|
||||
return _BtnConfigSave;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private DelegateCommand _BtnCloseSys;
|
||||
/// <summary>
|
||||
/// 关闭系统
|
||||
/// </summary>
|
||||
public DelegateCommand BtnCloseSys
|
||||
{
|
||||
set
|
||||
{
|
||||
_BtnCloseSys = value;
|
||||
}
|
||||
get
|
||||
{
|
||||
if (_BtnCloseSys == null)
|
||||
{
|
||||
_BtnCloseSys = new DelegateCommand(() => BtnCloseSysCall());
|
||||
}
|
||||
return _BtnCloseSys;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 关闭系统的执行方法
|
||||
/// </summary>
|
||||
private void BtnCloseSysCall()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 停止后台监听线程(例如削峰填谷时间监听)
|
||||
if (ConfigDataService != null)
|
||||
{
|
||||
ConfigDataService.ThreadEnable = false;
|
||||
}
|
||||
|
||||
// 关闭运行服务中的状态循环与通信连接
|
||||
YuePuRunModelService?.CloseSystem();
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
System.Windows.MessageBox.Show($"关闭系统时发生异常: {ex.Message}", "错误", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
// 退出应用程序
|
||||
System.Windows.Application.Current.Shutdown();
|
||||
}
|
||||
catch
|
||||
{
|
||||
System.Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnConfigSaveCall(string par)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 同步到运行模式服务
|
||||
YuePuRunModelService.SolarToEsAsFullSoc = SolarToEsAsFullSoc;
|
||||
YuePuRunModelService.Master_ToSlaveBySlaveSoc = Master_ToSlaveBySlaveSoc;
|
||||
YuePuRunModelService.Master_SolarToSlaveEsFullByMasterSoc = Master_SolarToSlaveEsFullByMasterSoc;
|
||||
YuePuRunModelService.Slave_ToMasterBySlaveSoc = Slave_ToMasterBySlaveSoc;
|
||||
YuePuRunModelService.Slave_ToMasterByMasterSoc = Slave_ToMasterByMasterSoc;
|
||||
YuePuRunModelService.Slave_SolarToMasterEsFullBySlaverSoc = Slave_SolarToMasterEsFullBySlaverSoc;
|
||||
YuePuRunModelService.NightMaster_ToMasterFullSoc = NightMaster_ToMasterFullSoc;
|
||||
YuePuRunModelService.NightSlave_ToSlaveFullSoc = NightSlave_ToSlaveFullSoc;
|
||||
|
||||
// 保存到配置文件
|
||||
if (ConfigDataService.ControlConfigValue != null)
|
||||
{
|
||||
ConfigDataService.ControlConfigValue.SolarToEsAsFullSoc = SolarToEsAsFullSoc;
|
||||
ConfigDataService.ControlConfigValue.Master_ToSlaveByMasterSoc = Master_ToSlaveByMasterSoc;
|
||||
ConfigDataService.ControlConfigValue.Master_ToSlaveBySlaveSoc = Master_ToSlaveBySlaveSoc;
|
||||
ConfigDataService.ControlConfigValue.Master_SolarToSlaveEsFullByMasterSoc = Master_SolarToSlaveEsFullByMasterSoc;
|
||||
ConfigDataService.ControlConfigValue.Slave_ToMasterBySlaveSoc = Slave_ToMasterBySlaveSoc;
|
||||
ConfigDataService.ControlConfigValue.Slave_ToMasterByMasterSoc = Slave_ToMasterByMasterSoc;
|
||||
ConfigDataService.ControlConfigValue.Slave_SolarToMasterEsFullBySlaverSoc = Slave_SolarToMasterEsFullBySlaverSoc;
|
||||
ConfigDataService.ControlConfigValue.NightMaster_ToMasterFullSoc = NightMaster_ToMasterFullSoc;
|
||||
ConfigDataService.ControlConfigValue.NightSlave_ToSlaveFullSoc = NightSlave_ToSlaveFullSoc;
|
||||
|
||||
// 保存选择的放电模式(以 Model Id 为准)
|
||||
ConfigDataService.ControlConfigValue.SelectedDisChargeModel = SelectedDisChargeModelId;
|
||||
// 同步旧字段
|
||||
if (System.Enum.IsDefined(typeof(DisChargeType), SelectedDisChargeModelId))
|
||||
SelectedDisChargeType = (DisChargeType)SelectedDisChargeModelId;
|
||||
|
||||
// 调用保存方法
|
||||
bool saveResult = ConfigDataService.SaveControlConfigValue();
|
||||
|
||||
if (saveResult)
|
||||
{
|
||||
System.Windows.MessageBox.Show("控制参数配置保存成功!", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Information);
|
||||
}
|
||||
else
|
||||
{
|
||||
System.Windows.MessageBox.Show("控制参数配置保存失败,请查看日志!", "错误", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
System.Windows.MessageBox.Show("控制参数配置对象为空!", "错误", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
System.Windows.MessageBox.Show($"保存控制参数配置时发生异常: {ex.Message}", "错误", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private double _SolarToEsAsFullSoc = 97;
|
||||
/// <summary>
|
||||
/// 光伏给储能充电 作为满的比值
|
||||
/// 90-97
|
||||
/// </summary>
|
||||
public double SolarToEsAsFullSoc
|
||||
{
|
||||
get { return _SolarToEsAsFullSoc; }
|
||||
set { _SolarToEsAsFullSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
private double _Master_ToSlaveByMasterSoc = 5;
|
||||
/// <summary>
|
||||
/// Master模式,切换到Slave模式时MasterSOC的阀值
|
||||
/// 两个同时考虑
|
||||
/// </summary>
|
||||
public double Master_ToSlaveByMasterSoc
|
||||
{
|
||||
get { return _Master_ToSlaveByMasterSoc; }
|
||||
set { _Master_ToSlaveByMasterSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
private double _Master_ToSlaveBySlaveSoc = 15;
|
||||
/// <summary>
|
||||
/// Master模式,切换到Slave模式时Slave SOC的阀值
|
||||
/// 两个同时考虑
|
||||
/// </summary>
|
||||
public double Master_ToSlaveBySlaveSoc
|
||||
{
|
||||
get { return _Master_ToSlaveBySlaveSoc; }
|
||||
set { _Master_ToSlaveBySlaveSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
private double _Master_SolarToSlaveEsFullByMasterSoc = 95;
|
||||
/// <summary>
|
||||
/// Master模式,光伏给从储能充满了,是否切换到Slave模式,但是此时需要判断主储能MasterSOC是否满了(主储能也满的话,也无法接收光伏的电),否则不切换
|
||||
/// 主要考虑尽可能的不浪费光伏的电,主从储能只要有余量就要接受光伏的电,也要防止频繁的切换
|
||||
/// < SolarToEsAsFullSoc
|
||||
/// </summary>
|
||||
public double Master_SolarToSlaveEsFullByMasterSoc
|
||||
{
|
||||
get { return _Master_SolarToSlaveEsFullByMasterSoc; }
|
||||
set { _Master_SolarToSlaveEsFullByMasterSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
|
||||
private double _Slave_ToMasterBySlaveSoc = 5;
|
||||
/// <summary>
|
||||
/// Slave模式,切换到Master模式时SOC的阀值
|
||||
/// 两个同时考虑
|
||||
/// </summary>
|
||||
public double Slave_ToMasterBySlaveSoc
|
||||
{
|
||||
get { return _Slave_ToMasterBySlaveSoc; }
|
||||
set { _Slave_ToMasterBySlaveSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
private double _Slave_ToMasterByMasterSoc = 15;
|
||||
/// <summary>
|
||||
/// Slave模式,切换到Master模式时SOC的阀值
|
||||
/// 两个同时考虑
|
||||
/// </summary>
|
||||
public double Slave_ToMasterByMasterSoc
|
||||
{
|
||||
get { return _Slave_ToMasterByMasterSoc; }
|
||||
set { _Slave_ToMasterByMasterSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
private double _Slave_SolarToMasterEsFullBySlaverSoc = 95;
|
||||
/// <summary>
|
||||
/// Slave模式,光伏给主储能充满了,是否切换到Master模式,但是此时需要判断从储能SOC是否满了(从储能也满的话,也无法接收光伏的电),否则不切换
|
||||
/// 主要考虑尽可能的不浪费光伏的电,主从储能只要有余量就要接受光伏的电,也要防止频繁的切换
|
||||
/// < SolarToEsAsFullSoc
|
||||
/// </summary>
|
||||
public double Slave_SolarToMasterEsFullBySlaverSoc
|
||||
{
|
||||
get { return _Slave_SolarToMasterEsFullBySlaverSoc; }
|
||||
set { _Slave_SolarToMasterEsFullBySlaverSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
private double _NightMaster_ToMasterFullSoc = 98;
|
||||
/// <summary>
|
||||
/// 晚上,主储能充满的标志,也是切换到从储能的控制标志
|
||||
/// </summary>
|
||||
public double NightMaster_ToMasterFullSoc
|
||||
{
|
||||
get { return _NightMaster_ToMasterFullSoc; }
|
||||
set { _NightMaster_ToMasterFullSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
|
||||
private double _NightSlave_ToSlaveFullSoc = 98;
|
||||
/// <summary>
|
||||
/// 晚上,从储能充满的标志,也是切换到主储能的控制标志
|
||||
/// </summary>
|
||||
public double NightSlave_ToSlaveFullSoc
|
||||
{
|
||||
get { return _NightSlave_ToSlaveFullSoc; }
|
||||
set { _NightSlave_ToSlaveFullSoc = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
public YuePuRunModelService YuePuRunModelService { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 配置数据服务
|
||||
/// </summary>
|
||||
public ConfigDataService ConfigDataService { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 选中的放电模式
|
||||
/// </summary>
|
||||
private DisChargeType _SelectedDisChargeType;
|
||||
public DisChargeType SelectedDisChargeType
|
||||
{
|
||||
get { return _SelectedDisChargeType; }
|
||||
set { _SelectedDisChargeType = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 放电模式列表
|
||||
/// </summary>
|
||||
private ObservableCollection<DisChargeModelItem> _DisChargeModels;
|
||||
public ObservableCollection<DisChargeModelItem> DisChargeModels
|
||||
{
|
||||
get { return _DisChargeModels; }
|
||||
set { _DisChargeModels = value; RaisePropertyChanged(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 选中的放电模式(列表项的 Model Id)
|
||||
/// </summary>
|
||||
private int _SelectedDisChargeModelId;
|
||||
public int SelectedDisChargeModelId
|
||||
{
|
||||
get { return _SelectedDisChargeModelId; }
|
||||
set
|
||||
{
|
||||
_SelectedDisChargeModelId = value;
|
||||
// 同步枚举值(若兼容)
|
||||
if (System.Enum.IsDefined(typeof(DisChargeType), _SelectedDisChargeModelId))
|
||||
SelectedDisChargeType = (DisChargeType)_SelectedDisChargeModelId;
|
||||
RaisePropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user