




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人机接口设备开关类部件的仿真实现1 引言计算机仿真就是建立系统数学模型,并利用该模型在计算机上运行,进行系统科学实验研究的全过程。随着计算机技术的飞速发展,使得仿真技术的应用领域不断扩大。早期局限在国防科技和军工部门(如航天,航空,核能等),而如今深入到科学研究,工程设计,辅助决策,系统优化等各个方面, 使人们的许多传统观念和方法产生了重大变革。1.1 设计背景随着信息技术在教育领域的广泛应用,虚拟实验正日益成为广大教师的计算机辅助教学手段。虚拟实验平台正是应这个大需求而诞生。并且随着信息技术的发展,以纯软件的形式模拟仿真硬件接口实验平台的逻辑功能,用于接口教学。在与硬件接口实验平台的实验步骤一致的情况下,连接线路,用汇编语言或者C语言等编写程序,再运行程序观看结果。计算机仿真无硬件平台、器件的开销和磨损;也无实验环境的时间限制。让使用者更直观的更形象的演示实验过程和结果,更好的理解电路运行原理。为了增强虚拟实验平台的功能,首先由虚拟实验平台统一设计的器件基类,派生出对应的开关器件类,通过重载基类中的一些虚函数,仿真实现开关的相应功能特性。再将器件类封装成DLL模块,以便在实验时,通过特定的接口调用这些器件功能。1.2 计算机仿真1.2.1 计算机仿真的发展计算机仿真就是建立系统数学模型,并利用该模型在计算机上运行,进行系统科学实验研究的全过程。 自50年代初, 美国人Aaron借助大型的电子管计算机, 并利用最小二乘法进行滤波器这样的线性网络设计以来, 仿真技术的发展已近半个世纪。 计算机仿真应用早期局限在国防科技和军工部门(如航天,航空,核能等), 而如今深入到科学研究,工程设计,辅助决策,系统优化等各个方面, 使人们的许多传统观念和方法产生了重大变革。计算机仿真技术被称为继科学理论和实验研究后的第三种认识和改造世界的工具,计算机技术的发展,计算数学的成熟, 使计算机仿真技术成为一种工程领域必不可少的重要设计手段,它的应用可以大大地缩短产品的开发周期和降低产品开发的成本,从而提高产品的竞争力。 传统的设计方法往往是通过反复的试制样品(物理成型)和实验来分析该系统是否达到设计要求, 因此在设计过程中大量的人力和物力投入在样品的试制和试验上。 随着计算机仿真技术的发展, 在工程系统的设计开发中, 大量地采用了数字成型的方法, 即通过建立系统的数字模型, 通过计算机仿真使得大量的产品设计的问题的发现和解决在物理成型之前就得到处理, 从而极大地减少反复物理成型的人力和物力的投入, 使我们可以在最短的时间以最低的成本将新产品投放到市场, 是我们在竞争日益激烈的市场上占的先机。 正是由于计算机仿真技术的这种优越性, 在国外, 计算机仿真技术已经充分地被各大公司应用到产品的设计, 开发和改进中。早期的计算机仿真技术需要仿真人员自己推导系统的数学模型,应用编程语言将数学模型转化成为计算机能够直接运算的程序。应用此法设计仿真程序,不仅要求仿真人员须精通所采用的计算机语言,还使他们将大量的时间和精力耗费在程序的编写和调试上,而不能致力于对系统模型和仿真方法的研究。为了使仿真人员摆脱复杂的程序设计,从20世纪6070年代, 就有人发展了面向仿真问题的仿真专用语言。它采用简单的方式(即仿真人员熟悉的描述问题的方式)来表达仿真中常用的算法或控制流程。早期的仿真语言有CSMP,CSSL,DSL,MIMC等,应用十分广泛。20世纪80年代美国一家软件公司推出一种面向科学和工程计算的语言。它以矩阵运算为基础,把计算、可视化及程序设计融合到了一个交互的工作环境中,可以实现工程计算,算法研究,建模和仿真,数据分析及可视化,科学和工程绘图,应用程序开发等功能。这些通用的计算机仿真软件系统的主要特点是:1. 提供了方便的数学模型建立工具,使用者可方便地在计算机上建立自己的数学模型。2. 定义了一些典型,通用和专用的非线性函数,加速数学模型的建立过程。3. 提供多种数值计算方法。4. 提供灵活,方便和直观的多种输出格式。5. 具有友好的窗口式人机界面等。然而这些仿真语言的还是基于提供给仿真人员一种更方便的数学模型在计算机中的表达方式通过仿真语言这个中介,使得仿真人员可以跟方便地把数学模型转化到计算机中去运算。因此,还是需要专门的仿真人员进行操作,因此数学模型的建立还是需要仿真人员来进行。1.2.2 计算机仿真的现状基本实现了上层电路层,基本实现四个常用的大规模集成接口器件的内部逻辑;能够灵活设置电路图,并仿真正确及错误的结果;已经实现IA32CPU(从INTEL 8086到PIII)的代码,还未进行器件类封装;容易实现的表现用器件或外设还不足,如开关、LED、示波器等;对器件逻辑功能的延时处理考虑得还不周全。尽管这对普通实验演示影响不大。1.3 设计目的及意义本设计的目的是利用Visual C+环境以纯软件的形式模拟硬件接口实验平台的逻辑功能,简单的仿真实现人机交互设备开关类部件,增强虚拟实验平台的功能,用于接口教学。另外,通过本次设计开发对仿真理论的发展及主要内容有了基本的认识与了解。通过对仿真系统的设计与实现,熟悉了Visual C+的MFC开发模式流程,掌握了仿真技术的思想,完成了开关设备的仿真实现。1.4 预期成果开发设计一种模拟仿真的软件,使其能够在虚拟环境下模拟实验接口电路中开关的控制功能。弥补虚拟实验平台在外设方面的不足,增加开关类部件的模拟仿真实现功能,使原有的实验平台功能更强大,让使用者更直观的更形象的演示实验过程和结果,更好的理解电路运行原理。2 设计知识介绍2.2 虚拟实验平台计算机技术、大规模集成电路技术和通讯技术的飞速发展,为虚拟实验的发展奠定了坚实的基础。虚拟实验就是在通用计算机上加载相应的软件或硬件,使得使用者在操作这台计算机时,就像是在操作一台专用的传统试验设备一样。在虚拟实验系统中,软件是整个系统的关键,任何以个使用者都可以通过软件的相关设置来达到要实现实验的效果。虚拟实验就是利用外部输入(如鼠标的点击、拖动和键盘的敲击等),将计算机上虚拟的各种仪器,按实验要求、过程,组装成一个完整的实验环境,同时在这个环境中完成实验操作,包括实验器材的添加、实验条件的改变、数据采集以及实验结果的模拟、分析。它包含了虚拟仿真技术、计算机技术、实验技术、网络技术与专业等多方面理论知识。2.2 基类和派生类类是进行面向对象程序设计的基础。它能够定义数据和对数据的操作,并通过不同的访问权限,将类的接口和内部的实现分开,支持信息的封装和隐藏。面向对象程序设计的其它重要特征还包括:继承和多态。支持程序代码的复用是面向对象程序设计的主要目标之一,而支持程序代码复用的最重要的方法之一就是继承。继承能够从一个类派生出另一个类,前者称之为基类或父类,后者称之为派生类或子类。派生类能够继承基类的功能,也能改变或增加它的功能。在面向对象的程序设计中,多态的功能强大,但也较难掌握。它允许指向基类对象的指针指向派生类的对象。基类和派生类中可有名字和参数完全相同的函数,但他们的功能并不相同。当程序运行时,如果用基类指针调用成员函数,能够根据该指针所指向的对象的类型自行确定是调用基类的成员函数还是调用派生类的成员函数。如果没有多态的功能,我们就不得不用条件语句,确定是调用哪一个类的成员函数。代码复用是C+最重要的性能之一,它是通过类继承机制来实现的。通过类继承,我们可以复用基类的代码,并可以在继承类中增加新代码或者覆盖基类的成员函数,为基类成员函数赋予新的意义,实现最大限度的代码复用。3 开关类部件的仿真方案设计3.1 开发工具的选择根据不同的工程选择不同的开发工具,可以有效地提高工作效率。不同的开发工具各有各的优点同时又各有各的不足,在开发中要扬长避短。Visual C+自诞生以来,一直是Windows环境下最主要的应用开发系统之一。Visual C+不仅是C+语言的集成开发环境,而且与Win32紧密相连,利用Visual C+开发系统,可以完成各种各样的应用程序开发,从底层软件直到上层直接面向用户的软件。而且,Visual C+强大的调试功能也为大型复杂软件的开发提供了有效的排错手段。随着多媒体技术和图形图象技术的不断发展,可视化(Visual)技术得到广泛的重视,越来越多的计算机专业人员都开始研究并应用可视化技术。Visual C+是一个很好的可视化编程工具,使用Visual C+环境来开发基于Windows的应用程序大大缩短了开发时间,而且它的界面更友好,便于程序员操作。因此,根据实际情况在本设计中选用的是Visual C+6.0作为开发工具。3.2 模块的划分原则模块划分是系统分析中非常重要的一部分,下面是模块划分时的基本原则。1独立性:让模块直接内的关系减到最少。理想的状态就是模块之间没有关系,但这种情况不符合现实。既然是同一个工程,模块之间自然都会存在一定的联系,只要想办法让模块之间的关系尽量简单就可以了。2接口简单化:让模块之间的接口尽量单纯、简单、易用。即让公用函数和公用变量尽量地少。3分层处理:吸取Windows操作系统对模块做分层处理的经验。建立一些中间模块,让两端的模块来完成相互调用的透明化。4容易合并:容易将划分的模块进行合并。例如将一个工程的各个功能模块分别设计成可执行文件,然后用一个总模块将这些模块关联起来组成一个工程。这种情况下,对模块独立性要求较高,模块之间几乎没有任何关系。5可测试性:尽量使每个模块都可以单独进行测试。上面的5条是参考原则。既然是参考原则就不会完全执行。完全按照一个教条去执行真的很困难。只要在做模块划分的时候能经常记起这些原则,然后稍加注意就OK了。另外,在这5条原则中,第一条是根本,能把这一条做好,下面的一些就容易实现了。在做模块划分时一定要始终贯穿独立性的思想。商业源代码,全套计算机免费下载 ibaidusoft更多全套设计联系QQ:1042897696最新设计大全 bylw168/sf/20XX0915/3539.3.3 模块的划分本设计中在大体上分为两种模块:DLL功能模块和EXE功能测试模块。根据开关的种类将每个种类写成独立的DLL模块,在此分成2个DLL模块单刀单掷模块、单刀双掷模块。DLL模块主要负责设计输入、输出接口、开关功能及瞬态响应特点,以便在实验时,通过特定的接口调用这些器件功能,将这些全部封装在DLL工程中。根据写好的DLL功能模块,通过编写的测试程序分别测试每个DLL模块的实现情况,直观的显示开关类部件的仿真实现。3.4 开关的种类及特性3.4.1 开关的种类开关可以根据其结构特点、极数、位数、用途等进行分类。1按照开关按结构特点分类:按钮开关、拨动开关、薄膜开关、水银开关、杠杆式开关、微动开关、行程开关等。 2按照开关按极数、位数分类:单极单位开关、双极双位开关、单极多位开关、多极单位开关和多极多位开关等。 3按照开关按用途分类:电源开关、录放开关、波段开关、预选开关、限位开关、脚踏开关 转换开关、控制开关等。 在本设计中主要研究的是机械类开关,笔者大体将其归纳为三类:分为单刀单掷开关,单刀双掷开关,键盘开关,由于技术上还存在一些问题,因此在本次设计中没有成功设计出相应的键盘类开关的功能模块,还有待将来的研究和改进。3.4.2 开关的主要参数开关的主要参数有额定电压、额定电流、接触电阻、绝缘电阻及寿命等。1最大额定电压:是指在正常工作状态下开关能容许施加的最大电压。若是交流电源开关,通常用交流电压作此参数。 2最大额定电流:是指在正常工作状态下开关能容许通过的最大电流。若电压标注为交流(AC),则电源也指交流。 3接触电阻:开关接通时,“接触对”(两触点)导体间的电阻值叫做接触电阻。该值要求越小越好,一般开关多在20m(即0.02)以下,某些开关及使用久的开关则在0.10.8。 4绝缘电阻:指定的不相接触的开关导体之间的电阻称为绝缘电阻。此值越大越好,一般开关多在100M以上。 5耐压:也叫抗电强度,其含义是指定的不相接触的开关导体之间所能承受的电压。一般开关至少大于100V;电源(市电)开关要求大于500V(交流,50Hz)。 6寿命:是指开关在正常条件下能工作的有效时间(使用次数)。通常为500010000次,要求较高的开关为50000500000次。 对一般电子制作实验来讲,选用及掉换开关时,除了型号或外形等需要考虑外,参数方面只要注意额定电压、额定电流和接触电阻三项便可以了。3.4.3 瞬态响应特点当开关由断开状态变到闭合状态或由闭合状态到断开状态时,并不是在瞬间就改变状态的,需要一定的响应时间,虽然只是毫级的时间差,肉眼无法观察的到的. 下面根据图1来说明开关的响应时间:图1开关时间响应说明图当开关在收到电平信号,要求闭合时(或要求断开时),并不是瞬间就闭合(或断开)的,就是说不是从图中t1处直接变到t6处的(或从t6处直接变到t11处的),而是需要经过一定的状态变化,最后才由t1处的状态变到t6状态的(或从t6处的状态变到t11处的状态的).而其中的状态变化形成的原因可能是由于电流,电压,或其他的原因(不同情况原因不同)导致开关在这一瞬间形成不稳定的状态,在闭合与断开两种状态多次随即的变化,这种变化是我们用肉眼看不到的,我们看到的只能是状态由t1变到t6,再由t6变到t11这个过程。响应时间从使用角度来看,就是开关从闭合到断开或从断开到闭合过程中所延迟的时间.响应时间主要取决于其寿命、绝缘电阻及接触电阻,所以不同材料制得的开关响应时间各不相同。4 开关类部件的仿真实现4.1 程序主要功能介绍在Visual C+环境下分别建立关于单刀单掷开关和单刀双掷的DLL工程,工程中封装了开关类器件被外界平台调用的输出接口函数,获得信号的输入函数,还有单刀单掷开关、单刀双掷开关在鼠标控制下状态的改变,管脚信息的改变和开关在断开与闭合或在闭合与断开的瞬间产生的时间响应。4.2 程序设计结构介绍4.2.1 开关类器件实现功能框图图2开关类器件实现功能框图左部分图3开关类器件实现功能框图右部分系统的整个功能框图如图2和图3所示。其中的上层程序可以是器件功能测试程序,也可以整个仿真实验平台程序。器件DLL的设计与实现为本的主要内容。4.2.2 入口函数利用MFC的AppWizard自动生成的DLL框架中没有显式的调用DLLMain入口函数,但是对于每个DLL来说,将自动生成一个CWinApp派生类的对象,它会在派生类的成员函数InitInstance和ExitInstance中完成必要的初始化和终止工作。4.2.3 输出接口函数对于使用AppWizard创建的MFC DLL,AppWizard会创建一个DEF文件的框架,并自动增加到工程中,然后在DEF文件中增加用于输出的。;DLL名字LIBRARY DSwitchDLL;DLL描述DESCRIPTION DSwitchDLL Windows Dynamic Link Library;输出函数及其编号EXPORTS 在此加入被调用的函数4.2.4 主要功能函数介绍1、画图函数DrawObject(CDC *pDC):是负责画图的,在程序中设定画笔,并设置字体,背景颜色,文本颜色及指示确定在测试程序中开关的各种状态图(断开状态图、波动期状态图、闭合状态图)的具体画法。2、计时器函数OnTimer(CDC *pDC ):是设置响应时间发生过程的。当开关闭合或者断开时,进入一个不稳定的时期,在这个时期开关的状态是随即在0和1之间变化的,也就是图4中带有峰值变化的阶段,通过加载DLL文件的应用程序(测试程序)每隔一定时间调用该函数,表达开关的这种变化。图4开关的随即状态显示3、鼠标捕捉函数MouseEvent(int event , CPoint pt):是负责捕捉鼠标信息的,利用鼠标响应模拟开关动作,当鼠标点击开关时,根据鼠标开关的状态(断开、闭合),改变开关的状态,进入时间响应相应的波动期。4、输入函数OutSig(int iPinNo , int iSigVal ):是外部给某个管脚的信号值。当函数OutSig调用函数SetPin(int iPinNo,int iSigval)时,将信号值传递给SetPin,而后SetPin指示下一步该执行什么操作。5、显示函数DispMsg(CString s):负责显示当前状态,在特定的文本框中输出文本信息,显示现在在执行的动作。属于VisualexDoc的成员函数。4.3 单刀单掷开关功能实现4.3.1 工程创建首先打开Visual C+6.0操作界面,建立工程类型为MFC AppWizarddll的对话框文档的新工程,工程名字为D2SwitchDL系统自动为用户创建CDSwitch1DLLApp这个类。创建过程如图5新建工程和图6应用程序向导所示:图5新建工程图6应用程序向导4.3.2 添加基类将Dponent.cpp和line.cpp两个基类及他们各自的头文件Dponent.h和line.h添加到工程中去,具体如图7插入文件所示:图7插入文件先将Dponent.cpp和line.cpp两个基类及他们各自的头文件Dponent.h和line.h拷贝到DSwitch1DLL当中,然后在FileView中分别在Source Files和Header Files文件夹点击右键选择“添加文件到目录”一项,就会出现上图,分别点击要选的选项添加到各自的文件夹中。4.3.3 创建功能函数分别创建两个由基类派生的类开关的功能类DSwitch1和演示类VisualexDoc具体方法是这样的:点击插入类,就会出现图8新建类的提示框:图8新建类在类的类型中选择Generic Class 名称分别为DSwitch1和VisualexDoc,然后点击确定就会出现两个类及各自的头文件了。接下来分别在类里面写出功能函数。4.3.4 单刀单掷开关代码实现单刀单掷开关的有四种状态分别是:闭合状态,断开状态,由闭合转为断开的波动期,由断开转为闭合的波动期。利用DrawObject(CDC *pDC)函数进行设置,在具体程序代码如下:if(ss=0)CPen pen,*pold;pen.CreatePen(PS_SOLID,3,RGB(200,0,0);pold = pDC-SelectObject(&pen);pDC-MoveTo(Pin1.Start.x,Pin1.Start.y);pDC-LineTo(Pin2.Start.x,Pin2.Start.y);pDC-SelectObject(pold);else if(ss = 1)CPen pen,*pold;pen.CreatePen(PS_SOLID,3,RGB(200,0,0);pold = pDC-SelectObject(&pen);pDC-MoveTo(Pin1.Start.x,Pin1.Start.y);pDC-LineTo(Pin2.Start.x,Pin2.Start.y-20);pDC-SelectObject(pold);elseCPen pen,*pold;pen.CreatePen(PS_SOLID,3,RGB(200,0,0);pold = pDC-SelectObject(&pen);pDC-MoveTo(Pin1.Start.x,Pin1.Start.y);pDC-LineTo(Pin2.Start.x,Pin2.Start.y-rand()%20);pDC-SelectObject(pold);接下来通过OutSig(int iPinNo,int iSigval)函数读取输入信息,判断开关的状态,用鼠标响应模拟开关动作,鼠标点击开关,如果是断开状态,执行MouseEvent(int event , CPoint pt)函数,改变开关的状态,由断开转为闭合的波动期,调用DispMsg函数在测试程序的信息框中显示“开关将由断开转为闭合的波动期”。执行时间响应函数OnTimer(CDC *pDC ),开关变为闭合状态,调用DispMsg函数在测试程序的信息框中显示“开关波动结束”。具体代码如下:int D2Switch:MouseEvent(int event , CPoint pt) if(ss = 0 )ss = 3;tstart = 0;pParent-DispMsg(开关将由闭合转为断开的波动期);if(ss = 1)ss = 2 ; tstart = 0 ;pParent-DispMsg(开关将由断开转为闭合的波动期);return 1 ;int D2Switch:OnTimer(CDC *pDC ) if(ss = 2 | ss = 3)tstart += rand() % 10;if(tstart 100)ss -= 2 ;pParent-DispMsg(开关波动结束);DrawObject(pDC) ;return 1 ;如果是闭合状态,执行MouseEvent(int event , CPoint pt)函数,改变开关的状态,由断开转为闭合的波动期,调用DispMsg函数在测试程序的信息框中显示“开关将由闭合转为断开的波动期”。执行时间响应函数OnTimer(CDC *pDC ),开关变为闭合状态,调用DispMsg函数在测试程序的信息框中显示“开关波动结束”。4.4 单刀双掷开关的功能实现单刀双掷开关的初期设置上,基本跟单刀单掷的功能设置是相同的。他们的不同之处就在于功能函数和仿真的实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食品企业应对飞行检查注意事项及策略
- 教育培训课程定制与实施协议
- 生物制药技术工艺知识习题集
- 物理电学原理试题库
- 小学教育中的多元化评价方式
- 古汉语基础练习:初中英语语法技巧辅导
- 活动安排表格-工作日程表管理
- 污染治理措施的有效性评估与改进
- 国际商务文化与交流测试题
- 教育学历及相关资格证书证明(5篇)
- 镇江市京口区2024-2025学年小升初总复习数学测试卷含解析
- 不断提升法治素养课件
- 部编2024版历史七年级下册期末(全册)复习卷
- DB32T3434-2018人民防空核生化监测中心工程设计规范
- 防火门维护与保养流程
- 人大代表应聘简历
- 【MOOC】《Python语言程序设计》(东北大学)中国大学慕课答案
- 23《海底世界》说课稿- 2023-2024学年统编版语文三年级下册
- 2025年广西宏桂集团招聘笔试参考题库含答案解析
- 起重机培训课件-指挥职责及操作
- 经济地理学讲义(2024级)
评论
0/150
提交评论