基于S7-1200 PLC十层电梯控制系统。 电梯十层控制系统。 十层升降机控制系统 带解释的梯形图接线图原理图图纸,io分配,组态画面
十层电梯控制系统用S7-1200 PLC做起来其实挺有意思的,特别是楼层逻辑和方向判断这块。先说说硬件配置,数字量输入模块至少需要16个点接楼层按钮(10个内呼+6个外呼上下),输出点得控制轿厢电机、开关门、楼层显示这些。
看这个楼层状态监测的梯形图:
//楼层位置解码 L "Encoder_Value" CMP >= 1 = "Floor1_Light" //1楼指示灯 CMP >= 2800 = "Floor2_Light" //编码器每层对应2800脉冲 ...(类似结构延续到10楼)这里用旋转编码器的脉冲值做楼层定位,注意每个楼层要留出200脉冲的缓冲区间,防止电梯刚好卡在两楼层之间的时候指示灯乱跳。我之前调试时就遇到过轿厢轻微晃动导致楼层显示疯狂闪烁的情况,后来在比较指令里加了滞回区间才解决。
方向控制是核心难点,看这段关键代码:
//运行方向判断 L #CurrentFloor L #TargetFloor >I = "Down_CMD" //目标层低于当前层发下行指令 <I = "Up_CMD" //目标层高于当前层发上行指令但实际要考虑多个呼叫请求的优先级,比如电梯上行时要响应所有上方请求,下行同理。这里用了个取巧的办法——在数据块里建了个楼层请求数组,实时扫描最高和最低有效请求:
//扫描最高请求层 FOR #i := 10 DOWNTO 1 DO L "Call_Request"[#i] <> 0 JNB _next TAK T #HighestFloor _next: NOP 0 END_FOR //扫描最低请求层同理...组态画面设计建议把楼层按钮做成两种状态:绿色常态和红色激活态。用HMI的图形元素直接绑定到PLC的M寄存器,比如:
<Button Address="M10.1" Text="3▲"> <States> <State Value="0" BackColor="#00FF00"/> <State Value="1" BackColor="#FF0000"/> </States> </Button>急停回路必须独立于PLC程序,直接在控制回路里串接急停按钮和门锁开关。安全回路建议用硬线连接,见过有项目把安全信号接入PLC结果程序跑飞出过事故。接线时注意门机控制输出要加中间继电器,Q0.0接开门继电器,Q0.1接关门继电器,最好留0.5秒的重叠时间防止机械冲击。
调试时最头疼的是楼层平层精度,后来在OB1里加了PID闭环控制:
"PID_Compact_DB"(REQ:=#Enable, MANUAL:=false, CYCLE:=T#100MS, INPUT_PER:=#ActualPosition, SETPOINT:=#TargetPosition, OUTPUT_PER=>#MotorPWM);这个PID块直接控制变频器的模拟量输出,注意设定值变化斜率要限制在每秒1.5层左右,不然急加速会让乘客有不适感。最后在HMI上做了个隐藏的调试界面,长按5楼按钮3秒调出,能实时修改PID参数和查看故障记录,现场维护方便多了。