目录
4.3、DataTransfer-概述
DataTransfer 消息
数据传输请求(DataTransfer Request)
数据传输响应(DataTransfer Response)
使用场景
示例
DataTransfer 请求示例
处理 DataTransfer 响应
示例代码
可能的错误处理
总结
4.3、DataTransfer-原文译文
4.3、DataTransfer-概述
OCPP 1.6 协议的第 4.3 章 "Data Transfer" 主要讲述了充电站(Charge Point)与中央系统(Central System)之间如何使用 DataTransfer
消息进行数据传输。这个消息功能提供了一种灵活的方式,用于传输特定于供应商的或者协议之外的额外数据。
DataTransfer 消息
DataTransfer
消息主要用于两种场景:
-
当需要传输供应商特定的扩展数据或自定义数据时。
-
当充电站和中央系统需要传输标准OCPP消息不支持的数据时。
数据传输请求(DataTransfer Request)
充电站或中央系统可以发送 DataTransfer
请求消息。消息结构如下:
{ "vendorId": "string", "messageId": "string", "data": "object" }
-
vendorId
: 这是一个必需字段,表示供应商的唯一标识符(ID)。 -
messageId
: 可选字段,用于标识特定消息的ID。允许供应商定义消息类型。 -
data
: 可选字段,包含与请求相关的任意数据,数据类型通常是JSON对象。
数据传输响应(DataTransfer Response)
接收方在处理 DataTransfer
请求后,将发送一个响应消息。响应结构如下:
{ "status": "Accepted" | "Rejected" | "UnknownMessageId" | "UnknownVendorId", "data": "object" }
-
status
: 表示请求的处理状态,可能的值包括:-
Accepted
: 表示请求成功处理。 -
Rejected
: 表示请求已被拒绝。 -
UnknownMessageId
: 表示无法识别的messageId
。 -
UnknownVendorId
: 表示无法识别的vendorId
。
-
-
data
: 可选字段,包含任何响应相关的数据,通常是 JSON 格式。
使用场景
-
供应商特定数据
假设你有一个充电站制造商实现了额外的功能,并且需要传输这些功能的相关数据。可以使用 DataTransfer
消息去传输这些特定于供应商扩展的数据。
-
自定义命令和控制
如果需要在充电站与中央系统之间发送自定义的命令和控制信息,可以使用这个消息传输机制。例如,远程诊断信息、调试数据、特定配置信息等。
示例
以下是一个简单的实例,展示了如何从充电站向中央系统发送 DataTransfer
请求,并处理相应的响应。
DataTransfer 请求示例
{ "vendorId": "MyVendor", "messageId": "CustomCommand", "data": { "key": "value", "anotherKey": "anotherValue" } }
处理 DataTransfer 响应
假设响应如下:
{ "status": "Accepted", "data": { "responseKey": "responseValue" } }
示例代码
以下是示例代码,展示了如何发送和处理 DataTransfer 消息。
// 构建 DataTransfer 请求 const dataTransferRequest = { vendorId: "MyVendor", messageId: "CustomCommand", data: { key: "value", anotherKey: "anotherValue" } }; // 假设 WebSocket 已连接到中央系统 webSocket.send(JSON.stringify({ action: "DataTransfer", payload: dataTransferRequest })); // 处理 DataTransfer 响应 webSocket.onmessage = (event) => { const response = JSON.parse(event.data); if (response.action === "DataTransfer") { const { status, data } = response.payload; if (status === "Accepted") { console.log("DataTransfer Accepted. Response data: ", data); } else if (status === "Rejected") { console.error("DataTransfer Rejected."); } else if (status === "UnknownMessageId") { console.error("DataTransfer: Unknown Message ID."); } else if (status === "UnknownVendorId") { console.error("DataTransfer: Unknown Vendor ID."); } } };
可能的错误处理
在处理 DataTransfer
消息时,你需要考虑以下错误状态,并根据需要采取适当的操作:
-
Rejected: 请求被中央系统拒绝。可能需要记录日志,或者进一步调查原因。
-
UnknownMessageId: 中央系统无法识别发送的
messageId
。可能需要检查消息ID是否正确。 -
UnknownVendorId: 中央系统无法识别发送的
vendorId
。可能需要确保供应商ID在中央系统中已注册和配置。
总结
OCPP 1.6 协议的 4.3 章 "Data Transfer" 提供了一种灵活的机制,用于传输特定于供应商的或协议之外的额外数据。这种机制允许充电站和中央系统之间进行扩展的通信,支持自定义命令、控制信息和供应商特定数据的传输。通过 DataTransfer
消息,可以增强 OCPP 协议的可扩展性和灵活性,满足各种定制化需求。
4.3、DataTransfer-原文译文
如果充电桩需要向中央系统发送 OCPP 不支持的功能信息,则应使用 DataTransfer.req PDU。
请求中的vendorId应该为中央系统所知并唯一标识供应商特定的实现。 VendorId 应是来自反向 DNS 命名空间的值,其中名称的顶层在反向时应对应于供应商组织公开注册的主 DNS 名称。
可选地,请求 PDU 中的 messageId 可用于指示特定消息或实现。
请求和响应 PDU 中的数据长度均未定义,应得到所有相关方的同意。
如果请求的接收者没有特定vendorId的实现,则它应返回状态“UnknownVendor”并且数据元素不应存在。如果 messageId 不匹配(如果使用),接收者应返回状态“UnknownMessageId”。在所有其他情况下,状态“Accepted”或“Rejected”的使用以及数据元素是相关各方之间特定于供应商的协议的一部分。