VHDL电梯控制器程序设计与仿真.docx
《VHDL电梯控制器程序设计与仿真.docx》由会员分享,可在线阅读,更多相关《VHDL电梯控制器程序设计与仿真.docx(11页珍藏版)》请在冰豆网上搜索。
![VHDL电梯控制器程序设计与仿真.docx](https://file1.bdocx.com/fileroot1/2022-10/24/78c72f4a-55d8-4397-9dc4-a70a6ca242b1/78c72f4a-55d8-4397-9dc4-a70a6ca242b11.gif)
VHDL电梯控制器程序设计与仿真
VHDL电梯控制器程序设计与仿真
————————————————————————————————作者:
————————————————————————————————日期:
电梯控制器VHDL程序与仿真。
--
--文件名:
dianti.vhd。
--功能:
6层楼的电梯控制系统。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydiantiis
port(clk:
instd_logic;--时钟信号(频率为2Hz)
full,deng,quick,clr:
instd_logic;--超载、关门中断、提前关门清除报警信号
c_u1,c_u2,c_u3,c_u4,c_u5:
instd_logic;--电梯外人的上升请求信号
c_d2,c_d3,c_d4,c_d5,c_d6:
instd_logic;--电梯外人的下降请求信号
d1,d2,d3,d4,d5,d6:
instd_logic;--电梯内人的请求信号
g1,g2,g3,g4,g5,g6:
instd_logic;--到达楼层信号
door:
outstd_logic_vector(1downto0);--电梯门控制信号
led:
outstd_logic_vector(6downto0);--电梯所在楼层显示
led_c_u:
outstd_logic_vector(5downto0);--电梯外人上升请求信号显示
led_c_d:
outstd_logic_vector(5downto0);--电梯外人下降请求信号显示
led_d:
outstd_logic_vector(5downto0);--电梯内请求信号显示
wahaha:
outstd_logic;--看门狗报警信号
ud,alarm:
outstd_logic;--电梯运动方向显示,超载警告信号
up,down:
outstd_logic);--电机控制信号和电梯运动
enddianti;
architecturebehavofdiantiis
signald11,d22,d33,d44,d55,d66:
std_logic;--电梯内人请求信号寄存信号
signalc_u11,c_u22,c_u33,c_u44,c_u55:
std_logic;--电梯外人上升请求信号寄存信号
signalc_d22,c_d33,c_d44,c_d55,c_d66:
std_logic;--电梯外人下降请求信号寄存信号
signalq:
integerrange0to1;--分频信号
signalq1:
integerrange0to6;--关门延时计数器
signalq2:
integerrange0to9;--看门狗计数器
signaldd,cc_u,cc_d,dd_cc:
std_logic_vector(5downto0);--电梯内外请求信号寄存器
signalopendoor:
std_logic;--开门使能信号
signalupdown:
std_logic;--电梯运动方向信号寄存器
signalen_up,en_dw:
std_logic;--预备上升、预备下降预操作使能信号
begin
com:
process(clk)
begin
ifclk'eventandclk='1'then
ifclr='1'thenq1<=0;q2<=0;wahaha<='0';--清除故障报警
elsiffull='1'thenalarm<='1';q1<=0;--超载报警
ifq1>=3thendoor<="10";
elsedoor<="00";
endif;
elsifq=1thenq<=0;alarm<='0';
ifq2=3thenwahaha<='1';--故障报警
else
ifopendoor='1'thendoor<="10";q1<=0;q2<=0;up<='0';down<='0';--开门操作
elsifen_up='1'then--上升预操作
ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;--关门中断
elsifquick='1'thenq1<=3;--提前关门
elsifq1=6thendoor<="00";updown<='1';up<='1';--关门完毕,电梯进入上升状态
elsifq1>=3thendoor<="01";q1<=q1+1;--电梯进入关门状态
elseq1<=q1+1;door<="00";--电梯进入等待状态
endif;
elsifen_dw='1'then--下降预操作
ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;
elsifquick='1'thenq1<=3;
elsifq1=6thendoor<="00";updown<='0';down<='1';
elsifq1>=3thendoor<="01";q1<=q1+1;
elseq1<=q1+1;door<="00";
endif;
endif;
ifg1='1'thenled<="1001111";--电梯到达1楼,数码管显示1
ifd11='1'orc_u11='1'thend11<='0';c_u11<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态
elsifdd_cc>"000001"thenen_up<='1';opendoor<='0';
--有上升请求,则电梯进入预备上升状态
elsifdd_cc="000000"thenopendoor<='0';--无请求时,电梯停在1楼待机
endif;
elsifg2='1'thenled<="0010010";--电梯到达2楼,数码管显示2
ifupdown='1'then--电梯前一运动状态位上升
ifd22='1'orc_u22='1'thend22<='0';c_u22<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态
elsifdd_cc>"000011"thenen_up<='1';opendoor<='0';
--有上升请求,则电梯进入预备上升状态
elsifdd_cc<"000010"thenen_dw<='1';opendoor<='0';
--有下降请求,则电梯进入预备下降状态
endif;
--电梯前一运动状态为下降
elsifd22='1'orc_d22='1'thend22<='0';c_d22<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态
elsifdd_cc<"000010"thenen_dw<='1';opendoor<='0';
--有下降请求,则电梯进入预备下降状态
elsifdd_cc>"000011"thenen_up<='1';opendoor<='0';
--有上升请求,则电梯进入预备上升状态
endif;
elsifg3='1'thenled<="0000110";--电梯到达3楼,数码管显示3
ifupdown='1'then
ifd33='1'orc_u33='1'thend33<='0';c_u33<='0';opendoor<='1';
elsifdd_cc>"000111"thenen_up<='1';opendoor<='0';
elsifdd_cc<"000100"thenen_dw<='1';opendoor<='0';
endif;
elsifd33='1'orc_d33='1'thend33<='0';c_d33<='0';opendoor<='1';
elsifdd_cc<"000100"thenen_dw<='1';opendoor<='0';
elsifdd_cc>"000111"thenen_up<='1';opendoor<='0';
endif;
elsifg4='1'thenled<="1001100";--电梯到达4楼,数码管显示4
ifupdown='1'then
ifd44='1'orc_u44='1'thend44<='0';c_u44<='0';opendoor<='1';
elsifdd_cc>"001111"thenen_up<='1';opendoor<='0';
elsifdd_cc<"001000"thenen_dw<='1';opendoor<='0';
endif;
elsifd44='1'orc_d44='1'thend44<='0';c_d44<='0';opendoor<='1';
elsifdd_cc<"001000"thenen_dw<='1';opendoor<='0';
elsifdd_cc>"001111"thenen_up<='1';opendoor<='0';
endif;
elsifg5='1'thenled<="0100100";--电梯到达5楼,数码管显示5
ifupdown='1'then
ifd55='1'orc_u55='1'thend55<='0';c_u55<='0';opendoor<='1';
elsifdd_cc>"011111"thenen_up<='1';opendoor<='0';
elsifdd_cc<"010000"thenen_dw<='1';opendoor<='0';
endif;
elsifd55='1'orc_d55='1'thend55<='0';c_d55<='0';opendoor<='1';
elsifdd_cc<"010000"thenen_dw<='1';opendoor<='0';
elsifdd_cc>"011111"thenen_up<='1';opendoor<='0';
endif;
elsifg6='1'thenled<="0100000";--电梯到达6楼,数码管显示6
ifd66='1'orc_d66='1'thend66<='0';c_d66<='0';opendoor<='1';
elsifdd_cc<"100000"thenen_dw<='1';opendoor<='0';
endif;
elseen_up<='0';en_dw<='0';--电