您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 基于SQL数据库的wincc复杂报表的实现
基于SQL2005的WINCC复杂报表实现方法TheImplementationmethodofcomplexWinccreportbasedonSQL2005董洪垒王静波河北联合大学电气工程学院摘要:本文介绍了在Wincc组态环境中,基于SQL数据库和VB-Scirpt编程语言实现自定义Wincc复杂报表的操作方法,结合数据库和VB语言详细阐述了如何对数据进行自定义归档、查询以及导出和编辑。基于模块化的思想,将报表的结构分为数据归档、数据查询、数据显示和数据打印四个模块。详细介绍了各个模块的设计思路以及编程方法,从而有效解决了在Wincc7.0环境中实现复杂数据报表的问题。关键词:WINCCSQL数据库复杂报表Abstract:Thispaperintroducesthewincc7.0configurationenvironment,andVB-ScirptbasedonSQLdatabaseprogramminglanguagetoimplementcustomWinCCoperatingmethodofcomplexreports,combiningdatabaseandVBlanguagedetailinghowtocustomizethedataarchiving,query,exportandedit.Basedonmodularthinking,tofilereports,structureddata,dataquery,datadisplayanddataprintinguptofourmodules.Detailsoneachmoduledesignideasandprogrammingmethods,soastoeffectivelyaddressthecomplexdatareportingissuesimplementedinawincc7.0environment.Keywords:winccSQLdatabasecomplexreports0引言目前在工控领域比较流行的组态软件主要有Wincc、组态王等,以上软件在工业现场应用中对于数据的监控等方面功能强大,但是在报表生成以及处理方面却功能有限,主要表现为格式较为固定单一,灵活性不高。对于一般对报表要求不高的用户,可以实现简单的数据表格处理,一旦用户提出更高更复杂的要求,以上软件都没有比较直接的方法,从而使报表设计由画面组态转向对数据库和脚本语言的应用。西门子公司的Wincc组态软件本身具有数据归档和报表的处理功能,尤其在Wincc6.0以后的版本中,开始支持SQL数据库以及VB-Script编程。但是无论何种版本在复杂数据处理中,比如:数据的查询、计算和统计等相对灵活的要求中就显得力不从心。主要表现在Wincc在报表中不能对历史数据进行任意查询和过滤以及相关的统计计算。本文基于毕业设计中的项目开发,实现了一种基于SQL数据库以及VB-Script编程语言实现复杂报表的方法,作为Wincc高级应用中的一种有效探索途径。1报表结构的构建Wincc软件本身虽然提供了数据归档功能和报表编辑功能,但由于固定的格式和一定的功能限制,在项目开发过程中必然感到报表的灵活性不够,实现复杂报表比较困难。但是Wincc7.0支持SQL2005数据库以及VB-Script,因此可以实现对数据库的直接操作。基于此,作者结合数据库语言和VB语言的可操作性,将数据归档、查询、显示、打印等过程用编程的方式实现,就可以大大提高归档和报表的灵活性,解决编辑自定义复杂报表的问题。本文设计的报表系统结构如图1所示,共分为四个部分:数据归档、数据查询、数据显示和数据导出打印。在数据归档部分中利用Wincc组态软件自带的SQL2005数据库建立相应的数据表格,通过Wincc中的VB—Script全局脚本编辑器实现数据归档。数据查询部分则是在界面中利用按钮的VB动作脚本以及相应的SQL数据库语言进行数据的查询。在数据显示部分中利用Wincc提供的强大控件(例如本例中使用的MsFlexGrid控件)进行显示。在数据打印部分同样利用按钮的VB动作脚本,将所查询到的数据输出到Excel电子表格中进行编辑和打印。用户可以随意浏览在任意时间查询到的数据,因为在输出到Excel表格的同时,已经将生成表格利用脚本保存到系统相应的文件夹中,以遍日后进行查阅。以下详细介绍各部分的实现方法和主要的程序设计。2建立数据源2.1在数据库中创建数据库以及相应的数据库表在系统的数据监控过程中,有大量的数据需要进行归档处理,本文涉及的归档方法与Wincc本身自带的数据归档功能类似,就是利用背景脚本将数据采集并写入数据表中进行保存。1)在数据库中创建名为“300调速称”的数据库2)在新建立的数据库中建立名为day,month_A、month_B、month_C的数据表3)在表中定义相应的字段名称例如ID、日期时间、变量名称、班组名称等2.2建立ODBC链接图2:报表系统整体结构图ODBC(OpenDataBaseConnectivity开放数据库互连)是一个用于访问数据库的统一标准接口,应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息建立数据库与ODBC的联系。因此,应用程序只需将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。建立数据源的方法可以分为以下几个步骤:1)打开控制面板,选择管理工具中的数据源,在ODBC数据源管理器中添加“sqlserver”类型的数据源2)定义数据源的名称属性及提供数据源的服务器名称,选择访问方式等3)连接服务器后,选择所要连接的数据库的名称“300调速称”4)测试连接,建立数据源。3数据归档数据归档模块利用Wincc的全局脚本实现,在全局脚本中写入代码,选择相应的触发器在固定的时间(比如每一天的最后一秒或者每个月的最后一秒)执行全局脚本,将数据写入相应的数据表中。同时也可以在写入的数据中加入相应的条件,比如当前日期,当前时间,这样在查询数据的时候可以将这些作为查询条件进行筛选,是数据的归档和查询更加灵活。ODBC数据源支持SQL语言,因此数据的写入代码将利用VB结合SQl语言进行实现。图2是写入数据代码的流程图:关键程序代码:1)读取变量数据Setacum1=HMIRuntime.Tags(acum1)acum1.Readacum1=acum1.Value2)链接数据库sCon=Provider=MSDASQL;DSN=300tsc;UID=sa;PWD=;Setconn=CreateObject(ADODB.Connection)conn.ConnectionString=sConconn.CursorLocation=3conn.OpenSetoRs=CreateObject(ADODB.Recordset)SetoCom=CreateObject(ADODB.Command)SetoCom.ActiveConnection=connoCom.CommandType=13)编辑SQL语言sSql1=insertintoday(日期时间,年,月,日,第一路,第二路第三路,第四路,第五路,第六路,第七路,第八路,班次)sSql1=sSql1&values(getdate(),Year(getdate()),Month(getdate()),Day(getdate()),sSql1=sSql1&'&acum1&','&acum2&','&acum3&','&acum4&','&acum5&','&acum6&','&acum7&','&acum8&','&banci&');4)执行SQL语言写入oCom.CommandText=sSql1oCom.Execute5)释放资源SetoRs=NothingSetoCom=Nothingconn.CloseSetconn=Nothing4数据查询和显示在数据查询和显示部分利用按钮的VB动作脚本来实现,此方法可以充分发挥VB编程语言的灵活性以及强大的数据处理能力,对查询到的数据可以进行相应的计算和统计。例如对查询到数据的求平均值和求和运算等。在显示部分同样利用操作VB提供的MsFlexGrid控件来进行显示查询到的数据,程序流程图如图3:关键程序代码:1)创建数据库连接sCon=Provider=MSDASQL;DSN=300tsc;UID=sa;PWD=;Setconn=CreateObject(ADODB.Connection)conn.ConnectionString=sConconn.CursorLocation=3conn.Open2)定义查询SQL语句sSql1=select*fromdaywhere日期时间between'&riqi&00:00:00'and'&riqi&23:59:59'and班次='&banci&';3)执行查询语句SetoRs=CreateObject(ADODB.Recordset)SetoCom=CreateObject(ADODB.Command)oCom.CommandType=1SetoCom.ActiveConnection=conn图2:写入数据代码流程图图3:查询显示数据代码流程图oCom.CommandText=sSqlSetoRs1=oCom.Executem=oRs1.RecordCount4)将数据写入到MsFlexGrid控件中SetoList=ScreenItems(view1)oList.clearolist.TextMatrix(rownum-1,3)=ors1.fields(6).value5数据的导出和打印Wincc支持的VB-Script脚本提供了Excel等办公软件相应的程序接口,因此可以利用VBS脚本将查询到的数据导出到已建立好的Excel模板中利用Excel电子表格强大的数据处理能力进行更高级的编辑和打印。程序流程与查询方法类似。关键代码1)打开Excel模板SetobjExcelApp=CreateObject(Excel.Application)objExcelApp.Visible=TrueobjExcelApp.Workbooks.Open模板保存路径objExcelApp.Worksheets(sheetname).Activate2)写入数据objExcelApp.WorkSheets(sheetname).cells(2,2).value=Left(shijian,9)6报表实现的综合介绍以上介绍了基于SQL数据库的Wincc复杂报表的实现方法,该方法灵活多变,编程人员可以随意进行数据的读写,不拘泥于本文中的形式。例如可以在写入数据中加入查询条件,可以方便做出复杂的查询等等。对于查询界面中的查询条件需要用Wincc自带的控件进行输入,同时也可以在查询代码中加入更多的统计算法以满足客户的不同需求。Excel电子表格具有强大的数据处理能力,将查询到的数据导出到电子表格,可以方便操作人员对报表进行美化编辑,做出更加具有专业性的报表。以下是系统运行效果图:7结论本文结合毕业设计中的实际项目要求,利用数据库语言和VBs语言将Wincc中的数据进行归档、查询、显示和打印,有效的解决了复杂报表的制作问题,同时利用VB的程序接口将数据导出到Excel电子表格,通过电子表格的数据处理以满足客户的不同需求。参考文献:[1]深入浅出西门子WINCCV6(第2版)[M].北京航空航天大学出版社,2004[2]数据库应用教程(VisualBasic+SQLSever)[M].清华大学大学出版社,2008[3]郭建明,邢晨,刘清.Wincc组态软件中自定义复杂报表的实现[J].工业控制计算机,2007,20(2):1-2[4]徐志杰.基于高级编程语言Wincc复杂报表管理的实现[J].华电技术,2011.1,33(11):54-56[5]巩伟,宋勇江,陈庆文.RSVIE
本文标题:基于SQL数据库的wincc复杂报表的实现
链接地址:https://www.777doc.com/doc-6238281 .html