电梯模拟系统
51单片机模拟智能电梯系统代码及注释
#include<>#define uint unsigned int#define uchar unsigned char〃延时程序,以毫秒为单位,用软件计时,输入的参数为毫秒数void Delay_ms( uint Time);〃电梯向上走void Up();I〃电梯向下走void Down();〃报警函数void Warnning();〃获取目的楼层void Destination();//显示某一楼层void Display( uchar n, uchar a);//闪烁显示到达的楼层void Flash( uchar a);//点阵键盘扫描uchar KBScan();//延时void dl_ms();//解析出按键所代表的楼层uchar Reprsent();#include ""uchar code TAB[16]= (0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71);sbit P0_0 = P0A0;sbit P0_1 = P0A1;sbit P0_2 = P0A2;sbit P0_3 = P0A3;sbit P0_4 = P0A4;sbit P0_5 = P0A5;sbit P0_6 = P0A6;s bit P0_7 = P0A7;sbit P1_0 = P1A0;uchar lift = 1;〃电梯所在的楼层uchar destination1 = 1;〃电梯的目的楼层uchar flag = 0;〃进入电梯程序的标志uchar key;〃按键的键码uchar request[] = {0, 0, 0, 0, 0, 0, 0, 0, 0);//1-8 楼有无请求,有请求为 1uchar status = 1;//电梯往上还是往下走,1为上,0为下//报警的响声的频率产生void Timer1() interrupt 3 { P1_0=-P1_0;TH1 = 0xfc;TL1 = 0x0c;) int main(){'uchar i;P0 = 0xff;P2 = 0x76; //数码管‘H’EA = 1; //开启外部中断INT0EX0 = 1;IT0 = 1;while(1) //检查flag 标志{ //flag初始化为0if(flag == 1) 〃在中断中将其置1break;P1 = 0x01; 〃数码管跑马显示HDelay_ms( 100); //flag置1后则进入电梯程序for(i = 0; i < 5; ++i) (P1 = P1 << 1;Delay_ms( 100);) 一)while(1) 〃电梯程序的循环(if( (key = KBscan()) == 0x77) 〃若点阵按键右下角的按键(其代码为0x77)按下(Warnning(); 〃则报警) else (Destination(); 〃查询有无楼层请求到达if( destination1 >= lift) 〃请求的楼层比要到达的楼层高(Up(); 〃电梯向上走) else (〃否则电梯向下走;Down();)))return 0;)〃中断请求,将flag置1,表示要进入电梯程序void Int0() interrupt 0(flag = 1;)〃延时程序,以毫秒为单位,用软件计时,输入的参数void Delay_ms( uint Time)( 一uint i = 0, j = 0;for(i = 0; i < Time; ++i) (for(j = 0; j < 125; ++j);〃电梯向上走void Up() (uchar n, m; //n为所在楼层,m 为存储查询有无楼层请求的变量( uchar i;〃循环控制status = 1;〃置1表示电梯向上走for( n = lift; n <= destination1; ++n) 〃电梯到达目的楼层之前往上走(Display( n, 1); //没到达一楼就显示该楼层数lift = n;m = Represent(); if( m == 9) (Warnning();) else (request[m] = 1;)for(i = 1; i <= 8; ++i)〃若请求到达的楼层在所在楼层和目的楼层之间{〃则停下闪烁显示if( request[i] == 1 && i == n) //并将其对应的 request 清零{request[i] = 0; Flash( 1); ))) --n; lift = n;( Flash( 1);〃到达目的楼层闪烁显示该楼层)//电梯向下走void Down() {uchar n, m; //n为所在楼层,m 为存储查询有无楼层请求的变量uchar i;//循环控制//读取点阵键盘//报警键按下则报警〃有楼层请求到达〃将对应的request 置1for(i = 1; i <= 8; ++i)〃若请求到达的楼层在所在楼层和目的楼层之间{〃则停下闪烁显示if( request[i] == 1 && i == n) //并将其对应的 request 清零{request[i] = 0; Flash( 0);))) ++n; lift = n; Flash( 0);〃到达目的楼层闪烁显示该楼层)〃报警函数void Warnning() {TMOD = 0x10; //T1定时器初始化ET1 = 1; TH1 = 0xfc; TL1 = 0x0c; TR1 = 1; while(1) {P1=0x04; P2=0x07; Delay_ms( 5); P1=0x08; P2 = 0x3f; Delay_ms( 5); P1=0x10;status = 0;〃置1表示电梯向上走for( n = lift; n >= destinationl; --n) 〃电梯到达目的楼层之前往下走(Display( n, 0);楼层数lift = n;m = Represent(); if( m == 9) (Warnning();) else%(request[m] = 1;)//没到达一楼就显示该〃读取点阵键盘//报警键按下则报警〃有楼层请求到达〃将对应的request 置1P1=0x02; P2 = 0x6D; Delay_ms( 5); //显示STOPP2=0x73;Delay_ms( 5);if( KBScan() != 0x77) 〃报警键没有按{ 〃则跳出,并停止喇叭响break;) ))¥〃获取目的楼层void Destination() {uchar j, n; 〃j循环控制变量,n存储度点阵键盘变量n = Represent(); 〃有键按下request[n] = 1; 〃其对应的楼层request 置 1if( status == 1) 〃若电梯向上走则从高楼层到低楼层扫描〃以此达到判断优先级的目的!{for(j = 8; j >= 1; --j) {if( request[j] == 1){request[j] = 0; 〃哪一层有请求destination1 = j; 〃则将目的楼层设为该楼break; 〃并将其对应的request置1,然后跳出)),)else if( status == 0) 〃若电梯向下走则从低楼层到高楼层扫描{ 〃以此达到判断优先级的目的for(j = 1; j <= 8; ++j){if( request[j] == 1){request[j] = 0;destination1 = j; break;))〃显示某一楼层void Display( uchar n, uchar a)( uchar i, b;" 一一if(a == 1)( b=0x73;)else if(a == 0)( b = 0x5E;)for(i = 0; i < 60; ++i)P1=0x20;P2 = b;Delay_ms( 10);P1 = 0x02;P2 = TAB[n];Delay_ms( 10);//闪烁显示到达的楼层void Flash( uchar a) (uchar i, j, b;uchar m;if(a == 1) //a=1 表示向上(b = 0x73; //七段码P)表示向下/ else if(a == 0) //a=0(b = 0x5E; //七段码 d) for(i = 0; i < 5; ++i) {m = Represent(); 〃闪烁时判断有无楼层请求到达 request[m] = 1; for(j = 0; j < 15; ++j) 〃闪烁显示楼层和P 或者d(P1=0x20; P2 = b; Delay_ms( 10); P1 = 0x02; P2 = TAB[lift];Delay_ms( 10);)一for(j = 0; j < 15; ++j) (P1 = 0x20; P2 = b; Delay_ms( 10); P1 = 0x02; P2 = 0x00;Delay_ms( 10);}一)}》#include ""〃延时void dl_ms()( 一uchar i;for(i = 0; i < 200; ++i);〃点阵键盘扫描uchar KBScan() (uchar sccode, recode; //sccode 低位,recode 高位uchar i, a; //i循环控制,a 读取P0 口P0 = 0x0f;if( (P0 & 0x0f) != 0x0f) //有无键按下(dl_ms();〃消抖延时 if( (P0 & 0x0f) != 0x0f)〃有键按下则继续recode = 0x7f; for(i = 1; i <= 4; ++i) (〃先显示P 或者d 以及楼层数〃再显示P 或者d 而不显示楼层数〃以此达到闪烁的目的P0 = recode; 〃从P0的最高位开始扫描,即点阵键盘第四行if( (P0 & 0x0f) != 0x0f)# {a = P0; 〃若该行有键按下,则返回其代码sccode = a & 0x0f;recode = recode & 0xf0;return (sccode + recode);)else{recode = (recode >> 1) | 0x80; //若没有则扫描其上面一行))))return 0; )//解析出按键所代表的楼层uchar Represent(){uchar key, n;key = KBScan();switch( key){case 0xee: n = 1; break; case 0xed: n = 2; break; case 0xeb: n = 3; break; case 0xe7: n = 4; break; case 0xde: n = 5; break; case0xdd: n = 6; break; case 0xdb: n = 7; break; case 0xd7: n = 8; break; case 0x77: n = 9; break; default: n = 0; break;)return n; )。
组态王实验案例——三层电梯
组态王实验案例——三层电梯三层电梯组态王实验案例一、实验目的:掌握三层电梯的组态王图形化编程方法,了解电梯控制系统的基本原理,掌握电梯调度算法。
二、实验设备:1.电梯模拟系统(组态王软件);2.电梯控制器。
三、实验原理:电梯调度算法是电梯控制系统的核心部分。
在本实验中,我们将通过组态王软件对三层电梯进行图形化编程,实现对电梯的自动调度。
四、实验步骤:1.创建工程:启动组态王软件,选择新建工程,设置工程名称和目录路径。
2.添加设备:选择设备配置向导,选择PLC和人机界面,并按照提示进行配置。
3.界面设计:选择人机设计,设计电梯的上行、下行按键,显示当前楼层和电梯状态的指示灯等。
4.程序编写:选择PLC编程,使用组态王提供的图形化编程语言进行程序设计。
根据电梯的工作原理和调度算法,编写电梯的运行逻辑和调度策略。
5.调试运行:保存程序后,选择模拟运行,观察电梯的运行情况,进行调试和优化。
五、实验结果:经过调试和优化后,我们成功实现了三层电梯的自动调度。
在电梯界面上,我们可以看到当前楼层和电梯状态的指示灯实时更新。
当按下上行或下行按钮时,电梯会自动根据调度策略选择最合适的楼层进行运行,到达目的地后会触发门禁信号,打开电梯门,并自动调整回待命状态。
六、实验总结:通过本次实验,我们深入了解了电梯控制系统的工作原理和调度算法。
通过组态王软件的图形化编程,我们可以方便地设计和调试复杂的电梯控制系统。
电梯作为现代化大楼中不可或缺的交通工具,其安全性和效率性对人们的生活和工作起着重要的作用。
掌握电梯控制系统的原理和优化方法,对于提高电梯运行的效率和安全性具有重要意义。
电梯运行模拟控制器
目录1.课程设计简介 (1)1.1简介 (1)1.2设计总电路图 (2)1.3实物图 (4)2.设计题目 (4)3.总体设计 (6)3.1电梯运行模拟控制器的总体运作流程 (6)3.2电梯运行模拟控制器各模块关系 (6)4.详细设计 (7)6.1基本的IO配置(输入/输出模式) (7)输出模式配置 (7)输入模式配置 (7)6.2外部中断配置 (8)定时器中断 (8)外部按键输入中断 (8)6.3电梯运行逻辑设计(软件编码) (9)数据结构设计 (9)功能接口设计 (9)5.体会与总结 (10)6.附录 (11)源代码 (11)参考文献 (26)1.课程设计简介1.1简介本设计使用STM8S系列作为主控芯片,使用矩阵键盘、若干个LED和两位数码管作为外设。
其中矩阵键盘用来模拟电梯按键,若干个LED灯用来模拟电梯的运动方向、楼层的指示灯(电梯内部楼层对应的按钮),两位的数码管用于显示电梯目前所处楼层。
1.2设计总电路图(基于AD这个平台生成的PCB图与原理图)原理图原理图PCB图PCB图1.3实物图实物图2.设计题目设计一个电梯运行模拟控制器,其系统框图如下图所示:电梯运行模拟控制器框图功能要求:能够模拟控制一个8层楼梯的电梯的运行。
具体要求如下: 1.电梯平时没有接到命令时候或者执行完命令后停在1楼,门关闭.。
2.电梯运行速度2秒一层楼3.电梯门在开启的情况下没有收到命令10秒中后自动关闭。
在运动中门必须关闭,(最后3秒可以设置音响警告信号)4.一句话,电梯控制器满足实际电梯的运行要求,电梯在运行的时候可以最多记住8个命令。
并且综合考虑公平性(先按键先执行)和有效性(完成任务的总的行走路径最短)来执行。
要求完成的内容:1.完成硬件电路的设计与安装调试(可借助单片机实验电路板),并用CAD 软件画出原理电路图。
2.画出流程图,编写并调试驱动程序。
3.撰写设计报告。
MCU1位七段数码管,3个LED 灯(显示当前电梯所处楼层与运行方向以及键盘以及对应的LED 灯(1-8,开门,关门)每个数字按键对应一个LED 灯,按下按键灯亮,8个LE D灯显示电梯所2个灯显示当前电梯8×2-2=14个按键表示每层楼入口的电梯按键3.1 电梯运行模拟控制器的总体运作流程等待外部信号整体配置初始化收到中断信号?执行电梯处理逻辑是否电梯运行模拟控制器整体运作流程3.2 电梯运行模拟控制器各模块关系电梯运行模拟控制器各模块关系图6.1基本的IO配置(输入/输出模式)输出模式配置对于输出模式IO的配置,用到的外设(LED灯,数码管,矩阵键盘),在代码中都有对它们进行对应的配置。
本科毕业设计(基于单片机的电梯控制模拟系统设计)
本科毕业设计(基于单片机的电梯控制模拟系统设计)本科毕业设计(基于单片机的电梯控制模拟系统设计)本科毕业设计(论文)基于单片机的电梯控制模拟系统设计学院名称:专业:班级:学号:姓名:江苏理工学院毕业设计说明书(论文)指导教师姓名:指导教师职称:二〇一五年六月基于单片机的电梯控制模拟系统设计摘要:随着我国人口老龄化的进程,目前的低层建筑对电梯的需求会日趋增加,因此本文设计一种基于AT89S52的电梯模拟控制系统,本系统成本低、通用灵活,可以大面积推广。
本控制系统模拟电梯的基本功能,电梯的内外按键使用户可以选择电梯到达的楼层,数码管可以显示电梯的当前所在楼层,电梯的升降通过发光二极管显示,通过电机的正反转模拟电梯的上下行。
本系统主要分为硬件部分和软件部分,硬件部分主要有单片机模块、电梯内外按键模块、电梯状态指示灯模块、楼层显示模块、电机驱动控制模块、报警模块等。
软件部分使用C语言编程实现,移植性强,便于修改和调用。
关键词:单片机;电梯控制;步进电机;AT89S52Design of Elevator Control System Based on MCUAbstract:As the process of population aging in china, the elevator needs of the low rise building will be increased. So this article introduces the elevator control system based on AT89S52. This system is general purpose and flexible as well as low cost which can promote to larger areas. This control system simulates the basic functions of the elevator. The users can use the buttons inside and outside to choose which floor to get to. LED Segment displays can show which floor the elevator stops at at present. The LEDs show the rise or descend of the elevator which simulated by the motor rotating in forward or backward direction. This system is mainly divided into hardware part and software part. The hardware part consists of single-chip module, the buttons inside and outside of elevator module, the LED display module, the floor indicator module, electric motor drive module and alarm module. The software part uses C language to program that can solve portability problem. It is easy to modify and invoke the programsKey words: MCU;Elevator control;Stepper motor;AT89S52目录前言 (1)第1章方案设计 (2)1.1 设计要求 (2)1.2 方案的比较和论证 (2)1.2.1 控制核心选择 (2)1.2.2 键盘选择 (2)1.2.3电动机选择 (3)1.3 系统结构框图 (3)第2章硬件电路设计与实现 (4)2.1 单片机控制模块 (4)2.1.1主控芯片 (4)2.1.2时钟电路设计 (5)2.1.3复位电路设计 (5)2.2 电源设计 (6)2.3单片机端口扩展设计 (6)2.4电梯内外按键模块设计 (8)2.4.1电梯内按键设计 (8)2.4.2电梯外按键设计 (9)2.4.3电梯内按键指示灯设计 (10)2.4.4电梯外按键指示灯设计 (10)2.5楼层显示模块设计 (11)2.5.1当前楼层显示设计 (11)2.5.2电梯运行状态指示灯设计 (12)2.6 报警模块设计 (13)2.6.1报警按键设计 (13)2.6.2蜂鸣器电路设计 (13)2.7电机驱动控制模块设计 (14)第3章系统软件设计方案 (15)3.1 程序设计思路 (15)3.2 主程序流程图 (16)3.3部分子程序流程图 (17)3.3.1上下行指示灯子程序 (18)3.3.2寻找目标楼层子程序 (19)第4章系统软硬件调试方案 (20)4.1硬件电路的制作与调试 (20)4.1.1硬件电路的制作 (20)4.1.2硬件电路的调试 (20)4.2软件调试 (21)参考文献 (22)致谢 (23)附录A 整体电路原理图 (24)附录B源程序 (25)前言1853年的纽约世界博览会,奥的斯向世人展示了其发明的安全升降梯,自此电梯开始在人类社会中得以广泛的运用并深刻影响着人们的生活。
电梯模拟系统的研究与设计
关键词 : J a v a语言 ; 电梯模拟系统 ; 电梯调度算法
中图分类号 : T P 2 9 ; T P 3 1 2 文献标识码 : A 文章编号 : 1 0 0 6 - 4 3 2 X ( 2 0 1 3 ) 0 6 . - . 0 0 3 0 - - 0 4
随着现 代建筑技术 的发展 , 住房 、 大型商场 、 办公用 楼 等都 已经逐 渐向高层发展.电梯是高层建筑 中不 可或缺的
运输 工具 . 同时 , 由于人 口老龄化 问题的 日益突 出 , 多 层建
开门信号时 , 将执行对 应操作 , 若 电梯 门处于打 开状态 , 且 未收到闭门信 号 , 等待一段时间后 , 电梯门仍将 自动关闭 . 电梯外 部按 钮 : 最上层 只有呼 叫下行按钮 ; 中间层每层
楼层 . 每个楼层 啦有一个 电梯 门 , 当在某楼 层接受 到例 门 、
暂停 控制 : 当电梯接收到超 重信号 时 , 发 出报警信 号 ,
பைடு நூலகம்
收 稿 日期 : 2 0 1 3 - 0 5 — 2 4 基金项 目 : 塔 里 木 大学 校 长 基 金 硕 上 项 目( T D Z K S S Z D 2 0 1 2 0 7 ) .
都有呼叫上行按钮及呼叫下行按钮 ;最下层只有呼 叫上行
按钮.
筑 同样也有 使用电梯的需求.电梯作为现代智 能建筑 内的 代 步工具 , 方 便 了人们 的生 活、 节省 了人们 的时间和体力 , 因此 , 也越来越 显示 出它的重要作用 . t t 1 生活 中的 电梯 是集 机械原理应用 、 电器控 制技 术 、 微处 理器技术 、 系统 工程学 等多种技术 于一体 的机 电设备t Z ' l , 电梯质量 的好坏很大程度 上取决 于它 的控制 系统1 3 1 .
电梯模拟程序--从设计到实现
电梯模拟程序--从设计到实现电梯模拟程序--从设计到实现 ---结对项⽬开发:张永&吴盈盈 这是⼀个⼤家都很熟悉的题⽬,很多⼈也做过类似的题⽬。
最近博客园最近也发表了很多的关于电梯模拟的程序。
下⾯说⼀下我们⼩组的基本思想。
题⽬拿到后,我们先是讨论了⼀下电梯的整体设想。
对这个题⽬进⾏了粗略的分析。
从⾯向对象的⾓度对问题剖析: 下⾯开始电梯的界⾯设计:界⾯设计涉及到的按钮⽐较多,所以每个按钮的命名必须要符合规范,光变量命名就花费了很长时间,举个例⼦:每个电梯都有左右门,那么为了见名知意,命名规则采⽤“elevator_电梯号_左右门”,⼀号电梯的左门命名为“elevator_ID1_Left”,其他的按钮也都有相应的命名规则,这⾥不⼀⼀的列举了。
为了有⼀个友好的界⾯,在这引⼊了⼀个开关门的特效:先介绍⼀下怎么实现的,以⼀个门为例,C#中Timer控件⽐较好⽤,每个门对应⼀个Timer 控件(就是每隔⼀段时间调⽤⼀个⽅法):/*** @Name: openElevator* @Description: 打开电梯门* @Version: V1.00 (版本号)* @Create Date: 2014-3-16 (创建⽇期)* @Parameters:Panel elevator_ID_Left, Panel elevator_ID_Right,电梯的两个门* @Return: 电梯的状态(开和关)*/public int openElevator(Panel elevator_ID_Left, Panel elevator_ID_Right){elevator_ID_Left.Width = elevator_ID_Left.Width - 1;elevator_ID_Right.Width = elevator_ID_Right.Width - 1;elevator_ID_Right.Location = new System.Drawing.Point(elevator_ID_Right.Location.X + 1, elevator_ID_Right.Location.Y);if (elevator_ID_Left.Width == 10){flag = Number.OPEN;}return flag;}在Timer控件中每隔⼀定的时间就调⽤openElevator⽅法,就实现了开门的动作,关门类似。
五层电梯PLC控制系统及组态模拟设计
五层电梯PLC控制系统及组态模拟设计一、本文概述随着现代工业技术的快速发展,可编程逻辑控制器(PLC)在电梯控制系统中的应用越来越广泛。
PLC控制系统以其高可靠性、灵活性和易于维护的特点,成为电梯控制领域的首选方案。
本文旨在探讨五层电梯的PLC控制系统设计及其组态模拟,通过对系统的详细分析,为电梯控制系统的实际应用提供参考。
文章首先介绍了电梯控制系统的基本构成和原理,包括电梯的主要组成部分、控制逻辑以及安全要求等。
随后,详细阐述了PLC控制系统的设计过程,包括PLC的选型、输入输出模块的配置、控制程序的编写等。
在此基础上,文章进一步介绍了组态模拟的概念及其在电梯控制系统中的应用,通过构建虚拟的电梯运行环境,实现对电梯控制系统的模拟测试和性能评估。
本文还将探讨电梯控制系统的优化与改进,以提高系统的运行效率和安全性。
通过对电梯控制系统的深入研究和创新设计,可以推动电梯技术的持续发展,为人们的日常生活提供更加便捷、安全的垂直交通解决方案。
通过本文的阅读,读者可以全面了解五层电梯的PLC控制系统设计及组态模拟的相关知识,为从事电梯控制系统设计和维护的工程师提供有益的参考和借鉴。
本文也为电梯行业的技术进步和创新发展提供了有力的支持。
二、电梯控制系统基础知识电梯控制系统是电梯运行的核心部分,负责监控电梯的运行状态、处理乘客的指令、实现电梯的自动升降以及确保电梯的安全运行。
现代电梯的控制系统大多采用可编程逻辑控制器(PLC)作为核心控制单元,通过编程实现对电梯的精确控制。
电梯控制系统的基本构成包括输入设备、PLC控制器、输出设备以及通讯接口等部分。
输入设备包括各种传感器和按钮,用于检测电梯的当前状态以及接收乘客的指令;PLC控制器则根据接收到的信息进行逻辑运算,输出相应的控制信号;输出设备如电机驱动器、灯光控制器等则根据PLC的控制信号执行相应的动作;通讯接口则用于实现电梯与楼宇管理系统或其他设备之间的通讯。
电梯调度模拟系统-测试报告
电梯调度模拟系统测试报告—080607A小组学号:080607姓名:岳蕾学号:080607120测试报告1.引言(1)编写目的测试分析报告是在测试分析的基础上,对测试结果以及测试的数据等加以记录和分析总结。
它也是测试过程中的一个重要环节,同时,它也是对软件性能的一个总的分析和认可及对不足之处的说明。
因此,测试分析报告对今后软件功能的加强,不足之处的弥补等起着十分重要的提纲作用。
测试是“为了发现程序中的错误而执行程序的过程”。
测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。
目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明,设计和编码的最后复审,也是不可缺少的关键步骤。
(2)项目背景此项目是由算法申老师依照学校教学计划提出,要求对升降式电梯进行合理调度设计相关的算法。
由080607班A小组负责对此项目开发。
(3)定义软件原始版本:V1.0;软件修正版本:V2.0;总体设计:构造模块,设计业务逻辑,设计数据结构等;接口设计:定义输入输出接口;定义数据的传送方式;数据结构设计:定义数据的组织方式和信息的传递形式;用户界面设计:提供用户输入和显示输出信息的用户和程序的接口;出错设计:定义异常类型及相应的出错处理;(4)参考资料1.王长元,李晋惠等。
软件工程西安:西安地图出版社,20032. 任务概述(1)目标测试是“为了发现程序中的错误而执行程序的过程”,测试的目的就是在软件正式投入生产性运行之前尽可能多的发现软件中的错误。
(2)测试环境操作系统:Microsoft Windows XP Professional Service Pack 3编译环境:Microsoft Visual C++ 6.0(3)条件与限制对于输入数据,合法输入只能是由0-9数字组合而成的数据;不合法的数据包括:纯字母﹑负数﹑特殊字符﹑字母和特殊字符的组合﹑字母和数字的组合﹑空格和其他字符的组合以及其他无意义的输入。
基于51单片机的模拟电梯控制系统_毕业设计
摘要本文介绍了基于单片机的电梯控制系统,硬件部分主要由单片机最小系统模块、电梯内外电路按键模拟检测模块、电梯外请求发光管显示模块、楼层显示数码管模块、电梯上下行模块及模拟传感器模块等5部分组成。
该系统采用单片机(AT89C51)作为控制核心,内外均使用按键按下与否引起的单片机相应端口电平变化的原理,作为用户请求信息发送到单片机,单片机根据判断的结果最终驱动步进电机做相应的运动,在运动的过程中,单片机依照请求信息通过模拟的传感器使步进电机停止运动,并利用彩灯作为上升和下降的状况显示,七段数码管实时显示当前楼层,完成整个请求和响应的过程。
软件部分使用汇编语言实现,利用查询方式来检测用户请求的按键信息。
根据电梯运行到相应楼层时,模拟按键引起的电平变化,进行判断和执行实现电梯的控制,并且将程序模块化,方便了修改和调用。
硬件设计简单可靠,结合软件,基本实现了四层电梯的模拟运行。
关键词:单片机,AT89C51,电梯控制,步进电机目录摘要 (I)目录 (II)第1章绪论 (1)1.1电梯的研究背景及意义 (1)1.2 电梯的国内外发展状况 (1)第2章电梯设计任务与要求 (2)2.1设计任务 (2)2.2设计要求 (2)第3章总体设计方案 (3)3.1设计思路 (3)3.2总体设计框图 (3)第4章电梯控制系统 (4)4.1电梯控制系统 (4)4.2主要硬件设计器件介绍 (5)4.3 软件设计 (9)第5章个人心得体会 (12)参考文献 (14)致谢 (15)附录I: (16)附录II: (18)第1章绪论1.1电梯的研究背景及意义电梯是高层宾馆、商城、住宅、多层厂房和仓库等高层建筑不可缺少的垂直方向的交通工具。
随着社会的发展,建筑物规模越来越大,楼层越来越多,对电梯的可靠性、舒适感和美学等方面的要求也有了更高的要求。
电梯是集机电一体的复杂系统,涉及机械传动、电气控制和土建等工程领域,而对现代电梯而言,应具有高度的安全性。
基于PLC的电梯群控系统设计与仿真
基于PLC的电梯群控系统设计与仿真电梯是现代建筑中不可或缺的一部分,它们为人们提供了便利和舒适。
而随着大型建筑的增多,单个电梯已经不能满足需要了,电梯群控系统应运而生。
本文基于PLC(可编程逻辑控制器)来设计和仿真一个电梯群控系统。
首先,我们需要明确电梯群控系统的基本要求。
电梯群控系统需要能够实现多个电梯的联动控制,确保乘客在最短的时间内到达目的地。
同时,系统需要具备故障检测和报警功能,以保证安全。
最后,系统还需要考虑节能和资源利用的问题。
基于以上要求,我们可以开始设计电梯群控系统。
首先,我们使用PLC来控制每个电梯的运行。
PLC是一种可编程电子设备,具有高可靠性和可编程性,非常适合用于电梯控制。
每个电梯都有自己的PLC,在PLC中编写程序来控制电梯的运行。
其次,我们需要设计一个中央控制单元(CCU)来协调多个电梯的运行。
CCU通过与各个电梯的PLC通信来实现这一目标。
CCU需要根据乘客的需求和电梯的状态来做出优化的决策。
例如,当有多个电梯都空闲时,CCU可以选择距离最近的电梯来服务乘客。
当有乘客按下上下楼按钮时,CCU可以选择最快到达目的地的电梯来服务乘客。
此外,我们还需要为系统设计故障检测和报警功能。
PLC可以监测电梯的各个部件的状态,例如电梯门的开闭、电梯的运行速度等。
一旦发现异常,PLC会发送报警信号给CCU,并采取相应措施,例如停止电梯运行或者调度其他电梯。
最后,为了实现节能和资源利用,我们可以引入一些优化算法。
例如,CCU可以根据乘客的需求和电梯的状态来调度电梯。
当有多个电梯都服务空闲乘客时,CCU可以选择较大运载量的电梯来服务,以减少电梯的运行次数。
另外,CCU还可以根据乘客流量和楼层情况来预测需求,提前调度电梯到达楼层,以减少等待时间。
设计完电梯群控系统后,我们可以使用仿真软件来验证系统的正确性和性能。
通过模拟不同的乘客需求,我们可以评估系统的吞吐量和等待时间。
同时,我们还可以模拟电梯的各种故障情况,以测试系统的故障检测和报警功能。
《2024年基于PLC的电梯控制系统的设计与仿真》范文
《基于PLC的电梯控制系统的设计与仿真》篇一一、引言随着城市化的进程加速,高层建筑的数量不断增长,电梯作为建筑物垂直交通的主要工具,其安全性和效率性变得尤为重要。
本文将介绍基于PLC(可编程逻辑控制器)的电梯控制系统的设计与仿真,以实现电梯的高效、安全、稳定运行。
二、系统设计1. 硬件设计基于PLC的电梯控制系统硬件主要包括PLC、触摸屏、变频器、电机、编码器、传感器等。
其中,PLC作为核心控制单元,负责接收和处理各种信号,控制电梯的启动、停止、方向等动作。
触摸屏则用于显示电梯的运行状态和指令输入。
变频器和电机负责驱动电梯的上下运行。
编码器和传感器则用于检测电梯的位置、速度、负载等状态信息。
2. 软件设计软件设计是电梯控制系统的关键部分,主要包括PLC程序设计、触摸屏界面设计等。
PLC程序设计采用梯形图或结构化控制语言,实现电梯的逻辑控制、信号处理、故障诊断等功能。
触摸屏界面设计则根据用户需求,设计直观、易操作的界面,显示电梯的运行状态和指令输入。
三、系统功能基于PLC的电梯控制系统具有以下功能:1. 信号输入与输出:系统能接收来自外部的召唤信号、指令信号等,并输出相应的控制信号,实现电梯的启动、停止、方向等动作。
2. 逻辑控制:系统采用PLC程序实现逻辑控制,确保电梯在各种情况下都能安全、稳定地运行。
3. 故障诊断:系统具有故障诊断功能,当电梯出现故障时,能及时检测并显示故障信息,方便维修人员快速定位和解决问题。
4. 节能优化:通过变频器控制电机运行,实现电梯的节能优化。
四、系统仿真为了验证基于PLC的电梯控制系统的设计和性能,我们进行了系统仿真。
仿真采用了MATLAB/Simulink等仿真软件,建立了电梯控制系统的仿真模型。
通过输入不同的信号和参数,模拟电梯在不同情况下的运行过程,验证系统的逻辑控制、信号处理、故障诊断等功能是否正常。
仿真结果表明,基于PLC的电梯控制系统具有良好的性能和稳定性,能满足实际运行的需求。
模拟电梯课程设计方案模板
一、课程名称模拟电梯控制系统课程设计二、课程背景随着现代建筑的高度化,电梯作为重要的垂直交通工具,其控制系统的研究与开发显得尤为重要。
本课程设计旨在通过模拟电梯控制系统,让学生深入了解电梯控制系统的原理、设计方法以及实现过程,培养学生的动手能力、创新能力和工程实践能力。
三、课程目标1. 理解电梯控制系统的基本原理和组成;2. 掌握电梯控制系统的设计方法;3. 熟悉常用电梯控制元器件及其应用;4. 培养学生的动手能力、创新能力和工程实践能力;5. 提高学生对电梯控制系统的认识,为今后从事电梯行业打下基础。
四、课程内容1. 电梯控制系统的基本原理与组成2. 电梯控制系统的设计方法3. 常用电梯控制元器件及其应用4. 电梯控制系统的模拟实验5. 电梯控制系统的编程与调试五、课程实施1. 教学方法:采用理论教学与实验实践相结合的方式,注重培养学生的动手能力和创新思维。
2. 教学步骤:(1)理论教学:讲解电梯控制系统的基本原理、组成、设计方法及常用元器件;(2)实验实践:学生分组完成电梯控制系统的模拟实验,包括电路设计、元器件选型、编程与调试;(3)课程设计:学生独立完成电梯控制系统的课程设计,包括设计任务书、电路图、程序代码等。
六、课程评价1. 课堂表现:包括课堂提问、讨论等;2. 实验实践:实验报告、实验成绩;3. 课程设计:设计报告、电路图、程序代码等;4. 期末考核:书面考试、答辩。
七、课程资源1. 教材:《电梯控制系统》、《可编程控制器原理与应用》等;2. 教学课件、实验指导书、设计指南等;3. 电梯控制元器件、实验器材等。
八、课程进度安排1. 第1周:课程介绍、基本原理与组成;2. 第2周:设计方法与常用元器件;3. 第3周:模拟实验(电路设计、元器件选型);4. 第4周:编程与调试;5. 第5周:课程设计(设计任务书、电路图、程序代码);6. 第6周:课程设计(答辩);7. 第7周:课程总结与评价。
基于STC89C52单片机的模拟电梯控制系统
基于STC89C52单片机的模拟电梯控制系统模拟电梯控制系统是一个基于单片机技术的智能控制系统,它可以模拟真实电梯的运行过程,实现电梯的自动运行和楼层选取功能。
本文将介绍基于STC89C52单片机的模拟电梯控制系统的设计和制作过程。
一、系统设计需求电梯控制系统的设计需要满足以下基本需求:1. 电梯的运行控制:能够模拟电梯的上行、下行等基本运行状态;2. 楼层选取功能:能够实现乘客在不同楼层按下按钮后,电梯能够自动前往相应楼层;3. 安全性能:在电梯门未关闭或者有障碍物时,能够停止电梯的运行。
二、硬件设计1. 单片机选型本系统选用STC89C52单片机作为控制核心,它具有强大的性能和丰富的外设接口,非常适合作为电梯控制系统的控制器。
2. 电梯模拟电路电梯模拟电路包括电机驱动电路、楼层选择按钮、轿厢内按钮、门控制电路等,这些电路在实际应用中需要与单片机进行连接和控制。
3. 传感器和执行器电梯控制系统需要使用到限位传感器、光电传感器、按钮开关等传感器,以及电机、电磁铁等执行器。
三、软件设计1. 硬件初始化利用单片机的IO口和定时器等硬件资源,对电梯模拟电路进行初始化配置。
2. 状态监测设计状态监测程序,对电梯的各种状态进行实时监测,如电梯位置、乘客的楼层选择等。
3. 按钮控制编写按钮控制程序,实现乘客按下楼层选择按钮后,电梯能够自动前往相应楼层。
4. 运行控制编写电梯的运行控制程序,实现电梯的上行、下行等基本运行状态。
四、系统测试与调试1. 硬件连接测试将单片机与电梯模拟电路进行连接,进行硬件连接测试,确认各个元器件的连接正确性。
2. 软件功能测试对系统的各个功能进行测试,包括按钮控制、运行控制、状态监测等功能。
3. 整体系统测试将硬件和软件部分进行整合测试,测试系统的整体运行情况。
4. 系统调试对系统进行调试,排除各种可能出现的问题和故障,确保系统的稳定性和可靠性。
五、系统优化与改进在系统测试和实际应用中,根据用户的反馈和实际需求,对系统进行优化和改进,提高系统的性能和用户体验。
基于MCS-51单片机的电梯模拟系统设计
本科毕业设计论文题目基于MCS-51单片机的电梯模拟系统设计专业名称学生姓名指导教师毕业时间毕业一、题目:基于MCS-51单片机的电梯模拟系统设计二、指导思想和目的要求:通过毕业设计,使学生对所学电子工艺、传感器知识、电机控制技术、模电、数电、等电子基础课程的基本知识加深理解,在所学51八位单片机的基础上,学习更高级十六位单片机的基本指令及基本结构,并将其与实际工程应用紧密结合起来,培养创新意识,增强分析问题解决问题能力,为尽快进入社会角色,熟悉相关开发工作流程,提高基本工作技能,为即将踏入社会奠定理论和实践基础。
要求:认真复习有关基础理论和技术知识,查阅参考资料,参照下列设计思想,运用所学单片机知识独立设计电路、自行焊接、调试,直至预期结果方可。
要求实现:1. 通电后,系统默认电梯轿厢停在一层。
2. 如需上行,请按下所要到达楼层的上行呼叫按钮,轿厢显示开始上行,所经楼层号用LED进行短时显示,到达,楼层号持续显示,直至轿厢被呼叫离开,并有蜂鸣器鸣叫以示到达。
3. 当轿厢停留在中间楼层时,可实现上或下行呼叫,行进方向按呼叫顺序进行,如同时呼叫,则坚持先上行,后下行原则。
4. 由LED指示轿厢行进的方向。
5. 模拟楼层数要求五层及以上。
三、进度与要求:1.第一周~第三周在工作中收集各种相关资料,给出系统整体设计方案。
2.第四周~第五周进行器件选型,并用PROTEL设计硬件原理图。
3.第六周~第九周针对系统具体功能进行编程调试。
4.第十周~第十一周整理并组织论文。
6.第十二周~第十四周完成修改稿,定稿,打印,交评阅。
7.第十五周~第十六周评阅与答辩四、主要参考书及参考资料[1] 谢宜人主编,单片机实用技术问答, 北京人民邮电出版社 ; 2003[2] 靳达,单片机应用系统开发实例导航 , 北京人民邮电出版社 ; 2003[3] 流光斌等,单片机系统实用抗干扰技术,北京人民邮电出版社;2004[4] 余永权,ATMEL89系列单片机应用技术,北京航空航天大学出版社;2002[5] 陈瑾;智能小车运动控制系统的研究与实现[D];东南大学硕士论文;2005年[6] 韦巍;智能控制技术[M];北京:机械工业出版社;2000年[7] 蒋新松;机器人学导论[M];辽宁科学技术出版社;2003年[8] 孙迪生,王炎;机器人控制技术;北京:机械工业出版社;1997年[9] 陈明荧,8051单片机课程设计实训教材,清华大学出版社;2003年[10] 蔡美琴等,MCS-51系列单片机系统及其应用,高等教育出版社;2004年学生指导教师__ _ 系主任摘要电梯开始成为人们生活中不可缺少的一种便利工具。
数据结构——电梯模拟的报告
数据结构——电梯模拟的报告数据结构——电梯模拟的报告1. 简介本文档将介绍电梯模拟的实现过程和基本原理。
通过模拟电梯的行为,我们可以更好地理解数据结构在实际应用中的作用和效果。
2. 问题描述在楼房中,电梯通常被用来运送乘客。
电梯内部有多个按钮,表示不同楼层的乘客需求。
乘客可以按下按钮来请求乘坐电梯到达特定楼层。
电梯的运行顺序应该是合理的,比如不会从高楼层下降到低楼层。
本模拟的电梯系统需要满足以下要求:- 电梯能接收来自乘客的请求。
- 电梯能根据请求的楼层,按照合理的顺序运行,将乘客送到目标楼层。
- 当电梯到达目标楼层,乘客可以进入或离开电梯。
- 电梯需要实时更新运行状态,如目标楼层、当前楼层等。
3. 数据结构设计为了实现电梯模拟,我们需要设计合适的数据结构来存储电梯的状态和乘客请求。
以下是我们设计的关键数据结构:3.1 电梯状态电梯的状态包括当前楼层、目标楼层和运行方向等信息。
我们可以使用一个结构体来表示电梯的状态:```c++struct ElevatorState {int currentFloor;int targetFloor;Direction direction;};```其中,`currentFloor`表示当前所在楼层,`targetFloor`表示目标楼层,`direction`表示电梯的运行方向。
3.2 乘客请求乘客请求包括乘客所在楼层和目标楼层。
我们可以使用一个结构体来表示乘客请求:```c++struct Request {int fromFloor;int toFloor;};```其中,`fromFloor`表示乘客所在楼层,`toFloor`表示目标楼层。
3.3 电梯控制器电梯控制器用于管理电梯的状态和乘客请求。
我们可以使用一个队列来存储乘客请求,使用一个变量来保存电梯的当前状态。
以下是电梯控制器的设计:```c++class ElevatorController {private:std::queue<Request> requests;ElevatorState state;public:void addRequest(Request request);void processRequests();};```其中,`addRequest`方法用于添加乘客请求到队列中,`processRequests`用于处理乘客请求并控制电梯的运行。
电梯模拟系统建模与仿真
电梯模拟系统建模与仿真摘要:本文虚拟电梯模型相对于实物模型成本低廉,所以其具有广泛的应用前景。
提出了一种通过组态软件设计构建虚拟电梯模型的方法,实现了虚拟电梯模型和软PLC之间的通信,并应用倍福Twincat软PLC实施了对虚拟电梯模型的控制仿真。
所提出的方法可以很方便地实现电梯群控模型建模,应用此模型不仅可以实现电梯控制程序的逻辑故障分析而且还可以实现机械故障的模拟。
用此方法设计出一个三层的虚拟电梯模型,同时编写并调试了三层电梯的控制程序,实现了Twincat软PLC控制虚拟电梯的正常运行,验证了仿真系统的可用性和控制程序编写方法的合理性。
关键词:虚拟电梯模型;软PLC控制系统仿真;系统建模;组态软件电梯是一个典型的控制对象,目前电梯的控制主要采用PLC控制系统。
在电梯控制系统的工程设计中,首先要经过控制系统逻辑关系的设计编程,然后进行运行试验测试,取得满意效果后才能投入实际系统中使用。
但是,由于受到场地、经费等诸多客观条件的限制,直接使用实际电梯对象进行控制测试是不现实的[1]。
为此,需要应用和现场相一致的PLC控制设备与具有相应功能的虚拟对象相结合的方式搭建电梯控制运行的测试平台,这样既可在实验室里进行控制系统软件的早期开发,同时又可以进行控制算法的优化设计和测试。
应用力控监控组态软件构建虚拟电梯模型,通过调用力控组态软件的通信接口,实现了Twincat软PLC与虚拟电梯模型间的实时数据交互,实现了控制器软PLC与虚拟电梯模型集成的目的。
这种新型测试平台改变了以往实物实验测试平台的运行模式,可以实现全虚拟运行[2-3]。
1三层电梯建模应用力控组态软件对三层电梯进行虚拟建模来模拟电梯运行逻辑。
为使模型简单可靠,在电梯建模时略去了和电梯逻辑控制关系不太密切的电梯结构,以实现电梯逻辑控制中关键结构平层开关的设计并用动画形式表达模型的运行状态。
为真实模拟电梯的运行,首先把基本的输入输出信号进行定义,再设计基本的限位开关,然后进行基本的动画设计,最后进行通讯设置,以实现软PLC 和电梯模型的联合运行。
电梯调度模拟系统-测试方案
电梯调度模拟系统测试方案—080607A小组学号:******姓名:***学号:*********测试方案制作小组:080607班A小组编写目的:在软件测试过程中,人们通常感兴趣于测试的结论部分,而忽略了对测试的过程做一个设计,这样会导致很多意想不到不可避免的失误,所以在进行软件测试之前做一个测试的概要分析非常重要。
测试概要是对软件测试制作一个详细可行的操作过程,以便在软件测试过程中做到有的放矢,避免因乱枪大鸟而引起的各种失误情况。
具体对测试的方法,测试的工具,测试的操作流程,测试过程等做规划。
项目背景:该项目以申老师的课程设计为前提,选择了对升降式电梯进行系统性研究的测试算法。
测试环境与配置(测试的工具):操作系统:Microsoft Windows XP Professional Service Pack 3应用软件:Microsoft Visual C++ 6.0测试操作员:岳蕾测试时间:2010-11-30测试方法:主测:黑盒法优化:白盒法测试操作流程:1 对项目背景做一个简单的了解2 熟悉升降式电梯系统的编译方法,并能实际掌握该电梯的操作3 了解测试环境4 依照测试概要中对测试过程的基本实设计规划流程进行测试操作5 测试完后鉴别软件性能进行总结说明测试过程:1黑盒测试法A.数据;B.字母;C.负数;D.特殊字符;E.字母与特殊字符;F.字母和数字;G.空格和其他字符组合;H.其他非法输入2 业务逻辑测试A.运行测试;B.优先级测试(向上运行);C.优先级测试(向下运行);D.优先级测试(不分运行方向);E.压力测试3 测试注意事项测试过程中要先对测试结果进行一个预期猜想,然后测试后记录实际结果,对两者结果作比较分析,从而发现其中的出入,做记录。
该软件两种版本:v1.0,v2.0。
在测试中分别用两个版本进行测试,发现优劣,记录个软件相关测试后信息。
设计员:080607114 任哲瑶2010-11-28。
c语言模拟电梯程序
c语言模拟电梯程序我们需要定义电梯的状态。
电梯可以处于静止、上升或下降三种状态中的一种。
我们可以使用一个整型变量来表示电梯的状态,0表示静止,1表示上升,-1表示下降。
接下来,我们需要定义电梯的位置。
电梯可以停在不同的楼层,我们可以使用一个整型变量来表示电梯当前所在的楼层。
我们需要定义一个数组来记录每一层楼的乘客请求。
数组的每一个元素表示该楼层的请求状态,0表示无请求,1表示有上升请求,-1表示有下降请求。
在主程序中,我们可以使用一个循环来模拟电梯的运行过程。
在每一次循环中,我们首先检查电梯当前所在的楼层是否有乘客请求。
如果有请求,我们根据电梯的状态和乘客的请求来确定电梯下一步的动作。
如果电梯处于静止状态,我们可以根据乘客的请求来确定电梯的状态。
如果有上升请求,我们将电梯的状态设为上升;如果有下降请求,我们将电梯的状态设为下降。
如果电梯处于上升状态,我们需要找到最接近电梯当前位置且有上升请求的楼层,然后将电梯移动到该楼层。
如果没有找到符合条件的楼层,则将电梯状态设为静止。
如果电梯处于下降状态,我们需要找到最接近电梯当前位置且有下降请求的楼层,然后将电梯移动到该楼层。
如果没有找到符合条件的楼层,则将电梯状态设为静止。
在每一次循环结束时,我们将输出电梯的状态和位置,以及每一层楼的乘客请求状态。
这样可以让用户清楚地了解电梯的运行过程。
通过以上的步骤,我们可以完成一个简单的电梯模拟程序。
当然,实际的电梯系统要复杂得多,包括更多的功能和安全性考虑。
但是通过这个简单的模拟程序,我们可以初步了解电梯的运行原理和编程实现。
总结一下,本文介绍了如何使用C语言编写一个简单的电梯模拟程序。
通过定义电梯的状态和位置,以及乘客的请求状态,我们可以模拟电梯的运行过程。
通过循环判断电梯的状态和乘客的请求,我们可以确定电梯下一步的动作。
最后,我们输出电梯的状态和位置,以及每一层楼的乘客请求状态,以展示电梯的运行过程。
希望本文对读者理解电梯的工作原理和使用C语言实现电梯模拟程序有所帮助。
电梯模拟系统
2 电梯模拟系统需求分析
1.电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。
2.乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标 对应的楼层可能不是电梯当前运行方向可达的楼层。(每个楼层出现的 乘客数量,以及所要到达的目标楼层的方向是随机产生的)
3.电梯系统依照某种预先定义好的调度策略对随机出现的呼叫和目 标进行分析和响应。
整体设计思路: 电梯系统依照某种预先定义好的调度策略对随机出现的呼叫和目标进行分析和响应。
确定新的目标楼层策略:
A. (每个楼层出现的乘客数量,以及所要到达的目标楼层的方向是随机产生的)
3.
界 定面时设器计 函选 数用 ,黑 从白 而色 来1来 控考进制行 电虑图 梯形 的到的 移实绘 动制 。际与填电充梯,没运有过行多过的颜程色加不以需渲染要,程人序为核心控是使制用,定时所器,以每本个一程定时间,触发器响应厨房
a.如果比当前层高的楼层有向上呼叫或者目标,那么以最低的高于当前楼层的有向上呼叫 或者目标的楼层为目标。
b.如果无法确定目标楼层,那么以最高的向下呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最低的向上呼叫所在楼层为电梯当前的目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运 行暂停。
B.如果电梯向下运行,依照以下顺序确定下一目标楼层: a.如果比当前层低的楼层有向下呼叫或者目标,那么以最高的低于当前楼层的有向下呼叫
或者目标的楼层为目标。
b.如果无法确定目标楼层,那么以最低的向上呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最高的向下呼叫楼层为目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运 行暂停。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计学院:信息科学与工程学院专业:计算机科学与技术班级:计算机1112班学号: 20111221249学生姓名:田丰指导教师:赵亚欧2013 年 3 月 10 日电梯模拟系统一、实验内容基本要求:1、模拟某校五层教学楼的电梯系统。
该楼有一个自动电梯,能在每层停留。
五个楼层由下至上一次为地下层、第一层、第二层、第三层和第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
2、乘客可随机地进出于任何层。
对每个人来说,他有一个能忍耐的最长等待时间,一旦等候电梯时间过长,他将放弃。
3、模拟时钟从0开始,时间单位为0.1秒。
人和电梯的各种动作均要耗费一定的时间单位(简记为t)。
4、按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。
选作内容:1、增加电梯数量,模拟多电梯系统2、某高校的一座30层住宅楼有三部电梯,每梯最多15人。
大楼每层8户,每户平均3.5人,每天早晨平均每户有3人必须在7时之前离开大楼去上班或上学。
模拟该电梯系统,并分析分别在一梯、二梯和三梯运行情况下,下楼高峰期间各层的住户应提前多少时间后梯下楼?研究多提运行最佳策略。
二、数据结构设计栈的定义如下://定义栈结构体typedef struct SNode{int Number; //乘客编号struct SNode *next;}SNode,*Stack;//定义栈的操作int InitStack(Stack &S); //初始化栈int EmptyStack(Stack S); //检测栈是否为空int GetTop(Stack S); //获得栈顶元素int Push(Stack &S,int number); //入栈int Pop(Stack S); //出栈队列的定义如下://定义队列节点typedef struct QNode{int Number; //乘客编号int InFloor; //进电梯楼层int OutFloor; //出电梯楼层int GiveupTime; //忍耐时间int Time; //进入系统的时间struct QNode *next;}QNode,*QueuePtr;//定义队列typedef struct{QueuePtr front; //队首指针QueuePtr rear; //队尾指针}Queue;//定义队列的操作int InitQueue(Queue &Q); //初始化队列int EmptyQueue(Queue Q); //检测队列是否为空QNode GetFront(Queue Q); //获得队首元素QNode GetElem(Queue Q,int i); //获得第i个元素int GetLength(Queue Q); //测量队列长度int EnQueue(Queue &Q,QNode elem); //入队int DeQueue(Queue &Q); //出队int DeElem(Queue &Q,int i); //删除第i个元素void PrintQueue(Queue &Q); //输出队列三、算法设计3.1 功能模块图3.2 算法思路3.2.1实现方法void Welcome(void); //欢迎界面void EnSystem(void); //进入系统void QueueElevator(void); //排队等候电梯int IsQueue(void); //检测是否进入系统(可以排队等候电梯)void Giveup(void); //放弃等候电梯void EnElevator(void); //进入电梯void DeElevator(void); //离开电梯void ChangeState(void); //改变电梯状态void OpenDoor(void); //打开电梯门void CloseDoor(void); //关闭电梯门void InAndOut(void); //乘客进出电梯void UpElevator(void); //电梯上升void DownElevator(void); //电梯下降void Search(void); //查询下一步指示void SetState(void); //置Statevoid Thread(void); //线程控制3.2.2 设计思想(1)定义全局变量int MaxTime; //系统运行最长时间int SystemTime=0; //系统时间int Floor=1; //电梯当前位置int D1=0,D2=0,D3=0;int State=Idle; //电梯当前状态int CallCar[MaxFloor]={0}; //出电梯按钮int CallUp[MaxFloor]={0}; //进电梯按钮(上)int CallDown[MaxFloor]={0}; //进电梯按钮(下)Queue Q; //系统队列Queue Que[MaxFloor][2]; //等候电梯队列Stack Elevator[MaxFloor]; //电梯栈(2)主函数模块int main(int argc, char* argv[]){int i;int TimeMeter=0;//初始化系统队列InitQueue(Q);//初始化等候队列for(i=0;i<MaxFloor;i++){InitQueue(Que[i][GoingUp-1]);InitQueue(Que[i][GoingDown-1]);}//初始化电梯栈for(i=0;i<MaxFloor;i++)InitStack(Elevator[i]);//欢迎界面Welcome();//乘客进入系统EnSystem();printf("\n电梯在1楼静候\t(系统时间:%dt)\n",SystemTime);while(SystemTime<=MaxTime){//线程控制Thread();//初始化状态,电梯在一楼静候if(State==Idle && !D1 && !D3){for(i=0;i<MaxFloor;i++)if(CallUp[i] || CallDown[i])break;if(i==Floor) //乘客在该层等候{if(CallUp[i])State=GoingUp;if(CallDown[i])State=GoingDown;OpenDoor();}else{if(i<Floor) //乘客在楼下等候{State=GoingDown;Search();}elseif(i>Floor && i<MaxFloor) //乘客在楼上等候{State=GoingUp;Search();}}}State=Idle;TimeMeter++; //计时器计时SystemTime++; //系统时间//设置电梯Stateif(TimeMeter>=300){D2=0;if(Floor!=1){printf("电梯已经静候300t,即将到达一楼静候\t(系统时间:%dt)\n",SystemTime);SetState();}TimeMeter=0;}}return 0;}(3)其他模块说明(用文字描述,不要代码)1、欢迎界面在运行界面中输出“欢迎来到电梯模拟系统”和“请输入乘客信息”字样,提示用户输入相关信息。
2、进入系统通过“请输入第i位乘客信息”等提示信息引导用户输入每一位乘客的信息,并对所输入的信息进行逻辑检查,若发现错误,提示用户重新输入。
全部乘客信息输入结束后,计算出系统运行的最长时间(MaxTime),并将全部乘客信息暂时存储在队列Q中。
3、检测是否进入系统(可以排队等候电梯)检测队列Q中乘客进入系统的时间(Time)是否小于或等于系统时间(SystemTIme),若是,返回1;若非,返回0.4、排队等候电梯将队列Q中的乘客信息转移到队列数组Que[InFloor][state]中,InFloor表示乘客等候电梯(进入电梯)的楼层,state表示乘客上楼还是下楼。
5、放弃等候电梯将队列数组Que[floor][state]中忍耐时间(GiveupTime)小于系统时间(SystemTime)的乘客信息删除掉(出队)。
6、进入电梯将队列数组[InFloor][state]中的乘客信息转移到栈Elevator[OutFloor]中,OutFloor表示乘客离开电梯的楼层,并将CallCar[OutFloot]置1。
7、离开电梯将栈Elevator[OutFloor]清空。
8、改变电梯状态如果没有乘客等待电梯(CallCar[]、CallUp[]、CallDown[]都为零),置电梯的状态(State)为静候(Idle);如果电梯的状态为上升(GoingUp),检测电梯楼上(Floor+1~MaxFloor)是否有乘客等候电梯,若有,状态不变,若没有,状态置反;如果电梯的状态为下降(GoingDown),检测电梯楼下(Floor-1~0)是否有乘客等候电梯,若有,状态不变,若没有,状态置反。
9、打开电梯门10、关闭电梯门将CallCar[Floor]置零。
如果电梯状态上升,将CallUp[Floor]置零;如果电梯状态下降,将CallDown[Floor]置零。
11、乘客进出电梯检测是否有乘客进出电梯。
若有,依次执行DeElevator()和EnElevator();若无,再进行76t时间的重复检测,76t之后,仍然没有乘客进出电梯,电梯门关闭。
12、电梯上升若电梯处于顶层(MaxFloor),停止上升,否则电梯上升一层。
之后,检测是否要开门,需要则开门,否则执行ChangeState()和Search()。
13、电梯下降若电梯处于底层(0),停止下降,否则电梯下降一层。
之后,检测是否要开门,需要则开门,否则执行ChangeState()和Search()。
14、查询下一步指示如果电梯是上升状态,则执行UpElevator();如果电梯是下降状态,则执行DownElevator()。
15、置State将电梯下降(或上升)到一楼,并设置电梯状态为静候(Idle)。
16、线程控制每当系统的时间发生变化,执行此函数,检测是否有乘客进入系统和放弃等候电梯。
四、测试数据及程序运行情况10。