您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 模拟电梯系统程序设计
  所属分类: 嵌入式
  开发工具:
  文件大小: 1mb
  下载次数: 0
  上传时间: 2010-07-12
  提 供 者: hc8***
 详细说明: 八、 实验内容和要求: 要求根据下面的功能说明描述实现模拟电梯控制软件 (一)电梯配置 1. 共有1个电梯 2. 共有maxfloor层楼层。maxfloor=9。 3. 中间层每层有上下两个按钮,最下层只有上行按钮,最上层只有上行按钮。每层都有相应的指示灯,灯亮表示该按钮已经被按下,如果该层的上行或者下行请求已经被响应,则指示灯灭 4. 电梯内共有maxfloor个目标按钮,表示有乘客在该层下电梯。有指示灯指示按钮是否被按下。乘客按按钮导致按钮指示灯亮,如果电梯已经在该层停靠则该按钮指示灯灭 5. 另有一启动按钮(GO)。当电梯停在某一楼层后,接受到GO信息就继续运行。如果得不到GO信息,等待一段时间也自动继续运行。 6. 电梯内设有方向指示灯表示当前电梯运行方向。 说明:由于本次实验不使用可视化框架,所以无法作到从图形界面上获取按钮请求。因此电梯按钮的设计,不在图形界面上体现,仅用来设计键盘的模拟输入。 (二)电梯的运行控制 1.电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。 2.乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标对应的楼层可能不是电梯当前运行方向可达的楼层。 3. 如果电梯正在向I层驶来,并且位于I层与相邻层(向上运 行时是I-1层或者向下运行时是I+1层)之间,则因为安全考虑不响应此时出现的I层目标或者请求。如果电梯正好经过了I楼层,运行在I楼层和下一楼层之间,则为了直接响应此时出现的I层目标或者请求,必须至少到达运行方向上的下一楼层然后才能掉头到达I楼层(假设掉头无须其它额外时间),如果I楼层不是刚刚经过的楼层则可以在任意位置掉头,此时掉头后经过的第一个楼层不可停。 4. 电梯系统依照某种预先定义好的策略对随机出现的呼叫和目标进行分析和响应。 5. 乘客数量等外界因素(可能导致停靠时间的长短变化)不予考虑。假设电梯正常运行一层的时间是5S,停靠目标楼层、上下乘客和电梯继续运行的时间是5S。 6. 当电梯停靠某层时,该层的乘客如果错误的按目标或呼叫按钮都不予响应。 7. 电梯停要某一层后,苦无目标和呼叫,则电梯处于无方向状态,方向指示灯全灭,否则电梯内某个方向的指示灯亮,表示电梯将向该方向运行。等接到“GO”信号后电梯立即继续运行。若无GO信号,则电梯在等了上下乘客和电梯继续运行时间后也将继续运行。 8. 当一个目标(呼叫)已经被服务后,应将对应的指示灯熄灭。 (三)电梯运行的控制策略 以下是几个候选策略: 1.先来先服务策略: 将所有呼叫和目标按到达时间排队,然后一一完成。这是相当简单的策略,只需要设计一个将呼叫和目标排队的数据结构。因为该策略效率也很低,所以没有实际的电梯采用这种策略。 2. 顺便服务策略: 顺便服务是一种最常见的简单策略。这种策略在运行控制中所规定的安全前提下,一次将一个方向上的所有呼叫和目标全部完成。然后掉转运行方向完成另外一个方向上的所有呼叫和目标。 可以采用设定目标楼层的办法来实现这个策略,即电梯向一个目标楼层运行,但这个楼层可以修改。具体策略如下: 1) 修改目标楼层的策略: a.如果电梯运行方向向上,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向上呼叫或者目标,将目标楼层修改为这个新的楼层。 b.如果电梯运行方向向下,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向下呼叫或者目标,将目标楼层修改为这个新的楼层。 2)确定新的目标楼层: 如果电梯向上运行,当它到达某个目标楼层后,则依照以下顺序确定下一个目标楼层: a.如果比当前层高的楼层有向上呼叫或者目标,那么以最低的高于当前楼层的有向上呼叫或者目标的楼层为目标。 b.如果无法确定目标楼层,那么以最高的向下呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最低的向上呼叫所在楼层为电梯当前的目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 如果电梯向下运行,依照以下顺序确定下一目标楼层: a.如果比当前层低的楼层有向下呼叫或者目标,那么以最高的低于当前楼层的有向下呼叫或者目标的楼层为目标。 b.如果无法确定目标楼层,那么以最低的向上呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最高的向下呼叫楼层为目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 3)最快响应策略: 响应所有的现在存在的所有呼叫和目标所需时间(采用不同方案电梯停靠时间相同,所以不必考虑)最短的策略。 可选方案一是电梯先向上运行响应经过各层的目标和向上呼叫,再向下运行响应所有向下呼叫以及途经各层的目标,最后再向上响应剩余的向上呼叫。二是恰好相反,先向下,再向上,最后再向下运行。 由于呼叫和目标会随时增加,所以实际上有时这种策略并不好。另外有时这将导致电梯突然向相反的方向运行。为了防止经常性的改变方向,我们可以采用设定只有当原来的运行方向比相反方向的代价高20%的时候才切换方向。 4)最短平均等待时间策略: 假设每一呼叫楼层等待的人数和每一目标楼层走出电梯的人数相等。计算响应当前所有呼叫和目标全部乘客所需时间的总和(包括等待时间和电梯运行时间,对于提出呼叫而尚未进入电梯的乘客则只计算等待时间)。对于这种策略,基本上也是只有象3一样的两种选择方案。由于呼叫和目标会随时增加,所以实际上这种策略有时并不好,但它比最快响应时间策略较为稳定和高效。另外有时这将导致电梯突然向相反的方向运行。为了防止经常性的改变方向,我们可以采用设定只有当原来的方向比替代方向的代价高20%的时候才切换运行方向。 注意:除了先来先服务以外,我们不能预先设定固定不变电梯运行的目标楼层。 5)同学们也可以自己提出新的控制策略。 要求重点要实现顺便服务策略,应在一相对独立的程序块中实现控制策略,这样能方便地对其进行修改而不影响程序的其他部分。 (四)输入输出 1)输入: 就是一系列的呼叫和目标。输入可以采用两种方法: a.以键盘输入呼叫和目标。例如我们可以设定如下:当敲击键1、2、3、4、5、6、7、8、9时表示电梯内有乘客按目标按钮,指定相应目标楼层。当敲击键Q、W、E、R、T、Y、U、I时表示8层到1层有上行呼叫请求。当敲击键A、S、D、F、G、、H、J、K时表示9层到2层有下行呼叫请求。 b.将呼叫和目标写入一个正文文件,然后程序读取这些呼叫和目标数据后可以在没有人工干预的情况下模拟电梯运行情况。其中一个呼叫/目标占一行,格式如下: <操作时间>[空格]<呼叫目标>[回车] 操作时间,表示呼叫请求的发生时间,是以程序启动时刻为参照的相对时间。以四位的数字字符串表示,从0000开始,单位秒。 呼叫目标,和键盘输入的设定一致,占1个字节。 1、2、3、4、5、6、7、8、9时表示电梯内有乘客按目标按钮; Q、W、E、R、T、Y、U、I时表示8层到1层有上行呼叫请求; A、S、D、F、G、H、J、K时表示9层到2层有下行呼叫请求; 每个数据项之间用一个空白字符隔开。不必考虑检查数据的正确性。 2)输出: a.电梯运行的动画显示:包括显示各按钮指示灯的亮灭情况、电梯方向指示灯和电梯位置及运行情况。另:为方便查看电梯运行情况,需要在显示中划分一块区域,专门显示键盘输入的呼叫和目标数据。 b.电梯运行情况的记录(结果)文件。 记录文件也是文本文件,每一行表示一次停靠,包括以下内容: 停靠时间:开始停靠某楼层的时间,以整数表示,从小到大排列,占4个字节,从0开始,单位秒。 楼层:停靠的楼层,占一个字节(1-9)。 每个数据项之间用一个空白字符隔开。程序中不必考虑检查数据的正确性。 备注:老师会提供一组已经编制好的子程序以及一些给出的数据定义,它们的主要功能是表示电梯系统参数,模拟电梯运行以及处理各类信号的输入输出。要注意利用它们提供的一些控制显示和键盘输入的函数和过程来简化输入和输出(包括动画)的设计。当然也可以利用编程语言提供的函数和过程来完成输入和输出。 (五)基本的要求和较高的要求 以下内容仅供有余力的同学参考实现。 1.程序的运行方式: 如果输入从数据文件中取得,则程序的运行应该有两种方式,动画方式、快速方式和完全方式。如果输入从键盘获得,那么只能采用动画方式或完全方式,不能使用快速方式。 a.动画方式花费较长的时间来直观地模拟电梯运行。 b.快速方式则没有动画,只是生成记录文件。 c.完全方式花费较长的时间来直观地模拟电梯运行,同时生成记录文件。 基本要求只实现动画方式。 2.控制策略: 基本要求实现先来先服务和顺便服务策略,可以指定电梯模拟系统使用不同的策略。较高的要求是可以在多个策略之间由我们控制进行切换。 3.输入输出: 基本要求实现键盘输入、动画输出。 4.统计分析 统计分析每个乘客乘电梯花费的平均时间。 如果实现了多个策略,则可以对不同策略加以比较。 统计分析是较高要求,基本要求不必考虑此功能。 5. 程序的适应性考虑: 例如如何不要作很多修改就可以适应楼层数改变(例如增加到30层)等等。 程序适应性是较高要求,基本要求不必考虑此功能。 (六)程序总体结构 以下内容仅供参考。 我们可以在主程序中写如下两个过程调用: Configure; Simulation; 前者在进行模拟前设置一些参数,这比较简单。而后者则是进行仿真模拟,这相当复杂,所以下面我们就来讨论如何设计Simulation。 这一类的模拟仿真程序有一个共同的特点是要模拟某个系统在一段时间内的情况,所以我们很自然地要从时间上对该问题进行分解,就是说 Simulation() { Initialize;{初始化过程} do Lift_status();{计算电梯状态在这一时刻的变化,例如到达某层,就要设定为已经完成了该层的目标,同时将电梯停下来等} Writemessage();{输出信息(包括动画)} Getinput();{接收当前时刻的新输入(包括新目标和新呼叫) Control();{调用控制策略程序决定电梯该如何运动} Time=time+1;{推进仿真时间,假定每一秒电梯进行上述操作一次} While not endcondition; } 这就是可以模拟电梯系统的基本结构了!这个程序结构的基本思想就是模拟了电梯每个时刻做的几件事情,然后将时间向后推移一个时间单位,然后再做那几件事,于是就模拟了电梯的工作状态。 ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 电梯
 输入关键字,在本站1000多万海量源码库中尽情搜索: