




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于ADO的IFIX历史数据报表黄重庆 (福建工程学院 电子信息与电气工程系 福州)摘 要:本次所使用的报表是基于ADO的IFIX历史数据报表,上位机采用组态软件iFix4.5,通过Visual Basic 6.0作为开发工具,运用模块化的方式,采集“智能仓储系统”和“冷却系统”所产生的数据,对各数据进行实时的监控和有效管理,同时可通过对不同信号的读取,采用本文介绍的方法设计的报表应用程序具有普遍性,通过简单修改可移植到其它工程中。 关 键 词:ADO;IFIX; 历史报表;VBABased on the historical data report IFIX ADOHuangChongQing(FuJian University of Technology,Electronic information and electrical engineering,fuzhou)Abstract:This time uses the report form is based on the ADO IFIX historical data report form, the superior machine uses configuration software iFix4.5, 6.0 takes the development kit through Visual Basic, the utilization modulation way, the data which gathering “the intelligence warehousing system” and “the cooling system” produces, carries on the real-time monitoring and the effective management to various data, simultaneously may through to the different signal read, use the methods design report form application procedure which this article introduced to have the universality, may transplant through the simple revision to other projects. Key words: ADO;IFIX; HIM ;VBA1 引言iFIX是全球最领先的HMI/SCADA自动化监控组态软件。已有超过300,000套以上的软件在全球运行。世界上许多最成功的制造商都依靠 GE Fanuc的iFIX软件来全面监控和分布管理全厂范围的生产数据。iFIX 软件内置功能强大的VBA脚本编译器,能实现复杂工程对软件的要求。但是,因不同项目对历史数据报表要求不尽相同,而iFIX软件又没有提供针对历史数据报表的通用组件,通常实现报表的方法是使用第三方提供的组件(如:水晶报表),因其封装功能较多,编程不够灵活,对于比较复杂的报表功能实现起来比较麻烦,而且需要在进行报表组态时单独购买。ADO组件集成在Visual Basic 6.0中,对于复杂的报表功能,采用ADO技术访问iFIX历史数据库实现报表非常灵活。1同时采用Excel自带的强大的函数和处理数据的能力,对于实现各工程对报表功能的要求。2 .ADO技术与iFIX历史数据库2.1 ADO概述ADO (ActiveX Data Objec t) 对象是DAO /RDO 的后继产物, 很多开发工具都支持这个对象, 比如Visual Basic 和ASP。它是Microsoft公司专门为适应网络数据库开发和客户端需求而推出的一种跨平台远程数据库访问技术。ADO 扩展了DAO和RDO所使用的对象模型, 它包含较少的对象、更多的属性、方法和事件, 这使得ADO 对象更容易使用。ADO 通过OLEDB 所提供的高性能数据访问方法, 可以方便快速地对各种数据源进行访问和操作。ADO 可访问的数据源包括关系或非关系型数据库、电子邮件和文件系统、文本和图形、自定义业务对象, 比如SQL - Server、Access、Orac le 数据库, exce l、word文档等。22.2 ADO 技术ADO (ActiveX Data Objects) 是一个用于存取数据源的COM组件。它是Microsoft新数据库访问技术,是建立在OLE DB之上的高层数据库访问技术。ADO易于使用、高速度和较低的内存占有率的优点使得编程效率更高。ADO常用的组件对象有:ADODB.Connection和ADODB.Recordset。通过ADO 组件对象访问数据库,基本操作流程是:用Connection对象连接数据库,利用建立好的连接通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。2.3 iFIX历史数据库在iFIX安装时,iFIX安装程序会自动在工作站上建立两个系统数据源“FIX Dynamics Historical Data”和“FIX Dynamics Real Time Data”。 “FIX Dynamics Real Time Data”数据源连接的是iFIX实时数据库;“FIX Dynamics Historical Data” 数据源连接的是iFIX历史数据库。实时数据库和历史数据库都可通过ODBC进行访问。3. 历史报表软件的设计与实现 3.1 报表功能介绍本报表可实现与iFIX工程应用软件的无缝连接,满足查询iFIX历史数据并以报表形式显示。如图1所示1)可以选择不同方式产生的报表,用户可选择诸如“冷却系统报表”“客户资料报表”“货物状态日报表”“库位状态日报表”等多种方式报表,并可根据发展需要和各用户之间的不同特点而随时变化2)查询变量时,按照日期查询,用户只需设置要查询的变量,输入“起始时间”、“结束时间”、“时间间隔”即可进行查询。3)查询结果可导出,打印,对数据进行维护和修正4)添加了权限管理,不同用户所能使用的功能依权限的高低而不同。图10所示图10图13.2设计过程及功能实现在VB中, 使用ADO访问数据库主要有两种方式, 一种是使用ADO Data控件, 通过对控件的绑定来访问数据库中数据, 即非编程访问方式; 另一种是使用ADO对象模型, 通过定义对象和编写代码来实现对数据的访问, 即编程访问方式。本次报表功能实现主要利用ADO对象模型,使用ADO组件对象通过“FIX Dynamics Historical Data”数据源查询iFIX历史数据库和将查询的结果显示出来。31) 新建IFIX工程在WINDOWS开始/运行中输入BackupRestore.exe /FactoryDefault,按步骤提示新建工程,如果使用系统默认工程,即安装软件时的工程,运行报表程序时,将出现错误,NO HISTORICAL DATA FOUND,刚开始误以为需要配置ODBC数据源,在这里耗费了许多时间,后来无意中在其他工程中发现可以实现这个功能,经过对文献资料的阅读,确定了读取历史数据时需要使程序在新建工程中。2) 定义所需报表变量集.在过程数据库中定义变量,建立相应的变量值。如G1.G2等,这部分变量是在上位机中将用到的变量名,具体可参照IFIX电子书。.在历史定义中选择所需记录的历史数据。选定节点的一组标签名,用来标识含趋势分析所需过程数据的数据库块。最多可以定义255个采集组,每个采集组中包含80个不同的标签。这些标签是用户所需要记录的重要数据的数据名。在这里我们可以定义产生一个子文件的时间和要写入文件的数据的类型和大小。如图图2如需选用多个节点,可在SCU配置中,本地启动项选择“启动本地节点别名”。如图3所示图3 启动后台历史数据库数据采集,在进程中查看是否启动。在SCU配置任务配置中,选择HTC ,如图4所示 图4选择HTC完成后,可通过重启软件或者任务控制中HTC管理项启动,如图5所示图5小结:通过以上操作,我们可以看到在IFIX的HTRDATA文件夹下生成一个以你所定义的节点名为名称的文件夹,里面将产生在一段时间里用户所定义的标签所产生的数据,如图6所示图6FIX文件夹中的文件为*.H24或*.H08或*.H04,*代表历史数据库所定义的标签在各时间段所产生的数据,报表中要读取的数据就是从这些标签所记录的数据生成的文件中读取的。如图7所示图73)在EXCEL中制作模板,按照实际工程所需要记录的数据,如时间,数值,标签名等在excel中作出适合的表格。在设计模板的过程中,我们可以充分利用EXCEL自带的强大的函数功能,这样可以简化程序,将所需的数据进行更全面和准确的统计和分析,以求更加满足用户的需求。如图8所示图8将模板另存为网页htm格式,保存在当前目录的PIC文件夹下,以htm后缀可以保证操作和查看人员只能阅读而不能对里面的数据进行修改,以防止现场误操作。如图9所示图94)在IFIX中新建画面及布置画面配置软件开发环境,添加ActiveX控件及引用ADO对象库在画面中选择ComboBox控件,DPTicker控件,WebBrower控件,Timer控件和菜单编辑控件PopupMenu控件等各项需要的控件。如果部分控件在IFIX中无法找到,可在VB中查询该控件名称,一般这些控件在C:WINDOWSsystem32中可以找到。 部分控件的命名和使用在程序中将DTPiker控件命名为DTPstart和DTPend,配置如图所示将ComboBox分别命名为ComboBox5,ComboBox6等 ,将WebBrower命名为WebBrower1,将Timer命名为aaa和ddd。 在使用ADO对象之前,必须先将对象库引入当前工程中。使用VB集成开发环境“工程”菜单中的“引用”对话框,将其中的“Microsoft ActiveX Data Objects 2.6 Library”和“IE Popup Menu”选中即可。下图为基本的引用,具体工程中可根据需要添加引用。 对画面进行优化和布置。用户可将各控件以自己的方式进行排列,美化画面,也可将相似的控件成组,方便管理画面。5).使用外部数据库如果需要读取外部数据如ACCESS数据库,可以建立一个*.mdb文件,并通过程序调用。3.3.IFIX历史报表流程图本次所使用的报表是基于ADO的IFIX历史数据报表,采用Mircrosoft新数据库访问技术,这是建立在OLEDB之上的高层数据访问。运用模块化的方式,采集“智能仓储系统”和“冷却系统”所产生的数据,如“智能仓储系统”中库位的状态位的变化和出库量,入库量的统计,对“冷却系统”中的水压,温度等变化值进行了实时的监控和有效管理,同时可通过对不同信号的读取:.射频卡信号的读取,连接ACCESS数据库,对其进行访问,了解客户的资料和产品的要求,智能实现对货物进行出入库的控制。对货物入库的信号的读取,访问FIX历史数据库,在EXCEL中显示历史数据3.4程序设计思路:本次所制作的报表使用一张共用的EXCEl工作簿,在这张工作簿可以添加所需的工作表如sheet1代表仓库库位状态日报表,sheet2代表仓库货物日报表,sheet3代表仓库货物月报表等等,使用这种方法能做到对报表的有效管理,只需在同一张工作簿中就可添加实际工程中所需要的各种报表,在面对比较庞大的系统的数据记录尤其显出了它的优越性。同时我们只需使用少量的常用控件就可实现对时间,报表类型的选择,我们还提供报表的打印,删除,导出等一系列的辅助功能,在开发新项目时具有较强的移植性。下面我们就如何实现该报表功能进行详细的介绍。1)初始化和定义变量定义报表系统中所需的各种变量,本次程序使用较多的子程序,我们定义了全局变量,实现对各个子程序的联系和控制。定义全局变量Public X As Integer Public ExcelApp As excel.ApplicationPublic t As Integer Public ExcelBook As excel.WorkbookPublic r As Integer Public ExcelSheet As excel.WorksheetPublic i As Integer Public rsADO As ADODB.RecordsetPublic j As Integer Public cnADO As ADODB.ConnectionPublic m As Integer Public Sql As String对其进行初始化,在Combobox控件中添加各种项目和各种相应的执行动作。Private Sub CFixPicture_Activated() 在combobox中添加各项目ComboBox5.AddItem 货物情况日报表ComboBox5.AddItem 货物情况月报表ComboBox6.AddItem 客户资料报表.End Sub选择combobox中项目时对应的执行动作Private Sub Combobox5_change()If ComboBox6.Text ThenComboBox6.Text = End IfIf ComboBox5.Text = 库位状态日报表 ThenX = 1Call CommandButton1_ClickElseIf ComboBox5.Text = 货物情况日报表 ThenX = 2Call ChoiceCall CommandButton1_Click.End sub2)初始化时间和下拉菜单使运行状态下结束时间总是为当前系统时间,开始时间总是退后一个小时,方便得到最新的数据。Private Sub CFixPicture_Initialize()初始化时间Me.DTPstart = DateAdd(h, -1, Now)Me.DTPend = Now初始化下拉菜单IEPOP1.AddItem &打开, 1IEPOP1.AddItem &关闭, 2IEPOP1.AddItem &保存, 3End Sub3)主程序的设计向该窗体加入日期时间控件DTPicker和浏览器控件WebBrower。选择各报表类型,软件将按照指定的已选择的查询变量进行数据查询。Private Sub CommandButton1_Click()On Error GoTo exect 发生错误跳转,执行相应的动作。 对时间日期控件转换成格式化字符串。处理开始时间StartDate = Format(Me.DTPstart, yyyy-MM-dd HH:mm:ss)处理结束时间DtmMonth = DateAdd(m, 1, Format(Me.DTPstart, yyyy-mm) & -01)DtmMonth = Format(Me.DTPend, yyyy-MM-dd HH:mm:ss) 设置时间间隔strInterVal = Format(Me.DTPinterval1.Value, HH:mm:ss) 查询语句If X = 6 Then 表示当X=6时从THISNODE读取其中符合时间限制的VALUE,DATETIME,TAG 。 Sql = SELECT VALUE,DATETIME,TAG FROM THISNODE & _ WHERE (DATETIME=ts & StartDate & AND & _ DATETIME=ts & DtmMonth & ) & _ AND InterVal= + strInterVal + End If 连接并读取数据库8Set cnADO = New ADODB.Connection 创建新的Connection对象赋值给该变量Set rsADO = New ADODB.Recordset 创建新的记录集.Recordset对象赋值给该变量If X = 7 Then 指定连接字符串,将access数据库建立好后可以放置在当前工程的APP目录下,方便管理,这里使用共享数据库 SqlString1 = Select * SqlString2 = From 客户信息 SqlString3 = Where 公司ID= & & Goal & and 卡片属性=提货 SqlString4 = or 编号= & & Goal & Sql = SqlString1 & SqlString2 & SqlString3 & SqlString4cnADO.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source = GE25SharedDocs公司信息.mdb;Persist Else cnADO.ConnectionString = Provider = Microsoft OLE DB Provider for ODBC Drivers; & _ DSN=FIX Dynamics Historical Data;UID=;PWD=; End IfcnADO.Open 使用Open 方法打开连接rsADO.CursorLocation = adUseClientrsADO.Open Sql, cnADO, adOpenDynamic, adLockUnspecified, -1 判断有无数据,当rsADO.RecordCount即要查询的数据对应的行数=0时跳出对话框。If rsADO.RecordCount = 0 Then MsgBox 该时间范围内无数据 Exit SubEnd If Excel报表制作,创建符合需求的Excel模板。4 X代表同一张工作簿中不同的工作表,如X=1代表sheet1,X=2代表sheet2。Set ExcelApp = CreateObject(Excel.application) 创建新的Excel进程Set ExcelBook = ExcelApp.Workbooks.Open(System.ProjectPath & app报表.htm)Set ExcelSheet = ExcelBook.Worksheets(X)ExcelApp.Selection.ClearContentsExcelBook.Worksheets(X).SelectrsADO.MoveFirst 不同报表中选择不同数据处理方式Select Case XCase 1 Call DO1。End Select保存关闭Excel进程ExcelBook.Save ExcelBook.Close将处理后的报表在浏览器中显示出来 With Me.WebBrowser1 .Navigate System.ProjectPath & app报表.htm .AddressBar = FalseEnd With释放变量Set ExcelApp = NothingSet ExcelBook = NothingSet ExcelSheet = NothingSet cnADO = NothingSet rsADO = NothingQ = 1ThisWorkbook.Close savechanges:=Falseexect: 发生错误跳转位置。If Q 1 ThenExcelApp.QuitMsgBox CStr(Err.Number) + Err.DescriptionEnd IfSet cnADO = NothingSet rsADO = NothingSet ExcelApp = NothingSet ExcelBook = NothingSet ExcelSheet = NothingEnd Sub4)子程序在报表使用过程中,子程序的功能为处理在Excel显示出来的数据和读取各类数据库中的数据,模块化的方式,方便不同的用户根据实际需要进行调整,在保证主程序的同时,只需分块修改子程序,就可达到相应的功能。 选择库位状态日报表时的数据处理方式Sub DO1()Dim rr =0 As IntegerDim n=0 As IntegerDim m=1 As IntegerFor i = 5 To rsADO.RecordCount + 54 rsADO.RecordCount 为每次调用的数据的的总个数 If m = 0 And m = 6 ThenDo While i = Int(rsADO.RecordCount) * (m) / 18) + 5 将数据平均分成18份,写入18个库位对应的表格中 n = n + 3 一个库位写完,换3行,再次写入 rr = rr + rsADO.RecordCount / 18 m = m + 1 If m = 7 Then Exit Do Loop If m = 7 Then i = i + rsADO.RecordCount / 18 + 4 n = n - 18 End If。 End If With ExcelSheet 将数据写入Excel中 Range(Chr(Asc(b) + (n) & (i - rr + 1) = rsADO!Datetime & If rsADO!Value & = Then Range(Chr(Asc(b) + (n + 1) & (i - rr + 1) = 无数据 Else Range(Chr(Asc(b) + (n + 1) & (i - rr + 1) = rsADO!Value & End If Range(Chr(Asc(b) + (n + 2) & (i - rr + 1) = rsADO!Tag & End With rsADO.MoveNext Next iEnd Sub 选择客户报表时的数据处理方式,从ACCESS数据库中读取相应的数据。Sub DO5() For j = 1 To rsADO.RecordCountExcelSheet.Cells(j + 5), 1) = rsADO.Fields(0).Value & ExcelSheet.Cells(j + 5), 2) = rsADO.Fields(1).Value & ExcelSheet.Cells(j + 5), 3) = rsADO.Fields(2).Value & ExcelSheet.Cells(j + 5), 4) = rsADO.Fields(3).Value & ExcelSheet.Cells(j + 5), 9) = rsADO.Fields(4).Value & rsADO.MoveNextNext jEnd Sub 打印报表子程序Sub AA() Dim Msg, Style, Title, Help, Ctxt, Response, MyStringDim bPrinted As BooleanMsg = 您真的要打印此报表吗 ? 定义消息文本Style = vbYesNo + vbDefaultButton2 定义按钮Title = 打印窗口 定义标题文本Help = DEMO.HLP 定义帮助文件Ctxt = 1200 定义帮助主题Response = MsgBox(Msg, Style, Title, Help, Ctxt)If Response = vbYes Then 用户按下“是”bPrinted = Application.ActiveDocument.PrintOut 完成打印操作ExcelApp.ActiveSheet.PageSetup.Orientation = xlPortraitExcelApp.ActiveSheet.PageSetup.PageSize = xlPaperA4ExcelApp.ActiveSheet.PrintOutElseEnd 用户按下“否”,返回原报表End IfEnd Sub 调用打印机的声明和子函数Private Declare Function PrintDlg Lib comdlg32.dll Alias PrintDlgA _(pPrintdlg As PrintDlg) As Long Private Type PrintDlg lStructSize As Long hwndOwner As Long hDevMode As Long hDevNames As Long hdc As Long flags As Long nFromPage As Integer nToPage As Integer nMinPage As Integer nMaxPage As Integer nCopies As Integer hInstance As Long lCustData As Long lpfnPrintHook As Long lpfnSetupHook As Long lpPrintTemplateName As String lpSetupTemplateName As String hPrintTemplate As Long hSetupTemplate As LongEnd Type其他子程序可以上述方式依次添加,这里不再赘述。3.5具体调试实现过程:比如我们在客户资料报表这个对话框中选择“库位状态日报表”,此时X=1,将从工作簿中选择出代表“库位状态日报表”的sheet1进行数据处理和显示,同时可以在时间选择的对话框选择我们所需要的时间段的数据,选择开始时间、结束时间和显示在EXCEL表格中的数据的时间间隔,选择完成后,系统将跳过其他不满足条件的程序,运行cnADO.ConnectionString = Provider = Microsoft OLE DB Provid
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 清明团日活动主题策划方案
- 山东省诸城市密州街道卢山初中九年级化学下册 12.1 人类重要的营养物质说课稿 (新版)新人教版
- 高效档案室组织管理与流程优化方案
- 昆虫标本采集制作工成本控制考核试卷及答案
- 剑麻栽培工设备维护与保养考核试卷及答案
- 会计员考试题目及答案
- 实体店生意营销方案模板
- 地震勘探工操作考核试卷及答案
- 水果园土壤盐渍化防治分析报告
- 光伏聚光组件制造工效率提升考核试卷及答案
- 公安援疆工作总结
- 湖南省益阳市2026届高三9月教学质量监测数学试题(含答案)
- 第8课《网络新世界》第一课时-统编版《道德与法治》四年级上册教学课件
- 2025秋人教版美术七年级第一单元 峥嵘岁月第1课 情感表达2
- 2025年审计部招聘考试模拟题及答案详解
- 2025年招聘市场年中洞察报告-瀚纳仕
- Bowtie安全分析培训课件
- 退役军人优抚政策课件
- 财务遴选笔试题及答案
- (2025秋新版)人教版二年级数学上册全册教案(教学设计)
- 六年级上册音乐课教案
评论
0/150
提交评论