更改初版
This commit is contained in:
@@ -26,10 +26,13 @@ namespace OrpaonEMS.App.Services
|
||||
{
|
||||
///////
|
||||
/////怎么认定为晚上,光伏发电功率低于一个阈值时可认为是晚上
|
||||
public YuePuRunModelService(ILogService logService, ConfigDataService configDataService,
|
||||
public YuePuRunModelService(ILogService logService, ConfigDataService configDataService,BmsDataService bmsDataService,FFService fFService, InPowerPCSDataService inPowerPCSDataService,
|
||||
IEventAggregator eventAggregator)
|
||||
{
|
||||
ConfigDataService = configDataService;
|
||||
BmsDataService = bmsDataService;
|
||||
FFService = fFService;
|
||||
InPowerPCSDataService = inPowerPCSDataService;
|
||||
LogService = logService;
|
||||
|
||||
//CurNightChargEleModel = new NightChargEleModel(ConfigDataService);
|
||||
@@ -131,6 +134,64 @@ namespace OrpaonEMS.App.Services
|
||||
//QFSwitch2.SetRtSwitch(SwitchEm.Off);
|
||||
//QFSwitch1.SetRtSwitch(SwitchEm.On);
|
||||
|
||||
// 放电时间模型初始化:基于配置的 DisChargeModel 列表与 SelectedDisChargeModel
|
||||
try
|
||||
{
|
||||
var list = ConfigDataService.GetDisChargeModel();
|
||||
int selectedId = 1;
|
||||
try
|
||||
{
|
||||
selectedId = ConfigDataService.ControlConfigValue?.SelectedDisChargeModel ?? 1;
|
||||
}
|
||||
catch { selectedId = 1; }
|
||||
|
||||
DisChargeModelItem? selected = null;
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
foreach (var it in list)
|
||||
{
|
||||
if (it != null && it.Model == selectedId)
|
||||
{
|
||||
selected = it;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (selected == null)
|
||||
{
|
||||
selected = list[0];
|
||||
}
|
||||
}
|
||||
|
||||
// 映射到旧的枚举(如可用),否则回退到 DischargeA
|
||||
var enumValue = DisChargeType.DischargeA;
|
||||
if (selected != null && System.Enum.IsDefined(typeof(DisChargeType), selected.Model))
|
||||
{
|
||||
enumValue = (DisChargeType)selected.Model;
|
||||
}
|
||||
|
||||
CurDischargeTimeModel = new DischargeTimeModel(enumValue);
|
||||
|
||||
// 设置具体时间(优先使用配置时间),格式期望 HH:mm
|
||||
if (selected != null && !string.IsNullOrWhiteSpace(selected.DisChargeTime) && TimeSpan.TryParse(selected.DisChargeTime, out var ts))
|
||||
{
|
||||
CurDischargeTimeModel.CurDischargeTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, ts.Hours, ts.Minutes, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 解析失败使用默认 08:00
|
||||
CurDischargeTimeModel.CurDischargeTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 8, 0, 0);
|
||||
LogService.Warn("DisChargeModel 配置时间缺失或格式非法,已使用默认 08:00");
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
// 失败时初始化为默认模式与时间
|
||||
CurDischargeTimeModel = new DischargeTimeModel(DisChargeType.DischargeA)
|
||||
{
|
||||
CurDischargeTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 8, 0, 0)
|
||||
};
|
||||
LogService.Error($"初始化放电时间模型失败: {ex.Message}");
|
||||
}
|
||||
|
||||
StateMachineInitial();
|
||||
LogicScan();
|
||||
@@ -169,6 +230,11 @@ namespace OrpaonEMS.App.Services
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当前的放电时间模型
|
||||
/// </summary>
|
||||
public DischargeTimeModel CurDischargeTimeModel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 税务大楼光伏逆流触发模型
|
||||
/// </summary>
|
||||
@@ -911,7 +977,8 @@ namespace OrpaonEMS.App.Services
|
||||
//循环执行方法
|
||||
|
||||
//在峰的时候放电
|
||||
if (PeakValleySglModel == ElePVEnum.TopPeak || PeakValleySglModel == ElePVEnum.Peak)
|
||||
//if (PeakValleySglModel == ElePVEnum.TopPeak || PeakValleySglModel == ElePVEnum.Peak)
|
||||
if (ConfigDataService.IsTimeCanDischarge())
|
||||
{
|
||||
///////////////////Slave从控制柜给管理大楼供电
|
||||
//注意方向
|
||||
@@ -1118,9 +1185,9 @@ namespace OrpaonEMS.App.Services
|
||||
//循环执行方法
|
||||
|
||||
//在峰的时候放电
|
||||
if (PeakValleySglModel == ElePVEnum.TopPeak || PeakValleySglModel == ElePVEnum.Peak)
|
||||
//if (PeakValleySglModel == ElePVEnum.TopPeak || PeakValleySglModel == ElePVEnum.Peak)
|
||||
if (ConfigDataService.IsTimeCanDischarge())
|
||||
{
|
||||
|
||||
///////////////////Master主控制柜给管理大楼供电
|
||||
//注意方向
|
||||
//主储能箱体放电的控制
|
||||
@@ -1251,7 +1318,6 @@ namespace OrpaonEMS.App.Services
|
||||
|
||||
SlaveControlMsg = "【从储能】充电吸收【光伏】电能:税务大楼负载小5,【从储能】最大功率充电吸收光伏电能,存在【逆流】可能性";
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1261,11 +1327,7 @@ namespace OrpaonEMS.App.Services
|
||||
|
||||
SlaveControlMsg = "【从储能】充电吸收【光伏】电能:【从储能】无法充电,【从储能】停止工作";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -1497,6 +1559,33 @@ namespace OrpaonEMS.App.Services
|
||||
/// </summary>
|
||||
private CancellationTokenSource NoSolarTokenSource { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 关闭系统:停止线程循环并断开所有通信连接
|
||||
/// </summary>
|
||||
public void CloseSystem()
|
||||
{
|
||||
// 先关闭扫描线程使能,令 while(ThreadEnable) 循环尽快退出
|
||||
try { ThreadEnable = false; } catch { }
|
||||
try { MasterTokenSource?.Cancel(); } catch { }
|
||||
try { SlaveTokenSource?.Cancel(); } catch { }
|
||||
try { Night_MasterTokenSource?.Cancel(); } catch { }
|
||||
try { Night_SlaveTokenSource?.Cancel(); } catch { }
|
||||
try { WaitTokenSource?.Cancel(); } catch { }
|
||||
try { NoSolarTokenSource?.Cancel(); } catch { }
|
||||
|
||||
// 停止输出,置零功率
|
||||
try { if (SlaveClient != null) { SlaveClient.ServerCmd.CmdPw = 0; } } catch { }
|
||||
try { if (MasterClient != null) { MasterClient.ServerCmd.CmdPw = 0; } } catch { }
|
||||
|
||||
// 断开设备通信
|
||||
try { SolarMdDrive?.Close(); } catch { }
|
||||
try { MeterMdDrive?.Close(); } catch { }
|
||||
try { ModbusTcpNetDrive?.ConnectClose(); } catch { }
|
||||
try { BmsDataService.CloseDrive(); } catch { }
|
||||
try { FFService.CloseDrive(); } catch { }
|
||||
try { InPowerPCSDataService.CloseModbusRtu(); } catch { }
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 预先状态
|
||||
/// 就是确定目标状态,先进入准备状态时这个预先的状态信息,等条件具备后再进行操作
|
||||
@@ -3173,7 +3262,7 @@ namespace OrpaonEMS.App.Services
|
||||
|
||||
//用Soc小的吸收光伏能量
|
||||
|
||||
if (SlaveClient.ClientInfo!.SOC <= (SolarToEsAsFullSoc-10))
|
||||
if (SlaveClient.ClientInfo!.SOC <= (SolarToEsAsFullSoc - 10))
|
||||
{
|
||||
LogService.Info($"时间:{DateTime.Now.ToString()}-【动作】-当前是【NoSolar】-从储能箱体SOC:{SlaveClient.ClientInfo!.SOC},主储能箱体SOC:{MasterClient.ClientInfo!.SOC},切换到Master");
|
||||
|
||||
@@ -3711,6 +3800,9 @@ namespace OrpaonEMS.App.Services
|
||||
/// 配置服务信息
|
||||
/// </summary>
|
||||
public ConfigDataService ConfigDataService { get; }
|
||||
public BmsDataService BmsDataService { get; }
|
||||
public FFService FFService { get; }
|
||||
public InPowerPCSDataService InPowerPCSDataService { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user