1引言
集散控制系统(dcs)是应用计算机技术对生产过程进行集中监视、操作、管理而对现场装置的控制分散的基本控制技术。集散控制系统的重要组成部分是组态软件。传统的工业控制软件重复使用率低开发周期长,很难满足工业自动化的要求。工业自动化组态软件的出现为解决实际工程中的问题提供了一种新的方法,它能够使用户根据自己的控制对象和控制目的任意组态,使自动化工程人员能够面向问题的设计。
控制组态仿真软件要比传统仿真软件作出改进,使其不仅仅可以供控制人员进行一些控制的组态构建,还可以提供给操作人员进行仿真培训,以及进行控制管理人员的培训。只要使其控制组态的模式和现场模式保持一致,就可以达到仿真的目的,而不必在实际的dcs控制室进行试验和调试,这样可以减少投资,并减小和避免工艺投放风险。因此,开发结构合理、安全可靠、简单实用的仿真系统控制组态软件,具有很好的应用前景。
2统结构及其实现
2.1控制组态概述
控制组态仿真软件作为集成的图形编程语言,是针对dcs系统所开发的全中文界面的控制方案组态工具,它与dcs系统流程图组态软件联合完成对系统的图形组态,是新型dcs系统组态软件的重要组成部分之一,也是算法控制组态的核心部分。
本设计参考了国际电工委员会iec61131-3提供的用于控制的4种编程语言标准:梯形图,结构化高级语言,方框图,指令助记符,采用了简单方便易于用户学习和使用的方框图形式的编程语言,使编程环境更加高效,更加人性化。
本文根据面向对象的设计思想,基于目前控制领域通用的windows2000平台,采用visualc++6.0语言实现了程序设计。这样,不仅使人机界面更加友好,而且能够更好地利用windows系统的资源,使组态软件的功能更为强大。
系统的结构如图1所示。各部分的功能及实现方法叙述如下。
2.2算法显示模块和控制算法组态
该软件向工程人员提供了一个图形化的控制算法组态平台,工程人员可以根据实际工业过程,选用合适的控制算法,用图形的方式,即选用算法显示模块,组成各种控制回路,然后将组态信息保存到组态文件中。控制算法组态的主界面如图2所示。
图2算法显示模块指的是对具体算法的抽象显示。在图形化组态界面上,每种具体的控制算法对应一种算法显示模块,以方框图的形式显示,用户只需用简单的鼠标操作就能将指定的算法显示模块添加到指定的控制回路中,或删除和修改参数,从而完成控制算法的组态。其在控制组态界面中的显示是带有输入输出端子的矩形,图3是一个加法显示模块的外观及显示说明:
其中,模块在回路中的编号只有在进行过编译且用户确定后才正确显示,编译前不显示。而模块流水号只是在绘制过程中记录的全局唯一的模块的id号,它由系统自动生成,用户不能修改。
设计控制组态仿真软件的界面时,主要是实现组态用到的算法显示模块、连线和文本注释的绘制和显示。从共性的角度考虑,决定将对算法模块的实现用一个从cobject类派生的类cfunmod来统一实现和管理,在该类中设定标志变量对具体的算法显示模块类型进行区分,同时标记该模块的输入输出端子数目。连线使用从cobject类派生的类clinkline实现,包含对连线两端所连算法显示模块的标记。而文本注释则由另一个从cobject类派生的类ctext来实现,为普通注释时,记录字符串类型的注释参数,而与数据库中的点关联时,记录点名。在绘制回路的过程中,它们都是由基于各类的链表来操作和管理的。
为支持对算法显示模块和文本注释的参数配置,需实现属性对话框,这是很容易实现的。这样,通过鼠标双击算法模块,弹出属性对话框,用户填入相应的参数,点击确定保存即可。
2.3控制算法库
控制算法库是整个系统仿真运行的基石。系统中内置了若干种控制算法。为了保证控制算法的可扩展性和统一性,所有的控制算法实现了一个统一的接口,供算法运行模块调用。
具体来讲,是采用模块化设计的思路,将dcs的控制算法分解成若干个功能独立的、能分别设计、编码和调试的算法模块,组成控制算法库。每个算法模块完成的功能既明确又单纯,从而使处理的问题局部化和简单化。算法模块作为控制组态仿真软件结构中的最基本元素,实际上就是完成一个特定算法功能的独立程序。算法模块的接口简明而又统一,且能彼此隔离和独立。从用户角度看来,控制算法库中的各种控制算法都是完全一样的,而且系统也是采用统一的接口对各种算法进行调用的,用户无需关心每个控制算法的具体实现细节。另外,用户使用时,只需对控制算法模块的参数进行修改,而无需修改算法模块的代码。
将各算法编成独立的可反复调用的算法模块,对应每一个功能模块都有一个参数列表和输入列表,系统运行时,控制调度程序依据这些信息,顺序依次执行。
设计算法库时,先设计一个算法基类cfunction,其中实现一个虚函数fun,具体算法从该类中派生。在程序中,采用统一调用各算法模块的fun函数的方法实现对控制算法的调用,这样的接口简单明了。
2.4虚拟信号发生器
信号发生器是一种应用极为广泛的仪器,它通常作为标准信号发生器,用于电子电路的性能试验或参数测量。传统的信号发生器价格昂贵、操作复杂、不易开发、维护和升级,而使用基于visualc++编程工具,软件开发的虚拟信号发生器,具有简单、直观、操作方便等特点,而且可以通过调用或修改信号源函数中的不同的功能函数,得到不同的信号,如正弦波、方波、三角波等。
虚拟信号发生器即信号源模块又分为三个子模块,参数设置模块,信号发生模块,波形显示模块。如图4所示。
信号源数据的内容主要为波形数据、要发生波形的参数;其波形数据的来源主要有信号发生模块;波形数据的终点是信号发生以及发生波形及其参数的显示,以及提供给控制算法进行模拟仿真运行。各子模块间的关系及所对应的数据流图如图5所示。
信号源模块能够产生正弦波、三角波、方波等常用的波形,能够对要发生波形的各种参数进行方便灵活的设置,能够对正发生的波形进行实时显示。注意,模拟的信号采集频率与主控卡实际采集频率相同,这样才能保证对主控卡实际运行的模拟仿真等准确。
在此信号源模块中,用户可设定两种模式:自动和手动。自动时,采用系统提供的一些标准输入信号类型。手动时,用户可随时直接设置逻辑和控制变量的值。这是在线仿真系统的运行的必要条件。
在此模块中采用了多线程技术,参考主控卡的采集周期,定时运行信号发生函数改变模拟输入点的值。设置了手动改变数据的按钮,用户在手动模式下改变模拟输入点的数据时,直接调用此按钮的相应函数,执行此改变。
3模拟仿真运行
先对用户组态的信息进行检查,看是否数据连接类型不匹配,是否回路断开等,同时,对于图形化组态平台来说,如何根据控制回路图的拓扑结构建立起控制组态信息的数据流是很重要的,也就是需对回路中的算法模块执行顺序进行排列,上述内容都是编译过程中的工作。检查确定组态无误后,利用虚拟信号发生器产生的信号,作为控制回路算法模拟仿真运行的输入信号,运行控制算法,实时显示仿真数据,及仿真报警,并输出仿真波形。这是一个可调试的仿真过程,用户观察仿真结果判断对控制算法的组态是否满足要求,若不满足,则可“在线”调整算法功能模块的参数,甚至重新组态,仿真和调试,直到仿真结果满足指定要求。
在模拟仿真时也采用了多线程技术。开辟工作者线程,进行控制算法的计算。为实现“在线”参数整定,在用户修改参数时,再开辟一个工作者线程,这样能提高程序的运行效率。
本软件平台采用johnson算法来解决循环有向子回路的排序,具体实施过程为:以当前正在进行拓朴结构分析的模块接口作探索出发点,用该接口的连线作为索引,沿该连线数据流方向深入,每深入一步,即将经过的模块接口进行标识,如果某一步达到了原出发点,则形成回路。因为在循环回路中,数据流在某个采用周期内不存在时间序列上的优先次序,因此需将回路人为断开,并按上述索引的顺序产生反映该循环回路特性的算法模块的执行顺序。需要注意的是,该有向循环回路与不属于该回路的其它部分则存在先后顺序关系,这正是必须特别处理循环有向回路的原因。
实际运行和数据访问根据控制组态信息通过tcp/ip下载到dcs系统的主控卡,并实际运行,这时组态软件实时的向主控卡询问各点信息(当前值信息和故障信息),并写入实时数据库。而控制组态仿真软件只是实时的访问实时数据库,从实时数据库获取点值信息等,再在控制组态的实际运行界面上实时显示,同时,可显示各回路的实际运行波形图。工程人员通过人机界面来监控各个控制回路的运行情况,可以在线进行参数整定。
数据访问模块主要是用来给算法实际运行模块提供一个简单、统一的数据访问接口。它通过ado访问实时数据库,读出算法运行模块需要显示的实时数据,实现实时显示和报警。
设计时,创建流套接字与主控卡建立网络连接,进行通讯,下载控制信息。
4结束语
控制组态仿真软件为建模人员提供了一个友好的用户界面,使建模人员在建模时不必对模块内部的控制、逻辑程序有很深的了解就可以方便的对其进行编写和修改,自动或手动改变各逻辑和控制变量的值,参与模拟仿真运行和调试,从而实现了对系统运行的仿真。采用仿真的方式,模拟控制算法的运行和故障的报警,既可缩短工期又可降低成本,还能降低硬件维护、培训和备品备件费用,具有很好的应用前景。
(转载)