OCPP 2.0 指令用途与请求响应报文示例
本页包含 18 个指令,展示发送方向、用途及可对照调试的完整 JSON 帧。示例按 OCPP 2.0 的请求与响应结构填写。
版本提示:本页采用 OCPP 2.0(2018)结构,不是 OCPP 2.0.1。 例如交易事件使用 transactionData.id,可用性请求使用 evseId,请与服务端协议版本保持一致。
报文格式与使用方法
- 请求 CALL:
[2, "唯一消息ID", "指令名", {请求负载}]。 - 成功响应 CALLRESULT:
[3, "相同消息ID", {响应负载}];响应不重复指令名。 - 协议错误 CALLERROR:
[4, "相同消息ID", "错误码", "错误说明", {}]。 - 每次请求使用新的消息 ID;响应必须沿用对应请求 ID。文中的时间、设备编号、卡号和交易编号均为示例,实际调试时替换。
{}也是有效负载,不能省略。Accepted通常表示请求受理,实际交易或设备状态还需结合后续通知判断。
指令目录
- BootNotification
- Heartbeat
- Authorize
- StatusNotification
- TransactionEvent
- MeterValues
- RequestStartTransaction
- RequestStopTransaction
- ChangeAvailability
- UnlockConnector
- Reset
- FirmwareStatusNotification
- LogStatusNotification
- ClearedChargingLimit
- NotifyChargingLimit
- NotifyEVChargingSchedule
- DataTransfer
- TriggerMessage
BootNotification
发送方向: 充电站 → 服务端。
指令用途: 设备启动后上报启动原因和 chargingStation 信息。Accepted 后按 interval(秒)发送心跳。
请求:
[
2,
"ocpp20-001",
"BootNotification",
{
"reason": "PowerUp",
"chargingStation": {
"vendorName": "devTest",
"model": "QA",
"firmwareVersion": "1.0"
}
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-001",
{
"status": "Accepted",
"currentTime": "2026-11-08T08:00:00Z",
"interval": 60
}
]
Heartbeat
发送方向: 充电站 → 服务端。
指令用途: 心跳保活并获取服务端当前时间。请求负载为空对象,响应中的 currentTime 用于校时。
请求:
[
2,
"ocpp20-002",
"Heartbeat",
{}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-002",
{
"currentTime": "2026-11-08T08:00:00Z"
}
]
Authorize
发送方向: 充电站 → 服务端。
指令用途: 用带类型的 idToken 请求授权。检查响应 idTokenInfo.status,只有允许的状态才能继续相应授权流程。
请求:
[
2,
"ocpp20-003",
"Authorize",
{
"idToken": {
"idToken": "QA-TAG",
"type": "Central"
},
"evseId": [
1
]
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-003",
{
"idTokenInfo": {
"status": "Accepted"
}
}
]
StatusNotification
发送方向: 充电站 → 服务端。
指令用途: 上报 EVSE 与连接器状态。此版本使用 connectorStatus,而非 1.6 的 status/errorCode。
请求:
[
2,
"ocpp20-004",
"StatusNotification",
{
"timestamp": "2026-11-08T08:00:00Z",
"connectorStatus": "Available",
"evseId": 1,
"connectorId": 1
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-004",
{}
]
TransactionEvent
发送方向: 充电站 → 服务端。
指令用途: 上报交易生命周期。Started、Updated、Ended 分别表示开始、更新、结束;同一交易沿用 transactionData.id,seqNo 从 0 递增。本例展示开始事件。
请求:
[
2,
"ocpp20-005",
"TransactionEvent",
{
"eventType": "Started",
"timestamp": "2026-11-08T08:00:00Z",
"triggerReason": "Authorized",
"seqNo": 0,
"transactionData": {
"id": "TX-001"
},
"evse": {
"id": 1,
"connectorId": 1
},
"idToken": {
"idToken": "QA-TAG",
"type": "Central"
},
"meterValue": [
{
"timestamp": "2026-11-08T08:00:00Z",
"sampledValue": [
{
"value": 1000,
"measurand": "Energy.Active.Import.Register",
"unitOfMeasure": {
"unit": "Wh"
}
}
]
}
]
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-005",
{
"idTokenInfo": {
"status": "Accepted"
}
}
]
结束同一交易的请求示例(沿用交易 ID,增加 seqNo;响应仍与本次消息 ID 对应):
[
2,
"ocpp20-ended",
"TransactionEvent",
{
"eventType": "Ended",
"timestamp": "2026-11-08T08:10:00Z",
"triggerReason": "StopAuthorized",
"seqNo": 1,
"transactionData": {
"id": "TX-001",
"stoppedReason": "Local"
}
}
]
[
3,
"ocpp20-ended",
{
"idTokenInfo": {
"status": "Accepted"
}
}
]
MeterValues
发送方向: 充电站 → 服务端。
指令用途: 按 EVSE 上报计量采样。value 是数值,unitOfMeasure 描述单位;交易相关数据也可随 TransactionEvent 上报。
请求:
[
2,
"ocpp20-006",
"MeterValues",
{
"evseId": 1,
"meterValue": [
{
"timestamp": "2026-11-08T08:00:00Z",
"sampledValue": [
{
"value": 1000,
"measurand": "Energy.Active.Import.Register",
"unitOfMeasure": {
"unit": "Wh"
}
}
]
}
]
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-006",
{}
]
RequestStartTransaction
发送方向: 服务端 → 充电站。
指令用途: 服务端请求开始交易。remoteStartId 关联远程启动请求;Accepted 后继续核对 TransactionEvent 的 Started 事件及 remoteStartId。
请求:
[
2,
"ocpp20-007",
"RequestStartTransaction",
{
"evseId": 1,
"remoteStartId": 7,
"idToken": {
"idToken": "QA-TAG",
"type": "Central"
}
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-007",
{
"status": "Accepted"
}
]
RequestStopTransaction
发送方向: 服务端 → 充电站。
指令用途: 服务端请求停止指定字符串 transactionId 的交易。Accepted 后仍需核对 TransactionEvent 的 Ended 事件。
请求:
[
2,
"ocpp20-008",
"RequestStopTransaction",
{
"transactionId": "TX-001"
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-008",
{
"status": "Accepted"
}
]
ChangeAvailability
发送方向: 服务端 → 充电站。
指令用途: 设置 EVSE 的运行可用性。本例将 EVSE 1 设为 Inoperative,设备随后通过状态消息反映变化。
请求:
[
2,
"ocpp20-009",
"ChangeAvailability",
{
"evseId": 1,
"operationalStatus": "Inoperative"
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-009",
{
"status": "Accepted"
}
]
UnlockConnector
发送方向: 服务端 → 充电站。
指令用途: 请求解锁指定 EVSE 下的连接器。用 evseId 与 connectorId 共同定位目标。
请求:
[
2,
"ocpp20-010",
"UnlockConnector",
{
"evseId": 1,
"connectorId": 1
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-010",
{
"status": "Unlocked"
}
]
Reset
发送方向: 服务端 → 充电站。
指令用途: 请求重启设备。本例 Immediate 表示立即重启;Accepted 仅表示受理,还需观察断连和重新注册。
请求:
[
2,
"ocpp20-011",
"Reset",
{
"type": "Immediate"
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-011",
{
"status": "Accepted"
}
]
FirmwareStatusNotification
发送方向: 充电站 → 服务端。
指令用途: 上报固件更新进度。Installed 表示固件已安装,requestId 关联对应更新任务。
请求:
[
2,
"ocpp20-012",
"FirmwareStatusNotification",
{
"status": "Installed",
"requestId": 1
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-012",
{}
]
LogStatusNotification
发送方向: 充电站 → 服务端。
指令用途: 上报日志上传进度。本例 Uploaded 表示上传完成,也可以在上传时发送 Uploading;requestId 关联日志任务。
请求:
[
2,
"ocpp20-013",
"LogStatusNotification",
{
"status": "Uploaded",
"requestId": 1
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-013",
{}
]
ClearedChargingLimit
发送方向: 充电站 → 服务端。
指令用途: 通知服务端某来源的充电限制已清除。evseId 指明影响范围,chargingLimitSource 指明原限制来源。
请求:
[
2,
"ocpp20-014",
"ClearedChargingLimit",
{
"chargingLimitSource": "Other",
"evseId": 1
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-014",
{}
]
NotifyChargingLimit
发送方向: 充电站 → 服务端。
指令用途: 通知当前生效的外部充电限制。本例来源为系统运营方 SO,计划从第 0 秒起限制电流为 10 A。
请求:
[
2,
"ocpp20-015",
"NotifyChargingLimit",
{
"evseId": 1,
"chargingLimit": {
"chargingLimitSource": "SO",
"isGridCritical": false
},
"chargingSchedule": [
{
"chargingRateUnit": "A",
"chargingSchedulePeriod": [
{
"startPeriod": 0,
"limit": 10
}
]
}
]
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-015",
{}
]
NotifyEVChargingSchedule
发送方向: 充电站 → 服务端。
指令用途: 上报车辆充电计划。timeBase 是计划的时间基准,startPeriod 表示相对起始秒数,本例电流限制为 10 A。
请求:
[
2,
"ocpp20-016",
"NotifyEVChargingSchedule",
{
"evseId": 1,
"timeBase": "2026-11-08T08:00:00Z",
"chargingSchedule": {
"chargingRateUnit": "A",
"chargingSchedulePeriod": [
{
"startPeriod": 0,
"limit": 10
}
]
}
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-016",
{
"status": "Accepted"
}
]
DataTransfer
发送方向: 双向(本例:充电站 → 服务端)。
指令用途: 传输厂商自定义数据。vendorId 标识厂商,messageId 标识业务类型;Accepted 仅表示该扩展请求已被接受。
请求:
[
2,
"ocpp20-017",
"DataTransfer",
{
"vendorId": "devTest",
"messageId": "GetChargeInstruction",
"data": ""
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-017",
{
"status": "Accepted"
}
]
TriggerMessage
发送方向: 服务端 → 充电站。
指令用途: 要求设备主动补发指定消息。本例触发 Heartbeat;Accepted 后还应收到设备独立发起的 Heartbeat CALL。
请求:
[
2,
"ocpp20-018",
"TriggerMessage",
{
"requestedMessage": "Heartbeat"
}
]
响应(由接收请求的一方返回):
[
3,
"ocpp20-018",
{
"status": "Accepted"
}
]