Skip to content

4G充电桩开放协议 V1.0(正式首版) ​

2026-09-07。以 NCS10-A 十路设备为本次实现对象。协议版本与固件版本分别管理。

实现状态:NCS10-A 源码 000.000.012 与本地 MQTT 工具已接入 R/E/F/S 格式;主机验证通过;2026-09-07 实机日志已验证编号原值上报、查询、参数/费率设置及开启参数回显。完整计费、自停、断电恢复与存储容量仍需专项验收。旧五字段固件不支持本页扩展指令。

此前的 V1.1 是试验版存档,不用于正式接入。原未使用的试验版 V1.0 已撤下;V2.0 方案不继续采用。本版是正式协议第一次编号,不按历史试验版本的数字排序。

1 协议基础 ​

1.1 通信链路 ​

注册平台通过 #LOGIN-RETURN 分配业务 MQTT 参数,productCategory=5 选择开放协议。已经保存有效业务配置时,业务断线只重连业务服务器,不因此重新注册。注册参数接收后直接切换业务连接。

设备仅在注册信息指定的下行 Topic 执行命令;上行 Topic 用于设备回复和上报。平台可以监听两个 Topic,但不能把设备回复重新作为下行指令发送。

NCS10-A 当前业务传输使用 AES-128-CBC、PKCS7 补齐、16 字节全零 IV;密钥按注册配置生成,密文按十六进制文本传输。本文展示的是加密前原文。不要用其他设备或 Demo 的密钥代替当前注册配置。

1.2 数据结构与约定 ​

  • idx:请求序号,十进制整数 0~65535,响应原样对应。重发同一请求沿用原序号。订单是否重复以端口和订单号判断,不能仅按序号判断。
  • port:端口号,NCS10-A 为 1~10;平台先查询实际端口数量。
  • order:1~30 个英文字母、数字、下划线或短横线;不能是 0。平台必须为每个新订单生成新编号,不得在确认清除后复用旧编号。
  • 费率单价:整数厘(1 元 = 1000 厘);金额及账单:整数分;电量:整数 Wh;时长:整数分钟。开始金额为 1~2147483647 分。
  • state:0 空闲;1 充电中;3 已停止、等待平台确认。端口查询的 2 表示端口参数错误。
  • rateHash 本版暂不启用,不发送、不校验。费率编号用于标识配置,不表示内容摘要。

1.3 数据类型 ​

类型含义说明
Number十进制整数金额、时间、功率、序号等;按对应字段的范围和单位使用
String字符串指令名、订单号、计费方式等
List参数组或列表字段间用逗号,组内按各指令定义分隔;表格中的竖线就是报文分隔符

2 设备上行指令 ​

2.1 设备注册 #REGISTER ​

设备 → 平台:业务连接就绪后上报设备信息。

报文格式:#REGISTER,idx,sn,imei,imsi,iccid,firmware,1,portCount,rateModelId,fullSwitch,fullPower,fullDelay,maxPower,totalMaxPower,maxMinutes,4

示例报文:

text
#REGISTER,1,123456789012345,864793080430288,460047661234567,89860846123456789000,000.000.012,1,10,1,1,10,60,15000,15000,900,4
序号字段名类型必填示例值说明
1指令类型String是#REGISTER固定指令名称
2指令序号 idxNumber是10~65535;响应与请求序号一致
3桩编号 snString是1234567890123451~15 位数字,原样保留(含前导零),不补零、不截断;SN 为 0 时使用 IMEI
4IMEIString是86479308043028815 字符;设备标识
5IMSIString是46004766123456715 字符;SIM 信息
6ICCIDString是8986084612345678900020 字符;SIM 信息
7固件版本 firmwareString是000.000.012与协议版本分别管理
8设备类型Number是1固定为 1
9端口数 portCountNumber是10本设备实际端口数量
10费率编号 rateModelIdNumber是1非负整数;此处为设备默认费率编号,不代表各端口订单费率
11充满自停开关 fullSwitchNumber是10 关闭,1 开启
12充满功率 fullPowerNumber是10非负整数,单位 W
13充满延时 fullDelayNumber是60单位秒;启用充满自停时必须大于 0
14单端口过载阈值 maxPowerNumber是15000大于 0,单位 W;设备安全限制
15整桩过载阈值 totalMaxPowerNumber是15000大于 0,单位 W;设备安全限制
16最长时长 maxMinutesNumber是900大于 0,单位分钟;省略 S 的订单使用该默认值
17心跳间隔Number是4固定 4 分钟

平台 → 设备:业务注册确认。

报文格式:#REGISTER,idx,1

示例报文:

text
#REGISTER,1,1
序号字段名类型必填示例值说明
1指令类型String是#REGISTER固定指令名称
2指令序号 idxNumber是10~65535;响应与请求序号一致
3确认结果Number是1仅作接入记录;当前设备不依靠该响应推进订单

sn/imei/imsi 各 15 字符,ICCID 20 字符;按固件组包规则补足或截取。平台的 #REGISTER,idx,1 当前仅作接入记录,设备不依靠它推进订单。


2.2 心跳 #HEARTBEAT ​

设备 → 平台:上报各端口运行状态。

报文格式:#HEARTBEAT,idx,sn,signal,rateModelId,portCount,port|state|power|balance,...

示例报文:

text
#HEARTBEAT,2,123456789012345,19,1,10,1|1|7200|100,2|0|0|0,3|0|0|0,4|0|0|0,5|0|0|0,6|0|0|0,7|0|0|0,8|0|0|0,9|0|0|0,10|0|0|0
序号字段名类型必填示例值说明
1指令类型String是#HEARTBEAT固定指令名称
2指令序号 idxNumber是20~65535;响应与请求序号一致
3桩编号 snString是123456789012345与注册报文使用相同编号;下发 SN 为 1~15 位数字,原样保留,不补零;例如 31082261 → 31082261;SN 为 0 时两种报文均使用 IMEI;非法编号拒绝接收,不截断
4信号 signalNumber是19设备上报的信号值
5费率编号 rateModelIdNumber是1非负整数;此处为设备默认费率编号,不代表各端口订单费率
6端口数 portCountNumber是10实际端口数量
7端口数据组List是1|1|7200|100每个端口一组,各组以逗号分隔;数量与 portCount 一致

端口数据组:port|state|power|balance

序号字段名类型必填示例值说明
1端口号 portNumber是11~实际端口数
2状态 stateNumber是10 空闲、1 充电、3 已停止待确认
3功率 powerNumber是7200单位 W×10,示例为 720 W
4余额 balanceNumber是100整数分;非充电状态为 0,最终结果通过端口查询读取

注册、心跳及设备查询中的 rateModelId 表示设备默认费率编号,不能代表各端口订单实际费率;订单实际参数以开启回复或端口查询为准。

每个端口组为四个字段,功率单位 W×10。非充电状态心跳余额为 0;最终账单通过端口查询读取。配置心跳间隔固定 4 分钟,充电中调度按 1 分钟尝试上报。心跳不能作为最终结算依据。


2.3 自动停止 #AUTO-STOP ​

设备 → 平台:上报结束原因和最终结果。

报文格式:#AUTO-STOP,idx,reason,port,order,minutes,Wh,paid,elecFee,servFee,balance

示例报文:

text
#AUTO-STOP,3,1,1,ORD004,30,150,100,12,3,85
序号字段名类型必填示例值说明
1指令类型String是#AUTO-STOP固定指令名称
2指令序号 idxNumber是30~65535;响应与请求序号一致
3结束原因 reasonNumber是11 一般结束、2 拔出等完成情况、3 过载;详见下文
4端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0
5订单编号 orderString是ORD0041~30 个英文字母、数字、下划线或短横线;开始/停止请求不能为 0;无订单查询返回 0
6充电时长 minutesNumber是30本订单时长,整数分钟
7充电电量 WhNumber是150本订单电量,整数 Wh
8预付金额 paidNumber是100本订单预付金额,整数分
9电费 elecFeeNumber是12本订单电费,整数分
10服务费 servFeeNumber是3本订单服务费,整数分
11剩余金额 balanceNumber是85本订单余额,整数分

reason 沿用现有分组:1 一般结束(包括充满、余额用完或到时);2 拔出等完成情况;3 过载。当前映射不逐项区分所有内部原因,平台不得把 1 一律解释为充满。

与主动停止一样,平台保存最终结果后发送 #CHARGE-ACK。不再使用试验版 #AUTO-STOP 响应格式确认。重复上报按设备、端口、订单号合并,不重复生成账单。自动停止结果尚未成功保存时,设备仍须先断电;平台应通过端口查询核验并完成确认。

平台 → 设备:保存最终账单后使用第 3.10 节 #CHARGE-ACK 确认,不再使用试验版自停响应格式。


3 平台下行指令 ​

3.1 开启充电 #CHARGE-START ​

平台 → 设备:开启指定端口订单。

使用默认参数

text
#CHARGE-START,指令序号,端口号,订单编号,预付金额
text
#CHARGE-START,10,1,ORD001,100

开启充电+费率参数+配置参数

text
#CHARGE-START,指令序号,端口号,订单编号,预付金额,R=费率编号,E=结束时间:电价|结束时间:电价|…,F=服务费方式|功率上限:单价|功率上限:单价|…,S=最长分钟数|充满自停开关|充满功率|持续秒数
text
#CHARGE-START,13,1,ORD004,1000,R=1,E=0800:400|2200:800|2400:500,F=T|300:200|600:400|2200:600,S=900|1|10|60
序号字段名类型必填示例值说明
1指令类型String是#CHARGE-START固定指令名称
2指令序号 idxNumber是130~65535;响应与请求序号一致
3端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0
4订单编号 orderString是ORD0041~30 个英文字母、数字、下划线或短横线;开始/停止请求不能为 0;无订单查询返回 0
5预付金额 amountNumber是1000单位分;开启请求为 1~2147483647
6费率编号 RNumber可选R=1非负整数;R、E、F 同时填写或同时省略;按 R、E、F、S 顺序,各最多一次;未知、重复、空值、缺项或多余字段返回 2;费率校验见第 3.6 节
7电费参数 EList可选E=0800:400|2200:800|2400:500每项为 结束时间:电价,时段间用 | 分隔;按电量收费;新订单省略 R、E、F 时使用有效默认费率,否则返回 2
7.1时段结束时间Number可选0800HHMM;从 00:00 起连续分段;严格递增,最后为 2400
7.2电价Number可选400正整数,厘/度;与前面的结束时间用 : 连接
8服务费参数 FList可选F=T|300:200|600:400|2200:600收费方式|功率上限:单价|…;功率档与电费时段各自独立
8.1服务费方式String可选TT:按时间,厘/小时;E:按电量,厘/度
8.2功率上限Number可选300正整数 W;严格递增;第一档含 0 和上限,后续档为大于前一上限且不超过本档上限
8.3服务费单价Number可选200非负整数;单位由服务费方式决定;与功率上限用 : 连接
9配置参数 SList可选S=900|1|10|60接在费率参数后;省略费率时接在金额后;四个字段用 | 分隔,填写时须完整;省略时使用有效的 maxTime、fullSwitch、fullPower、fullTime;缺少或非法则返回 2
9.1最长时长 maxMinutesNumber可选900正整数分钟;换算秒后不超过 2147483647
9.2充满自停 fullSwitchNumber可选10 关闭,1 开启;关闭时功率、持续秒数填 0,使用默认配置时本订单这两项取 0
9.3充满功率 fullPowerNumber可选10非负整数 W;关闭充满自停时填 0
9.4持续时间 fullDelayNumber可选60整数秒;开启时大于 0,关闭时填 0

设备 → 平台:开启结果 ​

成功格式:#CHARGE-START,idx,port,order,1,R=费率编号,E=实际电费参数,F=实际服务费参数,S=实际配置参数

失败格式:#CHARGE-START,idx,port,order,result

成功示例:

text
#CHARGE-START,13,1,ORD004,1,R=1,E=0800:400|2200:800|2400:500,F=T|300:200|600:400|2200:600,S=900|1|10|60

失败示例:

text
#CHARGE-START,13,1,ORD004,3
序号字段名类型必填示例值说明
1指令类型String是#CHARGE-START固定指令名称
2指令序号 idxNumber是130~65535;响应与请求序号一致
3端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0
4订单编号 orderString是ORD0041~30 个英文字母、数字、下划线或短横线;开始/停止请求不能为 0;无订单查询返回 0
5执行结果 resultNumber是1返回码见本指令说明
6实际费率编号 RNumber成功必填R=1原订单费率编号;格式见开启请求
7实际电费参数 EList成功必填E=0800:400|2200:800|2400:500原订单电费时段与电价,单位厘/度;格式见开启请求
8实际服务费参数 FList成功必填F=T|300:200|600:400|2200:600原订单服务费方式、功率档和单价;格式见开启请求
9实际配置参数 SList成功必填S=900|1|10|60结果 1 时返回本订单固定配置参数;失败不追加

成功时完整返回实际采用的 R、E、F、S,格式与请求相同;重复开启返回原订单参数,平台保存返回值。

result含义说明
1开启成功包括充电中同订单、同金额且全部参数一致的重发;省略参数沿用原订单值,不改余额、不重新计费
2参数错误必填字段缺失、数值非法、可选参数不完整、没有有效默认配置,或同订单金额/费率/配置与原订单不同;不修改原订单
3当前无法启动充电其他订单占用、旧订单已结束待确认、订单保存失败或设备无法供电;不为本次请求开启供电,平台查询端口状态再处理

所有数值字段使用十进制整数,除已有更小限制外,不超过 2147483647。电费最多 10 个时段、服务费最多 10 个功率档、30 字符订单号,完整开启原文不得超过 1024 个 ASCII 字节(加密前);超限报文拒绝处理,不截断后执行。


3.2 停止充电 #CHARGE-STOP ​

平台 → 设备:停止指定订单。

报文格式:#CHARGE-STOP,idx,port,order

示例报文:

text
#CHARGE-STOP,5,1,ORD004
序号字段名类型必填示例值说明
1指令类型String是#CHARGE-STOP固定指令名称
2指令序号 idxNumber是50~65535;响应与请求序号一致
3端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0
4订单编号 orderString是ORD0041~30 个英文字母、数字、下划线或短横线;开始/停止请求不能为 0;无订单查询返回 0

设备 → 平台:成功返回最终结果。

报文格式:#CHARGE-STOP,idx,1,port,order,minutes,Wh,paid,elecFee,servFee,balance

示例报文:

text
#CHARGE-STOP,5,1,1,ORD004,30,150,100,12,3,85
序号字段名类型必填示例值说明
1指令类型String是#CHARGE-STOP固定指令名称
2指令序号 idxNumber是50~65535;响应与请求序号一致
3执行结果 resultNumber是1返回码见本指令说明
4端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0
5订单编号 orderString是ORD0041~30 个英文字母、数字、下划线或短横线;开始/停止请求不能为 0;无订单查询返回 0
6充电时长 minutesNumber成功必填30本订单时长,整数分钟
7充电电量 WhNumber成功必填150本订单电量,整数 Wh
8预付金额 paidNumber成功必填100本订单预付金额,整数分
9电费 elecFeeNumber成功必填12本订单电费,整数分
10服务费 servFeeNumber成功必填3本订单服务费,整数分
11剩余金额 balanceNumber成功必填85本订单余额,整数分

失败格式:#CHARGE-STOP,idx,result,port,order

失败示例:#CHARGE-STOP,5,5,1,ORD004

result说明
1已停止并保存结束结果,返回最终明细
4参数错误
5订单不匹配
6已断电,但结束状态保存失败

result=4 参数错误;5 订单不匹配;6 结束状态保存失败,此时继电器已经关闭,平台仍须保留异常状态并重试原订单停止或查询,不能当成结算完成。


3.3 查询设备 #DEVICE-QUERY ​

平台 → 设备:查询端口数量与状态。

报文格式:#DEVICE-QUERY,idx

示例报文:

text
#DEVICE-QUERY,6
序号字段名类型必填示例值说明
1指令类型String是#DEVICE-QUERY固定指令名称
2指令序号 idxNumber是60~65535;响应与请求序号一致

设备 → 平台:返回设备默认费率编号及端口状态。

报文格式:#DEVICE-QUERY,idx,rateModelId,portCount,state1,state2,...

示例报文:

text
#DEVICE-QUERY,6,1,10,1,0,0,0,0,0,0,0,0,0
序号字段名类型必填示例值说明
1指令类型String是#DEVICE-QUERY固定指令名称
2指令序号 idxNumber是60~65535;响应与请求序号一致
3费率编号 rateModelIdNumber是1非负整数;此处为设备默认费率编号,不代表各端口订单费率
4端口数 portCountNumber是10实际端口数
5端口 1 状态 state1Number是10 空闲、1 充电、3 已停止待确认
6后续端口状态 state2…Number按端口数0每个端口一个逗号字段,状态总数与 portCount 一致

3.4 查询端口 #PORT-QUERY ​

平台 → 设备:查询订单状态、结果及实际参数。

报文格式:#PORT-QUERY,idx,port

示例报文:

text
#PORT-QUERY,7,1
序号字段名类型必填示例值说明
1指令类型String是#PORT-QUERY固定指令名称
2指令序号 idxNumber是70~65535;响应与请求序号一致
3端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0

设备 → 平台:返回订单及实际参数。

报文格式:#PORT-QUERY,idx,state,port,order,minutes,Wh,paid,elecFee,servFee,balance[,R=费率编号,E=实际电费参数,F=实际服务费参数,S=实际配置参数]

示例报文:

text
#PORT-QUERY,7,1,1,ORD004,30,150,1000,12,10,978,R=1,E=0800:400|2200:800|2400:500,F=T|300:200|600:400|2200:600,S=900|1|10|60
序号字段名类型必填示例值说明
1指令类型String是#PORT-QUERY固定指令名称
2指令序号 idxNumber是70~65535;响应与请求序号一致
3端口状态 stateNumber是10 空闲、1 充电、2 端口错误、3 已停止待确认
4端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0
5订单编号 orderString是ORD0041~30 个英文字母、数字、下划线或短横线;开始/停止请求不能为 0;无订单查询返回 0
6充电时长 minutesNumber是30本订单时长,整数分钟
7充电电量 WhNumber是150本订单电量,整数 Wh
8预付金额 paidNumber是1000本订单预付金额,整数分
9电费 elecFeeNumber是12本订单电费,整数分
10服务费 servFeeNumber是10本订单服务费,整数分
11剩余金额 balanceNumber是978本订单余额,整数分
12实际费率编号 RNumber状态 1/3 必填R=1原订单费率编号;格式见开启请求
13实际电费参数 EList状态 1/3 必填E=0800:400|2200:800|2400:500原订单电费时段与电价,单位厘/度;格式见开启请求
14实际服务费参数 FList状态 1/3 必填F=T|300:200|600:400|2200:600原订单服务费方式、功率档和单价;格式见开启请求
15实际配置参数 SList状态 1/3 必填S=900|1|10|60原订单固定的自停条件;格式见第 3.1 节

文档新增约定:状态 1 或 3 时,尾部必须追加 ,R=费率编号,E=实际电费参数,F=实际服务费参数,S=实际配置参数,返回该订单固定参数,供开启回复丢失或重连后的核验。空闲或参数错误时保持基础字段,不追加参数组;不能用设备当前默认配置冒充历史订单参数。

状态 3 时,后续字段就是保留的最终结果。平台保存后发送 #CHARGE-ACK。状态 0、订单 0 表示空闲。状态 2 表示端口参数错误,不能当成空闲。


3.5 查询计费模型 #RATE-QUERY ​

平台 → 设备:查询设备默认费率。

报文格式:#RATE-QUERY,idx

示例报文:

text
#RATE-QUERY,8
序号字段名类型必填示例值说明
1指令类型String是#RATE-QUERY固定指令名称
2指令序号 idxNumber是80~65535;响应与请求序号一致

设备 → 平台:返回完整默认费率。

报文格式:#RATE-QUERY,idx,R=费率编号,E=电费参数,F=服务费参数

示例报文:

text
#RATE-QUERY,8,R=1,E=0800:400|2200:800|2400:500,F=T|300:200|600:400|2200:600
序号字段名类型必填示例值说明
1指令类型String是#RATE-QUERY固定指令名称
2指令序号 idxNumber是80~65535;响应与请求序号一致
3费率编号 RNumber是R=1非负整数;设备默认费率编号
4电费参数 EList是E=0800:400|2200:800|2400:500结束时间:电价;电价单位厘/度;字段定义见第 3.1 节
5服务费参数 FList是F=T|300:200|600:400|2200:600收费方式|功率上限:单价|…;T 为厘/小时,E 为厘/度;字段定义见第 3.1 节

无有效默认费率时返回 #RATE-QUERY,idx,2。

本响应不代表任何进行中订单的实际费率;查询订单参数使用第 3.4 节。rateHash 暂不启用。


3.6 设置计费模型 #RATE-SET ​

平台 → 设备:设置设备默认费率。

报文格式:#RATE-SET,idx,R=费率编号,E=电费参数,F=服务费参数

示例报文:

text
#RATE-SET,20,R=1,E=0800:400|2200:800|2400:500,F=T|300:200|600:400|2200:600
序号字段名类型必填示例值说明
1指令类型String是#RATE-SET固定指令名称
2指令序号 idxNumber是200~65535;响应与请求序号一致
3费率编号 RNumber是R=1非负整数;设备默认费率编号
4电费参数 EList是E=0800:400|2200:800|2400:500结束时间:电价;电价单位厘/度;字段定义见第 3.1 节
5服务费参数 FList是F=T|300:200|600:400|2200:600收费方式|功率上限:单价|…;T 为厘/小时,E 为厘/度;字段定义见第 3.1 节

设备 → 平台:返回设置结果。

报文格式:#RATE-SET,idx,result

示例报文:

text
#RATE-SET,20,1
序号字段名类型必填示例值说明
1指令类型String是#RATE-SET固定指令名称
2指令序号 idxNumber是200~65535;响应与请求序号一致
3执行结果 resultNumber是1返回码见本指令说明
result说明
1接受
2数据非法
3保留;数量非法统一返回 2
4保存失败,原默认费率不变
校验及计费项目规则
参数完整性R、E、F 均必填且只出现一次,按此顺序排列;每个价格条目恰有两个整数,以 : 分隔;拒绝空项、缺项、未知参数及多余字段
数量上限电费时段和服务费功率档分别为 1~10 项,按实际条目计算,不另传数量;两者数量可以不同
电费时间HHMM 严格递增,最后必须为 2400;其余时间小时为 0~23、分钟为 0~59,结束时间不得为 0000;各段左闭右开,24:00 后从首段循环
电费单价正整数厘/度;按各时段实际用电量分别计算,跨时段不使用同一电价计算整笔订单
服务费功率档上限为正整数 W 且严格递增;按当前计费区间功率匹配,等于上限归入该档;最高档须覆盖设备允许的端口功率范围,不允许无价格区间
服务费单价非负整数;T 按对应档位内的实际供电时间计费,单位厘/小时;E 按对应档位内的实际用电量计费,单位厘/度;功率变化不追溯重算之前费用
金额精度预付金额、余额和账单仍为整数分;费率按厘计算并保留不足一分的累计值,电费和服务费各自累计后向下取整到分,不逐个计费区间取整;余额按预付金额减两项累计分值计算
数值范围所有数值均为十进制整数,不超过 2147483647;不能混入负数、小数或非数字

#RATE-SET 设置设备默认费率,#RATE-QUERY 查询设备默认费率。仅开启时同时省略 R、E、F 的新订单采用默认费率;进行中订单继续使用原参数。默认费率保存成功才回复成功,失败不得替换旧配置;平台查询并比较完整内容。新格式使用同一套费率解析与校验;旧格式不再作为本版下发格式。


3.7 查询工作参数 #PARAM-QUERY ​

平台 → 设备:查询默认自停和设备安全参数。

报文格式:#PARAM-QUERY,idx

示例报文:

text
#PARAM-QUERY,11
序号字段名类型必填示例值说明
1指令类型String是#PARAM-QUERY固定指令名称
2指令序号 idxNumber是110~65535;响应与请求序号一致

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

报文格式:#PARAM-QUERY,idx,fullSwitch,fullPower,fullDelay,maxPower,totalMaxPower,maxMinutes,4

示例报文:

text
#PARAM-QUERY,11,1,10,60,15000,15000,900,4
序号字段名类型必填示例值说明
1指令类型String是#PARAM-QUERY固定指令名称
2指令序号 idxNumber是110~65535;响应与请求序号一致
3充满自停开关 fullSwitchNumber是10 关闭,1 开启
4充满功率 fullPowerNumber是10非负整数,单位 W
5充满延时 fullDelayNumber是60单位秒;启用充满自停时必须大于 0
6单端口过载阈值 maxPowerNumber是15000大于 0,单位 W;设备安全限制
7整桩过载阈值 totalMaxPowerNumber是15000大于 0,单位 W;设备安全限制
8最长时长 maxMinutesNumber是900大于 0,单位分钟;省略 S 的订单使用该默认值
9心跳间隔Number是4固定 4 分钟

订单已经固定的自停参数通过第 3.4 节查询。


3.8 设置工作参数 #PARAM-SET ​

平台 → 设备:设置默认自停与设备安全参数。

报文格式:#PARAM-SET,idx,fullSwitch,fullPower,fullDelay,maxPower,totalMaxPower,maxMinutes,4

示例报文:

text
#PARAM-SET,12,1,10,60,15000,15000,900,4
序号字段名类型必填示例值说明
1指令类型String是#PARAM-SET固定指令名称
2指令序号 idxNumber是120~65535;响应与请求序号一致
3充满自停开关 fullSwitchNumber是10 关闭,1 开启
4充满功率 fullPowerNumber是10非负整数,单位 W
5充满延时 fullDelayNumber是60单位秒;启用充满自停时必须大于 0
6单端口过载阈值 maxPowerNumber是15000大于 0,单位 W;设备安全限制
7整桩过载阈值 totalMaxPowerNumber是15000大于 0,单位 W;设备安全限制
8最长时长 maxMinutesNumber是900大于 0,单位分钟;省略 S 的订单使用该默认值
9心跳间隔Number是4固定 4 分钟

设备 → 平台:返回设置结果。

报文格式:#PARAM-SET,idx,result

示例报文:

text
#PARAM-SET,12,1
序号字段名类型必填示例值说明
1指令类型String是#PARAM-SET固定指令名称
2指令序号 idxNumber是120~65535;响应与请求序号一致
3执行结果 resultNumber是1返回码见本指令说明
result说明
1接受
2参数错误
3保存失败,原默认配置不变

其中充满自停和最长时长作为省略 S 时的订单默认参数;单端口、整桩功率上限仍为设备安全配置。订单内的 S 不修改这些默认值或安全限制。

#PARAM-SET,idx,result,1 接受、2 参数错误。开关 0/1,功率单位 W、延时秒、最长时长分钟。开启充满停止时延时必须大于 0;过载阈值和最长时长必须大于 0。心跳间隔固定 4。


3.9 远程重启 #REBOOT ​

平台 → 设备:请求重启。

报文格式:#REBOOT,idx

示例报文:

text
#REBOOT,13
序号字段名类型必填示例值说明
1指令类型String是#REBOOT固定指令名称
2指令序号 idxNumber是130~65535;响应与请求序号一致

设备 → 平台:接受重启。

报文格式:#REBOOT,idx,1

示例报文:

text
#REBOOT,13,1
序号字段名类型必填示例值说明
1指令类型String是#REBOOT固定指令名称
2指令序号 idxNumber是130~65535;响应与请求序号一致
3执行结果Number是1接受重启;播报后约 3 秒执行

当前 NCS10-A 仍按原有机制恢复有效进行中订单;已停止等待确认的订单不恢复供电。协议编号变更不等于固件已经刷入设备。


3.10 结束确认 #CHARGE-ACK ​

平台 → 设备:账单保存成功后确认结束。

报文格式:#CHARGE-ACK,idx,port,order

示例报文:

text
#CHARGE-ACK,14,1,ORD004
序号字段名类型必填示例值说明
1指令类型String是#CHARGE-ACK固定指令名称
2指令序号 idxNumber是140~65535;响应与请求序号一致
3端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0
4订单编号 orderString是ORD0041~30 个英文字母、数字、下划线或短横线;开始/停止请求不能为 0;无订单查询返回 0

设备 → 平台:返回订单位置是否已释放。

报文格式:#CHARGE-ACK,idx,result,port,order

示例报文:

text
#CHARGE-ACK,14,1,1,ORD004
序号字段名类型必填示例值说明
1指令类型String是#CHARGE-ACK固定指令名称
2指令序号 idxNumber是140~65535;响应与请求序号一致
3执行结果 resultNumber是1返回码见本指令说明
4端口号 portNumber是1从 1 开始,NCS10-A 为 1~10;错误响应中的无效端口为 0
5订单编号 orderString是ORD0041~30 个英文字母、数字、下划线或短横线;开始/停止请求不能为 0;无订单查询返回 0
result说明
1已清除,可接新订单
4参数错误
5订单不匹配或仍在充电
6清除保存失败,继续保留订单

空闲端口重复收到确认可返回 1,含义仅是端口已经空闲,不证明设备仍保存该历史订单。新订单开始后,迟到的旧订单确认不能清除新订单。平台应自动完成确认,不要求用户额外点击。


4 订单流程 ​

每端口只保留一个订单,包括已经停止但平台尚未确认的订单。不能覆盖旧订单。开始时固定本订单最终采用的完整费率和配置,不修改设备默认值或其他订单;携带完整费率时无须先发送 #RATE-SET。后续默认配置设置只影响新订单;本版不提供进行中订单充值、扣减余额或修改费率指令。

当前状态与请求设备处理
空闲,开始新订单全部参数和设备安全限制校验通过、完整订单保存成功后才供电并返回 1;保存失败返回 3,不开启供电
充电中,同端口、同订单、同金额且参数一致重复开始返回成功,不再次操作继电器、不加钱、不重置计费、不重复播报
充电中,同订单但金额、费率或配置参数不同开启响应返回 2,保留原订单;例如首次预付 1000 分,重发改为 2000 分
同端口其他订单占用开启响应返回 3,不影响原订单
旧订单已停止、尚未确认开启响应返回 3,包括重发原订单;不恢复供电;平台查询最终结果、保存账单并确认后,才用新订单号开启
平台主动停止或设备自动停止先关闭继电器,保留最终结果
平台保存最终账单后发送结束确认设备成功清除订单后回复确认成功,端口才可接受新订单

重复开启按解析后的完整费率和配置比较,0800 与 800 相同;省略参数沿用原订单值,不读取新默认值。返回 3 后查询端口:充电中保留原订单;已停止待确认则保存账单并确认;空闲也不代表保存或设备故障已恢复,不能仅凭空闲判定可以成功开启。

S 只配置最长时长和充满自停,不覆盖端口、整桩功率及过载保护,不启用其他自停功能;余额用完仍停止。首次开启成功播报“充电已开启, 预计最长充电时间900分钟”,时长取本订单 maxMinutes;金额模式没有固定最大电量。

正常用户主动结束就是停止流程,不需要另设“强制结清”。停止成功表示已经断电并保存结束结果;结束确认成功表示设备已释放订单位置。平台不得用结束确认代替停止。

设备重复收到停止请求,在尚未确认期间返回同一最终结果。确认后设备不再保留历史账单,历史查询由平台负责。断网不自动丢弃未确认结果。平台超时只能标为“结果待核验”,查询原端口和订单;不能因为 HTTP 发送成功就显示充电成功,也不能换新订单号重试。


5 实现与验证边界 ​

本次在 NCS10-A 当前每端口状态中保留结束结果,不按订单创建新存储项。实际实现仍使用 fskv,并非此前 V2 的固定容量文件方案。记录数量受十个端口限制,但不能据此宣称 Flash 最大物理占用已经验证。

正式首版是协议名称,不代表完成全部量产验证。主机流程测试与实机断网、断电、容量和继电器时序验证分别记录。接入步骤见开放协议接入流程。

旧固件已存在的订单继续保留原参数,不转换费率单位或服务费选档方式;缺少新费率编号的历史订单查询仍返回基础字段,不能伪造实际参数。新订单须携带完整费率,或先通过 #RATE-SET 保存新格式默认费率。