1. 项目背景与挑战
凌晨两点的实验室里,六部电梯的仿真界面在显示器上闪烁着蓝光。这是我们团队为2021年西门子杯工业自动化挑战赛开发的六部十层电梯控制系统,项目代号"电梯侠"。作为机械专业的学生,这次比赛让我们完成了从机械制图到PLC编程的硬核转型。
这个项目的核心挑战在于实现六部电梯的高效协同调度。与普通单梯控制不同,多电梯系统需要解决几个关键问题:
- 如何合理分配新到达的乘梯请求?
- 怎样避免多部电梯响应同一楼层造成的资源浪费?
- 当系统负载激增时,如何防止电梯群出现"死锁"或"饥饿"现象?
我们使用的硬件平台是西门子S7-1200 PLC,编程环境为TIA Portal V15。选择这个组合是因为它既满足比赛要求,又具有良好的仿真调试功能——这对我们这些PLC新手至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 状态机模型
每部电梯都被建模为一个独立的状态机,包含以下基本状态:
- 空闲态(IDLE):电梯静止且无任务
- 上行态(UP):电梯正在向上运行
- 下行态(DOWN):电梯正在向下运行
- 停靠态(DOCKED):电梯停靠楼层并开门
状态转换遵循严格的优先级规则:
- 当前方向上的目标楼层优先响应
- 同方向的外部呼叫次优先
- 反向呼叫最后处理
这种设计保证了电梯运行的高效性,避免了无谓的方向切换。
2.2 数据结构设计
我们为每部电梯定义了状态结构体:
st复制TYPE ELEVATOR_STATUS :
STRUCT
CurrentFloor : INT; // 当前楼层(1-10)
Direction : INT; // 运行方向(-1/0/+1)
TargetFloors : ARRAY[1..10] OF BOOL; // 内部目标楼层
CallUp : ARRAY[1..10] OF BOOL; // 上行外呼
CallDown : ARRAY[1..10] OF BOOL; // 下行外呼
DoorStatus : BOOL; // 门状态(开/关)
Overload : BOOL; // 超载报警
Moving : BOOL;
