过程数据画面实时刷新方法
技术领域
本发明涉及一种过程数据画面刷新方法。
背景技术
作为冶金行业现场过程控制级的过程机,即通常说的两级机(L2),是位于企业管理层(L3)和基础自动化层(L1)之间,以过程监控优化为主要目的过程控制计算机系统,它起着承上启下的作用。
在过程控制计算机系统的应用软件中,目前比较流行的结构通常采用客户/服务器(Client/Server)体系结构。在这种结构下,由服务器端的服务程序负责过程数据的收集、处理,由客户端的画面程序负责过程数据的展现。这些过程数据包括:来自基础自动化层L1的基础测量数据,以及基于这些测量数据计算而产生的导出数据。当这些过程数据发生变化时,往往需要实时地反映到客户端的画面上。
通常客户端的画面采用定时轮询的方式对后台的服务程序进行数据访问。例如申请号为200610024323.X,名称为《一种基于数据库的低负荷画面刷新方法》就是采用轮询的方式,该专利申请中的控制画面的刷新是通过定周期检查保存在数据库中的控制字来实现。此种轮询方式在一定程度上解决了不必要刷新的问题。在这种情况下,轮询周期的选择就需要特别考虑。原因是,轮询意味着前台对后台的数据采样,如果要复现后台过程数据的所有取值(虽然在L2画面上不一定要求达到这个目的),则轮询频率必须大于或者等于过程数据的变化频率。因此,在同一副画面上,如果显示了数据变化频率不同的过程数据,在这种情况下,如果按照某个频率来轮询,则必然会导致以下结果:
1、要么所有的数据都能够实时地刷新,数据变化的某个细节都能捕捉,但是造成网络负荷加重,系统资源浪费的情况;
2、要么某些过程数据变化的细节画面无法捕捉。
发明内容
本发明的目的在于,提供一种过程数据画面实时刷新方法,以减少了网络上无效的传输和客户端画面的资源占用。
本发明采用如下技术方案:
一种过程数据画面实时刷新方法,包括以下步骤:
步骤一、注册请求:客户端的某个画面在第一次装载或被切换显示时,该客户端运行的前台画面程序收集注册信息后,该注册信息包括当前画面[YUN3]显示的过程数据点的名称、本机IP地址和计算机特征信息,向服务器端运行的后台服务程序发送注册请求,该注册请求中包括有注册信息,之后通过所述后台服务程序获取该客户端需要显示的过程数据点的值,刷新画面;
步骤二、注册:后台服务程序收到前台画面程序的注册请求后,根据注册信息生成该客户端画面对象,并将其加入客户端画面对象列表,所述客户端画面对象包括:
a、该客户端的唯一识别号;
b、该客户端当前画面中注册的所有过程数据点;
c、过程数据点的值发生变化时用于发布的客户端画面程序的代理;
d、需要发布给该客户端的过程数据点的列表;
步骤三、过程数据点发布:服务器端运行的数据采集组件采集过程数据点的值,当过程数据点的值发生更新时,所述后台服务程序将该过程数据点的值加入对应的d客户端画面对象的过程数据点的列表中,并向客户端分发,在分发完成后,清空d需要发布给该客户端的过程数据点的列表;
步骤四、客户端画面刷新:所述前台画面程序在收到过程数据点的更新值后,进行画面刷新。
进一步地,所述步骤三中,当所述数据采集组件采集过程数据点中有多个过程数据点的值发生更新时,还具体包括以下步骤:
步骤31、准备;
步骤32、判断当前过程数据点的值是否已经发生变化,如果是,则进入步骤33,否则读取下一个过程数据点,转步骤32;
步骤33、判断该过程数据点是否需要在当前客户端发布,如果是,进入步骤34,否则,转步骤35;
步骤34、将该过程数据点添加至该客户端画面对象的过程数据点的列表中;
步骤35、判断是否存在下一个客户端画面对象需要处理,如果是,则读取下一个客户端画面对象,转步骤33,否则,进入步骤36;
步骤36、判断是否存在下一个过程数据点需要处理,如果是,则读取下一个过程数据点,转步骤32,否则,进入步骤37;
步骤37、通过RaiseDataChanged向客户端画面对象中过程数据点的列表发生更新的对应的客户端发布,清除发生更新的过程数据点的列表中的值,为下一次发布做准备;
步骤38、结束该批过程数据点发布。
进一步地,在所述步骤36中,在向客户端画面对象中过程数据点的列表发生更新的对应的客户端发布后,清除发生更新的过程数据点的列表中的值。
进一步地,所述服务器端还包括一存储有全部过程数据点当前值的数据存储区,所述数据采集组件采集过程数据点的值后,更新该数据存储区内对应的过程数据点的值,所述步骤一中注册请求完成后,后台服务程序从该数据区获取该客户端需要显示的过程数据点的值后,发送至该客户端。
进一步地,所述步骤三的过程数据点发布过程中,如果某个已经注册的客户端画面因画面切换或重启时,发生同时访问该数据存储区时,则挂起客产端访问事件,优先执行服务端的过程数据点发布过程。
进一步地,所述步骤一中,前台画面程序保留了过程数据点和画面显示的元素的映射关系,当该客户端的画面刷新时,调用该映射关系。
进一步地,所述前台画面程序与所述后台服务程序之间采用互联网通信平台方式通讯。
进一步地,所述后台服务程序与所述数据采集组件采用互联网通信平台方式通讯。
进一步地,所述步骤2具体包括如下步骤:
步骤21、准备;
步骤22、判断客户端画面对象列表中是否存在该客户端,如果是,进入步骤23;如果否,转步骤25;
步骤23、清除该客户端上次注册的过程数据点;
步骤24、为该客户端添加本次注册的过程数据点,转步骤29;
步骤25、生成新的客户端画面对象;
步骤26、获取该客户端的发布代理;
步骤27、添加本次注册的过程数据点;
步骤28、将该客户端画面对象添加至客户端画面对象列表;
步骤29、结束注册。
本发明可以保证只将值发生变化的过程数据点(同时,该数据点还必须在客户端当前画面上显示)发布给客户端画面。在这种情况下,客户端当前画面上的每个过程数据点的每个取值都将会从后台发布到前台显示,所有细节都能捕捉,提高了数据显示的实时性和精细度,同时还减少了网络上无效的传输和客户端画面的资源占用,其实时性和系统负荷都能有效得到解决。
附图说明
图1本发明方案系统结构框图;
图2是实现本发明方法服务器端提供的注册方法程序流程图;
图3是实现本发明方法服务器端过程数据变化处理方法程序流程图;
具体实施方式
一种过程数据画面实时刷新方法,如图1所示,所述服务器端的后台服务程序与多个客户端的前台画面程序通过互联网通信平台方式(Internet Communications Engine,Ice)提供的Slice(Specification Language for Ice,Ice的特殊语言)的接口定义语言定义通信接口。本实施例中通过Ice提供的工具slice2cpp和slice2cs将Slice语言描述的接口定义映射成C++和C#语言描述的接口定义。本实施例中的程序操作主要接口如下表:
接口名称(slice语言) |
实现者 |
调用者 |
int RegisterGraphTag(TAGNAMEARRAY tagNames,string strTopic) |
后台服务程序 |
前台画面程序 |
void RaiseDataChanged(TAGVALUECOLLECTION tagPairs) |
前台画面程序 |
后台服务程序 |
int ChangeTagValue(TAGVALUEMAP tagPairs) |
后台服务程序 |
数据收集组件 |
步骤一、注册请求,前台画面程序调用RegisterGraphTag接口;
客户端的某个画面在第一次装载或被切换显示时,该客户端的前台画面程序收集注册信息,所述注册信息包括当前画面需要显示的过程数据点的名称、本机IP地址和计算机特征信息等,并将注册信息发送至服务器端的后台服务程序,用于注册;并通过后台服务程序获取该客户端需要显示的过程数据点的值后,刷新画面;此外,前台画面程序保留了过程数据点和画面显示的元素的映射关系,如文本框(TextBox)、框架(Grid)等控件,这些对应关系将在后台过程数据点的值发生变化而刷新画面时被使用;其中,计算机特征信息可以是计算机名称等。
步骤二、注册,后台服务程序通过RegisterGraphTag接口实现;
后台服务程序收到前台画面程序的注册请求后,生成该客户端画面对象,并将其加入客户端画面对象列表;所述客户端画面对象包括:
a、该客户端的唯一识别号;本实施例中由本机IP地址和机器名生成。
b、客户端当前画面中注册的所有过程数据点;
c、过程数据点的值发生变化时用于发布的客户端画面程序(订阅者)的代理;
d、需要发布给该客户端的过程数据点列表。
对于某个客户端画面来说,在其第一次向后台服务程序注册时,确定了a、c两项内容;在其后画面的切换或装载时,将确定b项内容,d项内容是在过程数据点值发生变化时确定的。
所述步骤二、具体流程如图2所示,具体描述如下:
步骤21、准备(后台服务程序收到前台画面程序的注册请求);
步骤22、判断客户端画面对象列表中是否存在该客户端,如果是,进入步骤23;如果否,转步骤25;
步骤23、清除该客户端上次注册的过程数据点;
步骤24、为该客户端添加本次注册的过程数据点,转步骤29;
步骤25、生成新的客户端画面对象;
步骤26、获取该客户端的发布代理;
步骤27、添加本次注册的过程数据点;
步骤28、将该客户端画面对象添加至客户端画面对象列表;
步骤29、结束注册。
步骤三、过程数据点发布,所述服务器端的数据采集组件采集过程数据点的值之后调用ChangeTagValue接口,并且在后台服务程序通过ChangeTagValue接口实现后;由后台服务程序调用RaiseDataChanged接口;
所述服务器端的数据采集组件采集过程数据点的值,当过程数据点的值发生了更新时,后台服务程序将该过程数据点的值加入对应的客户端的过程数据点的列表中,并向客户端分发。
由于采集的过程数据点往往都是成批更新的,因此在一批过程数据点的更新中,需要判断每个过程数据点,在每个过程数据点的判断里,首先判断该点的值是否发生变化,如果值发生了变化,则需要遍历客户端画面对象,以确定该过程数据点是否属于该客户端画面注册过的过程数据点,如果是,就加入d需要发布给该客户端的过程数据点列表。当该批过程数据点都处理完之后,调用RaiseDataChanged向每个客户端画面发布。在发布完成后,清空d客户端画面对象中需要发布的过程数据点列表,为下一次发布做准备。其流程如图3所示,具体描述如下:
步骤31、准备(已经采集一批过程数据点);
步骤32、判断当前过程数据点的值是否已经发生变化,如果是,则进入步骤33,否则读取下一个过程数据点,转步骤32;
步骤33、判断该过程数据点是否需要在当前客户端发布,如果是,进入步骤34,否则,转步骤35;
步骤34、将该过程数据点添加至该客户端画面对象的过程数据点的列表中;
步骤35、判断是否存在下一个客户端画面对象需要处理,如果是,则读取下一个客户端画面对象,转步骤33,否则,进入步骤36;
步骤36、判断是否存在下一个过程数据点需要处理,如果是,则读取下一个过程数据点,转步骤32,否则,进入步骤37;
步骤37、通过RaiseDataChanged向客户端画面对象中过程数据点的列表发生更新的对应的客户端发布,清除发生更新的过程数据点的列表中的值,为下一次发布做准备;
步骤38、结束该批过程数据点发布。
步骤四、客户端画面刷新,前台画面程序通过RaiseDataChanged接口实现;
的前台画面程序在收到过程数据点的更新值后,进行画面刷新。
进一步地,所述服务器端还包括一存储有全部过程数据点当前值的数据存储区,所述数据采集组件采集过程数据点的值后,更新该数据存储区内对应的过程数据点的值。
所述步骤一注册请求时,后台服务程序从该数据区获取该客户端需要显示的过程数据点的值后,发送至该客户端。
所述步骤三的过程数据点发布过程中,如果某个已经注册的客户端画面因画面切换或重启时,发生同时访问该数据存储区时,则挂起客户端访问事件,优先执行步骤三的过程数据点发布过程,以提高程序执行的安全性。
从负载均衡的角度来看,本发明方法减少了客户端设置定时器、轮询数据等重复工作,具有集中管理和易于维护的优点。
本实施例中,由于采用的是基于Ice的面向对象的分布式应用中间件平台,可以屏蔽前台画面和后台服务之间的操作系统,实现语言上的差异性。同样,可以选择其它的中间件平台来实现本发明中类似的功能,譬如公共对象请求代理架构(CORBA)、分布式组件对象模型(DCOM)等平台。
在钢厂精炼过程机项目中,后台的模型程序(相当于数据采集组件)会定周期的计算推定碳含量、推定氧含量、推定温度值等模型计算结果,这些结果需要实时地显示在客户端画面上给操作人员做操作指导。在这种情况下,它们定周期的向后台的过程数据处理服务(相当于后台服务程序)写入更新的过程数据点,过程数据处理服务负责过滤并发布到客户端画面刷新显示,其具有非常好的使用效果。