Skip to content

扫码充设备私有通信协议 V2.10 ​

当前版本:V2.10 上一版本:私有协议 V2.0.8 发布日期:2026-09-21。协议文档发布不代表现有固件已全部实现。 改动字段以粗体标注;未涉及内容保留2.0.8定义。

1 协议基础 ​

1.1 通信链路 ​

设备先连接注册平台并发送注册登录报文,并使用注册平台下发的 chargerKey 做 AES-128-CBC/PKCS7 加解密,IV 为 16 字节全 0。本文所有业务报文均指解密后的明文协议文本。

1.2 数据结构 ​

起始标志指令类型指令序号消息体
#数字、短指令或语义化指令idx使用逗号分隔的字段列表

示例数据:#<指令类型>,<指令序号>,<消息体>

  1. 指令以 # 开头,字段以英文逗号 , 分隔。
  2. 私有协议设备上行指令序号不持久化,每次启动从 0 开始,超过 999 后归 0。
  3. 端口号 chn 从 1 开始。
  4. 金额单位为分,电量单位为 Wh,充电运行时长按字段说明使用秒或分钟。
  5. 组网寻址字段统一称“设备MAC”:字符串0表示本网关自身,12位大写十六进制字符串表示从机MAC,不带冒号。旧非组网设备保持原报文及行为;非零历史数字设备号不自动解释为MAC。
  6. orderId 扩展以当前代码字段位置为准;#1 启充缺失或传 0 时设备生成 D 前缀订单号,#2 缺失或传 0 时表示不做订单校验。

1.3 V2.10组网扩展与兼容规则 ​

  • MQTT连接身份属于网关;设备MAC选择实际设备,端口号仍为该设备自己的端口。未知MAC不得回退控制本机。
  • #1/#2/#3及#A下行复用第3字段;#4下行新增第3字段,缺失时仍查询本机。#REGISTER响应中的同名字段本版仍只使用0,不代理从机注册。
  • 组网#1/#2/#3/#4/#5上行在原字段末尾追加设备MAC;原订单号位置不变。有订单字段的组网报文不能省略该位置,无订单填0。旧设备保持原长度。
  • #5上行第3字段继续固定0,不用它传设备MAC;新增设备MAC在第17字段。#5确认保留可选订单号的历史第5位置,组网确认固定为6字段:#5,序号,结果,端口,订单编号,设备MAC。无订单填0,不把MAC塞入订单号位置。
  • 网关自身#0保持原格式;从机#0以该从机端口摘要单独上报,末尾追加设备MAC。CSQ/RSRP表示网关蜂窝信号,不表示从机无线信号;不可达从机不重复上报旧测量伪装新心跳,后台按该从机最后有效状态时间判断。
  • #0/#4根据端口数量解析摘要,再判断设备MAC尾字段。摘要仍为原6项或9项,不把设备MAC算作端口摘要。
  • #A只设置对应设备的业务绑定状态,不创建或修改网关—从机组网关系。#A响应追加设备MAC,保留原响应序号规则。
  • #DROP、#B、远程升级及第7章设备级配置不自动获得从机路由能力,本版保持网关自身作用域;订单的阶梯费率沿用完整#1,不另造费率报文。
  • 保留各命令既有返回码。组网#1/#2/#3/#4新增结果3=执行结果未知;#2原结果2=订单不匹配保持不变。未知响应保持该命令的组网回包结构,无法确认的业务值用NA,不填虚假0;#4未知示例为#4,序号,3,0,设备MAC(无有效端口摘要)。
  • NA仅用于明确无有效值的字段,订单标识无值用0;不表示已具备计量能力。#0成功业务数据不得以NA或补零冒充正常采样。
  • 手动结束补报原因暂定7,需后台确认枚举未占用。#2和对应#5指向同一次结束,不能重复结算。
  • 协议采用版本/设备能力区分旧格式与组网格式,不按末字段“像不像MAC”猜测,订单号也可能是12位十六进制。

2 注册与绑定 ​

2.1 注册平台阶段 ​

私有协议与开放协议共用注册平台阶段。设备登录 #LOGIN、注册平台响应 #LOGIN、业务参数下发 #LOGIN-RETURN、设备保存结果 #LOGIN-RETURN 的字段定义见 注册平台。

私有协议业务链路仅在 productCategory != 5 时启用;业务链路建立后,从下方 #REGISTER 开始进入私有协议业务指令。


2.2 业务注册 #REGISTER ​

设备 → 业务平台:业务 MQTT 就绪后,设备发送一次业务注册报文。

示例报文:#REGISTER,1,123456789012345,864710071234567,460047661234567,89860846123456789000,0.0.5,1,12,1,10,10,16800,16800,900,4

序号字段名类型示例值说明
1指令类型String#REGISTER固定为 #REGISTER;业务注册指令
2指令序号Number1取值 0~999;设备生成的私有协议序号
3充电桩注册码String123456789012345长度 15 字节;优先使用桩编号,无桩编号时使用 IMEI,不足补 0,超长截取
4IMEIString864710071234567长度 15 字节;设备 IMEI
5IMSIString460047661234567长度 15 字节;SIM 卡 IMSI
6ICCIDString89860846123456789000长度 20 字节;SIM 卡 ICCID
7固件版本String0.0.5固件版本,唯一事实来源为项目入口常量封装
8注册类型Number1固定为 1;充电桩类型,当前固定为电动自行车充电桩
9端口数量Number121~项目端口数;设备端口数量
10充满自停开关Number1取值 0 或 1;充满自停开关
11充满功率阈值Number10取值 >=0;充满自停功率阈值,单位 W
12充满自停延时Number10取值 >=0;充满自停延时,单位分钟;核心层换算为秒
13单端口过载阈值Number16800取值 >0;单端口过载阈值,单位 W
14整桩过载阈值Number16800取值 >0;私有协议当前整桩阈值使用同一过载值
15最长充电时间Number900取值 >0;最长充电时间,单位分钟
16心跳间隔Number2固定为 2;注册报文心跳间隔字段固定为 2 分钟

费率配置摘要 rateHash 用于确认设备实际保存内容是否与平台期望一致。费率模型编号已取消,不作为注册、启充、查询或费率同步的必需参数。

业务平台 → 设备:平台回复注册应答,固件读取设备就绪状态更新显示。

示例报文:#REGISTER,1,0,1,1,0

序号字段名类型示例值说明
1指令类型String#REGISTER固定为 #REGISTER;业务注册状态指令
2指令序号Number1取值 0~999;平台回传序号
3设备MACString0保留历史0;本版注册响应仅作用于网关自身
4端口号Number1历史保留;当前固件不读取
5设备就绪状态Number1取值 0 或 1;0 未就绪(未认证或未绑定),1 已就绪(可正常运营);固件读取该字段更新显示状态
6保留Number0历史占位;当前固件不读取

2.3 设备绑定 #A ​

业务平台 → 设备:设置设备绑定状态。

示例报文:#A,2,0,1

序号字段名类型示例值说明
1指令类型String#A固定为 #A;绑定状态指令
2指令序号Number2取值 0~999;平台生成的指令序号
3设备MACString0 / 260919BF000A0=本机;从机填写完整MAC;复用历史设备序号位置
4状态Number1取值 0 或 1;0 解绑,设备结束所有端口充电;1 已绑定,设备更新显示登录状态

设备 → 业务平台:绑定响应。

示例报文:#A,0,0,NCS12,0

序号字段名类型示例值说明
1指令类型String#A固定为 #A;绑定响应指令
2指令序号Number0固定为 0;当前固件响应序号固定为 0
3执行结果Number0返回码,见下表
4项目名称StringNCS12项目名称,来自项目入口常量封装
5设备MACString0 / 260919BF000A组网响应新增;所操作设备
result说明
0成功,状态已处理
1存在活动订单,拒绝解绑;平台应先逐端口停止并完成结算

3 状态上报 ​

3.1 心跳 #0 ​

设备 → 业务平台:上报信号、端口数量和各端口运行费用摘要。

示例报文:#0,3,25,55,2,1800-200-50-12-38-100,0-0-0-0-0-0

序号字段名类型示例值说明
1指令类型String#0固定为 #0;私有协议心跳指令
2指令序号Number3取值 0~999;设备生成的私有协议序号
3信号强度Number25取值 0~31;信号强度
4信号接收功率Number55设备模块返回值;信号接收功率
5端口数量Number21~项目端口数;插孔/端口数量
6端口摘要List1800-200-50-12-38-100数量等于端口数;每个端口一个摘要组,多个端口用逗号连接,组内用 - 分隔

端口摘要组格式:chargeValue-meteringPower-elecFee-servFee-balance-chargeEnergyWh[-meterStatus-meteringVoltage-meteringCurrent]

序号字段名类型示例值说明
1剩余充电值Number1800取值 >=0;剩余充电时长/电量
2当前功率Number200取值 >=0;当前功率
3电费Number50取值 >=0;电费,单位分
4服务费Number12取值 >=0;服务费,单位分
5余额Number38取值 >=0;余额,单位分
6充电电量Number100取值 >=0;已充电量,单位 Wh
7计量状态Number0诊断字段;0 正常、1 等待采集、2 零值待确认、3 无效帧、4 采集超时
8电压Number220诊断字段;单位 V
9电流Number0.91诊断字段;单位 A

摘要以 NCS01-B 当前 process.chargeData() 的字段顺序为准。前 6 项是所有产品必需的业务数据;单端口使用完整 9 项,12 路、20 路等多端口设备允许整组省略末尾的计量状态、电压、电流,使用 6 项格式。不得只省略其中一项,也不得在同一报文中混用 6 项和 9 项。省略诊断字段表示未上报,平台不得据此判定计量正常或把电压、电流补为零。

每个端口占一组,按端口 1 至 N 排列,组数必须等于头部端口数;空闲端口也必须保留。摘要不包含订单号、费率模型编号或已充时长;不得将旧三项摘要中的已充时长当作电费。缺失业务数据不能通过补零伪装成真实零值。

完整 9 项示例:#0,3,25,55,1,1800-200-50-12-38-100-0-220-0.91。

12 路基础 6 项完整示例:#0,3,25,55,12,1800-200-50-12-38-100,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0,0-0-0-0-0-0。20 路同理,端口数为 20,后接 20 组摘要。

计量状态枚举以 NCS01-B 当前实现为依据;具体采集超时判定由产品计量逻辑负责。本文规定的是报文格式,不表示所有产品固件已经完成适配。

业务平台心跳响应当前固件不解析。


组网从机扩展:在第5+N项之后追加第6+N项设备MAC(String,12位MAC)。网关本机心跳不追加。

从机示例:#0,3,25,55,1,1800-200-50-12-38-100-0-220-0.91,260919BF000A。

3.2 掉电提醒 #DROP ​

设备 → 业务平台:设备检测掉电时上报订单摘要。

示例报文:#DROP,4,25,55,2,1800-200-50-12-38-100,0-0-0-0-0-0

序号字段名类型示例值说明
1指令类型String#DROP固定为 #DROP;掉电提醒指令
2指令序号Number4取值 0~999;设备生成的私有协议序号
3信号强度Number25取值 0~31;信号强度
4信号接收功率Number55设备模块返回值;信号接收功率
5端口数量Number21~项目端口数;插孔/端口数量
6端口摘要List1800-200-50-12-38-100数量等于端口数;字段含义与 #0 心跳摘要一致

3.3 设备自停 #5 ​

设备 → 业务平台:设备达到停止条件后上报自停事件及费用明细。

示例报文:#5,5,0,1,2,1800,200,0,210,1,90,50,12,38,100,20250101120000123456,260919BF000A

序号字段名类型示例值说明
1指令类型String#5固定为 #5;自停上报指令
2指令序号Number5取值 0~999;设备生成的私有协议序号
3历史保留Number0固定0;设备MAC追加在末尾,不挪用此字段
4端口号Number11~端口数量;自停端口号
5自停类型Number2核心自停类型;由核心充电引擎产生
6剩余充电值Number1800取值 >=0;停止前剩余充电值
7当前功率Number200取值 >=0;当前功率
8充电类型Number0取值 0~3;充电类型
9平均功率Number210取值 >=0;平均功率
10服务费类型Number1取值 1 或 2;服务费类型,取当前会话值
11已充时长Number90取值 >=0;充电时长,单位秒
12电费Number50取值 >=0;电费,单位分
13服务费Number12取值 >=0;服务费,单位分
14余额Number38取值 >=0;余额,单位分
15充电电量Number100取值 >=0;已充电量,单位 Wh
16订单编号String20250101120000123456空或 0 表示无订单;当前订单编号
17设备MACString260919BF000A组网上报新增;0=本机

业务平台 → 设备:自停确认。

组网确认示例:#5,5,0,1,20250101120000123456,260919BF000A;无订单:#5,5,0,1,0,260919BF000A。旧设备仍支持#5,5,0,1[,orderId]。

序号字段名类型示例值说明
1指令类型String#5固定为 #5;自停确认指令
2指令序号Number5取值 0~999;等同设备上行自停序号
3执行结果Number0取值 0 表示成功;当 result = 0 时,设备确认平台已收到自停事件
4端口号Number11~端口数量;自停端口号
5订单编号(组网固定占位)String20250101120000123456保留历史可选orderId位置;组网无订单填0
6设备MACString260919BF000A组网确认新增;0=本机

组网关联:在原匹配条件上增加网关身份和设备MAC。非零订单号一并核对;MAC/端口/序号错误不回收记录。

旧设备可靠投递:设备按 private:reqIndex:channel:orderId 持久化自停事件;未收到成功确认时,先按 3s、10s、30s 快速补发,之后每 5 分钟低频补发,直到收到匹配 reqIndex + channel 的成功确认。若确认尾部携带 orderId,设备也会校验订单编号。平台应按 orderId + channel + reqIndex 做幂等处理;心跳发现端口已空闲但未收到 #5 时,应将订单标记为待设备结算补报,不应直接按服务器时间结算。


4 启停充电 ​

4.1 开启或续费 #1 ​

轻量请求 ​

平台可只下发基础字段,设备使用当前设备级自停参数和费率配置创建会话快照。

示例报文:#1,6,260919BF000A,1,0,30,ORD001

序号字段名类型示例值说明
1指令类型String#1固定为 #1;开启或续费指令
2指令序号Number6取值 0~999;平台生成的指令序号
3设备MACString0 / 260919BF000A0=本机;从机填写完整MAC;复用历史设备序号位置
4端口号Number11~端口数量;目标端口号
5充电类型Number0取值 0~3;计时类按分钟,金额/计量类按设备级费率配置处理
6充电值Number30取值 >0;计时类为分钟,金额/计量类为目标电量值或等效充电值
7订单编号StringORD001可选;缺失、空字符串或 0 时设备生成 D 前缀订单号

轻量格式只允许基础字段加可选 orderId,不允许只携带一部分自停或费率字段。完整会话参数仍使用下方历史格式。

计时类请求 ​

chargeType = 0 或 2 时,当前代码按计时类处理,value 单位为分钟,设备内部转换为秒。

示例报文:#1,6,260919BF000A,1,0,30,1,10,10,16800,10,45,900,1,20250101120000123456

序号字段名类型示例值说明
1指令类型String#1固定为 #1;开启或续费指令
2指令序号Number6取值 0~999;平台生成的指令序号
3设备MACString0 / 260919BF000A0=本机;从机填写完整MAC;复用历史设备序号位置
4端口号Number11~端口数量;目标端口号
5充电类型Number0取值 0 或 2;计时类按分钟开启;2 当前也按计时类处理
6充电值Number30取值 >0;计时类为分钟,设备内部转换为秒
7充满自停开关Number1取值 0 或 1;充满自停开关
8充满功率阈值Number10取值 >=0;充满功率阈值,单位 W
9充满自停延时Number10取值 >=0;充满延时,单位分钟,核心层转换为秒
10单端口过载阈值Number16800取值 >0;过载功率阈值,单位 W
11空载功率阈值Number10取值 >=0;空载功率阈值
12空载延时Number45取值 >=0;空载延时,单位秒
13最长充电时间Number900取值 >0;最长充电时间,单位分钟,核心层转换为秒
14空载自停开关Number1取值 0 或 1;空载自停开关
15订单编号String20250101120000123456可选;缺失、空字符串或 0 时设备生成 D 前缀订单号;计时类位于第 15 字段

金额/计量类请求 ​

chargeType = 1 或 3 时,当前代码按金额/费率字段处理;chargeType = 3 会转换为内部计量类处理。

示例报文:#1,7,260919BF000A,1,1,1000,1,10,10,16800,10,45,900,1,100,1,2400,478,1,1,2200,0,20250101120000123456

序号字段名类型示例值说明
1指令类型String#1固定为 #1;开启或续费指令
2指令序号Number7取值 0~999;平台生成的指令序号
3设备MACString0 / 260919BF000A0=本机;从机填写完整MAC;复用历史设备序号位置
4端口号Number11~端口数量;目标端口号
5充电类型Number1取值 1 或 3;金额/计量类;3 转为内部计量类
6充电值Number1000取值 >0;目标电量值或等效充电值
7充满自停开关Number1取值 0 或 1;充满自停开关
8充满功率阈值Number10取值 >=0;充满功率阈值,单位 W
9充满自停延时Number10取值 >=0;充满延时,单位分钟
10单端口过载阈值Number16800取值 >0;过载功率阈值,单位 W
11空载功率阈值Number10取值 >=0;空载功率阈值
12空载延时Number45取值 >=0;空载延时,单位秒
13最长充电时间Number900取值 >0;最长充电时间,单位分钟
14空载自停开关Number1取值 0 或 1;空载自停开关
15预付金额Number100取值 >=0;预付金额,单位分;计量类必填
16电费分组数Number1取值 >=1;电费分组数量
17电费时间阈值List2400数字列表;电费时间阈值列表,代码从字段中提取数字列表
18电费费率List478数字列表,每项 >0;电费费率列表,单位厘
19服务费类型Number1取值 1 或 2;1 按时间服务费,2 按电量服务费
20服务费分组数Number1取值 >=1;服务费分组数量
21服务费功率阈值List2200数字列表;服务费功率阈值列表
22服务费费率List0数字列表,每项 >=0;服务费费率列表,单位厘
23订单编号String20250101120000123456可选;缺失、空字符串或 0 时设备生成 D 前缀订单号;金额/计量类位于第 23 字段

设备 → 业务平台:开启或续费响应。

示例报文:#1,7,0,1,1000,200,1,20250101120000123456,260919BF000A

序号字段名类型示例值说明
1指令类型String#1固定为 #1;开启或续费响应指令
2指令序号Number7取值 0~999;等同平台下发序号
3执行结果Number0旧值0/1保留;组网新增3=结果未知;0成功,1端口忙、参数不一致或启动失败
4端口号Number11~端口数量;端口号
5剩余充电值Number1000取值 >=0;当前剩余充电值
6当前功率Number200取值 >=0;当前功率
7充电类型Number1取值 0~3;当前充电类型
8订单编号String20250101120000123456空或 0 表示无订单;当前端口订单编号
9设备MACString260919BF000A组网响应新增;0=本机

旧设备行为:同一端口相同 idx + 完整报文签名 的重复请求会被忽略,不再返回响应。运行中的续费必须保持 chargeType、orderId、会话自停配置、费率配置和服务费类型一致,否则固件拒绝本次请求。

#1 中的金额/计量类费率字段是会话费率,只影响当前订单和该订单的续费一致性校验,不写入设备级费率配置。设备级费率应使用 #RATE_SET 设置,只影响后续新订单;已经运行中的订单继续使用启动时锁定的会话费率快照。


4.2 终止充电 #2 ​

业务平台 → 设备:平台请求终止指定端口充电。

示例报文:#2,8,260919BF000A,1,20250101120000123456

序号字段名类型示例值说明
1指令类型String#2固定为 #2;终止充电指令
2指令序号Number8取值 0~999;平台生成的指令序号
3设备MACString0 / 260919BF000A0=本机;从机填写完整MAC;复用历史设备序号位置
4端口号Number11~端口数量;目标端口号
5订单编号String20250101120000123456空或 0 表示不校验;携带非 0 值时,必须与当前端口订单一致;可选字段

设备 → 业务平台:返回终止结果和费用明细;成功响应组包后设备结束充电。

示例报文:#2,8,0,1,1000,1,200,1,90,50,12,38,100,20250101120000123456,260919BF000A

序号字段名类型示例值说明
1指令类型String#2固定为 #2;终止充电响应指令
2指令序号Number8取值 0~999;等同平台下发序号
3执行结果Number0旧值0/2保留;组网新增3=结果未知;0成功,2订单不一致
4端口号Number11~端口数量;端口号
5剩余充电值Number1000取值 >=0;当前剩余充电值
6充电类型Number1取值 0~3;当前充电类型
7当前功率Number200取值 >=0;当前功率
8服务费类型Number1取值 1 或 2;服务费类型
9已充时长Number90取值 >=0;充电时长,单位秒
10电费Number50取值 >=0;电费,单位分
11服务费Number12取值 >=0;服务费,单位分
12余额Number38取值 >=0;余额,单位分
13充电电量Number100取值 >=0;已充电量,单位 Wh
14订单编号String20250101120000123456空或 0 表示无订单;当前端口订单编号
15设备MACString260919BF000A组网响应新增;0=本机

端口号无效时当前固件不返回响应。 成功终止时,设备在结束充电前按 idx + channel + orderId 缓存本次结算响应;平台用相同身份重试时,设备可重复返回原响应,不重新结算。


5 查询指令 ​

5.1 查询端口状态 #3 ​

业务平台 → 设备:查询单个端口状态。

示例报文:#3,9,260919BF000A,1

序号字段名类型示例值说明
1指令类型String#3固定为 #3;查询端口状态指令
2指令序号Number9取值 0~999;平台生成的指令序号
3设备MACString0 / 260919BF000A0=本机;从机填写完整MAC;复用历史设备序号位置
4端口号Number11~端口数量;目标端口号

设备 → 业务平台:返回端口状态、费用、电量和订单编号。

示例报文:#3,9,0,1,1,1000,200,90,210,1,210,50,12,38,100,20250101120000123456,260919BF000A

序号字段名类型示例值说明
1指令类型String#3固定为 #3;查询端口状态响应指令
2指令序号Number9取值 0~999;等同平台下发序号
3执行结果Number0旧设备0表示成功;组网新增3=结果未知
4端口号Number11~端口数量;端口号
5充电类型Number1取值 0~3;当前充电类型
6剩余充电值Number1000取值 >=0;当前剩余充电值
7当前功率Number200取值 >=0;当前功率
8已充时长Number90取值 >=0;已充时长,单位秒
9平均功率Number210取值 >=0;平均功率
10服务费类型Number1取值 1 或 2;服务费类型
11计费功率Number210取值 >=0;计费功率,当前等同平均功率
12电费Number50取值 >=0;电费,单位分
13服务费Number12取值 >=0;服务费,单位分
14余额Number38取值 >=0;余额,单位分
15充电电量Number100取值 >=0;已充电量,单位 Wh
16订单编号String20250101120000123456空或 0 表示无订单;当前端口订单编号
17设备MACString260919BF000A组网响应新增;0=本机

5.2 查询设备状态 #4 ​

业务平台 → 设备:查询所有端口状态。

组网请求:#4,10,260919BF000A;本机请求:#4,10,0,兼容旧请求#4,10。

序号字段名类型示例值说明
1指令类型String#4固定为 #4;查询设备状态指令
2指令序号Number10取值 0~999;平台生成的指令序号
3设备MACString0 / 260919BF000A新增;省略兼容本机

设备 → 业务平台:返回所有端口费用摘要。

组网示例:#4,10,0,1,1000-200-50-12-38-100,260919BF000A

序号字段名类型示例值说明
1指令类型String#4固定为 #4;查询设备状态响应指令
2指令序号Number10取值 0~999;等同平台下发序号
3执行结果Number0旧设备0表示成功;组网新增3=结果未知
4端口数量Number21~项目端口数;端口数量
5端口摘要List1000-200-50-12-38-100数量等于端口数;每端口一个摘要组,多个端口用逗号连接,组内用 - 分隔

端口摘要组格式:chargeValue-meteringPower-elecFee-servFee-balance-chargeEnergyWh[-meterStatus-meteringVoltage-meteringCurrent]

序号字段名类型示例值说明
1剩余充电值Number1000取值 >=0;当前剩余充电值
2当前功率Number200取值 >=0;当前功率
3电费Number50取值 >=0;电费,单位分
4服务费Number12取值 >=0;服务费,单位分
5余额Number38取值 >=0;余额,单位分
6充电电量Number100取值 >=0;已充电量,单位 Wh
7计量状态Number0诊断字段,枚举与 #0 相同
8电压Number220诊断字段;单位 V
9电流Number0.91诊断字段;单位 A

#4 与 #0 使用同一端口摘要契约:前 6 项必需,末尾 3 项诊断字段按产品整组保留或省略;端口顺序、空闲端口占位和字段长度规则相同。


组网响应第5+N项新增设备MAC,N为第4项端口数。原摘要格式不变。

5.3 废弃指令 #7 ​

#7 功能与端口状态查询存在重复,已从正式一对一指令映射中移出,进入废弃/迁移期兼容状态。迁移期内若平台仍发送 #7,设备侧可按兼容策略保留解析,但新平台不得继续依赖该指令建立正式能力映射。

迁移期兼容响应尾部的 isCharging 表示端口真实运行状态;不再包含费率模型编号。

示例报文:#7,11,0,1,1000,200,1,210,1,90,50-12-38,3-0-0,100,ORD001,1

序号字段名类型示例值说明
1指令类型String#7固定为 #7;废弃/迁移期兼容查询响应
2指令序号Number11取值 0~999;等同平台下发序号
3执行结果Number0固定为 0;表示查询成功
4端口号Number11~端口数量;端口号
5剩余充电值Number1000当前剩余充电值
6当前功率Number/String200当前功率,按固件格式化输出
7充电类型Number1当前充电类型
8平均功率Number/String210平均功率
9服务费类型Number1当前会话服务费类型
10已充时长Number90单位秒
11费用摘要List50-12-38elecFee-servFee-balance
12自停计时器List3-0-0fullTimer-idleTimer-overTimer
13充电电量Number100单位 Wh
14订单编号StringORD001当前端口订单编号;无订单为 0
15是否充电中Number11 正在充电,0 非充电

端口状态查询仍建议迁移到 #3;如果后端仍依赖三个自停计时器,应迁移到 #PORT_RUNTIME_QUERY 或具备等价语义的运行时查询指令。


6 刷卡与维护 ​

6.1 刷卡请求 #B ​

设备 → 业务平台:刷卡后请求平台校验。

示例报文:#B,12,0,1,AABB1122

序号字段名类型示例值说明
1指令类型String#B固定为 #B;刷卡请求指令
2指令序号Number12取值 0~999;设备生成的私有协议序号
3设备序号Number0固定为 0;当前固件固定填 0
4端口号Number11~端口数量;刷卡端口
5卡 UIDStringAABB1122十六进制字符串;卡 UID

业务平台 → 设备:刷卡校验结果。

示例报文:#B,12,0,1,1

序号字段名类型示例值说明
1指令类型String#B固定为 #B;刷卡响应指令
2指令序号Number12取值 0~999;等同设备刷卡请求序号
3返回数据Number/String0平台定义;历史返回数据字段;当前固件不解析业务含义
4校验结果Number1取值 0~2;当前固件读取该字段:0 卡片无效,1 校验成功,2 余额不足
5端口号Number11~端口数量;当前固件读取该字段作为端口号

6.2 远程重启 #REBOOT ​

业务平台 → 设备:远程重启设备。

示例报文:#REBOOT,13

序号字段名类型示例值说明
1指令类型String#REBOOT固定为 #REBOOT;远程重启指令
2指令序号Number13取值 0~999;平台生成的指令序号;当前响应不回显该值

设备 → 业务平台:远程重启响应。

示例报文:#REBOOT,0,0

序号字段名类型示例值说明
1指令类型String#REBOOT固定为 #REBOOT;当前固件远程重启响应指令
2指令序号Number0固定为 0;当前固件固定返回 0
3执行结果Number0固定为 0;0 表示已处理,设备随后立即调用重启流程

6.3 远程升级 #UPGRADE ​

业务平台 → 设备:远程升级设备。

示例报文:#UPGRADE,14

序号字段名类型示例值说明
1指令类型String#UPGRADE固定为 #UPGRADE;远程升级指令
2指令序号Number14取值 0~999;平台生成的指令序号

设备 → 业务平台:远程升级响应。

示例报文:#UPGRADE,14,0

序号字段名类型示例值说明
1指令类型String#UPGRADE固定为 #UPGRADE;远程升级响应指令
2指令序号Number14取值 0~999;等同平台下发序号
3执行结果Number0固定为 0;0 表示已处理,设备返回后进入升级流程

7 新增语义化补齐指令 ​

本节只定义私有协议新增指令。除 #7 进入废弃/迁移期兼容外,私有协议现有旧指令不在本节重定义,也不得因一对一映射而改名、删除或调整字段。

新增指令采用 #* 命名;当前实现已在私有适配器中接入 command map,并复用现有底层业务逻辑。

7.1 查询设备级费率 #RATE_QUERY ​

业务平台 → 设备:查询设备当前保存的设备级费率配置。

示例报文:#RATE_QUERY,15

序号字段名类型示例值说明
1指令类型String#RATE_QUERY固定为 #RATE_QUERY;查询设备级费率
2指令序号Number15取值 0~999;平台生成的指令序号

设备 → 业务平台:返回设备级费率配置和配置摘要。

示例报文:#RATE_QUERY,15,0,A94F21C8,3,1200|1830|2359,E,850|850|850,E,150|150|150

序号字段名类型示例值说明
1指令类型String#RATE_QUERY固定为 #RATE_QUERY;查询设备级费率响应
2指令序号Number15取值 0~999;等同平台下发序号
3执行结果Number0返回码,见下表
4费率摘要StringA94F21C8rateHash 或等价配置摘要;由完整费率配置按平台约定算法生成
5计费分组数Number3取值 1~10;计费分组数量
6时间阈值列表List1200|1830|2359HHMM,数量等于分组数;使用 | 分隔
7电费模式StringE取值 E 或 T;E 按电量,T 按时间
8电费费率列表List850|850|850数量等于分组数,每项 >0;单位厘
9服务费模式StringE取值 E 或 T;E 按电量,T 按时间
10服务费费率列表List150|150|150数量等于分组数,每项 >=0;单位厘
result说明
0成功
1设备尚无有效设备级费率配置
2内部读取失败或配置校验失败

异常处理:请求字段缺失或指令序号非法时,设备返回 result=2;当前设备级费率缺失时返回 result=1,不得用静默默认费率拼装成功响应。

业务影响:该指令只读取设备级费率,不影响正在运行的订单。运行中订单仍使用启动时锁定的会话费率快照。


7.2 设置设备级费率 #RATE_SET ​

业务平台 → 设备:设置设备级费率配置。该配置只影响后续新订单,不影响当前运行订单。

示例报文:#RATE_SET,16,A94F21C8,3,1200|1830|2359,E,850|850|850,E,150|150|150

序号字段名类型示例值说明
1指令类型String#RATE_SET固定为 #RATE_SET;设置设备级费率
2指令序号Number16取值 0~999;平台生成的指令序号
3费率摘要StringA94F21C8rateHash 或等价配置摘要;设备保存后应回传同一摘要
4计费分组数Number3取值 1~10;计费分组数量
5时间阈值列表List1200|1830|2359HHMM,数量等于分组数;最后一项应覆盖全天结束点
6电费模式StringE取值 E 或 T;电费计费模式
7电费费率列表List850|850|850数量等于分组数,每项 >0;单位厘
8服务费模式StringE取值 E 或 T;服务费计费模式
9服务费费率列表List150|150|150数量等于分组数,每项 >=0;单位厘

设备 → 业务平台:返回费率设置结果和实际保存摘要。

示例报文:#RATE_SET,16,0,A94F21C8,2

序号字段名类型示例值说明
1指令类型String#RATE_SET固定为 #RATE_SET;设置设备级费率响应
2指令序号Number16取值 0~999;等同平台下发序号
3执行结果Number0返回码,见下表
4费率摘要StringA94F21C8实际保存的 rateHash 或等价配置摘要;失败时可为空
5活跃充电数Number2当前仍在运行的充电会话数量;新费率只影响后续新订单
result说明
0成功
1参数无效
2分组数无效
3摘要校验失败或保存后摘要不一致
4保留;当前实现不因存在运行订单拒绝设备级费率设置

异常处理:设备必须校验分组数、时间阈值、计费模式、费率列表长度和费率取值;rateHash 与设备计算摘要不一致时返回 3,不得保存半成品配置。当前实现允许运行中修改设备级费率,但通过活跃充电数字段明确提示新费率不影响已启动会话。

业务影响:成功后仅影响后续新订单。#1 金额/计量类请求携带的会话费率仍只作用于当前订单,不回写、不覆盖 #RATE_SET 保存的设备级费率。

推荐启充前同步流程:平台先查询设备当前 rateHash,不一致时下发 #RATE_SET 并等待成功响应;确认一致后再下发轻量 #1。这样费率同步失败会在启充前暴露,避免订单启动后才发现结算费率不一致。


7.3 查询工作参数 #PARAM_QUERY ​

业务平台 → 设备:查询设备级工作参数。

示例报文:#PARAM_QUERY,17

序号字段名类型示例值说明
1指令类型String#PARAM_QUERY固定为 #PARAM_QUERY;查询设备级工作参数
2指令序号Number17取值 0~999;平台生成的指令序号

设备 → 业务平台:返回设备级工作参数。

示例报文:#PARAM_QUERY,17,0,1,10,60,15000,15000,900,4

序号字段名类型示例值说明
1指令类型String#PARAM_QUERY固定为 #PARAM_QUERY;查询工作参数响应
2指令序号Number17取值 0~999;等同平台下发序号
3执行结果Number0返回码,见下表
4充满自停开关Number1取值 0 或 1;充满自停开关
5充满功率阈值Number10取值 >=0;单位 W
6充满自停延时Number60取值 >=0;单位秒
7单端口过载阈值Number15000取值 >0;单位 W
8整桩过载阈值Number15000取值 >0;单位 W
9最长充电时间Number900取值 >0;单位分钟
10心跳间隔Number4固定为 4;业务心跳周期字段
result说明
0成功
1参数未初始化或读取失败

异常处理:读取到的工作参数不完整或越界时返回 1,不得用入口常量之外的第二份默认值拼装响应。

业务影响:该指令只查询设备级参数,不改变运行中订单的会话自停配置。需要查询 #7 历史额外计时器时,应使用 #PORT_RUNTIME_QUERY 或等价语义指令。


7.4 设置工作参数 #PARAM_SET ​

业务平台 → 设备:设置设备级工作参数。旧 #1 中的会话自停字段保持原语义。

示例报文:#PARAM_SET,18,1,10,60,15000,15000,900,4

序号字段名类型示例值说明
1指令类型String#PARAM_SET固定为 #PARAM_SET;设置设备级工作参数
2指令序号Number18取值 0~999;平台生成的指令序号
3充满自停开关Number1取值 0 或 1;充满自停开关
4充满功率阈值Number10取值 >=0;单位 W
5充满自停延时Number60取值 >=0;单位秒
6单端口过载阈值Number15000取值 >0;单位 W
7整桩过载阈值Number15000取值 >0;单位 W
8最长充电时间Number900取值 >0;单位分钟
9心跳间隔Number4固定为 4;可选字段,如携带必须为 4

设备 → 业务平台:返回工作参数设置结果。

示例报文:#PARAM_SET,18,0

序号字段名类型示例值说明
1指令类型String#PARAM_SET固定为 #PARAM_SET;设置工作参数响应
2指令序号Number18取值 0~999;等同平台下发序号
3执行结果Number0返回码,见下表
result说明
0成功
1参数无效
2保存失败
3当前运行状态不允许修改

异常处理:设备必须校验所有字段完整性、单位和取值范围;心跳间隔携带非 4 时返回 1。保存失败不得更新部分字段。

业务影响:成功后影响后续新订单和设备级默认行为。已经运行中的订单继续使用启动时确定的会话参数,旧 #1 的会话自停字段不因本指令被改名或改字段顺序。


8 保留、废弃或仅保留常量的指令 ​

以下指令不再作为新增能力入口;其中 #7 仍保留迁移期兼容解析,其余仅保留常量或忽略处理。

指令状态说明
#6保留当前未实现业务解析流程
#7废弃/迁移期兼容已从正式一对一映射中移出;端口状态查询迁移到 #3,额外运行计时器迁移到 #PORT_RUNTIME_QUERY 或等价语义指令
#8保留当前未实现业务解析流程
#9保留当前未实现业务解析流程
#C保留当前未实现业务解析流程
#TIME保留当前未实现业务解析流程
#REGISTER-RETURN忽略私有协议业务适配器收到后直接忽略

9 兼容说明 ​

  • 私有协议 V2.0.8 已将 orderId 闭环、自停队列加固和设备级费率确认合入主协议文本。
  • #1 的 orderId 字段位置以充电类型决定:计时类在第 15 字段,金额/计量类在第 23 字段。
  • #1 缺失或传 0 订单编号时,设备生成 D 前缀订单号;生成依赖设备身份和系统时间,缺失时明确失败。
  • #2 第 5 字段为可选 orderId,不再作为充电时长/功率同步值使用。
  • #3 当前响应第 11 字段为 billingPower,不是历史文档中重复出现的 chargeTime。
  • #0/#DROP/#4 统一采用 NCS01-B 顺序的 6 项业务摘要及末尾 3 项诊断字段;多端口允许整组省略诊断字段,摘要不包含订单号或费率模型编号。
  • #7 已从正式一对一映射中移出,进入废弃/迁移期兼容;端口查询统一使用 #3,若依赖 fullTimer/idleTimer/overTimer,应迁移到 #PORT_RUNTIME_QUERY 或等价语义指令。
  • #B 返回字段以当前固件解析位置为准:第 4 字段为错误码,第 5 字段为端口号。
  • 新增语义化指令只补充旧指令缺失的能力,不替代、不修改任何现有旧指令。

10 版本与实现差异 ​

  • 本版基于2.0.8扩展组网支持,2.0.8原文已归档。
  • 当前EW3工程012仅有计时控制,报文不等于本版:其订单号、结果未知码、#5确认位置、#0心跳等仍需按审核结果适配。不能直接据此宣称已兼容2.10。
  • 本版不删除2.0.8已有订单号、费率字段及旧设备语义;组网设备RAM近期请求去重按已确认产品取舍实现,不要求新增跨重启永久去重。
  • 此前工程方案的“结果2=未知”与2.0.8的#2结果2冲突,本版改为结果3;此前五字段MAC确认与历史第五字段orderId冲突,本版固定订单占位后追加MAC。
  • #0与#4原摘要采用6项或9项,组网扩展不改变摘要宽度;不引入工程版额外诊断字段到订单号位置。