using System; using System.ComponentModel; namespace StandardScene.Charge { /// /// 充电策略配置 /// public class ChargeStrategyConfig { #region SOC 参数 /// /// 必充电量 (%) /// [Description("必充电量")] [DisplayName("必充电量(%)")] public double MustChargeSoc { get; set; } /// /// 空闲充电电量 (%) /// [Description("空闲充电电量")] [DisplayName("空闲充电电量(%)")] public double IdleChargeSoc { get; set; } /// /// 任务可用电量 (%) /// [Description("任务可用电量")] [DisplayName("任务可用电量(%)")] public double TaskAvailableSoc { get; set; } /// /// 满电电量 (%) /// [Description("满电电量")] [DisplayName("满电电量(%)")] public double FullChargeSoc { get; set; } /// /// 允许中断电量 (%) /// [Description("允许中断电量")] [DisplayName("允许中断电量(%)")] public double AllowInterruptSoc { get; set; } #endregion #region 时间参数 /// /// 空闲充电时间 (秒) /// [Description("空闲充电时间")] [DisplayName("空闲充电时间(秒)")] public double IdleChargeSeconds { get; set; } /// /// 空闲时间 (秒) /// [Description("空闲时间")] [DisplayName("空闲时间(秒)")] public double IdleSeconds { get; set; } /// /// 必充时间 (秒) /// [Description("必充时间")] [DisplayName("必充时间(秒)")] public double MustChargeSeconds { get; set; } /// /// 补电时间 (分钟) /// [Description("补电时间")] [DisplayName("补电时间(分钟)")] public double TopUpMinutes { get; set; } #endregion #region 任务参数 /// /// 允许空闲车充电的最小任务数 /// [Description("允许空闲车充电的最小任务数")] [DisplayName("最小任务数")] public int MinAllowFreeCarToChargeTaskCnt { get; set; } #endregion #region 开关参数 /// /// 允许中断充电任务 /// [Description("允许中断充电任务")] [DisplayName("允许中断任务")] public bool AllowInterruptTask { get; set; } /// /// 优先使用低电量车辆充电 /// [Description("优先使用低电量车辆充电")] [DisplayName("优先低电量充电")] public bool UseLowerSocForCharge { get; set; } /// /// 启用充电错误检测 /// [Description("启用充电错误检测")] [DisplayName("错误检测")] public bool EnableErrorChargeDetection { get; set; } /// /// 使用充电站点筛选 /// [Description("使用充电站点筛选")] [DisplayName("站点筛选")] public bool UseChargeSiteFilter { get; set; } #endregion #region 构造函数 public ChargeStrategyConfig() { // 使用默认值初始化 SetDefaults(); } /// /// 设置默认值 /// private void SetDefaults() { // SOC 参数默认值 MustChargeSoc = 20; IdleChargeSoc = 90; TaskAvailableSoc = 60; FullChargeSoc = 90; AllowInterruptSoc = 45; // 时间参数默认值 IdleChargeSeconds = 30; IdleSeconds = 5; MustChargeSeconds = 60; TopUpMinutes = 5; // 任务参数默认值 MinAllowFreeCarToChargeTaskCnt = 0; // 开关参数默认值 AllowInterruptTask = false; UseLowerSocForCharge = true; EnableErrorChargeDetection = false; UseChargeSiteFilter = false; } /// /// 创建默认配置 /// public static ChargeStrategyConfig CreateDefault() { return new ChargeStrategyConfig(); } #endregion #region 验证 /// /// 验证配置是否有效 /// public bool Validate(out string errorMessage) { // 验证 SOC 范围 if (MustChargeSoc < 0 || MustChargeSoc > 100) { errorMessage = "必充电量必须在 0-100 之间"; return false; } if (IdleChargeSoc < 0 || IdleChargeSoc > 100) { errorMessage = "空闲充电电量必须在 0-100 之间"; return false; } if (TaskAvailableSoc < 0 || TaskAvailableSoc > 100) { errorMessage = "任务可用电量必须在 0-100 之间"; return false; } if (FullChargeSoc < 0 || FullChargeSoc > 100) { errorMessage = "满电电量必须在 0-100 之间"; return false; } if (AllowInterruptSoc < 0 || AllowInterruptSoc > 100) { errorMessage = "允许中断电量必须在 0-100 之间"; return false; } // 验证 SOC 逻辑关系 if (MustChargeSoc >= IdleChargeSoc) { errorMessage = "必充电量必须小于空闲充电电量"; return false; } if (TaskAvailableSoc <= MustChargeSoc) { errorMessage = "任务可用电量必须大于必充电量"; return false; } if (FullChargeSoc < IdleChargeSoc) { errorMessage = "满电电量必须大于等于空闲充电电量"; return false; } if (AllowInterruptSoc <= MustChargeSoc) { errorMessage = "允许中断电量必须大于必充电量"; return false; } // 验证时间参数 if (IdleChargeSeconds < 0) { errorMessage = "空闲充电时间不能为负数"; return false; } if (IdleSeconds < 0) { errorMessage = "空闲时间不能为负数"; return false; } if (MustChargeSeconds < 0) { errorMessage = "必充时间不能为负数"; return false; } if (TopUpMinutes < 0) { errorMessage = "补电时间不能为负数"; return false; } // 验证任务参数 if (MinAllowFreeCarToChargeTaskCnt < 0) { errorMessage = "最小任务数不能为负数"; return false; } errorMessage = string.Empty; return true; } #endregion #region 辅助方法 /// /// 克隆配置 /// public ChargeStrategyConfig Clone() { return new ChargeStrategyConfig { MustChargeSoc = this.MustChargeSoc, IdleChargeSoc = this.IdleChargeSoc, TaskAvailableSoc = this.TaskAvailableSoc, FullChargeSoc = this.FullChargeSoc, AllowInterruptSoc = this.AllowInterruptSoc, IdleChargeSeconds = this.IdleChargeSeconds, IdleSeconds = this.IdleSeconds, MustChargeSeconds = this.MustChargeSeconds, TopUpMinutes = this.TopUpMinutes, MinAllowFreeCarToChargeTaskCnt = this.MinAllowFreeCarToChargeTaskCnt, AllowInterruptTask = this.AllowInterruptTask, UseLowerSocForCharge = this.UseLowerSocForCharge, EnableErrorChargeDetection = this.EnableErrorChargeDetection, UseChargeSiteFilter = this.UseChargeSiteFilter }; } /// /// 转换为字符串 /// public override string ToString() { return $"充电策略配置 [必充:{MustChargeSoc}%, 空闲充:{IdleChargeSoc}%, 任务可用:{TaskAvailableSoc}%]"; } #endregion } }