电梯系统软件设计_蓝光电梯系统软件 - CSDN
  • 要求根据下面的功能说明描述实现模拟电梯控制软件 (一)电梯配置 1. 共有1个电梯 2. 共有maxfloor层楼层。maxfloor=9。 3. 中间层每层有上下两个按钮,最下层只有上行按钮,最上层只有上行按钮。每层都有相应的...
  • 其中有设计说明书,硬件电路,CAD图 ,完整程序,主要介绍的是电梯自动控制模型,硬件部分使用的是单片机及外围电路组成高度为四层楼的电梯控制系统。单片机采用AT89C51,晶体振荡器选6MHz,C51、C52为30uF瓷片电容...
  • 可编程控制器是以微处理器为核心,综合计算机技术、自动控制和通信技术发展起来的一种新型工业自动控制装置,经过30多年的发展在工业生产中获得的了极其广泛的应用。目前,可编程控制成为工业自动化领域中极为重要、...
  • 文章目录研究现状总体方案设计硬件电路设计电梯逻辑控制电梯运行控制硬件仿真系统测试方向优先测试距离优先测试综合测试总结展望参考文献 研究现状 在现代社会和经济活动中,电梯已经成为城市物质文明的一种标志。...

    研究现状

    在现代社会和经济活动中,电梯已经成为城市物质文明的一种标志。特别是在高层建筑中,电梯是不可缺少的垂直运输工具。
    电梯的存在,使得每幢大型高楼都可以成为一座垂直的城市。在纽约的前世界贸易中心大楼里,除每天有5万人上班外,还有8万人次的来访和旅游,因此250台电梯和75台自动扶梯的设置和正常运行,才使得合理调运人员、充分发挥大楼的功能成为现实。中国第一高楼、坐落在上海浦东的金茂大厦,高度420.5m,主楼地上88层,建筑面积220000㎡,集金融、商业、办公和旅游为一体,其中60台电梯、18台扶梯的作用是显而易见的。
    尽管电梯的品种繁多,但目前使用的电梯绝大多数为电力拖动、钢丝绳曳引式结构。从电梯各构件部分的功能上看,可分为八个部分:曳引系统、导向系统、轿厢、门系统、重量平衡系统、电力拖动系统、电气控制系统和安全保护系统。
    20世纪初,美国出现了曳引式电梯,其结构见图1。从图中可见,钢丝绳悬挂在曳引轮上,一端与轿厢连接,而另一端与对重连接,随曳引轮的转动,靠钢丝绳与曳引轮槽之间的摩擦力,使轿厢与对重作一生一降的相反运动。近一百年来,曳引电梯一直受到重视,并发展沿用至今。在这里插入图片描述
    目前,我国国产电梯大部分为继电器、PLC控制方式以及单片机控制方式。
    继电-接触系统:它的优点是线路直观,大部分电器均为常用电器,更换方便,价格较便宜。但是他触点繁多,线路复杂,电器的电磁机构及触点动作较慢,能耗高,机械动作噪音大,而且可靠性差。继电器控制系统性能不稳定、故障率高,大大降低了电梯的舒适性、可靠性和安全性,经常造成停梯,给乘用人员的生活和工作带来了很多不便,因而传统的电梯控制系统的更新势在必行。
    PLC(可编程控制器)在电梯控制中得到了广泛的应目前。PLC在设计和制造上采取了许多抗干扰措施,使用方便,扩展容易。它使用了梯形图和可编程指令,易于掌握。电梯控制器通常由PLC实现基本能力,但是如果要实现电梯智能化,则PLC稍嫌不足。
    单片机以其卓越的性能,得到了广泛的应用,已深入到各个领域。单片机应用在检测、控制领域中,具有如下特点。
    一、成本低。本电梯控制由于采用单片机代替了PLC作为主控芯片, 同时用PWM 驱动直流电机代替了变频调速驱动,从而导致整套系统成本很低。
    二、高精度的重量检测及显示。基于PLC的电梯模型虽然有重量检测,但检测精度较低。本电梯模型采用高精度的重量传感器和测量电路, 配合设计优良的数字处理软件,从而能进行高精度的重量检测和显示.
    三、 可靠性好,适应温度范围宽。单片机芯片本身是按工业测控环境要求设计的,能适应各种恶劣的环境,这是其它机种无法比拟的。
    四、 易扩展,很容易构成各种规模的应用系统,控制功能强。单片机的逻辑控制功能很强,指令系统有各种控制功能用指令。
    五、 可以很方便的实现多机和分布式控制。
    六、 单片机可以构成形式多样的控制系统、数据采集系统。

    总体方案设计

    该设计采用单片机AT89S52实现基本的简易电梯模型,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且更能体现智能思维,AT89S52是低功耗、高性能的CMOS型8位单片机。片内带有8KB的Flash存储器,且允许在系统内改写或用编程器编程。另外,AT89S52的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等,完全满足该课题的需要。
    作为小型化的电梯模拟装置,其控制器的设计应遵循简单可靠以及成本低、维护方便等原则。控制器的处理器采用了8位单片机,外围扩展键盘采用矩阵键盘输入、位置检测采用反射式红外光电传感器,并配以LED显示当前运行信息。电梯模拟器的机械部分采用了丝杠传动加直流电机配以减速齿轮驱动,距离移动十分精确,无运行积累误差。
    总体设计框图如下图2
    在这里插入图片描述
    电机控制采用调节方波的占空比大小来控制直流电机的转速,控制电梯移动高度。整个电机的运行过程大致如图所示:
    在这里插入图片描述
    用单片机自带555做成的多谐振荡器产生的方波信号来控制小功率的蜂鸣器工作,具体为555定时器的Vi1和Vi2接在一起可以接成施密特触发器。我们把施密特触发器的反相输出端经RC积分电路接回到它的输入端,就构成了多谐振荡器。在这里插入图片描述

    硬件电路设计

    本次设计的基本思想是采用AT89S52单片机作为核心,利用其丰富的I/O接口与外围电路配合进行控制。采用7段数码管(LED)实时显示电梯所在楼层。采用行列式键盘矩阵作为外呼内选电路,由于是8层楼,故选用4×4矩阵键盘,键盘矩阵共16个按键,其中8个按键是各层楼外向下呼按键,另外8个表示各层楼外向上呼按键。5个表示电梯内部的选择键,另外设有紧急停止按键,启动按键和电梯演示按键。电梯状态是通过八个发光二极管显示的,具体含义如下表所示:LED0 电梯空闲标志
    LED1 电梯向上标志
    LED2 电梯停止标志
    LED3 电梯向下标志
    LED4 电梯直达标志
    LED5 电梯急停标志
    LED6 断电待修标志
    LED7 电梯开关标志
    电梯模型效果图如图3所示:在这里插入图片描述

    在这里插入图片描述
    体感模块接收处理电路

    电梯到达某一楼层之后,可使用定时器模式,让电梯停留固定某一时间自动关闭;也可使用关门按键让电梯提前关闭运行或是使用开门按键让电梯延长开门时间等待用户进入;也可选择体感传感器模式,让其感应人体红外线,让电梯门保持开着。 下 图为人体感应传感器实物图。在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    电梯逻辑控制

    电梯控制中,单片机扫描楼层外呼内选信号,将楼层呼叫信号与当前楼层运行状态进行比较,确定电梯响应上升、下降队列,然后电梯按照运行队列进行电机控制。而将呼叫信号转化为响应队列的程序模块是电梯控制的核心部分,其算法的严谨性,决定了电梯的控制性能。逻辑框图如图14所示:在这里插入图片描述

    电梯运行控制

    电梯响应上升下降队列时,要对相应的指示灯、上下行状态,以及响应队列做相应的改变,而实现这一功能模块的就是电梯运行函数。其逻辑框图如图15所示:在这里插入图片描述

    硬件仿真

    在这里插入图片描述

    系统测试

    方向优先测试

    电梯按某方向运行时,优先响应该运行方向的按钮;
    测试初始时,轿箱位于一楼,按下二楼,三楼的上下按呼叫,和四楼的向下呼叫。按键顺序可随意。
    测试结果:
    在这里插入图片描述
    结论:
    系统在向上运行时候,优先相应各楼层的向上呼叫信号,不响应向下的呼叫信号,向下运行时相反,符合设计要求。

    距离优先测试

    同一方向有多个按钮呼叫时,优先响应最近的楼层。测试初始时,电梯位于任一层,如二楼。此时三楼和四楼分别向上呼叫。测试结果:先响应三楼呼叫,再响应四楼呼叫。
    结论:电梯具有距离优先响应的功能,当多层同方向呼叫,首先响应距离当前楼层较近的呼叫,符合系统设计要求。
    各按钮呼叫时指示灯显示正常,电梯响应该按钮的呼叫后,其指示灯应自动熄灭。

    综合测试

    测试条件:电梯位于1楼,进入三人,其中一人要到3楼,另两人到4楼。电梯运行后,3楼和4楼有人向上呼叫,3楼有人向下呼叫到1楼。
    测试结果:
    在这里插入图片描述
    测试结论:系统具有方向优先、距离优先的功能,基本模拟了实际电梯运行,完成题目设计指标。

    总结展望

    经过认真的选择和设计,最终完成了一个可以实现大部分功能的电梯控制系统。电梯系统为模拟实用客运电梯系统的模拟实验装置。它能实现实际客运电梯系统的绝大部分功能,包括:外呼叫请求功能,电梯内选层功能,楼层实时显示,电梯自动开关门功能,智能初始化功能,语音提示功能,紧急停运功能,系统演示功能。
    通过这次课程设计,受益匪浅,对单片机在实物中应用的能力得到很大的提高,首先是对整个电梯系统硬件的设计,在有限的IO口基础上实现了诸多功能,对IO口管脚复用有了更深入的了解,对于电机学的知识也有了进一步的巩固和加深。单片机构成一个控制系统后它的外围电路、扩展电路以及一些通讯都是至关重要的,只有完善单片机的外部电路才能保证单片机能正常有效的工作。其次完成了对单片机的软件设计,对矩阵键盘、数码管显示、电机控制、电梯逻辑控制有了更深入的了解,也对调试代码的方法积累了宝贵的经验。再次,而且在单片机综合设计过程中,不仅在学习上有了很大的提高,对于我的意志力也得到了很好的锻炼。
    虽然本电梯控制系统已能满足基本的电梯运行要求,但仍有许多需要改进的地方:
    (1)增加与微机通信的接口,实现联网控制。
    (2)优化电梯选向功能,使之随客流量的变化而改变,达到高效运送乘客的目的。
    (3)需输入密码才能乘电梯到达特殊档层功能,且响应改楼层呼叫时不响应其他楼层呼叫。
    (4)完善电梯各个模块功能,如门控电机模块,重力检测模块,电机调速驱动等系统,使电梯模型安全性更高,运行更加稳定。

    参考文献

    [1]欧伟明,何静,凌云,刘剑等.单片机原理与应用 [M].电子工业出版社,2009
    [2]慧净HC-1原理图
    [3] 李建忠编著 《单片机原理及运用》 西安电子科技大学出版社 2001年
    [4] 吴金戌 沈庆阳 郭庭吉《8051单片机实践与应用》清华大学出版社,2002
    [5] 童诗白 华成英主编,《模拟电子技术基础 第三版》,高等教育出版社,2011.5
    [6] 阎石主编,《数字电子技术基础》,高等教育出版社,2007.11
    [7] 谭浩强著,《C程序设计 第三版》,清华大学出版社,2006.6
    [8] 李惠昇,《电梯控制技术》,北京:机械工业出版社,2003
    [9]何斌.电梯群控系统设计与应用[ D ].南京理工大学,2006 .

    展开全文
  • 一个数电课程设计的multisim仿真文件,其中有上升和下降指示以及楼层显示。
  • 软件工程课程设计-电梯控制系统

    **

    电梯控制系统

    **

    需求说明:
    完成一个56层写字楼6部电梯的模拟控制系统。模拟系统运行在Window7 系统下,电梯按键使用图形化界面输入。电梯运行状况可以实时呈现于控制端。
    功能点:
     电梯内部按键包含“楼层数字”按键、“手动开门”按键、“手动关门”按键、“紧急呼叫”按键;
     控制系统可以接收不同楼层的控制信号,并按照规则指派相应的电梯到达该楼层;
     电梯指派规则(建议):
     忙时优先指定离请求楼层最近的电梯到达;
     忙时电梯区分高、低楼层,至少有半数的电梯不在15层以下停靠,至少有1部电梯可以到达全部楼层;
     闲时优先指派运行总里程短,且在请求楼层上、下5层内的电梯;
     电梯可正确到达乘用人员指定楼层;
     电梯运行时在每个楼层停留时间为10s,每次手动开门按键可增加5s停留时间;
     当乘用人员按动手动关门键后,电梯等待2s后开始继续运行;
     当乘用人员按动手动关门键后,如果电梯外部有同向乘梯请求,则电梯再次开门并等待10s后开始运行;
     电梯正常运行时,需对电梯内部乘员、楼层等待用户、后台呈现当前楼层信息;
     电梯运行过程中,应能响应运行方向3个楼层(含)以上的同向乘梯请求;
     当电梯满载时,不响应运行方向的乘梯请求,直到非满载时为止;
     当电梯超载时,停止运行并给予灯光、声音提示;
     电梯内、外部按键均支持取消功能;
     支持控制端停用指定电梯;
     支持单部电梯独立复位——当电梯故障时,电梯对控制系统报警,“滑梯”至基准楼层(一楼),开门,并开始复位操作,对外呈现故障状态,直至复位完成,在此期间,其他电梯运行不受影响;
     在地震、火警、台风等不适宜使用电梯的场景下,电梯不响应乘梯请求,工作中电梯运行至最近楼层后,轿厢门常开,并不再运行;

    具体实现文件见链接:https://download.csdn.net/download/qq_39026129/10509082

    批注:某双非一本院校计算机学院请软通动力给我们做的课程设计指导,说实话确实体会到了学校学习的知识与企业开发的脱节,通过此次课设确实是学到了一些知识,对对对,最重要的还是团队的分工与合作(我们小组最终获得了优秀证书,发了个小风扇,嘿嘿)。

    同性交友网站,免费提供下载
    GitHub

    展开全文
  • PLC四层电梯自动控制系统课程设计报告_欧姆龙
  • 基于PLC的四层电梯控制系统设计论文 完整 是本人的毕业设计 很有参考价值
  • 详细的叙述 如何通过MCGS组态软件设计一个电梯监控系统
  • 设计电梯软件部分的测试用例 1、电梯覆盖全部楼层,当有内外呼信号时,正确响应; 2、电梯在上升或下降过程中,任何反方向的外呼信号均不响应; 3、电梯在5楼,如果6层以上没有呼梯信号,则电梯可以响应5层以下的...

    设计电梯软件部分的测试用例


    1、电梯覆盖全部楼层,当有内外呼信号时,正确响应;

    2、电梯在上升或下降过程中,任何反方向的外呼信号均不响应;

    3、电梯在5楼,如果6层以上没有呼梯信号,则电梯可以响应5层以下的信号;

    4、电梯在运行时,开门和关门按钮均不起作用,电梯平层且电梯响应停止后,按开门、关门正确响应;

    5、电梯在1楼,2 3 4 5 6楼均向下外呼梯,则电梯先去6楼,然后一直往下走接人;

    6、电梯在1楼,2 3 4 5 6楼均向上外呼梯,则电梯先去2楼,然后一直往上走接人

    7、电梯在上升/下降过程中 显示满员,中途的响应会不会停;

    8、电梯在5楼,有外呼信号时,响应,电梯门打开,无人操作时,延时一定时间后自动关门;

    展开全文
  • plc控制电梯系统plc电梯控制系统的文献综述
  • 电梯的电气系统由拖动系统和控制系统 两部分组成。传统的电气控制系统采用的继 电器逻辑控制 由于设备体积大,可靠性差 , 动作速度慢 ,功能少等缺 点,正逐渐被淘 汰 。 目前 电 梯 设 计 使 用 可 编 程控 制...
  • 本文在阐述电梯的结构和可编程控制器的结构和工作原理的基础上,针对5层5站电梯,使用西门子S7-200 (CPU226CN)可编程控制器,设计电梯控制系统。包括电梯的指层控制模块、轿内指令和厅外召唤的登记与消号模块...
  • 基于plc的电梯控制逻辑,及其程序,设计方案方法。
  • 在刚刚看到这个题目的时候,觉得毫无头绪,之后在CSDN上面也看到了很多想法,但是大多不是C语言,也不是源码,或者编译不通过,不过也给了我一些启迪,以下是自己的一些想法,在DEV C++编译通过。...

    项目已经转移至GitHub:https://github.com/Kyfafyd

    在刚刚看到这个题目的时候,觉得毫无头绪,之后在CSDN上面也看到了很多想法,但是大多不是C语言,也不是源码,或者编译不通过,不过也给了我一些启迪,以下是自己的一些想法,在DEV C++编译通过。若有不足之处请不吝指正!

           下面就贴源码了,我也上传了资源,也可以去下面这个网址下载~

            https://download.csdn.net/download/qq_42073370/10603339

    elevator.h

    //
    //elevator.h
    /*****************************************************************************
    /*C语言简易电梯实现(模拟状态机)
    /*
    /*通过定义两个枚举类型和两个结构表征电梯当前状态
    /*
    /*具有如下功能:
    /*电梯状态初始化(电梯在一楼且电梯门关闭)
    /*选择电梯是否继续运行
    /*控制电梯每次运行时的方向
    /*在电梯运行过程中添加层数
    /*输入电梯层数是可乱序输入
    /*判断电梯是否超载
    /*增加或减少电梯内人数
    /*宏定义电梯最大载客数和楼层范围,可根据需要修改elevator.c中的MAX_FLOOR,MAX_NUM
    /*最后电梯还原为初始化时的状态 
    ******************************************************************************/
    #ifndef elevator_h
    #define elevator_h
    //当前事件类型 
    typedef enum tagT_EventType {
        EVENT_OPEN = 0,
        EVENT_UP,
        EVENT_DOWN,
        EVENT_CLOSE,
        EVENT_WARN,
        EVENT_STOP,
        EVENT_DELWARN
    }T_EventType;
    //当前状态类型
    typedef enum tagT_StateType {
        STATE_STOP = 0,
        STATE_OPEN,
        STATE_UP,
        STATE_DOWN,
        STATE_WARN
    }T_StateType;
    //电梯状态结构参量 
    typedef struct Elevator {
        int num;
        int level;
        T_EventType event;
        T_StateType state;
    }El, *Ele;
    //电梯需到达的楼层记录的结构
    typedef struct Ele_floor {
        int floor;
        struct Ele_floor *next;
    }Fl, *Flo;
    //提示语
    //事件列表 
    void meau_event();
    //状态列表 
    void meau_state();
    //楼层获取提示
    void meau_floor(Ele p);
    //电梯状态初始化(电梯处于一楼且电梯门关闭) 
    void init_elevator(Ele p);
    //楼层获取 
    void Get_floor(Flo L, Ele p);
    //删除已经到达的楼层
    void Delete_floor(Flo L);
    //电梯状态转换 
    void trans_elevator(Ele p, int k);//k为接下来需要到达的楼层 
    //遍历要到达的每个楼层 
    void Every_floor(Flo s, Flo L, Ele p, int k);
    //输出要到达的楼层
    void Print_floor(Flo L);
    //获取还要到达的楼层数目 
    int Amount_floor(Flo L);
    //将当前输入的楼层与一输入的楼层合并
    Flo Merge_floor(Flo L1, Flo L2);
    //删除重复楼层 
    void Delete_samefloor(Flo L);
    //楼层升序排序
    void Sort_floorup(Flo L);
    //楼层降序排列
    void Sort_floordown(Flo L);
    //逆置楼层 
    void Reverse_floor(Flo L);
    #endif/*elevator.h*/

    elevator.c 

    //
    //elevator.c 
    #include <stdio.h>
    #include <stdlib.h>
    #include "elevator.h" 
    #define MAX_FLOOR 10
    #define MAX_NUM 10
    //提示语
    //事件列表 
    void meau_event()
    {
        printf(">> Event list:\n");
        printf(">> 1:EVENT_UP\n");
        printf(">> 2:EVENT_DOWN\n");
    }
    //状态列表 
    void meau_state()
    {
        printf("\n>> The floor range is: 1--MAX_NUM, and the floor input ends after -1!\n");
        printf(">> The elevator status represented by each number is:\n");
        printf(">> 0:STATE_STOP\n");
        printf(">> 1:STATE_OPEN\n");
        printf(">> 2:STATE_UP\n");
        printf(">> 3:STATE_DOWN\n");
        printf(">> 4:STATE_WARN\n");
    }
    //楼层获取提示
    void meau_floor(Ele p)
    {
        if (p->level == 1 && p->state != STATE_OPEN)
            printf(">> The elevator is on the ground floor now,please enter the floor you want to reach:", MAX_FLOOR);
        if (p->level == MAX_FLOOR && p->state != STATE_OPEN)
            printf(">> The elevator is on the top floor now,please enter the floor you want to reach:", MAX_FLOOR);
        if (p->level != 1 && p->level != MAX_FLOOR && p->state == STATE_UP)
            printf(">> The elevator is going up now,please enter the floor you want to reach:", MAX_FLOOR, p->level);
        if (p->level != 1 && p->level != MAX_FLOOR && p->state == STATE_DOWN)
            printf(">> The elevator is going down now,please enter the floor you want to reach:", MAX_FLOOR, p->level);
    }
    //电梯状态初始化(电梯处于一楼且电梯门关闭) 
    void init_elevator(Ele p)
    {
        p->num = 0;//电梯内人数为0 
        p->level = 1;//电梯处于一楼 
        p->state = (T_StateType)0;//电梯门处于关闭状态 
        if (p->state == STATE_STOP && p->level == 1)
            printf(">> Initializing the elevator successfully!\n");
    }
    //楼层获取 
    void Get_floor(Flo L, Ele p)
    {
        Fl *s, *r;
        int flag = 1;
        int x;
        r = L;
        meau_floor(p);
        while (flag) {
            if (p->level == 1) {//电梯处于底楼时 
                if (p->state == STATE_OPEN) break;
                scanf("%d", &x);
                if (x > 1 && x <= MAX_FLOOR) {
                    s = (Flo)malloc(sizeof(Fl));
                    s->floor = x;
                    r->next = s;
                    r = s;
                }
                else {
                    flag = 0;
                    r->next = NULL;
                }
            }
            if (p->level == MAX_FLOOR) {//电梯处于顶楼时
                if (p->state == STATE_OPEN) break;
                scanf("%d", &x);
                if (x >= 1 && x < MAX_FLOOR) {
                    s = (Flo)malloc(sizeof(Fl));
                    s->floor = x;
                    r->next = s;
                    r = s;
                }
                else {
                    flag = 0;
                    r->next = NULL;
                }
            }
            if (p->level != 1 && p->level != MAX_FLOOR && p->state == STATE_UP) {//电梯在一次运行中上升时 
                scanf("%d", &x);
                if (x > p->level && x <= MAX_FLOOR) {
                    s = (Flo)malloc(sizeof(Fl));
                    s->floor = x;
                    r->next = s;
                    r = s;
                }
                else {
                    flag = 0;
                    r->next = NULL;
                }
            }
            if (p->level != 1 && p->level != MAX_FLOOR && p->state == STATE_DOWN) {//电梯在一次运行中下降时 
                scanf("%d", &x);
                if (x < p->level && x >= 1) {
                    s = (Flo)malloc(sizeof(Fl));
                    s->floor = x;
                    r->next = s;
                    r = s;
                }
                else {
                    flag = 0;
                    r->next = NULL;
                }
            }
            if (p->level != 1 && p->level != MAX_FLOOR && p->state == STATE_OPEN) break;
        }
    }
    //电梯状态转换 
    void trans_elevator(Ele p, int k)//k为接下来需要到达的楼层 
    {
        switch (p->state) {
        case STATE_STOP:
            switch (p->event) {
            case EVENT_OPEN:
                p->state = (T_StateType)1;
                p->level = k;
                break;
            case EVENT_UP:
                p->state = (T_StateType)2;
                p->level = k;
                break;
            case EVENT_DOWN:
                p->state = (T_StateType)3;
                p->level = k;
                break;
            }
            break;
        case STATE_OPEN:
            switch (p->event) {
            case EVENT_CLOSE:
                p->state = (T_StateType)0;
                p->level = k;
                break;
            case EVENT_WARN:
                p->state = (T_StateType)4;
                p->level = k;
                break;
            }
            break;
        case STATE_UP:
            if (p->event == EVENT_STOP)
                p->state = (T_StateType)0;
            p->level = k;
            break;
        case STATE_DOWN:
            if (p->event == EVENT_STOP)
                p->state = (T_StateType)0;
            p->level = k;
            break;
        case STATE_WARN:
            if (p->event == EVENT_DELWARN)
                p->state = (T_StateType)1;
            p->level = k;
            break;
        }
    }
    //遍历要到达的每个楼层 
    void Every_floor(Flo s, Flo L, Ele p, int k)
    {
        while (s->next != NULL) {
            int w, flag;
            flag = 1;
            p->event = EVENT_STOP;
            trans_elevator(p, s->next->floor);
            p->event = EVENT_OPEN;
            trans_elevator(p, s->next->floor);
            printf("\n>> The elevator has reached the %d floor, the elevator is in the %d state,there are %d people in the elevator!\n", p->level, p->state, p->num);
            if (Amount_floor(s) > 1) {
                printf(">> If the number of people in the elevator increases, enter a positive number, otherwise enter a negative number:");
                while (flag) {
                    scanf("%d", &w);
                    if ((w + p->num) > MAX_NUM) {
                        p->event = EVENT_WARN;
                        trans_elevator(p, s->next->floor);
                        printf(">> Overweight, please re-enter:");
                    }
                    else {
                        p->event = EVENT_CLOSE;
                        trans_elevator(p, s->next->floor);
                        p->num = p->num + w;
                        flag = 0;
                    }
                }
                if (p->state == STATE_STOP) printf(">> Elevator doors close,");
                if (k == 1) p->state = STATE_UP;
                else p->state = STATE_DOWN;
                printf("the elevator is in the state of %d, and there are %d people in the elevator\n", p->state, p->num);
            }
            Get_floor(L, p);
            Sort_floorup(L);
            Sort_floorup(s);
            Merge_floor(s, L);
            if (k == 2) Reverse_floor(s);
            Delete_samefloor(s);
            Delete_floor(s);
            if (s->next == NULL)
                printf(">> The elevator has reached all the right floors!\n");
            else {
                printf(">> The floors to be reached are:");
                Print_floor(s);
            }
        }
    }
    //删除已经到达的楼层
    void Delete_floor(Flo L)
    {
        Fl* temp;
        if (L->next != NULL) {
            temp = L->next;
            L->next = temp->next;
            free(temp);
        }
    }
    //输出要到达的所有楼层 
    void Print_floor(Flo L)
    {
        L = L->next;
        if (L == NULL)
            printf(">> NULL!");
        while (L != NULL) {
            printf("%d ", L->floor);
            L = L->next;
        }
        printf("\n");
    }
    //获取还要到达的楼层数目 
    int Amount_floor(Flo L)
    {
        Fl *p;
        int length = 0;
        p = L->next;
        while (p != NULL) {
            p = p->next;
            length++;
        }
        return length;
    }
    //将当前输入的楼层与已经输入的楼层合并 
    Flo Merge_floor(Flo L1, Flo L2)
    {
        Fl *p, *q, *r, *L3;
        p = L1->next;
        q = L2->next;
        r = L3 = L1;
        while (p&&q) {
            if (p->floor <= q->floor) {
                r->next = p;
                r = r->next;
                p = p->next;
            }
            else {
                r->next = q;
                r = r->next;
                q = q->next;
            }
        }
        if (p) r->next = p;
        if (q) r->next = q;
        free(L2);
        return L3;
    }
    //楼层升序排序
    void Sort_floorup(Flo L)
    {
        Flo p,q,r;
        r=L;
        while(r->next!=NULL){
            p=r;
            q=p->next;
            while(q->next!=NULL){
                if(p->next->floor>q->next->floor) p=q;
                q=q->next;
            }
            q=p->next;
            p->next=q->next;
            q->next=r->next;
            r->next=q;
            r=q;
        }
    } 
    //楼层降序排列
    void Sort_floordown(Flo L)
    {
        Sort_floorup(L);
        Reverse_floor(L);
    }
    //删除重复楼层 
    void Delete_samefloor(Flo L)
    {
        Fl *p, *q;
        p = L;
        q = L->next;
        while (q) {
            if (p->floor == q->floor) {
                q = q->next;
                p->next = q;
            }
            p = p->next;
            q = q->next;
        }
    }
    //逆置楼层顺序 
    void Reverse_floor(Flo L)
    {
        Fl *p, *s;
        p = L->next;
        L->next = NULL;
        while (p) {
            s = p;
            p = p->next;
            s->next = L->next;
            L->next = s;
        }
    }

    main.c

    //
    //main.c
    #include <stdio.h>
    #include <stdlib.h>
    #include "elevator.h"
    int main()
    {
        El *p;//电梯状态 
        Fl *s, *L;//电梯需到达的层数(s存储开始时需要到达的层数,L存储电梯运行过程中需要增加的层数) 
        p = (El*)malloc(sizeof(El));
        s = (Fl*)malloc(sizeof(Fl));
        L = (Fl*)malloc(sizeof(Fl));
        s->next = NULL;
        L->next = NULL;
        //电梯初始化 
        init_elevator(p);
        //电梯运行 
        int ff, control;
        ff = 1;
        while (ff) {
            meau_state();
            printf("\n>> The elevator continues? If yes, please enter 1. If not, please enter 0:");
            scanf("%d", &control);
            if (control == 1) {
                int k;
                p->num = 0;
                printf(">> There are %d people in the elevator and the elevator is at %d building!\n", p->num, p->level);
                printf(">> Please enter the initial number of people on the elevator:");
                scanf("%d", &p->num);
                meau_event();
                printf(">> Please select the event:");
                scanf("%d", &k);
                if (k == 1) p->state = STATE_UP;
                else p->state = STATE_DOWN;
                Get_floor(s, p);//获取电梯要到达的楼层 
                if (k == 1) Sort_floorup(s);
                else Sort_floordown(s);
                printf(">> The floors to be reached are:");
                Print_floor(s);
                Every_floor(s, L, p, k);//遍历每个楼层 
            }
            else ff = 0;
            printf("\n>> Press any key to continue!");
            getch();
            system("cls");
        }
        //还原电梯
        init_elevator(p);
        //释放内存 
        free(p);
        free(s);
    }

     

    展开全文
  • 电梯是一种垂直方向的运输设备,是高层...而电梯控制系统则具有手动和自动的功能,并且还可以指层、选层、选向、厅召唤等。 所以此集成控制系统,实现了电梯的各种控制功能,提高了电梯运行的可靠性,降低了故障率。
  • 按照题目要求,电梯控制系统由中心控制模块、用户信号输入模块、电机控制与驱动模块、位置检查模块、称重模块和显示等组成。 是做毕业设计和电子设计不可多得的学习参考资料,里面的内容介绍比较全面详细。
  • 基于AT89C52单片机设计一个四层电梯单片机控制系统。该系统应满足的功能要求为:4层电梯运行控制,轿内外呼叫,运行状态显示。独立键盘、LED显示楼层、指示灯。本设计采...
  • 电梯模拟系统的实现

    2020-01-13 16:37:14
    电梯系统实现的功能 基本要求 (1)模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。五个楼层由下至上依次称为地下层、第一层、第二层、第三层和第四层,其中第一层是大楼的进出层,即是...
1 2 3 4 5 ... 20
收藏数 7,021
精华内容 2,808
关键字:

电梯系统软件设计