使用Infoagent 构造调度输配系统

使用Infoagent 构造调度输配系统

Develop SCADA SYTEM WITH INFOAGENT

顾恺、谢彬 上海时博飞奥自控有限公司(上海市西藏中路656201  200001)

 

 

 

 

 

 

摘要... 2

一、       项目背景... 2

二、       INFOAGENT的介绍... 2

2.1  infoAgent 结构... 2

2.2 iFIX FIX 集成... 2

2.3  infoAgent 体系结构... 3

2.4  infoAgent 特性... 3

三、       数据库优化... 3

四、       实时数据显示... 4

五、       历史趋势曲线... 5

六、       报表... 7

七、       报警... 10

八、       INFOAGENT的不足... 12

九、       结语... 14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

摘要

   INFOAGENT构建一个SCADA系统。本文介绍了设计其后台支持的数据库,利用INFOAGENT的功能完成对数据的分析与汇总,发布。并描述了一些INFOAGENT的不足,介绍了开发人员的一些心得。

关键词: INFOAGENT ,SCADA,WEB,工控

Abstract

This paper introduces how to  design the relation database for SCADA system, analyses and compute data with infoagent , and discuss some wrong with infoagent, and what one has learned

 Keywords : INFOAGENT ,SCADA,WEB

一、      项目背景

在燃气公司,要监测的管网的末稍压力测点,调压站,储配站,门站,大用户计量站,区域计量站等。所有的数据都通过远程通信软件将数据存放在数据库中,再利用组态软件将数据组织起来,提供给使用部门查看。同时提供数据的分析功能,提供给企业的上层部门来对公司的生产运行进行了解 ,这样的系统,较SCADA系统处于更上一层,用户称之为调度输配系统。它的重点,不在数据现场采集,而在于数据的分析与发布。

在本项目中,原来已有一套SCADA系统,是利用iFix读入数据库数据,并通过iFix iClientTS(远程终端服务)来提供WEB访问的方式。但是,原来项目实施有严重缺陷,WEB方式登录奇慢无比,而由于远程终端服务是在服务端运行,当时所用的报表部份是另外由ASP实现的,另称为报表系统,形成了两个单独的系统。

针对用户的意见,最终考虑是仍然在GE Fanuc的软件家族里进行增补来改善系统,就是放弃iFix iClientTS(远程终端服务)及另外开发的报表系统,改用InfoAgent 来完成WEB发布及报表统计。同时,对原有的数据库结构进行优化来达到提供性能的目的。

二、      INFOAGENT的介绍

2.1  infoAgent 结构

infoAgent是一个基于Web的生产数据可视化分析工具,需要Microsoft Internet InformationServices(IIS) Web Server,Javaplug-in applet, Microsoft Web浏览器(IE)支持。infoAgent服务器安装在Web服务器上,并且与iHistorian 服务器通讯,以便从其上检索数据并将数据传送给infoAgent客户端显示。infoAgent客户端通过Web浏览器与infoAgent 服务器通讯。

2.2 iFIX FIX 集成

尽管infoAgent 并不一定需要GE Fanuc iFIX,但它的画面可以完全集成到iFIX的画面中,为iFIX工业领先的HMI/SCADA功能添加强大的历史数据分析能力。画面集成可以很容易地通过微软提供的嵌入式Web浏览器ActiveX技术来实现。另外一个强大功能是在i F I X 的工作台环境下支持对infoAgent 的在线组态。

另外也可以在iFIXFIX的画面中,简单地点击按钮来打开浏览器窗口, 显示infoAgent 画面。

2.3  infoAgent 体系结构

单一的infoAgent 服务器可以与一个或多个iHistorian 服务器连接。多个infoAgent 客户端或Web 浏览器则可以从一个infoAgent 服务器上浏览数据。

2.4  infoAgent 特性

基于Web—可以在任何计算机上的浏览器中运行该软件低投入—易用、易配置、易维护、迅速收回投资快速获取iHistorian 数据信息具有基于时间或基于事件两种趋势具有X-Y 散点表的比较分析数据能力

三、      数据库优化

其实在初始方案中,计划选用GE Fanuc iHistorian 实时数据库。但最后由于资金问题放弃了,同时,本系统的数据更新时间间隔长(5分钟左右一次),完全没有必要选用实时数据库。那么,对关系数据库进行优化,就是本系统的重中之重了。

SCADA的数据库,最多的要求就是实时库与历史库分开,这恰好是原有系统的不足,也造成了报表生成的速度缓慢的原因之一。同时,原来表的设计是每种类型的站点一个表,虽然是符合数据库的设计范式,但由于每个站点数据多,会造成巨型表,对提高数据库的性能没有帮助,同时,虽然站点类型是一致,但某些站点却因用户的要求不同而多或少一两个数据点,会造成数据库的空字段或是表结构的不停更改,不利于维护。所以,对数据库的结构重整是在所必然。

工控软件用多了,自然对其后台的运行要有所了解。iHistorian对每个tag 的数据可以进行压缩,WINCC 的历史数据是每个变量归档一个表。他们都不局限于站点的概念,那么,我们利用关系数据库来实现工控的数据库,也得向成熟的工控软件学习学习。

我的设计是每个数据点三个表,它们的命名是

1 T_AAA_BBB_CCC_real

2 T_AAA_BBB_CCC_month

3T_AAA_BBB_CCC_year

其中AAA 是站点类型,BBB是站点名称,CCC是变量名  real 表是实时表,表内只有一个字段V 保存当然的数据值,而永远只有一个记录,只对其进行更新操作,不进行插入与删除。Month Year表两个字段:时间,值。Month 保存一个月的数据,这是根据用户的操作习惯定的。Year保存所有的历史数据。对Month Year表的时间字段建立索引。

这样,IFIX读取实时数据时,由于只有一个字段及只有一个记录,访问速度将会有大幅的提高,对数据库系统的资源占用也将大幅减少。用户一般只查看最近一月内的历史数据,生成日报,周报及月报,对再以前的数据查看甚少,那么,一般的处理就只要访问Month表就可以了。Year保存所有的历史数据,这使为用户偶尔查看较以前的数据提供一个帮助。

为了减少数据的冗余,尽可能的压缩数据。我采用了变通的方法,创建了一个存贮过程,这个存贮过程将会将实时表的数据与最新数据比较,如果一致,就不进行更新及插入操作,这样,数据库里将减少连续相同的数据的存贮。大大减少了数据的冗余。我对以前两年的历史数据,按照目前的数据组织方式,输入目前的数据库,结果将原有已达3G的数据库转化成了仅有500M大小的数据库,大大提高的数据库的有效数据存贮,同时,减少的数据库的大小,提高了数据库的性能。

这些设计也是符合数据库设计规范的。更是对数据库的性能有更好的提高。

这样设计的优势:

由于表较窄,排序和索引创建的速度加快。 

由于表较多,允许有更多的群集索引。 

索引变得更窄、更紧凑。 

每个表中的索引减少,有助于 UPDATE 操作的性能。 

空数据和冗余数据减少,使数据库更为紧凑。 

减少了 DBCC 诊断的并发影响,这是因为必要的表锁只会影响较少的数据。 

当然,本系统有500多个变量,如果都是手工完成建表过程,恐怕所有实施该工程的人都会觉得无法忍受,毕竟建一千多个表的可不是轻松的事。不过,既然所有的变量表结构是一样的,那么,自己编一个辅助软件,实现变量管理器可不是什么难事。

四、      实时数据显示

实时数据的显示主要是iFix 从数据库的实时表中读入数据,然后IFIX中用图形界面显示出来。用过IFIX的人都会知道,iFix大量的图库会对你的图形界面开发起着事半功倍的作用。不过,我们目前要做的是转向InfoAgent。那么,虽然InfoAgent号称可以直接导入iFIX的画面,但你还是有些事情要做的。

原来做的iFIX中,用了大量的脚本为界面做了很多花俏的功能。可惜,目前要将这些脚本全部去掉,因为InfoAgent不支持脚本。我们仅能保留图形及数据连接,所有的按钮,点击事件,画面事情都不能保留。不然,进行导入后大量的错误会让你不愿继续下去。

将所有的脚本删除后,iFIX3.5 打好相关的的补丁后,iFix 就有一个导出的功能,可以将iFix 的画面导出到一个文件夹,随后用InfoAgent 导入功能,这样,麻烦的画面开发就这样直接完成了。

转换过来的画面带有对IFIX数据源的连接,并不需要重新连接数据源。但InfoAgent的服务器要同时运行IFIXVIEW客户端,客户端连接通过后,InfoAgent就能显示出IFIX的实时数据。InfoAgent的实时数据发布就完成了。

这个过程,最重要的是要记得舍弃IFIX强大的脚本功能。还原一个简单的系统,不然,查错的过程会让你终生难忘。

 INFOAGENT实时数据示例页面

 INFOAGENT实时数据示例页面

 INFOAGENT实时数据示例页面

INFOAGENT实时数据示例页面

 

 

 

五、      历史趋势曲线

 本来,InfoAgent的代理商在培训时说可以直接读取IFIX的历史曲线,然而,导入IFIX的画面后,同组的同事突然告诉我说InfoAgent只能显示实时曲线,不能显示历史曲线,这哪行,一个SCADA系统不能查看历史曲线,这是不贻笑大方吗?检查后发现,在InfoAgent TIME CHART 的能连接的数据源中,IFIX是作为实时数据源连接的,而历史数据源只能连接到iHistorian,不能连接IFIX生成的历史数据,然而,我们并没有iHistorian

有问题当然得解决,没有iHistorian 只能拿关系数据库来开刀,还好,TIME CHART的连接数据源的选项中有Relation ,那么,赶紧到statement 里创建statement,每个变量一个表的数据库在这里用起来可真时得心应手,直接取来相应的月表,以日期作为参数,马上就生成了一个statement。回到编辑页面,选择TIME CHART的数据源,连接到刚生成的statement,同时,在页面放置一个TIME CONTROL 控件,将其的STARTTIME 连接到TIME CHART控件的数据源的参数。运行起来,好,漂亮,曲线生成了,自动在值范围画出曲线,起落有致,比IFIX里的那个曲线要漂亮多了。同时,可以用TIME CONTROL 控件来选择时间,实现选择按时间查询历史曲线,这跟用户的要求是完全一致的,这也可一句脚本都没有写,就实现得比IFIX里的进行复杂脚本完成得漂亮。

好的,我们看看效果吧:

历史曲线画面

历史曲线画面

 

 

 

用惯SCADA系统的人,都会习惯在看到数字后点击数据框,查看该数据的历史趋势,本以为InfoAgent不支持脚本,无法进行点击操作,但我们惊喜的发现,INFOAGENTDATALINK 里有Quick Analyses 功能,可以直接连接TIME CHART,从而实现右击数据点,直接查看相关的数据历史曲线。操作起来相当完美。

Quick Analyses

Quick Analyses

六、      报表

很多工控软件在报表这一块做得都不好,特别是不是纯SCADA系统,比如目前所做的上升一个层次的调度输配系统,报表的汇总、统计、分析功能总是超出了工控软件设计时所设计的数据列表型报表的范围。以前也是因为在IFIX中采用的报表结构不尽人意而不得不要另起炉灶,采用了ASP来实现。但是,这次,我们计划在INFOAGENT框架内完成这个报表。

咨询代理商的技术支持人员后,我们感觉被扑了一头冷水,InfoAgent 完成报表是依靠GIRD控件,这个控件也是仅能直接连接数据源,不能对其进行复杂操作。又是一个“数据列表型”报表,我们想。

不过,既然用到了数据库,能不能使用别的方法完成这个任务呢。复杂的统计汇总,总要脚本来支持的。不能在INFOAGENT中运行脚本,那就在数据库中使用脚本。

初始的想法是使用复杂的SQL语句来实现。但经过测试后发现还是太麻烦,一个报表涉及多个站点多个数据,SQL语句中的联接操作多得让人失去了信心。而产生的结果总是有点出乎意料。这样的处理不成,还是要采用更易控制的脚本。

数据库的能运行的脚本除了SQL语句,就是存贮过程,我们正好了解存贮过程,那么,可以试试。

一个报表,会有约定要显示的数据字段,数据时段,统计值,汇总值。那么,在数据库里根据报表的要求,生成对应的表。存贮过程运行后生成的数据保存这个表内,GIRD 连接的数据源读取这个表,就能直接显示结果。

当然,存贮过程可以得到更进一步的优化,每次运行时检查对应的表,如果有对应时间的表,则不再运行后面复杂的统计脚本,这样可以减少数据库运行脚本的时间,加入快响应的速度。这样的优化,对同时有多个用户查看同一报表的情况有最大帮助,因为对某一时间的报表,对应的存贮过程运行复杂的数据处理只会运行一次。

GIRD控件可以读取到对应报表的表里数据,显示出数据列表。但是,直观的分析功能还是没有实现,INFOAGENT据称是专门面向数据分析用的,示例中有大量的柱状图,饼图,曲线图甚至SPC图显示,如果我们不实现一点是过于懒惰了。

INFOAGENT的控件中还有几个控件,BAR CHART 就是我们计划使用的一个,它的使用与GIRD 大致相似,也是选择数据源,选择相应的几个字段。但BAR CHART是一个柱状图,主要作用是对有相比关系的数据进行比较。每次只能对一行数据进行比较,所以,要另外建一个statement

由上,我们要实现一个报表页面,处理的步骤是

1、  在数据库中建立一个表A,表的字段与报表要显示的字段完全一致。

2、  在数据库中建立存贮过程B,内部处理复杂的计算,汇总,统计过程,其中报表的日期是传入的参数。

3、  INFOAGENT中对存贮过程B生成STATEMENT C。参数是日期。

4、  INFOAGENT中对表A生成STATEMENT D。参数是日期

5、  INFOAGENT中对表A生成STATEMENT E。参数是日期及行标记。

6、  INFOAGENT的画面中放置控件TIME CONTROL,GRID1GRID2BAR CHART

7、  GRID1数据源连接到STATEMENT C

8、  GRID2数据源连接到STATEMENT D

9、  BAR CHART数据源连接到STATEMENT E

10、      TIME CONTROLSTARTTIME 连接到GRID1, GRID2, BAR CHART数据源的日期参数中。

11、      GRID2 SELECTROW连接到BAR CHART的行标记参数中。

12、      GRID1的作用是启动存贮过程,无须界面,将其隐藏。

 

 

 

好,可以运行了。我们看看效果吧。

 报表及柱状图示例

 报表及柱状图示例

 报表及柱状图示例

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

报表及柱状图示例

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

进行时间选择,就会立即出现所先时间的报表,在报表中点击相应的行,就会生成相应的柱状图。如果你认为柱状图的比较还不够说明问题,那我们可以利用控件本身的功能,直接变化成饼图。

 报表及饼图示例

 报表及饼图示例

 报表及饼图示例

报表及饼图示例

 

 

 

怎么样,还满意吧。INFOAGENT与数据库的联动,生成今人惊讶的效果,它倒无愧于号称专门面向数据分析的。

七、      报警

  INFOAGENT对报警的处理与IFIX很像,自带的报警控件功能也十分强大,但我们倒碰到了一个无法逾越的问题,尽管报警内容是中文,但报警控件的标题却全是英文,无法转换。这个问题客户是一直拒绝接受。对此,我们的项目在初步验收时成为未竟问题。

    顾客就是上帝,既然客户对这个问题不能接受,我们不能简单的以系统不支持等理由推托,也是给我们的工作留下了疵瑕。我们只能想尽方法,曲线救国。

IFIX中的报警,有一个功能,就是数据库中创建一个报警表,将发生的报警写回到数据库中,由数据库保存。既然数据中报表的数据可以读取,其英文字段可以通过别名显示为中文,那个可以试试将报警也用GRID来读取。

1、在将IFIX中将所有报警字段都生成到数据库表内,包括用户自定义1、自定义2、自定义3、自定义4,这4个字段保存用户设定的上限,上上限,下限,下下限。

2、在INFOAGENT中,到STATEMENT 中创建STATEMENT,注意,要将以前在报警控件中的过滤器的条件在这里将SQL语句配置好。将每个英文字段都改为对应中文别名。

3、在报警页面中,删除原有的报警控件,改为放置GRID控件,连接数据源到刚刚生成的STATEMENT。注意,勾选上refresh 。这样有最新报警发生才会实时出现。

运行起来后就可以看到结果了。

新的报警页面

新的报警页面

但这样后,原来设定的根据不同的报警等级来显示成不同色彩的功能就无法实现了。不过,新的报警界面到用户面前却是十分满意,也算完成了一件任务。

八、      INFOAGENT的不足

INFOAGENT,有一个控件最令人抓狂,就要上面不停提到的TIME CONTROL。为什么呢,让我们看看吧。

看,功能还是挺强大的,可以选择绝对时间,可以选择相对时间,还可以选择时间范围。选择绝对时间时出现日历控件,选择相对时间时出现XX小时以前,XX天以前。考虑得挺周全吧。

但是,它有一个致命的缺点,就是选择绝对时间时,控件的时间选择初始化情况下永远是你组态时设定的时间,随着系统的运行,它的初始时间与实际时间相去甚远。而我们的操作习惯上,都是希望它初始化在实际时间上的。特别是对上面的报表部份及曲线部份。

选择相对时间,设定为Current ,它的初始时间就是当前实际时间,这个明显能满足我们的要求。但,问题又来了,这样的话,用户无法在运行态下选择对应的天数据,无法自由的查看以前任何一天的数据。

INFOAGENT这个控件的设计,给用户带来了很大的麻烦。但我们费尽心机,也没法用一个TIME CONTROL来完成这么一个愿望:打开页面是时显示的是当前时间对应的报表或是曲线,而选择时可以选择直观的对应日期。

总得想办法。我们最后试验出了结果,一个页面放置两个TIME CONTROL,一个用相对时间的状态,另一个选择绝对时间的状态,页面初始化时获得是相对时间TIME CONTROL值,使报表与曲线显示形当前值,而用户选择时用绝对时间控件,可以方便用日历形式的选择。

仍然有遗憾,当前已显示了当前的曲线与报表了,但时间选择控件上还是显示一个毫不相干的时间。不过,这是我们能做到的最大的改进了,希望INFOAGENT以后的版本能把这个控件进行改进。

组态状态下的时间控件TIME CONTROL

组态状态下的时间控件TIME CONTROL

      运行态下的相对时间控件

运行态下的相对时间控件

运行态下绝对时间的选择

运行态下绝对时间的选择

 

 

 

 

 

 

九、      结语

本次项目完全总花费不足一个月的时间,INFOAGENT确实提供了大量的支持,使本系统具备了大量的数据分析手段,很快就达到了用户对输配管理系统这种上层系统的要求。本次由于要采用了关系数据库,在数据库的设计及存贮过程的编写上花了大量的时间。不知道如果能直接采用其配套的iHistorian 实时数据库是否会更容易些。但是,目前的框架看来已能达到了预定的目标了。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值