OCPP 1.6 协议详解:StopTransaction 停止交易指令

张开发
2026/4/20 4:09:44 15 分钟阅读

分享文章

OCPP 1.6 协议详解:StopTransaction 停止交易指令
OCPP 1.6 协议详解StopTransaction 停止交易指令充电交易结束与数据上报一、指令概述StopTransaction停止交易是OCPP 1.6协议中用于正式结束充电交易的核心指令。当用户完成充电或因其他原因需要停止充电时充电桩通过此指令通知中央系统交易已经结束并上报最终的电表读数和交易数据。1.1 指令作用**交易结束**正式结束一个充电交易**数据上报**上报最终的电表读数和交易时间**原因说明**说明停止充电的原因**数据传输**传输交易期间的电表读数数据**缓存更新**更新本地授权缓存1.2 触发时机用户刷卡或扫码停止充电用户拔出充电枪远程停止充电RemoteStopTransaction充电桩检测到车辆断开连接充电桩执行重置操作紧急停止按钮被按下充电桩检测到故障二、指令详解2.1 StopTransaction.req请求充电桩向中央系统发送的停止交易请求包含以下字段字段名字段说明格式 / 单位填写规则meterStop交易结束时的电表读数单位瓦时Wh从主电表或连接器电表读取timestamp交易结束的日期和时间ISO 8601 格式示例2024-01-15T12:30:00Z建议使用 UTC 时间transactionId交易事务 ID字符串 / 数字必须与 StartTransaction.conf 中返回的 transactionId 一致reason停止充电原因枚举字符串正常停止用户刷卡可省略默认为 Local非正常停止必须填写正确值idTag停止交易的标识符身份标识字符串充电桩主动停止如重置可省略知晓停止标识时应包含transactionData交易期间电表读数数据同 MeterValues.req 数据结构可包含多个 MeterValue 元素用于计费与数据分析JSON示例[ 2, 12345, StopTransaction, { meterStop: 1244567, timestamp: 2024-01-15T12:30:00Z, transactionId: 12345, reason: Local, idTag: A1B2C3D4, transactionData: [ { timestamp: 2024-01-15T10:30:00Z, sampledValue: [ { value: 1234567, context: Transaction.Begin, measurand: Energy.Active.Import.Register, unit: Wh } ] }, { timestamp: 2024-01-15T12:30:00Z, sampledValue: [ { value: 1244567, context: Transaction.End, measurand: Energy.Active.Import.Register, unit: Wh } ] } ] } ]2.2 StopTransaction.conf响应中央系统对停止交易请求的响应包含以下字段idTagInfo结构注意idTagInfo是可选的因为交易可能在没有标识符的情况下停止如重置。JSON示例[3, 12345, {idTagInfo: {status: Accepted,expiryDate: 2024-12-31T23:59:59Z}}]三、工作流程3.1 正常停止交易流程3.2 时序图3.3 远程停止交易流程四、重要注意事项4.1 停止时的授权验证重要规则如果停止充电时使用的idTag与开始充电时相同**不得**发送Authorize.req只有当停止标识符与开始标识符不同时才需要发送Authorize.req示例开始充电idTag A1B2C3D4停止充电idTag A1B2C3D4 → 不发送Authorize.req停止充电idTag E5F6G7H8 → 发送Authorize.req4.2 中央系统的限制重要中央系统不能阻止交易停止。它只能确认收到StopTransaction.req返回停止交易时使用的idTag的信息该信息应用于更新授权缓存如果实现4.3 充电枪解锁正常停止如果充电枪不是永久连接的充电桩应解锁充电枪作为正常交易终止的一部分配置键UnlockConnectorOnEVSideDisconnect车辆端断开时是否解锁充电枪StopTransactionOnEVSideDisconnect车辆端断开时是否停止交易优先级如果StopTransactionOnEVSideDisconnect为false则优先于UnlockConnectorOnEVSideDisconnect换句话说当StopTransactionOnEVSideDisconnect为false时充电枪在车辆端断开时始终保持锁定4.4 车辆端断开处理场景一StopTransactionOnEVSideDisconnect true车辆端断开连接发送StatusNotification状态为Finishing发送StopTransaction.req如果UnlockConnectorOnEVSideDisconnect为true解锁充电枪场景二StopTransactionOnEVSideDisconnect false车辆端断开连接发送StatusNotification状态为SuspendedEV**不**发送StopTransaction.req充电枪保持锁定如果车辆重新连接允许继续充电如果UnlockConnectorOnEVSideDisconnect为false充电枪保持锁定直到用户出示标识符4.5 交易数据transactionData用途提供交易使用详情用于计费目的包含与MeterValues.req相同的数据结构配置键StopTxnSampledData包含在transactionData中的采样测量值StopTxnAlignedData包含在transactionData中的时钟对齐周期测量值StopTxnSampledDataMaxLengthStopTxnSampledData的最大元素数StopTxnAlignedDataMaxLengthStopTxnAlignedData的最大元素数如果配置键为空字符串充电桩不应在StopTransaction.req中放置电表读数4.6 缓存更新收到StopTransaction.conf后如果idTag不在本地授权列表中充电桩应使用响应中的IdTagInfo更新授权缓存。4.7 离线行为离线时充电桩可以本地停止交易将StopTransaction.req排队网络恢复后发送排队的消息确保交易相关消息按时间顺序发送配置键TransactionMessageAttempts重试交易相关消息的次数TransactionMessageRetryInterval重试间隔秒五、实际应用场景5.1 场景一正常刷卡停止用户刷卡停止充电停止idTag与开始idTag相同不发送Authorize.req充电桩读取结束电表读数1244567 Wh发送StopTransaction.reqreason Local中央系统响应充电桩解锁充电枪交易结束5.2 场景二不同用户停止用户A刷卡开始充电用户B刷卡停止充电发送Authorize.req验证用户B验证通过发送StopTransaction.reqidTag 用户B的idTag中央系统响应充电桩解锁充电枪交易结束5.3 场景三远程停止用户通过手机APP停止充电中央系统发送RemoteStopTransaction.req充电桩接受请求停止充电发送StopTransaction.reqreason Remote中央系统响应充电桩解锁充电枪交易结束5.4 场景四车辆断开配置StopTransactionOnEVSideDisconnect true充电进行中用户拔出充电枪充电桩检测到断开发送StatusNotification状态 Finishing发送StopTransaction.reqreason EVDisconnected中央系统响应充电桩解锁充电枪交易结束5.5 场景五紧急停止充电进行中用户按下紧急停止按钮充电桩立即停止供电发送StopTransaction.reqreason EmergencyStop中央系统响应充电桩保持锁定状态需要手动复位5.6 场景七离线停止充电桩离线用户刷卡停止充电充电桩本地停止交易将StopTransaction.req排队网络恢复发送排队的StopTransaction.req中央系统响应交易数据同步完成六、最佳实践6.1 电表读数处理**精确读取**确保电表读数的准确性**时间同步**确保timestamp与电表读数时间一致**数据验证**验证meterStop meterStart**单位统一**统一使用Wh瓦时作为单位6.2 原因说明**准确记录**准确记录停止原因**默认值**正常停止时可以省略默认为Local**异常处理**异常停止时必须设置正确的reason**日志记录**详细记录所有停止事件6.3 数据传输**完整数据**尽可能传输完整的交易数据**采样策略**合理配置采样间隔**数据压缩**考虑数据压缩以减少传输量**离线缓存**离线时缓存交易数据6.4 用户体验**快速响应**尽快处理停止请求**清晰提示**显示明确的停止状态**自动解锁**正常停止后自动解锁充电枪**异常处理**提供清晰的错误提示七、常见问题Q1: StopTransaction失败怎么办A:检查网络连接检查中央系统是否在线查看错误日志如果是离线模式将消息排队网络恢复后重试Q2: transactionData是必须的吗A:不是必须的。但如果配置了StopTxnSampledData或StopTxnAlignedData应该包含相应的数据。如果配置键为空字符串则不应包含任何电表读数。Q3: 如何处理车辆端断开A:根据StopTransactionOnEVSideDisconnect配置键决定如果为true发送StopTransaction.req如果为false发送StatusNotification状态为SuspendedEV不停止交易Q4: 为什么需要发送idTagA:idTag用于验证停止交易的用户权限更新授权缓存支持不同用户开始和停止同一交易的场景Q5: 离线时如何处理StopTransactionA:离线时充电桩可以本地停止交易将StopTransaction.req排队。网络恢复后按时间顺序发送排队的消息。八、总结StopTransaction是OCPP 1.6协议中正式结束充电交易的关键指令。正确实现StopTransaction指令需要注意**时机准确**在合适的时机发送停止请求**数据准确**确保meterStop和timestamp的准确性**原因说明**准确记录和说明停止原因**授权验证**正确处理不同用户停止的场景**数据传输**合理传输交易数据**离线支持**实现健壮的离线处理机制**用户体验**提供良好的停止体验通过合理实现StopTransaction指令可以确保充电交易的准确记录和可靠结束为计费、统计和分析提供完整的数据支持。---相关阅读OCPP1.6协议字段解析 - ChangeAvailability 平台控制充电桩或指定枪口的可用状态-CSDN博客OCPP 1.6 协议详解BootNotification 启动通知指令-CSDN博客深度解析 OCPP 协议 Uplink 命令处理器OcppUplinkCmdExe 继承类设计与实践-CSDN博客参考文档OCPP 1.6 JSON Schemas | OCPP SpecEND如果觉得这份基础知识点总结清晰别忘了动动小手点个赞再关注一下呀 后续还会分享更多有关开发问题的干货技巧同时一起解锁更多好用的功能少踩坑多提效 你的支持就是我更新的最大动力咱们下次分享再见呀

更多文章