您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > FTView数据记录
1、引言FactoryTalkViewSupervisoryEdition是RockwellAutomation公司组态软件,是与公司自动化产品结合最佳的可视化软件产品,提供了强大的数据监控能力,方便用户进行上位机的画面组态。FactoryTalkViewSE内嵌VBA,它为自定义及扩展FactoryTalkViewSE功能提供了完整的开发环境。FactoryTalkViewSE和其他组态软件一样,本身报表生成、处理能力比较弱。为了实现数据报表功能,本文使用FactoryTalkViewSE内嵌的VBA,与Excel相结合,利用Excel强大制表功能,实现数据报表功能。2、实现原理通过日志模型设置,FactoryTalkViewSE从PLC采集实时数据,通过ODBC接口存储到Access数据库中,利用FactoryTalkViewSE内嵌的VBA开发,访问Access数据库,调用Excel,将Access数据库中的数据读取到Excel中,在进行处理,形成报表。系统解决方案框图如图1所示:图1报表解决方案框图3、Excel对象模型Excel对象封装了MicrosoftExcel的全部元素,利用Excel对象提供的属性、方法和事件,就可以在应用程序中生成Excel报表[1]。Excel对象模型描述了Excel对象之间的结构关系,如图2所示:图2Excel对象模型(1)Application对象Application对象表示Excel应用程序,在Excel读象模型中该对象处于模型的顶端,通过使用Application对象可以访问模型中其他对象,从而控制Excel应用程序的外观和功能。(2)Workbook对象Workbook对象表示Excel中的工作簿,即对应一个Excel文件,通过使用Workbook对象就可以实现对Excel工作簿的各种控制。(3)Worksheet对象Worksheet对象表示Excel中的工作表,通过使用Worksheet对象就可以实现对Excel工作表中的各种控制。(4)Range对象Range对象表示Excel中的区间,可以表示Excel中的单元格、几个单元格、行、列或一个选中的区域,使用Range对象可以实现对Excel单元格或选中区域的各种操作。4、应用实例本文通过读取系统标签中的年、月、日、时、分、秒,在报表中体现出记录日期和数值。下面将具体介绍如何实现报表。(1)将Excel、Access对象库加载到当前VBA程序中为了能够在程序中调用Access数据库以及Excel对象,为Access与Excel连接、互相嵌入使用做准备,必须在VBA程序中加载Excel、Access对象库。在VBAApplication对象Workbook对象Worksheet对象Range对象ODBCFactoryTalk采集数据Access数据库ExcelVBA编程环境下,单击“Tools”菜单中的“Reference”命令,在弹出的对话框汇中选中MicrosoftAccess11.0ObjectLibrary和MicrosoftExcel11.0ObjectLibrary两项,点击“确定”后退出,这样就完成了Excel、Access对象库在VBA程序中的加载[2]。(2)打开Excel模型为了使用Excel生成报表,必须事先打开Excel模型,新建一个Excel文件用以存储从Access数据库中读取的数据,并使用Excel对象的属性和方法完成报表的设计,从而形成我们所需要的报表。下面的VBA程序语句实现了在FactoryTalkViewSE中打开Excel的方法。‘创建Excel对象SetobjE=CreateObject(Excel.Application)‘设置Excel属性WithobjExcel‘显示Excel.Application.Visible=True‘创建新的工作簿.Application.workbooks.Add‘激活第一个工作表Sheet1.worksheets(Sheet1).Activate‘给每一列数据添加表头.Cells(1,2).Value=日期.Cells(1,3).Value=秒.Cells(1,4).Value=年.Cells(1,5).Value=月.Cells(1,6).Value=日.Cells(1,7).Value=时.Cells(1,8).Value=分(3)创建ADO对象访问数据库在与Access数据库连接中,Excel有Automation、DataAccessObjects(DAO)以及ActiveXDataObject(ADO)三种方法,最新的,最建议用的建立对Access数据库的链接方法是使用ActiveXDataObject(ADO)[3],本文采用了这种链接到Access数据库的方法。首先必须先设置对微软ActiveX数据对象2.5库或者更高版本的引用,与加载Excel、Access对象库一样,将MicrosoftActiveXDataObjects2.5Library或更高版本加载到VBA程序中来,编写下列程序创建ADO的Connection对象建立与数据库的链接。Setcn1=CreateObject(adodb.connection)(4)读取数据库实际地址在读取数据库实际地址时候,需要编写数据库的驱动程序,本系统中数据库驱动程序采用的是microsoftaccessdriver(*.mdb),并且将通过ODBC接口存储的数据库存放于E盘datalog目录下,因此该步骤的VBA程序如下[3]:cn1.opendriver={microsoftaccessdriver(*.mdb)};DBQ=E:\datalog(5)获取Access数据通过FactoryTalkViewSE数据日志记录的历史数据,在数据库中的FloatTable总记录了一下几种数据:DateAndTime、Millitm、TagIndex、Val、Status,因此我们需要从这些数据中选取有用数据进行报表输出,结合Excel对象属性以及设置SQL语言的查询命令,按照不同的需要编写相应的SQL语句用来实现选择我们所需要的数据,本系统需要的FloatTable中的DateAndTime和Val两列数据。下面VBA程序实现了从Access获取历史数据的功能。‘创建游标Setrs=CreateObject(adodb.recordset)‘设置SQL语言查询命令,扫描FloatTable中的所有数据,以便后面程序能够正确读取数据sql=select*fromFloatTable‘打开游标rs.opensql,cn1‘将FloatTable中的DateAndTime一列写入Excel中的第一列,Val一列写入Excel中的第二列i=1DoWhileNotrs.EOFobjE.Sheets(1).Cells(i,1)=rs(DateAndTime)objE.Sheets(1).Cells(i,2)=rs(Val)rs.MoveNexti=i+1Loop这样实现了从Access数据库读取数据到Excel中的功能。(6)在Excel完成行列转换由于在MicrosoftAccess记录文件中,文件记录方式为行记录方式,在形成报表的时候需要将其转化成列记录方式,在Excel进行行列转换非常简单,只要在Excel中C1单元格输入公式:C1=INDIRECT(“B”&6*(ROW()-1+COLUMN()-1)本文记录数据为6个,在公式中数字为6,表示每六个数形成一行,该数根据实际需要改变。然后再将鼠标拖至H1,然后将C1:H1往下拖即可实现利用Excel数据报表功能。完成后报表如图13所示:图3.13数据报表5、结论与大部分组态软件相似,FactoryTalkViewSE在数据监控、画面组态功能较强,但在报表生成、处理能力较弱。此方法实现复杂的生产报表,开发周期短,可操作性强,完全满足工业的生产要求,在此基础上,完全可实现班报、周报、月报、年报等。参考文献[1]苗苗,朱秀慧,王海.组态软件RSView32种用VBA实现报表的方法[J].自动控制,2006,12:49-50.[2]牛正光,张五一,王东云.用VBA在RSView32中实现报表的方法[J].中原工学院学报,2008,19(4):49-52.[3]MichaelAlexander,GeoffreyClark.MicrosoftExcelandAccessIntegerationwithOffice2007[M].Indiana:WileyPublishing,Inc.,2007.
本文标题:FTView数据记录
链接地址:https://www.777doc.com/doc-2872796 .html