《电梯控制系统的VHDL设计.doc》由会员分享,可在线阅读,更多相关《电梯控制系统的VHDL设计.doc(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、设计题目:电梯控制系统设计者:040074*日期:2009-9-16目录一、课题设计要求分析2二、程序设计思想:2三、电梯流程图6四、状态转换图9五、程序解释9六、设计思想42七、程序调试(仿真波形解释及图)42八、结论46一、课题设计要求分析本课题要求设计一个电梯控制系统,传统的电梯控制系统仅仅要求实现对一栋电梯的控制,而本题要求设计一个实现两栋电梯联动的基于VHDL的电梯控制系统。具体要求如下:需要大楼为4层,2部电梯,每部电梯内部都有如下按键:1-4楼的按键选择,开门键,关门键,报警键。每部电梯的每层楼外面都有上楼键和下楼键(1楼只有上楼键,六楼只有下楼键)。电梯的设计参照日常生活中电梯
2、实际运行规律设计。 两部电梯之间互相联动,即同时按下任何一部电梯的外部向上或向下键之后,两部电梯同时接受此指令,然后由系统判断,与该请求所在楼层最近并且运行方向相同的电梯执行指令,另一部电梯不执行该指令。我们设计的电梯控制器是控制电梯按顾客要求自动上下的装置。本文采用VHDL语言来设计实现两栋电梯联动的四层电梯控制器,代码具有良好的可读性和以理解性,源程序使用Altera公司的MAX+plusII软件仿真,本课题的设计具有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。二、程序设计思想:我们使用一个核心控制器进行联动的算法调度。在此基础上,我们增加了输出所在层数的七段码显示程序和功能。我
3、们在充分考虑所有的输入信号和输出的状态信号,把所有信号集合在一个核心控制器中,具体BLOCK图见下图:由输入信号,中央处理器,输出信号,以及电梯运行状态的七段码进行显示模块。下面具体解析具体的管脚分配:首先我们可以从中心控制算法来看:一下是中央控制算法输入输出管教说明: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
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:in std_logic;-复位键wait1:wait2:等待状态输出door_out1,door_out2:门状态输出我们的程序尽可能的把电梯的所有的状态都模拟出来,因此我们设置了所有需要的按键,都是参考实际电梯
5、装置所有的按键进行设置的。除此之外,为了设置观察电梯运行状态的输出信号,如电梯现在所运行的楼层,电梯是上楼还是下楼,是停止还是报警,我们都有相应的状态和它对应。通过这样的规划程序,我们实现了电梯所有状态的输出,以及显示。同时也使得我们可以很好的调试我们的程序。Block图的另外一部分就是:其中就是我们增加的功能,使得电梯的运行层数在实际的制作过程中,可以显示当前的电梯所在层数。这样我们的程序能够更好的向实物方向发展。程序的设计中,我们设计了内部的处理信号和中间变量,进行状态的保存和输出状态的存储。以利于我们进行电梯算法的处理实现,具体如下:type state_type is(c1,c2,c3
6、,c4,warn,open_door,wait_time);-电梯工作状态signal signal_up1,signal_up2:std_logic_vector(3 downto 1);-上升信号存储signal signal_down1,signal_down2:std_logic_vector(4 downto 2);-下降信号存储signal signal_mode1,signal_mode2:std_logic_vector(1 downto 0);-电梯工作方式信号signal signal_floor1,signal_floor2:std_logic_vector(2 down
7、to 0);-电梯当前位置signal signal_stop1,signal_stop2:std_logic_vector(4 downto 1);-电梯内部停止请求信号signal state_1,state_2:state_type;-电梯状态信号signal door1,door2:std_logic;-门状态信号signal signal_warn1,signal_warn2:std_logic;-报警信号signal signal_open1,signal_open2:std_logic:=0;其中包括电梯工作信号,上升信号存储,下降信号存储,电梯工作方式信号,电梯当前位置,电梯内
8、部请求信号,电梯状态信号,们状态信号,报警信号等。还包括存储变量如下:控制输入信号的分配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,b_d2,c_a2,d_b2,d_a2:跨楼层请求abcd分别为一二三四层 如a_c表示电梯在第a层有人要求到第c层停下open_count2,open_byhand2:开门时间计数count1:延时计数pass_time1,pass_time2:楼层过渡时间state_temp1
9、,state_temp2:状态缓存变量变量包括:存储各层电梯请求,进行开门时间的计数变量,存储各种停电梯请求,延时计数,楼层过度时间计数,对状态的存储变量。三、电梯流程图电梯程序设计流程图如下:CLOCK触发外输入信号触发动作核心算法控制信号输出观察显示具体流程如如下:下面分模块进行说明:下面是输入模块的处理流程图:Clk一个时钟周期复位报警关门,开门停电梯扫描进入控制程序下面是核心控制的流程图:扫描信号需要电梯的人所在楼层检测当前电梯状态检测电梯所在楼层 号判断流程图见下图扫描扫描人所在楼层人所按按钮是上楼/下楼信息送入处理号流程判断见下图检测电梯当前状态扫描向上运行向下运行停止不动WARN
10、报警模式信息处理 核心算法描述:一号电梯运动情况二号电梯运动情况采集信号输入进行分别讨论,各个电梯在各种状态下的响应两个电梯联动实现四、状态转换图五、程序解释一、输入信号,中间控制信号,输出信号的定义如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity control isport(clk:in std_logic;-时钟信号up1_1,up1_2,up1_3,down1_2,down1_3,down1_4,up2_1,up2_2,up2_3,down2_2,down2_3,down
11、2_4:in std_logic;-对应楼层的上下楼按键stop1_1,stop1_2,stop1_3,stop1_4,stop2_1,stop2_2,stop2_3,stop2_4:in std_logic;-对应楼层的停电梯按键warn1,warn2:in std_logic;-对应电梯的报警按键no_warn1,no_warn2:in std_logic;-解除报警open1,open2:in std_logic;-对应电梯的开门键close1,close2:in std_logic;-对应电梯的关门键floor1,floor2:out std_logic_vector(2 downto
12、 0);-当前位置电梯1,2的位置mode1,mode2:out std_logic_vector(1 downto 0);-当前电梯状态:00升,01降,10停止,11报警warn_out1,warn_out2:out std_logic_vector(2 downto 0);-报警输出在第几层reset:in std_logic;-复位键wait1:out std_logic;wait2:out std_logic;door_out1,door_out2:out std_logic);-门状态输出end control;architecture behave of control isty
13、pe state_type is(c1,c2,c3,c4,warn,open_door,wait_time);-电梯工作状态signal signal_up1,signal_up2:std_logic_vector(3 downto 1);-上升信号存储signal signal_down1,signal_down2:std_logic_vector(4 downto 2);-下降信号存储signal signal_mode1,signal_mode2:std_logic_vector(1 downto 0);-电梯工作方式信号signal signal_floor1,signal_floor
14、2:std_logic_vector(2 downto 0);-电梯当前位置signal signal_stop1,signal_stop2:std_logic_vector(4 downto 1);-电梯内部停止请求信号signal state_1,state_2:state_type;-电梯状态信号signal door1,door2:std_logic;-门状态信号signal signal_warn1,signal_warn2:std_logic;-报警信号signal signal_open1,signal_open2:std_logic:=0;begin-con:process(c
15、lk)-控制输入信号的分配variable a_d1,a_c1,b_d1,c_a1,d_b1,d_a1:std_logic;-一号电梯跨楼层请求abcd分别为一二三四层 如a_c表示电梯在第a层有人要求到第c层停下variable open_count1,open_byhand1:integer;-开门时间计数variable a_d2,a_c2,b_d2,c_a2,d_b2,d_a2:std_logic;-跨楼层请求abcd分别为一二三四层 如a_c表示电梯在第a层有人要求到第c层停下variable open_count2,open_byhand2:integer;-开门时间计数-vari
16、able count1:integer;-延时计数variable pass_time1,pass_time2:integer;-楼层过渡时间variable state_temp1,state_temp2:state_type;-状态缓存变量二、对复位信号,报警信号,开关门信号处理if clkevent and clk=1 then-复位信号if reset=1 thenfloor1=000;floor2=000;mode1=10;mode2=10;door_out1=0;door_out2=0;signal_mode1=10;signal_mode2=10;signal_floor1=00
17、0;signal_floor2=000;state_1=c1;state_2=c1;signal_up1=000;signal_up2=000;signal_stop1=0000;signal_stop2=0000;signal_down1=000;signal_down2=000;door1=0;door2=0;signal_warn1=0;signal_warn2=0;warn_out1=000;warn_out2=000;-count1:=0;signal_open1=0;signal_open2=0;open_count1:=0;open_count2:=0;a_d1:=0;a_c1:
18、=0;b_d1:=0;c_a1:=0;d_b1:=0;d_a1:=0;a_d2:=0;a_c2:=0;b_d2:=0;c_a2:=0;d_b2:=0;d_a2:=0;else-报警请求if warn1=1 or warn2=1 thenif warn1=1 thensignal_warn1=1;end if;if warn2=1 thensignal_warn2=1;end if;else-手动开关门控制(运行状态不理会开门键)if close1=1 thendoor1=0;door_out1=0;end if;if close2=1 thendoor2=0;door_out2=0;end i
19、f;if open1=1 then-if open_byhand15 then-door1=1;-door_out1=1;-open_byhand1:=open_byhand1+1;-else-open_byhand1:=0;-door1=0;-door_out1=0;-end if;if signal_mode1=10 thensignal_open1=1;end if;end if;if open2=1 then-if open_byhand25 then-door2=1;-door_out2=1;-open_byhand2:=open_byhand2+1;-else-open_byhan
20、d2:=0;-door2=0;-door_out2=0;-end if;if signal_mode2=10 thensignal_open2=1;end if;end if;-停电梯请求if stop1_1=1 thensignal_stop1(1)=1;end if;if stop1_2=1 thensignal_stop1(2)=1;end if;if stop1_3=1 thensignal_stop1(3)=1;end if;if stop1_4=1 thensignal_stop1(4)=1;end if;if stop2_1=1 thensignal_stop2(1)=1;end
21、 if;if stop2_2=1 thensignal_stop2(2)=1;end if;if stop2_3=1 thensignal_stop2(3)=1;end if;if stop2_4=1 thensignal_stop2(4)=1;end if;三、分类进行详细讨论电梯的动作情况:if up1_1=1 then-第一层有人上楼if signal_up1(1)=0 and signal_up2(1)=0 then-除去多余按键if signal_mode1=00 and signal_mode2=00 thenif signal_floor1=signal_floor2 thens
22、ignal_up1(1)=1;else signal_up2(1)=1;end if;end if;if signal_mode1/=00 and signal_mode1/=11 and signal_mode2=00 thensignal_up1(1)=1;end if;if signal_mode2/=00 and signal_mode2/=11 and signal_mode1=00 thensignal_up2(1)=1;end if;if signal_mode2/=00 and signal_mode2/=11 and signal_mode1/=00 and signal_m
23、ode1/=11 thenif signal_floor1=signal_floor2 thensignal_up1(1)=1;else signal_up2(1)=1;end if;end if;end if;end if;-除去多余按键-if up2_1=1 thenif signal_up1(1)=0 and signal_up2(1)=0 then-除去多余按键if signal_mode1=00 and signal_mode2=00 thenif signal_floor1signal_floor2 thensignal_up1(1)=1;else signal_up2(1)=1;
24、end if;end if;if signal_mode1/=00 and signal_mode1/=11 and signal_mode2=00 thensignal_up1(1)=1;end if;if signal_mode2/=00 and signal_mode2/=11 and signal_mode1=00 thensignal_up2(1)=1;end if;if signal_mode2/=00 and signal_mode2/=11 and signal_mode1/=00 and signal_mode1/=11 thenif signal_floor1signal_
25、floor2 thensignal_up1(1)=1;else signal_up2(1)=1;end if;end if;end if;end if;-除去多余按键-if up1_2=1 then-第二层有人上楼if signal_up1(2)=0 and signal_up2(2)=0 then-除去多余按键if signal_mode1=01 and signal_mode2=01 thenif signal_floor1=signal_floor2 thensignal_up1(2)=1;elsesignal_up2(2)=1;end if;end if;if signal_mode1
26、=01 and signal_mode2=00 then if signal_floor2=010 thensignal_up2(2)=1;elsesignal_up1(1)=1;end if;end if;if signal_mode1=01 and signal_mode2=10 thenif signal_floor2=010 thensignal_up2(2)=1;elsif signal_floor1=001 thensignal_up1(2)=1;elsif signal_floor1=010 and signal_floor2=100 thensignal_up1(2)=1;el
27、se signal_up2(2)=1;end if; end if;if signal_mode1=00and signal_mode2=00 thenif signal_floor1=010 thensignal_up1(2)=1;elsif signal_floor1=001 and signal_floor2/=010 thensignal_up1(2)=1;elsif signal_floor1=011 and signal_floor2=011 thensignal_up1(2)=011 thensignal_up1(2)=1;else signal_up2(2)=1;end if;
28、end if;if signal_mode1=00 and signal_mode2=01 thenif signal_floor1=010 thensignal_up1(2)=1;else signal_up2(2)010 thensignal_up2(2)=1;elsif signal_floor1=010 thensignal_up1(2)=1;elsif signal_floor1=001 and signal_floor2=010 thensignal_up2(2)=1;else signal_up1(2)010 thensignal_up1(2)=1;elsif signal_fl
29、oor2=010 and signal_floor1=010 thensignal_up1(2)=1;elsif signal_floor2=001 and signal_floor1=100 thensignal_up2(2)=1;elsesignal_up1(2)=1;end if;end if;if signal_mode1=10 and signal_mode2=01 thensignal_up1(2)=1;end if;if signal_mode1=10 and signal_mode2=10 thenif signal_floor1=010 thensignal_up1(2)=1
30、;elsif signal_floor1/=010 and signal_floor2=010 thensignal_up2(2)=1;elsif signal_floor1/=100 thensignal_up1(2)=1;elsif signal_floor1=100 and signal_floor2=100 thensignal_up1(2)=1;else signal_up2(2)=1;end if; end if;end if;end if;-if up2_2=1 thenif signal_up1(2)=0 and signal_up2(2)=0 then-除去多余按键if si
31、gnal_mode1=01 and signal_mode2=01 thenif signal_floor1signal_floor2 thensignal_up1(2)=1;elsesignal_up2(2)010 thensignal_up1(2)=1;elsif signal_floor2=010 thensignal_up1(2)=1;elsif signal_floor2=001 and signal_floor1=010 thensignal_up1(2)=1;else signal_up2(2)=1;end if;end if;if signal_mode1=01 and sig
32、nal_mode2=10 thensignal_up2(2)=1;end if;if signal_mode1=00and signal_mode2=00 thenif signal_floor2=010 thensignal_up2(2)=1;elsif signal_floor2=001 and signal_floor1/=010 thensignal_up2(2)=1;elsif signal_floor2=011 and signal_floor1=011 thensignal_up2(2)=011 thensignal_up2(2)=1;else signal_up1(2)=1;e
33、nd if;end if;if signal_mode1=00 and signal_mode2=01 thenif signal_floor1=010 thensignal_up1(2)=1;elsesignal_up2(1)010 thensignal_up2(2)=1;elsif signal_floor1=010 and signal_floor2=010 thensignal_up2(2)=1;elsif signal_floor1=001 and signal_floor2=100 thensignal_up1(2)=1;elsesignal_up2(2)010 thensigna
34、l_up1(2)=1;elsif signal_floor2=010 thensignal_up1(2)=1;elsif signal_floor2=001 and signal_floor1=010 thensignal_up1(2)=1;else signal_up2(2)=1;end if;end if;if signal_mode1=10 and signal_mode2=01 thenif signal_floor1=010 thensignal_up1(2)=1;elsif signal_floor2=001 thensignal_up2(2)=1;elsif signal_flo
35、or2=010 and signal_floor1=100 thensignal_up2(2)=1;else signal_up1(2)=1;end if; end if;if signal_mode1=10 and signal_mode2=10 thenif signal_floor2=010 thensignal_up2(2)=1;elsif signal_floor2/=010 and signal_floor1=010 thensignal_up1(2)=1;elsif signal_floor2/=100 thensignal_up2(2)=1;elsif signal_floor2=100 and signal_floor1=100 thensignal_up2(2)=1;else signal_up1(2)=1;end if; end if;end if;end if;-if up1_3=1 then-第三层有人上楼if signal_up1(3)=0 and signal_up2(3)=0 then-除去多余按键if signal_mode1=00 and signal_mode2=00 theni
限制150内