IFIX报表.docx

上传人:b****6 文档编号:5961182 上传时间:2023-01-02 格式:DOCX 页数:11 大小:297.42KB
下载 相关 举报
IFIX报表.docx_第1页
第1页 / 共11页
IFIX报表.docx_第2页
第2页 / 共11页
IFIX报表.docx_第3页
第3页 / 共11页
IFIX报表.docx_第4页
第4页 / 共11页
IFIX报表.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

IFIX报表.docx

《IFIX报表.docx》由会员分享,可在线阅读,更多相关《IFIX报表.docx(11页珍藏版)》请在冰豆网上搜索。

IFIX报表.docx

IFIX报表

IFIX报表

编辑整理:

 

尊敬的读者朋友们:

这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(IFIX报表)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为IFIX报表的全部内容。

IFIX报表

IFIX报表常规的做法是采用IFIX内嵌的VBA语言,借助于OFFICE自带的ACCESS和EXCEL来做的。

例如我们要在IFIX画面上通过点击一按钮来察看某一天的数据,假如这有三个模拟量如tag1,tag2,tag3,数据间隔一小时归一次档,它主要分为四步:

一、创建一个ACCESS数据库如ReportDataBase。

mdb,用来存放报表所需的数据。

然后就在这个数据库中建立一个表如ReporData,这样IFIX就能以一定的时间间隔将数据写入此数据库刚才创建的表中。

ReportData的结构如下:

字段名类型

日期日期/时间

tag1数值

tag2数值

tag3数值

二、创建ODBC数据源,用于IFIX与上步已建立的数据库和表进行联系。

方法:

控制面板->管理工具->ODBC数据源,打开ODBC数据源管理器,建立一个“系统DSN",点击“添加”,双击“MicrosoftAccessDrivers(*.mdb)”,出现“ODBCMicrosoftAccess安装"对话框。

数据源名:

MyReport注:

此名是任意的字符组合,但不能与数据库重名。

数据库:

ReportDataBase。

mdb,点击‘选择‘按钮选择第一步创建的Access数据库。

点击“完成”,退出控制面板

三、在IFIX中创建一个“基于时间的调度",如图

名称:

任意合法的字符组合

触发信息:

连续

间隔:

1小时

详细代码如下:

点击“VB编辑器“进入VB编辑器

在“工具”菜单—〉引用“MicrosoftActiveXDataObjectsx.xLibrary"

PrivateSubFixTimer3_OnTimeOut(ByVallTimerIdAsLong)

DimcnAsADODB。

Connection

DimresAsADODB。

Recordset

DimStrSQLAsString

Setcn=NewADODB.Connection

Setres=NewADODB.Recordset

cn。

ConnectionString=”DSN=MyReport;UID=;PWD=;"

//MyReport是数据源名称//

cn.Open

StrSQL="select*fromReportDatawhere日期=#”&Date&"#"

//ReportData是建立数据库中的表名//

res。

OpenStrSQL,cn,adOpenKeyset,adLockOptimistic

res.AddNew

res.Fields(0)=Date

res。

Fields

(1)=Fix32。

Fix。

tag1。

f_cv

res。

Fields

(2)=Fix32.Fix.tag2。

f_cv

res。

Fields(3)=Fix32.Fix.tag3。

f_cv

res。

Update

res.Close

Setres=Nothing

Setcn=Nothing

EndSub

另外,如果定义了主键,如上图,选择了

则res.Fields(0)不可用。

 

四、在IFIX画面上插入一个按钮。

按钮名称:

Cmdreport

PrivateSubCmdreport_Click()

UserForm2。

show

EndSub

再在”VB编辑器环境“下,插入一用户窗体.并且在工具—〉附加工具中选择日历控件11.0

在“工具"菜单—〉引用“MicrosoftActiveXDataObjects2.7Library”

“MicrosoftExcel9.0Library"

“取消”按钮的代码

PrivateSubCmdcancel_Click()

UnloadMe

EndSub

“确定”按钮的代码如下:

PrivateSubCmdOK_Click()

'OnErrorResumeNext

DimcnAsADODB.Connection

DimresAsADODB.Recordset

DimxlBookAsExcel.Workbook

DimxlsheetAsExcel.Worksheet

DimstrFileNameAsString

DimStrSQLAsString

DimiAsInteger

DimrowAsInteger

strFileName=”c:

\report。

xls"‘预先设计的报表显示模板文件

StrSQL="select*fromReportDatawhere日期=#"&Calendar1.Value&”#”

IfDir(strFileName)=””Then'判断文件是否存在,不存在则退出

MsgBox”报表模版文件不存在”

ExitSub

EndIf

Setcn=NewADODB.Connection

cn.ConnectionString="DSN=MyReport;UID=;PWD=;”

cn.Open

Setres=NewADODB。

Recordset

res.OpenStrSQL,cn,adOpenKeyset,adLockOptimistic

Ifres.RecordCount<=0Then

MsgBox”你要查询的数据不存在,可能已被删除”,vbInformation+vbOKOnly,”系统提示”

res。

Close

Setres=Nothing

cn。

Close

Setcn=Nothing

ExitSub

Else

res。

MoveFirst

SetxlBook=GetObject(strFileName)

Setxlsheet=xlBook。

Worksheets

(1)

xlBook.Application.Visible=True

xlsheet。

Cells(2,"n”)=CDate(res.Fields(0))

i=0

Whilei〈res。

RecordCount

Row=i+4

xlsheet。

Cells(row,"a")=res。

Fields

(1)

xlsheet。

Cells(row,"b")=res.Fields

(2)

xlsheet.Cells(row,"c”)=res.Fields(3)

i=i+1

res。

MoveNext

Wend

xlsheet。

PrintPreviewTrue

xlBook.Application.DisplayAlerts=False

xlBook。

Application.Quit

EndIf

EndSub

 

基于ADO技术的iFix历史报表的设计与实现

康为水泥阀

1引言

        iFIX是全球最领先的HMI/SCADA自动化监控组态软件。

已有超过300,000套以上的软件在全球运行。

世界上许多最成功的制造商都依靠GEFanuc的iFIX软件来全面监控和分布管理全厂范围的生产数据。

iFIX软件内置功能强大的VBA脚本编译器,能实现复杂工程对软件的要求。

但是,因不同项目对历史数据报表要求不尽相同,而iFIX软件又没有提供针对历史数据报表的通用组件,通常实现报表的方法是使用第三方提供的组件(如:

水晶报表),因其封装功能较多,编程不够灵活,对于比较复杂的报表功能实现起来比较麻烦,而且需要在进行报表组态时单独购买。

ADO组件集成在VisualBasic6.0中,对于复杂的报表功能,采用ADO技术访问iFIX历史数据库实现报表非常灵活.

        2ADO技术与iFIX历史数据库

        2.1ADO技术

        ADO(ActiveXDataObjects)是一个用于存取数据源的COM组件。

它是Microsoft新数据库访问技术,是建立在OLEDB之上的高层数据库访问技术。

ADO易于使用、高速度和较低的内存占有率的优点使得编程效率更高.

        ADO常用的组件对象有:

ADODB。

Connection和ADODB.Recordset。

通过ADO组件对象访问数据库,基本操作流程是:

用Connection对象连接数据库,利用建立好的连接通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。

        2.2iFIX历史数据库

        在iFIX安装时,iFIX安装程序会自动在工作站上建立两个系统数据源“FIXDynamicsHistoricalData”和“FIXDynamicsRealTimeData”。

“FIXDynamicsRealTimeData”数据源连接的是iFIX实时数据库;“FIXDynamicsHistoricalData”数据源连接的是iFIX历史数据库。

        实时数据库和历史数据库都可通过ODBC进行访问。

        在进行iFIX工程组态时,可以在iFIX工作台系统树下的“历史定义”定义要查询的历史数据。

当iFIX运行时,iFIX会按照组态好的要进行记录历史数据的标签的实时值以历史文件的形式保存。

例如:

工程节点名为“FIX”,并且组态生成24小时的历史文件,则这些历史文件以xxxx.H24(其中xxxx为记录时间)保存到工程目录下的“…\HTRDATA\FIX\".iFIX历史数据库主要有以下字段:

        NODE为工程的逻辑节点名;TAG为数据库标签名;FIELD为数据库标签的域名;VALUE为数据库标签数值;DATETIME为记录日期和时间;INTERVAL为查询时间间隔。

        3 历史报表软件的设计与实现

        3。

1功能介绍

        本软件可实现与iFIX工程应用软件的无缝连接,满足查询iFIX历史数据并以报表形式显示。

        1)可以任意选择要查询的变量,变量在报表中的显示顺序只跟选择要查询变量的顺序有关。

        2)查询变量时,按照日期查询,用户只需设置要查询的变量,输入“起始时间"、“结束时间"、“时间间隔"即可进行查询。

        3)查询结果可导出。

        3。

2设计与实现

        软件设计主要包括利用ADO组件对象通过“FIXDynamicsHistoricalData"数据源查询iFIX历史数据库和将查询的结果显示出来。

        1)建立数据库标签名描述文件

        因iFIX历史数据库是按照TAG(数据库标签名)进行数据存储的,而标签名通常为字母以及编号组成,不便记忆,为了使报表更能直观显示,我们建立数据库标签名描述文件.该文件是一个文本文件,将每个标签名(与iFIX数据库管理器标签名相同)与该标签的描述对应起来,如图1所示:

        图1:

数据库标签描述文件

        2)配置软件开发环境,添加ActiveX控件及引用ADO对象库

        本软件开发环境需要安装VisualBasic6.0和MicrosoftOffice组件。

进行报表查询需要在VB工程中插入时间控件(DTPicker)。

进行报表显示需要显示控件(SpreadSheet)。

要在VB工程中添加ActiveX控件,步骤如下:

打开工程→在“工程”菜单→选择“部件”→在“部件"对话框找到“MicrosoftOfficeXPWebComponents”和“MicrosoftWindowsCommonControls-2.6。

0”,选中选中相应复选框→点击确定。

这样就把ActiveX控件添加到了VB工具箱了。

        在使用ADO对象之前,必须先将对象库引入当前工程中。

使用VB集成开发环境“工程”菜单中的“引用”对话框,将其中的“MicrosoftActiveXDataObjects2。

6Library”选中即可.

        3)“添加查询变量"窗口设计

        该窗口设计如图2所示:

 

        图2:

“添加查询变量”窗口

        通过该窗口可以任意添加要查询的变量,设计思路如下:

        ①在窗口初始化程序中,读取数据库标签名描述文件,并将其显示在“所有点列表”列表框中.

        PrivateSubUserForm_Activate()

        ……

        IfDir(VaribleFilePath)<>"”Then

        OpenVaribleFilePathForInputAs1

        DoWhileNotEOF

(1)

        Input#1,int1,str1,str2

        ListBox1.AddItemstr1

        Loop

        Close

        ……

        EndSub

        其中VaribleFilePath为数据库标签名描述文件所在的路径。

        ②点击“〉”按钮,将从“所有点列表"列表框中所选的查询变量移到右边“已选点列表”列表框中。

        PrivateSubCommandButton1_Click()

        DimstrtempAsInteger

        IfListBox1.ListIndex<>—1Then

        ListBox2.AddItemListBox1。

Text

        strtemp=ListBox1.ListIndex

        ListBox1.RemoveItemstrtemp

        ……

        EndSub

        ③点击“〈”按钮,将从“已选点列表”列表框中所选的查询变量移到左边“所有点列表”列表框中.代码与②类似,不再赘述.

        ④点击“确定”按钮,将“已选点列表"列表框中的查询变量逐一在数据库标签名描述文件中检索出相应的iFIX数据库管理器标签名。

        PrivateSubCommandButton4_Click()

        ……

        DimVaribleTemp()AsString

        DimDecTemp()AsString

        ReDimPreserveVaribleTemp(ListBox2。

ListCount)

        ReDimPreserveDecTemp(ListBox2。

ListCount)

        IfDir(VaribleFilePath)〈〉””Then

        i1=0

        Fori=1ToListBox2.ListCount

        OpenVaribleFilePathForInputAs1

        LabelTemp=ListBox2。

List(i-1)

        DoWhilei1=0

        Input#1,str1,str2,str3

        Ifstr2=LabelTempThen

        DecTemp(i)=str2

        VaribleTemp(i)=str3

        i1=1

        EndIf

        Loop

        i1=0

        Close#1

        Form1。

ListBox1.AddItemVaribleTemp(i)

        Form1。

ListBox2。

AddItemDecTemp(i)

        Next

        …

        EndSub

        在这段程序代码中,定义了两个字符串数组,字符串数组VaribleTemp()用于存放要进行历史数据查询的iFIX数据标签名,并赋值给主窗口Form1的列表框ListBox1;字符串数组DecTemp()用于存放要进行历史数据查询的数据库标签名描述,并赋值给主窗口Form1的列表框ListBox2.

        4)主窗体的设计

        “历史数据查询”主窗体完成设置查询起始时间、结束时间、查询时间间隔和进行iFIX历史数据库的查询功能。

该窗口设计如图3所示:

        ①向该窗体加入日期时间控件DTPicker和表格控件SpreadSheet。

        ②点击查询按钮,软件将按照指定的已选择的查询变量进行数据查询。

在此按钮下编写的代码是报表程序的核心,包括以下部分:

        I.对时间日期控件转换成格式化字符串。

        ……

        strStartTime=Format(Me。

DTStartTime,”yyyy-MM—ddHH:

mm:

ss”)‘格式化起始时间

        strEndTime=Format(Me.DTEndTime,"yyyy-MM-ddHH:

mm:

ss")‘格式化结束时间

        strInterval=Format(Me。

Interval1。

Value,"HH:

MM:

SS")‘格式化时间间隔

 

        图3:

历史数据查询窗口

        II。

与iFIX历史数据库连接。

        …..

        DimconADOAsADODB.Connection‘定义Connection类型的变量

        SetconADO=NewADODB.Connection‘创建新的Connection对象赋值给该变量

        conADO。

ConnectionString="Provider=MicrosoftOLEDBProviderforODBCDrivers;”+_”DSN=FIXDynamicsHistoricalData;UID=;PWD=;"‘指定连接字符串

        conADO。

Open‘使用Open方法打开连接

        ……

        III。

创建并返回记录集,在表格控件SpreadSheet显示结果。

        DimTagGroup()AsString‘定义字符串数组,用于存放iFIX标签名

        ReDimPreserveTagGroup(ListBox1.ListCount)

        Fori1=1ToListBox1.ListCount

        TagGroup(i1)=Me.ListBox1.List(i1-1)

        strQuery=”SELECTVALUE,DATETIME”+_‘选择要查询的字段

        ”FROMFIX"+_‘历史数据库节点名为Fix

        ”WHERETAG=‘”+TagGroup(i1)+”‘”+_‘选择要查询的iFIX标签

        ”ANDINTERVAL=‘"+strInterval+"‘"+_‘选择要查询时间间隔

        "AND(DATETIME>={ts‘"+strStartTime+”‘}AND"+_‘查询时间不小于起始时间

        ”DATETIME〈={ts‘”+strEndTime+"‘})"‘查询时间不大于结束时间

        DimrsADOAsRecordset‘定义Recordset类型的变量

        SetrsADO=NewADODB。

Recordset‘创建新的Recordset对象赋值给该变量

        rsADO。

CursorLocation=adUseClient

        rsADO。

OpenstrQuery,conADO,adOpenDynamic,adLockUnspecified,-1

        ‘打开记录集

        IfrsADO。

RecordCount<=0Then

        MsgBox"该时间范围无数据”

        SetcnADO=Nothing

        SetrsADO=Nothing

        ExitSub

        EndIf

        Me.Spreadsheet2.Range(Chr(Asc("B”)+(i1—1))&”1”)=Me.ListBox2。

List(i1-1)

        ‘在表格控件第1行,第2列开始显示要查询变量的iFIX标签名描述

        Fori=1TorsADO。

RecordCount

        Me。

Spreadsheet2.Range("A”&(i+1))=rsADO!

DateTime&""

        ‘在表格控件第2行起,第1列显示要查询变量的日期时间。

        IfrsADO!

Value&"”=""Then

        Me.Spreadsheet2。

Range(Chr(Asc("B")+(i1—1))&(i+1))="无数据"

        Else

        Me.Spreadsheet2。

Range(Chr(Asc("B")+(i1-1))&(i+1))=rsADO!

Value&””

        ‘在表格控件第2行起,第2列起显示该标签查询出的数据。

        EndIf

        rsADO。

MoveNext

        Nexti

        SetrsADO=Nothing‘释放Recordset对象

        Nexti1

        SetconADO=Nothing‘释放Connection对象

        IV。

数据导出

        点击“导出”按钮,将查询到的数据导出成XML文件,可在Excel中打开.

        Me.Spreadsheet2.Export

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1