




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(2011届)题 目电梯运行状态的VB仿真学 院电子信息学院专 业电子信息科学与技术班 级学 号学生姓名指导教师完成日期2011年3月诚 信 承 诺我谨在此承诺:本人所写的毕业论文电梯运行状态的VB仿真均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。 承诺人(签名): 年 月 日杭州电子科技大学本科毕业设计摘 要本毕业设计主要设计电梯运行状态的仿真VB程序,该程序能直观简便的显示电梯在日常工作时状态的切换转变,体现人与电梯之间的互动过程,帮助人们理解掌握电梯的工作方式。本设计亦展现了VB语言的优点,作为一种可视化编程的高级语言,其简单、高效而又功能强大的特点让每一个程序员受益匪浅。程序主界面分为内部轿厢界面、外部层站界面和主体大楼界面三部分。内部轿厢界面模拟电梯轿厢内部的操作面板,包括位置指层器、方向指示灯、选层按钮和开关门按钮。外部层站界面模拟电梯轿厢外部各层站的操作面板,包括位置指层器、方向指示灯、上楼请求按钮和下楼请求按钮。主体大楼界面模拟一栋高层大楼及其中的工作电梯,用于显示电梯的上下层、开关门等动作。程序实现了电梯的目的地控制,即电梯能实时的接收多个不同请求,并智能化的选择下一个目的地,使工作效率达到最大。此外程序还实现了电梯的一些特殊功能:内部轿厢界面上的紧急暂停按钮帮助电梯用户以最快的速度逃离电梯;电梯用户通过双击选层按钮,能够自行撤销该次选层请求;电梯门也实现了自动延时关门功能,即每次电梯停站开门后,将在五秒内自动关门;这些人性化的设计简便了用户的操作。关键词:电梯;VB;仿真;控制ABSTRACTThe main aim of this thesis is to design Visual Basic simulation program about elevator running that can be easy and intuitive display of the elevator running in the daily working, show the interaction between people and elevator, and help us understand the way elevator work. This design also demonstrates the advantages of Visual Basic language, as a high-level visual programming language, its simple, efficient and powerful features benefit every programmer. The main interface is divided into three parts: the internal car interface, the external landing interface and the main building interface. The internal car interface show the operating panel inside the car, including position indicator, direction indicator, floor selection button, door open button and door close button. The external landing interface show the landing operating panel at each floor landing, including position indicator, direction indicator, upstairs request button and downstairs request button. The main building interface displays an elevator working in a high-rise building, which is used to display the elevators up and down moving, the door open and close action and other activities. Program realize the destination of the elevator control, in the program, the elevator can receive many different requests in same time, and intelligent choice of the elevators next destination, and achieve maximum efficiency. In addition program also achieved some special features on elevator: the emergency pause button on the internal car interface help users to escape the elevator as soon as possible; elevator users can cancel their selection by double-click a floor selection button; the program also realizes an automatic door closed delay. After each time the elevator opened, it will automatically close in five seconds, and this user-friendly designs simple user operation. Keywords: elevator; VB; simulation; control目 录1 引言12 VB简介22.1 环境总览22.2 数据结构42.3 面向对象技术52.4 控件62.5 小结73 设计思想83.1 主界面83.2 后台界面83.3 代码84 主界面94.1 大楼界面94.2 内部轿厢界面104.3 外部层站界面105 后台界面115.1 按钮115.2 指示灯115.3 电梯116 代码126.1 初始化136.2 判断方法156.3 事件触发186.4 过程动画267 结论30致谢31参考文献32附录331 引言随着我国房地产业的迅猛发展,建筑物越来越向着更高、更智能的方向发展。电梯已经成为高层建筑物内垂直交通运载的主要代步工具,其使用需求量正大幅度提高。电梯给人们的生活带来了便利,也为我国现代化建设的加速发展提供了强大的保障。目前现代化的载人电梯都是微机控制的智能化、自动化设备,不需要专门的人员来操作驾驶,普通乘客只要按下几个按键即可完成操作,这也对电梯设计者提出了较高的要求,其中最重要的就是电梯在复杂多变的环境下,如何最有效率为人们服务。本课题在于帮助读者理解掌握电梯的运行状态,为了能更直观的展现人与电梯之间的互动,采用可视化面向对象语言VB来仿真一幢大楼里电梯的工作方式。VB是Visual Basic的简称,源自于BASIC编程语言,是由美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。从其1991年诞生至今,Visual Basic一直是使用最多的程序开发语言,于其他语言相比,VB的目的是如何让用户在最短的时间内掌握并精通一门编程语言,在最短的时间内把需要的目的用编程语言编写出来,所以无论是新手还是专家都能利用VB进行快速开发,易学易用性是其第一性,软件设计的高效性是其第二性,本课题也使用VB6.0来完成对电梯运行状态的仿真设计。程序设计分界面与代码,界面负责前台显示,代码负责后台管理。两者结合后可以真实的展现电梯在日常运行中所需要完成的工作。程序的核心即利用VB可视化编程的特点,快速简洁的仿真电梯运行状态。在实现电梯的基本运行功能后,还设计添加了一些的便捷功能,使电梯更人性化的为用户服务。2 VB简介菜单栏英文Visual的意思是“视觉的”,VB作为最直观的编程方法,之所以叫做“可视”,是因为VB无需编程,就可以完成许多步骤。在VB中引入了控件的概念,在Windows中控件的身影无处不在,如按钮、文本框等,VB把这些控件模式化,并且每个控件都有若干属性用来控制控件的外观,工作方法,还能够响应用户的操作。我们可以像在画板上一样,随意点几下鼠标,就完成一个按钮,这些在以前的编程语言下是要经过相当复杂的工作的。工程窗窗体设计窗代码窗属性窗菜单栏工具栏2.1 环境总览布局窗工具箱图2-1 Visual Basic主窗体图2.1.1 主窗体主窗体即Visual Basic应用程序窗口,由标题栏、菜单栏和工具栏组成。VB共有三种工作模式(标题栏总显示当前模式),例如图2-1中为设计模式。一、设计模式:创建应用程序的大多数工作都是在设计时完成的。在设计时,可以设计窗体、绘制控件、编写代码并使用“属性”窗口来设置或查看属性设置值。二、运行模式:代码正在运行的时期,用户可与应用程序交流。可查看代码,但不能改动它。 三、中断模式:程序在运行的中途被停止执行时。在中断模式下,用户可查看各变量及各个属性的当前值,从而了解程序执行是否正常。还可以修改程序代码,检查、调试、重置、单步执行或继续执行程序。2.1.2 窗体设计窗窗体设计窗口是屏幕中央的主窗口,它可以作为自定义窗口用来设计应用程序的界面。用户可以在窗体中添加控件、图形和图片来创建所希望的外观。每个窗口必须有一个的窗体名字,例如图2-1中显示的窗口设计窗是本程序的主界面(main),在里面可以看到每个控件。2.1.3 代码窗在设计模式中,通过双击窗体或窗体上任何对象或通过“工程资源管理器”窗口中的“查看代码”按钮来打开代码编辑器窗口。代码编辑器是输入应用程序代码的编辑器,例如图2-1中代码窗显示的是程序主界面的代码部分。2.1.4 属性窗属性是指对象的特征,如大小、标题或颜色等数据。在Visual Basic6.0设计模式中,属性窗口列出了当前选定窗体或控件的属性的值,用户可以对这些属性值进行设置,例如图2-1中的属性窗显示的是程序主界面窗体的属性,包括主界面窗口的名字、高度、宽度、背景图片等等。2.1.5 工程窗工程是指用于创建一个应用程序的文件的集合。工程窗则列出了当前工程中的窗体和模块,例如图2-1中的工程窗显示的是本程序的工程模块,有main主界面和item后台界面两部分。2.1.6 工具箱VB之所以广受欢迎,工具箱扮演了关键性的角色。工具箱中的每个图标称之为控件,每个控件都是已经定义好的对象,使用者借助这些控件采用搭积木方式就可以设计出多姿多彩的应用程序。2.1.7 布局窗窗体布局窗口显示在屏幕右下角。用户可使用表示屏幕的小图像来布置应用程序中各窗体的位置。这个窗口在多窗体应用程序中很有用,因为这可以指定每个窗体相对于主窗体的位置。2.2 数据结构VB的数据类型有系统定义和自定义两种,系统定义的数据类型称为标准类型,自定义数据类型是由若干标准类型组合成的某种结构。表2-1列出了VB中的标准数据类型:表2-1 Visual Basic标准数据类型表本设计中用到的数据类型有Boolean、Integer、String三种。2.2.1 BooleanBoolean为逻辑数据类型,也叫布尔型,该类型变量只有两个值:True和False,常用于逻辑判断,本设计中紧急暂停标志位、选层取消标志位都使用Boolean数据类型,是最为常用的数据类型之一。2.2.2 IntegerInteger为整形数据类型,常用于表示整数,范围从-32768至32767,本设计中的电梯位置变量、楼层数等都使用Integer数据类型,是最为常用的数据类型之一。2.2.3 StringString为字符串数据类型,字符串包括除双引号和回车以外可打印的所有字符,以双引号作为字符串的定界符号。本设计中电梯状态、门状态都使用String数据类型,是最为常用的数据类型之一。2.3 面向对象技术面向对象程序设计(Object Oriented Programming,简称OOP)是当今主流的程序设计方法,它已经取代了以前的“结构化”基于过程的程序设计技术。例如汇编、C、Basic等语言都是标准的面向过程语言,而Java、C#、VB.Net等语言都是标准的面向对象语言。在OOP中,程序由对象组成,这些对象具有某种属性一级对象可执行的某些操作。具体是自行创建它们还是从外界引入它们取决于用户的需求。从根本上来说,只要对象能够满足我们的要求,就不必去关心它的功能到底是如何实现的。在OOP中,唯一关心的是对象对外的表现,就好像电视机只要符合要求能播放节目,用户就不去关心电视机内部构造一样,只要对象能符合要求,程序员也就不用去关心该对象是如何实现的。准确的来说,Visual Basic介于Basic与VB.Net之间,它基于对象却不完全面向对象。因为在VB中没有OOP标志性的继承和多态性,缺乏参数化的构造函数、运算符重载和实现继承性,但VB设计却是基于对各个对象,也就是控件的应用来完成的。在VB中,同样有面向对象技术中的对象、属性、方法等概念。2.3.1 对象对象是代码和数据的组合,可以作为一个单位来处理。对象可以是应用程序的一部分,比如可以是控件或窗体,整个应用程序也是一个对象。VB中的每个对象都是用类定义的。类是面向对象程序设计的核心技术,可以理解成一种定义了对象行为和外观的模板;而把对象看作是类的原原本本的复制品。本设计中用到的对象有Button、Image、Timer等,这些都是VB的控件,即对象。2.3.2 属性属性是对对象特性的描述,VB为每一类对象都规定了若干属性,属性值可以在属性窗口中直接选择或输入,也可以在程序代码中设置。在本设计中,Image、Button控件有Picture属性用于显示图片,有Width、Height属性用于设置控件的宽度与高度,这些基本属性是一般控件所共有的。而一些特殊的控件还具有特殊的属性,例如本设计中的Timer控件就有其特殊属性Interval用于设置计时器的计时时间。通过对控件属性的设置,程序员能很容易的设计出符合要求的各个控件。2.3.3 事件事件其实就是一个“动作”或“状况”,一般会作用在某一个对象上。事件发生后,会产生什么样的结果,由编程人员决定,且同一个事件作用在不同的对象上会产生不同的结果。事件一般分用户事件与系统事件,用户事件是指用户触发的事件,有鼠标事件与键盘事件,例如按下本设计中的各个按钮后触发的事件就是该按钮的鼠标点击Click事件;系统事件则是由系统内部引发的事件,例如本设计中各个计时器控件Timer在计时时间到后触发的事件。2.3.4 方法方法是让对象执行程序员自定义的特殊的操作。与事件不同的地方在于,事件可以与用户进行互动,而方法则只能在程序代码中使用。方法中的内容大多体现的是程序员的业务逻辑,电梯的逻辑判断是本设计比较核心的部分,它就是通过代码部分中的getDestination()这个方法实现的。2.4 控件Visual Basic 的控件有三种广义分类:内部控件、ActiveX控件、可插入的对象。2.4.1 内部控件内部控件是VB最基本的对象,是组成一个程序必不可少的元素,例如Button和Image都是内部控件,甚至整个程序窗口就是一个Frame控件。这些控件都在 Visual Basic 的 .exe 文件中,且内部控件总是出现在工具箱中,不像 ActiveX 控件和可插入对象那样可以添加到工具箱中,或从工具箱中删除。本设计中所使用的控件基本上都是内部控件,因为不需要从外界导入,程序可以方便的对各个控件进行添加、删除。2.4.2 ActiveX控件ActiveX 控件是扩展名为.ocx的独立文件,其中包括各种版本Visual Basic 提供的控件(如DataCombo,DataList 控件等)和仅在VB专业版和VB企业版中提供的控件(例如Listview、Toolbar、Animation和TabbedDialog等),此外还有许多第三方提供的 ActiveX 控件。其中,具有文件扩展名.vbx的控件使用了老的技术,在Visual Basic的早期版本编写的应用程序中可以找到这些控件。当Visual Basic打开包含.vbx控件的工程时,在缺省情况下用.ocx控件取代.vbx控件。当然,这只有在控件的.ocx版本存在时才可以。2.4.3 可插入的对象可插入的对象不限于某种特定的文件,例如一个包含公司所有雇员的列表的 Microsoft Excel 工作表对象,或者一个包含某工程计划信息的 Microsoft Project 日历对象。因为这些对象能添加到工具箱中,所以可把它们当作控件使用。其中一些对象还支持自动化(正式的名称为 OLE 自动化),使用这种控件就可在 Visual Basic 应用程序中编程控制另一个应用程序的对象。2.5 小结由于 Visual Basic 应用程序是基于对象的,所以应用程序的代码的结构就是该程序在屏幕上展现的模型。根据定义,对象包含了数据和代码。而在屏幕上看到的窗体就是属性,这些属性定义了窗体的外观和内在特性。应用程序中的每个窗体都有一个包含其代码的相关的窗体模块(文件扩展名为.frm),例如本设计中,就有一个主界面的窗体模块main.frm,始终显示于工程窗口。以设计中的主界面main.frm作为例子来说,每个窗体模块都包含事件过程,即代码部分,其中有为响应特定事件而执行的指令,其具体可参见下文代码部分中的Form_Load()与Form_Unload(),这两个事件分别于main.frm窗口载入前与关闭后触发。窗体也可包含控件,正如主界面中存在许多Button、Image控件,在窗体模块中,对窗体上的每个控件都有一个对应的事件过程集,这些就是本设计中各种的事件。除了事件过程,窗体模块还可包含通用过程,它对来自任何事件过程的调用都做出响应。总的来说,属性用于描述对象,方法就是让对象做一些动作,事件则是对象对用户或系统的动作所做出的响应。在VB程序设计中,基本的设计机制就是:改变对象的属性、使用对象的方法、为对象事件编写事件过程。程序设计时要做的工作就是决定应更改哪些对象的属性、调用哪些方法、对哪些事件做出响应,从而得到希望的外观和行为。3 设计思想3.1 主界面程序执行后即进入主界面,主界面是程序的操作平台,所有对电梯的操作都可以在这里完成。为了界面美观与操作方便,主界面划分为内部轿厢界面、外部层站界面和主体大楼界面三部分。内部轿厢界面模拟电梯轿厢内部的操作面板,包括位置指层器、方向指示灯、选层按钮、开关门按钮和紧急暂停按钮。外部层站界面模拟电梯轿厢外部各层站的操作面板,包括位置指层器、方向指示灯、上楼请求按钮和下楼请求按钮。主体大楼界面模拟一栋高层大楼及其中的工作电梯,用于显示电梯的上下层、开关门等动作。3.2 后台界面后台界面用户保存主界面需要用到的图片素材,在程序执行时是被隐藏的。在主界面操作电梯时,各个按钮和指示灯的变化都是以图片形式呈现。主界面接受后台界面传递来的图片后,再进行相关内容的更新显示。3.3 代码代码是本次设计的核心部分,一个应用程序是否优秀,要看其程序代码是否具有格式规范简洁、逻辑思路简单清晰、并具有很好的模块化等特点。代码的编写也需要养成良好的习惯,在每个功能的代码段编写完成后就进行单元测试,在全部代码完成后还要进行系统测试,测试的目的是纠正程序可能存在的错误逻辑,修补可能存在的程序漏洞,完善整个系统使程序达到预期的目标。通过测试后还需尝试优化代码,达到减少代码体积,明晰程序逻辑的效果。本此设计的代码逻辑并不复杂,但功能模块较多,在接下来的论文中我将根据代码功能进行分块并详细介绍。4 主界面主界面在VB中命名为main.frm,划分为内部轿厢、外部层站和主体大楼三个部分。内部轿厢界面模拟电梯轿厢内部的操作面板,外部层站界面模拟电梯轿厢外部各层站的操作面板,大楼界面模拟一栋高层大楼及其中的工作电梯。图4-1 程序主界面图4.1 大楼界面大楼界面描绘的是一幢七层的大楼,大楼内部一台电梯正在作业。用户操作电梯时,可以在大楼界面观察到电梯的动向,包括上升、下降、开门、关门等动画。大楼通过设置Image控件中Picture属性导入VB。电梯则使用了PictureBox控件,在该PictureBox控件中再添加两个Image控件组成电梯的左右门,通过对两个Image控件的叠加,移位等操作来实现电梯的开门、关门动画。4.2 内部轿厢界面内部轿厢界面的描绘的就是电梯轿厢内部的操作面板,用户可以通过面板上的位置指层器观察电梯当前所在的层数,通过面板上的方向指示灯观察电梯当前行驶的方向,可以按下面板上的选层按钮选择自己想要到达的楼层,还可以按下面板上的开门、关门按钮让电梯行驶开门、关门的动作。位置指层器与方向指示灯使用Image控件,通过加载后台界面中对应的图片来更新其Picture属性,实现电梯状态的实时显示。选层按钮使用Button控件,通过鼠标点击点亮该按钮,同时建立选层请求,而后被程序后台所记录,进而更新电梯的下一个目的地。在借助计时器控件Timer后,通过短时间重复点击某一选层按钮,可以实现撤销该选层请求的功能。开关门也使用Button控件,通过鼠标点击点亮该按钮,同时建立开关门请求,而后根据当前电梯状态和门状态来判断是否执行开关门动作。此外,面板上方还有一个紧急暂停按钮,同样使用了Button控件,可以通过鼠标点击点亮该按钮,用于将电梯置于紧急状态,再次点击可以熄灭该按钮,表明撤销电梯紧急状态。4.3 外部层站界面外部层站界面的描绘的就是电梯各个层站存在的操作面板,用户可以通过面板上的位置指层器观察电梯当前所在的层数,通过面板上的方向指示灯观察电梯当前行驶的方向,还可以按下面板上的电梯召唤按钮召唤电梯为自己服务。位置指层器与方向指示灯使用Image控件,通过加载后台界面中对应的图片来更新其Picture属性,实现电梯状态的实时显示。电梯召唤按钮分为两个,为上楼请求按钮和下楼请求按钮,其中顶部楼层没有上楼请求按钮,底部楼层也没有下楼请求按钮。两组按钮全部使用Button控件,通过鼠标点击点亮该按钮,同时建立该层上楼请求或下楼请求,而后被程序后台所记录,进而更新电梯的下一个目的地。5 后台界面后台界面在VB中命名为item.frm,用于保存主界面需要用到的图片素材,在程序执行时始终都是隐藏的。图5-1 后台界面总览图5.1 按钮后台界面中存有主界面需要用到的所有上楼请求、下楼请求、开门、关门、选层、紧急暂停按钮状态的图片素材,因为每个按钮都有熄灭、亮起两种状态,所以所有按钮都提供两套图片可供选择。这些图片全部使用Image控件并通过设置Picture属性完成。5.2 指示灯后台界面中存有主界面需要用到的所有位置指层器、方向指示灯的各种状态的图片素材,其中位置指层器包括一至七状态共七张图片,方向指示灯包括待命、上行、下行状态共三张图片。这些图片也全部使用Image控件并通过设置Picture属性完成。5.3 电梯后台界面中存有主界面需要用到的电梯图片素材,分为打开、关闭两种状态。这两张图片也使用Image控件并通过设置Picture属性完成。6 代码代码是本次设计的核心部分,本次设计的代码逻辑并不复杂,但功能模块较多,大体可分为初始化、判断方法、事件触发、过程动画四个部分,每个部分又可以分成多个具体的方法,图6-1是对程序总流程的描述。图6-1 程序总流程图6.1 初始化6.1.1 自定义参数Dim floornum As Integer 楼层数Dim perH As Integer 定义位置的参数Dim topH As Integer 定义位置的参数Dim liftstate As String 电梯状态Dim destination As Integer 目的地Dim c(0 To 99) As Integer 选层请求,c(0)记录c(1)-c(99)的请求数量Dim u(0 To 99) As Integer 上楼请求,u(0)记录u(1)-u(99)的请求数量Dim d(0 To 99) As Integer 下楼请求,d(0)记录d(1)-d(99)的请求数量Dim warnflag As Boolean 紧急暂停标志位Dim cancelflag As Boolean 取消选层标志位程序源代码:以上为程序中自定义的变量,floornum为数字类型变量,用于储存大楼楼层数;perH为数字类型变量,用于储存大楼界面中每个楼层的高度,方便电梯停层的判断;topH为数字类型变量,用于储存大楼顶层与大楼顶端的距离,方便电梯的具体定位;liftstate为字符串类型变量,用于储存当前电梯门的状态,分等待状态wait、上行状态up、下行状态down,默认为wait,当收到请求或完成所有请求后根据具体方法转化状态;destination为数字类型变量,用于储存当前电梯的下一个目的地,收到请求后根据具体方法得出具体层数1至7,然后程序将行使电梯运行方法将电梯送至该层。c(0 To 99)为数字类型数组变量,用于储存当前电梯的选层请求,c(1)至c(7)为具体该层选层请求,默认无请求为0,接收用户选层请求后置为1,而当电梯在该层停站并开门后置为0,表明清除了该层选层请求标志,c(0)则用于记录 c(1)至c(7)的请求数量,默认为0,最大值为7,方便电梯目的地的逻辑判断。u(0 To 99)为数字类型数组变量,用于储存当前电梯的上楼请求,u(1)至u(6)为具体该层上楼请求,默认无请求为0,接收用户上楼请求后置为1,而当电梯处于上行状态并在该层停站并开门后置为0,表明清除了该层上楼请求标志,u(0)则用于记录 u(2)至u(7)的请求数量,默认为0,最大值为6,方便电梯目的地的逻辑判断。d(0 To 99)为数字类型数组变量,用于储存当前电梯的下楼请求,d(2)至d(7)为具体该层下楼请求,默认无请求为0,接收用户下楼请求后置为1,而当电梯处于下行状态并在该层停站并开门后置为0,表明清除了该层下楼请求标志,d(0)则用于记录 d(2)至d(7)的请求数量,默认为0,最大值为6,方便电梯目的地的逻辑判断。warnflag为布尔类型变量,用于判断当前电梯是否处于紧急暂停状态,默认为false,表示电梯不处于紧急暂停状态,可以通过紧急暂停按钮将其值置true,表示此时电梯进入了紧急暂停状态。cancelflag为布尔类型变量,用于判断当前电梯是否触发取消选层计时器,默认为false,可以通过短时间重复点击某个选层按钮将其值置true,此时计时器开始计时,若在计时时间内用户再次点击了该按钮,则该层选层请求取消。6.1.2 程序初始化Private Sub Form_Load() 程序初始化 floornum = 7 大楼层数 liftstate = wait 电梯初始状态 perH = 88 大楼每层的高度 topH = 18 大楼顶层与大楼顶端距离 light 指示灯初始化End Sub程序源代码:Form_Load()方法是程序在运行后,不需要调用就自动执行的初始化方法。方法中定义了一些具体的参数变量:定义楼层数为七层;定义电梯初始状态为等待;定义大楼每层的高度为88twips(缇);定义大楼顶层与大楼顶端的距离为18twips(缇);light则是指示灯显示方法,下文将有解释。程序源代码:Private Sub Form_Unload(Cancel As Integer) 关闭程序方法 Unload itemEnd SubForm_Unload()与Form_Load()方法正好相反,描述的是点击主界面窗口右上角的关闭按钮,也就是在程序即将关闭之前所要执行的代码。代码只有一行,内容是关闭并释放后台界面占用的资源,使程序完全退出。6.1.3 指示灯显示Sub light() 指示灯变化方法 For i = 0 To floornum Image1(i).Picture = item.inumber(liftlocation).Picture 位置指示灯If (liftstate = up And liftlocation floornum) Or liftlocation = 1 Then 方向指示灯 Image2(i).Picture = item.ilight1.Picture Image3(i).Picture = item.ilight0.Picture程序部分源代码:light()方法负责大楼所有的位置指层器与方向指示灯的显示,使用了For循环遍历更新了所有的位置指层器与方向指示灯。Image1()为程序所有的位置指层器所使用的Image控件,其中0为电梯轿厢中的位置指层器,1至7为具体楼层的位置指层器;Image2()为所有的向上方向指示灯,Image3()为所有的向下方向指示灯,命名规律都与Image1相同。当电梯上行时,所有的方向指示灯加载后台界面中“向上箭头”的图片;当电梯下行时加载“向下箭头”的图片;而当电梯处于等待状态时加载“空”的图片。6.2 判断方法6.1.2 门状态判断Function doorstate() As String 门状态判断方法 If leftdoor.Left = -32 Then doorstate = close ElseIf leftdoor.Left = -64 Then doorstate = open End IfEnd Function程序源代码:doorstate()方法返回的是一个代表电梯门状态的字符串变量,“open”表示电梯门状态为打开,“close”表示电梯门状态为关闭。“close”状态存在的意义是因为在现实生活中,电梯需要确保电梯门完全关闭后才开始上下运行,而“open”存在的意义则是为了给代码中的开门事件一个“门已完全打开”的信号,用于终止开门动画。因为电梯门是由左门与右门组成的,且开门过程中左门与右门的速度完全一样,所以只需判断左门Image控件相对于电梯PictureBox控件所处的位置即可。6.1.3 轿厢位置判断Function liftlocation() As Integer 轿厢位置判断方法 i = (lift.Top - topH) Mod perH If i = 0 Then liftlocation = floornum - (lift.Top - topH) / perH ElseIf liftstate = down Then 电梯下行时 liftlocation = floornum - (lift.Top - topH - i) / perH ElseIf liftstate = up Then 电梯上行时 liftlocation = floornum - 1 - (lift.Top - topH - i) / perH End IfEnd Function程序源代码:liftlocation()方法返回的是一个代表电梯当前位置的数字类型变量,方法中区分了电梯上行时与下行时所处位置的判断方法。首先求得电梯顶部相对于大楼的twips(缇)值,并与楼层高度相除后取余得值i,通过对i数值的判断来确定电梯当前所处的位置。当i为0时,代表电梯十分标准的停在某个楼层,不需要考虑电梯上行与下行的区别;当i不为0时,电梯位置判断方法根据电梯方向的不同而不同。当电梯上行时,以电梯底部到达该楼层的底部位置为判断标志,当电梯下行时,以电梯顶部到达该楼层顶部位置为判断标志。这样判断的原因是在给予电梯一个目的地楼层并让电梯运行时,电梯能够停在正确的楼层位置,而不是因为误判而使电梯停在目标楼层的前一层。6.1.4 目的地选择Function getDestination() As Integer 找寻目的地方法 If c(0) = 0 And u(0) = 0 And d(0) = 0 Then 当没有任何请求时 ElseIf liftstate = up Then 电梯上行时ElseIf liftstate = down Then 电梯下行时ElseIf liftstate = wait Then 电梯从待机状态被唤醒时程序部分源代码:getDestination()为程序的目的地选择方法,以数字类型变量返回电梯的下一个目的地,包含电梯运行的主要逻辑判断方法,是本设计最核心的地方。每次执行该方法时,首先都需要清空并重新统计所有请求数量,用以正确的判断出电梯的下个目的地。电梯为了达到效率最大化,需要在特定的时间处理特定的请求,例如电梯在上行时不但会暂时忽略上方楼层的下楼请求,下方楼层的所有请求也暂时搁置在一边,优先响应上方楼层的选层请求和上楼请求,而后电梯转为下行,开始处理所有楼层的下楼请求。具体的程序流图见图6-2所示。图6-2 目的地找寻流程图当电梯从等待状态被一个新请求唤醒时,此时电梯立即响应该请求,具体表现为前往该请求所在的楼层并开门等待用户进入电梯,而当电梯不处于等待状态时,需要先判定电梯此时的运行方向。上行时,电梯首先需要从本层遍历至顶层,检查每层的上楼或选层请求,找到后定该层为目的地并立即运行前往,在电梯没有收到新请求之前不做停留;而当上方所有楼层都没有上楼或选层请求时,电梯又将自顶层开始遍历至本层的查找每层的下楼请求,找到后定该层为目的地并立即运行前往,在电梯没有收到新请求之前不做停留;而当上方所有楼层什么请求都没有时,电梯将检查下方楼层是否存在请求,如果没有电梯将进入等待状态,如果有电梯就转为下行状态并开始新的一轮判断。下行时,电梯首先需要从本层遍历至低层,检查每层的下楼或选层请求,找到后定该层为目的地并立即运行前往,在电梯没有收到新请求之前不做停留;当下方所有的楼层没有下楼或选层请求时,电梯又将自低层开始遍历至本层的查找每层的上楼请求,找到后定该层为并立即运行前往,在电梯没有收到新请求之前不做停留;而当下方所有楼层什么请求都没有时,电梯将检查上方楼层是否存在请求,如果没有电梯就进入等待状态,如果有电梯就转为上行状态并开始新的一轮判断,依此循环,以实现电梯状态间的完美切换。值得注意的是,若要实现电梯的实时智能化的目的地判断,需要在每次用户向电梯递交新的请求时,立即重新执行该目的地判断方法以实时更新电梯的下一个目的地。6.3 事件触发6.3.1 开始运行Sub run() 开始运行 destination = getDestination If doorstate = close And runTimer.Enabled = False Then runTimer.Enabled = True 启动电梯运行过程 End IfEnd Sub程序源代码:run()方法为电梯的运行方法,方法中通过调用getDestination()方法找到电梯的下一个目的地,考虑到电梯用户的安全问题,方法需要确保当前电梯处于暂停状态且电梯门处于关闭状态,才允许启动电梯的运行过程。6.3.2 开门请求Private Sub dopen_Click() 开门请求 If runTimer.Enabled = False Then dooropen End IfEnd Sub程序源代码:dopen_Click()为按下内部轿厢界面的开门按钮后向电梯递交的开门请求。为了电梯用户的安全考虑,需要在确保电梯完全停止后才能继续调用开门方法,否则该次请求将被程序忽视。6.3.3 开门方法Sub dooropen() 开门方法dcloseTimer.Enabled = False dclose.Picture = item.iclose0.Picture dopen.Picture = item.iopen1.Picture dopenTimer.Enabled = True End Sub程序源代码:dooropen()方法为电梯的开门方法,在电梯响应开门请求时执行。首先,电梯将中断开能存在的关门过程,同时熄灭可能亮起的关门按钮,然后电梯将亮起开门按钮并启动开门过程。6.3.4 关门请求Private Sub dclose_Click() 关门请求 waitTimer.Enabled = False If doorstate = open And warnflag = False Then 电梯到站时 doorclose 关门 End IfEnd Sub程序源代码:dclose_Click()为按下内部轿厢界面的关门按钮后向电梯递交的关门请求。首先电梯将终止门等待的过程并立即关门,但为了电梯用户的安全考虑,需要确保当前电梯不处于紧急暂停状态且电梯门完全打开后才能继续调用关门方法,否则该次请求将被程序忽视。6.3.5 关门方法Sub doorclose() 关门方法 dopenTimer.Enabled = False dopen.Picture = item.iopen0.Picture dclose.Picture = item.iclose1.Picture dcloseTimer.Enabled = True End Sub程序源代码:dooropen()方法为电梯的开门方法,在电梯响应开门请求时执行。首先,电梯将中断开能存在的开门过程,同时熄灭可能亮起的开门按钮,然后电梯将亮起关门按钮并启动关门过程。6.3.6 选层请求Private Sub choice_Click(Index As Integer) 选层请求 runTimer.Enabled = False 程序部分源代码: choice_Click()为按下内部轿厢界面的某个选层按钮后向电梯递交的选层请求,通过在主界面中将所有选层按钮集合成名为choice的按钮对象数组,程序可以仅通过这一个方法来取到所有选层按钮提交的选层请求。在该方法执行时,首先程序将判断用户提交的选层请求的楼层是否等同于当前电梯所处楼层,若相等则程序将继续判断电梯当前状态是否为等待,若是则表明电梯在该层被用户唤醒,方法将直接响应该选层请求,调用开门方法为该层用户开门;若不是则程序将忽视该次请求。排除电梯的同层请求可能后,程序将继续判断当前电梯的选层请求中是否已存在该选层请求,若不存在,考虑到程序线程安全,电梯将暂时停止电梯的运行过程,随后亮起该层的选层按钮并登记该选层请求至选层请求数组cn;若存在,程序将继续判断是否处于取消选层计时时间内。若在该计时时间内,则程序将熄灭该层的选层按钮并通过修改选层请求数组cn来撤销该选层请求。最后不论结果如何,程序都将关闭并重新打开取消选层计时器以实现该计时器的重置,然后标志选层取消标志位cancelflag为true,最后执行电梯运行方法run来继续电梯的运行,图6-3是描述选层过程的流程图。图6-3 选层流程图6.3.7 上楼请求Private Sub up_Click(Index As Integer) 上楼请求If Index = liftlocation And liftstate = up ThenElseIf Index = liftlocation And liftstate = wait ThendooropenElse runTimer.Enabled = False up(Index).Picture = item.iup1.Picture u(Index) = 1 run End IfEnd Sub程序源代码:up_C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 分包单位进场施工管理协议书4篇
- 合同审查及管理流程模板
- 安全教育题库考试题及答案
- 2025年萧山幼儿合同制教师笔试真题及答案解析(回忆版本)
- 2025年康复医学治疗技术(副高级职称)试卷及答案
- 草原上的骑马经历草原风光写景15篇范文
- 法律合规风险评估与处理流程模板
- 新生儿窒息复苏试卷及答案
- 2025年图像几何变换题库及答案
- 眼科用药护理试题及答案
- 乡村振兴战略实施与美丽乡村建设课件
- 中频电疗法理疗(共60张PPT)精选
- 医学信息检索与利用智慧树知到答案章节测试2023年杭州医学院
- 黑底搭配大气企业宣传商业计划书商务通用PPT模板
- GB/T 17608-2006煤炭产品品种和等级划分
- 沪教五年级数学上册第一单元测试卷
- 地下停车库设计统一规定
- 综合实践课《绳结》教学设计
- 建筑装饰设计收费管理规定
- 电子课件-《市场营销》-A45-2298完整版教学课件全书电子讲义(最新)
- (整理)ASME-B161.34规定的标准磅级阀门(常用材料)额定工作压力和试验压力
评论
0/150
提交评论