报表控件应用-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报表制作

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报表

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中如何实现EXCEL报表

iFix中如何实现EXCEL报表

iFix中如何实现EXCEL报表.txt心脏是一座有两间卧室的房子,一间住着痛苦,一间住着快乐。

人不能笑得太响,否则会吵醒隔壁的痛苦。

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

在画面中添加个按钮。

复制以下代码:‘----------开始复制(不包括此行)--------------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.CcnADO.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‘----------结束复制(不包括次行)--------------注意:1.iFix历史数据库只支持读90天的数据,在SQL语句中限定时间即可。

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。

ADO技术在iFIX报表中的应用

ADO技术在iFIX报表中的应用

图#
温度记录报表
!
利用有 YHZE 接口的 H[9[ 控件显示数据。 J) ,>HG0G; 控 件 提 供 Y\? HZ 数 据 源 之 间 的 通 讯 接口和工作区间的对象。HG0G 控件能通过 YHZE 驱 动与安装在本地的任意 Y\? HZ 数据通讯。 双击控件 出现属性对话框如图 !, 你能快速的创建数据连接, 即 选择驱动引擎和要访问的数据库, 在纪录源标号, 能生 成一个 I]\ 查询或使用保存程序来获得返回的数据 库数据。以温度表为例, 生成一个 I]\ 查询:
摘 要 工控软件 %!"# 自带的报表实现方法存在一定的局限性。 通过结合 &’( 技 &’( 技术是一种较先进数据库对象模型, 可以实现在不增加其他外部组件情况下, 增强了 %!"# 报表制作的功能, 提高其灵活性。 术和其 ’&5& 控件完成报表, 关键词: 工控软件, 报表制作 %!"# , &’( 技术,
S’/0-,GB5- T"TU T./>#!)./>)0GL!).MEVT S’/0-,GB5- T"TU T./>#!)./>)0GL#).MEVT ?;@ 12 D 关闭表 ’()EB+(D 关闭数据库 @W)EB+(最后, 在 IEO 的启动程序对话框中需要加 ?;@ I5W 入 ./>WGNXL’+5;@)->- 保证调度程序的运行
《 工业控制计算机》 !""# 年 $% 卷第 & 期
!Q
温度 )炉尾温度 U 温度 )二段东上 U 温度 )二段西上 U 温度 )二段东下 U 温度 )二段西下 U 温度 )一段东上 U 温度 )一段西上 U 温度 )一段东下 U 温度 )一段西下 U 温度 )均热段东上 U 温度 )均热段西上 U 温度 )均热段东下 U 温度 )均热段西下

用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通过VB脚本调用ACCESS数据库制作报表

IFIX通过VB脚本调用ACCESS数据库制作报表

IFIX通过VB脚本调用ACCESS数据库数据制作报表作者的前一篇文章已经详细介绍了,如何通过调度将数据保存在access数据库中,今天分享一下,通过脚本调用数据库中的数据形成报表。

步骤01:建立报表模板1.使用Excel根据实际报表样式建立报表模板2.将报表模板另存为(*.htm,*.html)格式文件,文件打开如下图所示:步骤02:新建报表查询画面1.通过IFIX工具箱中的插入OLE对象,插入控件Microsoft date and timecontrol,控件属性中,将customformat值修改为yyyy/MM/dd HH:mm:ss,控件名称默认为DTPicker1;2.同样通过IFIX工具箱中的插入OLE对象,插入Microsoft Web Broswer控件,用于显示报表;3.通过工具箱插入按钮,用于进行报表查询;如下图所示:步骤03:VB脚本开发,调用ACCESS数据库中的历史数据,填写到报表模板中;具体脚本如下:Private Sub CommandButton4_Click()'On Error Resume NextDim OutReportFile As String '定义打开的报表模板路径和名称变量Dim InReportFile As String '另行保存报表的路径和名称变量Dim cn As ADODB.ConnectionDim res As ADODB.RecordsetDim StrSQL As StringDim i As IntegerDim row As IntegerDim MyDateMyDate = Format(Now(), "yyyy-MM-dd")Dim msexcel As Excel.ApplicationSet msexcel = CreateObject("Excel.Application")With msexcel.Visible = False '如为FALSE,则不显示EXCEL。

有关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,历史报警报表制作

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

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

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

iFIX使用脚本生成EXCEL报表

iFIX使用脚本生成EXCEL报表

作者: lostCity 复制收藏iFIX使用脚本生成EXCEL报表2006-07-23重新修改过的报表脚本注意中文单引号要换成英文的(因为网页支持有问题,故替换处理)附录文件为时间调度报表代码:下载附件另存为.rar文件‘注释: 1。

该程序需要安装ADO 2.0目标库并在本机注册‘2。

Microsoft ActiveX Data Objects 2.1 Library 必须被引用(Office 2000)‘3。

Microsoft Excel 9.0 object libraries 必须被引用(Office 2000)‘4。

划===处可根据具体报表修改Dim strQueryAvg As StringDim c As IntegerDim r As IntegerDim Intyexcel As Excel.ApplicationDim MyDate, MyMonth, MyDay, MyHour, MyMinute, MySecondDim StartTime, EndTime, Duration, DisplayDay, DisplayMonth As String‘++===================================================================‘报表中的TAGDim Tag1, Tag2, Tag3, Tag4, Tag5, Tag6, Tag7, Tag8 As StringDim Items As IntegerTag1 = "LV001"Tag2 = " "Tag3 = " "Tag4 = " "Tag5 = " "Tag6 = " "Tag7 = " "Tag8 = " "‘从历史库中取得域项,2 - DATA TIME, V ALUE, TAG 共三项Items = 2‘--====================================================================MyDate = Now()MyYear = Year(MyDate)MyMonth = Month(MyDate)MyDay = Day(MyDate)MyHour = Hour(MyDate)MyMinute = Minute(MyDate)MySecond = Second(MyDate)‘修改by lostcity 2006-7-23 2:17‘注释部分为前一天数据‘StartTime = MyYear & "-" & MyMonth & "-" & MyDay - 1 & " " & "00:00:00"‘EndTime = MyYear & "-" & MyMonth & "-" & MyDay - 1 & " " & "23:00:00"‘当天00:00:00至当前时间的数据StartTime = Format(MyDate, "yyyy-mm-dd") & " 00:00:00"EndTime = Format(MyDate, "yyyy-mm-dd hh:MM:ss")‘++=================================================================== =======‘查询,根据报表修改‘"WHERE MODE = ‘A VERAGE‘ and (TAG=‘" & Tag1 & "‘ or TAG=‘" & Tag2 & "‘" & _‘" or TAG=‘" & Tag3 & "‘ or TAG=‘" & Tag4 & "‘ or TAG=‘" & Tag5 & "‘" & _‘" or TAG=‘" & Tag6 & "‘ or TAG=‘" & Tag7 & "‘ or TAG=‘" & Tag8 & "‘)" & _‘"and INTERV AL = ‘01:00:00‘ and " & _‘"(DATETIME >= {ts ‘" & StartTime & "‘} and " & _‘"DATETIME <= {ts ‘" & EndTime & "‘})"strQueryAvg = "Select DA TETIME, V ALUE, TAG FROM FIX " & _"WHERE MODE = ‘A VERAGE‘ and (TAG=‘" & Tag1 & "‘ or TAG=‘" & Tag2 & "‘" & _" or TAG=‘" & Tag3 & "‘ or TAG=‘" & Tag4 & "‘ or TAG=‘" & Tag5 & "‘" & _" or TAG=‘"& Tag6 & "‘ or TAG=‘" & Tag7 & "‘ or TAG=‘" & Tag8 & "‘) " & _"and INTERV AL = ‘00:01:00‘ and " & _"(DATETIME >= {ts ‘" & StartTime & "‘} and " & _"DATETIME <= {ts ‘" & EndTime & "‘})"‘--==================================================================== =======Dim cnADO As New ADODB.ConnectionDim rsADO As RecordsetSet cnADO = New ADODB.ConnectioncnADO.ConnectionString = "DSN = FIX Dynamics Historical Data; UID = ; PWD = ;"cnADO.Open "FIX Dynamics Historical Data", "", ""Set rsADO = New ADODB.RecordsetrsADO.Open strQueryAvg, cnADO, adOpenForwardOnly, adLockBatchOptimisticr = 1Set Intyexcel = New Excel.ApplicationIntyexcel.Visible = True‘++=================================================================== =========‘打开的报表文件名Dim OutReportFile As StringDim InReportFile As StringInReportFile = "C:HIST1"Intyexcel.Workbooks.Open InReportFile & ".XLS"Intyexcel.Sheets("Sheet1").SelectIntyexcel.Columns("A:Z").SelectIntyexcel.Selection.ClearContentsIntyexcel.Range("A1").SelectWhile rsADO.EOF <> TrueWith Intyexcel.Worksheets(1)For c = 0 To ItemsIf rsADO(c) <> "" Then .Cells(r, c + 1).Value = rsADO(c)Next cr = r + 1rsADO.MoveNextEnd WithWendIntyexcel.Sheets("Sheet1").Select‘Intyexcel.ActiveSheet.PageSetup.Orientation = xlPortrai t ‘xlLandscape‘Intyexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4Intyexcel.ActiveSheet.PrintOutIntyexcel.DisplayAlerts = FalseIntyexcel.ActiveWorkbook.SaveOutReportFile = InReportFile & "_00" & MyMonth & MyDayIntyexcel.ActiveWorkbook.SaveAs OutReportFileIntyexcel.QuitIntyexcel.DisplayAlerts = TrueSet Intyexcel = NothingSet cnADO = Nothing文章来自: 博客浙江()原文参考:/d-45684.html。

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”,点击“添加”,双击“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.ConnectionDim res As ADODB.RecordsetDim StrSQL As StringSet cn=New ADODB.ConnectionSet res=New ADODB.Recordsetcn.ConnectionString="DSN=MyReport;UID=;PWD=;"//MyReport是数据源名称//cn.OpenStrSQL="select*from ReportData where日期=#"&Date&"#"//ReportData是建立数据库中的表名//res.Open StrSQL,cn,adOpenKeyset,adLockOptimisticres.AddNewres.Fields(0)=Dateres.Fields(1)=Fix32.Fix.tag1.f_cvres.Fields(2)=Fix32.Fix.tag2.f_cvres.Fields(3)=Fix32.Fix.tag3.f_cvres.Updateres.CloseSet res=NothingSet cn=NothingEnd Sub另外,如果定义了主键,如上图,选择了,则res.Fields(0)不可用。

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中采用ODBC制作历史报表

在iFix中采用ODBC制作历史报表

在iFix中采用ODBC制作历史报表1.生成历史数据库打开系统配置点击,添加HTC.EXE ,启动方式选择后台方式启动历史定义定义历史数据库启动任务控制器,启动HTC2.ifix历史数据库介绍打开ODBC数据源管理器,大家可以看到IFIX实时和历史数据库,历史数据库一般存放在HTRDATA文件夹中3.配置调度定义引用引用:Microsoft Excel 5.0 Object Library和Microsoft ActiveX Data Objects 2.7 编辑脚本Dim ReportArray(15) As String '定义变量数组Dim curTime As String '定义当前时间Dim strStartTime As String '报表查询的时间范围Dim strEndTime As String '报表查询的时间范围Dim Interval As String '报表查询的间隔时间Dim msexcel As Excel.Application '定义引用Dim rsADO As New ADODB.RecordsetDim cnADO As New ADODB.ConnectionDim SQL0, SQL1 As StringDim reportfile As String '存储文件名Private Sub FixTimer4_OnTimeOut(ByVal lTimerId As Long)curTime = Now '取得当前时间Dim 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))strStartTime = Year(curTime) & "-" & curmonth & "-" & curday _& " " & "00:00:00"strEndTime = Year(curTime) & "-" & curmonth & "-" & curday _& " " & "23:59:59"Interval = "01:00:00" '时间间隔reportfile = Year(curTime) & "-" & curmonth & "-" & curdayreportfile = "e:\" & reportfile & ".xls"ReportArray(0) = "O0ERB01CTO01" '定义报表变量ReportArray(1) = "O0ERB01CTO02"ReportArray(2) = "O0ERB01CTO03"ReportArray(3) = "O0ERB01CTO04"ReportArray(4) = "O0ERB01CTO05"ReportArray(5) = "O0ERB01CTO06"ReportArray(6) = "O0ERB01CTO07"ReportArray(7) = "O0ERB01CL301"ReportArray(8) = "O0ERB02CTO01"ReportArray(9) = "O0ERB02CTO02"ReportArray(10) = "O0ERB02CTO03"ReportArray(11) = "O0ERB02CTO04"ReportArray(12) = "O0ERB02CTO05"ReportArray(13) = "O0ERB02CTO06"ReportArray(14) = "O0ERB02CTO07"ReportArray(15) = "O0ERB02CL301"On Error GoTo ErrorSet msexcel = CreateObject("Excel.Application")With msexcel.Visible = True '如为FALSE,则不显示EXCEL。

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数据库连接为新的ADO数据库连接集'On Error Resume Next定义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列加入标签1 res.Fields(3) = Fix32.RW2.RW_Y0GBN11AP002_ZS.f_cv '在3列加入标签2 res.Update '保存记录Update(当Edit或AddNew方法完成后保存记录集) res.Close '关闭记录集cn.CloseSet res = NothingSet cn = NothingEnd Sub在vb2.2添加到FixBackgroundServer 任务打开SCU,点击如图所示:在文件名内查找FixBackgroundServer.exe文件添加后保存SCU文件。

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语句中限定时间即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一部分数据存储
[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 和其它的数据点字段,按[数据检索]按钮可从数据库查询出已存入的历史数据。

在数据检索界面中可对历史数据进行修改、删除等操作,检索出的数据可导出为CSV文件。

[7] 在开发界面中可将控件的可视范围缩小,保留左上角存储时间显示,完成数据存储部分配置。

保存画面切换至运行状态,运行系统中含有数据记录控件的画面应一直处于打开状态,才能实现过程数据连续不断的存入数据库。

[8] 报表软件程序组中打开“工控报表”工具,先在左侧列表中点击激活上部功能按钮,按[报表向导]弹出创建标准格式报表的向导工具。

选择数据库中数据表名hmiDataLog,报表名为“新建报表”,报表类型选择[日报表],在可选数据点中选择若干数据点(计算方式缺省为平均值,可选为最大值、最小值、累计值、差值等),按[生成]按钮即可生成一个包含所选数据点的标准格式的日报表模板。

[9] 按[保存]按钮,输入文件名,保存所建立的报表模板,关闭报表向导。

工控报表工具中点击新建立的报表模板,按[报表编辑]按钮可对报表模板表头、外观等进行简单编辑修改。

在报表模板中显示日期的单元格点击并输入当前日期,按[报表生成]按钮即可生成包含查询实际数据的数据报表。

[10] 画面中插入报表生成控件hmiReport.CtrlX,调整控件显示位置,保存并切换至运行运行状态,即可在监控界面中实现报表生成、打印、管理等操作。

生成报表的同时系统将在软件安装文件夹的“XLSReport”子文件夹中自动保存与数据报表相对应的Excel文档。

[11] 报表生成界面中按[自动设置]按钮,弹出窗口中选择某个报表模板,设置对应得触发时刻(时:分:秒)和触发方式(自动生成或自动打印),则系统将在指定时刻生成或打印出数据报表。

触发时刻可设置为“时:分:秒”如”16:30:00”,即每日16时30分0秒触发动作,也可设置成”00:00”,即每小时(0分0秒)时触发动作。

[12] 数据记录控件属性参数及用途
DataLogEnabled 链接一个离散量标签变量,为1时控件启动,为0时控件停止工作。

DataLogInterval 链接一个整形标签变量,控制控件的数据采样、存储周期。

DataLogTrig 链接一个离散量标签变量,由外部状态触发控件进行采样存储,为1时触发,0时不触发。

DataLife 链接一个整形标签变量,指定历史数据在数据库中的存留时间(天数)。

DataLogExtDateTime链接一个文本标签变量,指定历史数据存储时的外部日期和时间(非系统日期时间)。

DataLogOneTag链接一个整形标签变量,手动存储时指定存储单个变量数据,标签值为变量编号。

DataLogTime1-6 链接一个文本标签变量,指定某一时刻触发式据存储。

DataTableName 链接一个文本标签变量,数据库中用于存储采集数据的数据表名称。

Operator链接一个文本标签变量,将存储监控系统操作员信息。

TagValue001-120 链接120个实型标签变量作为数据采样点。

TagDesc001-120 可链接120个文本标签变量,也可直接在控件中输入,作为数据采样点的描述信息,也作为数据库中数据表的字段名。

第二部分运行记录
[1] 新建换面RSLog,菜单中选择插入〉OLE对象,对象类型列表中选择hmiReportRSLog.CtrlX插入到换面中,点击控件右键菜单中选择动画〉配置〉杂项,将控件的属性DataLogEnabled链接数据块 DATALOGENABLED,数据转换选择”对象”。

可将控件参数TagValue001- TagValue120链接开关量数据块的实时值(Fix32.FIX. IFIX1_H2O_BW_SP0302.F_CV)作为设备运行状态采样点,控件参数TagDesc001- TagDesc120链接开关量数据块的描述信息(Fix32.FIX. IFIX1_H2O_BW_SP0302.A_DESC)作为设备名,设备名也可在控件属性窗口中直接输入。

数据块的描述信息不能为空,不能以数字开头,不能包含运算符号。

画面打开时运行脚本程序:Fix32.Fix.DataLogEnabled.F_CV = 1。

[2] 保存画面并切换至运行状态,选中[显示数据]可见iFix传入的变量状态和设备名。

控件将记录每次状态变化的时刻并传入数据库作为设备的运行记录
[3] 进入数据库系统并打开数据表 RunRecord可见存储的状态及时间信息。

此类信息可由报表向导生成设备运行记录表
[4] 进入报表开发程序运行报表向导,数据库数据表名选择RunRecord,报表类型选择设备运行记录表,选择设备名称,生成、保存设备运行记录表模板。

[5] 报表运行环境中选择设备运行记录模板,按[报表生成]按钮则生成相应的数据记录表。

数据记录表为日报表,最多包含一天内20个设备的运行(启停记录)、运行次数、累计运行时间等信息。

第三部分信息记录
[1] 新建换面MsgLog,菜单中选择插入〉OLE对象,对象类型列表中选择hmiReportMsgLog.CtrlX插入到换面中,点击控件右键菜单中选择动画〉配置〉杂项,将控件的属性DataLogEnabled链接数据块 DATALOGENABLED,数据转换选择”对象”。

TagDesc001 至 TagDesc010 静态值输入需要记录的信息内容如报警信息、操作员操作信息等。

控件参数TagValue001- TagValue120链接开关量数据块的实时值(Fix32.FIX. IFIX1_H2O_BW_SP0302.F_CV)作为状态采样点。

画面打开时运行程序:Fix32.Fix.DataLogEnabled.F_CV = 1。

[2] 保存画面并切换至运行状态,选中[显示数据]可见iFix 传入的变量状态和设定的信息内容。

每次状态发生变化时控件将记录相应信息内容至文本文件,文件名为当前日期,扩展名为.rec,存储在报表安装目录的MSGReport子目录。

[3] 控件列表中选择 hmiReportNote.CtrlX(文本浏览器控件)并插入到画面中。

保存画面并切换至运行状态,控件中按[设置]按钮,文件标识设置为“操作记录”,文件格式和路径输入“c:\hmiReport\MSGReport\*.rec”,按[确定]按钮则信息记录文件显示在列表中,点击选择可进行浏览、打印、导出等操作。

相关文档
最新文档