Skip to content

开放协议 vs 私有协议 对比文档

本文按当前 NCS 模板实现和后续协议调整目标整理:开放协议 V1.1、私有协议 V2.0.8。注册平台字段见 注册平台,旧版差异见 协议版本归档

1 当前处理流程

text
注册平台登录
  -> 解析 #LOGIN / #LOGIN-RETURN
  -> 保存业务 MQTT 参数、productCategory 和 testMode
  -> 连接业务 MQTT
  -> proto_router 根据 productCategory 选择协议适配器
  -> 协议适配器解析当前命名空间内的指令
  -> proto_ops 执行启停充、查询、自停确认、参数更新等通用动作
  -> 协议适配器按各自字段和返回码组包
  -> mqtt_transport 按 testMode 明文或加密发布业务报文

调整原则:

  • 两套协议保持指令命名空间独立,仍由 productCategory 隔离。
  • testMode = 1 只用于开放协议测试链路,私有协议仍保持 AES 业务链路。
  • 开放协议指令与私有协议指令改为一对一能力映射。

2 一对一指令映射

开放协议指令私有协议指令调整说明
#REGISTER#REGISTER现有私有注册指令保持不变
#HEARTBEAT#0开放心跳对应私有现有心跳,不新增替代指令
#AUTO-STOP#5开放自停对应私有现有自停,不新增替代指令
#CHARGE-START#1开放开启充电对应私有现有 #1#1 字段不修改
#CHARGE-STOP#2开放停止充电对应私有现有 #2#2 订单兼容策略不修改
#DEVICE-QUERY#4开放设备查询对应私有现有 #4
#PORT-QUERY#3开放端口查询对应私有现有 #3
#RATE-QUERY#RATE_QUERY私有协议新增独立费率读取指令
#RATE-SET#RATE_SET私有协议新增独立费率设置指令
#PARAM-QUERY#PARAM_QUERY私有协议新增独立工作参数读取指令;不复用、不修改 #7
#PARAM-SET#PARAM_SET私有协议新增独立工作参数设置指令;不修改 #1 会话参数
#REBOOT#REBOOT远程重启已有对应;私有响应格式保持不变
#DROP_POWER#DROP为私有现有掉电提醒在开放协议补齐对应新增指令
#BIND_DEVICE#A为私有现有绑定指令在开放协议补齐对应新增指令
#CARD_VERIFY#B为私有现有刷卡指令在开放协议补齐对应新增指令
#UPGRADE#UPGRADE为私有现有升级指令在开放协议补齐对应新增指令

#7 因功能与端口状态查询重复,已从正式一对一映射中移出,进入废弃/迁移期兼容。端口查询统一由开放 #PORT-QUERY 对应私有 #3#7#3fullTimer/idleTimer/overTimer,后端若仍依赖这些运行计时器,应迁移到 #PORT_RUNTIME_QUERY 或等价语义指令。


3 关键差异与修改建议

对比项私有协议现状开放协议现状功能与流程差异修改建议
费率读取配置现有 #1 在金额/计量类开启充电时携带费率,并作为本次会话配置使用;该逻辑不修改有独立 #RATE-QUERY,读取设备当前费率配置私有协议费率与订单启动强绑定,开放协议费率是设备级配置;私有平台无法单独确认设备当前费率私有协议新增 #RATE_QUERY,字段和响应语义与开放协议 #RATE-QUERY 对齐,并带 rateModelIdrateHash/配置摘要
费率编号与摘要业务注册 #REGISTER#0/#DROP/#7 可上报当前 rateModelId#RATE_* 返回 rateHash#REGISTER#HEARTBEAT#DEVICE-QUERY#RATE-* 均可携带或返回计费模型编号rateModelId 是平台运营侧费率模型编号,rateHash 是设备实际保存费率内容摘要;两套协议均可追踪设备级费率,私有运行中订单还会冻结会话 rateModelId通过私有 #RATE_SET/#RATE_QUERY 和开放 #RATE-SET/#RATE-QUERY 管理设备级费率,运行中订单不被后续设置覆盖
开启充电传参#1 支持完整历史字段,也支持基础字段轻量请求;缺失 orderId 时设备生成 D 前缀订单号#CHARGE-START,idx,chn,orderId,amount,订单编号和金额必填私有协议兼顾旧完整会话配置与新轻量入口,开放协议固定订单金额模型私有轻量格式使用设备级自停和费率配置;完整字段仍按旧位置解析,不允许半截配置
结束充电传参现有 #2,idx,deviceNo,chn[,orderId],订单编号为空或 0 时不校验#CHARGE-STOP,idx,chn,orderId,订单编号必填且必须匹配私有协议允许无订单停止,开放协议强调订单一致性和对账安全现有 #2 保持可选订单编号策略;如需强订单校验,应新增私有 #STOP_CHARGE,不改变 #2
充电类型现有 #1 使用 chargeType=0/2 表示计时类,1/3 表示金额/计量类,且 3 会转换为内部计量类处理当前开放协议没有显式充电类型,按金额订单启动私有协议支持多充电类型,开放协议当前固定为金额预付模型统一新增字段时只允许追加到新语义指令或开放协议尾部;现有私有 #1chargeType 取值和位置不修改
结束充电判断条件现有私有停止可由平台 #2、设备自停 #5、解绑 #A、掉电等触发;#2 无订单或订单匹配即可停止开放协议平台停止必须订单匹配;设备自停用 #AUTO-STOP 并等待平台确认私有停止入口更多,订单约束弱;开放停止链路更适合对账,但对旧平台容错较低底层统一为 端口有效 + 会话存在 + 停止来源 + 订单策略;私有现有指令沿用原订单策略,新增强校验能力走新指令
计费方式现有私有计费配置可随 #1 会话下发;服务费类型支持时间/电量等历史字段;费用摘要使用私有字段组开放协议通过 #RATE-SET 设置设备级费率,电费/服务费模式使用 E/T;费用通过查询、自停、停止响应返回私有更像“订单携带计费规则”,开放更像“设备持有计费模型”;两者费用字段和单位可复用,但配置入口不同统一底层 rateConfigbillingSnapshot;私有新增 #RATE_* 后可支持设备级费率,现有 #1 会话费率继续保持原语义

4 统一后的流程建议

text
明文报文
  -> 当前协议适配器按 productCategory 隔离命名空间
  -> commandMap 将协议指令映射为统一语义指令
  -> fieldSpec 校验字段位置、类型、单位和可选字段
  -> 转换为协议无关请求对象
  -> proto_ops / charge_engine / data_model 执行业务动作
  -> 适配器按当前协议返回码和字段格式组包

建议模块划分:

模块职责说明
protocols/open_adapter.lua开放协议指令表和字段映射保持开放协议文本独立
protocols/private_adapter.lua私有协议现有指令和新增语义化指令映射现有旧指令保持正式有效,新指令只补齐缺失能力
protocols/adapter_utils.lua字段清洗、端口数量、身份信息、费用快照辅助两套协议共用
core/proto_ops.lua协议无关启停充、查询、自停确认、参数应用不感知 #1#CHARGE-START 等文本指令
core/data_model.lua费率、工作参数、订单快照的数据模型统一计费配置和校验规则

5 实施步骤

5.1 私有协议线

  1. 锁定私有协议现有旧指令的既有字段顺序;V2.0.8 仅通过尾部追加方式扩展心跳、掉电和 #7 状态字段。
  2. 已在私有适配器中新增 #RATE_QUERY#RATE_SET#PARAM_QUERY#PARAM_SET 等语义化指令。
  3. 已支持私有 #1 轻量格式;强订单停止仍保持旧 #2 兼容策略,后续如需更严格模型再新增 #STOP_CHARGE
  4. #RATE_*#PARAM_* 使用设备级配置读写;费率读写带 rateModelIdrateHash/配置摘要确认,现有 #1 的会话配置继续只影响当前订单。
  5. 已补充静态回归检查并完成实机测试,暂未发现问题。

5.2 开放协议线

  1. 保持现有开放协议指令不改名。
  2. 已补充 #DROP_POWER#BIND_DEVICE#CARD_VERIFY#UPGRADE,分别对应私有现有 #DROP/#A/#B/#UPGRADE
  3. #CHARGE-START 保持 5 字段启动格式,不追加费率配置、rateModelIdrateHash;如后续确需更复杂启动模型,应新增语义化指令或可选断言字段,并保持基础 5 字段兼容。
  4. 继续保持费率和工作参数为独立设备级配置,不把完整费率塞入开启充电指令;启充前由平台通过 #RATE-QUERY/#RATE-SET 完成设备级费率同步。
  5. 补充开放协议 golden packet:新增刷卡、绑定、掉电、升级,以及启动尾部扩展缺省行为。

6 风险与兼容保障

风险点影响保障措施
误改私有旧指令旧平台无法解析或误停充#7 废弃/迁移期兼容策略外,私有现有旧指令不改名、不删除、不调整字段;新增能力一律走 #*
新增指令被理解为替代旧指令平台迁移误判,导致兼容风险文档和代码中明确“新增只补齐能力,不替代旧指令”
开放与私有同名指令混淆平台误发后被错误解析继续由 productCategory 隔离协议适配器
启动字段扩展老开放平台只发 5 字段#CHARGE-START 基础协议保持 5 字段;费率同步不通过启充字段扩展实现
费率来源冲突会话费率与设备级费率不一致#RATE_SET/#RATE-SET 只更新设备级费率并影响后续订单;旧 #1 会话费率仅作用于当前订单,且通过 rateHash 或配置摘要确认设备级配置
订单校验策略差异停止充电对账异常新语义指令强订单校验,旧私有 #2 保留弱校验兼容