有关iFIX软件报表生成的说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有关iFIX软件报表生成的说明 iFIX软件可以通过内置的VBA借助EXCEL,ACCESS,Crystal Roport等软件生成报表。本文通过 VBA+ADO+EXCEL 做一个具体的介绍。
1.V BA(Visual Basic for Application)
VBA是iFIX完全内置的一个强有力的编程工具,可以使用户快速方便的生成自动的操作任务和过程自动化的解决方案。
IFIX的VBA工具包括以下特性:
可操作所有列出的iFIX对象的属性,方法和事件
支持多种数据源,包括iFIX过程数据库,任何OPC服务器,任何对象的属性和SQL数据库
ODBC支持
ActiveX控件支持
VBA脚本生成向导及IFIX命令可以帮助你为常用任务自动生成程序代码
第三方控件的安全容器
下面的程序代码就是在iFIX中建立一个新的EXCEL应用程序
并打开报表模版。
Dim msexcel As Excel.Application
Set msexcel = CreateObject("Excel.Application")
With msexcel
.Visible = True
.Workbooks.Open "e:\histdemo\FixReports.xls", ,
False
.ActiveWorkbook.ActiveSheet.Select
.DisplayAlerts = False
.Wait (Now() + 0.00002)
End With
2.A DO (ActiveX Data Object)
ADO 是微软推出的最新的数据库访问方式。它综合了微软早期推出的DAO及RDO的特性并取代了DAO及RDO。ADO可以访问更多类型的数据库,并且可以通过ODBC(Open DataBase Connectivity)访问数据,但它的结构是建立在OLE DB Providers上。
IFIX软件安装完毕以后,在控制面板的ODBC数据源中会增加两个系统DSN:
FIX Dynamics Historical Data iFIX历史数据源
FIX Dynamics Real Time Data iFIX实时数据源
ADO可以通过访问这两个数据源来直接操作iFIX历史数据库和实时数据库。
ADO类介绍:
Connection 创建和维护到数据库或其他数据库的连接,管理数
据传输,其OPEN方法建立实际的连接。
Recordset 提供存取表或其他记录集的能力,一个记录集对象
在某一时刻只能查看一条记录。提供移动记录的方
法,本类中的OPEN方法通过指定的表名,SQL语法,
命令以及连接对象获得存取的记录。
Field 提供存取Recordset对象中字段的能力,包括当前记录中的名称,类型和值,这些值的修改将改变数
据源中的值,每一个Recordset对象都维护一批
Field对象。
Dim rsADO As New ADODB.Recordset
Dim cnADO As New ADODB.Connection
Dim SQL1 As String
strStartTime = User.strStartTime.CurrentValue
strEndTime = User.strEndTime.CurrentValue
Tag = User.Tag.CurrentValue
INTERVAL = User.INTERVAL.CurrentValue
SQL1 = "SELECT * FROM FIX WHERE FIX.TAG LIKE '%" + Tag
+ "%' AND FIX.VALUE>0 AND (FIX.DATETIME>{ts'" +
strStartTime + "'} and FIX.DATETIME<{ts'" + strEndTime
+ "'})" + _
"and FIX.INTERVAL='" + INTERVAL + "'"
With cnADO
.Open "Provider = Microsoft OLE DB Provider
for ODBC Drivers;dsn=fix dynamics historical
data;uid=;pwd=;"
.Execute (SQL1)
End With
rsADO.Open SQL1, cnADO
For i = 1 To rsADO.Fields.Count
msexcel.cells(2, i) = rsADO.Fields(i - 1).Name
Next
If rsADO.BOF Then
msexcel.Quit
MsgBox "查询结果空,请检查查询条件"
Else
rsADO.MoveFirst
i = 3
While Not rsADO.EOF
For j = 1 To rsADO.Fields.Count
msexcel.cells(i, j) = rsADO.Fields(j - 1)
Next j
rsADO.MoveNext
i = i + 1
Wend
rsADO.Close
cnADO.Close
通过上述代码可以按照任意时间间隔查询任意时
间段的历史数据,其始,终时间格式如下:
2000-01-01 12:00:00
时间间隔格式如下: 00:00:30
User.strStartTime.CurrentValue,
User.strEndTime.CurrentValue
User.Tag.CurrentValue,
User.INTERVAL.CurrentValue等为在GLOBAL中定
义的全局变量(字符串)
报表的保存及打印代码如下:
msexcel.Wait (Now() + 0.00012)
msexcel.ActiveWorkbook.SaveAs
"e:\histdemo\histreportdemo.xls"
msexcel.ActiveWorkbook.PrintOut
msexcel.ActiveWorkbook.Close
msexcel.Quit
Set msexcel = Nothing
End If
3.报表计划
对于生成班报表,日报表,周报表,月报表及年报表可以在schedule中时间触发中设置相应的时间段。自动完成报表功能。
手动报表可以通过可以在sch edule中按事件触发或按钮产生。