mirror of
https://gitee.com/san-bing/JChargePointProtocol
synced 2026-07-18 04:37:55 +08:00
20 KiB
20 KiB
绿能协议v3.40核心架构设计
**本文档引用的文件** - [LvnengV340ProtocolBootstrap.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/v340/LvnengV340ProtocolBootstrap.java) - [LvnengProtocolMessageProcessor.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/LvnengProtocolMessageProcessor.java) - [LvnengProtocolConstants.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/LvnengProtocolConstants.java) - [ProtocolBootstrap.java](file://jcpp-protocol-api/src/main/java/sanbing/jcpp/protocol/ProtocolBootstrap.java) - [ProtocolMessageProcessor.java](file://jcpp-protocol-api/src/main/java/sanbing/jcpp/protocol/ProtocolMessageProcessor.java) - [LvnengUplinkMessage.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/LvnengUplinkMessage.java) - [LvnengDwonlinkMessage.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/LvnengDwonlinkMessage.java) - [LvnengUplinkCmdExe.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/LvnengUplinkCmdExe.java) - [LvnengDownlinkCmdExe.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/LvnengDownlinkCmdExe.java) - [AbstractLvnengCmdExe.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/AbstractLvnengCmdExe.java) - [LvnengV340LoginULCmd.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/v340/cmd/LvnengV340LoginULCmd.java) - [LvnengV340RemoteStopDLCmd.java](file://jcpp-protocol-lvneng/src/main/java/sanbing/jcpp/protocol/lvneng/v340/cmd/LvnengV340RemoteStopDLCmd.java) - [TcpListener.java](file://jcpp-protocol-api/src/main/java/sanbing/jcpp/protocol/listener/tcp/TcpListener.java) - [ProtocolCommandRouter.java](file://jcpp-protocol-api/src/main/java/sanbing/jcpp/protocol/routing/ProtocolCommandRouter.java)目录
引言
绿能协议v3.40是JCPP(充电点协议平台)中的一个重要组成部分,专门用于处理绿能品牌的充电设备通信协议。该协议采用模块化设计,通过继承和组合模式实现了高度可扩展的架构。本文档将深入分析其核心架构设计,包括协议启动器、消息处理器、帧结构设计以及组件间的协作机制。
项目结构概览
绿能协议v3.40的项目结构遵循分层架构原则,主要分为以下几个层次:
graph TB
subgraph "应用层"
Bootstrap[LvnengV340ProtocolBootstrap<br/>协议启动器]
end
subgraph "业务层"
Processor[LvnengProtocolMessageProcessor<br/>消息处理器]
Constants[LvnengProtocolConstants<br/>协议常量]
end
subgraph "命令层"
UplinkCmd[LvnengUplinkCmdExe<br/>上行命令基类]
DownlinkCmd[LvnengDownlinkCmdExe<br/>下行命令基类]
AbstractCmd[AbstractLvnengCmdExe<br/>协议基础类]
end
subgraph "数据模型层"
UplinkMsg[LvnengUplinkMessage<br/>上行消息模型]
DownlinkMsg[LvnengDwonlinkMessage<br/>下行消息模型]
end
subgraph "基础设施层"
BaseBootstrap[ProtocolBootstrap<br/>基础启动器]
BaseProcessor[ProtocolMessageProcessor<br/>基础消息处理器]
Router[ProtocolCommandRouter<br/>命令路由器]
end
Bootstrap --> Processor
Processor --> UplinkCmd
Processor --> DownlinkCmd
UplinkCmd --> AbstractCmd
DownlinkCmd --> AbstractCmd
Processor --> UplinkMsg
Processor --> DownlinkMsg
Bootstrap --> BaseBootstrap
Processor --> BaseProcessor
Processor --> Router
图表来源
核心组件架构
组件关系图
绿能协议v3.40的核心架构采用了经典的分层设计模式,各组件之间通过接口进行解耦:
classDiagram
class ProtocolBootstrap {
<<abstract>>
+ProtocolContext protocolContext
+ProtocolCfg protocolCfg
+Listener listener
+Forwarder forwarder
+init() void
+destroy() void
#getProtocolName()* String
#_init()* void
#_destroy()* void
#messageProcessor()* ProtocolMessageProcessor
}
class LvnengV340ProtocolBootstrap {
+String PROTOCOL_NAME
+getProtocolName() String
+_init() void
+_destroy() void
+messageProcessor() LvnengProtocolMessageProcessor
}
class ProtocolMessageProcessor {
<<abstract>>
+Forwarder forwarder
+ProtocolContext protocolContext
+uplinkHandleAsync() void
+downlinkHandle() void
#uplinkHandle()* void
#doDownlinkHandle()* void
}
class LvnengProtocolMessageProcessor {
-ProtocolCommandRouter~LvnengUplinkCmdExe~ uplinkRouter
-ProtocolCommandRouter~LvnengDownlinkCmdExe~ downlinkRouter
-DownlinkCmdConverter downlinkCmdConverter
+uplinkHandle() void
+doDownlinkHandle() void
-exeCmd() void
}
class LvnengUplinkCmdExe {
<<abstract>>
+execute() void
#uplinkMessageBuilder() Builder
}
class LvnengDownlinkCmdExe {
<<abstract>>
+execute() void
}
class AbstractLvnengCmdExe {
#encode() byte[]
#encodeAndWriteFlush() void
}
ProtocolBootstrap <|-- LvnengV340ProtocolBootstrap
ProtocolMessageProcessor <|-- LvnengProtocolMessageProcessor
LvnengUplinkCmdExe <|-- AbstractLvnengCmdExe
LvnengDownlinkCmdExe <|-- AbstractLvnengCmdExe
LvnengProtocolMessageProcessor --> LvnengUplinkCmdExe
LvnengProtocolMessageProcessor --> LvnengDownlinkCmdExe
图表来源
章节来源
协议启动器设计
LvnengV340ProtocolBootstrap核心实现
LvnengV340ProtocolBootstrap作为绿能协议v3.40的主要入口点,继承自ProtocolBootstrap抽象类,并实现了协议特有的初始化和销毁逻辑。
继承关系与方法实现
协议启动器通过以下方式实现核心功能:
- 协议名称管理:通过
getProtocolName()方法返回协议标识 - 初始化逻辑:重写了
_init()方法,目前为空实现 - 资源清理:重写了
_destroy()方法,目前为空实现 - 消息处理器创建:通过
messageProcessor()方法创建具体的处理器实例
启动流程时序图
sequenceDiagram
participant App as 应用程序
participant Bootstrap as LvnengV340ProtocolBootstrap
participant Base as ProtocolBootstrap
participant Listener as TcpListener
participant Forwarder as Forwarder
participant Processor as LvnengProtocolMessageProcessor
App->>Bootstrap : 实例化启动器
App->>Base : 调用init()
Base->>Base : 加载协议配置
Base->>Forwarder : 创建转发器
Base->>Listener : 创建TCP监听器
Base->>Bootstrap : 调用_init()
Bootstrap-->>Base : 初始化完成
Base-->>App : 启动成功
Note over App,Processor : 协议运行阶段
App->>Listener : 接收客户端连接
Listener->>Processor : 处理上行消息
Processor->>Processor : 解析协议帧
Processor->>Processor : 路由命令处理
Processor-->>App : 返回处理结果
图表来源
章节来源
消息处理机制
LvnengProtocolMessageProcessor核心功能
LvnengProtocolMessageProcessor是绿能协议的消息处理中心,负责处理上行和下行消息流。它继承自ProtocolMessageProcessor,并实现了协议特定的消息解析和路由逻辑。
消息处理架构
flowchart TD
Start([接收原始消息]) --> ParseHeader[解析帧头信息]
ParseHeader --> ValidateLength{验证消息长度}
ValidateLength --> |长度异常| LogWarning[记录警告日志]
ValidateLength --> |长度正常| ExtractBody[提取消息体]
ExtractBody --> VerifyChecksum[验证校验和]
VerifyChecksum --> ChecksumValid{校验和有效?}
ChecksumValid --> |无效| LogError[记录错误日志]
ChecksumValid --> |有效| BuildMessage[构建消息对象]
BuildMessage --> RouteCommand[路由命令处理]
RouteCommand --> ExecuteCmd[执行命令]
ExecuteCmd --> SendResponse[发送响应]
LogWarning --> End([处理结束])
LogError --> End
SendResponse --> End
图表来源
上行消息处理流程
上行消息处理包含以下关键步骤:
- 帧头解析:读取起始符、长度、加密标识、序列号和命令码
- 长度验证:确保消息长度符合最小要求
- 消息体提取:读取实际的数据内容
- 校验和验证:使用CRC算法验证数据完整性
- 消息对象构建:封装为LvnengUplinkMessage对象
- 命令路由:根据命令类型路由到相应的处理器
下行消息处理流程
下行消息处理采用统一的处理模式:
- 命令转换:将通用命令转换为协议特定命令
- 消息构建:创建LvnengDwonlinkMessage对象
- 命令执行:调用相应的命令处理器
- 响应发送:将处理结果发送给客户端
章节来源
协议帧结构设计
帧结构定义
绿能协议v3.40采用固定格式的帧结构,确保消息的可靠传输和解析:
| 字段 | 长度(字节) | 描述 |
|---|---|---|
| 起始符 | 2 | 固定值0xAAF5,标识帧开始 |
| 长度 | 2 | 包含整个帧的总长度(小端序) |
| 加密标识 | 1 | 0x10表示加密,0x00表示明文 |
| 序列号 | 1 | 用于消息顺序控制 |
| 命令码 | 2 | 指示消息类型(小端序) |
| 数据域 | 变长 | 实际消息内容 |
| 校验和 | 1 | CRC8校验值 |
帧结构示例
+------------------+------------------+------------------+------------------+
| 起始符 | 长度 | 加密标识 | 序列号 | 命令码 |
| (2字节) | (2字节) | (1字节) | (1字节) | (2字节) |
+------------------+------------------+------------------+------------------+
| |
| 数据域 |
| |
+---------------------------------------------------------------+
| 校验和 |
| (1字节) |
+--------------+
校验和算法
协议采用CRC8算法进行数据完整性验证:
- 校验和计算:对命令码和数据域进行CRC8计算
- 校验和验证:接收端重新计算并比较
- 错误处理:校验失败时记录日志并丢弃消息
章节来源
命令路由系统
ProtocolCommandRouter设计
ProtocolCommandRouter提供了基于协议名和命令字的智能路由功能,支持多版本协议的统一管理:
classDiagram
class ProtocolCommandRouter {
-Map~String,T~ executorMap
+ProtocolCommandRouter(scanBaseClass, executorFilter)
+getExecutor(protocolName, cmd) T
-initializeRoutes() void
-registerExecutor() void
-buildKey() String
}
class ProtocolCmd {
<<annotation>>
+int value()
+String[] protocolNames()
}
class LvnengUplinkCmdExe {
<<abstract>>
+execute() void
}
class LvnengV340LoginULCmd {
+execute() void
}
ProtocolCommandRouter --> LvnengUplinkCmdExe
LvnengUplinkCmdExe --> ProtocolCmd
LvnengV340LoginULCmd --|> LvnengUplinkCmdExe
ProtocolCmd --> LvnengV340LoginULCmd
图表来源
命令执行器层次结构
classDiagram
class AbstractLvnengCmdExe {
#byte[] encode()
#encodeAndWriteFlush()
#DOWNLINK_CMD_CONVERTER
#LVNENG_HEAD
#LVNENG_ENCRYPTION_FLAG
}
class LvnengUplinkCmdExe {
<<abstract>>
+execute() void
#uplinkMessageBuilder()
}
class LvnengDownlinkCmdExe {
<<abstract>>
+execute() void
}
class LvnengV340LoginULCmd {
+execute() void
}
class LvnengV340RemoteStopDLCmd {
+execute() void
}
AbstractLvnengCmdExe <|-- LvnengUplinkCmdExe
AbstractLvnengCmdExe <|-- LvnengDownlinkCmdExe
LvnengUplinkCmdExe <|-- LvnengV340LoginULCmd
LvnengDownlinkCmdExe <|-- LvnengV340RemoteStopDLCmd
图表来源
命令处理时序图
sequenceDiagram
participant Session as TcpSession
participant Processor as LvnengProtocolMessageProcessor
participant Router as ProtocolCommandRouter
participant Executor as 命令执行器
participant Forwarder as Forwarder
Session->>Processor : uplinkHandleAsync()
Processor->>Processor : 解析消息帧
Processor->>Router : getExecutor(protocolName, cmd)
Router-->>Processor : 返回命令执行器
Processor->>Executor : execute(session, message, context)
Executor->>Executor : 处理业务逻辑
Executor->>Forwarder : 发送上行消息
Forwarder-->>Session : 返回处理结果
图表来源
章节来源
组件交互时序
协议初始化时序
sequenceDiagram
participant App as 应用程序
participant Bootstrap as LvnengV340ProtocolBootstrap
participant Config as ProtocolContext
participant Forwarder as Forwarder
participant Listener as TcpListener
participant Processor as LvnengProtocolMessageProcessor
App->>Bootstrap : 实例化
App->>Bootstrap : init()
Bootstrap->>Config : loadConfig(protocolName)
Config-->>Bootstrap : 返回配置信息
Bootstrap->>Forwarder : 创建转发器
Forwarder-->>Bootstrap : 转发器实例
Bootstrap->>Listener : 创建TCP监听器
Listener->>Processor : 创建消息处理器
Processor->>Processor : 初始化命令路由器
Processor-->>Listener : 处理器就绪
Listener-->>Bootstrap : 监听器就绪
Bootstrap->>Bootstrap : _init()
Bootstrap-->>App : 初始化完成
Note over App,Processor : 协议服务已启动
图表来源
消息处理时序
sequenceDiagram
participant Client as 客户端
participant Listener as TcpListener
participant Processor as LvnengProtocolMessageProcessor
participant Router as ProtocolCommandRouter
participant CmdExe as 命令执行器
participant Forwarder as Forwarder
Client->>Listener : 发送原始消息
Listener->>Processor : uplinkHandleAsync()
Processor->>Processor : 解析协议帧
Processor->>Processor : 验证校验和
Processor->>Router : getExecutor(protocolName, cmd)
Router-->>Processor : 返回执行器
Processor->>CmdExe : execute(session, message, context)
CmdExe->>CmdExe : 处理业务逻辑
CmdExe->>Forwarder : sendMessage(uplinkQueueMessage)
Forwarder-->>Client : 返回处理结果
Note over Client,Forwarder : 异步处理流程
图表来源
章节来源
性能优化考虑
异步处理机制
协议采用异步处理模式,通过线程池管理消息处理:
- 线程池隔离:使用分片线程池避免资源竞争
- 异步消息处理:上行消息处理采用异步模式
- 内存管理:及时释放ByteBuf资源
内存优化策略
- 对象复用:重用消息对象减少GC压力
- 缓冲区管理:合理设置TCP缓冲区大小
- 序列号管理:维护序列号状态避免重复
并发控制
- 无锁设计:使用ConcurrentHashMap实现线程安全
- 原子操作:利用CAS操作提高并发性能
- 批量处理:支持批量消息处理
总结
绿能协议v3.40的核心架构展现了优秀的软件设计原则:
设计亮点
- 模块化设计:清晰的分层架构,职责分离明确
- 可扩展性:基于注解的命令路由系统,易于添加新命令
- 可靠性:完善的错误处理和校验机制
- 性能优化:异步处理和资源管理策略
架构优势
- 高内聚低耦合:各组件职责单一,依赖关系清晰
- 可测试性:良好的接口设计便于单元测试
- 可维护性:清晰的代码结构和文档
- 可监控性:完整的健康检查和统计指标
该架构为绿能协议v3.40提供了稳定、高效、可扩展的通信基础,能够满足现代充电站系统的复杂需求。