电梯控制系统的设计与实现1系统设计分析11系统的整体设计在.docx
《电梯控制系统的设计与实现1系统设计分析11系统的整体设计在.docx》由会员分享,可在线阅读,更多相关《电梯控制系统的设计与实现1系统设计分析11系统的整体设计在.docx(13页珍藏版)》请在冰豆网上搜索。
![电梯控制系统的设计与实现1系统设计分析11系统的整体设计在.docx](https://file1.bdocx.com/fileroot1/2022-11/20/80ad6869-e9f8-4151-b841-fd9d5af7db63/80ad6869-e9f8-4151-b841-fd9d5af7db631.gif)
电梯控制系统的设计与实现1系统设计分析11系统的整体设计在
电梯控制系统的设计与实现
1系统设计分析
1.1系统的整体设计
在电梯控制系统的设计中,核心是电梯运行的状态控制器的设计。
为突出状态之间的转换关系,令电梯以同一速率升降。
主要需要考虑:
(1)电梯的人工手动控制;(2)电梯的运行状态显示;(3)电梯的策略控制设计。
本文将电梯设计分成3个模块:
Veryhardd:
该模块是整个程序的核心,是电梯控制器设计部分,主要的设计思想是将电梯的状态划分为4个:
一层状态(c1)、二层状态(c2)、三层状态(c3)、开门状态(kai)。
对每一个状态分析其所有的可能。
Seg:
功能是将楼层信号转换成可以用数码管显示的信号
Dian:
该模块的功能是将电梯工作模式利用16×16点阵显示出来。
电梯状态控制器部分用状态机来实现。
基本模型如下:
(1)每层电梯入口处设有上下请求开关,电梯内设有乘客到达层次的停站请求开关
(2)设有电梯所处位置指示装置及电梯运行模式(上升或下降)指示装置(3)电梯每秒升(降)一层楼(4)电梯到达有停站请求的楼层后,经过1s电梯门打开,开门指示灯亮,开门4s后,电梯门关闭(开门指示灯灭),电梯继续运行,直至执行完最后一个请求信号后停在当前层。
(5)能记忆电梯内外的所有请求信号,并按照电梯运行规则次序响应,每个请求信号保留至执行后消除(6)电梯运行规则:
当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕,如更高层有下楼请求,则直接升到有下楼请求的最高楼层接客,然后便进入下降模式,当电梯处于下降模式时,则与上升模式相反。
(7)电梯初始状态为一层开门
1.2电梯状态控制器的设计
1.2.1设计思路
(1)电梯输入输出端口设计。
输入端口包括:
在电梯外部的升降的请求端口(up1、up2、down2、down3),一层不需要有下降请求,最高层不需要上升请求,中间层上升、下降请求端口都应具备,高电平表示有请求信号;在电梯内部的各层停留的请求端口(k1、k2、k3),高电平表示有请求信号;一个用于驱动电梯的上升下降等动作时钟输入端口以及一个时钟频率比电梯高得多的按键时钟输入端口(clk)。
而响应的输出端口包括:
电梯内部的各层停留响应端口(a1、a2、a3);在电梯外部显示电梯的位置端口(site);电梯开门关门的状态指示端口(door),‘0’表示关门,’1’表示开门以及电梯升降指示端口(mode),’0’表示上升,’1’表示下降。
(2)电梯控制器的实现通过状态机实现,状态机设置了四个状态,电梯处于一层状态(c1)、电梯处于二层状态(c2)、电梯处于三层状态(c3)及电梯处于开门状态(kai)。
每个状态之间的转换条件由设计要求决定。
1.2.2程序设计
在电梯控制器的设计中,只设计了一个进程,以clk为进程激励信号,⑴当state(电梯状态)=c1时,电梯在一层转为上升模式,定义z=1说明有任何请求电梯都会被破坏初态,z=0电梯初态为一层开门;如果电梯为一层关门状态:
①一层有停电梯或一层有上升请求时电梯转为开门状态;②若电梯有二层上升或二层停电梯请求时,state=c2;③若电梯有三层下降或三层停电梯请求时,state=c3,并定义此情况为x=1;④若电梯有二层下降请求时,state=c2,电梯转为下降模式。
⑵当state=c2时,电梯处在二层上升模式时,①若电梯二层有停电梯或二层有上升的请求时,电梯转为二层开门状态;②若电梯三层有下降或三层有停电梯请求或x=1时,state=c3;③若电梯有二层下降或一层下降或一层停电梯请求时,电梯转为下降模式;当state=c2时,电梯处在二层下降模式时:
①若电梯二层有停电梯或二层有下降请求时,电梯转为二层开门状态;②若电梯有一层上升或一层停电梯或y=1时,state=c1;③若电梯二层有上升或三层有下降或三层有停电梯请求时,电梯模式转为上升。
⑶当state=c3时,电梯处于三层下降模式,①若电梯有三层停电梯或三层有下降请求时,电梯转为三层开门状态;②若电梯二层有下降或二层有停电梯请求时,state=c2;③若电梯一层有上升或一层有停电梯请求时state=c2;并记忆此情况为y=1;④若电梯有二层上升请求时,state=c2;并转为上升模式;⑷当state=kai时,电梯处于开门状态,并保证开门4s。
1.3显示模块的设计
表1.3译码器真值表采用动态显示模式,在扫描频率大于人眼睛的视觉暂留频率(24HZ)以上,就可以达到点亮单个七段数码管显示器。
表1.3译码器真值表
楼层
1
2
3
输入
001
010
100
输出
0000110
1011011
1001111
1.4电梯模式显示模块
设计一个16×16点阵显示电梯的运行模式,上升用向上箭头表示,见表1.4.1,下降用向下箭头表示,见表1.4.2。
表1.4.1向上箭头译码真值表
输入
输出
0011
0000110000000000
0100
0001100000000000
0101
0011000000000000
0110
0110000000000000
0111
111111*********1
1000
111111*********1
1001
0110000000000000
1010
0011000000000000
1011
0001100000000000
1100
0000110000000000
others
0000000000000000
1.5输入端口设计
在状态机的设计中,定义了7个按键输入端。
分别是:
(1)1层上升请求按键、
(2)2层上升请求按键、(3)3层下降请求按键、(4)2层下降请求按键、(5)电梯1层停止请求按键、(6)电梯2层停止请求按键(7)电梯3层停止请求按键。
1.4.2向下箭头译码真值表
输入
输出
0011
0000000000110000
0100
0000000000011000
0101
0000000000001100
0110
0000000000000110
0111
111111*********1
1000
111111*********1
1001
0000000000000110
1010
0000000000001100
1011
0000000000011000
1100
0000000000110000
others
0000000000000000
2建立模型
状态机设置了四个状态,电梯处于一层状态(c1)、电梯处于二层状态(c2)、电梯处于三层状态(c3)及电梯处于开门状态(kai)。
状态机设计状态转换如图2所示,每个状态之间的转换条件如表2所示。
图2状态机的状态转换图
表2状态机状态转换条件表
SourceState
DestinationState
Conditong
C1
Kai
Z=’0’ortingl
(1)=’1’orupl
(1)=’1’
C1
C2
downl
(2)=’1’ordownl(3)=’1’ortiongl(3)=’1’orupl
(2)=’1’ortingl
(2)=’1’
C2
Kai
tingl
(2)=’1’orupl
(2)=’1’ordownl
(2)=’1’
C2
C1
Upl
(1)=’1’ortingl
(1)=’1’ory=’1’
C2
C3
downl(3)=’1’ortingl(3)=’1’orx=’1’
C3
Kai
tingl(3)=’1’ordownl(3)=’1’
C3
C2
downl
(2)=’1’ortingl
(2)=’1’orupl
(1)=’1’ortingl
(1)=’1’orupl
(2)=’1’
3仿真结果及分析
在完整的系统设计中使用Max+PlusII10.0软件完成VHDL描述和原理图的层次设计。
在底层设计中,用VHDL分别实现每一个模块的功能,将每个模块生成可供Max+PlusII调用的器件符号,再将这些器件符号连接在一起构成整个系统原理图,如图3.1所示。
综合编译完成后,选择clk时钟信号为1kHZ,这里为使编译快速,观察方便,使用clk为10us,配置适当的输入信号,得到如图3.2所示的仿真结果。
原先电梯停留在第一层,电梯外第一层有上升请求,电梯先开门载客然后上升,电梯上升到二层,有上升的要求,继续上升,又有三层下降的请求,接着电梯模式转为下降,到二层又有二层下降请求,要求下降到一层,电梯开门载客,下降到一层,最后电梯停留在一层。
图3.1系统原理图
图3.2三层电梯的仿真波形
4总结
通过一学期对这门课的学习,基本掌握了一些基础知识,软件的运用和VHDL语言的使用,但思路还总局限于C语言的思路里,有待于继续学习与提高。
在程序的调试过程中,经常会遇到一些问题,经过努力终于运行成功了,本人体会到一点,在程序的编写过程中,要先输入整体框架,保证语法正确,一步一步输入,不要整篇程序都先输入,导致调试过程中遇到许多错误。
对于本人学习这门课的编程是重点,本人的毕业设计就是基于这门课的,所以本人在VHDL的研究上还要继续努力,争取早日能掌握好这门语言。
谢谢老师教导!
附录A:
veryhardd模块程序
libraryieee;
useieee.std_logic_1164.all;
entityveryharddis
port(up1,up2,down2,down3,clk,k1,k2,k3:
instd_logic;
site:
outstd_logic_vector(3downto1);
a1,a2,a3:
outstd_logic;
mode,door:
outstd_logic
);
endveryhardd;
architectureveryhardd_arcofveryharddis
typestate_typeis(c1,c2,c3,kai);
begin
process(clk)
variableupl,downl,tingl,cengl:
std_logic_vector(3downto1);
variablemo,x,y,z:
std_logic;
variablecnt1,cnt2:
integer;
variablestate:
state_type;
begin
if(clk'eventandclk='1')then
if(up1='0')then
upl
(1):
='1';
endif;
if(up2='0')then
upl
(2):
='1';
endif;
if(down3='0')then
downl(3):
='1';
endif;
if(down2='0')then
downl
(2):
='1';
endif;
if(k1='0')then
tingl
(1):
='1';
endif;
if(k2='0')then
tingl
(2):
='1';
endif;
if(k3='0')then
tingl(3):
='1';
endif;
if(cnt1<10)then
cnt1:
=cnt1+1;
else
casestateis
whenc1=>cengl:
="001";
mo:
='0';
ifupl/="000"ordownl/="000"ortingl/="000"then
z:
='1';
endif;
ifz='0'then
door<='1';
else
door<='0';
iftingl
(1)='1'orupl
(1)='1'then
state:
=kai;
tingl
(1):
='0';
upl
(1):
='0';
elsifupl
(2)='1'ortingl
(2)='1'then
state:
=c2;
elsifdownl(3)='1'ortingl(3)='1'then
state:
=c2;
x:
='1';
elsifdownl
(2)='1'then
state:
=c2;
mo:
='1';
endif;
endif;
whenc2=>cengl:
="010";
if(mo='0')then
iftingl
(2)='1'orupl
(2)='1'then
state:
=kai;
tingl
(2):
='0';
upl
(2):
='0';
elsif(downl(3)='1'ortingl(3)='1'orx='1')then
state:
=c3;
x:
='0';
elsif(downl
(2)='1'orupl
(1)='1'ortingl
(1)='1')then
mo:
='1';
endif;
else
if(tingl
(2)='1'ordownl
(2)='1')then
state:
=kai;
tingl
(2):
='0';
downl
(2):
='0';
elsif(upl
(1)='1'ortingl
(1)='1'ory='1')then
state:
=c1;
y:
='0';
elsif(upl
(2)='1'ordownl(3)='1'ortingl(3)='1')then
mo:
='0';
endif;
endif;
whenc3=>mo:
='1';
cengl:
="100";
if(tingl(3)='1'ordownl(3)='1')then
state:
=kai;
tingl(3):
='0';
downl(3):
='0';
elsif(downl
(2)='1'ortingl
(2)='1')then
state:
=c2;
elsif(upl
(1)='1'ortingl
(1)='1')then
state:
=c2;
y:
='1';
elsif(upl
(2)='1')then
state:
=c2;
mo:
='0';
endif;
whenkai=>door<='1';
if(cnt2<3)then
cnt2:
=cnt2+1;
else
door<='0';
cnt2:
=0;
if(cengl="001")then
state:
=c1;
elsif(cengl="010")then
state:
=c2;
else
state:
=c3;
endif;
endif;
endcase;
cnt1:
=0;
endif;
endif;
site<=cengl;
a1<=tingl
(1);
a2<=tingl
(2);
a3<=tingl(3);
mode<=mo;
endprocess;
endveryhardd_arc;
附录B:
dian模块程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydianis
port(clk,mode:
instd_logic;
sel:
outstd_logic_vector(3downto0);
q:
outstd_logic_vector(0to15)
);
enddian;
architecturedian_arcofdianis
begin
process(clk)
variableseel:
std_logic_vector(3downto0);
begin
if(clk'eventandclk='1')then
seel:
=seel+1;
if(mode='0')then
caseseelis
when"0011"=>q<="0000110000000000";
when"0100"=>q<="0001100000000000";
when"0101"=>q<="0011000000000000";
when"0110"=>q<="0110000000000000";
when"0111"=>q<="1111111111111111";
when"1000"=>q<="1111111111111111";
when"1001"=>q<="0110000000000000";
when"1010"=>q<="0011000000000000";
when"1011"=>q<="0001100000000000";
when"1100"=>q<="0000110000000000";
whenothers=>q<="0000000000000000";
endcase;
else
caseseelis
when"0011"=>q<="0000000000110000";
when"0100"=>q<="0000000000011000";
when"0101"=>q<="0000000000001100";
when"0110"=>q<="0000000000000110";
when"0111"=>q<="1111111111111111";
when"1000"=>q<="1111111111111111";
when"1001"=>q<="0000000000000110";
when"1010"=>q<="0000000000001100";
when"1011"=>q<="0000000000011000";
when"1100"=>q<="0000000000110000";
whenothers=>q<="0000000000000000";
endcase;
endif;
endif;
sel<=seel;
endprocess;
enddian_arc;
附录C:
seg模块程序
libraryieee;
useieee.std_logic_1164.all;
entitysegis
port(a:
instd_logic_vector(3downto1);
clk:
instd_logic;
q:
outstd_logic_vector(6downto0)
);
endseg;
architectureseg_arcofsegis
begin
process(clk)
begin
if(clk'eventandclk='1')then
caseais
when"001"=>q<="0000110";
when"010"=>q<="1011011";
when"100"=>q<="1001111";
whenothers=>null;
endcase;
endif;
endprocess;
endseg_arc;
电梯控制系统的设计与实现
学院:
控制理论与控制工程学院
姓名:
赵辉
学号:
640129