using System; using System.ComponentModel; using Newtonsoft.Json; namespace StandardScene.Charge { /// /// 充电桩数据模型 /// public class ChargeStation { /// /// 充电桩编号(唯一标识) /// [DisplayName("编号")] public string StationId { get; set; } = "1"; /// /// 充电桩名称 /// [DisplayName("名称")] public string Name { get; set; } /// /// 充电桩类型 /// [DisplayName("类型")] public ChargeStationType Type { get; set; } /// /// 充电方式 /// [DisplayName("充电方式")] public ChargeMethodType ChargeMethod { get; set; } /// /// IP地址 /// [DisplayName("IP地址")] public string IpAddress { get; set; } /// /// 端口号 /// [DisplayName("端口")] public int Port { get; set; } /// /// 通讯类型 (UDP/TCP) /// [DisplayName("通讯类型")] public string CommunicationType { get; set; } = "TCP"; /// /// 额定电压 (V) /// [DisplayName("电压(V)")] public double SetVoltage { get; set; } /// /// 额定电流 (A) /// [DisplayName("电流(A)")] public double SetElectricCurrent { get; set; } /// /// 实时电压 (V) - 当前充电时的实际电压 /// [DisplayName("实时电压(V)")] [JsonIgnore] public double RealTimeVoltage { get; set; } /// /// 实时电流 (A) - 当前充电时的实际电流 /// [DisplayName("实时电流(A)")] [JsonIgnore] public double RealTimeCurrent { get; set; } /// /// 最后发送数据时间 /// [DisplayName("发送时间")] [JsonIgnore] public DateTime? LastSendTime { get; set; } /// /// 最后接收数据时间 /// [DisplayName("接收时间")] [JsonIgnore] public DateTime? LastReceiveTime { get; set; } /// /// 是否有报警 /// [DisplayName("报警")] [JsonIgnore] public bool HasAlarm { get; set; } /// /// 报警信息 /// [DisplayName("报警信息")] [JsonIgnore] public string AlarmMessage { get; set; } /// /// 报警级别 /// [DisplayName("报警级别")] public AlarmLevel AlarmLevel { get; set; } /// /// 网络通讯状态 /// [DisplayName("通讯状态")] [JsonIgnore] public CommunicationStatus CommStatus { get; set; } /// /// 最后通讯成功时间 /// [JsonIgnore] [DisplayName("最后通讯时间")] public DateTime? LastCommunicationTime { get; set; } /// /// 机构伸缩状态 /// [JsonIgnore] [DisplayName("机构状态")] public MechanismStatus MechanismStatus { get; set; } [DisplayName("屏蔽机构状态交互")] public bool ShieldSiteMechanismStatus { get; set; } /// /// 当前充电车辆编号 /// [DisplayName("当前车辆")] [JsonIgnore] public string CurrentVehicle { get; set; } /// /// 当前电量百分比 (0-100) /// [DisplayName("电量")] [JsonIgnore] public double BatteryLevel { get; set; } /// /// 发送充电的状态 /// [DisplayName("充电指令状态")] [JsonIgnore] public ChargeCommandStatus ChargeCommandStatus { get; set; } /// /// 充电桩状态 /// [DisplayName("状态")] [JsonIgnore] public ChargeStationStatus Status { get; set; } /// /// 是否启用 /// [DisplayName("启用")] public bool Enabled { get; set; } [DisplayName("停靠车辆类型")] public ChargeStationCarType GroupCarType { get; set; } /// /// 关联的站点ID(可选) /// [DisplayName("站点ID")] public int? SiteId { get; set; } /// /// 备注 /// [DisplayName("备注")] public string Remarks { get; set; } /// /// 创建时间 /// [DisplayName("创建时间")] public DateTime CreatedTime { get; set; } /// /// 最后修改时间 /// [DisplayName("修改时间")] public DateTime ModifiedTime { get; set; } /// /// 计算功率 (W) /// [JsonIgnore] [DisplayName("功率(W)")] public double Power => SetVoltage * SetElectricCurrent; public ChargeStation() { StationId = GenerateStationId(); Type = ChargeStationType.FRLDTall; // 默认FRLD高款充电桩 ChargeMethod = ChargeMethodType.Ground; // 默认地充 Status = ChargeStationStatus.Idle; Enabled = true; CreatedTime = DateTime.Now; ModifiedTime = DateTime.Now; Port = 502; // 默认Modbus TCP端口 CommunicationType = "UDP"; // 默认UDP通讯 SetVoltage = 29.2; SetElectricCurrent = 45.0; } /// /// 生成充电桩编号 /// private static string GenerateStationId() { return "1"; //return $"CS{DateTime.Now:yyyyMMddHHmmss}{new Random().Next(1000, 9999)}"; } /// /// 验证数据有效性 /// public bool IsValid(out string errorMessage) { if (string.IsNullOrWhiteSpace(StationId)) { errorMessage = "充电桩编号不能为空"; return false; } if (string.IsNullOrWhiteSpace(Name)) { errorMessage = "充电桩名称不能为空"; return false; } if (string.IsNullOrWhiteSpace(IpAddress)) { errorMessage = "IP地址不能为空"; return false; } // 验证IP格式 if (!System.Net.IPAddress.TryParse(IpAddress, out _)) { errorMessage = "IP地址格式不正确"; return false; } // 验证端口范围 if (Port < 1 || Port > 65535) { errorMessage = "端口号必须在 1-65535 之间"; return false; } // 验证电压范围 if (SetVoltage <= 0 || SetVoltage > 64) { errorMessage = "电压必须在 0-64V 之间"; return false; } // 验证电流范围 if (SetElectricCurrent <= 0 || SetElectricCurrent > 101) { errorMessage = "电流必须在 0-101A 之间"; return false; } errorMessage = string.Empty; return true; } public override string ToString() { return $"[{StationId}] {Name} ({IpAddress}:{Port}) - {Status}"; } } /// /// 充电桩类型枚举 /// public enum ChargeStationType { [Description("FRLD高款充电桩")] FRLDTall = 0, [Description("FRLD矮款充电桩")] FRLDShort = 1, [Description("牧星充电桩")] MuXing = 2 // 后续可在此处添加其他充电桩类型 } public enum ChargeStationCarType { [Description("FRLD充电")] FRLD = 0, [Description("牧星充电桩充电")] MuXing = 1 // 后续可在此处添加其他充电桩类型 } /// /// 充电桩状态枚举 /// public enum ChargeStationStatus { [Description("空闲")] Idle = 0, [Description("充电中")] Charging = 1, [Description("报警中")] Fault = 2, [Description("AGV电池已接入")] Battery = 3 } /// /// 报警级别枚举 /// public enum AlarmLevel { [Description("无")] None = 0, [Description("低")] Low = 1, [Description("中")] Medium = 2, [Description("高")] High = 3, [Description("严重")] Critical = 4 } /// /// 机构伸缩状态枚举 /// public enum MechanismStatus { [Description("伸出")] Extended = 1, [Description("缩回")] Retracted = 2, [Description("运动中")] Extending = 3, } /// /// 网络通讯状态枚举 /// public enum CommunicationStatus { [Description("未知")] Unknown = 0, [Description("正常")] Normal = 1, [Description("延迟")] Delayed = 2, [Description("超时")] Timeout = 3, [Description("断开")] Disconnected = 4, [Description("错误")] Error = 5 } /// /// 充电指令状态枚举 /// public enum ChargeCommandStatus { [Description("停止")] Stopped = 0, [Description("启动")] Started = 1 } /// /// 充电方式枚举 /// public enum ChargeMethodType { [Description("地充")] Ground = 0, [Description("尾充")] Rear = 1, [Description("侧充")] Side = 2 } }