OCPP BootNotification、Heartbeat、StartTransaction 调试示例

这三类报文分别用于设备注册、心跳和启动交易。下面的 JSON 使用虚构测试值,可用来对照模拟器与服务端日志,不应原样重放到生产平台。

打开 OCPP 1.6 模拟器 · 先看完整测试步骤

先看消息结构

OCPP 1.6J 使用 JSON 数组。请求 CALL 为 [2, "消息ID", "动作名", {请求负载}],成功处理的响应 CALLRESULT 为 [3, "同一消息ID", {响应负载}]。CALLERROR 则使用 [4, "同一消息ID", "错误码", "错误说明", {详情}]。

示例中的固定消息 ID 方便阅读,模拟器实际会生成新的 ID。响应必须匹配请求 ID。下面时间仅用于说明格式,实际请求应使用当前 UTC 时间。

1. BootNotification:设备注册

点击 Connect 后工具自动发送,厂商和型号取自“连接设置”。以下仅展示核心字段,实际日志可能还包含其他设备信息。

[2,"boot-001","BootNotification",{"chargePointVendor":"devTest","chargePointModel":"Virtual-CP16"}]

服务端接受注册的响应示例:

[3,"boot-001",{"status":"Accepted","currentTime":"2026-11-02T12:00:00Z","interval":60}]

检查 status,而不是只看 WebSocket 是否已连接。interval 是服务端给出的心跳间隔,单位秒。当前工具收到非 Accepted 响应会断开;若是 Pending,应结合服务端注册流程处理,不能当作注册成功。

2. Heartbeat:确认服务端仍然响应

等注册完成,再点击 Heartbeat:

[2,"heartbeat-001","Heartbeat",{}]

响应示例:

[3,"heartbeat-001",{"currentTime":"2026-11-02T12:01:00Z"}]

注意请求负载是空对象。排错时先手动发送一次,确认两端日志能对应,再观察自动心跳。

3. StartTransaction:启动测试交易

先将 RFID Tag 设置为 DEADBEEF,点击 Authorize,检查 idTagInfo.status 为 Accepted,然后点击 Start Transaction。当前按钮默认使用 1 号枪。

[2,"start-001","StartTransaction",{"connectorId":1,"idTag":"DEADBEEF","meterStart":0,"timestamp":"2026-11-02T12:02:00Z"}]

响应示例:

[3,"start-001",{"transactionId":1001,"idTagInfo":{"status":"Accepted"}}]

transactionId 由服务端分配,不要把示例的 1001 当作自己平台的真实交易号。meterStart 表示交易开始的电表累计值,单位 Wh;本例 0 是测试读数。若工具发送了 reservationId,确认它对应有效预约;没有预约时可以在连接设置中留空。

4. 收尾与判断

点击 Stop Transaction 后,确认请求带回本次服务端分配的 transactionId,并在后台看到交易结束。检查开始、结束读数与服务端记录是否一致。

逐条发送并等待回复。当前模拟器按最近一次操作处理响应,不适合并发多条请求的压力测试。交易状态标签也不能替代 idTagInfo.status 的核对。

常见问题

  • 注册成功但交易被拒绝:检查卡号是否登记、有效期、桩和卡的授权范围。
  • 有 CALLRESULT 但没有成功:CALLRESULT 表示请求已被处理;业务是否接受仍需检查 status 或 idTagInfo。
  • 收到 CALLERROR:对照错误码检查动作名、字段类型和必填项,不要把它当作网络断开。
  • 心跳有响应但页面状态不对:停止连续点击,逐条核对消息 ID 和服务端日志。

协议资料:OCA 的 OCPP 介绍与规范入口、OCPP-J 1.6 传输规范。实现细节以你的服务端和对应版本规范为准。

返回模拟器加载示例 · WebSocket 连接失败排查 · 视频教程