电梯控制系统VHDL设计方案.docx
- 文档编号:8185195
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:61
- 大小:230.72KB
电梯控制系统VHDL设计方案.docx
《电梯控制系统VHDL设计方案.docx》由会员分享,可在线阅读,更多相关《电梯控制系统VHDL设计方案.docx(61页珍藏版)》请在冰豆网上搜索。
电梯控制系统VHDL设计方案
设计题目:
电梯控制系统
设计者:
040074**
日期:
2009-9-16
一、课题设计要求分析
本课题要求设计一个电梯控制系统,传统的电梯控制系统仅仅要求实现对一栋电梯的控制,而本题要求设计一个实现两栋电梯联动的基于VHDL的电梯控制系统。
具体要求如下:
需要大楼为4层,2部电梯,每部电梯内部都有如下按键:
1-4楼的按键选择,开门键,关门键,报警键。
每部电梯的每层楼外面都有上楼键和下楼键(1楼只有上楼键,六楼只有下楼键)。
电梯的设计参照日常生活中电梯实际运行规律设计。
两部电梯之间互相联动,即同时按下任何一部电梯的外部向上或向下键之后,两部电梯同时接受此指令,然后由系统判断,与该请求所在楼层最近并且运行方向相同的电梯执行指令,另一部电梯不执行该指令。
我们设计的电梯控制器是控制电梯按顾客要求自动上下的装置。
本文采用VHDL语言来设计实现两栋电梯联动的四层电梯控制器,代码具有良好的可读性和以理解性,源程序使用Altera公司的MAX+plusII软件仿真,本课题的设计具有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。
二、程序设计思想:
我们使用一个核心控制器进行联动的算法调度。
在此基础上,我们增加了输出所在层数的七段码显示程序和功能。
我们在充分考虑所有的输入信号和输出的状态信号,把所有信号集合在一个核心控制器中,具体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:
对应楼层的停电梯按键
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,b_d2,c_a2,d_b2,d_a2:
跨楼层请求abcd分别为一二三四层如a_c表示电梯在第a层有人要求到第c层停下
open_count2,open_byhand2:
开门时间计数
count1:
延时计数
pass_time1,pass_time2:
楼层过渡时间
state_temp1,state_temp2:
状态缓存变量
变量包括:
存储各层电梯请求,进行开门时间的计数变量,存储各种停电梯请求,延时计数,楼层过度时间计数,对状态的存储变量。
三、电梯流程图
电梯程序设计流程图如下:
具体流程如如下:
下面分模块进行说明:
①下面是输入模块的处理流程图:
②下面是核心控制的流程图:
1号判断流程图见下图
②号流程判断见下图
3核心算法描述:
四、状态转换图
五、程序解释
一、输入信号,中间控制信号,输出信号的定义如下:
libraryieee。
useieee.std_logic_1164.all。
useieee.std_logic_unsigned.all。
entitycontrolis
port(clk:
instd_logic。
--时钟信号
up1_1,up1_2,up1_3,down1_2,down1_3,down1_4,up2_1,up2_2,up2_3,down2_2,down2_3,down2_4:
instd_logic。
--对应楼层的上下楼按键
stop1_1,stop1_2,stop1_3,stop1_4,stop2_1,stop2_2,stop2_3,stop2_4:
instd_logic。
--对应楼层的停电梯按键
warn1,warn2:
instd_logic。
--对应电梯的报警按键
no_warn1,no_warn2:
instd_logic。
--解除报警
open1,open2:
instd_logic。
--对应电梯的开门键
close1,close2:
instd_logic。
--对应电梯的关门键
floor1,floor2:
outstd_logic_vector(2downto0)。
--当前位置电梯1,2的位置
mode1,mode2:
outstd_logic_vector(1downto0)。
--当前电梯状态:
00升,01降,10停止,11报警
warn_out1,warn_out2:
outstd_logic_vector(2downto0)。
--报警输出在第几层
reset:
instd_logic。
---复位键
wait1:
outstd_logic。
wait2:
outstd_logic。
door_out1,door_out2:
outstd_logic)。
--门状态输出
endcontrol。
architecturebehaveofcontrolis
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'。
begin
-------------------------------------------------------------------------------------------------
con:
process(clk)--控制输入信号的分配
variablea_d1,a_c1,b_d1,c_a1,d_b1,d_a1:
std_logic。
--一号电梯跨楼层请求abcd分别为一二三四层如a_c表示电梯在第a层有人要求到第c层停下
variableopen_count1,open_byhand1:
integer。
--开门时间计数
variablea_d2,a_c2,b_d2,c_a2,d_b2,d_a2:
std_logic。
--跨楼层请求abcd分别为一二三四层如a_c表示电梯在第a层有人要求到第c层停下
variableopen_count2,open_byhand2:
integer。
--开门时间计数
--variablecount1:
integer。
----------延时计数
variablepass_time1,pass_time2:
integer。
--楼层过渡时间
variablestate_temp1,state_temp2:
state_type。
--状态缓存变量
二、对复位信号,报警信号,开关门信号处理
ifclk'eventandclk='1'then
----------------------------------------------------------------复位信号
ifreset='1'then
floor1<="000"。
floor2<="000"。
mode1<="10"。
mode2<="10"。
door_out1<='0'。
door_out2<='0'。
signal_mode1<="10"。
signal_mode2<="10"。
signal_floor1<="000"。
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:
='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
---------------------------------------------------------------------------------------------报警请求
ifwarn1='1'orwarn2='1'then
ifwarn1='1'then
signal_warn1<='1'。
endif。
ifwarn2='1'then
signal_warn2<='1'。
endif。
else
---------------------------------------------------手动开关门控制(运行状态不理会开门键)
ifclose1='1'then
door1<='0'。
door_out1<='0'。
endif。
ifclose2='1'then
door2<='0'。
door_out2<='0'。
endif。
ifopen1='1'then
--ifopen_byhand1<5then
--door1<='1'。
--door_out1<='1'。
--open_byhand1:
=open_byhand1+1。
--else
--open_byhand1:
=0。
--door1<='0'。
--door_out1<='0'。
--endif。
ifsignal_mode1="10"then
signal_open1<='1'。
endif。
endif。
ifopen2='1'then
--ifopen_byhand2<5then
--door2<='1'。
--door_out2<='1'。
--open_byhand2:
=open_byhand2+1。
--else
--open_byhand2:
=0。
--door2<='0'。
--door_out2<='0'。
--endif。
ifsignal_mode2="10"then
signal_open2<='1'。
endif。
endif。
----------------------------------------------------------------------------------------------停电梯请求
ifstop1_1='1'then
signal_stop1
(1)<='1'。
endif。
ifstop1_2='1'then
signal_stop1
(2)<='1'。
endif。
ifstop1_3='1'then
signal_stop1(3)<='1'。
endif。
ifstop1_4='1'then
signal_stop1(4)<='1'。
endif。
ifstop2_1='1'then
signal_stop2
(1)<='1'。
endif。
ifstop2_2='1'then
signal_stop2
(2)<='1'。
endif。
ifstop2_3='1'then
signal_stop2(3)<='1'。
endif。
ifstop2_4='1'then
signal_stop2(4)<='1'。
endif。
三、分类进行详细讨论电梯的动作情况:
ifup1_1='1'then------------------------------------------------------------------------第一层有人上楼
ifsignal_up1
(1)='0'andsignal_up2
(1)='0'then-----除去多余按键
ifsignal_mode1="00"andsignal_mode2="00"then
ifsignal_floor1<=signal_floor2then
signal_up1
(1)<='1'。
else
signal_up2
(1)<='1'。
endif。
endif。
ifsignal_mode1/="00"andsignal_mode1/="11"andsignal_mode2="00"then
signal_up1
(1)<='1'。
endif。
ifsignal_mode2/="00"andsignal_mode2/="11"andsignal_mode1="00"then
signal_up2
(1)<='1'。
endif。
ifsignal_mode2/="00"andsignal_mode2/="11"andsignal_mode1/="00"andsignal_mode1/="11"then
ifsignal_floor1<=signal_floor2then
signal_up1
(1)<='1'。
else
signal_up2
(1)<='1'。
endif。
endif。
endif。
endif。
-------除去多余按键
------------------------------------------------------------
ifup2_1='1'then
ifsignal_up1
(1)='0'andsignal_up2
(1)='0'then-----除去多余按键
ifsignal_mode1="00"andsignal_mode2="00"then
ifsignal_floor1 signal_up1 (1)<='1'。 else signal_up2 (1)<='1'。 endif。 endif。 ifsignal_mode1/="00"andsignal_mode1/="11"andsignal_mode2="00"then signal_up1 (1)<='1'。 endif。 ifsignal_mode2/="00"andsignal_mode2/="11"andsignal_mode1="00"then signal_up2 (1)<='1'。 endif。 ifsignal_mode2/="00"andsignal_mode2/="11"andsignal_mode1/="00"andsignal_mode1/="11"then ifsignal_floor1 signal_up1 (1)<='1'。 else signal_up2 (1)<='1'。 endif。 endif。 endif。 endif。 -------除去多余按键 --------------------------------------------------------------------------------------------------- ifup1_2='1'then------------------------------------第二层有人上楼 ifsignal_up1 (2)='0'andsignal_up2 (2)='0'then-----除去多余按键 ifsignal_mode1="01"andsignal_mode2="01"then ifsignal_floor1<=signal_floor2then signal_up1 (2)<='1'。 else signal_up2 (2)<='1'。 endif。 endif。 ifsignal_mode1="01"andsignal_mode2="00"then ifsignal_floor2<="010"then signal_up2 (2)<='1'。 else signal_up1 (1)<='1'。 endif。 endif。 ifsignal_mode1="01"andsignal_mode2="10"then ifsignal_floor2="010"then signal_up2 (2)<='1'。 elsifsignal_floor1="001"then signal_up1 (2)<='1'。 elsifsignal_floor1="010"andsignal_floor2="100"then signal_up1 (2)<='1'。 else signal_up2 (2)<='1'。 endif。 endif。 ifsignal_mode1="00"andsignal_mode2="00"then ifsignal_floor1="010"then signal_up1 (2)<='1'。 elsifsignal_floor1="001"andsignal_floor2/="010"then signal_up1 (2)<='1'。 elsifsignal_floor1="01
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电梯 控制系统 VHDL 设计方案