7.4 KiB
7.4 KiB
充电桩管理系统使用说明
📋 概述
充电桩管理系统是一个基于 WinForms 的可视化管理工具,用于管理 AGV 系统中的充电桩设备。
🚀 快速开始
打开管理窗口
// 在代码中打开充电桩管理窗口
var form = new StandardScene.Charge.ChargeStationManagementForm();
form.ShowDialog();
// 或者在按钮点击事件中
private void btnOpenChargeManagement_Click(object sender, EventArgs e)
{
var form = new StandardScene.Charge.ChargeStationManagementForm();
form.Show();
}
添加菜单项(推荐)
在主窗口的菜单栏中添加:
// 在主窗口的初始化代码中
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
数据格式
[
{
"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"
}
]
📊 代码集成
获取充电桩数据
using StandardScene.Charge;
// 获取数据服务实例
var dataService = ChargeStationDataService.Instance;
// 获取所有充电桩
var allStations = dataService.GetAllStations();
// 获取空闲充电桩
var idleStations = dataService.GetIdleStations();
// 根据编号获取充电桩
var station = dataService.GetStationById("CS20240115123456");
// 获取充电中的充电桩数量
int chargingCount = dataService.GetChargingCount();
添加/更新充电桩
// 创建新充电桩
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);
删除充电桩
// 删除充电桩
if (dataService.DeleteStation("CS20240115123456", out string errorMsg))
{
Console.WriteLine("删除成功");
}
else
{
Console.WriteLine($"删除失败: {errorMsg}");
}
⚠️ 注意事项
- 数据持久化:所有数据自动保存到 JSON 文件,重启后数据不会丢失
- 线程安全:数据服务使用单例模式和锁机制,支持多线程访问
- 状态管理:充电中的充电桩无法删除,需先停止充电
- IP冲突检测:系统会自动检测IP和端口的冲突
- 数据备份:建议定期备份
Data/ChargeStations.json文件
🔧 扩展功能建议
与充电任务集成
在 AbstractChargeMission.cs 中集成充电桩数据:
// 在充电任务中获取充电桩信息
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
);
}
监控充电桩状态
// 定期检查充电桩在线状态
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);
}
}
}
}
📞 技术支持
如有问题,请检查:
Data文件夹是否有写入权限- JSON 文件格式是否正确
- 日志中的错误信息(标签:
ChargeStation)
版本: 1.0.0
最后更新: 2024-01-15
作者: MDCS System