init commit

This commit is contained in:
zhaowei.huang
2026-06-14 11:19:15 +08:00
parent e79a3815a5
commit c8e540d272
174 changed files with 60830 additions and 39 deletions
@@ -0,0 +1,310 @@
# 充电桩管理系统使用说明
## 📋 概述
充电桩管理系统是一个基于 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