IFIX报表

合集下载

报表控件应用-iFix

报表控件应用-iFix

报表控件应用-iFix第一部分数据存储[1] 运行iFix演示程序,添加数字量输出块(DO)DataLogTrig、DataLogEnable。

[2] 工作台开发环境中新建画面DataLog,右键点击选择编辑脚本添加程序:Fix32.Fix.DataLogEnabled.F_CV = 1[3] 菜单中选择插入〉OLE对象,对象类型列表中选择hmiReportDataLog.CtrlX插入到换面中,点击控件右键菜单中选择动画〉配置〉杂项,将控件的属性DataLogEnabled链接数据块DATALOGENABLED ,属性DataLogTrig 链接数据块 DATALOGTRIG,数据转换选择”对象”。

可将控件参数TagValue001- T agValue120链接模拟量数据块的实时值(Fix32.FIX.IFIX1_BATCH_BULKFLOW.F_CV)作为采样点,控件参数TagDesc001- T agDesc120链接模拟量数据块的描述信息(Fix32.FIX.IFIX1_BATCH_BULKFLOW.A_DESC),数据块的描述信息不能为空,不能以数字开头,不能包含运算符号。

[4] 点击控件右键菜单中选择属性,将控件属性DataLogInterval 设为1-7的整数值将控制控件的采样周期为5秒钟至1小时,设为8时停止自动采样。

画面中添加一个按钮[触发手动存储]按钮,按下时将数据块DATALOGTRIG 置1,释放时置0。

[5] 保存画面并切换至运行状态,选中[显示数据]可见设置的数据点名称和iFix传入的变量数据,按控件中[创建数据表]按钮,再按[存储数据]按钮,可在数据库中建立一个名为hmiDataLog的数据表并存储一行数据。

自动状态下控件按照选定的采样周期存储数据。

画面中按[触发手动存储]按钮触发一次数据存储,可实现由外部状态控制数据存储。

[6] 报表软件程序组中打开“数据检索”工具,选择数据表名hmiDataLog,可选字段中选择时标字段TSTAMP 和其它的数据点字段,按[数据检索]按钮可从数据库查询出已存入的历史数据。

iFIX报表制作

iFIX报表制作
“ 电 网监 控 系 统 ” 将 数 据 库 中 “ lr 表 的 信 息 导 人 到 E c l 配 , aam” xe
Байду номын сангаас
地 满 足 设 计 要 求 。 通 过 iX 集 成 的 V A 语 言 对 E c l 象 编 F I B x e对
程, 合A 结 DO 技 术 对 数 据 库 进 行 操 作 , 通 过 iI 内部 D A 并 FX r
这 里 通 过 一 个 简 单 的例 子 ,阐 明 如 何 在 iI 中 使 用 E c l F X xe 对 象 和 AD 技 术 实 现 报 表 的制 作 。在 iI 开 发 一 套 配 电 网 O FX上 监 控 系统 ,采 用 S ev r 为 历 史 数 据 库 。数 据 库 名 称 为 QL S re 作
K y r siI . B E c l O e wo d : X V A,x e , F AD
由于 iI 自带 的 报 表 在应 用 中 比较 烦 琐 而 且 存 在一 定 的局 FX 限 性 ,在 实 际 的 工程 应 用 中 i! 般 的报 表 制 作 方 法 不 能 较 好 FX一
2 具 体 实 现 步 骤
控 件 完 成 报 表数 据显 示 , 增 强报 表功 能 , 高 灵 活性 。 可 提
1 相 关 技 术 简 介
表 格 ,aam ” 的各 字 段 名 如 下 : “ lr 表
日期 线路 名称
11V A与 E c l 合 编 程 . B x e联 V A( iu IB s o pi t n ) 内 嵌 在 iI 中 的 B Vs a a i frAp lai s 是 c c o FX
FX报 表 制作 I
iI FX报表制作

第12讲:IFIX报表制作

第12讲:IFIX报表制作
• 报表制作过程
1. 读取数据 2. 处理数据 3. 显示数据
第12讲:IFIX报表制作
• 读取数据
1. ADO读取 表制作
• ADO-Recordset ,可认为是内存表。 • 所谓内存表就是放在内存中的表。 数据没 有读取出来是放在外存的数据库中。 当你 把数据读出来后可以放在自定义的一个 dataset (内存中的数据容器)中,这时的 dataset 就保存在内存了,现在你对 dataset 的操作即为对内存表的操作了。当然不一 定要放在 dataset 中,任何你创建的数据载 体实例在它的生命期内都是存在与内存中 的。
第12讲:IFIX报表制作
• VBA介绍
1. 2. 3. 4. 对象(Object 物件) 属性(Property) 方法(Method) 事件(Event)
第12讲:IFIX报表制作
• 1. 2. 3. VBA iFIX自定义函数(电子书中) iFIX动画 iFIX专家向导
第12讲:IFIX报表制作
第12讲:IFIX报表制作
• 显示数据
1. Excel显示 2. HTML网页显示

浅谈IFIX报表的制作

浅谈IFIX报表的制作
20 0 9年 第 8卷第 1 期( 1 忌第 15期) 3
4 9
浅谈 II F X报表的制作
岳 忠
2 10 ) 7 14 ( 山东莱钢 自动化部 , 东莱芜 山

要: 监控软件 I 自带的报表在应 用 中比较烦琐而且存在一定 的报袁制作方法不
aos 间 = N w dr !时 o0
S lc a e b n i ee t C s a c
Ca e s l
a o !班次 = “ dr s 甲班 “
作者简介 : 岳忠(9 2 ) 男, 18一 , 山东德州人, 助理工程师 , 学士, 主要从事 工业 自 动化 系统设计及软件编程工作。
能较好 的满足设计要求。通过 A O技术结合 I D HX内部 D T A A控件完成报袁 , 可增强报表 功能, 提高灵 活性。
关 键 词 : 袁 制作 : 控 软 件 ; ;D 报 监 I A O技 术 HX
中图分类号 :P 1 T 37
前言
文献标识码 : A
文章编号 :6 18 8 (0 9 1- 0 9 0 17 —0 9 2 0 )10 4 - 2
aos p nsl tf m 配 比记 录 " dcn ,a O e D n mc drO e ”ee r . c o , oo n d pn y a i a ,
a I e Opi si ,a C T x 'd r . e ee d. k t o mit c d md e t o sD l t a
20 0 9年 第 8卷 第 1 期( 1 总第 15期 ) 3
Ca e b 2
然后通过 V G I x R D控件显示数据 ,该控件类似于 电子表格 。
aos dr !班次 = “ 乙班“

iFix中采用ODBC制作报表

iFix中采用ODBC制作报表

在iFix中采用ODBC制作历史报表具体步骤如下:Step 1: 打开SCU中的Task Configuration,增加HTC.EXE和WSQLODC.EXE两个任务,并将它们设置成为后台运行状态;Step 2: 启动iFix,点击工具栏上的按钮打开Historical Assign,添加所需监控的数据点,并设置历史数据的采样速度。

Step 3: 打开任务控制,查看是否已经启动HTC。

Step 4: 在Globals\User下面添加三个字符型(vtString)变量,分别命名为strStartTime, strEndTime 和Interval。

新建一幅画面,如图如示,在画面上布置3个DATALINK分别指向strStartTime, strEndTime 和Interval,并设置成In place(即允许修改)。

strStartTimestrEndTimeIntervalStep 5:为画面上的各个按钮写代码,最好先将各按钮注册——即将鼠标移到按钮上方,按右键弹出菜单,选择Edit Script。

在VB Editor的工具菜单中的Reference(引用)中选中Microsoft Excel 9.0 Object Library和Microsoft ActiveX Data Objects,如下图所示。

然后在各按钮的处理程序中添加相应代码。

内容如下(可将下列代码直接COPY到你的VB编辑器中,覆盖因为注册产生的空代码):‘运行状态画面初始化Private Sub CFixPicture_Initialize()CommandButton1_ClickCommandButton2_Clickuser.Interval.CurrentValue = "00:00:30"End Sub‘组态状态画面初始化Private Sub CFixPicture_InitializeConfigure()user.strEndTime.CurrentV alue = "报表结束时间"user.strStartTime.CurrentValue = "报表开始时间"End Sub'设当前时间为报表开始时间Private Sub CommandButton1_Click()Dim curTime As StringcurTime = NowDim curmonth, curday, curhour, curminute, cursecond As Stringcurmonth = IIf(Month(curTime) < 10, "0" & Month(curTime), Month(curTime)) curday = IIf(Day(curTime) < 10, "0" & Day(curTime), Day(curTime))curhour = IIf(Hour(curTime) < 10, "0" & Hour(curTime), Hour(curTime))curminute = IIf(Minute(curTime) < 10, "0" & Minute(curTime), Minute(curTime)) cursecond = IIf(Second(curTime) < 10, "0" & Second(curTime), Second(curTime)) user.strStartTime.CurrentValue = Year(curTime) & "-" & curmonth & "-" & curday _& " " & curhour & ":" & curminute & ":" & cursecond End Sub'设当前时间为报表结束时间Private Sub CommandButton2_Click()Dim curTime As StringcurTime = NowDim curmonth, curday, curhour, curminute, cursecond As Stringcurmonth = IIf(Month(curTime) < 10, "0" & Month(curTime), Month(curTime))curday = IIf(Day(curTime) < 10, "0" & Day(curTime), Day(curTime))curhour = IIf(Hour(curTime) < 10, "0" & Hour(curTime), Hour(curTime))curminute = IIf(Minute(curTime) < 10, "0" & Minute(curTime), Minute(curTime)) cursecond = IIf(Second(curTime) < 10, "0" & Second(curTime), Second(curTime)) user.strEndTime.CurrentV alue = Year(curTime) & "-" & curmonth & "-" & curday & " " _& curhour & ":" & curminute & ":" & cursecondEnd Sub'打印此前10分钟历史报表,只是设置时间值,打印仍要调用打印程序Private Sub CommandButton3_Click()Dim curTime As StringcurTime = NowDim curmonth, curday, curhour, curminute, cursecond As Stringcurmonth = IIf(Month(curTime) < 10, "0" & Month(curTime), Month(curTime))curday = IIf(Day(curTime) < 10, "0" & Day(curTime), Day(curTime))curhour = IIf(Hour(curTime) < 10, "0" & Hour(curTime), Hour(curTime))curminute = IIf(Minute(DateAdd("n", -10, curTime)) < 10, "0" & _Minute(DateAdd("n", -10, curTime)), Minute(DateAdd("n", -10, curTime))) cursecond = IIf(Second(curTime) < 10, "0" & Second(curTime), Second(curTime)) user.strStartTime.CurrentValue = Year(curTime) & "-" & curmonth & "-" & curday & _" " & curhour & ":" & curminute & ":" & cursecond curminute = IIf(Minute(curTime) < 10, "0" & Minute(curTime), Minute(curTime)) user.strEndTime.CurrentV alue = Year(curTime) & "-" & curmonth & "-" & curday & _" " & curhour & ":" & curminute & ":" & cursecond End Sub'打印当天报表,只是设置时间值,打印仍要调用打印程序Private Sub CommandButton4_Click()Dim curTime As StringcurTime = NowDim curmonth, curday, curhour, curminute, cursecond As Stringcurmonth = IIf(Month(curTime) < 10, "0" & Month(curTime), Month(curTime))curday = IIf(Day(curTime) < 10, "0" & Day(curTime), Day(curTime))user.strStartTime.CurrentValue = Year(curTime) & "-" & curmonth & "-" & curday _& " " & "00:00:00"user.strEndTime.CurrentV alue = Year(curTime) & "-" & curmonth & "-" & curday _& " " & "23:59:59"End Sub'打印当月报表,只是设置时间值,打印仍要调用打印程序Private Sub CommandButton5_Click()Dim curTime As StringcurTime = NowDim curmonth, BeginofMonth, EndofMonth As Stringcurmonth = IIf(Month(curTime) < 10, "0" & Month(curTime), Month(curTime)) BeginofMonth = Year(curTime) & "-" & curmonth & "-01" & " " & "00:00:00"user.strStartTime.CurrentValue = BeginofMonthEndofMonth = Day(DateAdd("s", -1, DateAdd("m", 1, CDate(BeginofMonth))))user.strEndTime.CurrentV alue = Year(curTime) & "-" & curmonth & "-" _& EndofMonth & " " & "23:59:59"End Sub‘根据输入条件,保存/打印报表到文件Private Sub CommandButton6_Click()'运行EXCEL,打开报表模板文件Dim msexcel As Excel.ApplicationSet msexcel = CreateObject("Excel.Application")With msexcel.Visible = True ‘如为FALSE,则不显示EXCEL。

IFIX报表

IFIX报表

Private Sub CFixPicture_Initialize()dtpTime.Value = NowEnd SubPrivate Sub CFixPicture_KeyDown(ByVal KeyCode As Long, ByVal Shift As Long, ContinueProcessing As Boolean)End SubPrivate Sub CommandButton1_Click()Dim strDate As StringDim strMonth As StringstrDate = Format(dtpTime, "yyyy-MM-dd")strMonth = Format(dtpTime, "yyyy-MM")'日报If Me.optMonth.Value = False ThenIf Me.optDay.Value = True ThenWebReport.Navigate "D:\REPORT\日报表\日报表" & strDate & ".htm" '显示ElseWebReport.Navigate "D:\REPORT\日报表\空白报表" & strDate & ".htm" '显示End IfEnd If'月报If Me.optDay.Value = False ThenIf Me.optMonth.Value = True ThenWebReport.Navigate "D:\REPORT\月报表\月报表" & strMonth & ".htm" '显示ElseWebReport.Navigate "D:\REPORT\月报表\空白报表" & strMonth & ".htm" '显示End IfEnd IfEnd SubPrivate Sub CommandButton2_Click()On Error Resume Next'日报页面设置If Me.optDay.Value = True ThenPrintSet "0.5", "0.5", "0.5", "0.5"End If'月报页面设置If Me.optMonth.Value = True ThenPrintSet "0.5", "0.5", "0.5", "0.5"End IfMe.WebReport.ExecWB 6, OLECMDEXECOPT_PROMPTUSEREnd SubPrivate Sub optDay_Click()Me.optDay.Value = True ' 日报Me.optMonth.Value = False '月报Me.dtpTime.CustomFormat = "yyyy-MM-dd" '修改时间格式dtpTime.Value = NowEnd SubPrivate Sub optMonth_Click()Me.optDay.Value = False ' 日报Me.optMonth.Value = True '月报Me.dtpTime.CustomFormat = "yyyy-MM" '修改时间格式dtpTime.Value = NowEnd Sub打印设置Private Sub PrintSet(sBottom As String, strTop As String, sLeft As String, sMargin_right As String)Dim hkey_root, hkey_path, hkey_key As StringDim RegWsh As Objecthkey_root = "HKEY_CURRENT_USER"hkey_path = "\Software\Microsoft\Internet Explorer\PageSetup"'//设置网页打印的页眉页脚为空Set RegWsh = CreateObject("WScript.Shell")hkey_key = "\header" '页眉RegWsh.RegWrite hkey_root + hkey_path + hkey_key, ""hkey_key = "\footer" '页脚RegWsh.RegWrite hkey_root + hkey_path + hkey_key, ""hkey_key = "\margin_bottom" '下页边距RegWsh.RegWrite hkey_root + hkey_path + hkey_key, sBottom 'hkey_key = "\margin_top" '上页边距RegWsh.RegWrite hkey_root + hkey_path + hkey_key, strTop 'hkey_key = "\margin_left" ' 左页边距RegWsh.RegWrite hkey_root + hkey_path + hkey_key, sLeft 'hkey_key = "\margin_right" ' 右页边距RegWsh.RegWrite hkey_root + hkey_path + hkey_key, sMargin_right ''打印End Sub其中日报和月报为控件报表时间为控件WebReport控件新建调度ReportPrivate Sub report_OnTimeOut(ByVal lTimerId As Long)On Error Resume NextDim strDateTime As StringDim strDate As StringDim strHourMinute As StringDim iRow As IntegerDim strTemplateName As StringstrDateTime = Format(Now(), "yyyy-MM-dd hh:mm:ss")strDate = Left(strDateTime, 10)strHourMinute = Right(Left(strDateTime, 13), 2) & ":00"iRow = Right(Left(strDateTime, 13), 2)Dim isCreate As BooleanSet fs = CreateObject("Scripting.FileSystemObject")isCreate = fs.FileExists("D:\REPORT\日报表\日报表" & strDate & ".htm") Set fs = NothingIf isCreate ThenstrTemplateName = ("D:\REPORT\日报表\日报表" & strDate & ".htm") ElsestrTemplateName = "D:\REPORT\日报表" & ".htm"End IfSet msExcel = CreateObject("Excel.Application")With msExcel.visible = True.Workbooks.Open strTemplateName, , False.ActiveWorkbook.ActiveSheet.Select.DisplayAlerts = False.Wait (Now() + 0.00002)End With'写日期msExcel.Worksheets(1).Cells(1, 8).Value = strDate'写数据msExcel.Worksheets(1).Cells(iRow + 6, 2).Value = readvalue("DAYJSLJ1")msExcel.Worksheets(1).Cells(iRow + 6, 4).Value = readvalue("DAYJSLJ2")msExcel.Worksheets(1).Cells(iRow + 6, 6).Value = readvalue("DAYJSLJ3")msExcel.Worksheets(1).Cells(iRow + 6, 8).Value = readvalue("DAYJSLJ4")msExcel.Worksheets(1).Cells(iRow + 6, 10).Value = readvalue("DAYJSLJ1") + readvalue("DAYJSLJ2") + readvalue("DAYJSLJ3") + readvalue("DAYJSLJ4")'保存报表文件Dim strSaveName As StringstrSaveName = "D:\REPORT\日报表\日报表" & strDate & ".htm"msExcel.ActiveWorkbook.SaveAs ("D:\REPORT\日报表\日报表" & strDate & ".htm") msExcel.QuitEnd SubReport1Private Sub report1_OnTimeOut(ByVal lTimerId As Long)On Error Resume NextDim strDateTime As StringDim strMonth As StringDim strHourMinute As StringDim iRow As IntegerDim strTemplateName As StringstrDateTime = Format(Now(), "yyyy-MM-dd hh:mm:ss")strMonth = Left(strDateTime, 7)strHourMinute = Right(Left(strDateTime, 13), 2) & ":00"iRow = Right(Left(strDateTime, 10), 2)Dim isCreate As BooleanSet fs = CreateObject("Scripting.FileSystemObject")isCreate = fs.FileExists("D:\REPORT\月报表\月报表" & strMonth & ".htm")Set fs = NothingIf isCreate ThenstrTemplateName = ("D:\REPORT\月报表\月报表" & strMonth & ".htm")ElsestrTemplateName = "D:\REPORT\月报表" & ".htm"End IfSet msExcel = CreateObject("Excel.Application")With msExcel.visible = False.Workbooks.Open strTemplateName, , False.ActiveWorkbook.ActiveSheet.Select.DisplayAlerts = False.Wait (Now() + 0.00002)End With'写日期msExcel.Worksheets(1).Cells(1, 8).Value = strMonth'写数据msExcel.Worksheets(1).Cells(iRow + 2, 2).Value = readvalue("DAYJSLJ1")msExcel.Worksheets(1).Cells(iRow + 2, 4).Value = readvalue("DAYJSLJ2")msExcel.Worksheets(1).Cells(iRow + 2, 6).Value = readvalue("DAYJSLJ3")msExcel.Worksheets(1).Cells(iRow + 2, 8).Value = readvalue("DAYJSLJ4")msExcel.Worksheets(1).Cells(iRow + 2, 10).Value = readvalue("DAYJSLJ4") + readvalue("DAYJSLJ1") + readvalue("DAYJSLJ2") + readvalue("DAYJSLJ3")Dim strtemp As Integerstrtemp = 3msExcel.Worksheets(1).Cells(34, 2).Value = 0msExcel.Worksheets(1).Cells(34, 4).Value = 0msExcel.Worksheets(1).Cells(34, 6).Value = 0msExcel.Worksheets(1).Cells(34, 8).Value = 0msExcel.Worksheets(1).Cells(34, 10).Value = 0Do While strtemp <= 33msExcel.Worksheets(1).Cells(34, 2).Value = msExcel.Worksheets(1).Cells(34, 2).Value + msExcel.Worksheets(1).Cells(strtemp, 2).ValuemsExcel.Worksheets(1).Cells(34, 4).Value = msExcel.Worksheets(1).Cells(34, 4).Value + msExcel.Worksheets(1).Cells(strtemp, 4).ValuemsExcel.Worksheets(1).Cells(34, 6).Value = msExcel.Worksheets(1).Cells(34, 6).Value + msExcel.Worksheets(1).Cells(strtemp, 6).ValuemsExcel.Worksheets(1).Cells(34, 8).Value = msExcel.Worksheets(1).Cells(34, 8).Value + msExcel.Worksheets(1).Cells(strtemp, 8).ValuemsExcel.Worksheets(1).Cells(34, 10).Value = msExcel.Worksheets(1).Cells(34, 10).Value + msExcel.Worksheets(1).Cells(strtemp, 10).Valuestrtemp = strtemp + 1Loop'保存报表文件Dim strSaveName As StringstrSaveName = "D:\REPORT\月报表\月报表" & strMonth & ".htm"msExcel.ActiveWorkbook.SaveAs ("D:\REPORT\月报表\月报表" & strMonth & ".htm") msExcel.QuitEnd SubResetPrivate Sub RESET_OnTimeOut(ByVal lTimerId As Long) Dim PauseTimePauseTime = 1Start = TimerCloseDigitalPoint "Fix32.FIX.RESET_DAYJSLJ.F_CV" Do While Timer < Start + PauseTimeDoEventsLoopOpenDigitalPoint "Fix32.FIX.RESET_DAYJSLJ.F_CV" End Sub。

用VBA实现IFIX报表

用VBA实现IFIX报表

Shuju_39 = CInt(Fix32.Fix.DCC_1Y5GYI2.F_CV) Shuju_40 = CInt(Fix32.Fix.DCC_1Y5GYU2.F_CV) Shuju_41 = CInt(Fix32.Fix.DCC_2Z1GYI1.F_CV) Shuju_42 = CInt(Fix32.Fix.DCC_2Z1GYU1.F_CV) Shuju_43 = CInt(Fix32.Fix.DCC_2Z1GYI2.F_CV) Shuju_44 = CInt(Fix32.Fix.DCC_2Z1GYU2.F_CV) Shuju_45 = CInt(Fix32.Fix.DCC_2Z2GYI1.F_CV) Shuju_46 = CInt(Fix32.Fix.DCC_2Z2GYU1.F_CV) Shuju_47 = CInt(Fix32.Fix.DCC_2Z2GYI2.F_CV) Shuju_48 = CInt(Fix32.Fix.DCC_2Z2GYU2.F_CV) Shuju_49 = CInt(Fix32.Fix.DCC_2Z3GYI1.F_CV) Shuju_50 = CInt(Fix32.Fix.DCC_2Z3GYU1.F_CV) Shuju_51 = CInt(Fix32.Fix.DCC_2Z3GYI2.F_CV) Shuju_52 = CInt(Fix32.Fix.DCC_2Z3GYU2.F_CV) Shuju_53 = CInt(Fix32.Fix.DCC_2Z4GYI1.F_CV) Shuju_54 = CInt(Fix32.Fix.DCC_2Z4GYU1.F_CV) Shuju_55 = CInt(Fix32.Fix.DCC_2Z4GYI2.F_CV) Shuju_56 = CInt(Fix32.Fix.DCC_2Z4GYU2.F_CV) Shuju_57 = CInt(Fix32.Fix.DCC_2Z5GYI1.F_CV) Shuju_58 = CInt(Fix32.Fix.DCC_2Z5GYU1.F_CV) Shuju_59 = CInt(Fix32.Fix.DCC_2Z5GYI2.F_CV) Shuju_60 = CInt(Fix32.Fix.DCC_2Z5GYU2.F_CV) Shuju_61 = CInt(Fix32.Fix.DCC_2Y1GYI1.F_CV) Shuju_62 = CInt(Fix32.Fix.DCC_2Y1GYU1.F_CV) Shuju_63 = CInt(Fix32.Fix.DCC_2Y1GYI2.F_CV) Shuju_64 = CInt(Fix32.Fix.DCC_2Y1GYU2.F_CV) Shuju_65 = CInt(Fix32.Fix.DCC_2Y2GYI1.F_CV) Shuju_66 = CInt(Fix32.Fix.DCC_2Y2GYU1.F_CV) Shuju_67 = CInt(Fix32.Fix.DCC_2Y2GYI2.F_CV) Shuju_68 = CInt(Fix32.Fix.DCC_2Y2GYU2.F_CV) Shuju_69 = CInt(Fix32.Fix.DCC_2Y3GYI1.F_CV) Shuju_70 = CInt(Fix32.Fix.DCC_2Y3GYU1.F_CV) Shuju_71 = CInt(Fix32.Fix.DCC_2Y3GYI2.F_CV) Shuju_72 = CInt(Fix32.Fix.DCC_2Y3GYU2.F_CV) Shuju_73 = CInt(Fix32.Fix.DCC_2Y4GYI1.F_CV)

有关iFIX软件报表生成的说明

有关iFIX软件报表生成的说明

有关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.ApplicationSet 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 With2.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历史数据库和实时数据库。

报表控件应用-iFix

报表控件应用-iFix

第一部分数据存储[1] 运行iFix演示程序,添加数字量输出块(DO)DataLogTrig、DataLogEnable。

[2] 工作台开发环境中新建画面DataLog,右键点击选择编辑脚本添加程序:Fix32.Fix.DataLogEnabled.F_CV = 1[3] 菜单中选择插入〉OLE对象,对象类型列表中选择hmiReportDataLog.CtrlX插入到换面中,点击控件右键菜单中选择动画〉配置〉杂项,将控件的属性DataLogEnabled链接数据块 DATALOGENABLED ,属性DataLogTrig 链接数据块 DATALOGTRIG,数据转换选择”对象”。

可将控件参数TagValue001- TagValue120链接模拟量数据块的实时值(Fix32.FIX.IFIX1_BATCH_BULKFLOW.F_CV)作为采样点,控件参数TagDesc001- TagDesc120链接模拟量数据块的描述信息(Fix32.FIX.IFIX1_BATCH_BULKFLOW.A_DESC),数据块的描述信息不能为空,不能以数字开头,不能包含运算符号。

[4] 点击控件右键菜单中选择属性,将控件属性DataLogInterval设为1-7的整数值将控制控件的采样周期为5秒钟至1小时,设为8时停止自动采样。

画面中添加一个按钮[触发手动存储]按钮,按下时将数据块DATALOGTRIG 置1,释放时置0。

[5] 保存画面并切换至运行状态,选中[显示数据]可见设置的数据点名称和iFix传入的变量数据,按控件中[创建数据表]按钮,再按[存储数据]按钮,可在数据库中建立一个名为hmiDataLog的数据表并存储一行数据。

自动状态下控件按照选定的采样周期存储数据。

画面中按[触发手动存储]按钮触发一次数据存储,可实现由外部状态控制数据存储。

[6] 报表软件程序组中打开“数据检索”工具,选择数据表名hmiDataLog,可选字段中选择时标字段TSTAMP 和其它的数据点字段,按[数据检索]按钮可从数据库查询出已存入的历史数据。

ifix报表制作文档

ifix报表制作文档

Ifix报表的实现本文档主要介绍Ifix 通过调度将报表数据按照一定要求存储到Access数据库中,并根据要求从其中提取数据,结合EXCELL的制表功能实现报表。

数据存入1.数据库的建立和数据关联方法:(1)直接在Microsoft office中建立Access文件。

(2)在控制面板里ODBC数据源管理器里关联数据库时创建Access数据库。

1.1数据库的建立(1)打开新建的Access文件,点击。

(2)创建一个,名字为ReportData的表。

在表名处右键鼠标点击Ifix时间调度触发调度中的VB脚本Access数据库报表显示创建表1.2数据库的关联用关联定义画面如下图。

在其中选择点击选择Microsoft Access Driver[*.mdb],再点击完成按钮,进入下边的窗口,在其中的数据源名(N)DSN (数据源名)名,不使用数据名。

2.时间调度的建立2.1在ifix里新建基于时间的调度,在Schedules新建一个调度文件,在Time Based Entries中创建一个调度,具体设置如下图:注意:iFIX 不支持使用与本地节点名相同名称的调度。

因此,不能创建与本地节点名相同的调度。

触发信息设置为continuous,间隔为1个小时,启动时间为第2分钟。

点击Vb Editor 将以下脚本写入Private Sub RW2REPORT_OnTimeOut(ByVal lTimerId As Long)Dim cn As ADODB.Connection '定义一个ADO方式的数据库连接Dim res As ADODB.Recordset '定义一个ADO方式的数据库记录集Dim StrSQL As StringSet cn = New ADODB.Connection '定义cn为新的ADO数据库连接Set res = New ADODB.Recordset '定义res为新的ADO数据库连接集cn.ConnectionString = "DSN=ReportSource;UID=;PWD=;" '定义cn的连接数据源为ReportSource 即ODBC中建立的ACCESS的数据源名cn.OpenStrSQL = "select * from ReportData Where 日期=#" & Date & "#" '使用SQL语句查找ReportData表中日期为Date的数据res.Open StrSQL, cn, adOpenKeyset, adLockOptimisticres.AddNew '添加一个新的记录res.Fields(0) = Date '在0列加入日期res.Fields(1) = Hour(Time) '在1列加入时间res.Fields(2) = Fix32.RW2.RW_Y0GBN11AP001_ZS.f_cv '在2列加入标签1res.Fields(3) = Fix32.RW2.RW_Y0GBN11AP002_ZS.f_cv '在3列加入标签2res.Update '保存记录Update(当Edit或AddNew方法完成后保存记录集) res.Close '关闭记录集cn.CloseSet res = NothingSet cn = NothingEnd Sub在vb2.2添加到FixBackgroundServer 任务打开SCU,点击如图所示:在文件名内查找FixBackgroundServer.exe文件添加后保存SCU文件。

IFIX制作水晶报表教程

IFIX制作水晶报表教程

IFIX制作报表条件如下:1.安装EXCEL软件;电脑如果是XP系统,则可以安装SQLserver2005数据库软件;如果是WIN7系统则安装SQLserver2008;组态软件IFIX必须全部安装,才能执行下面的步骤;2.恢复数据库history(详见history恢复说明):注意,如果还原时候提示已经有该文件名的数据库,则先找到其路径手动删除,重新建立。

3.把IFIX报表中的AAP,PDB,PIC三个文件夹拷入到相应的文件夹(Dynamics)下替代原有同名文件。

4.数据库的配置:见软件说明书。

5.注册REGSVR32 C:\MSCOMCT2.OCX文件,首先要把IFIX报表中的MSCOMCT2.OCX 文件拷入到所对应的文件夹下。

注册方法:运行此文件点击确定即可。

(注册此项是在不安装VB,VC的情况下进行)如图:6.运行IFIX软件,在C:\Dynamics\APP下打开iFix1_Action.rpt文件,然后点击菜单:数据库——设置数据源位置,找到FIX Dynamics Historical Data 并点击WKH (如图):如图选择(替换为),选中创建新连接__ODBC (RDO) ____双击FIX Dynamics Historical Data,点完成,然后点击FIX Dynamics Historical Data下的节点,最后点<更新>,关闭保存.(如果IFIX ODBC打不开请在IFIX的任务配置中添加C:\DYNAMICS\WSQLODC.EXE和C:\DYNAMICS\HTC.EXE,启动历史数据采集)7.Report_Time设置为后台启动,将Report_Time的(调度属性)改为后台运行。

打开Intellution Dynamics WorkSpace后点击左侧(调度)找到Report_Time选项双击如图:反键单击Report_Time的菜单选择(调度程序属性),如图:点击则弹出选择项将(前台运行)改成(后台运行)如图:8.配置标签组;所要标签组符号中“NUMBEROFTAGS”对应的替换中的数字是所配置标签个数之和。

iFIX历史数据报表使用经验总结

iFIX历史数据报表使用经验总结

f i c a t i o n c a n b e p o r t e d t o o t h e r p r o j e c t s .
Ke ywor ds : i FI X, h i s t or i c al da t a。 Re po ̄, ADO, VBA
i F I X软 件 没 有 提 供 针 对 历 史 数 据报 表 的 通 用 组 件 ,通 常 实 现报 表 的方法 只能是单 独 购买使 用第三 方组 件 ( 比如 水 晶 报 表) , 因其封装功能较多 , 编程不够灵活 , 难 以 实 现 比较 复 杂 的 报 表功能 。 在 自动 化 工 程 软 件 开 发 实 际 应 用 中 , 因 不 同项 目对 历史 数 据 报 表 要 求 不 尽 相 同 ,利 用 i F I X 现有 组件 或第 三方 组 件 均 难 以 达 到 满 意 的效 果 。
史数 据 库 , 利用 E x c e I 生成 报 表 模 板 , 根 据 不 同的 选 择 条 件 查 询 数 据 生 成 报 表 。采 用介 绍 的 方 法 设 计 的 报 表 应 用 程 序 具 有
普遍性 , 通 过 简单 修 改 可 移 植 到 其 它工 程 中 。 关键词 : i F I X , 历 史数 据 , 报表 , A D O, VCo mb i n e d wi t h y e a r s o f a u t o ma t i c mo n i t o r i n g c o n f i g u r a t i o n s o f t wa r e d e v e l o p me n t e x p e r i e n c e , i F I X t o t h e p r o j e c t t o d e —

iFIX高级培训第7讲 iFIX报表制作

iFIX高级培训第7讲 iFIX报表制作

极易iFIX网站出品()
iFIX高级培训
主讲:钱立湘
第7讲 报表制作
显示数据
1. 2. 3.
Excel显示 Excel显示 HTML网页显示 HTML网页显示 PDF显示 PDF显示
极易iFIX网站出品()
iFIX高级培训
主讲:钱立湘
第7讲 报表制作
极易iFIX网站出品()
iFIX高级培训
主讲:钱立湘
第7讲 报表制作
提供强大的iFIX 提供强大的iFIX Integration Toolkit系统集成和扩展工具.该工具可供 Toolkit系统集成和扩展工具.该工具可供 程序员编制程序直接访问iFIX的实时数据库和历史数据.该灵活的工 程序员编制程序直接访问iFIX的实时数据库和历史数据.该灵活的工 具易于使用,用户或者系统集成上可以方便地扩展iFIX的功能,以充 具易于使用,用户或者系统集成上可以方便地扩展iFIX的功能,以充 分满足行业应用户的不同的需求. iFIX Integration Toolkit系统集成和扩展工具提供如下功能: Toolkit系统集成和扩展工具提供如下功能: Historical Data Report (HDR) 应用:Historical Data Report (HDR) 用于生 应用:Historical 成报表.它从iFIX的历史文件中释放历史数据,并且将其导出到 成报表.它从iFIX的历史文件中释放历史数据,并且将其导出到 comma separated variable (CSV)文件中. The output of HDR的输出结果 (CSV)文件中. HDR的输出结果 可以直接使用,或者直接引用到第三方产品包中,如:Microsoft Excel. 可以直接使用,或者直接引用到第三方产品包中,如:Microsoft Excel. 在使用时,只需要简单地添入tag名和需要数据的时间段就可以了. 在使用时,只需要简单地添入tag名和需要数据的时间段就可以了. Historical Data Access (HDA) for Visual Basic, C, and C++:Historical Data (HDA) C++: Access (HDA) 提供给用户集成iFIX历史数据的能力.允许用户执行编 提供给用户集成iFIX历史数据的能力.允许用户执行编 程访问iFIX的历史数据. 程访问iFIX的历史数据. Easy Database Access (EDA) for Visual Basic, C and C++:允许用户执行 C++:允许用户执行 编程访问iFIX的过程数据库. 编程访问iFIX的过程数据库.

iFix如何制作EXCEL报表

iFix如何制作EXCEL报表

iFix如何制作EXCEL报表在VBA中引用Microsoft Excel 11.0 Object Library和Microsoft ADO 6.0 Library。

在画面中添加个按钮。

复制以下代码:‘----------开始复制(不包括此行)--------------[hide]Option ExplicitDim rsADO As ADODB.RecordsetDim cnADO As ADODB.ConnectionPrivate Sub Command1_Click()Dim StrDir As StringStrDir = "E:\"Dim i As LongDim Sql As StringSql = "SELECT * FROM THISNODE"Set cnADO = New ADODB.ConnectionSet rsADO = New ADODB.RecordsetcnADO.ConnectionString = "Provider = Microsoft OLE DB Provider for ODBC Driv ers;DSN=FIX Dynamics Real Time Data;UID=;PWD="cnADO.OpenrsADO.CursorLocation = adUseClientrsADO.Open Sql, cnADO, adOpenDynamic, adLockUnspecified, -1If rsADO.RecordCount <= 0 ThenMsgBox "无数据!", vbOKOnly + vbInformation, "信息..."Set cnADO = NothingSet rsADO = NothingExit SubEnd IfDim xlApp As ObjectDim xlBook As ObjectDim xlSheet As ObjectSet xlApp = New Excel.ApplicationxlApp.DisplayAlerts = FalsexlApp.Visible = FalseSet xlBook = xlApp.Workbooks.Open(StrDir & "\报表.xls")'需要文件(E:\报表.xls)Set xlSheet = xlBook.Worksheets(1)For i = 1 To rsADO.RecordCountxlSheet.Cells(i, 1) = rsADO.Fields(1).Value & ""xlSheet.Cells(i, 2) = rsADO.Fields(2).Value & ""xlSheet.Cells(i, 3) = rsADO.Fields(3).Value & ""xlSheet.Cells(i, 4) = rsADO.Fields(4).Value & ""Next ixlApp.Visible = TruexlApp.DisplayAlerts = FalseSet xlSheet = NothingSet xlBook = NothingSet xlApp = NothingSet cnADO = NothingSet rsADO = NothingEnd Sub[/hide]‘----------结束复制(不包括次行)--------------注意:1.iFix历史数据库只支持读90天的数据,在SQL语句中限定时间即可。

IFIX,历史报警报表制作

IFIX,历史报警报表制作

前面已经将历史报警信息保存到了报警历史数据库中下面需要从数据库中显示出报警信息
在工具箱中含有
数据控件
此控件相当于管道起连接作用
使用网格控件,类似于水杯设置刚才的管道
在打开的对话框中选择提供者ODBC
选择数据库,为刚才创建的数据库,点击测试连接,可以弹出对话框
选择记录源,设置从数据库中读哪一部分内容点击向导按钮
选择SQL Select
选择并增加报警数据库表,点击下一步
可用列中显示了ALARM报警数据库中的可用列,如下:选择所用列并点击下一步
确定后运行ifix
此时不能显示报警信息,因为到此步骤,只是设置了水库的出水口部分,而水杯的入水口部分还没有完成设置。

下面配置水杯侧
选择动画…点击配置….
在行为栏中含有ADORecords项,此项和刚才的管道连接器连接,勾选动画选择对象,点击数据源后面的小方块
选择画面中的vxData1,此项为刚才创建的
类似于VXDATA1中的缓存点击确定返回。

运行IFIX后显示如下:
regsvr32 c:\winnt\system32\mscomct2.ocx 当然你必须把那个文件拷过来了。

IFIX连接SQL读写数据和制作excel报表图文教程

IFIX连接SQL读写数据和制作excel报表图文教程

IFIX连接SQL读写数据和制作excel报表图文教程IFIX连接SQL数据库、制作excel报表详细教程一、 IFIX连接SQL数据库读写数据IFIX连接SQL数据库有多种方法,其中最为方便的两种方法是:(1)使用IFIX本身为SQL数据库提供的接口SQT和SQD;(2)VB+ADO。

下面分别介绍着两种方法的实现步骤。

1、使用SQT和SQD读写SQL数据库1.1 安装SQL2008(只列出关键步骤,其余直接点击“下一步”或“安装”) 打开SQL安装中心,点击“安装”;SQL2008简体中文版安装包下载链接:点击“全新SQL Server独立安装或向现有安装添加功能”;点击“输入产品密匙”,点击“下一步”:(根据版本选择)sql server2008密钥Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYBEnterprise: JD8Y6-HQG69-P9H84-XDTPG-34MBBMicrosoft SQL Server 2008 R2序列号密钥开发版32位:MC46H-JQR3C-2JRHY-XYRKY-QWPVM开发版64位:FTMGC-B2J97-PJ4QG-V84YB-MTXX8工组版:XQ4CB-VK9P3-4WYYH-4HQX3-K2R6QWEB版:FP4P7-YKG22-WGRVK-MKGMX-V9MTM数据中心版32位:PTTFM-X467G-P7RH2-3Q6CG-4DMYB数据中心版64位:DDT3B-8W62X-P9JD6-8MX7M-HWK38企业版32位:R88PF-GMCFT-KM2KR-4R7GB-43K4B企业版64位:GYF3T-H2V88-GRPPH-HWRJP-QRTYB标准版32位:CXTFT-74V4Y-9D48T-2DMFW-TX7CY标准版64位:B68Q6-KK2R7-89WGB-6Q9KR-QHFDW功能选择界面,选择安装全部功能,点击“下一步”;进入实例配置界面,选择默认实例,点击“下一步”;进入服务器配置界面,启动类型均选为“自动”;点击“对所有SQL Server服务使用相同的账户”,在弹出的界面中选择第一个账户,密码不用填;返回服务器配置界面点击下一步;进入数据库引擎配置界面,选择混合模式,输入自己设定的密码,点击“添加当前用户”,点击下一步,直至安装完成,关闭安装中心。

IFIX报表

IFIX报表

一、新建access日报数据库ReportData(预装office2007以上版本)表名:ReportData右键设计视图:右键打开:月报数据库ReportMonth右键设计视图:右键打开:年报数据库ReportYear 右键设计视图:右键打开:删除日期主键,索引选择“无”;时间:长整型;其他累计:长整型。

二、配置ODBC64位操作系统打开ODBC方法:C:/Windows/SysWOW64/odbcad32.exe完成后确定即可,月报,年报同上。

32位系统:开始》控制面板》管理工具》ODBC。

同上设置三、IFIX新建时间调度时间间隔设置12小时,开始时间是6点54分。

一天分为白班(7点到19点)夜班(19点到7点),分班累计重置时间为6点54分和18点54分。

Private Sub sjdiaodu_OnTimeOut(ByVal lTimerId As Long)Dim cn As ADODB.Connection '定义一个ADO方式的数据库连接Dim res As ADODB.Recordset '定义一个ADO方式的数据库记录集Dim StrSQL As StringSet cn = New ADODB.Connection '定义cn为新的ADO数据连接Set res = New ADODB.Recordset '定义res为新的ADO数据库记录集'On Error Resume Nextcn.ConnectionString = "DSN=ReportData;UID=;PWD=;" '定义cn的连接数据源为ReportData 即ODBC中建立的ACCESS的数据源名cn.OpenStrSQL = "select * from ReportData Where 日期=#" & Date & "#" '使用SQl语"句查找ReportData表中日期为Data的数据res.Open StrSQL, cn, adOpenKeyset, adLockOptimisticres.ADDNew '添加一个新的记录If Hour(Time) = 6 Thenres.Fields(1) = 2 '在1列加入白班计数res.Fields(0) = Date -1'在0列加入日期,早上6点54分记得数算成前一天日累计ElseIf Hour(Time) = 18 Thenres.Fields(1) = 1 '在1列加入夜班计数res.Fields(0) = Date '在0列加入日期ElseEnd IfEnd Ifres.Fields(2) = Fix32.Fix.R0126.F_CV '在2列加入标签1res.Fields(3) = Fix32.Fix.R0127.F_CV '在3列加入标签2res.Fields(4) = Fix32.Fix.R0128.F_CV '在4列加入标签3res.Fields(5) = Fix32.Fix.R0129.F_CV '在5列加入标签4res.Fields(6) = Fix32.Fix.R0130.F_CV '在6列加入标签5res.Update '保持记录res.Close '关闭记录集cn.CloseSet res = NothingSet cn = NothingEnd Sub月调度Private Sub sjmonth_OnTimeOut(ByVal lTimerId As Long)Dim Mcn As ADODB.Connection '定义一个ADO方式的数据库连接Dim Mres As ADODB.Recordset '定义一个ADO方式的数据库记录集Dim MStrSQL As StringSet Mcn = New ADODB.Connection '定义cn为新的ADO数据连接Set Mres = New ADODB.Recordset '定义res为新的ADO数据库记录集'On Error Resume NextMcn.ConnectionString = "DSN=ReportMonth;UID=;PWD=;" '定义cn的连接数据源为ReportData 即ODBC中建立的ACCESS的数据源名Mcn.OpenMStrSQL = "select * from ReportMonth Where 日期=#" & Date & "#" '使用SQl语"句查找ReportData表中日期为Data的数据Mres.Open MStrSQL, Mcn, adOpenKeyset, adLockOptimisticMres.ADDNew '添加一个新的记录Mres.Fields(0) = DateAdd("y", -1, Date) '在0列加入日期-1Mres.Fields(1) = Day(Date) - 1 '在1列加入天数-1Mres.Fields(2) = Fix32.Fix.R0141.F_CV '在2列加入标签1Mres.Fields(3) = Fix32.Fix.R0142.F_CV '在3列加入标签2Mres.Fields(4) = Fix32.Fix.R0143.F_CV '在4列加入标签3Mres.Fields(5) = Fix32.Fix.R0144.F_CV '在5列加入标签4Mres.Fields(6) = Fix32.Fix.R0145.F_CV '在6列加入标签5Mres.Fields(7) = DatePart("m", Date) '在7列加入标签6Mres.Fields(8) = DatePart("yyyy", Date) '在8列加入标签7Mres.Update '保持记录Mres.Close '关闭记录集Mcn.CloseSet Mres = NothingSet Mcn = NothingEnd Sub年调度(用于月数据记录,年数据不做显示)Private Sub Year_OnTimeOut(ByVal lTimerId As Long)Dim Ycn As ADODB.Connection '定义一个ADO方式的数据库连接Dim Yres As ADODB.Recordset '定义一个ADO方式的数据库记录集Dim YStrSQL As StringSet Ycn = New ADODB.Connection '定义cn为新的ADO数据连接Set Yres = New ADODB.Recordset '定义res为新的ADO数据库记录集'On Error Resume NextYcn.ConnectionString = "DSN=ReportYear;UID=;PWD=;" '定义cn的连接数据源为ReportData 即ODBC中建立的ACCESS的数据源名Ycn.OpenYStrSQL = "select * from ReportYear Where 日期=#" & Date & "#" '使用SQl语"句查找ReportData表中日期为Data的数据Yres.Open YStrSQL, Ycn, adOpenKeyset, adLockOptimisticYres.ADDNew '添加一个新的记录Yres.Fields(0) = DateAdd("y", -1, Date) '在0列加入日期-1Yres.Fields(1) = DatePart("m", Date) - 1 '在1列加入月份-1Yres.Fields(2) = Fix32.Fix.R0135.F_CV '在2列加入标签1Yres.Fields(3) = Fix32.Fix.R0136.F_CV '在3列加入标签2Yres.Fields(4) = Fix32.Fix.R0137.F_CV '在4列加入标签3Yres.Fields(5) = Fix32.Fix.R0138.F_CV '在5列加入标签4Yres.Fields(6) = Fix32.Fix.R0139.F_CV '在6列加入标签5Yres.Fields(7) = DatePart("yyyy", Date) '在7列加入标签6,有bug,懒得改了。

iFix报表

iFix报表
IntyExcel.Sheets("生产日报表").Select
' Intyexcel.Sheets("Sheet1").Unprotect password:="123456"
'Intyexcel.Range("B6:U30").Select
'Intyexcel.Selection.ClearContents
Else
IntyExcel.Worksheets(1).Cells(33, 5).Value = Sum / Count
End If
Sum = 0
Count = 0
'----------处理进水流量数据------------
With IntyExcel.Worksheets(1)
On Error GoTo ERRORLANDLER
Dim MyPos
Dim strQueryAvg As String
Dim mValue(3, 500)
Dim c As Integer
Dim r As Integer
Dim IntyExcel As Excel.Application
Tag15 = "CS_FT_ACC"
Tag16 = "HLWN_FT_ACC"
Tag17 = "SYWN_FT_ACC"
'从历史库中取得域项, 2 - DATATIME, VALUE, TAG 共三项
Items = 2
MyPos = InStr(1, imDate, "0")
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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”,点击“添加”,双击“Microsoft Access Drivers (*.mdb)”,出现“ODBC Microsoft Access 安装”对话框。

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

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

点击“完成”,退出控制面板
三、在IFIX 中创建一个“基于时间的调度”,如图
名称:任意合法的字符组合
触发信息:连续
间隔:1小时
详细代码如下:
点击“VB编辑器“进入VB编辑器
在“工具”菜单-〉引用“Microsoft ActiveX Data Objects x.x Library”
Private Sub FixTimer3_OnTimeOut(ByVal lTimerId As Long)
Dim cn As ADODB.Connection
Dim res As ADODB.Recordset
Dim StrSQL As String
Set cn = New ADODB.Connection
Set res = New ADODB.Recordset
cn.ConnectionString = "DSN= MyReport;UID=;PWD=;"
//MyReport是数据源名称//
cn.Open
StrSQL = "select * from ReportData where 日期=#" & Date & "#"
//ReportData是建立数据库中的表名//
res.Open StrSQL, 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
Set res = Nothing
Set cn = Nothing
End Sub
另外,如果定义了主键,如上图,选择了,则res.Fields(0)不可用。

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

按钮名称:Cmdreport
Private Sub Cmdreport_Click()
UserForm2.show
End Sub
再在”VB编辑器环境“下,插入一用户窗体。

并且在工具-〉附加工具中选择日历控件11.0
在“工具”菜单-〉引用“Microsoft ActiveX Data Objects 2.7 Library”
“Microsoft Excel 9.0 Library”
“取消”按钮的代码
Private Sub Cmdcancel_Click()
Unload Me
End Sub
“确定”按钮的代码如下:
Private Sub CmdOK_Click()
'On Error Resume Next
Dim cn As ADODB.Connection
Dim res As ADODB.Recordset
Dim xlBook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Dim strFileName As String
Dim StrSQL As String
Dim i As Integer
Dim row As Integer
strFileName= "c:\report.xls" ‘预先设计的报表显示模板文件
StrSQL = "select * from ReportData where 日期=#" & Calendar1.Value& "#" If Dir(strFileName) = "" Then '判断文件是否存在,不存在则退出
MsgBox "报表模版文件不存在"
Exit Sub
End If
Set cn = New ADODB.Connection
cn.ConnectionString = " DSN=MyReport;UID=;PWD=;"
cn.Open
Set res = New ADODB.Recordset
res.Open StrSQL, cn, adOpenKeyset, adLockOptimistic
If res.RecordCount <= 0 Then
MsgBox "你要查询的数据不存在,可能已被删除", vbInformation + vbOKOnly, "系统提示"
res.Close
Set res = Nothing
cn.Close
Set cn = Nothing
Exit Sub
Else
res.MoveFirst
Set xlBook = GetObject(strFileName)
Set xlsheet = xlBook.Worksheets(1)
xlBook.Application.Visible = True
xlsheet.Cells(2, "n") = CDate(res.Fields(0))
i=0
While i < 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.PrintPreview True
xlBook.Application.DisplayAlerts = False
xlBook.Application.Quit
End If
End Sub。

相关文档
最新文档