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

发送方向: 充电站 → 服务端。

指令用途: 设备启动后上报启动原因和 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"
  }
]