Files
StandardSence/StandardScene.Core/Charge/README_ChargeStationManagement.md
T
2026-06-14 11:19:15 +08:00

311 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 充电桩管理系统使用说明
## 📋 概述
充电桩管理系统是一个基于 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