本发明涉及工业自动化控制技术领域,尤其涉及一种多虚拟控制器之间的数据共享方法。
背景技术:
大型工业控制系统中虚拟仿真平台由于能够高度逼真地模拟真实控制系统的动态运行而被广泛地应用。目前,各大主流的工控系统制造商都在其生产的工控软件产品中嵌入虚拟控制器软件,所谓的虚拟控制器软件,其主要功能是对工业现场控制器的硬件功能进行虚拟化,代替实物控制器完成控制组态的计算和通信等任务。借助该软件,用户可以预先对自己编写的控制组态程序进行调试修正,再将程序导入到实际控制系统中使用,这种方式不仅可以降低控制逻辑修改带来的潜在风险,还可降低用户的使用和维护成本。
由于传统工业现场控制器的计算能力相对较弱,现有的虚拟控制器软件在设计时,通常只考虑如何脱离物理控制器,采用软件虚拟办法构建出组态程序所需要的执行环境,在单个计算机上实现一个或多个物理控制器工作过程的模拟,而极少考虑到控制器之间的协同工作能力,因此,还难以胜任更大、更复杂控制任务的高效处理,不利于计算资源的有效利用。以和利时的虚拟控制器软件(虚拟dpu)为例,该软件能够在单个物理站中虚拟出多个计算节点,但是每个计算节点仅用于某个现场操作站控制组态的仿真计算,而多个物理工作站之间很难协同完成耦合性强的复杂控制任务。
造成这一现象的一个重要原因在于现有技术中不同虚拟控制器节点间的数据还难以稳定、可靠、高效地共享,特别是对于不同物理工作站间的控制资源而言,节点之间不当的数据同步会极大地阻碍虚拟控制器的运行性能,其负面影响也会随着控制系统规模的增加而扩大。因此,有效的数据共享同步是当前虚拟控制器在大规模仿真计算任务执行中取得较高性能的关键所在。
技术实现要素:
本发明要解决的技术问题,为了给多个虚拟控制器间处理大型复杂的控制任务建立资源共享的基础,特别是针对不同物理站间的数据交互,本发明提出了一种多虚拟控制器之间的数据共享方法;解决工业控制系统虚拟控制器节点之间的数据同步效率差、资源共享程度低等技术问题。
本发明是这样实现的:一种多虚拟控制器之间的数据共享方法,所述方法为:设置一虚拟控制器软件,并采用多引擎模式来实现多个虚拟控制器功能的模拟;所述虚拟控制器软件是执行来自上位机的用户编写的控制组态程序,并对控制组态程序计算过程的数据进行实时监控和在线修改;所述虚拟控制器软件的内部是由多个虚拟控制器、一个数据监控模块、一个在线修改模块和一个全局共享内存模块构成;通过数据监控模块对控制组态程序计算过程的数据进行实时监控;通过在线修改模块对控制组态程序计算过程的数据进行在线修改;
所述多引擎模式是通过在物理计算机中装载和运行多个计算引擎程序,构建出多个可驱动控制组态程序计算的软件执行环境,从而实现多个虚拟控制器功能的模拟。
进一步的,所述控制组态程序既包括针对系统过程控制所编写的算法组态程序,也包括用于模拟物理设备动态特性的数学模型所编写的组态程序;
所述数据监控模块能够通过指定虚拟控制器的节点号和IO点类型,从全局共享内存模块中选择所要监控的数组和起止地址,实现相应实时数据的读取和显示;
所述在线修改模块能够在软件不停止运行的情况下,根据所选择的虚拟控制器的节点号、监控数组和起止地址,对各类IO点的实时值进行在线修改;
所述全局共享内存模块用于存储系统中各个物理站上所有虚拟控制器的共享数据,并对每个虚拟控制器节点分别开辟对应的存储区域。
进一步的,所述IO点类型包括模拟量输入AI、模拟量输出AO、数字量输入DI、数字量输出DO、中间模拟量LA、以及中间数字量LD。
进一步的,所述多引擎模式的内部包括独立共享内存模块、数据通讯模块、组态执行模块、以及冗余功能模块;
每个虚拟控制器通过多引擎模式中的独立共享内存模块与其他虚拟控制器进行数据同步。
进一步的,所述方法采用共享内存的方式实现多个虚拟控制器之间的数据同步,所述数据同步的功能包括同一物理站内的数据同步和不同物理站间的数据同步两种方式;数据同步的方式原理为:每个虚拟控制器均输出共享数据到其他控制器,也能从其他控制器获取共享数据;
每个物理站均能从系统中其他物理站处获取最新的共享数据,并优先存储于本地的全局共享内存模块区中;若系统中存在M个虚拟控制器节点,则每个物理站的全局共享内存模块将包含M个共享内存子区域,分别与各个控制器节点相对应;
每个物理站上的任一虚拟控制器均能优先从本地的全局共享内存模块中获取源自其他虚拟控制器的全局变量的实时数据,包括模拟量输入AI、模拟量输出AO、数字量输入DI、数字量输出DO、中间模拟量LA、以及中间数字量LD各种数据类型;
共享数据采用周期性的方式进行更新,数据更新一般在500ms-1000ms内处理完成;
控制系统中的物理站常采用冗余方式配置,不同物理站间的共享数据是通过主机发送到其他物理站上,而共享数据接收时,主备机则同时读取来自其他物理站的共享数据。
进一步的,所述不同物理站上多个虚拟控制器之间的数据同步是采用广播通信的方式实现的;具体为:
各个物理站共享数据的初始化;
进行源物理站共享数据的发送流程;
进行目标物理站共享数据的接收流程。
进一步的,所述各个物理站共享数据的初始化,具体为:S1、各个物理站上每个虚拟控制器启动内部的计算引擎程序,对来自上位机的控制组态程序执行周期性计算;
S2、创建共享内存,包括全局共享内存模块和各个虚拟控制器内的独立共享内存模块,并实时动态地生成共享数据;
S3、读取配置文件,获取控制系统中所有虚拟控制器的节点号信息。
进一步的,所述进行源物理站共享数据的发送流程,具体为:S1、某一源物理站根据数据更新需求,创建共享数据的发送线程,并对发送线程Socket进行初始化;
S2、从有数据更新需求的虚拟控制器内部的独立共享内存模块中,提取待发送的共享数据,存入发送缓冲区;
S3、根据发送缓冲区的数据完成数据包的配置;
S4、通过发送线程Socket通信将发送缓冲区的数据发送至广播地址,同时更新本地全局共享内存模块中对应的控制器节点的数据内容。
进一步的,所述进行目标物理站共享数据的接收流程,具体为:S1、目标物理站根据数据更新请求,创建共享数据的接收流程,并对接收线程socket进行初始化;
S2、从广播地址处接收配置好的共享数据包;
S3、解析共享数据包的内容,获取数据包对应的虚拟控制站的节点号,并将共享数据更新到本地的全局共享内存模块区;
S4、根据解析的虚拟控制器的节点号,将所获取的共享数据写入到对应的虚拟控制器内部的独立共享内存模块中。
进一步的,所述同一物理站内多个虚拟控制器之间的数据同步是采用内存拷贝的方式实现的,具体为:
Step1、单个物理站中每个虚拟控制器启动内部的计算引擎程序,并在计算引擎的运行过程中实时地产生共享数据;
Step2、物理站读取配置文件,获取站内所有虚拟控制器的节点号信息;
Step3、将某虚拟控制器中的共享数据搬迁至全局共享内存模块中节点K对应的共享内存区域;
Step4、待数据搬迁完成之后,将所述节点K的共享数据拷贝到其他虚拟控制器的共享内存区域,包括全局共享内存模块中目标节点对应的共享内存,以及目标虚拟控制器内部的独立共享内存模块。
本发明具有如下优点:本发明不仅能够支持同一物理站内多个虚拟控制器之间的数据共享,还可以为不同物理站中多个虚拟控制器间的数据交互提供一条有效的技术途径,以此改进控制系统中各虚拟工作站间的通信效率,解决系统站间信息各自独立、数据共享程度低等技术问题,也为各个工作站协同完成复杂的控制任务提供良好的通信基础。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1、本发明中虚拟控制器软件和多引擎模式的结构示意图。
图2、本发明中多虚拟控制器之间的数据共享原理图。
图3、本发明中不同物理站上多虚拟控制器间数据同步的实现流程示意图。
图4、本发明中同一物理站内多虚拟控制器间数据同步的实现流程示意图。
具体实施方式
请参阅图1至图4所示,一种多虚拟控制器之间的数据共享方法,其特征在于:所述方法为:设置一虚拟控制器软件,并采用多引擎模式来实现多个虚拟控制器功能的模拟;所述虚拟控制器软件是执行来自上位机的用户编写的控制组态程序,并对控制组态程序计算过程的数据进行实时监控和在线修改;所述虚拟控制器软件的内部是由多个虚拟控制器、一个数据监控模块、一个在线修改模块和一个全局共享内存模块构成;通过数据监控模块对控制组态程序计算过程的数据进行实时监控;通过在线修改模块对控制组态程序计算过程的数据进行在线修改;
所述多引擎模式是通过在物理计算机中装载和运行多个计算引擎程序,构建出多个可驱动控制组态程序计算的软件执行环境,从而实现多个虚拟控制器功能的模拟。
(1)所述控制组态程序既包括针对系统过程控制所编写的算法组态程序,也包括用于模拟物理设备动态特性的数学模型所编写的组态程序。
(2)所述数据监控模块能够通过指定虚拟控制器的节点号和IO点类型,从全局共享内存模块中选择所要监控的数组和起止地址,实现相应实时数据的读取和显示。所述IO点类型主要包括模拟量输入(AI)、模拟量输出(AO)、数字量输入(DI)、数字量输出(DO)、中间模拟量(LA)、中间数字量(LD)。
(3)所述在线修改模块能够在软件不停止运行的情况下,根据所选择的虚拟控制器的节点号、监控数组和起止地址,对各类IO点的实时值进行在线修改。
(4)所述全局共享内存模块主要用于存储系统中各个物理站上所有虚拟控制器的共享数据,并对每个虚拟控制器节点分别开辟对应的存储区域。
所述多引擎模式是指通过在物理计算机中装载和运行多个计算引擎程序,构建出多个可驱动控制组态计算的软件执行环境,从而实现多个虚拟控制器功能的模拟。
(1)所述计算引擎的内部包括独立共享内存模块、数据通讯模块、组态执行模块、冗余功能模块和其他负责数据搬迁、故障诊断、在线修改和IO通讯等事务处理的功能模块。
(2)每个虚拟控制器可以通过计算引擎中的独立共享内存与其他虚拟控制器进行数据同步。
所述方法采用共享内存的方式实现多个虚拟控制器之间的数据同步,所述数据同步的功能包括同一物理站内的数据同步和不同物理站间的数据同步两种方式;
1、在单个物理站或多个物理站中,不同虚拟控制器之间存在紧密的数据关联,本发明中的数据共享是通过共享内存的方式实现控制器之间的数据交互。具体功能特征包括:
(1)每个虚拟控制器均可输出共享数据到其他控制器,也可从其他控制器获取共享数据;
(2)每个物理站均可从系统中其他物理站处获取最新的共享数据,并优先存储于本地的全局共享内存模块区中。若系统中存在M个虚拟控制器节点,则每个物理站的全局共享内存模块将包含M个共享内存子区域,分别与各个控制器节点相对应。
(3)每个物理站上的任一虚拟控制器均可优先从本地的全局共享内存模块中获取源自其他虚拟控制器的全局变量的实时数据,包括AI、AO、DI、DO、LA、LD各种数据类型。
(4)共享数据采用周期性的方式进行更新。数据更新一般在500ms-1000ms内处理完成。
(5)控制系统中的物理站常采用冗余方式配置,本发明中不同物理站间的共享数据是通过主机发送到其他物理站上,而共享数据接收时,主备机则可以同时读取来自其他物理站的共享数据。
2、本发明提供的不同物理站上多个虚拟控制器之间的数据同步是采用广播通信的方式实现的。
具体步骤方法如下:
(1)各个物理站共享数据的初始化
Step1、各个物理站上每个虚拟控制器启动内部的计算引擎程序,对来自上位机的控制组态程序执行周期性计算;
Step2、创建共享内存,包括全局共享内存模块和各个虚拟控制器内的独立共享内存,并实时动态地生成共享数据;
Step3、读取配置文件,获取控制系统中所有虚拟控制器的节点号信息。
(2)源物理站共享数据的发送流程
Step1、某一物理站(源物理站)根据数据更新需求,创建共享数据的发送线程,并对发送线程Socket进行初始化;
Step2、从有数据更新需求的虚拟控制器内部的独立共享内存中,提取待发送的共享数据,存入发送缓冲区;
Step3、根据发送缓冲区的数据完成数据包的配置;
Step4、通过Socket通信将发送缓冲区的数据发送至广播地址,同时更新本地全局共享内存模块中对应的控制器节点的数据内容。
(3)目标物理站共享数据的接收流程
Step1、目标物理站根据数据更新请求,创建共享数据的接收流程,并对接收线程socket进行初始化;
Step2、从广播地址处接收配置好的共享数据包;
Step3、解析共享数据包的内容,获取数据包对应的虚拟控制站的节点号,并将共享数据更新到本地的全局共享内存模块区;
Step4、根据解析的虚拟控制器的节点号,将所获取的共享数据写入到对应的虚拟控制器内部的独立共享内存中。
3、本发明提供的同一物理站内多个虚拟控制器之间的数据同步是采用内存拷贝的方式实现的。具体步骤方法如下:
Step1、单个物理站中每个虚拟控制器启动内部的计算引擎程序,并在计算引擎的运行过程中实时地产生共享数据;
Step2、物理站读取配置文件,获取站内所有虚拟控制器的节点号信息;
Step3、将某虚拟控制器K中的共享数据搬迁至全局共享内存模块中节点K对应的共享内存区域;
Step4、待数据搬迁完成之后,将所述节点K的共享数据拷贝到其他虚拟控制器的共享内存区域,包括全局共享内存模块中目标节点对应的共享内存,以及目标虚拟控制器内部的独立共享内存。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。