# 充电桩管理系统使用说明 ## 📋 概述 充电桩管理系统是一个基于 WinForms 的可视化管理工具,用于管理 AGV 系统中的充电桩设备。 ## 🚀 快速开始 ### 打开管理窗口 ```csharp // 在代码中打开充电桩管理窗口 var form = new StandardScene.Charge.ChargeStationManagementForm(); form.ShowDialog(); // 或者在按钮点击事件中 private void btnOpenChargeManagement_Click(object sender, EventArgs e) { var form = new StandardScene.Charge.ChargeStationManagementForm(); form.Show(); } ``` ### 添加菜单项(推荐) 在主窗口的菜单栏中添加: ```csharp // 在主窗口的初始化代码中 var menuItem = new ToolStripMenuItem("充电桩管理"); menuItem.Click += (s, e) => { var form = new StandardScene.Charge.ChargeStationManagementForm(); form.Show(); }; // 将 menuItem 添加到主菜单 ``` ## 📖 功能说明 ### 1. 充电桩列表(左侧面板) #### 功能特性 - **实时显示**:显示所有充电桩的详细信息 - **颜色标识**: - 🟢 **绿色**:充电中 - 🔴 **红色**:故障 - ⚫ **灰色**:离线 - ⚪ **白色**:空闲/其他状态 - **搜索功能**:支持按编号、名称、IP地址搜索 - **双击编辑**:双击列表项可快速编辑 #### 列表字段 | 字段 | 说明 | 示例 | |-----|------|------| | 编号 | 充电桩唯一标识 | CS20240115123456 | | 名称 | 充电桩名称 | 1号充电桩 | | IP地址 | 设备IP | 192.168.1.100 | | 端口 | 通信端口 | 502 | | 电压(V) | 额定电压 | 220.0 | | 电流(A) | 额定电流 | 32.0 | | 功率(W) | 计算功率 | 7040.0 | | 状态 | 当前状态 | 空闲/充电中/故障 | | 启用 | 是否启用 | 是/否 | | 站点ID | 关联站点 | 1001 | | 备注 | 备注信息 | 南区1号充电桩 | ### 2. 充电桩编辑(右侧面板) #### 必填字段 - ✅ **编号**:自动生成(格式:CS+时间戳+随机数) - ✅ **名称**:充电桩名称,便于识别 - ✅ **IP地址**:设备IP,必须为有效IP格式 - ✅ **端口**:通信端口(1-65535) - ✅ **电压**:额定电压(0-1000V) - ✅ **电流**:额定电流(0-500A) #### 选填字段 - 📌 **状态**:空闲/充电中/故障/离线/维护中/预约中 - 📌 **启用**:是否启用该充电桩 - 📌 **站点ID**:关联的站点编号(与地图站点关联) - 📌 **备注**:额外说明信息 #### 自动计算 - ⚡ **功率**:自动计算(电压 × 电流) ### 3. 操作按钮 #### 右侧编辑区 - 🆕 **新增**:清空表单,准备添加新充电桩 - 💾 **保存**:保存当前充电桩信息(新增或更新) - 🗑️ **删除**:删除当前选中的充电桩 - ❌ **取消**:清空表单 #### 左侧列表区 - 🔄 **刷新**:重新加载数据 - 📤 **导出**:导出充电桩数据为 JSON 或 CSV 文件 ## 🔒 数据验证规则 ### IP地址验证 ``` ✅ 有效:192.168.1.100, 10.0.0.1, 172.16.0.1 ❌ 无效:192.168.1, 256.1.1.1, abc.def.ghi.jkl ``` ### 端口验证 ``` ✅ 有效:502, 8080, 1234 ❌ 无效:0, 70000, -1 ``` ### 电压验证 ``` ✅ 有效:220V, 380V, 110V ❌ 无效:-10V, 1500V, 0V ``` ### 电流验证 ``` ✅ 有效:32A, 16A, 63A ❌ 无效:-5A, 600A, 0A ``` ### 唯一性验证 - ❌ 编号不能重复 - ❌ IP地址+端口组合不能重复 ## 💾 数据存储 ### 存储位置 ``` 项目根目录/Data/ChargeStations.json ``` ### 数据格式 ```json [ { "StationId": "CS20240115123456", "Name": "1号充电桩", "IpAddress": "192.168.1.100", "Port": 502, "Voltage": 220.0, "Current": 32.0, "Status": 0, "Enabled": true, "SiteId": 1001, "Remarks": "南区1号充电桩", "CreatedTime": "2024-01-15T12:34:56", "ModifiedTime": "2024-01-15T14:20:30" } ] ``` ## 📊 代码集成 ### 获取充电桩数据 ```csharp using StandardScene.Charge; // 获取数据服务实例 var dataService = ChargeStationDataService.Instance; // 获取所有充电桩 var allStations = dataService.GetAllStations(); // 获取空闲充电桩 var idleStations = dataService.GetIdleStations(); // 根据编号获取充电桩 var station = dataService.GetStationById("CS20240115123456"); // 获取充电中的充电桩数量 int chargingCount = dataService.GetChargingCount(); ``` ### 添加/更新充电桩 ```csharp // 创建新充电桩 var newStation = new ChargeStation { Name = "2号充电桩", IpAddress = "192.168.1.101", Port = 502, Voltage = 220.0, Current = 32.0 }; // 添加 if (dataService.AddStation(newStation, out string errorMsg)) { Console.WriteLine("添加成功"); } else { Console.WriteLine($"添加失败: {errorMsg}"); } // 更新状态 dataService.UpdateStationStatus("CS20240115123456", ChargeStationStatus.Charging); ``` ### 删除充电桩 ```csharp // 删除充电桩 if (dataService.DeleteStation("CS20240115123456", out string errorMsg)) { Console.WriteLine("删除成功"); } else { Console.WriteLine($"删除失败: {errorMsg}"); } ``` ## ⚠️ 注意事项 1. **数据持久化**:所有数据自动保存到 JSON 文件,重启后数据不会丢失 2. **线程安全**:数据服务使用单例模式和锁机制,支持多线程访问 3. **状态管理**:充电中的充电桩无法删除,需先停止充电 4. **IP冲突检测**:系统会自动检测IP和端口的冲突 5. **数据备份**:建议定期备份 `Data/ChargeStations.json` 文件 ## 🔧 扩展功能建议 ### 与充电任务集成 在 `AbstractChargeMission.cs` 中集成充电桩数据: ```csharp // 在充电任务中获取充电桩信息 private void SelectChargeStation(Car car) { var dataService = ChargeStationDataService.Instance; var idleStations = dataService.GetIdleStations(); if (idleStations.Count > 0) { var nearestStation = FindNearestStation(car, idleStations); // 更新充电桩状态 dataService.UpdateStationStatus( nearestStation.StationId, ChargeStationStatus.Reserved ); // 分配车辆到充电桩 AssignCarToStation(car, nearestStation); } } // 充电完成后 private void OnChargeComplete(Car car, ChargeStation station) { var dataService = ChargeStationDataService.Instance; dataService.UpdateStationStatus( station.StationId, ChargeStationStatus.Idle ); } ``` ### 监控充电桩状态 ```csharp // 定期检查充电桩在线状态 private void MonitorChargeStations() { var dataService = ChargeStationDataService.Instance; var stations = dataService.GetAllStations(); foreach (var station in stations) { if (station.Enabled) { bool isOnline = PingStation(station.IpAddress, station.Port); var newStatus = isOnline ? ChargeStationStatus.Idle : ChargeStationStatus.Offline; if (station.Status != newStatus) { dataService.UpdateStationStatus(station.StationId, newStatus); Diagnosis.Log($"充电桩 {station.Name} 状态变更: {newStatus}", "ChargeStation", true); } } } } ``` ## 📞 技术支持 如有问题,请检查: 1. `Data` 文件夹是否有写入权限 2. JSON 文件格式是否正确 3. 日志中的错误信息(标签:`ChargeStation`) --- **版本**: 1.0.0 **最后更新**: 2024-01-15 **作者**: MDCS System