VHDL项目设计三层电梯控制系统.docx
- 文档编号:8169043
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:15
- 大小:571.60KB
VHDL项目设计三层电梯控制系统.docx
《VHDL项目设计三层电梯控制系统.docx》由会员分享,可在线阅读,更多相关《VHDL项目设计三层电梯控制系统.docx(15页珍藏版)》请在冰豆网上搜索。
VHDL项目设计三层电梯控制系统
三层电梯控制系统
一、设计功能与要求
电梯控制系统是的设计目标是按照使用者的要求控制电梯的运行。
要求用VHDL设计出三层电梯的控制系统,基本功能要求如下:
1、每层电梯入口处设有上、下请求开关,使用者可以根据自身的上下楼需要按下相应按键;电梯内部设有到达楼层按钮,使用者可以选择到达楼层。
2、设有电梯运行模式(上、下)标识和当前所在楼层标识。
3、电梯运行模式等同于普通电梯运行模式,电梯一般按照提出请求的先后顺序进行响应。
程序根据电梯当前位置和使用者所在楼层以及进入电梯后的要求控制运行状态。
4、电梯初始模式为一层关门状态。
二、设计思路
本系统的主要输入有电梯外上下控制按钮Button(其中Button(0)表示一楼电梯外上升请求,Button
(1)表示二楼电梯外上升请求,Button
(2)表示二楼电梯外下降请求,Button(3)表示三楼电梯外下降请求);电梯内到达楼层控制按钮floor(其中floor(0)表示请求到达一层,floor
(1)表示请求到达二层,floor
(2)表示请求到达三层)。
系统的输出包括电梯位置标识position,表示电梯当前所在楼层;电梯开门关门显示按钮door(当door=1时表示开门,door=0表示关门);电梯当前运行状态按钮up_down(当up_down=1时表示电梯处于上升状态,当up_down=0时表示电梯处于下降状态)。
系统主要通过当前所在楼层以及运行状态、后续请求判断运行方式。
电梯处在第一层时,当它收到二层电梯外上下楼请求、三层电梯外下楼请求、一层电梯内到达二层和三层请求时,电梯会按照指令上升到相应楼层并开门、关门;若收到一层电梯外上楼请求只做开门响应,随后根据使用者进入电梯后请求进行响应;其他请求不响应。
当电梯处在第二层时,若系统收到二层电梯外上下楼请求只做开门响应;若收到三层电梯外下楼或二层电梯内到达三层请求,则做上楼响应、开门;若收到一层电梯外上楼或二层电梯内到达一层请求,则做下楼楼响应并开门;其他请求不响应。
当电梯处在第三层时,若它收到二层电梯外上下楼请求、一层电梯外上楼请求、电梯内到达二层和一层请求时,电梯会按照指令下降到相应楼层并开门、关门;若收到三层电梯外下楼请求只做开门响应,随后根据使用者进入电梯后请求进行响应;其他请求不响应。
若电梯正处在上升状态中收到外部请求,则只响应比当前所在楼层高的楼层的请求,到达需要到达最高楼层时再响应低层请求。
若电梯正处在下降状态中收到外部请求,则只响应比当前所在楼层低的楼层的请求,到达需要到达最低楼层时再响应高层请求。
三、状态原理图说明
本系统的状态比较复杂,状态中嵌套状态。
图3.1为系统状态原理说明图,其中b0、b1、b2、b3分别表示Button(0)、Button
(1)、Button
(2)、Button(3);f0、f1、f2分别表示floor(0)、floor
(1)、floor
(2);S0表示一层上状态、S1U和S1D分别表示二层上和下状态、S2表示三层下状态。
图3.1状态原理图
本状态图主要说明系统运行当前状态与下一个状态的关系,考虑了从当前状态到下一状态的所有触发因素,较为复杂。
四、源程序以及注释
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.all;
USEIEEE.STD_LOGIC_UNSIGNED.all;
ENTITYelevator15IS
PORT(CLK:
INSTD_LOGIC;
reset:
INSTD_LOGIC;
Button:
INSTD_LOGIC_VECTOR(3DOWNTO0);--button(0)为一层外上升请求,button
(1)为二层外上升请求,--button
(2)为二楼外下降请求,Button(3)为三层外下降请求;
floor:
INSTD_LOGIC_VECTOR(2DOWNTO0);--floor(0)为电梯内一层请求按钮,floor
(1)为电梯内二层请求按钮,
--floor
(2)为电梯内三层请求按钮;
position:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
--position表示电梯当前位置信息;
door:
OUTSTD_LOGIC;--'1'为开门,'0'为关门;
up_down:
OUTSTD_LOGIC--'1'为上楼,'0'为下楼;
);
ENDelevator15;
ARCHITECTUREBehavOFelevator15IS
TYPEStateIS(S0,S1U,S1D,S2);
--S1U为二楼上状态,S1D为二楼下状态;
SIGNALcurrent_state:
State;--中间变量:
当前状态
SIGNALnext_state:
State;--中间变量:
下一状态
SIGNALup:
STD_LOGIC;--中间变量:
上升下降状态
SIGNALdor:
STD_LOGIC;--中间变量:
开门关门状态
BEGIN
P1:
PROCESS(CLK)--状态转换进程;
BEGIN
IFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿
current_state<=next_state;
ENDIF;
ENDPROCESS;
P2:
PROCESS(reset,clk,current_state,up,button,floor)VARIABLEbutton_var:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEfloor_var:
STD_LOGIC_VECTOR(2DOWNTO0);
VARIABLEcat:
STD_LOGIC;
VARIABLEca_time:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFreset='1'THEN--复位处理,初始状态为一层
next_state<=S0;
position<="0001";
cat:
='0';
ca_time:
="0000";
up<='Z';
dor<='0';
button_var(3DOWNTO0):
="0000";
floor_var(2DOWNTO0):
="000";
ELSIFclk'eventandclk='1'THEN
--若无复位信号,则将外部按钮信号存储到7个变量之中;
IFbutton(0)='1'THENbutton_var(0):
='1';ELSENULL;ENDIF;
IFbutton
(1)='1'THENbutton_var
(1):
='1';ELSENULL;ENDIF;
IFbutton
(2)='1'THENbutton_var
(2):
='1';ELSENULL;ENDIF;
IFbutton(3)='1'THENbutton_var(3):
='1';ELSENULL;ENDIF;
IFfloor(0)='1'THENfloor_var(0):
='1';ELSENULL;ENDIF;
IFfloor
(1)='1'THENfloor_var
(1):
='1';ELSENULL;ENDIF;
IFfloor
(2)='1'THENfloor_var
(2):
='1';ELSENULL;ENDIF;
IFcat='0'THENca_time:
=ca_time+1;ENDIF;--开门,关门计时;
CASEcurrent_stateIS
WHENS0=>--一楼状态处理;
position<="0001";
cat:
='0';
IF(button_var(0)orfloor_var(0))='1'THEN
CASEca_timeIS
WHEN"0011"=>dor<='1';
WHEN"1101"=>dor<='0';
button_var(0):
='0';
floor_var(0):
='0';
IF(floor_var
(1)orfloor_var
(2))='1'THEN
next_state<=S1U;
ca_time:
="0000";
up<='1';
ELSEnext_state<=S0;
ca_time:
="0000";
ENDIF;
WHENothers=>NULL;
ENDCASE;
ELSIF(button_var
(1)ORbutton_var
(2)orbutton_var(3)orfloor_var
(2)orfloor_var
(1))='1'THEN
next_state<=S1U;
ca_time:
="0000";
up<='1';
ELSE
next_state<=S0;
ca_time:
="0000";
ENDIF;
WHENS1U=>--二楼上状态处理;
position<="0010";
cat:
='0';
IFfloor_var
(1)='1'THEN--二楼内上升请求;
CASEca_timeIS
WHEN"0011"=>dor<='1';
WHEN"1101"=>dor<='0';
floor_var
(1):
='0';
IF(button_var
(1)orbutton_var(3)orfloor_var
(2))='1'THENnext_state<=S2;ca_time:
="0000";button_var
(1):
='0';
ELSIF(button_var(0)orbutton_var
(2)orfloor_var(0))='1'THENnext_state<=s0;ca_time:
="0000";button_var
(2):
='0';
ELSE
next_state<=S1U;ca_time:
="0000";
ENDIF;
WHENothers=>NULL;
ENDCASE;
ELSE
IFbutton_var
(1)='1'THEN--二楼外上升请求;
CASEca_timeIS
WHEN"0011"=>dor<='1';
WHEN"1101"=>dor<='0';
button_var
(1):
='0';
IF(floor_var
(2)orbutton_var(3))='1'THENnext_state<=S2;ca_time:
="0000";
ELSIF(button_var(0)orfloor_var(0)orbutton_var
(2))='1'THENnext_state<=s0;ca_time:
="0000";up<='0';
ELSEnext_state<=S1U;
button_var
(1):
='0';
ENDIF;
WHENothers=>NULL;
ENDCASE;
ELSE
IF(button_var(3)orfloor_var
(2))='1'THEN
--二楼无上楼,开门请求,但三层有下楼或开门请求;
next_state<=S2;
ca_time:
="0000";
ELSIFbutton_var
(2)='1'THEN
--二楼无上楼,开门请求,三层也无下楼或开门请求,此
--时二楼有下楼请求;
CASEca_timeIS
WHEN"0011"=>dor<='1';
WHEN"1101"=>dor<='0';
button_var
(2):
='0';IF(floor_var(0)orbutton_var(0))='1'
THENnext_state<=s0;ca_time:
="0000";up<='0';ELSEnext_state<=S1U;
ca_time:
="0000";
ENDIF;
WHENothers=>NULL;
ENDCASE;
ELSIF(button_var(0)orfloor_var(0))='1'THEN
--电梯处于二楼上状态,仅有一楼信号要处理
next_state<=s0;
ca_time:
="0000";
up<='0';
ELSEnext_state<=S1U;--无任何信号,保持当前状态不变;
ca_time:
="0000";
ENDIF;
ENDIF;
ENDIF;
WHENS1D=>--up='0'时的情况;
position<="0010";
cat:
='0';
IFfloor_var
(1)='1'THEN
CASEca_timeIS
WHEN"0011"=>dor<='1';
WHEN"1101"=>dor<='0';
floor_var
(1):
='0';
IF(button_var
(2)orbutton_var(0)orfloor_var(0))='1'THENnext_state<=s0;ca_time:
="0000";button_var
(2):
='0';
ELSIF(button_var
(1)orbutton_var(3)orfloor_var
(2))='1'THENnext_state<=S2;ca_time:
="0000";button_var
(1):
='0';ELSEnext_state<=S1D;
ca_time:
="0000";ENDIF;
WHENothers=>NULL;
ENDCASE;
ELSE
IFbutton_var
(2)='1'THEN
CASEca_timeIS
WHEN"0011"=>dor<='1';
WHEN"1101"=>dor<='0';
button_var
(2):
='0';IF(floor_var(0)orbutton_var(0))='1'
THENnext_state<=s0;ca_time:
="0000";
ELSIF(button_var
(1)orfloor_var
(2)orbutton_var(3))='1'THENnext_state<=S2;ca_time:
="0000";up<='1';
ELSE
next_state<=S1D;ca_time:
="0000";
ENDIF;
WHENothers=>NULL;
ENDCASE;
ELSE
IF(button_var(0)orfloor_var(0))='1'THEN
next_state<=s0;
ca_time:
="0000";
ELSIFbutton_var
(1)='1'THEN
CASEca_timeIS
WHEN"0011"=>dor<='1';
WHEN"1101"=>dor<='0';
button_var
(1):
='0';IF(floor_var
(2)orbutton_var(3))='1'
THENnext_state<=S2;ca_time:
="0000";up<='1';ELSE
next_state<=S1D;ca_time:
="0000";ENDIF;
WHENothers=>NULL;
ENDCASE;
ELSIF(button_var(3)orfloor_var
(2))='1'THEN
next_state<=S2;
ca_time:
="0000";
up<='1';
ELSE
next_state<=S1D;
ca_time:
="0000";
ENDIF;
ENDIF;
ENDIF;
WHENS2=>--电梯三楼状态处理;
position<="0011";
cat:
='0';
IF(button_var(3)orfloor_var
(2))='1'THEN
CASEca_timeIS
WHEN"0011"=>dor<='1';
WHEN"1101"=>dor<='0';
button_var(3):
='0';
floor_var
(2):
='0';
IF(floor_var(0)orfloor_var
(1))='1'THEN
next_state<=S1D;
ca_time:
="0000";
up<='0';
ELSE
next_state<=S2;
ca_time:
="0000";
ENDIF;
WHENothers=>NULL;
ENDCASE;
ELSIF(button_var(0)ORbutton_var
(1)ORbutton_var
(2)orfloor_var(0)orfloor_var
(1))='1'THEN
next_state<=S1D;
ca_time:
="0000";
up<='0';
ELSE
next_state<=S2;
ca_time:
="0000";
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESS;
P3:
PROCESS(up,dor)--电梯上下,开关门显示;
BEGIN
up_down<=up;
door<=dor;
ENDPROCESS;
ENDBehav;
五、仿真结果与说明
图5.1
图5.1是基本基本功能仿真,使用者在一层电梯外按下上升(Button(0)=1)按钮,随后开门(door=1)。
使用者进入后按下到达三楼请求(floor
(2)=1),电梯关门(door=0)并上升(up_down=1)最后到达三层(position=3)并开门(door=1)。
图5.2
图5.3
图5.2是基本记忆功能仿真,电梯处于初始一层关门状态。
三层外使用者按下三层下按钮(floor(3)=1)电梯上升到三楼开门。
然而在上升到二楼时一层外有人按下上楼按钮。
此时电梯先完成上升到三层,然后再下降回到一层响应一层外请求。
图5.3表明在电梯上升过程中可以接收较高楼层的要求。
开始时有人按下一层外上升(Button(0)=1)按钮,电梯开门使用者进入并按下到达三层(floor
(2)=1)请求,此时电梯关门并上升。
在电梯上升但未到达二层时,二层外有人按下上楼(Button
(1)=1)请求,因此当电梯到达二层(position=2)后停止并开门,待二层使用者进入后再完成第一个使用者的请求到达三层。
图5.4
图5.4仿真了系统对同一楼层两个不同到达楼层的响应。
有两人先后按下二层上按钮(Button
(1)=1),此时电梯从一层上升至二层并开门。
待两人进入后按照先后顺序按下到达三层(floor
(2)=1)和到达一层(floor(0)=1)按钮,此时电梯也按照俩人按键先后顺序先到达三层(position=3),然后再到达一层(position=1)。
需要注意的是,本次实验第二个使用者在二层外的按键是错误的,因为他要到达一层应该按下二层下按钮(Button
(2)=1),然而他却错误的按下了二层上按钮(Button
(1)=1)。
因此同一使用者在电梯内和电梯外提出不同要求时,主要响应电梯内请求。
图5.5和图5.6都是综合仿真实验。
图5.5
图5.6
图5.5是一个在电梯中常见的复杂情况仿真,本实验中共有四个人提出请求。
首先一外层有人提出上升(Button(0)=1)请求并按下上升到三层(floor
(2)=1)按键,电梯上升过程中二层外分别有人按下上升(Button
(1)=1)和下降(Button
(2)=1)的按钮,同时三层外有人按下下降(Button(3)=1)按钮。
随后电梯到达二层停止,待俩人进入后都没有按下任何到达楼层请求。
电梯随即到达三层,三层使用者进入后也没有按下任何到达楼层按钮,此时电梯响应此前按下二层下降按钮的使用者的请求再次下降到二层。
图5.6是一个多人次时间交错综合仿真,首先是三层外有人提出下降请求(Button(3)=1),此时电梯开始上升;在电梯上升到二层和三层之间时二层外有人按下下降按钮(Button
(2)=1),此时电梯继续上升到达三层,待三层使用者进入后按下到达一层(floor(0)=1)按钮后电梯下降到二层,使第二个使用者进入;第二个人打算去一层,看到第一个人已经按下到达一层按钮,就没有再次按下。
当电梯回到一层的瞬间三层外又有人按下下降按钮(Button(3)=1),此时电梯在一层做短暂停留后再次回到三层,三层使用者进入后按下到达一层按钮(floor(0)=1),电梯再次回到一层。
通过六次仿真可以看出系统基本完成了设计要求。
六、实验难点和创新
1.本实验状态较为复杂,状态中嵌套状态,状态图的绘制比较困难。
本实验使用的状态图考虑了不同状态转移过程中的所有情况。
2.外部请求按键较多,电梯在上升过程中只能响应高于其当前所在楼层的请求,反之在下降过程中只能响应低于其当前所在楼层的请求。
而且系统要求记忆目前没有被响应的请求。
图5.2和图5.3对此功能进行了仿真。
本系统的设计考虑了实际应用中的记忆存贮问题。
3.使用者在电梯内外提出的请求不一致,例如图5.4中进行仿真的情况。
使用者本来是要下楼,但在电梯外却按下上楼按钮。
对于这种情况,系统认定使用者进入电梯后提出的请求为最终请求。
仅供个人用于学习、研究;不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;notforcommercialuse.
NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales.
толькодля
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 项目 设计 三层 电梯 控制系统