毕业设计(论文)基于图形编程的工业控制算法仿真系统设计_第1页
毕业设计(论文)基于图形编程的工业控制算法仿真系统设计_第2页
毕业设计(论文)基于图形编程的工业控制算法仿真系统设计_第3页
毕业设计(论文)基于图形编程的工业控制算法仿真系统设计_第4页
毕业设计(论文)基于图形编程的工业控制算法仿真系统设计_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 内蒙古科技大学 实训报告实训题目: 基于图形编程的工业控制算法仿真系统设计 指导教师 : 报告人姓名: 专 业 : 控制理论与控制工程 报告人学号: 日 期 : 2011年12月30日 目 录目 录1第一章 绪论31.1本课题的研究背景和意义31.2组态软件31.2.1组态软件的特点41.2.2组态软件的功能与发展41.3本课题的研究内容5第二章 总体设计方案62.1 总体设计思路62.2面向对象的设计方法72.3设计所用的开发平台和工具8第三章 功能模块的设计93.1 iec61131-3标准93.2 功能块图(fbdfunction block diagram)的有关内容103.3 本课

2、题中设计的功能块113.3.1功能块的类及其信息113.3.2功能块的添加133.3.3 功能模块的操作过程153.3.4图形元素的存取过程173.3.5 双缓冲绘图19第四章 控制系统组态204.1 控制组态图204.1.1控制组态图绘制过程204.1.2 直线操作过程214.1.3 该软件中画出的控制组态系统234.2 组态编译234.3组态算法274.4 控制系统结构图的运行314.5 通信下载32第五章 总结35参考文献36 第一章 绪论1.1本课题的研究背景和意义随着经济的发展、技术的进步,冶金、电力、化工、制药等行业的自动化应用水平逐年提高,以往简单的由继电器、接触器构成的自动控制

3、系统已经被以微控制器为核心的先进控制器器取代,具备高可靠性、强实时性、强大运算能力的先进控制器是工业企业自动化应用的核心设备。目前,工业控制中应用的控制器以plc、工控机以及dcs工作站为主,特别是在以plc为代表的顺序控制,以及以dcs为代表的过程控制中,梯形图、结构图为代表的图形化编程方法具有开发简单、可靠性好的突出优点,得到了广泛的应用。目前,plc的核心技术把握在西门子、三菱等少数国外厂家的手中,一方面造价很高,另一方面其扩展性受到plc生产厂家的限制,不利于企业特别是中小企业大规模的推广和应用。而在流程工业中广泛应用的dcs系统中,其控制器一般以dcs工作站的形式提供,具有控制系统回

4、路组态的能力,其缺点是成本较高,厂家一般提供整体解决方案,不同厂家间的异构系统难以集成。本课题提出一种先进控制器的研发方案,支持控制系统回路组态的能力,支持以结构图为代表的过程控制,类似传统dcs系统的工作站,可用于中小型过程控制系统。开发一种同时具有顺序控制和过程控制功能的先进控制器,支持图形化编程方法,具有成本低、可靠性高、计算能力强的优点。该控制器的研发将为工业企业的自动化应用提供一种低成本的解决方案,可以一定程度上替代造价高昂的plc等控制器,具有广阔的应用前景。工程中普遍使用的组态软件在进行控制组态时,控制策略基本都需要自动化工程技术人员通过编写相应的程序代码来完成,而且多数组态软件

5、都不提供控制策略的仿真功能,不利于工程人员的组态工作。尤其是系统调试时,必须在控制室现场进行,由于不能直接查看各算法模块的输出结果,也就不能直观的了解控制策略的控制性能,显然不利于降低调试成本和降低工艺投放风险。因此,有必要开发人机界面友好、操作简单方便、组态灵活,且支持仿真的控制组态软件。1.2组态软件组态软件,又称组态监控软件系统软件。译自英文scada,即 supervisory control and data acquisition(数据采集与监视控制)。它是指一些数据采集与过程控制的专用软件。它们处在自动控制系统监控层一级的软件平台和开发环境,使用灵活的组态方式,为用户提供快速构建

6、工业自动控制系统监控功能的、通用层次的软件工具。组态软件的应用领域很广,可以应用于电力系统、给水系统、石油、化工等领域的数据采集与监视控制以及过程控制等诸多领域。在电力系统以及电气化铁道上又称远动系统(rtu system,remote terminal unit)。1.2.1组态软件的特点 组态软件在国内是一个约定俗成的概念,并没有明确的定义,它可以理解为“组态式监控软件”。 “组态(configure)”的含义是“配置”、“设定”、“设置”等意思,是指用户通过类似“搭积木”的简单方式来完成自己所需要的软件功能,而不需要编写计算机程序,也就是所谓的“组态”。它有时候也称为“二次开发”,组态软

7、件就称为“二次开发平台”。 “监控(supervisory control)”,即“监视和控制”,是指通过计算机信号对自动化设备或过程进行监视、控制和管理 组态软件是有专业性的。一种组态软件只能适合某种领域的应用。组态的概念最早出现在工业计算机控制中。如dcs(集散控制系统)组态,plc(可编程控制器)梯形图组态。人机界面生成软件就叫工控组态软件。在其他行业也有组态的概念,如autocad,photoshop等。不同之处在于,工业控制中形成的组态结果是用在实时监控的。从表面上看,组态工具的运行程序就是执行自己特定的任务。 工控组态软件也提供了编程手段,一般都是内置编译系统,提供类basic语言

8、,有的支持vb,现在有的组态软件甚至支持c#高级语言。1.2.2组态软件的功能与发展 组态软件指一些数据采集与过程控制的专用软件,它们是在自动控制系统监控层一级的软件平台和开发环境,能以灵活多样的组态方式(而不是编程方式)提供良好的用户开发界面和简捷的使用方法,它解决了控制系统通用性问题。其预设置的各种软件模块可以非常容易地实现和完成监控层的各项功能,并能同时支持各种硬件厂家的计算机和i/o产品,与高可靠的工控计算机和网络系统结合,可向控制层和管理层提供软硬件的全部接口,进行系统集成。 作为通用型工具软件,组态软件在自动化系统中始终处于“承上启下”的地位。用户在涉及工业信息化的项目中,如果涉及

9、到实时数据采集,首先会考虑试用组态软件。正因如此,组态软件几乎应用于所有的工业信息化项目当中。应用的多样性,给组态软件的性能指标、使用方式、接口方式都提出了很多新的要求,也存在一些挑战。这些需求对组态软件系统结构带来的冲击是巨大的,对组态软件的发展起到关键的促进作用。功能变迁:仍以人机界面为主,数据采集、历史数据库、报警管理、操作日志管理、权限管理、数据通讯转发成为其基础功能;功能组件呈分化、集成化、功能细分的发展趋势,以适应不同行业、不同用户层次的多方面需求。新技术的采用:组态软件的it化趋势明显,大量的最新计算技术、通讯技术、多媒体技术被用来提高其性能,扩充其功能。注重效率:实际上,有的“

10、组态”工作非常繁琐,用户希望通过模板快速生成自己的项目应用。图形模板、数据库模板、设备模板可以让用户以“复制”方式快速生成目标程序。组态软件注重数据处理能力和数据吞吐能力的提高:组态软件除了常规的实时数据通讯、人机界面功能外,1万点以上的实时数据历史存储与检索、100个以上c/s或b/s客户端对历史数据库系统的并发访问,对组态软件的性能都是严峻的考验。1.3本课题的研究内容 研发具有类plc功能的控制器,该控制器支持以结构图为代表的过程控制,支持图形化编程方法。上位机组态软件支持功能块的编程方式,兼容iec6113-1国际标准,支持控制系统回路组态,工程师只需要绘制控制系统结构图即可实现对控制

11、器的编程和在线调试。 本课题主要研究功能块的实现,数据的存取,以及结构图的画法与编译等。模块所在回路号以及在回路中的编号在通过编译后可以正确显示。模块流水号是在每次组态的具体操作过程中,按照调用顺序而记录的全局唯一的模块id号,由系统自动生成,用户不能修改。另外,为每种类型的算法功能模块设计了属性对话框,以方便地配置模块参数。这样,使用鼠标双击算法功能模块,弹出属性对话框,用户填入相应的参数,点击确定保存即可,使用序列化在文档中保存参数。 第二章 总体设计方案2.1 总体设计思路本文所要讲述的上位机控制组态软件是指对下位机的控制系统回路组态,与wincc等绘制界面的组态软件有所区别。上位机软件

12、采用visual studio 2010编程实现,设计包括各个算法功能模块的设计,控制系统组态的画法、控制系统组态编译,图形元素的存取等模块。兼容iec61131-3国际标准。本设计实现控制系统回路组态的功能,实现加减法、限幅、开关量输入、模拟量输入、开关量输出、模拟量输出,支持模块的并联、串联、反馈、前馈等复杂连接,支持pid、模糊等常用控制算法及换热站控制专用的预测控制算法。其中开入开出、模入模出与控制器的硬件接口相对应。当绘制完控制系统回路组态图后,将其编译,再通过rs-232串口下载到控制器,控制器自动实现plc指令的解释执行以及控制系统回路组态的解释执行。本课题开发的控制组态软件的用

13、户界面,是基于.visual studio2010的mdi多文档/视结构的。它的外观是一个图形编辑器,为用户提供多种算法功能模块、连线、文本、实时趋势、xy曲线以及页面跳转按钮等图元的绘制,并实现这些图元的添加、删除、移动等操作。控制组态软件的组态环境简单大方,操作方便易学,支持丰富的算法功能模块。使用这个软件,用户可以很方便的进行控制策略的组态。组态软件的启动画面如下图图2.1所示: 图2.1组态软件启动画面控制组态软件的组态环境如图2.2所示。 图2.2控制组态软件的环境整个界面的组成,包括标题栏、菜单栏、常用工具栏、绘图工具栏、工程管理栏、调试输出栏、视图绘制区以及状态栏等。为了美观和实

14、用,以及工程信息和调试信息的实时显示。视图区就像是用户进行控制策略组态的一块画布,在这块画布上,可以对控制回路进行构建、修改和删除。使用配置文件,保存用户对窗口显示状态的配置信息,如是否显示常用工具栏等,这样可以使窗口总是按照用户的喜好进行显示。总体设计的框架图如下图2.3所示: 图2.3总体设计的框架图2.2面向对象的设计方法面向对象方法(object oriented method)是当前软件开发方法中最实用、最流行的软件开发方法之一,是一种新的程序设计思想和认知方法学。面向对象的基本特征为封装、继承和多态,面向对象的程序具有模块化特点,且具有很好的灵活性和可重用性。本课题中在进行软件开发

15、时,采用了面向对象的设计方法,最基本的原因在于,在控制组态软件中,对控制策略的组态采用了图形化的方式,具备图标驱动的功能。这种实现的基础是将工控系统里常用的控制过程分解为若干算法功能模块进行开发,这些算法功能模块具备一些公共的属性和方法,用户通过调用需要的算法功能模块,可以搭建满足要求的控制回路,继而进行后续的操作。以类的形式定义算法功能模块,创建的对象是控制组态系统中的基本构成元素,这有利于对算法功能模块的统一管理,也使得软件的开发细节更加清晰,进而有利于系统中更复杂功能的实现。2.3设计所用的开发平台和工具九十年代以来,windows操作系统风靡全球,它几乎占领了pc机软件市场的各个领域,

16、工业控制和生产管理也不例外。windows具有功能更强的图形用户接口,更完善的内存管理方式、多任务管理、更好的网络支持与丰富多彩的应用软件。本着“计算机适应人”的原则,在对控制组态软件的设计时,采用了目前工控界通用的windows2000平台,在此平台上,充分利用windows系统的资源,开发人机界面更加友好,功能更加强大的控制组态软件。本课题采用microsoft公司的visual studio2010作为软件开发工具,主要是基于以下几点考虑的:1.c+语言提供了完备的面向对象的语言机制,为面向对象编程提供语言基础,便于进行系统设计和项目管理。2.visual studio2010提供了一个

17、强大的类库mfc(mierosoftfoundationclass)。该类库对windows窗口系统及其它系统的调用进行了完备的封装,并提供了对常用数据集类的支持,使用mfc可使软件的开发工作更加简单和高效。3.c+语言是当今流行的高级开发语言,代码效率比较高,对跨平台的兼容性也较强,便于以后进行组态软件的二次开发工作,提高系统的可扩展性。4.组态软件的数据库系统采用sqlserver2000,visuals tudio2010提供了odbc(opendatabaseconneet)接口和ado(aetivexdataobjeets)接口等。 第三章 功能模块的设计3.1 iec61131-3

18、标准iec61131-3国际标准得到了包括有美国ab公司、德国西门子公司等世界知名大公司在内的众多厂家的共同推动和支持,它极大地改进了工业控制系统的编程软件质量及提高了软件开发效率;它定义的一系列图形化语言和文本语言,不仅对系统集成商和系统工程师的编程带来很大的方便,而且对最终用户同样会带来很大的方便;它在技术上的实现是高水平的,有足够的发展空间和变动余地,使得能很好地适应发展。iec61131-3是当今世界第一个为工业自动化控制系统的软件设计提供标准化编程语言的国际标准。此前,国际上没有出现过有实际意义、为制定通用的控制语言而开展的标准化 活动。这个标准将现代软件的概念和现代软件工程的机制与

19、传统的plc编程语言成功地结合,又对当代种类繁多的工业控制器中的编程概念及语言进行了标准化。它为可编程控制器软件技术的发展,乃至整个工业控制软件技术的发展,起着举足轻重的推动作用。可以说,没有编程语言的标准化便没有今天 plc走向开放式系统的坚实基础。iec61131-3规定了二大类编程语言即文本化编程语言和图形化编程语言。前者包括指令清单语 言(il)和结构化文本语言(st);后者则有梯形图语言(ld)和功能块图语言(fbd)。在标准的文本中没有把顺序功能图(sfc)单独列入编程语言,而是将它在公用元素中予以规范。这就是说,不论在文本化语言中,或者在图形化语言中,都可以运用 sfc的概念、句

20、法 和语法。但习惯上也把它叫做另一种编程语言。这五种编程语言都是依据工业控制的基本元器件及由其构成的网络或电路,采用某种在计算机上仿真它们的工作原理和功能而形成的。梯形图(ld)语言是将并行动作的机电元件(诸如继电器触点和线圈、定时器、计数器等)网络加以模型化。功能块图(fbd)语言 则是将并行动作的电子元件(诸如加法器、乘法器、移位寄存器、逻辑运算门等)的网络予以模型化。而结构化文本(st)语言将典型的信息处理任务(如在通用的高级语言 pascal 中的使用数值算法)予以模型化。指令表(il)语言却是将汇编语言中控制系统的低层编程予以模型化。顺序功能图(sfcs)将时间驱动和事件驱动的顺序控

21、制设备和算法模型化。 iec 61131-3标准的结构图如下图3.1所示: 图3.1 iec61131-3标准的结构图使用iec61131-3语言编写工控系统软件的主要优越性是:具有面向工业自动化设备控制的图形化编程功能;具有计算机高级编程语言的结构化和面向对象特征,提供强大的系统规划、功 能模块划分、组合和封装功能;具有处理复杂和高精度计算的能力:具有丰富的程序循环控制和逻辑运算处理功能; 3.2 功能块图(fbdfunction block diagram)的有关内容功能块图用来描述功能、功能块和程序的行为特征,还可以在顺序功能流程图中描述步、动作和转变的行为特征。功能块图与电子线路图中的

22、信号流图非常相似,在程序中,它可看作两个过程元素之间的信息流。功能块图普遍地应用在过程控制领域。功能块用矩形块来表示,每一功能块的左侧有不少于一个的输入端,在右侧有不少于一个的输出端,功能块的类型名称通常写在块内,但功能块实例的名称通常写在块的上部,功能块的输入输出名称写在块内的输入输出点的相应地方。功能块概念是iec 61131-3标准编程系统的一个重要的特征。任何功能块可以用其它的更小的更易管理的功能块来编程,这样就可以由许多的功能块创建一个有层次的结构合理的程序。iec 61131-3还允许程序设计人员利用现有的功能块和其它的软件元件生成新的功能块。功能块能够被指定参数,并有静态变量。对

23、于相同的输入,其输出被其内部变量和外部变量所影响,输入输出数量没有限制。功能块fb类型是该标准中的核心元素,它体现了一种全新的面向对象程序设计理念。 功能块类型对应于经典面向对象语言中的类的概念,功能块的实例(instance)对应于对象的概念。功能块类型具有天然的封装特性,能够把特定的算法封装在某个特定的功能块中,它把具体的操作和操作数据相分离,也把系统的总体算法组态和单个算法的研制开发过程分开,以增加程序的可重用性和移植性功能块图语言fbd用来描述功能、功能块和程序的行为特征,还可以在顺序功能流程图中描述步、动作和转变的行为特征。功能块用矩形块来表示,每一功能块的左侧有不少于一个的输入端,

24、在右侧有不少于一个的输出端,线条代表的是信号的流向,所传递的信息可能是一个布尔数值、整型数值、实数或者是一个字符串,在程序中,它可看作两个过程元素之间的信息流。 3.3 本课题中设计的功能块 算法功能模块是对具体算法的抽象实现。在图形化组态界面上,每种具体的控制算法对应一种算法功能模块,以方框图的形式显示,用户只需用简单的鼠标操作就能将指定的算法功能模块添加到指定的控制回路中,或从指定的控制回路中删除,还可以修改具体参数,从而完成对控制策略的组态。算法功能模块在控制组态界面中的显示是带有输入输出端子的矩形。3.3.1功能块的类及其信息fbdpoint类中给出了每个模块的信息,每个模块的画法与每

25、个模块的各个信息,例如模块的名字,模块的输入与输出端口数,模块的输入与输出端口在模块的什么位置等。每个模块都是用直线画出的,用串行化函数存取模块的信息。 先在fb*:put_img(int x,int y,cdc *pdc)函数中用画直线函数画出模块的形状,再在fb*:print(int x,int y,cdc *pdc)和重载的fb*:put_img(int x,int y,cdc *pdc)函数中写出模块的名字的信息。首先用白色的画刷将区域中的像素点覆盖掉。再在合适的位置写上模块的信息。算法功能模块类的派生与继承关系图如下图3.2所示: 图3.2算法功能模块类图下面以加法器来说明功能模块的

26、实现过程: 在fbdpotin中由fbadd(int x,int y,int flg,cstring cd=fbadd,cstring nm=,cstring ad=) :fbdpoint(x,y,flg,cd,nm,ad)给出加法器的信息;inportseat设置输入端子位置,outportseat设置输出端子的位置, parameteri表示属性username=add表示模块的名字,fbdhigh=100表示模块的高度,fbdwidth=90表示模块的宽度setinportnum(2)表示模块有几个输入端子,setoutportnum(1)表示模块有几个输出端子,setcode(fbad

27、d)表示模块的代码。void set*(const cstring io*)和void get*(const cstring io*)函数来设置模块的信息。 在void fbadd:put_img(int x,int y,cdc *pdc)函数中实现模块的画法,pdc-moveto( , )和pdc-lineto( , )画线,通过多条直线的组合画出模块。函数void fbadd:print1(int x,int y,cdc *pdc,cstring name)和其重载函数void fbadd:print(int x,int y,cdc *pdc)实现模块的打印。其他模块的设计与加法模块相似。

28、加法模块的图形如图3.3所示: 图3.3加法模块对于fbadd加法模块,inportseat0=2,inportseat1=0,inportseat2=8,inportseat3=0,outportseat0=5,outportseat1=9,inportnum=2, outportnum=1。若模块的坐标为(m,n),则第一个输入端的坐标为(m+2,n=0),第二个输入端的坐标为(m+8,n+0),输出端的坐标为(m+5,n+9)。在point_array中存放信息时,先y后x,即先行后列。系统中有下图3.4中所示的四种模块: 图3.4 系统中的模块3.3.2功能块的添加首先介绍一下如何把功

29、能块画在视图客户区。以用户输入模块为例来说明。第一步: 首先创建一个fbuin类。在fbdpoint.h和fbdpoint.cpp中加入相应的程序代码。第二步: 打开资源视图,在cursor文件夹中,点击插入cursor,插入一个新的cursor,用画图工具,画出用户输入模块的图标入下图3.5所示, 图3.5用户输入模块的图标画完图标后,右键点选属性对话框,如下图3.6所示,将其中的id项改成idc_fbuin。 图3.6属性对话框 在toolbar文件夹中选择idr_fbtype,加入用户输入模块的图标入下图3.7所示: 图3.7工具条设置其id属性,如下图3.8所示,id为id_draw_

30、fbuin,prompt为n用户输入。 图3.8属性对话框第三步:在cdp中的header files文件夹中,打开resource.h文件,找到id_draw_fbuin的id地址。 函数cfbdview:onselectdrawtype(uint nid)给出了如何设置莫个模块的id地址。第四步: 在cfbddoc.cpp中的void cfbddoc:serialize(carchive& ar)函数输入相应的程序代码实现数据的序列化。在 void cfbddoc:insert_point(uint pid, int x, int y, int row, int col, cdc *pdc

31、)函数中加入相应的程序代码,实现插入对应id的功能模块。第五步:在cfbdview.cpp中的void cfbdview:onlbuttondown(uint nflags, cpoint point)中加入相应的程序代码,实现左键按下时对模块进行操作。在函数bool cfbdview:onsetcursor(cwnd* pwnd, uint nhittest, uint message)中加入相应的光标设置的函数。第六步: 在左键按下消息响应函数中要包括所要操作的所有的功能模块范围。将所有的模块信息都加入系统后,就可以绘图了。3.3.3 功能模块的操作过程算法功能块的操作包括选中模块,放置模

32、块,移动模块,删除模块等。 对算法功能模块的操作过程流程如下图3.9所示: 图3.9算法功能模块的操作流程deletepoint函数删除模块,deletefbdport函数删除模块的输入输出端口。onmousemove函数鼠标拖动时,在工作区域内实时的确定坐标,状态栏显示实时的行列值,鼠标拖动的过程中可能是画直线也可能是移动模块。画直线时画在纵横实际坐标差值较大的方向上。移动模块时,要在原位置的模块及存储信息清除并画上标示单元格的点阵。图形覆盖部分的重绘操作,需要注意几种不同的覆盖方式。考虑新放置的算法功能模块与原来的算法的模块的位置关系。如果一条直线被覆盖了,这这个系统里面目前还没有加入对其

33、的重绘操作。图形覆盖有四种情况,后模块在前模块的左上,左下,右下,右上。如下图3.10所示: 图3.10 模块覆盖方式若seclect_flag=1、2、3、5、6、7、8、9、10、11、12、13考虑覆盖方式是否是下面的情况如下图3.11所示: 图3.11 模块覆盖方式图形覆盖的重绘流程图如下图3.12所示: 图3.12 图形覆盖情况的判断3.3.4图形元素的存取过程为了永久的保存数据与图形信息,必须进行文档的串行化处理,文档数据的串行化处理是由文档类的成员函数serialize处理的,在mfcappwizard生成应用程序的基本框架时,已经定义了serialize函数的基本框架,必须往基

34、本框架中添加文档数据的实际读写代码。串行化是微软提供的用于对对象进行文件i/o的一种机制,该机制在框架(frame)/文档(document)/视图(view) 模式中得到了很好的应用。使用这种方式进行i/o的好处时,利用运算符重载功能,可以用一个语句完成对一系列的对象的读写,而不需要区分对象具体的类型。mfc提供了类carchive,实现了运算符的重载,希望按照cin和cout 的方式进行文件i/o。通过和cfile类的配合,不仅仅实现了对简单类型如int/float等的文件读写,而且实现了对可序列化对象(serializable objects,这个概念后面描述)的文件读写。可见,对于一个

35、文件而言,如果文件内对象的排列顺序是固定的,那么对于文件读和写从形式上只有使用的运算符的不同。在mfc的框架/文档/视图结构中,一个文档的内部对象的构成往往是固定的,这种情况下,写到文件中时对象在文件中的布局也是固定的。因此cdocument利用其基类cobject提供的serilize虚函数,实现自动文档的读写。当用户在界面上选择文件菜单/打开文件(id_file_open)时,cwinapp派生类的onfileopen函数被自动调用,它通过文档模板创建(mdi)/重用(sdi)框架、文档和视图对象,并最终调用cdocument:onopendocument来读文件。在fbddoc中 cla

36、ss cline 共有继承了cobject类,而class cfbddoc共有继承了cdocument类。在fbd数据串行化存储对于一根线,我们可以知道与它相连的输入的模块号以及输入的id地址和输出的模块号和输出的id地址等。以数组的形式存储点的坐标。void cfbddoc:serialize(carchive& ar)序列化函数,从档案文件中读取对象,或者像档案文件中写入对象。序列化简化了对象的保存和载入,为对象提供了持久性。需要注意ar是有顺序的,先存先取。serialize完成的工作就是把对象的特征属性进行保存,打开其文件就可以看到。对于系统自带的类,系统已经预定义了其标志一个的特征数

37、据,比如crect,只需要知道left,top,height,width等,就可以完全确定一个矩形对象,这样在进行读操作的时候,就可以重新生成一个与保存前一样的对象。if (ar.isstoring() else ar.isloading判断当前的操作,并选择来保存和读取对象。首个point只存rows,cols两个值,读取时从_pointarray.get(0)读出。将每一个算法功能模块各种信息都序列化存储。存储的信息都是算法模块的特征信息,当我们要调用这个模块时,只要读取这些特征信息就可以通过绘图、显示等函数把功能模块在视图去显示出来,同时对其做相应的操作。使用序列化技术对数据存取,尤其针

38、对对象进行存取非常方便。mfc提供carchive对象实现序列化操作。通过使用carchive类并由其对cfile成员函数进行调用来执行文件i/o操作。mfc定义了一个虚函数serializeo实现序列化,用户使用时需重载此函数。现场控制站的配置信息是利用序列化技术保存的。模块所在回路号以及在回路中的编号在通过编译后可以正确显示。模块流水号是在每次组态的具体操作过程中,按照调用顺序而记录的全局唯一的模块id号,由系统自动生成,用户不能修改。另外,为每种类型的算法功能模块设计了属性对话框,以方便地配置模块参数。这样,使用鼠标双击算法功能模块,弹出属性对话框,用户填入相应的参数,点击确定保存即可,

39、使用序列化在文档中保存参数。3.3.5 双缓冲绘图 为了避免闪烁采用双缓冲绘图技术。各种图元在界面上的显示,是通过gdi绘图实现的。在对窗口进行重绘时,系统默认的处理是先擦除显示区,然后调用onpaint函数重新绘制图元。然而,由于图元的绘制与背景通常存在差别,刷新时,背景和新绘制图元的依次出现,会使界面发生明显闪烁。另外,当图元数量大时,进行整体刷新,绘图速度慢,更加大了闪烁的程度。为解决这一问题,首先对刷新区域进行了限定,只刷新需要重绘的一部分,但这只能提高绘图效率而不能解决根本问题。于是,又采用了双缓冲绘图技术,从根本上避免界面发生闪烁。双缓冲绘图本质上就是内存绘图。具体的过程是,先在内

40、存画布上将所绘制完成,再一次性的将内存中图元的每个点拷贝到屏幕上。这是一个极内存拷贝过程,无论对其中图元的绘制与背景有多大的反差,都不会有闪烁象发生。需要协同的是,重载onerasebkgnd函数,利用背景画刷填充背景进行背景擦除。第四章 控制系统组态4.1 控制组态图在组态方式的设计上,采用图形组态的方法。与填表式组态方法相比,图形组态更加形象,能够更直观得体现工程师的组态思想。组态工程师只需按照自己的控制策略,选用功能块库中的功能块,按照搭积木的方式搭接起该回路的控制回路图,即可自动生成该回路的控制源程序。组态工程师通过组态软件作图系统生成组态回路图,进而由模型生成系统将其与控制模型的功能

41、块库相结合,生成被组态控制系统的源程序,下装以后参与仿真模型的运行,运行结果反馈给组态人员,实现在线组态。4.1.1控制组态图绘制过程控制组态图的具体操作过程如下图4.1所示: 图4.1具体的画图过程在标题栏右键单击出现还原、最小化、关闭窗口等的对话框,在工具栏右键单击出现文件视图、watch、输出、属性和自定义等的对话框。在工具栏左键单击选中模块图标,在客户区左键单击放置选中模块图标,在模块区域内左键按下停留一定的时间拖动鼠标移动模块,移动到合适的位置后,松开左键,放置模块。选中删除按钮后,鼠标变成一个删除按钮的标志,在左键点击要删除的模块,即可将模块删除。把各个模块放置好后,要连线,将光标

42、放到模块的输入或者输出端口上,左键单击等鼠标变成十字形时,拖动鼠标即开始画线,画线完成时右键点击,结束画线。要画折线时,单击鼠标左键改变线的方向。注意模块的输入与输出点都是有属性的,必须在属性点才可以画线。整个图形画完后,点击工具栏里的编译按钮,即可以编译。编译后根据输出报告,编译不成功的对图形进行修改,直至编译结果完全正确。首先要设置视口的大小,以及滚动条的尺寸,还有字体的设置等。捕获光标所在的点的信息,对光标所在的位置进行分析,根据光标所在的位置的不同,以及消息命令的不同,去响应相应的操作。当使用监控画面编辑器绘制图形的时候,必须实现设备的无关性。所谓设备无关性,指的是一旦选择好坐标系,一

43、个图形就会在不同的设备上显示同样的小,显然这是图形编辑器的一个基本要求。除了在坐标像素的mmtext中,长度会随着实际设备不同而不同以外,其余的坐标系能够实现在不同的显示和输出设备上保证图形大小一致性。除了坐标系,图形编辑器中另外两个重要的概念是窗口和视口。窗口是指虚存在的一个屏幕,视口是在屏幕上看见的视图客户区域。windows绘图图形时,不是直接把图形绘制在屏幕上,而是按照设计的坐标系绘制在虚拟的窗口中,后将这个窗口内的内容映像到各个输出设备中,如果映像到屏幕上,就实现了图形的显示;如果映像到打印机上,就实现了图形的打印。图形编辑器中的图元绘制都是以逻辑坐标为基础,绘制在窗口上的;在图形显

44、示的时候windows操作系统再将其转换为设备坐标显示在屏幕上。4.1.2 直线操作过程画直线时,直线的起点是有属性的,必须在那点的信息为startpoint时才开始画线,直线的终点有同样的要求。直线的信息的存储是用的链表,编译时是以直线为依据的。这个系统中直线处理方面还有一个大问题有待于解决,就是画错了的直线的删除操作,这个系统里面还没有加入。有关直线操作的过程的大至流程图如下图4.2所示: 图4.2 画直线的过程 4.1.3 该软件中画出的控制组态系统 图4.3控制系统结构图4.2 组态编译在编译回路之前,首先要扫描各条直线的连接,以及直线和与其相连接的模块的属性。扫描视图区域,检测存储f

45、bd模块信息的指针是否为空。若不为空,看是否是画线开始的标志,线号流水是否为0,若当前点是画线开始标志,并且线号流水为0,说明没有直线连接。若链表的头指针为空说明没有模块或者没有连接模块。若链表的头指针非空,判断直线的输入端的是否接模块的输出端,并设置直线的输入与输出端的属性。若当前点不是画线的起始点,提示不是模块的输入与输出端。如果画线的起点是模块的输入端口,判断有没有连接带模块的输出口,以及输入输出口是不是连接到了同一个模块上,以及输入输出端口是否匹配。若画线的起点是输出端,同样考虑上述几个问题。扫描直线的程序流程如下图4.4所示。 图 4.4扫描直线信息在oncompilefbd 函数中

46、根据编译结果输出编译提示信息。其中precompile()函数的返回值为errorflag的值,若errorflag=0表示可能编译成功,errorflag=1表示编译失败。compile()返回值也是errorflag,若errorflag=0表示编译成功,否则编译失败。其流程图如下图4.5所示: 图4.5 编译提示信息编译回路时,以与输出端口相连的直线为索引,每条直线只编译输出端的模块。把所有的直线遍历一遍,找终点,如果compilelist中没有新成员加入,说明回路遍历完毕。遍历模块式时,分两种情况,从头模块开始向右遍历,从尾模块开始向左遍历。有时候可能是多回路,注意多回路编译时,回路号

47、,每一个回路的编译。在画直线时,系统直接根据直线起点和终点与模块的输入输出端口标识设置直线的流水号,使模块的输入输出端口与直线的流水号发生联系。模块所在回路号以及在回路中的编号在通过编译后可以正确显示。模块流水号是在每次组态的具体操作过程中,按照调用顺序而记录的全局唯一的模块id号,由系统自动生成,用户不能修改。另外,为每种类型的算法功能模块设计了属性对话框,以方便地配置模块参数。这样,使用鼠标双击算法功能模块,弹出属性对话框,用户填入相应的参数,点击确定保存即可,使用序列化在文档中保存参数。编译回路的流程图下图4.6所示: 图4.6回路编译4.3组态算法由功能模块库和组态序列相结合实现算法组

48、态,可以满足工业现场种类繁多的控制要求。组态序列是每个特定的处理周期中应用软件所需完成的功能集合和模块之间的消息传递序列,也是功能的选择和按前后顺序方式运行那个的组织形式。在控制任务运行过程中,当从flash中读取到某一模块时,首先在组态信息中解析出这个模块信息,然后调用该模块的算法,在模块内部完成相应的运算。sub减法温度给定,来源于用户输入温度反馈,来源于模拟通道1 pid模块mo模拟量输出模块输出到模拟量第1通道 以单闭环温度pid控制系统为例来说明, 图4.7单闭环温度pid控制系统控制回路组态帧格式如表4.1(方便起见,统一8字节)“e31”流水号回路号算法模块号输入参数1来源输入参

49、数2来源用户配置第2输入参数用户配置第2输入参数保留表4.1控制回路组态帧格式输入参数来源编码格式:bit7bit6bit5bit4bit3bit2bit1bit00:一般功能模块1:特殊功能模块当为0时,后7bit表示其输入来源于其他算法模块的输出编号;当为1时后7bit意义如图所示。内部变量编号,可以有16个输入通道000:用户输入001:模拟输入010:数字输入011:按键输入其他:保留 1算法模块算法编号算法名称算术表达式控制器实现函数名输入参数个数输出参数个数是否可以用户配置第二参数1加法wo=wi1+wi2c_add21是2减法wo=wi1-wi2c_sub21是3乘法wo=wi1

50、*wi2c_mul21是4绝对值wo=|wi1|c_absv11否5最大值wo=maxwi1,wi2c_max21是6最小值wo=minwi1,wi2c_min21是7比较if(wi1wi2) out: 1else out:0c_cmp2 1是8与bo=bi1&bi2c_and21是9或bo=bi1|bi2c_or21是10非bo=not bi1c_not21否11异或bo=bi1 xor bi2c_xor21是12普通pidwo=pid_function(wi1,wi2)c_pid_function21是13模糊pidwo=fpid_function(wi1,wi2)c_fpid_funti

51、on21是special0上限幅if(ab) wo=belse wo=ac_hlmt21是special1下限幅if(awarnvalue bo=1else bo=0c_hwarn21是special3下限报警if(awarnvalue bo=1else bo=0c_c_hwarn21是special4开关输入dic_digitalin10special5开关输出doc_digitalout01special6模拟输入aic_analogin10special7模拟输出aoc_analogout01special8键盘输入kic_keyin10 表4.2算法模块算法模块1:减法器“e31”模块流水号回路号算法模块号输入参数1来源输入参数2来源用户配置第2输入参数用户配置第2输入参数保留01010280900155000x010x010x020x800x900x010x550x00表示此参数为用户配置输入表示此参数为模拟量输入通道号为0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论