
一、指令概述
GetLocalListVersion(获取本地列表版本)是OCPP 1.6协议中由中央系统发起的简单查询指令,用于查询充电桩本地授权列表的当前版本号。通过此指令,中央系统可以了解充电桩本地列表的版本,判断是否需要同步更新。
1.1 指令作用
**•**版本查询**:查询本地授权列表的当前版本
**•**同步判断**:判断是否需要更新本地列表
**•**一致性检查**:检查中央系统与充电桩的列表一致性
**•**冲突检测**:检测版本冲突
1.2 触发时机
- 需要判断是否更新本地列表时
- 定期同步检查时
- 版本冲突排查时
- SendLocalList之前检查当前版本
- 系统初始化时
二、指令详解
2.1 GetLocalListVersion.req(请求)
中央系统向充电桩发送的获取本地列表版本请求,**不包含任何字段**。
JSON示例:
javascript
[
2,
"12345",
"GetLocalListVersion",
{}
]
2.2 GetLocalListVersion.conf(响应)
充电桩对获取本地列表版本请求的响应,包含以下字段:
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| listVersion | integer | 是 | 本地授权列表的当前版本号 |
listVersion - 版本号:
- 当前本地授权列表的版本号
- 初始值为0(表示空列表)
- 每次SendLocalList更新后递增
- 必须是非负整数
JSON示例:
javascript
[
3,
"12345",
{
"listVersion": 5
}
]
JSON示例(空列表):
javascript
[
3,
"12345",
{
"listVersion": 0
}
]
三、工作流程
3.1 版本查询流程

3.2 同步检查流程

3.3 版本冲突检测流程
中央系统准备发送 SendLocalList
- 目标 listVersion: 5
↓
先发送 GetLocalListVersion.req
↓
充电桩返回 listVersion: 6
↓
中央系统检测冲突:
- 充电桩版本 6 > 预期版本 5
- 存在版本冲突
↓
获取充电桩当前列表
↓
合并冲突
↓
生成新版本 listVersion: 7
↓
发送 SendLocalList.req
- listVersion: 7
↓
解决冲突
3.4 时序图

四、重要注意事项
4.1 版本号规则
严格递增:
- 版本号从0开始(空列表)
- 每次SendLocalList更新后递增1
- 必须严格递增,不能跳跃
- 中央系统和充电桩都应遵循
版本管理:
- 中央系统维护每个充电桩的目标版本
- 充电桩存储当前版本
- 版本号用于同步和冲突检测
4.2 版本号含义
listVersion = 0:
- 表示本地授权列表为空
- 没有授权条目
- 可能是新充电桩或刚清除
listVersion > 0:
- 表示本地授权列表有内容
- 版本号反映更新次数
- 用于判断是否需要同步
4.3 与SendLocalList的关系
版本协调:
- GetLocalListVersion查询当前版本
- SendLocalList使用新版本号更新
- 新版本号必须大于当前版本
- 否则返回VersionMismatch
典型流程:
-
GetLocalListVersion → 获取当前版本
-
比较版本差异
-
准备更新数据
-
SendLocalList → 使用新版本号更新
4.4 版本冲突处理
冲突场景:
- 中央系统预期版本与实际版本不一致
- 多个系统同时更新
- 网络问题导致状态不同步
处理策略:
-
检测冲突(版本不匹配)
-
获取充电桩当前完整列表
-
合并两个版本的更改
-
生成新的版本号
-
重新发送SendLocalList
4.5 性能考虑
查询频率:
- 不要过于频繁查询
- 定期同步即可(如每天一次)
- 更新前查询一次
- 避免不必要的查询
缓存策略:
- 中央系统可以缓存最后知道的版本
- 定期验证缓存版本
- 减少网络查询
4.6 错误处理
通信失败:
- 查询超时,重试机制
- 记录失败日志
- 稍后重试
版本异常:
- 版本号回退(不应该发生)
- 版本号跳跃(不应该发生)
- 记录异常,调查原因
五、实际应用场景
5.1 场景一:更新前检查版本
需求:更新本地列表前检查当前版本
流程:
-
中央系统准备更新本地列表
-
发送 GetLocalListVersion.req
-
充电桩返回 listVersion: 3
-
中央系统准备新版本
-
设置新 listVersion: 4
-
发送 SendLocalList.req
-
充电桩更新列表
-
版本号更新为 4
-
更新成功
5.2 场景二:定期同步检查
需求:定期检查本地列表同步状态
流程:
-
定时任务执行(如每天凌晨)
-
对每个充电桩:
a. 发送 GetLocalListVersion.req
b. 接收 listVersion
c. 与中央系统记录比较
d. 如果不一致,记录差异
-
生成同步报告
-
对差异充电桩安排同步
5.3 场景三:版本冲突检测
需求:检测并解决版本冲突
流程:
- 中央系统准备发送 SendLocalList
- 预期 listVersion: 5
-
先发送 GetLocalListVersion.req
-
充电桩返回 listVersion: 6
-
检测冲突:6 != 5
-
获取充电桩当前列表
-
合并更改
-
生成新版本 listVersion: 7
-
发送 SendLocalList.req
-
解决冲突
5.4 场景四:新充电桩初始化
需求:新充电桩接入,检查初始状态
流程:
-
新充电桩首次上线
-
BootNotification成功
-
发送 GetLocalListVersion.req
-
充电桩返回 listVersion: 0(空列表)
-
中央系统准备初始列表
-
设置 listVersion: 1
-
发送 SendLocalList.req
-
充电桩加载初始列表
-
初始化完成
5.5 场景五:批量版本检查
需求:批量检查所有充电桩的版本
流程:
-
中央系统需要批量检查
-
对所有在线充电桩:
a. 发送 GetLocalListVersion.req
b. 收集返回的版本号
-
汇总所有版本信息
-
与中央系统记录比较
-
识别不一致的充电桩
-
安排同步更新
-
生成检查报告
5.6 场景六:故障排查
需求:排查授权问题,检查列表状态
流程:
-
用户报告授权失败
-
怀疑本地列表问题
-
发送 GetLocalListVersion.req
-
检查返回的版本号
-
与预期版本比较
-
如果版本过旧,安排更新
-
如果版本正常,检查其他原因
-
记录排查过程
六、最佳实践
6.1 查询策略
**•**按需查询**:只在需要时查询版本
**•**定期验证**:定期验证版本一致性
**•**更新前查询**:SendLocalList前先查询
**•**避免频繁**:不要过于频繁查询
6.2 版本管理
**•**严格递增**:确保版本号严格递增
**•**中央维护**:中央系统维护目标版本
**•**冲突检测**:及时检测版本冲突
**•**合并策略**:制定版本合并策略
6.3 同步优化
**•**增量更新**:优先使用Differential更新
**•**批量更新**:合并多个更新为一次
**•**智能同步**:只在需要时同步
**•**缓存版本**:缓存已知版本减少查询
6.4 错误处理
**•**重试机制**:查询失败时重试
**•**超时处理**:设置合理超时
**•**日志记录**:记录所有查询和结果
**•**告警机制**:版本异常时告警
6.5 性能优化
**•**批量查询**:批量查询多个充电桩
**•**异步处理**:异步处理查询请求
**•**结果缓存**:缓存查询结果
**•**连接复用**:复用网络连接
七、常见问题
Q1: 为什么要查询版本号?
A:
- 判断是否需要更新本地列表
- 检测版本冲突
- 确保中央系统与充电桩同步
- 避免不必要的更新
Q2: 版本号从多少开始?
A:
- 从0开始,表示空列表
- 第一次更新后变为1
- 每次更新递增1
- 必须是连续的非负整数
Q3: 版本号不一致怎么办?
A:
- 检测版本冲突
- 获取充电桩当前列表
- 合并更改
- 生成新版本号
- 重新发送SendLocalList
Q4: 可以跳过版本号吗?
A:
- 不可以,版本号必须连续递增
- 不能跳跃(如从3直接到5)
- 每次更新只能递增1
- 确保版本管理的严谨性
Q5: GetLocalListVersion会影响性能吗?
A:
- 指令很简单,影响很小
- 但不要过于频繁调用
- 定期查询即可
- 可以批量查询减少开销
八、总结
GetLocalListVersion是OCPP 1.6协议中实现本地列表版本管理的简单但重要的指令。正确实现GetLocalListVersion指令需要注意:
-
**版本查询**:准确返回当前版本号
-
**版本管理**:确保版本号严格递增
-
**冲突检测**:及时检测版本冲突
-
**同步优化**:优化同步策略,减少不必要更新
-
**性能考虑**:合理控制查询频率
-
**错误处理**:妥善处理查询失败情况
通过合理实现GetLocalListVersion指令,可以有效管理本地授权列表的版本,确保中央系统与充电桩的列表同步,提高系统的可靠性和一致性。
相关阅读:
- OCPP1.6协议字段解析 - ChangeAvailability 平台控制充电桩或指定枪口的可用状态-CSDN博客
- OCPP 1.6 协议详解:BootNotification 启动通知指令-CSDN博客
- 深度解析 OCPP 协议 Uplink 命令处理器:OcppUplinkCmdExe 继承类设计与实践-CSDN博客
参考文档:
END
如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关开发问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟