OCPP 1.6 协议详解:StatusNotification 状态通知指令

OCPP 1.6 协议详解:StatusNotification 状态通知指令

实时监控充电桩状态的核心机制


一、指令概述

StatusNotification(状态通知)是OCPP 1.6协议中用于向中央系统报告充电桩或连接器状态变化的重要指令。通过此指令,中央系统可以实时了解充电桩的运行状态、故障信息和可用性情况。

1.1 指令作用

  • **状态监控**:实时报告充电桩和连接器的状态变化
  • **故障告警**:及时上报故障信息,便于快速响应
  • **可用性管理**:告知中央系统充电桩是否可用
  • **运维支持**:为远程运维和故障诊断提供数据支持

1.2 触发时机

  • 充电桩或连接器状态发生变化时
  • 检测到错误或故障时
  • 充电桩启动或重启后
  • 网络恢复后重新连接时
  • 收到TriggerMessage请求时

二、指令详解

2.1 StatusNotification.req(请求)

充电桩向中央系统发送的状态通知请求,包含以下字段:

字段 说明
connectorId 0:表示充电桩主控制器; >0:表示具体充电连接器(如 1、2、3...);
status 连接器当前状态ConnectorId=0 仅支持以下三种:- Available(可用)- Unavailable(不可用)- Faulted(故障)
errorCode 故障错误代码(状态为 Faulted 时使用)
timestamp 状态发生的日期时间,格式为 ISO 8601若省略,默认使用消息接收时间
info 与错误 / 状态相关的附加描述信息,自由文本格式

JSON示例:

javascript 复制代码
[
  2,
  "12345",
  "StatusNotification",
  {
    "connectorId": 1,
    "errorCode": "NoError",
    "status": "Charging",
    "timestamp": "2024-01-15T10:30:00Z",
    "info": ""
  }
]

2.2 StatusNotification.conf(响应)

中央系统对状态通知的响应,不包含任何字段

JSON示例:

javascript 复制代码
[
  3,
  "12345",
  {}
]

三、工作流程

3.1 状态变化通知流程

3.2 时序图

3.3 状态转换矩阵

OCPP 1.6定义了详细的状态转换规则:

当前状态 可转换到的状态
Available Preparing、Charging、SuspendedEV、SuspendedEVSE、Reserved、Unavailable、Faulted
Preparing Available、Charging、SuspendedEV、SuspendedEVSE、Finishing、Faulted
Charging Available、SuspendedEV、SuspendedEVSE、Finishing、Unavailable、Faulted

各状态详解:

从 Available 可以转换到:

  • Preparing(用户开始使用)
  • Charging(直接开始充电,无需授权)
  • SuspendedEV(类似Preparing但EV不充电)
  • SuspendedEVSE(类似Preparing但EVSE不允许充电)
  • Reserved(收到ReserveNow命令)
  • Unavailable(收到ChangeAvailability命令)
  • Faulted(检测到故障)

从 Preparing 可以转换到:

  • Available(用户取消操作)
  • Charging(开始充电)
  • SuspendedEV(EV不充电)
  • SuspendedEVSE(EVSE不允许充电)
  • Finishing(超时未完成)
  • Faulted(检测到故障)

从 Charging 可以转换到:

  • Available(充电结束,无需用户操作)
  • SuspendedEV(EV暂停充电)
  • SuspendedEVSE(EVSE暂停供电)
  • Finishing(用户停止充电)
  • Unavailable(计划变为不可用)
  • Faulted(检测到故障)

四、重要注意事项

4.1 ConnectorId 0的特殊性

ConnectorId 0代表充电桩主控制器,只能报告以下状态:

  • Available(可用)
  • Unavailable(不可用)
  • Faulted(故障)

ConnectorId > 0可以报告所有9种状态。

4.2 最小状态持续时间

配置键: `MinimumStatusDuration`

  • 定义状态稳定的最小持续时间
  • 短于此时间的状态变化可以不发送通知
  • 用于减少频繁状态切换导致的消息风暴

注意:

  • 设置为0不会覆盖制造商的默认最小持续时间
  • 设置过高可能导致所有状态通知延迟

4.3 错误处理优先级

EVCommunicationError的特殊处理:

  • 只能与Preparing、SuspendedEV、SuspendedEVSE、Finishing状态一起使用
  • 应视为警告,而非真正错误
  • 充电桩不应进入Faulted状态
  • 应进入SuspendedEVSE状态

4.4 离线行为

离线期间的状态变化:

  1. 只发送当前状态的通知
  2. 可以报告离线期间发生的错误
  3. 不应发送历史状态变化事件
  4. 必须按事件发生顺序发送

网络恢复后:

4.5 状态持久化

Unavailable状态的持久性:

  • 通过ChangeAvailability命令设置的Unavailable状态必须在重启后保持
  • 充电桩可以使用Unavailable状态用于其他内部目的
  • 固件更新期间
  • 等待初始Accepted注册状态期间

4.6 Occupied状态的拆分

OCPP 1.6的重要变化:

OCPP 1.5中的Occupied状态在1.6中被拆分为5个更详细的状态:

  • Preparing
  • Charging
  • SuspendedEV
  • SuspendedEVSE
  • Finishing

好处:

  • 提供更详细的状态信息
  • 便于中央系统精确监控
  • 改善用户体验

影响:

  • 会发送更多的StatusNotification消息
  • 可以通过MinimumStatusDuration优化

五、实际应用场景

5.1 场景一:正常充电流程状态变化

  1. Available → Preparing(用户刷卡)

  2. Preparing → Charging(插枪,开始充电)

  3. Charging → SuspendedEV(EV电池满,暂停取电)

  4. SuspendedEV → Charging(EV继续取电)

  5. Charging → Finishing(用户刷卡停止)

  6. Finishing → Available(用户拔枪离开)

5.2 场景二:智能充电场景

  1. Charging(正常充电)

  2. Charging → SuspendedEVSE(电网负荷高,智能充电限制)

  3. SuspendedEVSE → Charging(电网负荷降低,恢复充电)

  4. Charging → Finishing(充电完成)

5.3 场景三:故障处理

  1. Charging(正常充电)

  2. Charging → Faulted(检测到过流故障)

  3. 运维人员远程诊断

  4. 故障排除

  5. Faulted → Available(恢复正常)

5.4 场景四:预约充电

  1. Available → Reserved(中央系统发送ReserveNow)

  2. Reserved → Preparing(预约用户到达刷卡)

  3. Preparing → Charging(开始充电)

  4. Charging → Finishing → Available(充电完成)

5.5 场景五:远程设置为不可用

  1. Available(正常使用)

  2. 中央系统发送ChangeAvailability

  3. Available → Unavailable( scheduled,当前有交易)

  4. 交易结束

  5. Unavailable(生效)

  6. 运维完成后,中央系统再次发送ChangeAvailability

  7. Unavailable → Available(恢复可用)

5.6 场景六:离线状态同步

  1. 充电桩离线

  2. 离线期间:Charging → Finishing → Available

  3. 网络恢复

  4. 发送BootNotification

  5. 发送StatusNotification(当前状态:Available)

  6. 中央系统更新状态

六、最佳实践

6.1 状态报告策略

  • **及时性**:状态变化后尽快报告
  • **准确性**:确保报告的状态准确反映实际情况
  • **完整性**:报告所有必要的状态信息
  • **优化性**:合理使用MinimumStatusDuration减少冗余消息

6.2 错误处理

  • **详细记录**:在info字段提供详细的错误描述
  • **分级处理**:区分错误和警告
  • **自动恢复**:实现自动故障恢复机制
  • **远程支持**:支持远程故障诊断

6.3 性能优化

  • **消息去重**:避免重复发送相同状态
  • **批量处理**:合理批量处理状态变化
  • **超时设置**:设置合理的响应超时时间
  • **重试机制**:实现可靠的重试机制

6.4 用户体验

  • **状态显示**:在充电桩显示屏上清晰显示当前状态
  • **错误提示**:提供友好的错误提示信息
  • **多语言支持**:支持多种语言的错误提示
  • **帮助信息**:提供故障处理和联系信息

七、常见问题

Q1: 什么时候需要发送StatusNotification?

A:

  • 充电桩或连接器状态发生变化时
  • 检测到错误或故障时
  • 充电桩启动或重启后(如果状态变化)
  • 网络恢复后(报告当前状态)
  • 收到TriggerMessage请求时

Q2: ConnectorId 0和ConnectorId > 0有什么区别?

A:

  • ConnectorId 0代表充电桩主控制器,只能报告Available、Unavailable、Faulted三种状态
  • ConnectorId > 0代表具体连接器,可以报告所有9种状态

Q3: 如何处理频繁的状态变化?

A:

  • 使用MinimumStatusDuration配置键
  • 设置合理的最小持续时间
  • 短于此时间的状态变化可以不发送通知
  • 但要注意不要设置过大导致状态更新延迟

Q4: EVCommunicationError是什么?

A:

  • 表示与电动汽车的通信失败
  • 可能是Mode 3或其他通信协议问题
  • 应视为警告而非真正错误
  • 充电桩应进入SuspendedEVSE状态而非Faulted

Q5: 离线期间如何处理状态通知?

A:

  • 只记录当前状态
  • 网络恢复后发送当前状态的通知
  • 可以报告离线期间发生的错误
  • 不应发送历史状态变化事件
  • 必须按事件发生顺序发送

八、总结

StatusNotification是OCPP 1.6协议中实现充电桩实时监控的核心指令。正确实现StatusNotification指令需要注意:

  1. **状态准确**:确保报告的状态准确反映实际情况
  2. **及时上报**:状态变化后尽快发送通知
  3. **错误分级**:正确区分错误和警告
  4. **优化策略**:合理使用MinimumStatusDuration减少冗余消息
  5. **离线处理**:正确处理离线期间的状态同步
  6. **用户体验**:提供清晰的状态显示和错误提示

通过合理实现StatusNotification指令,可以实现对充电桩的实时监控和快速故障响应,提高运维效率和用户满意度。


相关阅读:

参考文档:


END

如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关开发问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟

相关推荐
希望永不加班2 小时前
Spring AOP 代理模式:CGLIB 与 JDK 动态代理区别
java·开发语言·后端·spring·代理模式
RNEA ESIO2 小时前
PHP进阶-在Ubuntu上搭建LAMP环境教程
开发语言·ubuntu·php
23471021272 小时前
4.15 学习笔记
开发语言·软件测试·python
eggwyw2 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
qq_372154232 小时前
SQL嵌套查询中常见报错排查_语法与权限处理
jvm·数据库·python
0xDevNull2 小时前
MySQL 别名(Alias)指南:从入门到避坑
java·数据库·sql
lv__pf2 小时前
springboot原理
java·spring boot·后端
java1234_小锋2 小时前
Java高频面试题:什么是可重入锁?
java·开发语言
2401_887724503 小时前
CSS如何设置文字溢出显示省略号_利用text-overflowellipsis
jvm·数据库·python