电梯模拟课程设计
电梯模拟课程设计方案模板
随着城市化进程的加快,电梯作为一种重要的交通工具,其安全性和智能化程度日益受到重视。
为了让学生更好地了解电梯的工作原理、控制方法及维护保养,本课程设计旨在通过模拟电梯运行,让学生在理论与实践相结合的过程中,掌握电梯相关知识和技能。
二、课程目标1. 理解电梯的基本组成和工作原理;2. 掌握电梯控制系统的编程方法;3. 熟悉电梯的维护保养流程;4. 培养学生的创新思维和团队协作能力。
三、课程内容1. 电梯基本知识(1)电梯的组成及工作原理;(2)电梯的驱动方式及控制系统;(3)电梯的运行参数及安全标准。
2. 电梯控制系统设计(1)PLC编程基础;(2)电梯控制系统的硬件设计;(3)电梯控制系统的软件设计;(4)电梯控制系统的调试与优化。
3. 电梯维护保养(1)电梯的日常维护保养;(2)电梯的故障排除及应急处理;(3)电梯的定期检修与维护。
1. 教学方法(1)理论教学:采用多媒体教学手段,结合实物展示,使学生了解电梯的基本知识;(2)实践教学:通过模拟电梯运行,让学生亲自动手操作,掌握电梯控制系统的编程、调试与优化;(3)项目教学:以实际电梯为例,让学生参与电梯维护保养的全过程,提高学生的实际操作能力。
2. 教学过程(1)课堂讲授:教师讲解电梯基本知识、控制系统设计及维护保养等内容;(2)实验操作:学生在教师指导下,完成电梯控制系统的编程、调试与优化;(3)项目实践:学生分组进行电梯维护保养,完成项目任务。
五、课程评价1. 课堂表现:学生出勤率、课堂纪律及参与度;2. 实验操作:学生完成电梯控制系统的编程、调试与优化情况;3. 项目实践:学生参与电梯维护保养的项目完成情况;4. 期末考核:理论考试、实践操作考核及项目答辩。
六、课程总结通过本课程设计,学生能够全面了解电梯的相关知识,掌握电梯控制系统的编程、调试与优化方法,以及电梯的维护保养流程。
同时,培养学生的创新思维和团队协作能力,为今后从事电梯行业打下坚实基础。
教学版电梯模型设计方案
一、项目背景随着城市化进程的加快,电梯已成为现代建筑中不可或缺的设施。
为了让学生更好地理解电梯的工作原理,培养他们的实践操作能力,我们设计了这款教学版电梯模型。
二、设计目标1. 帮助学生理解电梯的基本工作原理;2. 培养学生的动手能力和创新意识;3. 提高学生对电梯安全知识的认识;4. 激发学生对自动化控制技术的兴趣。
三、设计方案1. 模型结构(1)框架结构:采用轻质金属框架,保证模型的稳定性和耐用性。
(2)轿厢:模拟真实电梯轿厢,内部空间可根据需求进行调整。
(3)井道:模拟真实电梯井道,采用透明材料,便于观察电梯内部结构。
(4)对重:模拟真实电梯对重,保证电梯运行平稳。
2. 控制系统(1)主控制器:采用PLC(可编程逻辑控制器)作为主控制器,实现电梯运行的逻辑控制。
(2)传感器:配备多种传感器,如光电传感器、限位开关等,实时监测电梯运行状态。
(3)驱动系统:采用步进电机或伺服电机作为电梯驱动,实现电梯的垂直运动。
3. 功能模块(1)楼层显示:采用LCD显示屏,显示当前楼层和目标楼层。
(2)按钮控制:设置楼层按钮,实现电梯的上下运动。
(3)故障模拟:模拟电梯故障,让学生了解电梯故障处理方法。
(4)语音提示:配备语音提示模块,对电梯运行状态进行提示。
4. 安全保护(1)急停按钮:设置紧急停止按钮,确保在紧急情况下能够迅速停止电梯。
(2)超载保护:设置超载保护装置,防止电梯超载运行。
(3)门机保护:设置门机保护装置,防止门机故障导致电梯安全事故。
四、实施步骤1. 设计阶段:完成电梯模型的整体设计,包括结构、控制系统、功能模块和安全保护等方面。
2. 制作阶段:根据设计方案,进行电梯模型的制作,包括框架、轿厢、井道、对重、传感器、驱动系统等。
3. 调试阶段:对电梯模型进行调试,确保各部分功能正常,运行稳定。
4. 教学应用:将电梯模型应用于教学,让学生通过实践操作,掌握电梯的工作原理和操作方法。
五、总结本教学版电梯模型设计方案旨在为学生提供一种直观、易懂的电梯教学工具,帮助学生更好地理解电梯工作原理,提高他们的实践操作能力。
电梯课程设计---电梯模拟控制系统设计
电气控制技术课程设计任务书20 11 -20 12 学年第 2学期第 19 周- 19 周题目电梯模拟控制系统设计内容及要求运行要求:运行程序时,电梯停在一楼。
如按下A3,电梯从一楼到二楼,并等待再按选择楼层按钮,如再按A6按钮则电梯从二楼到四楼,然后再按A1按钮电梯会从四楼到一楼。
其它情形实验者可多做几次,其具体效果与实际电梯相类似。
根据运行要求,画出控制系统线路图、列输入输出分配表、编写梯形图并逐条加注释,且写出程序流程图。
完成课程设计说明书与课程设计报告。
进度安排1、讲授课程设计的要求、任务和方法,布置设计题目(0.5天);2、查阅资料,确定设计方案(1天);3、设计、实验调试并完成课程设计报告(2.5天);4、当场个人答辩及报告评阅(1天)。
学生姓名:蔡系海指导时间 2012 年6月 18日至2012年6月 22日指导地点: F楼 212室任务下达2012 年 6月 15日任务完成2012年6月 22日考核方式 1.评阅□ 2.答辩□ 3.实际操作□ 4.其它□指导教师系(部)主任摘要随着我国经济的高速发展,微电子技术、计算机技术和自动控制技术也得到了迅速发展,电梯也已成为人类现代生活中广泛使用的运输工具。
随着人们对电梯运行的安全性、舒适性等要求的提高,电梯得到了快速发展,其拖动技术已经发展到了调频调压调速,其逻辑控制也由 PLC 代替原来的继电器控制。
可编程控制器(PLC)因为稳定可靠、结构简单、成本低廉、简单易学、功能强大和使用方便已经成为应用最广泛的通用工业控制装置,成为当代工业自动化的主要支柱之一。
电梯控制要求接入设备使用简便,对应系统组态的编程简单,具有人性化的人机界面,配备应用程序库,加快编程和调试速度。
通过 PLC 对程序设计,提高了电梯的控制水平,并改善了电梯的电梯运行的舒适感。
本文争对以上优点,对电梯运行进行了改进,使其达到了比较理想的控制效果。
关键词 PLC 电梯控制系统目录前言.......................................................... .5一. 四层电梯控制上下行主电路 (7)二. 四层电梯控制电路图 (7)三. 四层电梯门电机控制电路原理 (7)四. 程序流程图 (8)五. 输入/输出的分配表 (8)六.四层电梯控制程序梯形图 (9)七. 心得体会 (13)八. 参考文献 (14)前言伴随着工厂自动化程度的提高,PLC可编程控制器在工厂中的应用也越来越广泛,而且几乎涉及到工厂的各个方面,包括供电、生产、物料管理、运输等等。
基础课程设计 模拟电梯的设计与制作
电子课程设计报告设计课题:模拟电梯的设计与制作专业班级:09级电子信息工程2班设计时间: 2011年10月10日—12月31日目录一、结构设计方案选择 (3)方案一:模拟洗衣机电机控制部分 (3)方案二:模拟电梯 (4)方案比较与选择 (7)二、摘要 (6)三、模拟电梯的设计思路与要求 (7)四、单元电路设计、参数计算及元器件选择 (8)4.1 ADC0809 (8)4.2 显示部分 (10)4.3 矩阵键盘模块 (11)4.4 单片机最小系统............................................................................ .... .. (12)4.5 步进电机控制电路 (12)4.6 电梯实体的设计............................................................................ ... ................. . (15)五、总原理图及元器件清单 (16)5.1 电路总原理图 (16)5.2 元件清单 (17)5.3 实验器材与工具 (17)5.4 程序部分 (18)六、焊接电路及调试中遇到的问题 (22)6.1 单片机最小系统的调试 (23)6.2 显示部分的调式 (23)6.3 矩阵键盘的调试 (23)6.4 电梯实体的调试 (23)6.5 整体的调试与电路与实题的耦合............................................................. . (23)七、参考文献 (24)八、心得与体会 (24)一、结构设计方案选择:方案一:模拟洗衣机1、设计任务与要求用一个简单的时序逻辑电路来取代传统洗衣机所用的机械开关,实现对电流的控制,正转一定时间,停止2秒左右,再反转一定时间,再停止2s如此反复。
电梯模拟程序课程设计
电梯模拟程序课程设计一、课程目标知识目标:1. 让学生理解电梯的工作原理,掌握电梯运行的模拟编程知识。
2. 使学生掌握利用流程图描述电梯运行逻辑的方法。
3. 帮助学生理解并运用条件语句和循环语句实现电梯模拟程序。
技能目标:1. 培养学生运用编程语言(如Scratch或Python)编写简单电梯模拟程序的能力。
2. 培养学生通过流程图分析问题、解决问题的能力。
3. 提高学生团队协作、沟通交流的能力。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学生主动探索新知识的热情。
2. 培养学生严谨、细心的学习态度,增强面对困难的勇气和毅力。
3. 培养学生遵守程序设计规范,养成良好的编程习惯。
课程性质:本课程为信息技术学科的课程,以项目式学习为主,注重实践操作和团队合作。
学生特点:学生为五年级学生,具备一定的信息技术基础,对新事物充满好奇,喜欢动手操作。
教学要求:教师需引导学生通过自主探究、小组合作等方式完成课程内容,注重培养学生的实践能力和创新精神。
同时,关注学生的个体差异,提供有针对性的指导。
通过本课程的学习,使学生能够达到上述课程目标,实现具体的学习成果。
二、教学内容1. 电梯工作原理介绍:包括电梯的基本结构、运行原理、信号控制系统等,让学生对电梯的运行机制有整体认识。
2. 编程语言基础:回顾并巩固Scratch或Python编程语言的基础知识,如变量、列表、条件语句、循环语句等,为编写电梯模拟程序打下基础。
3. 流程图设计:学习如何利用流程图描述电梯运行的逻辑过程,分析电梯运行中的各种情况,并进行流程图设计。
4. 电梯模拟程序编写:根据流程图,运用所学编程知识,分组合作编写电梯模拟程序,实现基本的运行、停止、开门、关门等功能。
5. 程序调试与优化:指导学生如何调试程序,发现并解决程序中的问题,提高程序的稳定性和运行效率。
教学内容安排和进度:第一课时:电梯工作原理介绍,回顾编程语言基础知识。
第二课时:学习流程图设计,分析电梯运行逻辑。
电梯模拟c语言课程设计
电梯模拟c语言课程设计一、课程目标知识目标:1. 让学生掌握C语言的基本语法,包括变量定义、数据类型、运算符和表达式。
2. 使学生了解电梯运行原理,运用C语言实现电梯的模拟控制。
3. 帮助学生掌握程序流程控制,包括顺序结构、分支结构和循环结构。
技能目标:1. 培养学生运用C语言编写程序的能力,实现电梯的楼层显示、上下行控制等功能。
2. 提高学生分析问题、解决问题的能力,通过编程解决电梯运行中的实际问题。
3. 培养学生团队合作精神,共同完成课程设计任务。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,提高学习积极性。
2. 培养学生严谨、细致的学习态度,养成良好的编程习惯。
3. 增强学生对电梯等现代交通工具的原理认识,提高科技创新意识。
本课程针对高中年级学生,结合C语言课程内容,以电梯模拟为载体,使学生将所学知识应用于实际场景。
课程注重培养学生的编程能力和实际问题解决能力,同时注重团队合作和情感态度的培养,使学生在知识、技能和情感态度价值观方面取得全面发展。
通过本课程的学习,学生将能够独立完成电梯模拟程序的设计与实现,为后续学习打下坚实基础。
二、教学内容1. C语言基础回顾:变量定义、数据类型、运算符和表达式。
2. 程序流程控制:顺序结构、分支结构(if语句、switch语句)、循环结构(for循环、while循环)。
3. 电梯运行原理:电梯的基本结构、运行模式、楼层显示、上下行控制。
4. 函数与模块化编程:函数定义、调用、参数传递;模块化编程思想。
5. 数组与字符串:一维数组、二维数组;字符串的基本操作。
6. 指针与动态内存分配:指针的概念、使用方法;动态内存分配函数。
7. 结构体与文件操作:结构体的定义、使用;文件读写操作。
教学内容安排和进度:1. 第一周:C语言基础回顾,程序流程控制。
2. 第二周:电梯运行原理,函数与模块化编程。
3. 第三周:数组与字符串,指针与动态内存分配。
4. 第四周:结构体与文件操作,综合实践。
电梯模拟课程设计
课程设计实验报告课程名称__数据结构__题目名称电梯模拟专业班级学号学生姓名指导教师_2011 年1 月日一、需求分析及实现提示[需求分析](1)、模拟某校五层教学楼的电梯系统。
该楼有一个自动电梯,能在每层停留。
五个楼层由下至上依次称为地下层、第一层、第二层、第三层和第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来该层候命。
(2)、乘客可随机地进出于任何层。
对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
(3)、模拟时钟从0开始,时间单位为0.1秒。
人和电梯的各种动作均要耗费一定的时间单位(简记为t):有人进出时,电梯每隔40t测试一次,若无人进出,则关门关门和开门各需要20t每个人进出电梯均需要25t如果电梯在某层静止时间超过300t,则驶回1层候命。
(4)、按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。
[实现提示](1)楼层由下至上依次编号为0,1,2,3,4。
每目有要求Up(上)和Down(下)的两个按钮,对应l0个变量CallUp[0..4]和CallDown[0..4]。
电梯内5个目标层按钮对应变量CallCar[0..4]。
有人按下某个按钮时,相应的变量就置为1,一旦要求满足后,电梯就把该变量清为0。
(2)电梯处于三种状态之一:GoingUp(上行)、GoingDown(下行)和IdIe(停候)。
如果电梯处于IdIe状态且不在1层,则关门并驶回1层。
在1层停候时,电梯是闭门候命。
一旦收到往另一层的命令,就转入GoingUp或GoingDown状态,执行相应的操作。
(3)用变量Time表示模拟时钟,初值为0,时间单位(t)为0.1秒。
其他重要的变量有:Floor——电梯的当前位置(楼层);D1——值为0,除非人们正在进入和离开电梯;D2——值为0,如果电梯已经在某层停候300t以上;D3——值为0,除非电梯门正开着又无人进出电梯;State——电梯的当前状态(GoingUp,GoingDown,IdIe)。
电梯教学模型课程设计
电梯教学模型课程设计一、引言电梯是现代建筑中必不可少的交通工具,为了提高公众对电梯的认知和了解,电梯教学模型课程设计应运而生。
本文将介绍一个基于电梯教学模型的课程设计,旨在帮助学生全面了解电梯的结构、工作原理和安全知识。
通过模型实践,学生可以深入了解电梯的运行并掌握相关的实践操作技能。
二、课程目标与内容1. 课程目标本课程设计的目标在于:- 帮助学生理解电梯的结构和组成部分;- 深入了解电梯的工作原理;- 培养学生运用电梯的安全意识和操作技能。
2. 课程内容本课程设计主要包括以下内容:- 电梯的结构与组成:介绍电梯各个组成部分的功能和作用,如电梯机房、轿厢、导轨等;- 电梯的工作原理:详细讲解电梯的驱动装置、控制系统、安全装置等;- 电梯的安全知识:强调电梯安全使用的基本知识,如进出电梯的注意事项、应对紧急情况的措施等。
三、教学方法与手段1. 教学方法- 理论教学:通过课堂讲解、投影展示等方式,向学生传授电梯的基础知识;- 实践操作:设置电梯教学模型,让学生亲自操作和体验电梯的运行过程;- 小组讨论:组织学生进行小组讨论,共同解决电梯使用中遇到的问题。
2. 教学手段- 课件展示:为了更好地展示电梯的结构和工作原理,使用多媒体课件进行辅助教学;- 实物模型:准备电梯教学模型,让学生通过实践操作加深对电梯的理解;- 视频演示:利用视频演示真实场景下电梯的安全使用和紧急情况的处理方法。
四、教学步骤1. 引入通过引发学生对电梯的兴趣,简要介绍电梯的定义和普及程度,激发学生对电梯教学模型的学习兴趣。
2. 理论讲解结合教材和课件,讲解电梯的结构与组成、工作原理和安全知识。
通过图文并茂的方式,让学生更加直观地理解课程内容。
3. 实践操作将学生分成小组,配备一定数量的电梯教学模型,让学生亲自操作和体验电梯的运行过程。
指导学生正确使用电梯,解决操作中可能遇到的问题。
4. 小组讨论组织学生进行小组讨论,结合实际案例,共同解决电梯使用中的问题。
数据结构课程设计:电梯模拟
问题描述:模拟某校九层教学楼的电梯系统。
该楼有一个自动电梯,能在每层停留。
九个楼层由下至上依次称为地下一层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
乘客可随时地进出于任何层。
对于每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
模拟时钟从0开始,时间单位为0.1秒。
人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t检测一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层精致时间超过300t,则驶回1层候命。
基本要求:按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。
需求分析:(1)用系统计时,每当有新的动作要输入时要暂停计时,等输入完成后即可继续计时。
(2)输入各个动作,最后,输入完毕后,可以保存所有动作序列,并有序输出。
设计:设计思想(1)存储结构根据问题描述,可采用单链表结构。
结点描述:定义如下:typedef struct Node{char a[1000];//信息int mytime;//时间struct Node *next;}SLNode;(2)基本思想a.用time.h 里面的clock()来计时,当有输入时,记录下开始输入的时间和结束输入的时间,之后就可以算出动作的时间了。
b.将各个动作发生的时间进行处理,算出每个事件的发生顺序和时间。
c.将各个数据插入链表,即可实现题目要求。
设计表示法(1)过程或函数调用的关系图mainyunxingprintListInsertLinListSort各个动作函数(n个)ge)ListInitiat eDestroy(2)基于数据结构的操作组主要在于yunxing()函数,它将各个时间动作处理成时间事件,并将事件插入到链表中。
(3)过程与接口规格说明无实现注释未实现。
电梯仿真课程设计方案模板
一、课程背景随着城市化进程的加快,电梯作为现代建筑中不可或缺的垂直交通工具,其运行效率和安全性越来越受到重视。
为了使学生更好地理解和掌握电梯控制原理及操作方法,提高学生的实际操作能力,特设计本电梯仿真课程。
二、课程目标1. 理解电梯的基本结构、工作原理和运行过程;2. 掌握电梯控制系统、驱动系统及安全保护系统的相关知识;3. 学会使用电梯仿真软件,进行电梯运行模拟及故障排除;4. 培养学生团队协作、创新思维和实践操作能力。
三、课程内容1. 电梯基础知识(1)电梯的发展历程及分类;(2)电梯的基本结构及工作原理;(3)电梯运行过程及控制系统。
2. 电梯控制系统(1)PLC控制系统的基本原理;(2)电梯PLC控制程序的设计与实现;(3)电梯运行过程中的故障分析与处理。
3. 电梯驱动系统(1)电梯驱动电机及减速器的结构、原理及性能;(2)电梯驱动系统在电梯运行过程中的作用;(3)电梯驱动系统的维护与检修。
4. 电梯安全保护系统(1)电梯安全保护系统的组成及作用;(2)电梯安全保护装置的工作原理及故障排除;(3)电梯安全保护系统的测试与验收。
5. 电梯仿真软件操作(1)电梯仿真软件的安装与启动;(2)电梯仿真软件的操作界面及功能;(3)电梯仿真软件在电梯运行模拟及故障排除中的应用。
四、教学方法1. 讲授法:教师系统讲解电梯相关知识,使学生掌握电梯的基本原理和运行过程;2. 案例分析法:通过分析实际电梯故障案例,提高学生解决实际问题的能力;3. 仿真实验法:利用电梯仿真软件进行电梯运行模拟及故障排除,使学生掌握电梯控制系统的操作方法;4. 实践操作法:组织学生进行实际电梯操作,提高学生的实践能力。
五、考核方式1. 期末考试:考察学生对电梯基础知识和控制系统的掌握程度;2. 仿真实验报告:要求学生在仿真实验过程中,详细记录实验步骤、结果及分析,体现学生的实际操作能力;3. 实践操作考核:考察学生实际操作电梯的能力。
电梯教学模型课程设计
电梯教学模型课程设计一、课程目标知识目标:1. 学生能理解电梯的基本工作原理,掌握电梯的主要组成部分及功能。
2. 学生能运用数学知识分析电梯的运动过程,理解电梯速度、加速度与楼层之间的关系。
3. 学生了解电梯安全知识,掌握紧急情况下的自救方法。
技能目标:1. 学生能通过实际操作,学会使用电梯的基本技能,如呼叫电梯、选择楼层、安全乘坐等。
2. 学生能运用所学的物理知识,设计一个简单的电梯模型,并展示其工作原理。
3. 学生能运用信息技术工具,收集并整理电梯相关资料,提高信息处理能力。
情感态度价值观目标:1. 学生通过学习电梯知识,培养对现代科技的兴趣,增强创新意识。
2. 学生在团队协作中,学会互相尊重、沟通与协作,培养合作精神。
3. 学生关注电梯安全问题,提高安全意识,养成文明乘坐电梯的良好习惯。
课程性质:本课程为科学实践课程,结合物理、数学、信息技术等多学科知识,通过理论学习和实践操作,提高学生的综合运用能力。
学生特点:五年级学生具有一定的数学和科学知识基础,好奇心强,喜欢动手操作,但注意力容易分散,需要激发学习兴趣。
教学要求:教师应注重理论与实践相结合,通过情境创设、互动讨论、实践操作等方式,引导学生主动探究,确保课程目标的实现。
同时,关注学生的个体差异,给予每个学生充分的关注和指导。
在教学过程中,不断评估学生的学习成果,及时调整教学策略,以确保课程目标的达成。
二、教学内容1. 电梯的组成与工作原理- 电梯的主要组成部分:轿厢、对重、曳引机、控制系统等。
- 电梯的工作原理:曳引机如何通过钢丝绳带动轿厢和对重运动。
2. 电梯的运动分析- 速度与加速度的关系:探讨电梯启动、匀速、制动过程中的速度和加速度变化。
- 楼层与电梯运动的关系:理解电梯如何通过控制系统准确到达目标楼层。
3. 电梯安全与自救- 电梯安全常识:乘坐电梯时应注意的事项,如何避免电梯事故。
- 紧急情况下的自救方法:电梯故障时的应对措施,如何使用紧急求救设备。
数据结构课程设计报告--电梯模拟
课程设计课程名称数据结构题目名称 2.8电梯模拟(难度5) 学生学院计算机学院专业班级 XXXXXXXXXX 学号XXXXXXXX学生姓名 XXX 指导教师 XX2013年7月4日电梯模拟系统一、简单介绍1、问题描述设计一个电梯模拟系统,这是一个离散的模拟程序,因为电梯系统是乘客和电梯等“活动体”构成的集合,虽然他们彼此交互作用,但他们的行为是基本独立的,在离散的模拟中,以模拟时钟决定每个活动体的动作发生的时刻和顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一个时刻。
2、基本要求(1)、模拟某校五层教学楼的电梯系统。
该楼有一个自动电梯,能在每层停留。
五个楼层由下至上依次称为地下层、第一层、第二层、第三层,第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
(2)、乘客可随机地进出于任何层。
对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
(3)、模拟时钟从0开始,时间单位为0.1秒。
人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。
(4)、按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。
二、设计目的当初之所以选择做电梯模拟这个课题,主要是因为觉得当今时代需要,所以觉得想尝试一下,因为为了方便,我们都会选择乘坐电梯,既省时间又省力,粗略看了书本里面的描述,觉得应该不难,只是按照要求输出动作序列即可,后来经过老师的辅导,才发现,原来自己选了个最难的课程设计,也问了同学,很多都是因为太难了才没有选这个题目,因为它远比想象中的复杂的多很多,它实际上是模拟现实中的电梯的运行状况,因此要考虑很多现实中遇到的实际情况,坐过电梯的人都会应该有点印象,现实中的电梯是按照每个人按下按钮的时间顺序进行服务的,但是,并不是将一个人接进来后就直接开往其目的楼层就完事,其实,当电梯将某个人送往其目的楼层的过程中,经过某层时,如果此层的人也要用电梯,虽然其按按钮的时间有可能比先前那个人晚,但是电梯依旧会开门将其接入,然后继续送前一个人去目的地,之后再送这个人去他的目的楼层,如果有多人在电梯中时,也是按照申请时间的先后决定先去哪层的,同理,若在某层,电梯中的某个人,或者某几个人要在该层下,电梯也不能忽略这些,而是要先开门使要下的人出去,之后继续开往先前的楼层,所以设计时,每当电梯上升或下降一层后,都应该检测现在电梯所处的这层有没有人有用电梯的请求,或者电梯中的人有没有要在该层下的情况,若有则电梯要在该层停一下,否则继续上升或下降….此外,当电梯停在某一层时不外乎三种情况:1.此层有个人{或有几个人}等候要用电梯 2.电梯中的某个人或者某几个人要在该楼层下 3.则是前面两种情况的结合,此时情况相当复杂,因为,题目要求电梯开门和关门都要消耗一定的时间(题目中没有提电梯上升或者下降一层需要多少时间,所以不妨就假定为30t),而且人进电梯和人出电梯时也要消耗一定的时间,这说明了当同一时刻有至少两个以上的人要进行同一种动作的时候(比方说都是要出电梯,或都是在某一层等电梯,电梯来了后都要进去),但是因为每个人进出电梯都要消耗时间,所以不能单纯的同时让这些人同进或同出电梯,而是要有先后顺序的进出,此为其一………其二,题目中还提到每个人等候电梯到来时,都有一个容忍时间(每个人不一定相同),所以,万一,在他按下按钮到电梯开到他所在的那层楼的间隔时间大于他的最大容忍时间,他会先行离开,但这一切电梯并不知道啊,所以电梯依旧会按照每个申请使用电梯的时间进行服务,正是因为这样,极有可能发生这样的情况:电梯开到某层后打开电梯门,但是既没有人出去,也没有人进来………其三,根据题目中的要求,当电梯停在某层时候,有人进出,电梯每隔40t测试一次,若无人进出,则关门,关门完后,若300t时间内没有人使用,则自动开到第1层等候下次的使用(第1层楼是电梯的‘本垒层’,电梯“空闲”时,将来到该层候命)等等等等…………以上各种情况(还有一些情况这里没列举)都是要在做这道题时需要考虑的,否则这题的‘电梯’根本模拟不起来三、设计概要本程序中所有的抽象数据类型的定义及其相应的操作函数的定义如下:电梯的结构体dianti/*此电梯结构体中分别定义了电梯所在楼层,电梯的现有人数(现实中的电梯有个最大栽客量,在此题中不妨规定为最大12人),以及电梯门的状态(0为关,1为开),至于为什么定义电梯门的状态,并不是多此一举,而是我在调试的过程中发现必须加上的,否则,在一些情况下会出现电梯动作的局部重复,从而导致整个程序的失败*/人的结构体man/*在人的结构体中,分别定义了人的名字(这个有利于区别各个人),最大容忍时间(题目中的要求),所在的楼层,要去的目的楼层,两个标志位,其中一个标志记录该人是否还在电梯里面,另一个标志记录的是该人是否已经使用过电梯*/事件结构体结点SLNode/*在事件的结构体中分别定义了,事件信息,事件发生的时刻,以及指向下一个事件结构结点的指针*/void ListInitiate(SLNode**head)/*初始化链表*/void LinListSort(SLNode *head)/*用按发生时间的顺序给事件链表中的事件排序*/void Destroy(SLNode * *head)/*撤消链表*/void OPEN(SLNode *head,dianti dt,int now)/*电梯开门函数,将电梯开门的事件信息插入到事件链表中去*/void CLOSE(SLNode *head,dianti dt,int now)/*电梯关门函数,将电梯关门的事件信息插入到事件链表中去*/void GET_IN(SLNode *head,dianti dt,int now)/*人进电梯的函数,将人进电梯时候的各种信息插入到事件链表中去*/void GET_OUT(SLNode *head,dianti dt,int now)/*人出电梯的函数,将人出电梯时候的各种信息插入到事件链表中去*/注释:以上四个函数基本是用来完成人和电梯的动作序列int gettime(SLNode *head)/*返回最新事件(即事件涟表最后一个结点)的发生时间,此为该程序中最重要的一个函数之一,并且为调用最频率最高的一个函数*/void print(SLNode *head)/*将事件链表中的事件一一显示出来,即为最后显示电梯和人动作序列的函数*/void Go(SLNode *head,int n,dianti dt,clock_t s[1000],man r[1000])/*电梯运行函数,本程序中最最重要的函数,可以说这是这道程序中的灵魂函数,根据申请使用电梯的所有人的信息,以及所有事件发生时的时刻,将所有情况的处理都放在在其中,所以此函数的代码相当占了程序代码的百分之七十多了(程序总代码长度超过1200行)*/ 注释:以上各个函数以及抽象数据结构的定义都放在头文件”elevator.h”中void main()/*该程序的主函数*/程序流程图如下:四、详细设计本程序的所有抽象数据类型的具体实现一机相应的操作函数的伪算法如下:typedef struct{int lc;//电梯所在楼层int rs;//电梯中的人数,规定最大乘坐人数为12int door;//门的状态0关1开}dianti;typedef struct{char name[50]; //这个人的名字或序号(以示区别)int rrsj;//一个人的容忍时间int lc;//所在楼层int md;//目的楼层int biaozhi; //此标志位记录人使用电梯是否完成或者是否离去,为1表明使用过(离去),否则为0int in; //标志位,为1时表明人在电梯中,否则为0}man;typedef struct Node{char a[1000];//事件信息int mytime;//事件所发生的时间struct Node *next;}SLNode;//初始化链表void ListInitiate(SLNode* *head){if((*head = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1);(*head)->next = NULL;}//将事件结点插入到事件链表中的第i个位置中去int ListInsert(SLNode *head,int i,char a[1000],int t){SLNode *p,*q;int j;p=head;j=-1;while(p->next!=NULL && j<i-1){p=p->next;j++;}if(j!=i-1){printf("\n 插入位置参数错!\n");return 0;}if((q=(SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1);q->mytime = t;strcpy(q->a,a);q->next =p->next;p->next =q;return 1;}//用按发生时间的顺序给事件排序void LinListSort(SLNode *head){SLNode *curr,*pre,*p,*q;p=head->next;head->next=NULL;while(p!=NULL){curr=head->next;pre=head;while(curr!=NULL && curr->mytime<=p->mytime){pre=curr;curr=curr->next;}q=p;p=p->next;q->next=pre->next;pre->next=q;}}//销毁链表void Destroy(SLNode * *head){SLNode *p,*p1;p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head = NULL;/*电梯动作:1.开始开门,20t,开门结束;2.开始关门,20t,关门结束;3.从n-1层开始移动,30t,到达第n层;4.开始等待,有人来或者300t,等待结束;人的动作:1.开始等待,x<=最大容忍时间,等待结束;2.开始进门,25t,进门结束;3.开始出门,25t,出门结束;*///电梯开门void OPEN(SLNode *head,dianti dt,int now){char a[1000]={"电梯开始开门......"},b[1000]={"开门完毕!"};ListInsert(head,g,a,now);g++;ListInsert(head,g,b,now+20);g++;dt.door=1; //门的状态为开}//电梯关门void CLOSE(SLNode *head,dianti dt,int now){char a[1000]={"电梯开始关门......"},b[1000]={"关门完毕!"};ListInsert(head,g,a,now);g++;ListInsert(head,g,b,now+20);g++;dt.door=0; //门的状态为关}//人进电梯void GET_IN(SLNode *head,dianti dt,int now){char a[1000]={"人开始进门......"},b[1000]={"已经进入!"};ListInsert(head,g,a,now);g++;ListInsert(head,g,b,now+25);g++;dt.rs++; //电梯人数加一个}//人出电梯void GET_OUT(SLNode *head,dianti dt,int now){char a[1000]={"人开始出门......"},b[1000]={"已经出门!"};ListInsert(head,g,a,now);g++;ListInsert(head,g,b,now+25);g++;dt.rs--; //电梯中的人数减一个}//返回最新事件(即事件涟表最后一个结点)的发生时间int gettime(SLNode *head){SLNode *pre,*curr;curr=head->next;pre=head;while(curr!=NULL){pre=curr;curr=curr->next;}return pre->mytime;}//电梯运行函数void Go(SLNode *head,int n,dianti dt,clock_t s[1000],man r[1000]){int k=0,i,time,m,flag=0,counter=0; //flag 记录是否有多个人在同一层或去同一层楼for(i=0;i<n;i++){if(dt.door==0){ //初始电梯门状态为关着if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0){//人在该楼层,要进去电梯,且电梯人数不超过规定的12人if(i==0) time=s[i]/100; //记录当时时间else time=gettime(head);if(flag==0&&dt.door==0){OPEN(head,dt,time); //开门dt.door=1;}if((time-s[i]/100)<=r[i].rrsj){time=gettime(head);GET_IN(head,dt,time); //若超过此人的最大容忍时间,该人将放弃乘坐电梯r[i].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d 层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}time=gettime(head); //获得事件链表最后一个结点的时间(即当前时刻)if(dt.lc==r[i+1].lc) {flag=1;counter++;continue;} //该层的所有人都进入电梯else{if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40); //电梯经过40t时间后,若无人进出,则关门dt.door=0; //置电梯门状态为关g++;CLOSE(head,dt,time+40);}}/* 本层人已经全部进入电梯,接下来电梯启动按每个人事件发生的时间顺序将其送往目的楼层*/flag=0;if(dt.lc<=r[i-counter].md){time=gettime(head);while(dt.lc<=r[i-counter].md){ //开往该层第一个人的目的楼层flag=0;if(dt.lc<r[i-counter].md){dt.lc++;time+=30;}for(m=0;m<n;m++){if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){//若该楼层有人等候,使其进入if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;//电梯开门,并设置其门状态为开}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i-counter].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40); //电梯经过40t时间后,若无人进出,则关门dt.door=0;//置电梯门状态为关g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}else if(dt.lc>=r[i-counter].md){time=gettime(head);while(dt.lc>=r[i-counter].md){flag=0;if(dt.lc>r[i-counter].md){dt.lc--; //30t,电梯下降一层time+=30;}for(m=0;m<n;m++){if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){ //若该楼层有人等候,使其进入if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i-counter].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}i=i-counter;}else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1){ //人在电梯中,在该楼层要出去if(i==0)time=s[0]/100;else time=gettime(head);for(m=0;m<n;m++){if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){ //若该楼层有人等候,使其进入if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}//1...if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0) ,,,,人在该楼层,要进去电梯//2...else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,人在电梯中,在该楼层要出去//3...else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0),,,,,,,,,,,人不在该楼层,要进去电梯//4...else if(dt.lc!=r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,,人在电梯里,该楼层不是其目的楼层else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0){ //3...人不在该楼层,要进去电梯flag=0;if(i==0)time=s[0]/100; //以该事件发生的时间为起始时间else time=gettime(head); //取当前时间if(dt.lc<=r[i].lc){while(dt.lc<=r[i].lc){flag=0;if(dt.lc<r[i].lc){dt.lc++;time+=30;//30t,电梯上升一层}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}elseif(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯elseif(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].lc) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}else if(dt.lc>=r[i].lc){while(dt.lc>=r[i].lc){flag=0;if(dt.lc>r[i].lc){dt.lc--;time+=30;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}elseif(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯elseif(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].lc) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}/*接下来将电梯里的人按时间顺序送到各自的目的楼层*/time=gettime(head);if(dt.lc<=r[i].md&&r[i].in==1){while(dt.lc<=r[i].md){flag=0;if(dt.lc<r[i].md){dt.lc++;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}elseif(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯elseif(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}else if(dt.lc>=r[i].md&&r[i].in==1){while(dt.lc>=r[i].md){flag=0;if(dt.lc>r[i].md){dt.lc--;time+=30;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}elseif(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯elseif(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}}//1...if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0) ,,,,人在该楼层,要进去电梯//2...else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,人在电梯中,在该楼层要出去//3...else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0),,,,,,,,,人不在该楼层,要进去电梯else if(dt.lc!=r[i].md&&r[i].biaozhi==0&&r[i].in==1){ //4...人在电梯里,该楼层不是其目的楼层flag=0;if(i==0)time=s[0]/100; //以该事件发生的时间为起始时间else time=gettime(head); //取当前时间if(dt.lc<=r[i].md){while(dt.lc<=r[i].md){flag=0;if(dt.lc<r[i].md){dt.lc++;time+=30;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}else if(dt.lc>=r[i].md){while(dt.lc>=r[i].md){flag=0;if(dt.lc>r[i].md){dt.lc--;time+=30;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}}}}time=gettime(head);if(dt.lc!=1){ListInsert(head,g,"在该层等候300t时间,无人进出,开始返回第一层",time+300);time=gettime(head);if(dt.lc>1){ListInsert(head,g,"电梯已经回到第一层,等候使用......",time+(dt.lc-1)*30);}else {ListInsert(head,g,"电梯已经回到第一层,等候使用......",time+30);}dt.lc=1;}else{time=gettime(head);ListInsert(head,g,"此时电梯已经在第一层,等候使用......",time);}}void print(SLNode *head){SLNode *p;p=head;if(p->next==NULL)printf("\n 错误,链表为空!\n");//此语句为检验之用while(p->next!=NULL){printf("\n时间:%d(单位:t) 动作:%s",p->next->mytime,p->next->a);p->next=p->next->next;}}//欢迎界面void Welcome(){char c;printf("\n\n\n******************************************************************************\ n");printf("______________________________________________________________________________\ n\n\n\n\n");printf(" ______________ 欢迎使用这个关于电梯模拟的软件! _______________\n");printf(" ______________ 制作者:XXX _______________\n");printf(" 班级:XXX 学号:XXXX \n\n");printf("\n\n\n________________________________________________________________~((M o M))~\n\n");printf("******************************************************************************\ n\n\n");printf(" Please input any key to continue~~");c=getche( );fflush(stdin);//不清除缓冲去会出错system("cls");}//主函数int main(){int t,a,k=0,i,flag=0;SLNode *head;//数组,用来存输入数据时候所用时间clock_t start,shijian[1000],In_put[1000][2];//为了保证输入数据时计时暂停,定义一个In_put[]dianti dt;Welcome();printf("\n\n时间单位t:0.1(秒)");printf("\n楼层范围:0--5(层)");printf("\n最大载客量:12(人)\n");start=clock();dt.lc=1; //开始电梯停在第一层dt.rs=0; //电梯最大人数为12,开始时候电梯内人数为空dt.door=0;t=(int)start/100;printf("\n当前时刻:%d(t) 计时开始.....\n",t);ListInitiate(&head);while(1){printf("\n0.下班楼空1.有人要用电梯\n");printf("请选择指令:");scanf("%d",&a);if(a==0){ printf("\n");break;}if(a==1){In_put[k][0]=clock();printf("\n暂停计时,请输入此人的序号(可以为任意字符): ");scanf("%s",ren[k].name);printf("所在楼层: ");scanf("%d",&ren[k].lc);printf("目的楼层: ");scanf("%d",&ren[k].md);printf("最大容忍时间:");scanf("%d",&ren[k].rrsj);In_put[k][1]=clock();k++;}}printf("------------------------------------------------------------------------------");printf("\n以下为要使用电梯的各个人的信息:(根据其申请使用电梯的时间先后顺序排列)\n");for(i=0;i<k;i++){int j;flag=0;for(j=0;j<i;j++){if(ren[i].lc==ren[j].lc){flag=1;break;} //判断这层是否有多个人一起等候电梯}shijian[i]=In_put[i][0]-start;if(flag==1) //若有多个人一起等候电梯,则申请电梯的时间取第一个人的时间printf("时间: %d(单位:t) 人序号:%s 所在楼层:%d 要去楼层:%d",shijian[j]/100,ren[i].name,ren[i].lc,ren[i].md);else if(flag==0)printf("时间: %d(单位:t) 人序号:%s 所在楼层:%d 要去楼层:%d 最大容忍时间:%d",shijian[j]/100,ren[i].name,ren[i].lc,ren[i].md,ren[i].rrsj);start=In_put[i][1]-In_put[i][0]; //计算输入输入数据所用时间}printf("\n------------------------------------------------------------------------------\n");shijian[i]=0;for(i=0;i<k;i++){ren[i].biaozhi=0;ren[i].in=0;}Go(head,k,dt,shijian,ren);LinListSort(head);printf("\n---------------------------------------------------------------------------\n");printf("\n以下为人和电梯的动作:");print(head);printf("\n\n---------------------------------------------------------------------------\n\n");Destroy(&head);return 0;}六、测试分析1、运行程序,进入如下界面:按任意键开始,进入如下选择界面:选择指令“1”,当只有一个人要进电梯的时候,输入数据:选择指令“0”,进入电梯模拟,操作结果如下:2、人数多于1人以及在不同楼层上下电梯的时候,输入数据:选择指令“0”,执行结果如下:七、心得体会此次选的电梯模拟对于我来说,难度实在是太大了,因为我在编程这块都不是很擅长,本来想选个简单的,结果没看清楚本题的难度系数,选了个最难的,在辅导的时候老师说电梯模拟这个最好要用栈和队列,但是由于能力有限,只能用链表来实现一些简单的基本要求,考虑的也不够周全,学的知识不够灵活应用,有些东西只是想得到,但是没有能力实现,也写不出程序。
电梯程序模拟课程设计
电梯程序模拟课程设计一、课程目标知识目标:1. 理解电梯的基本工作原理,掌握电梯程序设计的关键概念;2. 学会使用流程图和伪代码表达程序设计思路;3. 掌握运用顺序、选择和循环结构进行电梯程序设计。
技能目标:1. 能够运用所学知识,设计出符合实际需求的电梯程序;2. 通过编程实践,提高逻辑思维和问题解决能力;3. 学会与同伴合作,进行程序调试和优化。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发创新精神;2. 培养学生面对问题时的耐心和毅力,增强克服困难的信心;3. 增强学生的团队协作意识,培养良好的沟通与表达能力。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在理解电梯工作原理的基础上,通过学习程序设计方法,培养其逻辑思维和问题解决能力。
课程将引导学生从实际需求出发,学会分解问题、设计算法,并通过编程实践,实现电梯程序的模拟。
通过本课程的学习,学生将能够将所学知识应用于实际情境,提高其编程技能,并在团队合作中培养良好的沟通与协作能力。
二、教学内容1. 电梯工作原理介绍:分析电梯的基本结构、运行模式和控制系统;- 教材章节:第二章“自动控制系统原理”,第三节“电梯控制系统”。
2. 程序设计基本概念:流程图、伪代码及其在电梯程序设计中的应用;- 教材章节:第四章“程序设计基础”,第一节“流程图与伪代码”。
3. 程序设计结构:顺序结构、选择结构、循环结构在电梯程序设计中的应用;- 教材章节:第四章“程序设计基础”,第二节“程序设计结构”。
4. 电梯程序设计实践:- 任务一:设计一个简单的电梯召唤程序;- 任务二:设计一个具有楼层选择功能的电梯程序;- 任务三:优化电梯程序,实现连续召唤和节能控制。
5. 团队合作与程序调试:分组进行程序设计,相互协作完成程序调试与优化;- 教材章节:第五章“程序调试与优化”,第一节“团队合作与问题解决”。
教学内容安排与进度:第一课时:电梯工作原理介绍,程序设计基本概念;第二课时:程序设计结构,任务一设计;第三课时:任务二设计,团队合作与程序调试;第四课时:任务三优化,总结与展示。
四层可换速电梯的模拟控制课程设计
四层可换速电梯的模拟控制课程设计一、课程设计背景随着城市化进程的加速,高层建筑越来越多,人们对电梯的需求也越来越大。
为了提高电梯的效率和安全性能,可换速电梯应运而生。
可换速电梯是指在电梯运行过程中,根据乘客需求和楼层情况自动调整电梯的运行速度。
这种电梯不仅可以提高乘坐效率,还可以节省能源并减少噪音污染。
二、课程设计目标本课程设计旨在让学生掌握可换速电梯控制原理和模拟实现方法,培养学生分析和解决问题的能力,并提高学生对电子控制技术的认识和应用水平。
三、课程设计内容1. 可换速电梯控制原理介绍- 可换速电梯的基本原理- 可换速电梯的优点和应用场景- 可换速电梯控制系统组成部分2. 可换速电梯模拟控制系统设计- 选取适当的开发板和传感器模块- 设计可换速电梯控制系统的硬件结构- 编写可换速电梯控制系统的软件程序3. 可换速电梯模拟控制系统调试与测试- 对硬件和软件进行调试和测试- 对可换速电梯模拟控制系统进行全面测试- 改进和优化可换速电梯模拟控制系统四、课程设计实施方案1. 课程设计时间安排:2周(10个工作日)2. 课程设计任务分配:- 第一周:学生学习可换速电梯的基本原理,了解可换速电梯的优点和应用场景,以及掌握可换速电梯控制系统组成部分。
- 第二周:学生选取适当的开发板和传感器模块,设计可换速电梯控制系统的硬件结构,并编写可换速电梯控制系统的软件程序。
对硬件和软件进行调试和测试,并对可换速电梯模拟控制系统进行全面测试。
改进和优化可换速电梯模拟控制系统。
3. 课程设计评估方式:- 学生提交课程设计报告,包括课程设计目标、内容、实施方案、实验结果等。
- 学生进行现场演示,展示可换速电梯模拟控制系统的功能和性能。
- 教师对学生的课程设计报告和现场演示进行评分,综合考虑学生的实际表现和成果。
五、课程设计总结通过本课程设计,学生可以深入了解可换速电梯控制原理和模拟实现方法,掌握电子控制技术的应用能力。
同时,本课程设计还可以培养学生分析和解决问题的能力,并提高其创新思维和团队协作能力。
mcgs课程设计电梯
mcgs课程设计电梯一、教学目标本章节的教学目标包括以下三个方面:1.知识目标:学生能理解并掌握电梯的基本原理和结构,了解电梯的分类和运行方式,知道电梯的主要组成部分及其功能。
2.技能目标:学生能够运用所学知识对电梯进行简单的故障分析和维修,具备安全乘用电梯的能力。
3.情感态度价值观目标:学生能够认识到电梯在现代社会中的重要作用,培养对电梯工程技术的兴趣和热情,增强对生命安全的重视。
在制定教学目标时,充分考虑了课程性质、学生特点和教学要求,将目标分解为具体的学习成果,以便后续的教学设计和评估。
二、教学内容本章节的教学内容主要包括以下几个方面:1.电梯的基本原理和结构:介绍电梯的工作原理、主要组成部分及其功能。
2.电梯的分类和运行方式:讲解不同类型的电梯及其运行特点。
3.电梯的主要组成部分及其功能:详细介绍电梯的各个组成部分,如吊厢、对重、导轨、控制系统等。
4.电梯的故障分析和维修:教授学生如何分析电梯故障,并提供简单的维修方法。
5.电梯的安全乘用:教育学生如何安全乘用电梯,避免发生意外。
教学内容的选择和遵循科学性和系统性的原则,确保学生能够系统地掌握电梯的相关知识。
三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用以下几种教学方法:1.讲授法:教师通过讲解、演示等方式,向学生传授电梯的相关知识。
2.讨论法:学生进行小组讨论,分享对电梯的理解和看法。
3.案例分析法:分析实际中的电梯故障案例,培养学生解决实际问题的能力。
4.实验法:安排学生进行电梯模型实验,增强学生的动手能力。
通过多样化的教学方法,使学生在轻松愉快的氛围中掌握电梯的相关知识。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用符合课程要求的电梯相关教材,为学生提供系统的学习资料。
2.参考书:提供电梯工程技术的相关书籍,供学生拓展阅读。
3.多媒体资料:制作课件、视频等多媒体资料,帮助学生形象地理解电梯的知识。
仿电梯控制课程设计
仿电梯控制课程设计一、课程目标知识目标:1. 让学生掌握仿电梯控制系统的基本原理,理解并运用相关的电控知识。
2. 使学生了解电梯运行中的安全保护机制,掌握基础的安全知识。
3. 让学生掌握电梯程序设计的基本方法,能结合实际需求进行简单的程序编写。
技能目标:1. 培养学生运用所学知识分析问题和解决问题的能力,能对仿电梯控制系统进行设计与调试。
2. 培养学生的团队合作能力,通过小组合作完成课程项目。
3. 提高学生的动手实践能力,能熟练操作相关设备和工具。
情感态度价值观目标:1. 培养学生对仿电梯控制课程的兴趣,激发学习热情。
2. 培养学生严谨的科学态度,注重实践与理论相结合。
3. 增强学生的安全意识,认识到电梯运行安全的重要性。
4. 培养学生的创新精神,鼓励他们勇于尝试和改进。
本课程针对初中年级学生,结合学生年龄特点和认知水平,注重理论与实践相结合,以提高学生的动手实践能力和创新能力。
课程目标明确,分解为具体的学习成果,便于后续教学设计和评估。
通过本课程的学习,学生将能够掌握仿电梯控制的基本知识,具备一定的编程和调试能力,同时培养良好的团队合作精神和安全意识。
二、教学内容1. 电梯控制系统原理:介绍电梯的基本结构、运行原理,重点讲解电梯控制系统的作用和组成,关联教材第四章第二节。
2. 电梯安全保护机制:讲解电梯运行中的安全措施,包括限速器、安全钳、门锁等,关联教材第四章第三节。
3. 电梯程序设计:介绍电梯程序设计的基本方法,如顺序结构、选择结构和循环结构,关联教材第五章第一节。
4. 仿电梯控制系统的设计与调试:教授学生如何根据实际需求设计电梯程序,并进行调试与优化,关联教材第五章第二节。
5. 电梯控制系统实践操作:安排学生进行实际操作,包括电路连接、程序编写、调试运行等,结合教材附录实践项目。
教学大纲安排如下:第一周:电梯控制系统原理学习。
第二周:电梯安全保护机制学习。
第三周:电梯程序设计方法学习。
第四周:仿电梯控制系统设计与调试。
MFC电梯模拟系统课程设计
MFC电梯模拟系统课程设计一、课程目标知识目标:1. 让学生掌握MFC编程基础知识,了解电梯模拟系统的基本原理;2.使学生掌握电梯模拟系统中各个模块的功能及其相互关系;3.帮助学生理解并运用面向对象编程思想进行电梯模拟系统的设计。
技能目标:1. 培养学生运用MFC进行图形用户界面设计的能力;2. 提高学生运用编程语言解决实际问题的能力,如实现电梯的运行、楼层显示等功能;3. 培养学生团队协作、沟通表达的能力,通过分组合作完成课程设计。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣和热情,提高其对程序设计的自信心;2. 培养学生面对问题勇于挑战、积极进取的精神;3. 增强学生的责任感,使其认识到编程在实际应用中对社会的重要性。
本课程针对高年级计算机专业学生,结合课程性质、学生特点和教学要求,将课程目标分解为具体的学习成果,以便后续的教学设计和评估。
通过本课程的学习,学生将能够独立完成一个具有实际意义的MFC电梯模拟系统,提高编程实践能力和团队合作能力,为将来从事计算机软件开发工作打下坚实基础。
二、教学内容1. MFC基础知识:重温MFC框架结构、消息映射机制、常用控件的使用方法,涉及教材第1-3章内容;2. 面向对象编程:回顾类与对象的概念、继承与多态等特性,以电梯系统中的各个模块为例,讲解如何运用面向对象思想进行设计,涉及教材第4-5章内容;3. 图形用户界面设计:讲解MFC中绘图相关类和函数,引导学生设计出美观、实用的电梯模拟系统界面,涉及教材第6章内容;4. 事件处理与消息循环:分析电梯系统中事件处理机制,使学生掌握如何处理用户操作和系统事件,涉及教材第7章内容;5. 电梯模拟系统功能实现:按照教材第8-9章内容,指导学生完成以下功能模块:a. 电梯运行控制模块;b. 楼层显示与按键模块;c. 电梯调度算法模块;d. 系统异常处理模块;6. 课程项目实践:根据教学进度,将学生分为小组,开展课程设计,按照项目要求完成电梯模拟系统的设计与实现。
模拟电梯的设计与实现
模拟电梯的设计与实现一、实验目的1.了解电梯调度算法。
2.利用微机实验系统来模拟电梯。
3.进一步掌握微机接口的设计方法。
二、实验内容与要求1.设计基本要求用键盘、按钮、发光二极管和 LED显示单元来模拟电梯工作过程。
楼层设为 5 层,用键盘键入希望停的楼层, 5 个发光二极管显示希望停的楼层,LED指示电梯当前所在楼层,按钮用来启、停电梯。
电梯正常运行时以每 2 秒1层的速度上升或下降。
2.提高要求设计几个按钮,模拟更多的电梯运行功能,如:•直达按钮。
若按此按钮,电梯按直达方式运行,即对运行期间新键入的停靠楼层(即使是同方向未到楼层)亦不停,直达终点楼层;•急停按钮。
电梯运行中,若按此按钮,则电梯立即停在下一到达的楼层;•断电待修按钮。
按下该钮电梯不能工作,再按一下才能重新工作;•其它功能按钮(由设计者自由发挥)。
三、实验报告要求1.设计目的和内容2.总体设计3.硬件设计:原理图(接线图)及简要说明4.软件设计框图及程序清单5.设计结果和体会(包括遇到的问题及解决的方法)四、电梯的工作方式电梯工作按以下方式运行:1.假设当前电梯停在某层(LED显示相应楼层,5个发光二极管全灭)。
键入数字键,如键入的数字与当前电梯停靠层相同,则什么也不做,若不同则相应楼层的发光二极管亮;电梯自动判别上升或下降(在运行过程中用八段码来显示楼层变化)一直到达希望停的楼层(八段码显示该楼层,相应LED 灭)。
2.假设当前电梯正在上升或下降运行(此时八段码显示楼层变化,LED 指示希望抵达的楼层),若键入新的希望停靠的楼层数字(相应的LED 亮),则对同方向(上升或下降)未到的楼层能停靠,对其它情况则先停靠原先希望停的楼层,然后继续运行)。
如下几例:1)设电梯当前在2层,向上运行,LED指示希望在4层停,此时若键入3,则电梯将在3楼停,然后继续运行至4层停;2)同上情况,若键入的不是3而是5,则电梯将先停在4层,然后运行至5层停;3)同上情况,若键入的不是3(或5),而是1,则电梯先停在4层,然后运行至1层停。
模拟电梯课程设计方案模板
一、课程名称模拟电梯控制系统课程设计二、课程背景随着现代建筑的高度化,电梯作为重要的垂直交通工具,其控制系统的研究与开发显得尤为重要。
本课程设计旨在通过模拟电梯控制系统,让学生深入了解电梯控制系统的原理、设计方法以及实现过程,培养学生的动手能力、创新能力和工程实践能力。
三、课程目标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周:课程总结与评价。
四层电梯模拟控制_课程设计报告 精品
信息科学与工程学院课程设计报告( 2010~2011 学年第二学期)题目四层电梯模拟控制院(系、部)控制系课程名称电气控制技术综合课程设计专业自动化年级2008级学号 0815321039姓名叶丹丹指导老师郑义民、晏来成2011 年 7月2日目录1:引言 (3)2:系统总体方案设计 (3)2.1:系统硬件配置 (3)2.2: 系统I/O的分布 (6)2.3: PLC接线图设计 (7)3:控制系统设计 (7)3.1:控制程序流程图 (7)3.2:控制子程序语句 (8)3.3:控制程序设计思路 (10)4:系统调试及结果分析 (11)4.1:系统调试及解决的问题 (11)4.2:结果分析 (11)5:结束语 (12)6:附录 (12)6.1:总体程序梯形图 (13)6.2:仿真图 (25)1:引言电梯在国民经济和生活中有着广泛的应用。
电梯已成为重要的运输设备之一。
国内传统的电梯是由继电器、接触器构成的。
它不仅存在着可靠性差、成本高、故障高等缺点。
而且在层数增加时,配线变化绘制及安装带来诸多不便电梯的仿真监控系统是以四层电梯为控制对象,用PLC实现对电梯的控制。
该课题的设计任务是用可编程控制器(PLC)控制电梯,实现所有的控制要求。
该课题的设计思路是采用随即逻辑控制原理,根据电梯自身的控制规律,响应随机的外部呼叫信号。
该设计分析、讨论了用FX2n型PLC控制电梯模型的程序设计的整个过程,并主要阐述了一下几个方面的问题。
关键词:PLC控制系统电梯三菱FX2n系列2:系统总体方案设计2.1:系统硬件配置该设计系统主要由三菱FX2n系列的PLC以及实验控制柜上的电梯模型组成。
(1):三菱FX2n系列的PLC面板如下图:(2):FX2n系列的PLC采用一体化箱体结构,其基本单元将CPU、存储器、输入/输出接口及电源等都集成在一个模块内,结构紧凑,体积小巧,成本低,安装方便。
其用户存储容量可扩展到16KB,其I/O点数最大可扩展到256点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
E5,然后预置20个t后转到E4。
E4.[让人出入]如果Elevator不空且有人的OutFloor=Floor,则按进入
的倒序每隔25个t让这类人立即转到他们的动作M6。Elevator中不再有
要离开的人时,如果Queue[Floor]不中,则以25个t的速度让他们依次
转到M5。Queue[Floor]空时,置D1为0,D3!=0.而且等候某个其他活动
么,如果Controler正为E6所调用,则置j为l,否则返回。
C4.[置State]如果Floor>j,则置State为GoingDown如果Floor<j,则置
State为GoingUp。
C5.[电梯静止?]如果电梯处于E1而且j!=1,则预置20个t后启动E6。返
回。
(7)
由上可见,关键是按时序管理系统中所有乘客和电梯的动作
(3)
模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作
均要耗费一定的时间单位(简记为t),比如:
有人进出时,电梯每隔40t测试一次,若无人进出,则关门。
关门和开门各需要20t
每个人进出电梯均需要25t
如果电梯在某层静止时间超过300t,则驶回1层候命。
(4) 按时序显示系统状态的变化过程:发生的全部人和电梯的动作
设计合适的数据结构。
[选作内容]
(1)增加电梯数量,模拟多梯系统。 (2)某高校的一座30层住宅楼有三部自动电梯,每梯最多载客15
人。大楼每层8户,每户平均3.5人,每天早晨平均每户有3人必须在7时 之前离开大楼去上班或上学。模拟该电梯系统,并分析分别在一梯、二 梯和三梯运行情况下,下楼高峰期各层的住户应提前多少时间候梯下 楼?研究多梯运行最佳策略。
[基本要求]
(1)
模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能
在每层停留。五个楼层由下至上依次称为地下层、第一层、第二层、第
三层和第四层,其个第一层是大楼的进出层,即是电梯的“本垒层”,
电梯“空闲”时,将来到该层候命。
(2)
乘客可随机地进出于任何层。对每个入来说,他有一个能容
忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
操作结果:电梯动作决策。 ElevatorRun(Elevator &E,WQueue w[Maxfloor+1][2]){
操作结果:电梯状态转换。 CountOver(Elevator &E)
操作结果:判断电梯计时是否完成。 EleFloor(Elevator const &E)
操作结果:返回电梯所在的层。 EleStatus(Elevator const &E)
1、 乘客类型 反映乘客的所有属性。 ADT Client 数据对象:D={ai∈乘客信息,I=1,2,…,n,n≥0} 数据关系:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n} 基本操作: PrintClientInfo(Client const &e,ClientStatus s)
用物Controler函数。如果State
=IdIe,则即使已经执行了
Controler,也转到E1。否则,如果D2!=0,则取消电梯活动E9。最后,
如果State=GoingUp,则须置15个t后(电梯加速)转到E7如果
State=GoingDown,则预置15个t后(电梯加速)转到E8。
E7.[上升一层]置FIoor加1并等候51个t:。如果现在CallCar[Floor]=l
[问题描述] 设计一个电梯模拟系统。这是一个离散的模拟程序,因为电梯系统
是乘客和电梯等 “活动体”构成的集合,虽然他们彼此交互作用,但他们的行为是基本 独立的。在离散的模拟中,以模拟时钟决定每个活动体的动作发生的时 刻和顺序.系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟 时钟推进到某个动作预定要发生的下一个时刻。
序列。
[测试数据] 模拟时钟Time的初值为0,终值可在500—l0000范围内逐步增加。
[实现提示]
(1) 楼层由下至上依次编号为0,1,2,3,4。每目有要求Up(上)
和Down(下)的两个按钮,对应l0个变量CallUp[0..4]和
CallDown[0..4]。电梯内5个目标层按钮对应变量CallCar[0..4]。
1、 需求分析 (1)、模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能在 每层停留。五个楼层由下至上依次称为地下层、第一层、第二层、第三 层和第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电 梯“空闲”时,将来该层候命。五个楼层从下到上的编号为:0、1、 2、3、4。除了地下层外,每一层都有一个要求向下的按钮除了第四层 外,每一层都有一个要求向上的按钮。对应的变量为:CallUp[0..3]和 CallDown[1..4]。电梯内的五个目标层按钮对应的变量为: CallCar[0..4]。 (2)、电梯一共有七个状态,即正在开门(Opening)、已开门 (Opened)、正在关门(Closing)、已关门(Closed)、等待 (Waiting)、移动(Moving)、减速(Decelerate)。 (3)、 乘客可随机地进出于任何层。对每个人来说,他有一个能容忍 的最长等待时间,一旦等候电梯时间过长,他将放弃。对于在楼层内等 待电梯的乘客,将插入在等候队列里,每一层有两个等候队列,一队要 求向上,一队要求向下,用链队列来实现。对于在电梯内的乘客,用五 个乘客栈来实现,该乘客要去哪一层,就把他放在相应编号的栈中,对 应变量为EleStack[0…4]。 (4)、模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均 要耗费一定的时间单位(简记为t):
Байду номын сангаас
动E3或E6。
E2.[要改变状态?]如果电梯处于GoingUp (或GoingDown)状态,但该方
向的楼层却无人等待,则要看反方向楼层是否有人等候,而决定置
State为GoingDown (或GoingUp)还是IdIe。
E3.[开门]置D1和D2为非0值,预置300个t后启动活动E9和76个t后启动
操作结果:返回乘客进入的楼层。 CInTime(Client const &e)
操作结果:返回乘客进入时间。 COutfloor(Client const &e)
操作结果:返回乘客进入时间。 } 2、 乘客栈类型 电梯内的乘客用乘客栈表示,去不同楼层的乘客放在不同 的栈中。 ADT Estack 数据对象:D={ai∈乘客信息,I=1,2,…,n,n≥0} 数据关系:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n} 基本操作: 略。 } 3、 等候队列类型 在电梯外等待的乘客用等待队列表示。每层各有两个等待 队列,分别为上楼队列和下楼队列。 与一般队列不同的是在基本操作中加入了放弃操作 CGiveUp(WQueue &Q,int floor)。 4、 电梯类型 表示电梯的各个属性和所有动作。
M3.[进入排队]在等候队列Queue[InFloor]末尾插入该人,并预置在
GiveupTime个t后他若仍在队列中将实施动作M4。
M4.[放弃]如果Floor!=InFloor或D1=0,则从Queue[InFloor]和系统删
除该人。如果Floor=InFloor且D1!=0,他就继续等候(他知道马上就可
时分别改为61和23个t(电梯下降比上升慢)。
E9.[置不活动指示器]置D2为0并调用Controler函数(E9是由E3顶置的,
但几乎总是被E6取消了)。
(6)
当电梯须对下一个方向作出判定时,便在若干临界时刻调用
Controler函数,该函数有以下要点:
C1.[需要判断?]若State!= IdIe,则返回。
C2.[应该开门?]如果电梯处于E1且CallUp[1],CallDown[1]或
CallCar[1]非0,则预置20个t后启动E3,并返回。
C3.[有按钮按下?]找最小的j!=
Floor,使得CallUp[j],
CallDown[j]或CallCar[j]非0,并转到C4。但如果不存在这样的j,那
的到来。
E5.[关门]每隔40个t检查D1,直到是D1=0(若D1!=0,则仍有人出入)。
置D3为0并预置电梯再20个t后启动活动E6(再关门期间,若有人到来,
则如M2所述,门再次打开)。
E6.[准备移动]置CallCar[FIoor]为0,而且若State != GoingDown则置
CalUp[FIoor]为0若State!= GoingUp,则置GoingDown[FIoor]为0。调
有人进出时,电梯每隔40t测试一次,若无人进出,则关门 关门和开门各需要20t 每个人进出电梯均需要25t 电梯加速需要15t 上升时,每一层需要51t,减速需要14t 下降时,每一层需要61t,减速需要23t 如果电梯在某层静止时间超过300t,则驶回1层候命。 (5)、按时序显示系统状态的变化过程:发生的全部人和电梯的动作 序列。 2、 概要设计
(3) 用变量Time表示模拟时钟,初值为0,时间单位(t)为0.1秒。
其他重要的变量有:
Floor——电梯的当前位置(楼层)
D1——值为0,除非人们正在进入和离开电梯
D2——值为0,如果电梯已经在某层停候300t以上
D3——值为0,除非电梯门正开着又无人进出电梯
State——电梯的当前状态(GoingUp,GoingDown,IdIe)。
操作结果:返回电梯状态。 RequireAbove(Elevator const &E)
操作结果:判断是否有高层请求。 RequireBelow(Elevator const &E)
进入电梯)。
M5.[进入电梯]从Queue[InFloor]删除该人,并把他插入到Elevator(电