自动升降电梯控制设计.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

武汉理工大学FPGA课程设计
课程设计任务书
学生姓名:专业班级:
指导教师:工作单位:
题目:自动升降电梯控制设计
初始条件:ISE、Modelsim软件
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
设计任务:根据自动电梯工作原理,用ISE软件设计一个自动升降电梯控制器。

该系统主要由四个模块构成:外部数据高速采集模块设计、信号存储模块、基于FPGA的中央处理模块和信号的输出、显示模块。

设计要求:
(1)设计一个6层楼的电梯控制器;
(2)该控制器可控制电梯完成6层楼的载客服而且遵循方向优先原则,并能响应提前关门延时关门,并具有超载报警和故障报警;
(3)同时指示电梯运行情况和电梯内外请求信息。

时间安排:
序号设计内容
所用
时间
1 根据课题的技术指标,确定整体方案,并进行参数设计计算2天
2 根据实验条件进行全部或部分程序的编写与调试,并完成基本功能4天
3 总结编写课程设计报告1天
合计1周指导教师签名:年月日
系主任(或责任教师)签名:年月日
目录
摘要 (2)
Abstract (3)
一、VHDL与ISE简介 (4)
1.1 VHDL语言介绍 (4)
1.1.1 VHDL语言特点介绍 (4)
1.1.2 VHDL的设计步骤 (4)
1.1.3 VHDL语言编程格式 (5)
1.2 ISE概述 (6)
二、总体方案设计 (7)
2.1设计要求 (7)
2.2 方案论证 (7)
2.4 电梯控制器的总体设计方案 (8)
2.5 电梯控制器模块设计 (9)
2.5.1 外部数据高速采集模块设计 (10)
2.5.2 信号存储模块 (10)
2.5.3 基于FPGA的中央处理模块 (11)
2.5.4 信号的输出、显示模块 (11)
三、程序设计及波形仿真 (13)
3.1 程序流程分析 (13)
3.1.1端口、寄存器设计说明 (14)
3.1.2 程序调试及引脚锁定 (15)
3.2波形仿真 (16)
3.2.1电梯功能实现与仿真结果分析 (17)
四、设计总结 (20)
4.1 可行性分析 (20)
4.2 总结 (20)
参考文献 (21)
附录 (22)
摘要
电梯作为垂直方向的交通工具,在高层建筑和公共场所已成为不可或缺的设备。

中国是全球最大的电梯市场,也具有最强的电梯生产能力,但由于缺乏自主知识产权和核心技术,自主品牌占市场的份额很少。

随着社会需求的变化,电梯朝着节能、环保及智能化方向发展。

本设计语言采用VHDL,源程序Xilinx公司的ISE软件仿真。

运用有限状态机的设计方法,设计了两个进程相互配合,状态机进程作为主要进程,信号灯控制进程作为辅助进程。

在主进程中定义了7个状态,分别是“dooropen”“doorclose”“doorwait4”“up”“down”和“stop”,在电梯时钟的触发下,通过当前状态和信号灯信号判定下一状态。

信号灯控制进程中,信号灯存储按键请求情况,它的熄灭是由状态机进程中传出的信号来控制。

关键字:电梯控制器;VHDL;FPGA
Abstract
Elevator has become an indispensable device as a vertical transport in high-rise buildings and public places. China is the world’s largest elevator market ,and also has the highest lift capacity. But the lack of independent intellectual property rights and core technologies, the market share of own brands account for very little. With the changing of the community’s needs, elevator develop towards energy saving, environmental protection and intelligent.
This design which uses VHDL simulated by Xilinx’s ISE software. I use method named finite state machine which two processes complement each other. The state machine process act as the main process, and the signal control process act as a assistant. Seven states were defined in the main process, namely “stopon1” “dooropen” “doorclose” “doorwait4” “up”“down” and “stop”. Triggered by the lift’s clock, the next state is dete rmined by the current state and the signal. In signal control process, registers keep input value, and lamps black out when the control process, registers keep input value, and lamps black out when the control signal in the main process is high value.
Key words: Elevator Controller;VHDL State Machine;FPGA
一、VHDL与ISE简介
1.1 VHDL语言介绍
1.1.1 VHDL语言特点介绍
VHDL作为一个规范语言和建模语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。

VHDL具有以下几方面的特点:
功能强大:VHDL具有功能强大的语言结构。

它可以用明确的代码描述复杂的控制逻辑设计。

并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。

可移植性:VHDL语言是一个标准语言,其设计描述可以为不同的EDA工具支持。

独立性:VHDL的硬件描述与具体的工艺技术和硬件结构无关。

可操作性:由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。

灵活性:VHDL最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。

使其在任何大系统的设计中,随时可对设计进行仿真模拟。

1.1.2 VHDL的设计步骤
采用VHDL的系统设计,一般有以下6个步骤。

(1)要求的功能模块划分;
(2)VHDL的设计描述(设计输入);
(3)代码仿真模拟(前仿真);
(4)计综合、优化和布局布线;
(5)布局布线后的仿真模拟(后仿真);
(6)设计的实现(下载到目标器件)。

1.1.3 VHDL语言编程格式
1、一个完整的VHDL程序是以下五部分组成的:
库(LIBRARY):储存预先已经写好的程序和数据的集合。

程序包(PACKAGE):声明在设计中将用到的常数、数据类型、元件及子程序。

实体(ENTITY):声明到其他实体或其他设计的接口,即定义本定义的输入输出端口。

构造体(ARCHITECTUR):定义实体的实现。

电路的具体描述配置(CONFIGURATION):一个实体可以有多个构造体,可以通过配置来为实体选择其中一个构造体。

2、实体
实体(ENTITY)是VHDL设计中最其本的组成部分之一(另一个是结构体),VHDL表达的所有设计均与实体有关。

实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只是定义所需的全部输入/输出信号。

实体格式如下:
ENTITY 实体名 IS
[GENERIC(常数名:数据类型[:设定值])] 类属说明
PORT 端口说明
(端口信号名1;模式类型;端口信号名2:模式类型;端口信号名3:模式类型;端口信号名4:模式类型)语句或常量定义申明实体语句
END 实体名;
(3)结构体
所有能被仿真的实体都由结构体(ARCHITECTURE)描述,即结构体描述实体的结构或行为,一个实体可以有多个结构体,每个结构体分别代表该实体功能的不同实现方案。

结构体格式:
ARCHITECTURE 结构体名OF 实体名 IS
[定义语句(元件例化);]
BEGIN
并行处理语句;
END 结构体名;
1.2 ISE概述
ISE的全称为Integrated Software Environment,即“集成软件环境”,是Xilinx
公司的硬件设计工具。

相对容易使用的、首屈一指的PLD设计环境。

ISE将先进的技术与灵活性、易使用性的图形界面结合在一起,不管您的经验如何,都让您在最短的时间,以最少的努力,达到最佳的硬件设计。

功能及作用:
1、设计输入
ISE软件提供的设计输入工具包括用于HDL代码输入和报告查看的ISE文本编辑器(TextEditor),用于原理图编辑的工具ECS(Engineering Capture System),用于P CORE的COREGenerator,用于状态机设计的StateCAD,以及用于约束文件
编辑的Constraint Editor等。

2、综合
ISE的综合工具不但包括了Xilinx自身提供的综合工具xsr,同时还可以集成
MentorGraphics公司的LeonardoSpectrum和Synplicity公司的Synplify
3、仿真
ISE本身自带了图形化波形编辑功能的仿真工具HDL Bencher,同时又提供了使用
ModelTechnology公司的ModelSim进行仿真的接口。

4、实现
ISE的实现功能包括了翻译(Translate)、映射(Map)、布局布线(Place and Route)等。

5、下载
下载功能包括了BitGen,用于将布局布线后的设计文件转换为比特流(Bitstream)文件。

还包括了iMPACT功能,用于进行设备配置和通信,控制将程序烧写到FPGA 芯片中去。

二、总体方案设计
2.1设计要求
1、设计一个6层楼的电梯控制器。

2、该控制器可控制电梯完成6层楼的载客服而且遵循方向优先原则,并能响应提前关门延时关门,并具有超载报警和故障报警;
3、同时指示电梯运行情况和电梯内外请求信息。

2.2 方案论证
1、内部请求优先控制方式
内部请求优先控制方式类似于出租车的工作方式,先将车上的人送至目的地,再去载客。

作为通用型电梯应该服务于大多数人,必须考虑电梯对内、外请求的响应率P: Pin = 100%;
Pout = 0~100%;
在内部请求优先控制方式中,当电梯外部人的请求和电梯内部人的请求冲突时,外部人的请求信号可能被长时间忽略,因而它不能作为通用型电梯的设计方案。

2、单向层层停控制方式
单向层层停控制方式等同于火车的运行方式,遇站即停止、开门。

这种方案的优点在于“面面俱到”,可以保证所有人的请求都能得到响应。

缺点是:效率低,能耗高,时间长。

3、方向优先控制方式
此方式是指当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号和梯内乘客下电梯的请求,这些请求信号由下而上逐个执行,直到最后一个请求信号执行完毕。

优点是效率高,对用户响应为100%,时间段,节省能源。

综上所述:本次设计中电梯控制方式选择为方向优先控制方式。

2.4 电梯控制器的总体设计方案
控制器的功能模块如图2.1所示,包括主控制器、楼层选择器、状态显示器、译码器和楼层显示器。

乘客在电梯中选择所要到达的楼层,通过主控制器的处理,电梯开始运行,状态显示器显示电梯的运行状态,电梯所在楼层数通过译码器译码从而在楼层显示器中显示。

由于其他模块相对简单很多,所以主控制器是核心部分。

图2.1电梯控制器功能模块
电梯控制器运用状态机的设计方法,思路比较清晰。

可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。

根据电梯的实际工作情况,可以把状态机设置成“电梯停留在第1层”、“开门”、“关门”、 “开门等待”、“上升”、“下降”和“停止状态”、“故障”等不同状态。

各个状态之间的转换条件可由上面的设计要求所决定。

各状态机之间转换图如图2.2所示:
图2.2 电梯控制状态流程图 状态显示
主控制器
楼层选
择器译码器楼层显示
2.5 电梯控制器模块设计
图2.3 系统组成
根据设计要求,各模块设计为:
1. 外部数据高速采集模块设计
2. 信号存储模块
3. 基于FPGA的中央处理模块
4. 信号的输出、显示模块
2.5.1 外部数据高速采集模块设计
对外部信号采集、处理要求电梯控制器:
(1)外部请求信号的实时、准确采集;
(2)准确、实时的捕捉楼层到达信号;
(3)有效的防止楼层到达信号、外部请求信号的误判。

控制器采用FPGA作为系统控制的核心,系统时钟频率是32.0000MHz,完全可以满足实时采集数据的要求。

由于电路中毛刺现象的存在,信号的纯净度降低,单个的毛刺往往被误作为系统状态转换的触发信号,严重影响电梯的正常工作。

可以采用多次检测的方法解决这个问题,对一个信号进行多次采样以保证信号的可信度。

外部请求信号的输入形式为按键输入,到达楼层信号来自光敏传感器,关门中断信号及超载信号则产生于压力传感器。

键盘、光敏外部输入接口电路未设计。

2.5.2 信号存储模块
电梯控制器的请求输入信号有18个(电梯外有6个上升请求和6个下降请求的用户输入断口,电梯内有6个请求用户输入断口),由于系统对内、外请求没有设置优先级,各楼层的内、外请求信号被采集后可先进行运算,再存到存储器内。

电梯运行过程中,由于用户的请求信号的输入是离散的,而且系统对请求的响应也是离散的,因此请求信号的存储要求新的请求信号不能覆盖原来的请求信号,只有响应动作完成后才能清除存储器内对应的请求信号位。

2.5.3 基于FPGA的中央处理模块
中央数据处理模块是系统的核心,通过对存储的数据(含请求、到达楼层等信号)进行比较、判断以驱动系统状态的流转。

电梯工作过程中共有9种状态:等待、上升、下降、开门、关门、停止、休眠、超载报警以及故障报警状态。

一般情况下,电梯工作起始点是第一层,起始状态是等待状态,启动条件是收到上升请求。

超载状态时电梯关门动作取消,同时发出警报,直到警报被清除;故障时电梯不执行关门动作,同时发出警报,直到警报被清除(看门狗信号有效的条件是一层楼连续发生关门中断情况超过3次)。

本系统由请求信号启动,运行中每检测到一个到达楼层信号,就将信号存储器的请求信号和楼层状态信号进行比较,再参考原方向信号来决定是否停止,转向等动作。

2.5.4 信号的输出、显示模块
本系统的输出信号有两种:一种是电机的升降控制信号(两位)和开门/关门控制信号;另一种是面向用户的提示信号(含楼层显示、方向显示、已接受请求显示等)。

电机的控制信号一般需要两位,本系统中电机有3种工作状态:正转、反转和停转状态。

两位控制信号作为一个三路开关的选通信号,此三路开关选用模拟电子开关。

系统的显示输出包括数码管楼层显示、数码管请求信号显示和表征运动方向的箭头形指示灯的开关信号。

开始
电梯是否复位用户输入程序段是否在开关门
是否空闲
是否处于上行是否处于下行
结束
电梯复位程序
开关门程序
是否上行召换是否下行召换
定上行指示定下行指示执行运行程序段
执行运行程序段


否否否否


是是



图2.4电梯控制运行流程图
三、程序设计及波形仿真
3.1 程序流程分析
电梯的运行规则确立后,需对整个控制程序的设计作一个流程规范。

对程序进行模块化构思。

根据VHDL语言的规则,程序必须由最基本的实体和结构体构成。

实体对控制器的端口进行定义,结构体对各端口的行为进行描述。

因此程序运行需经过以下流程:VHDL 库调用;确立控制器的端口及相关的寄存器;根据电梯运行规则,设计相关运行描述;对电梯内外信号进行处理。

具体流程图如图3.1所示。

程序开始
VHDL库调用
设置控制器的端口
设置相关的寄存器
电梯运行规则描述
电梯信号处理
程序结果
图3.1流程图
3.1.1端口、寄存器设计说明
(1)由功能要求得到本程序设计的端口必须包括:
输入端口:时钟(clk,频率为2Hz)、超载(full)、关门中断(deng)、提前关门(quick)、清除报警(clr)、电梯外人的上升请求信号(c_u1,c_u2,c_u3, ,c_u4,c_u5)、电梯外人的下降请求信号(c_d2,c_d3,c_d4,c_d5,c_d6)、电梯内人的请求信号(d1,d2,d3,d4,d5,d6)、到达楼层信号(g1,g2,g3,g4,g5,g6)。

输出端口:电梯门控制信号(door)、电梯所在楼层显示(led)电梯外人上升请求信号显示(led_c_u)、电梯外人下降请求信号显示(led_c_d)、电梯内请求信号显示(led_d)、看门狗报警信号(wahaha)、电梯运动方向显示(ud)、超载警告信号(alarm)、电机控制信号(up,down)。

图3.2 电梯端口分布图
(2)程序要求的寄存器(中间信号)包括:
电梯内人请求信号寄存信号(d11,d22,d33,d44,d55,d66);
电梯外人上升请求信号寄存信号(c_u11,c_u22,c_u33,c_u44,c_u55);
电梯外人下降请求信号寄存信号(c_d22,c_d33,c_d44,c_d55,c_d66);
分频信号、关门延时计数器、看门狗计数器(q,q1,q2);
电梯内外请求信号寄存器(dd,cc_u,cc_d,dd_cc);
开门使能信号(opendoor);
电梯运动方向信号寄存器(updown);
预备上升、预备下降预操作使能信号(en_up,en_dw)。

3.1.2 程序调试及引脚锁定
(1)建立好工作目录,以便设计工程项目的存储,打开ISE软件,(2)在工具栏中选择“新建”按钮。

选择“New Project>VHDL Moudle”(3)在文本输入界面内进行程序输入,如图3.3所示
图3.3
(4)输入保存以后,对程序进行编译。

若有错误则修改程序重新编译。

进行编译后的总结报告如图3.4所示:
图3.4
3.2波形仿真
(1)编译完成后,会自动弹出Modelsim波形仿真界面;
(2)根据程序对端口的定义,对输入端口进行初始化;
(3)创立输入波形。

对程序进行仿真,观察输出信号,得出结论。

3.2.1电梯功能实现与仿真结果分析
1、设置输入
图3.2.1设计好的输入波形
2、结果分析
以下将以“电梯停在一楼时,接受到请求信号c_d2、c_d3、c_u4和d6”为例,分析操作这些请求信号完成的过程,并在电梯运行到四楼时对超载报警、提前关门、延时关门、故障报警进行仿真分析。

1. 电梯停在一楼时,接受到请求信号c_d3、c_d2、c_u4和d6,并把请求信号写入相应的寄存器。

led显示电梯所在楼层;led_d、led-c_u和led_c_d显示用户的请求。

2. 电梯经过准备上升状态后,进入上升状态,到达2楼,3楼时,不停继续前进。

3. 电梯上升到4楼时,响应请求(c_u4),开门载客;进入预备上升状态。

图3.2.2电梯控制程序仿真局部放大图2
注:1. 电梯停在一楼时,接受到请求信号c_d3、c_d2、c_u4和d6,并把请求信号写入相应的寄存器。

led显示电梯所在楼层;led_d、led-c_u和led_c_d显示用户的请求从上图可以看出:
1.电梯从1楼上升到6楼时,响应请求(d_3),开门卸客;继续上升。

2.电梯到达二楼,响应请求开门卸客
图3.2.3电梯控制程序仿真局部放大图3
从上图可以看出:
1、电梯到达6楼,进入预备下降状态,并开始下降;
2、电梯到达3楼,电梯应超载信号(full=‘1’),发出超载警报alarm;超载信号消失
(full=‘0’),电梯重新进入预备下降状态。

图3.2.4电梯控制程序仿真局部放大图4
1 、电梯接受到提前关门信号quick,电梯跳过关门等待时间。

仿真图中q1从1跳到3;进入关门状态。

2、电梯接受到deng、c_d3和d3电梯重新进入预备下降状态,并且c_d3和d3信号都可以对q2(q2<3时)进行清零处理。

3、当连续的关门中断的次数超过3次时,不认为是出自乘客的需要,而认为是故障,并报警,等技术员处理完故障时,用clr信号才可以清除报警。

4、电梯排除故障后继续运行,电梯执行完所有请求时电梯将停在1楼待机。

四、设计总结
4.1 可行性分析
电梯控制器系统设计已经全部完成,基本实现了预期效果,实现了电梯按预定运行规则上升、下降、载客等功能,并设计了提前关门功能,使电梯运行更便捷,设计了关门延时功能、超载报警功能、故障报警功能,使电梯运行更加安全更加可靠。

在本设计中,因为考虑了扩展性,所以在信号定义的时候就使用了二进制的向量,而不是整数。

在设计方法上也做了特殊的设计,所以使得扩展性较好。

如果要实现n层电梯的控制,首先在端口的地方就要加入所有的按键,而指示灯只要把向量中的6改成n就可以了。

在本设计过程中还需要改进的地方有,电梯运行规则的优化(如设计闲时忙时控制规则)、电梯运行速度的控制、设计更多的报警功能等。

电梯控制系统的设计中体现了VHDL覆盖面是如此的广,描述能力强,是一个多层次的硬件描述语言及运行速度快,使用方便,便于修改,设计简单等特点。

本设计在实用方面和参考方面具有一定的价值。

4.2 总结
经过本次课程设计,我对电梯控制系统的工作原理有了深入认识,学会了对ISE电路仿真设计。

经过一个学期的FPGA课程的学习,通过在图书馆查阅有关资料,了解了电梯的起源和发展过程,并且加深了对电梯运行过程、控制系统的认识,熟悉了FPGA在电梯控制系统中的运用。

并且在所学知识的基础上,利用己有的电梯控制系统的设计,尝试了对电梯控制系统的研究。

并且,使我将原来所学的知识系统化、理论化、实用化,对如何使用己有知识及获取相关资料方面的能力又有了提高。

通过这次设计,我还认识到无论做什么,都需要踏实,勤奋,严谨的工作态度,这对我以后的工作将会产生深远的影响。

设计达到了预定的设计目的,完成了电梯控制器的基本功能和达到了基本的技术指标。

利用FPGA实现了对电梯的控制,通过合理的设备选型、参数设置和软件设计,提高了电梯运行的可靠性。

用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用ISE软件进行编译优化、仿真、极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。

参考文献
[1]黄正巾,徐坚等. CPLD系统设计与应用[M].北京:电子工业出版社,2002,110~123.
[2]蒋璇,臧春花.数字系统设计与PLD应用技术[M].北京:电子工业出版社, 2001,23~34.
[3]孟宪元.可编程ASIC集成数字系统[M].北京:电子工业出版社,2003,231~243.
[4]潘松,王国栋. VHDL实用教程(修订版)[M].成都:成都电子科技大学出版社,2002,45~87.
[5]宋万杰,罗丰,吴顺君.CPLD技术及其应用[M].西安:西安电子科技大学出社,2005,25~56.
[6]王锁萍.电子设计自动化(EDA)教程[M].成都:成都电子科技大学出版社,2006,67~90.
[7] 邱玉春. 李文俊.VHDL系统设计[M].电子产品世界,2007, 50~53.
[8] 苏长赞. 电梯设计与应用[M]. 北京:人民邮电出版社,2008,76~91.
[9] 楼然苗. CPLD设计指导[M]. 北京航空航天大学出版社,2007,223~225.
[10] 彭为. 数字系统设计[M]. 电子工业出版社,2006,61~71.
[14] 何立民.EDA应用技术选编[M].北京:北京航空航天大学出版社,2008,44~51.
[15] 李华EDA实用接口技术[M]. 北京航空航天大学出版社2003,176~182.
附录
电梯程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity dianti is
port ( clk : in std_logic; --时钟信号(频率为2Hz)
full,deng,quick,clr : in std_logic; --超载、关门中断、提前关门清除报警信号c_u1,c_u2,c_u3,c_u4,c_u5: in std_logic; --电梯外人的上升请求信号
c_d2,c_d3,c_d4,c_d5,c_d6 : in std_logic; --电梯外人的下降请求信号
d1,d2,d3,d4,d5,d6 : in std_logic; --电梯内人的请求信号
g1,g2,g3,g4,g5,g6 : in std_logic; --到达楼层信号
door : out std_logic_vector(1 downto 0); --电梯门控制信号
led : out std_logic_vector(6 downto 0); --电梯所在楼层显示led_c_u:out std_logic_vector(5 downto 0); --电梯外人上升请求信号显示led_c_d:out std_logic_vector(5 downto 0); --电梯外人下降请求信号显示
led_d : out std_logic_vector(5 downto 0); --电梯内请求信号显示wahaha : out std_logic; --看门狗报警信号
ud,alarm : out std_logic; --电梯运动方向显示,超载警告信号up,down : out std_logic ); --电机控制信号和电梯运动
end dianti;
architecture behav of dianti is
signal d11,d22,d33,d44,d55,d66:std_logic; --电梯内人请求信号寄存信号signal c_u11,c_u22,c_u33,c_u44,c_u55:std_logic; --电梯外人上升请求信号寄存信号signal c_d22,c_d33,c_d44,c_d55,c_d66:std_logic; --电梯外人下降请求信号寄存信号signal q:integer range 0 to 1; --分频信号
signal q1:integer range 0 to 6; --关门延时计数器
signal q2:integer range 0 to 9; --看门狗计数器
signal dd,cc_u,cc_d,dd_cc:std_logic_vector(5 downto 0); --电梯内外请求信号寄存器signal opendoor:std_logic; --开门使能信号
signal updown:std_logic; --电梯运动方向信号寄存器
signal en_up,en_dw:std_logic; --预备上升、预备下降预操作使能信号begin
com:process(clk)
begin
if clk'event and clk='1' then
if clr='1' then q1<=0;q2<=0;wahaha<='0'; --清除故障报警elsif full='1' then alarm<='1'; q1<=0; --超载报警
if q1>=3 then door<="10";
else door<="00";
end if;
elsif q=1 then q<=0;alarm<='0';
if q2=3 then wahaha<='1'; --故障报警else
if opendoor='1' then door<="10";q1<=0;q2<=0;up<='0';down<='0'; --开门操作
elsif en_up='1' then --上升预操作
if deng='1' then door<="10";q1<=0;q2<=q2+1; --关门中断
elsif quick='1' then q1<=3; --提前关门
elsif q1=6 then door<="00";updown<='1';up<='1';
--关门完毕,电梯进入上升状态elsif q1>=3 then door<="01";q1<=q1+1; --电梯进入关门状态
else q1<=q1+1;door<="00"; --电梯进入等待状态
end if;
elsif en_dw='1' then --下降预操作
if deng='1' then door<="10";q1<=0;q2<=q2+1;
elsif quick='1' then q1<=3;
elsif q1=6 then door<="00";updown<='0';down<='1';
elsif q1>=3 then door<="01";q1<=q1+1;
else q1<=q1+1;door<="00";
end if;
end if;
if g1='1' then led<="1001111"; --电梯到达1楼,数码管显示1 if d11='1' or c_u11='1' then d11<='0'; c_u11<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态elsif dd_cc>"000001" then en_up<='1'; opendoor<='0';
--有上升请求,则电梯进入预备上升状态elsif dd_cc="000000" then opendoor<='0'; --无请求时,电梯停在1楼待机end if;
elsif g2='1' then led<="0010010"; --电梯到达2楼,数码管显示2
if updown='1' then --电梯前一运动状态位上升
if d22='1' or c_u22='1' then d22<='0'; c_u22<='0'; opendoor<='1';
--有当前层的请求,则电梯进入开门状态elsif dd_cc>"000011" then en_up<='1'; opendoor<='0';
--有上升请求,则电梯进入预备上升状态elsif dd_cc<"000010" then en_dw<='1'; opendoor<='0';
--有下降请求,则电梯进入预备下降状态end if;
--电梯前一运动状态为下降
elsif d22='1' or c_d22='1' then d22<='0'; c_d22<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态elsif dd_cc<"000010" then en_dw<='1'; opendoor<='0';
--有下降请求,则电梯进入预备下降状态
elsif dd_cc>"000011" then en_up<='1'; opendoor<='0';
--有上升请求,则电梯进入预备上升状态end if;
elsif g3='1' then led<="0000110"; --电梯到达3楼,数码管显示3
if updown='1' then
if d33='1' or c_u33='1' then d33<='0'; c_u33<='0';opendoor<='1';
elsif dd_cc>"000111" then en_up<='1'; opendoor<='0';
elsif dd_cc<"000100" then en_dw<='1'; opendoor<='0';
end if;
elsif d33='1' or c_d33='1' then d33<='0'; c_d33<='0'; opendoor<='1';
elsif dd_cc<"000100" then en_dw<='1'; opendoor<='0';
elsif dd_cc>"000111" then en_up<='1'; opendoor<='0';
end if;
elsif g4='1' then led<="1001100"; --电梯到达4楼,数码管显示4
if updown='1' then
if d44='1' or c_u44='1' then d44<='0'; c_u44<='0'; opendoor<='1';
elsif dd_cc>"001111" then en_up<='1'; opendoor<='0';
elsif dd_cc<"001000" then en_dw<='1'; opendoor<='0';
end if;
elsif d44='1' or c_d44='1' then d44<='0'; c_d44<='0'; opendoor<='1';
elsif dd_cc<"001000" then en_dw<='1'; opendoor<='0';
elsif dd_cc>"001111" then en_up<='1'; opendoor<='0';
end if;
elsif g5='1' then led<="0100100"; --电梯到达5楼,数码管显示5 if updown='1' then
if d55='1' or c_u55='1' then d55<='0'; c_u55<='0';opendoor<='1';
elsif dd_cc>"011111" then en_up<='1'; opendoor<='0';
elsif dd_cc<"010000" then en_dw<='1'; opendoor<='0';。

相关文档
最新文档