ifix基于ACESS的操作记录
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的数据库块SQT和SQD

如何使用SQT,SQD块从数据库中读取数据
本文以Access数据库为例
第一步:在Access数据库中建两个数据库。
数据库一:ifix_sql_tables.mdb 包含两个表
表一:SQLLIB
输入一条记录:sqlname: testsel
Sqlcmd: Select col2 from t1;
数据库二:test.mdb包含一个表
表t1结构如下
任意输入数条记录。
第二步:在操作系统的ODBC数据源管理器中系统DSN页下创建两个数据库的ODBC数据源名称:
Test.mdb的名称是test
Ifix_sql_tables.mdb的名称是iFIXTables
第三步:iFIX的SCU中配置SQL,加入帐户iFixTables, test
配置SQL任务如下
第四步:iFixPDB中定义以下数据块TESTDO1: DO块,SIM点,用于触发SQT块SQL_SELECT: SQT块
注意其中数据标签一项:testdo1.f_cv,事件类型为值变化
高级选项如下:
注意:选择参数一项为“单行”,行一项为“1”,意思是取返回结果的第一条记录。
BATCH_ID: AO块,SIM点,用来接收数据库的值
注意高限为10000,防止返回数据超限。
SQL_SELECT_DATA:SQD块
第五步:建画面
1、建数据连接,显示Batch_ID的值
2、建按钮,切换testdo1的值以触发SQT块执行
检查结果,可以打开任务控制,在SQL页中,点击“帐户状态”按钮,可以看到执行情况,
如下图。
有关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历史库数据查询

历史库数据查询1. VisiconXGrid.vxData(1)从iFIX工作台的菜单栏中单击“插入\OLE对象”。
(2)从“插入对象”对话框的对象类型列表中点击选择“VisiconXGrid.vxData”控件。
单击“确定”按钮插入该控件。
(3)从画面中单击选择控件后,点击右键选择“属性(R) VisiconXData.vxData对象(O)”,打开“VisiconXData.vxData属性”对话框。
(4)在“提供者”选项卡中,单击选择“Microsoft OLE DB Provider for ODBC Drivers”。
(5)在“数据库”选项卡DSN名中,单击选择“FIX Dynamics Historical Data”。
(6)在“记录源”选项卡中,写入SQL命令:SELECT*FROMFIX(7)单击“确定”关闭对话框,完成vxData控件的设置。
注:以上SQL命令的查询结果仅显示当天的数据。
如果需要查询以前的数据,需要指定时间段,如:SELECT*FROMFIXWHERE(FIX.DATETIME > {ts '2011-12-18 08:25:00'})AND(FIX.DATETIME < {ts '2011-12-19 10:54:00'})时间段通过在画面中插入两个DTPicker控件作为起始时间和结束时间,用户可以更改vxData控件的QP值或编写脚本来实现时间赋值。
2. VisiconXGrid.vxGrid(1)从iFIX工作台的菜单栏中单击“插入\OLE对象”。
(2)从“插入对象”对话框的对象类型列表中点击选择“VisiconXGrid.vxGrid”控件。
单击“确定”按钮插入该控件。
注:vxData1控件和vxGrid1控件是iFIX的VX控件,要配合使用。
(3)从画面中单击选择控件后,点击右键选择“动画”,打开“vxGrid1动画”对话框。
MS ACCESS数据库实现自动压缩方式(IFIX)

MS Access数据库实现自动压缩方式MS Access数据库在一般情况下,其所占空间将随着数据量的增多而增大,即使在程序中利用SQL语句根据条件删除记录,数据库的大小也不能自动减小(因为删除操作在物理上是没有把数据记录删掉,因此数据库大小将不会减小)。
本方式是实现Access数据库的自动压缩,实现平台是iFIX组态软件中实现的。
因为Access是iFIX的ODBC报警记录的存储体,在iFIX运行期间,数据库是按独占方式访问的,程序中将无法利用Access设置的“修复和压缩数据库”功能。
本方式实现的思路是:首先设置ODBC报警数据库(Access)为“关闭时压缩”选项,然后在程序中把ODBC报警数据库(Access)复制到另一目录,再利用语句把数据库打开,待设定的时间到达后(例如五秒钟)就关闭ODBC报警数据库(Access),最后再把ODBC报警数据库(Access)复制到原来的目录,替换原来的数据库文件。
约定:ODBC报警数据库(Access)文件及存放目录是"C:\Dynamics\MXLAlarm\S123.mdb";ODBC报警数据库(Access)文件临时存放目录是:"C:\Dynamics\MXLAlarm\Back\";Access运行程序及存放目录为:"C:\Program Files\Microsoft Office\OFFICE11\ MSACCESS.EXE"。
下边是实现步骤及图解:[1]对ODBC报警数据库(Access)文件S123.mdb进行设置。
打开数据库文件,单击“工具”—“宏”—“安全性”选项,在“安全级”选项卡内选择“地”,如下图所示;单击“工具”—“选项”,在“常规”选项卡内选上“关闭时压缩”选项。
如下如所示;[2]iIFX中添加代码。
在VB脚本编辑环境内,在菜单栏上选择“工具”—“引用”,在对话框内添加对“Microsoft Scripting Runtime”的引用,这是为了在程序中可对文件进行操作;在脚本最顶端添加两个API函数,用来在程序中实现对Windows窗口的操作,添加的函数为(可以直接复制粘贴):Private Declare Function FindWindow Lib"user32"Alias"FindWindowA"(ByVal lpClassName As String,ByVal lpWindowName As String)As LongPrivate Declare Function SendMessage&Lib"user32"Alias"SendMessageA"(ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,ByVal lParam As Any)编写操作代码:'代码及说明Dim hw&,cnt&'存放Windows句柄'============================================================Dim srcfile As String'存放数据库原文件Dim desfile As String'存放数据库临时文件srcfile="C:\Dynamics\MXLAlarm\S123.mdb"'设置数据库原文件目录文件地址Dim Fso As New FileSystemObject'创建FSO对象实例Dim filepath As String'设置数据库临时文件目录文件地址desfile="C:\Dynamics\MXLAlarm\Back\S123.mdb"'将数据库原文件拷贝至临时文件目录,若存在同名文件则覆盖Fso.CopyFile srcfile,desfile,True'=============================================================='利用Shell命令把临时数据库文件打开Shell"C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE C:\Dynamics\MXLAlarm\Back\S123.mdb",vbMinimizedNoFocus'设定时间间隔start=Timer'时间间隔摄动为5SDo While Timer<start+5DoEventsLoop'5秒时间到达后,关闭数据库临时文件hw&=FindWindow(vbNullString,"Microsoft Access")'查找Microsoft Access窗体'hw&不为零则表示找到要关闭的窗体,并发送消息,关闭窗体If hw&<>0Thencnt&=SendMessage(hw&,&H10,0,0&)'关闭窗体End If'将临时文件复制到原文件目录,并覆盖原文件Fso.CopyFile desfile,srcfile,True'程序结束[3]在iFIX实现Access数据库的自动压缩,可以利用调度来实现。
通过ODBC配置及VB脚本开发将IFIX数据写入到ACCESS数据库中

通过ODBC配置及VB脚本开发将IFIX数据写入到ACCESS数据库中1.配置计算机ODBC(1)使用access新建一个accdb数据库,命名为ReportData,后面要用到;(2)计算机-----控制面板-----ODBC 数据源(32位)进入配置界面,需要注意一点,必须配置32位的ODBC,因为IFIX软件只能够识别32位的,配置界面如下图:(3)选择系统DSN,点击添加按钮,根据数据库后缀选择需要的驱动程序,然后点击完成;我使用的access数据库,数据库后缀为accdb,说明一点:对于mdb 类型的数据库,是老版本access的数据库类型,新版本的access都是accdb,但是也能够打开mdb类型数据库,如果没有Microsoft access driver(*.mdb,*.accdb)百度搜索一下,下载安装就好了;(4)数据源名命名为:ReportSource,数据库选择第一步中新建的数据库ReportData;(5)点击高级选项,设置数据库的登录名和密码分别为:sa和sa2.配置Access数据库(1)打开新建的数据库,新建一个表,表名为ReportData;(2)进入数据库设计视图,按照下图添加3个字段(3)DT栏用于显示时间和日期,必须设置日期/时间格式,默认值设置为下图所示,当数据库中添加条目时,自动显示添加数据时的时间;3.IFIX软件操作(1)新建一个基于时间项调度,间隔设置为5s,动作信息选择VB编辑器,进行脚本编写;(2)VB脚本编写,第一种编写方式具体代码如下:Private Sub FixTimer3_OnTimeOut(ByVal lTimerId As Long)Dim conODBC As ADODB.ConnectionSet conODBC = New ADODB.ConnectionconODBC.ConnectionString = "DSN = ReportSource; UID =sa; PWD =sa;" conODBC.Open "ReportSource", "sa", "sa"conODBC.Execute "insert into ReportData([VL]) values(3433) "conODBC.CloseEnd Sub标红部分,根据实际需要自行修改:DSN:ODBC数据源名;UID:登录名,没有设置时为空;PWD:登陆密码没有设置时为空;ReportData :数据库中表的名称VL:数据库中用于显示数据列的字段名;(3)VB脚本编写,第二种编写方式具体代码如下,此脚本对应的数据库字段格式见最后面的图:Private Sub FixTimer4_OnTimeOut(ByVal lTimerId As Long)Dim conODBC As ADODB.ConnectionDim adoRS As ADODB.RecordsetSet conODBC = New ADODB.ConnectionSet adoRS = New ADODB.RecordsetDim strQuery As StringconODBC.ConnectionString = "DSN = ReportSource; UID =sa; PWD =sa;" conODBC.Open "ReportSource", "sa", "sa"strQuery = "select * from RD where DT=#" & Date & "#" '或者表名FORM 或者SQL 选择语句"adoRS.Open strQuery, conODBC, adOpenDynamic, adLockPessimisticadoRS.AddNewadoRS.Fields(0) = DateadoRS.Fields(1) = 52adoRS.Fields(2) = 98adoRS.Fields(3) = 0adoRS.UpdateadoRS.CloseconODBC.CloseEnd Sub标红部分,根据实际需要自行修改:DSN:ODBC数据源名;UID:登录名,没有设置时为空;PWD:登陆密码没有设置时为空;RD:数据库中表的名称;在VB开发界面中,点击工具-----引用-----勾选引用项如下图,保存脚本,退出保存调度,命名为bbcs;(4)ifix切换至主页-----设置-----用户首选项-----后台启动-----添加bbcs调度,让其后台启动(5)应用程序-----SCU-----配置-----任务,添加FIXBACKGROUNDSERVER.EXE启动任务,启动方式为后台启动,保存SCU配置文件的更改,退出ifix,重启;(6)重启ifix后,软件会自动启动刚才配置的FIXBACKGROUNDSERVER,注意不要关闭此进程,最小化即可;(7)将IFIX切换至运行模式,打开最开始建立的access数据库,可以看到已经有数据了;第一种:第二种:。
IFIX报表(ODBC)

IFIX报表ODBC制作IFIX报表常规做法是采用IFIX内嵌的VBA语言,借助于OFFICE自带的ACCESS和EXCEL 来实现的。
例如,在IFIX画面上通过点击一按钮来察看某一天的数据,假如这有N个模拟量如:Y0GCK14CP101, Y0GCK13CP101, Y0GCQ11CF101,Y0GCC10CP101等数据间隔一小时归一次档。
一 Access数据库(表)简介创建一个ACCESS数据库如ReportDataBase.mdb,用来存放报表所需的数据。
IFIX 以一定的时间间隔将数据写入此数据库预先创建的表中如ReportData。
ReportData的结构如下:字段名数据类型日期日期/时间数值(整小时,此时间用来排序)时间数值Y0GCK14CP101 数值Y0GCK13CP101 数值Y0GCQ11CF101 数值………………数值注意:1 修改字段名时,在设计视图里将原来的字段ID做修改后,日期字段名的索引必须设置成无,否则IFIX将报错:[Microsoft][ODBC Microsoft Access Driver] 由于将在索引,主关键字,或关系中创建重复的值,请求对表的改变没有成功。
改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值可防止以上错误发生;2 打开Access表Reportdata,右键单击,选择设计视图,弹出的下拉选项中选择字段大小或数据类型,日期选择:短日期,时间选择:长整型,用户自定义的标签类型选择:双精度。
如下图示二建立ODBC数据源创建ODBC数据源。
控制面板->管理工具->ODBC数据源,打开ODBC数据源管理器,建立一个“系统DSN”,点击“添加”,双击“Microsoft Access Drivers (*.mdb)”,出现“ODBC Microsoft Access 安装”对话框。
数据源名:ReportSource注意:数据源名字后面会用到数据库: ReportDataBase.mdb,点击‘选择‘按钮选择创建的Access数据库。
IFIX报警历史查询总结

报警历史查询
数据库的创建(基于XP系统):
第一步:创建数据库
“控制面板”→“性能和维护”→“管理工具”→“数据源(ODBC)”
按“添加”生成以下画面
按“完成”
按“确定”跳出以下菜单框
数据库创建成功。
第二步:在IFIX建立“报警ODBC配置”“系统配置”→“报警配置”
按“修改”生成
按“配置”生成
数据库类型(Y)选择“ACCESS”
数据库标识符(I)选择“SHUJUYUAN”
表名(T):“SJY”按“现在创建表”生成
表示“成功创建表“。
注:SQL列表名可以写中文
第三步:在画面中显示历史数据
需要2个V isiconX数据控件、1个V isiconX复选框控件、1个V isiconX网格控件
对vxData1属性配置:
双击vxData1生成以下菜单框,选择“Microsoft Jet 4.0 OLE DB Provider”
在“数据库文件路径和名”里找到“SHUJUYUAN”的路径
按“Run SQL Wizard”对具体要求进行选择
对vxData2属性配置:
前一步同上,再加上一步,右单击选择“动画”进入“高级动画配置”做雷同以下的设置即可。
对vxCombo1属性配置:做雷同以下的设置即可
对vxGrid1属性配置:做雷同以下的设置即可
报表
注意事项:
1.Microsoft ActiveX Data Objects 2.1 Library 必须被引用(Office 2000) 2.Microsoft Excel 9.0 object libraries 必须被引用(Office 2000)
3.点名一定要是大写,因为IFIX自动生成的点名就是大写。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作记录
按照图中示例进行配置,报警区域是在建立标签时设定好的。
配置前,在硬盘中建立数据库文件,及ODBC连接。
图中:1—数据库类型,2—数据源名(ODBC),3—准备在数据库中创建的表名,4—表中所含数据名称。
设置完成后点击“现在创建表”按钮即可。
显示
DTPicker1是VB日历控件,需要安装VB后才可使用,例程:Private Sub DTPicker1_Change()
vxData1.QP1 = DTPicker1.Value
End Sub
vxData1控件和vxGrid1控件是iFIX的VX控件,要配合使用。
vxData1控件配置过程:
声称SQL语句时使用向导,简单易懂。
使用时,注意属性中的含义。
vxGrid1控件是副表,只要调用即可。
最终效果:
注意:操作记录是数据库记录的应用,需要定期清理数据库,所以在调度中还需编写删除相应数据记录的代码。
Private Sub FixTimer9_OnTimeOut(ByVal lTimerId As Long)
On Error Resume Next
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=TL;UID=;PWD=;"
cn.Open
StrSQL = "delete from SOEDB where 日期<#" & Date & "#"
res.Open StrSQL, cn, adOpenKeyset, adLockOptimistic
res.Update
res.Close
Set res = Nothing
Set cn = Nothing
End Sub。