企业生产数据报表集成方式--控制网



企业生产数据报表集成方式
企业:控制网 日期:2009-12-15
领域:工控机 点击数:3512








    王锐 (1969-)

    男,毕业于西安理工大学,从事自动化控制及企业信息化工作,现就职于金川集团公司自动化研究所。



    摘  要:信息化在有色企业生产报表处理中的应用越来越广泛,但如何更有效的达到企业级MES平台上的生产数据集成与数据共享,最大限度地消除信息孤岛,仍是值得研究和探讨的。本文在对行业生产报表详细分析的基础上,介绍了B/S架构下生产报表的实现方式,并针对采用C#、Oracle编程实现报表的关键技术进行了详细分析,给出了在某有色企业“烟气制酸”节能减排实践中的一种行之有效的报表处理方法。

     关键词:有色企业;MES;生产报表;节能减排;C#;Oracle编程

     Abstract: According to production statements in Chinese nonferrous metal enterprises, Information technology has been more and more widely used. But it is also worthy of studying ,how to realize the whole Enterprise data integration and sharing on the platform of  MES and thus to erase information silo. In this paper, based on a detail analysis of production statement, we introduce the implementation approach of production statement under B/S frame. In addition, we detail some key programming technology for implementing statements ,such as C#、Oracle Programming etc . Furthermore, we give an effective method to deal with the statements in energy conserving and emission reducing of one enterprise.

     Key words: nonferrous metal enterprises; MES; production statements; energy conserving and emission reducing; C#; Oracle Programming

     1 引言

    在我国有色企业实现“由大到强”转变的关键时期,实现结构调整、节能降耗是实现经济增长方式转变,加快企业国际化和可持续发展步伐的重要内涵。

    MES位于企业ERP(计划层)/MES(执行层)/PLC(控制层)三层架构的中间一层,它运用及时、准确的信息,指导、启动并记录工厂活动,从而能够对条件作出迅速响应,减少非增值活动,提高工厂运作过程的效率。起着承上启下,填补计划层与控制层信息断层的关键桥梁作用[1]。

    在金川公司MES层级的“烟气制酸”生产监控与调度系统的开发过程中,涉及两个生产二级子厂的12个主车间大量生产数据,之前,生产用户一直采用纸质报表、电话问询、人工统计、手抄记录的方式处理生产数据。报表制作复杂,信息滞后且缺乏准确、实时性。生产数据成为孤岛、生产管理与生产现场断层问题较为严重。因此,对于企业-二级子厂-车间系统三级用户,生产信息的集成、共享与分级显示成为亟待解决的问题。

    本文在金川集团公司 “烟气制酸”生产监控与调度系统的开发过程中,针对MES层生产报表信息集成与数据共享问题,在B/S架构下采用C#面向Office编程技术[2]以及Oracle编程技术[3],有效地解决了传统纸质报表所导致的信息难于共享、缺乏实效性、制作复杂等诸多问题。在该企业节能减排,综合治理过程中较好地体现了企业信息化所带来的应有的价值。

    2 生产报表实现方法

    2.1 生产报表分类

    按照生产报表所依据的数据来源,可以分为实时监控报表和生产管理报表两个类别。

    实时监控报表,其数据来源主要是实时生产数据(一般为分钟或小时级),这些数据都可以从控制层各分散DCS/PLC系统中,通过OPC等传输协议组态到统一的实时数据库平台中,然后再由实时数据库通过组态提取到报表单元格中。
生产管理报表,主要是无法从控制层自动化设备上直接获取,需要人工录入的生产管理、计划、销售类数据以及少量涉及主要生产指标的,可以从实时数据库提取到的实时数据,这些实时数据实时性要求不高(一般为班、日级),而且多数要经统计计算处理后才可使用。

    2.2 系统架构

    该系统采用“瘦”客户端的B/S三层架构,报表的编辑和使用都可以通过浏览器方式直接处理,所有程序、数据存储在服务器端,而无需依赖于客户端软件,减少了软件维护量,增大了系统安全性、可维护性与稳定性。
              

    如图1所示,实时数据库(RTDBS)将实时数据从各控制系统提取上来,在支持实时报表的同时,也为关系数据库提供所需的历史实时数据。其他数据存入关系数据库(RDBMS)中。RTDBS与RDBMS之间通过数据库中间件交互。关系数据库与逻辑层之间通过Oracle PL/SQL程序包将数据处理之后进行交互。用户对生产报表的编辑和浏览完全可以只通过带有浏览器的客户端进行访问。报表操作简单易用,数据交互效率较高。

    2.3 报表格式

    采用带有一定普遍意义的Office Excel格式。编辑、访问、下载、局部化修改、打印等更加符合用户传统习惯。编程时采用C#语言面向Office编程的相关方法,先定义好所需的报表模板,通过提取模板中不同WorkSheet各单元格关键字并嵌入相应SQL语句的方式,与数据库进行交互。

    2.4 编辑方式

    编辑某个车间特定的报表模板时,将模板(xls格式)文件分为多个WorkSheet工作表,如图2所示,Report工作表负责为用户呈现报表内容,排版格式与该车间之前使用的纸质报表基本一致,只是做了少量有利于信息化处理的修改。Field工作表存放Report中需要从数据库提取数据的单元格映射,其格式主要是Key-Value键值对。同时,Field又将其自身的与Report单元格映射过的单元格重新映射到图2中其他Sheet各单元格中,因此它在Report与后续Sheet之间起着承上启下数据传输的作用。Global中存放报表处理程序访问该报表时需要提取的全局化关键字,例如报表日期、所属部门、报表频次等。

    其他Sheet用于通过指标关键字,依据不同的频次、部门,从数据库读取数据并将数据映射回Field中,例如“DCL_MORNING_SHEET(顶吹炉早班数据项)”、“SSL_MONTH(闪速炉月数据)”等。采用B/S架构下的面向Office编程技术,通过不同关键字提取,依次访问相应的Sheet单元格,这样就可以将数据库中该报表需要的数据提取到Report相应单元格中,并最终向用户呈现携带生产数据的特定报表。

    对于Sheet中Key,举例说明:Date,用于获取报表时间;TableName,用于获取Oracle数据库中存储相应数据的数据表名称;TagCode,用于获取指标代码并填入SQL语句;Dep_Code,用于获取指标部门关键字;Frequency,用于获取指标频次(班、日、旬、月、季、年数据);Freq_Optio,用于获取班数据频次(早、中、晚班数据)。

    Date/TagCode/Dep_Code/Frequency/Freq_Optio关键字将会唯一确定报表中一个数据单元格的值。

            

    2.5 执行过程

    报表编辑、访问执行过程如图3所示,不再赘述。

           

    3 问题及处理

    3.1 报表-数据库交互过慢问题

    C#程序通过引入Microsoft.Office.Interop.Excel等Excel文件操作类,可以实现报表和数据库之间的数据传输,采用Filter将携带数据的报表以Excel文件的形式通过浏览器呈现给用户。这种方式在实际应用中,因为每个车间报表都包含大量指标数据信息,而每次调用报表,该报表中每个数据项都会创建一个SQL语句,访问数据库并获取该指标数据。这样大量且频繁的数据项访问,耗费大量系统资源,用户体验较差。通过测试,仅500个数据项的一张报表,访问一次时间就要达到25-35分钟时间。这样的时间耗费,在实际中根本无法使用。针对这种问题,我们在该项目中采用如下两种解决方法。

    (1)将用户访问过的报表所产生的HTML临时文件保存在服务器ReportHtml文件夹中(如“顶吹炉车间生产日报2008-03-12.html”),并将用户访问过的特定报表(Excel格式)自动下载到服务器ReportArchive文件夹备份起来(如“顶吹炉车间生产日报2008-03-12.xls”)。

    这样,采用C#语句判断用户访问,如果用户访问的报表已经存在于上述文件夹中,则不再重新访问数据库,自动从上述文件夹中提取报表显示。否则执行C#程序中Generate()和LoadReport()等报表生成程序。这样就将报表二次访问的时间缩减到秒级。但这种方法使用的前提只能是在报表数据没有更新的情况下,否则哪怕整张报表只有一个数据项做了更新,所有数据项仍要重新与数据库交互一遍,以确认更新数据。

    (2)采用ORACLE存储过程PL/SQL中Package包编程的方式。每次用户访问特定报表时,Web应用程序将该报表所需数据项信息集中收集起来,并传递给相应Package程序,PL/SQL程序包将这些指标信息所需SQL语句打包,一次性访问相应TABLE中的COLUMN,并将获取的指标数据存储在临时表中,然后一次性的返回到WEB程序中,再填入该报表各数据项,最终呈现给用户。这种方式,避免了以往每个数据项都要单独访问数据库,占用大量系统资源的问题,无论一张报表需要交互的数据项多少,都相当于只执行一次ORACLE查询所需的时间,从而有效解决了数据访问效率的问题。通过测试,采用这种处理方式后,每张报表的访问显示时间,亦缩短到秒级。

    3.2 报表数据录入-显示隔离的问题

    为了便于用户使用、下载、编辑、局部化修改和打印等操作,生产数据采用Web浏览器下的xls文件显示的方式。这就给报表数据的在线录入造成阻碍。同时用户也要求数据的录入和显示必须隔离,以充分保证数据安全性。该系统中,为用户提供了一个简洁的生产指标数据录入界面。通过权限分配,指定各车间专人负责数据录入。而报表显示权限则由另外的权限分配确定。录入的数据以指标关键字、日期、频次、值的方式存入数据库表中,需要时再由报表模板通过C#程序和PL/SQL程序联合检索获取。这样就有效地解决了生产数据录入、显示的安全隔离问题。

    3.3 车间记事等文字信息的问题

    车间记事涉及到大量非数字数据,这些数据无需统计分析,但数据量较大,宜于采用BLOB文本字段的形式存取。为提高交互效率,单独为其建立Table,与其他数字型指标信息区分开,以提高访问效率。

    3.4 生产相关实时数据获取问题

    生产管理型报表中,一般会涉及少量实时数据信息,这些指标信息具有如下特点,时效性要求不是很高,一般为班次(8或12小时一次);有对应的实时位号,可以直接从实时数据库中获取;一般需要对实时数据库中的数据做累加、平均、取最大、最小、方差等统计处理。

    以往的做法是,监控员通过HMI界面读取实时数据,每隔1~2个小时记录一次,统计员通过电话询问方式获取该位号特定时间间隔的值列表,统计计算出最终数据,填入纸质报表。这种方法效率低下,统计时间间隔较大(小时级),数据无法精确,人为因素多,费时费力。我们在该系统中,将生产管理报表中所需的这类数据所对应的实时数据,组态到实时数据库中,实时数据库从控制系统中获取这些指标的秒级数据,并存储在历史数据库中,采用数据库中间件编程方式,将这些实时秒级数据依据报表需求(班级/日级,累加/平均/取最大/方差等),统计分析出最终结果,以REALTAG-DATE-VALUE关键字组合方式存入Oracle数据表中。

    4 综述

    传统的控制系统信息孤岛所导致的纸质报表,电话问询,人工统计的方式,在现在工业生产中,存在信息滞后、效率低下、人为因素多等诸多问题,无法适用于现代高度自动化的生产流程,制约规模化、精细化生产发展。在本文相关科研项目的研究中,有效地解决了某有色企业“烟气制酸”相关流程中存在的上述问题。通过该项目的实施,管理者坐在电脑前,便可以看到各个二级厂矿的精确及时的生产状况信息,该企业烟气制酸生产能力有了大幅度的提高,管理更加科学而富有时效性。有效降低有色冶炼烟气排放量的同时,年制酸生产能力也有了显著增强。达到了节能减排和增加效益的双重效果,是有效利用现代MES理念和信息化、自动化手段,解决精细化作业和实现企业增收节支、满足可持续发展需求的一次较好的尝试。目前该科研项目已进入实际运行阶段,各相关生产管理部门、生产单位使用状况良好。

    后续工作准备将该系统向该企业其他相关生产单位的推广和连接,以达到MES平台一级的信息共享和集成,最终实现整个集团公司平台上的ERP、MES、PLC三层架构整体信息集成,消除企业信息孤岛和信息断层状况。为集团公司国际化经营战略奠定信息化基础。

    参考文献:

    [1] 孙彦广等. 流程工业制造执行系统[M]. 北京: 化学工业出版社,2006.

    [2] Christian Nagel. Bill Evjen. JanGlynn etal. Professional C# 2005. John Wiley & Sons,Inc. 2006.

    [3] 谷长勇,王彬,陈杰等. Oracle 11G权威指南[M]. 北京: 电子工业出版社,2008.


                                                      ——转自《自动化博览》


  • 在线反馈
1.我有以下需求:



2.详细的需求:
姓名:
单位:
电话:
邮件: