1. 项目背景与核心挑战
去年参与某智慧园区无人车配送系统升级时,我们遇到了一个棘手问题:当配送目标位于不同楼层时,车辆需要与各类电梯控制系统交互,但不同品牌电梯的通信协议差异巨大。西门子、三菱、日立等主流厂商的梯控接口五花八门,有的用Modbus RTU,有的走CAN总线,还有的采用私有TCP协议。更麻烦的是,电梯运行状态(如门开关、楼层位置、故障报警)的采集方式也各不相同。
这个"协议地狱"直接导致每次对接新电梯都要重写通信模块,项目进度被严重拖累。最夸张的一次,为兼容某国产电梯的特殊校验机制,团队花了整整两周调试通信超时问题。这促使我们设计了一套通用型梯控交互架构,核心目标有三个:
- 协议解耦:将业务逻辑与底层通信隔离
- 状态统一:抽象标准化电梯状态模型
- 容错处理:确保跨层配送的可靠性
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 架构设计思路
2.1 分层解耦设计
整个系统采用五层架构,自下而上分别是:
- 物理接口层:处理RS485/以太网等硬件连接
- 协议适配层:转换不同厂商协议为统一中间格式
- 状态抽象层:映射原始数据到标准状态机
- 业务逻辑层:执行呼叫、门控等操作
- 调度决策层:规划跨层配送路径
关键创新点在协议适配层采用插件式设计。每个电梯品牌对应一个动态加载的协议驱动(.so文件),通过配置文件声明支持的指令集。例如日立电梯的驱动配置片段:
xml复制<driver name="hitachi_can">
<command code="0x21" name="call_up" format="uint8:floor"/>
<command code="0x22" name="call_down" format="uint8:floor"/>
<response code="0xA1" name="door_status" format="bit:0=open"/>
</driver>
2.2 状态机建模
电梯行为本质是有限状态机(FSM),我们定义了7个核心状态:
- 空闲(IDLE)
- 门开(DOOR_OPEN)
- 门关(DOOR_CLOSED)
- 上行(UP)
- 下行(DOWN)
- 故障(FAULT)
- 检修(MAINTENANCE)
