设计题目:电梯控制系统设计者:040074**日期:2009-9-16目录一、课题设计要求分析...........................................................................................................3二、程序设计思想:...............................................................................................................3三、电梯流程图.......................................................................................................................7四、状态转换图.....................................................................................................................10五、程序解释.........................................................................................................................10六、设计思想.........................................................................................................................43七、程序调试(仿真波形解释及图).................................................................................43八、结论.................................................................................................................................47一、课题设计要求分析本课题要求设计一个电梯控制系统,传统的电梯控制系统仅仅要求实现对一栋电梯的控制,而本题要求设计一个实现两栋电梯联动的基于VHDL的电梯控制系统。具体要求如下:需要大楼为4层,2部电梯,每部电梯内部都有如下按键:1-4楼的按键选择,开门键,关门键,报警键。每部电梯的每层楼外面都有上楼键和下楼键(1楼只有上楼键,六楼只有下楼键)。电梯的设计参照日常生活中电梯实际运行规律设计。两部电梯之间互相联动,即同时按下任何一部电梯的外部向上或向下键之后,两部电梯同时接受此指令,然后由系统判断,与该请求所在楼层最近并且运行方向相同的电梯执行指令,另一部电梯不执行该指令。我们设计的电梯控制器是控制电梯按顾客要求自动上下的装置。本文采用VHDL语言来设计实现两栋电梯联动的四层电梯控制器,代码具有良好的可读性和以理解性,源程序使用Altera公司的MAX+plusII软件仿真,本课题的设计具有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。二、程序设计思想:我们使用一个核心控制器进行联动的算法调度。在此基础上,我们增加了输出所在层数的七段码显示程序和功能。我们在充分考虑所有的输入信号和输出的状态信号,把所有信号集合在一个核心控制器中,具体BLOCK图见下图:VCCresetINPUTVCCopen1INPUTVCCopen2INPUTVCCclose1INPUTVCCclose2INPUTVCCwarn1INPUTVCCwarn2INPUTVCCno_warn1INPUTVCCno_warn2INPUTVCCstop2_1INPUTVCCstop2_2INPUTVCCstop2_3INPUTVCCstop2_4INPUTVCCstop1_3INPUTVCCstop1_1INPUTVCCstop1_2INPUTVCCstop1_4INPUTVCCdown2_2INPUTVCCdown2_3INPUTVCCup2_3INPUTVCCdown2_4INPUTVCCdown1_3INPUTVCCdown1_4INPUTVCCup2_1INPUTVCCup2_2INPUTVCCup1_3INPUTVCCup1_2INPUTVCCup1_1INPUTVCCdown1_2INPUTVCCclkINPUTa[2..0]clkq[6..0]SEVEN66a[2..0]clkq[6..0]SEVEN69a[2..0]clkq[6..0]SEVEN68a[2..0]clkq[6..0]SEVEN67wait1OUTPUTmode2[1..0]OUTPUTmode1[1..0]OUTPUTfloor_seven2[6..0]OUTPUTfloor_seven1[6..0]OUTPUTwarn_seven1[6..0]OUTPUTdoor1OUTPUTdoor2OUTPUTwait2OUTPUTclkup1_1up1_2up1_3down1_2down1_3down1_4up2_1up2_2up2_3down2_2down2_3down2_4stop1_1stop1_2stop1_3stop1_4stop2_1stop2_2stop2_3stop2_4warn1warn2no_warn1no_warn2open1open2close1close2resetfloor1[2..0]floor2[2..0]mode1[1..0]mode2[1..0]warn_out1[2..0]warn_out2[2..0]wait1wait2door_out1door_out2CONTROL80由输入信号,中央处理器,输出信号,以及电梯运行状态的七段码进行显示模块。下面具体解析具体的管脚分配:首先我们可以从中心控制算法来看:door1OUTPUTdoor2OUTPUTwait1OUTPUTwait2OUTPUTmode1[1..0]OUTPUTwarn_out2[2..0]OUTPUTmode2[1..0]OUTPUTwarn_out1[2..0]OUTPUTfloor2[2..0]OUTPUTfloor1[2..0]OUTPUTVCCclkINPUTVCCresetINPUTVCCopen1INPUTVCCopen2INPUTVCCclose1INPUTVCCclose2INPUTVCCstop2_4INPUTVCCwarn1INPUTVCCwarn2INPUTVCCno_warn1INPUTVCCno_warn2INPUTVCCstop1_3INPUTVCCstop1_4INPUTVCCstop2_1INPUTVCCstop2_2INPUTVCCstop2_3INPUTVCCdown2_2INPUTVCCdown2_3INPUTVCCdown2_4INPUTVCCstop1_1INPUTVCCstop1_2INPUTVCCdown1_3INPUTVCCdown1_4INPUTVCCup2_1INPUTVCCup2_2INPUTVCCup2_3INPUTVCCdown1_2INPUTVCCup1_3INPUTVCCup1_2INPUTVCCup1_1INPUTclkup1_1up1_2up1_3down1_2down1_3down1_4up2_1up2_2up2_3down2_2down2_3down2_4stop1_1stop1_2stop1_3stop1_4stop2_1stop2_2stop2_3stop2_4warn1warn2no_warn1no_warn2open1open2close1close2resetfloor1[2..0]floor2[2..0]mode1[1..0]mode2[1..0]warn_out1[2..0]warn_out2[2..0]wait1wait2door_out1door_out2CONTROL62一下是中央控制算法输入输出管教说明:clk:时钟信号up1_1,up1_2,up1_3,down1_2,down1_3,down1_4,up2_1,up2_2,up2_3,down2_2,down2_3,down2_4:对应楼层的上下楼按键stop1_1,stop1_2,stop1_3,stop1_4,stop2_1,stop2_2,stop2_3,stop2_4:对应楼层的停电梯按键warn1,warn2:对应电梯的报警按键no_warn1,no_warn2:解除报警open1,open2:对应电梯的开门键close1,close2:对应电梯的关门键floor1,floor2:当前位置电梯1,2的位置mode1,mode2:o当前电梯状态:00升,01降,10停止,11报警warn_out1,warn_out2:报警输出在第几层reset:instd_logic;---复位键wait1:wait2:等待状态输出door_out1,door_out2:门状态输出我们的程序尽可能的把电梯的所有的状态都模拟出来,因此我们设置了所有需要的按键,都是参考实际电梯装置所有的按键进行设置的。除此之外,为了设置观察电梯运行状态的输出信号,如电梯现在所运行的楼层,电梯是上楼还是下楼,是停止还是报警,我们都有相应的状态和它对应。通过这样的规划程序,我们实现了电梯所有状态的输出,以及显示。同时也使得我们可以很好的调试我们的程序。Block图的另外一部分就是:其中就是我们增加的功能,使得电梯的运行层数在实际的制作过程中,可以显示当前的电梯所在层数。这样我们的程序能够更好的向实物方向发展。程序的设计中,我们设计了内部的处理信号和中间变量,进行状态的保存和输出状态的存储。以利于我们进行电梯算法的处理实现,具体如下:typestate_typeis(c1,c2,c3,c4,warn,open_door,wait_time);--电梯工作状态signalsignal_up1,signal_up2:std_logic_vector(3downto1);--上升信号存储signalsignal_down1,signal_down2:std_logic_vector(4downto2);--下降信号存储signalsignal_mode1,signal_mode2:std_logic_vector(1downto0);--电梯工作方式信号signalsignal_floor1,signal_floor2:std_logic_vector(2downto0);--电梯当前位置signalsignal_stop1,signal_stop2:std_logic_vector(4downto1);--电梯内部停止请求信号signalstate_1,state_2:state_type;--电梯状态信号signaldoor1,door2:std_logic;--门状态信号signalsignal_warn1,signal_warn2:std_logic;--报警信号signalsignal_open1,signal_open2:std_logic:='0';其中包括电梯工作信号,上升信号存储,下降信号存储,电梯工作方式信号,电梯当前位置,电梯内部请求信号,电梯状态信号,们状态信号,报警信号等。还包括存储变量如下:控制输入信号的分配a_d1,a_c1,b_d1,c_a1,d_b1,d_a1:一号电梯跨楼层请求abcd分别为一二三四层如a_c表示电梯在第a层有人要求到第c层停下open_count1,open_byhand1:开门时间计数a_d2,a_c2,