IFix3.5报警历史的设置与查询
- 格式:pdf
- 大小:186.02 KB
- 文档页数:11
历史报警查询在TD200中的实现
朱海建
【期刊名称】《大科技·科技天地》
【年(卷),期】2012(000)005
【摘要】在使用PLC作为控制器的造纸助剂溶解设备中,当设备发生故障时,通常都要发出声光报警及时通知操作人员并显示实时报警信息。
然而要实现对历史报警进行查看,通常都要用到价格较高的工业监控软件或触摸屏。
西门子公司的TD200文本显示器是可编程序控制器S7—200系列中一种低成本的文本显示和操作员人机界面,具有显示文本信息及实时报警显示功能。
本文以TD200文本显示器为基础,介绍了如何在PLC中编制程序,使之具有历史报警查询功能。
【总页数】2页(P347-348)
【作者】朱海建
【作者单位】苏州热工研究院有限公司热动中心
【正文语种】中文
【中图分类】TP29
【相关文献】
1.基于iFIX的报警查询功能的实现 [J], 舒应秋;舒继森;胡青松
2.RSView32利用VBA实现报警历史查询 [J], 宋勇江;巩伟
3.Delphi应用程序中模糊查询和组合查询的实现 [J], 袁志平;曹桂新
4.数据查询模块的设计与实现——兼论读者数据表中的数据查询 [J], 李国红
5.数据查询模块的设计与实现——兼论读者数据表中的数据查询 [J], 李国红
因版权原因,仅展示原文概要,查看原文内容请购买。
基于iFIX监控平台的电子图纸查询报警系统的开发与应用作者:刘磊张新锋柳宾来源:《科技视界》 2014年第3期刘磊张新锋柳宾(河南中烟工业有限责任公司南阳卷烟厂,河南南阳 473000)【摘要】传统的电气图纸多为纸质或pdf、dwg等格式的电子图纸,其与生产设备相互独立存在。
本文通过在iFIX监控平台中开发电子图纸,使其与工业现场监控画面结合起来,形成图纸与设备点的一一对应,及报警信息与电子图纸、维修故障库的联动,从而实现设备的快速维修。
【关键词】监控系统;iFIX;电子图纸0引言随着计算机技术、数据库技术、信息技术的不断发展,纸质图纸正在逐步转换为电子图纸,如果实现电子图纸与故障报警信息进行有机结合和联动,对进一步提高设备的自诊断能力和丰富设备故障库内容具有重大意义。
原有图纸存在信息量小、不便修改及不便保存等特点,对纸质图纸进行电子化后,可提升其信息容量,便于存储保存,更能拓展其在现场中的应用,本文以电子图纸为基础,在车间现有的iFIX监控平台上进行电子图纸查询报警系统的开发,使设备的相关部位控制关联到电子图纸的每一页上来,使设备相关的报警信息也关联到图纸上来,从而提升维修人员的便捷性,极大提高设备维修效率、缩短设备的维修时间。
1国内外研究现状近年来电子图纸技术主要使用在档案管理等多个方面。
最初的谓电子图纸,是指随着计算机应用的普及,将原来的纸质图纸档案转化为.dwg、.dwf、.jpg、.png、.xls等等多种格式并储存在计算机中,并逐步形成了电子图库,以方便图纸的统一管理和查询。
随着互联网的发展和工业信息化进程的加快,电子图纸已经不单单是档案管理方面的应用,近年来,正在逐步向与现场应用结合的方向发展,在企业现代化管理系统中必将起到越来越突出的作用。
因此,随着图纸电子化进程的加快和管理方面的不断完善,电子图纸与现场设备的联动将会有着更为广阔的应用环境。
目前该项目还是国内空白,具有良好的推广应用价值。
关于IFIX历史报警数据存储与查询实例一.ODBC服务的连接开始-设置-控制面板-管理工具-数据源ODBC选用户DNS-添加-选Microsoft Access Driver(*.mdb)数据源名:Myalarm选(或创建)数据库名:Alarm.mdb, 文件类型:Access,驱动器D:连接池-禁止二.系统SCU的配置SCU-IFIX-配置-报警-报警ODBC服务,启动-修改-区域(A):从报警区域数据库中选择- CLQS-ALM-增加-确定配置:数据库类型:Access数据库标识符:Myalarm列配置:选9项现在创建表:FIXALARMS(默认表名)其它默认-确定保存退出三.控件的引用1.日期时间控件典型装VB6.0后,项目工具栏文件----工具栏----插入OLE对象双击选Microsoft date and time picker控件日期控件-属性-格式:1-dtpShortDate,有效前不打勾。
其它默认,时间控件-属性-格式:2-dtpTime, 有效前不打勾。
其它默认2.vxData控件(数据管道)IFIX4.0工具箱底部vxData图标右键-属性vxData对象----PROPERTIES VISICONXDATA VXDATA对象提供者:Microsoft OLE DB Provider for ODBC Drivers数据库:DNS名:Myalarm,用户名密码选项均空---测试连接-测试连接成功-确定记录源:命令类型:SQL命令应用-确定3.vxGrid控件(显示)工具箱底部vxGrid图标选控件vxGrid1-右键-动画-高级-高级动画配置-行为-ADORecords-动画打勾数据源:报警记录一览表.vxData1.ADORecords数据转换:对象四.VBA脚本的编写1.初始化脚本代码'初始化设置Private Sub CFixPicture_Initialize()'设定默认开始时间Me.DTPFromDate = DateAdd("d", -1, Now)Me.DTPFromTime = ("00:00:00")'设默认结束时间Me.DTPEndDate = NowMe.DTPEndTime = Now'设置时间'vxData1.QP1 = Format(Me.DTPFromDate.Value, "yyyy-MM-DD") & " " & Format(Me.DTPFromTime.Value, "HH:MM:SS")'vxData1.QP2 = Format(Me.DTPEndDate.Value, "yyyy-MM-DD") & " " & F ormat(Me.DTPEndTime.Value, "HH:MM:SS")End Sub2. 查询按扭CmbSearch代码如下:'开始查询Private Sub CmbSearch_Click()'连接自动刷新Me.vxData1.AutoRefresh = True'Format函数用于设定时间格式vxData1.QP1 = Format(Me.DTPFromDate.Value, "yyyy-MM-DD") & " " & Format(Me.DTPFromTime.Value, "HH:MM:SS")vxData1.QP2 = Format(Me.DTPEndDate.Value, "yyyy-MM-DD") & " " & F ormat(Me.DTPEndTime.Value, "HH:MM:SS")'设定查询内容'从数据库中查询符合时间段的数据Me.vxData1.SQLCommand = "SELECT *FROM FIXALARMS WHERE" & _ "(FIXALARMS.ALM_NATIVETIMEIN >= {ts 'QP1'})AND(FIXALARMS.ALM_NAT IVETIMELAST <= {ts 'QP2'})"'刷新数据Me.vxData1.RefreshMe.vxGrid1.RefreshEnd Sub3. 完整的VBA按扭代码如下:'初始化设置Private Sub CFixPicture_Initialize()'设定默认开始时间Me.DTPFromDate = DateAdd("d", -1, Now)Me.DTPFromTime = ("00:00:00")'设默认结束时间Me.DTPEndDate = NowMe.DTPEndTime = Now'设置时间'vxData1.QP1 = Format(Me.DTPFromDate.Value, "yyyy-MM-DD") & " " & Format(Me.DTPFromTime.Value, "HH:MM:SS")'vxData1.QP2 = Format(Me.DTPEndDate.Value, "yyyy-MM-DD") & " " & F ormat(Me.DTPEndTime.Value, "HH:MM:SS")End SubPrivate Sub CFixPicture_KeyDown(ByVal KeyCode As Long, ByVal Shift As Long, ContinueProcessing As Boolean)End Sub'开始查询Private Sub CmbSearch_Click()'连接自动刷新Me.vxData1.AutoRefresh = True'Format函数用于设定时间格式vxData1.QP1 = Format(Me.DTPFromDate.Value, "yyyy-MM-DD") & " " & Format(Me.DTPFromTime.Value, "HH:MM:SS")vxData1.QP2 = Format(Me.DTPEndDate.Value, "yyyy-MM-DD") & " " & F ormat(Me.DTPEndTime.Value, "HH:MM:SS")'设定查询内容'从数据库中查询符合时间段的数据Me.vxData1.SQLCommand = "SELECT *FROM FIXALARMS WHERE" & _ "(FIXALARMS.ALM_NATIVETIMEIN >= {ts 'QP1'})AND(FIXALARMS.ALM_NAT IVETIMELAST <= {ts 'QP2'})"'刷新数据Me.vxData1.RefreshMe.vxGrid1.RefreshEnd Sub以上工作结束后保存,退出。
通过SQL Server数据库查询ifix历史报警信息IFIX组态软件中提供报警一览控件,但是只能作为DCS系统中实时报警信息的显示,不能做到历史报警的查询功能,在网上笔者也查了方法,毫不避讳的说,都是垃圾,下面将结合实际项目经验,分享查询ifix历史报警的一种方法,主体思路是通过配置ifix组态软件,将系统报警写入到SQL Server数据库中,然后通过VBA脚本对数据中存放的报警信息进行查询。
软件操作环境:ifixV6.0+SQL Server2014+windows7旗舰版64BIT通过上一篇文档操作,我们已经实现了将ifix报警信息存储在我们新建的SQL Server数据库中,本片文档将详细介绍如何通过VBA脚本来读取数据库中的存放的报警信息。
目录1. 新建画面,插入DT PICKER OLE对象 (2)2. 插入其它控件 (2)3. 报警查询按钮VBA具体脚本 (3)4. 初始化VBA具体脚本 (4)5. 运行项目测试 (4)1.新建画面,插入DT PICKER OLE对象具体步骤:新建一个ifix画面,画面中插入两个Microsoft date and time picker control控件,分别命名为StartTime和Endtime控件属性修改:右键添加的日期时间控件,选择属性,参照下图进行设置2.插入其它控件插入一个按钮,作为查询按钮;再插入一个ViseconX网格控件,用来显示查询到的报警信息;3.报警查询按钮VBA具体脚本查询按钮的CLICK事件中编写如下脚本:If PIC报警查询.Endtime.Value < PIC报警查询.StartTime.Value ThenMsgBox ("时间范围有误,请重新输入!")Exit SubEnd If '判断输入时间是否合规Dim rsADO As New ADODB.RecordsetDim cnADO As New ADODB.ConnectionDim SQL As StringDim strStartTimeDim strEndTimestrStartTime = Format(PIC报警查询.StartTime.Value, "yyyy-MM-dd HH:mm:ss") '设置开始时间格式strEndTime = Format(PIC报警查询.Endtime.Value, "yyyy-MM-dd HH:mm:ss") '设置结束时间格式'查询语句查询报警历史数据库中的字段,用户可根据实际需求,修改查询字段SQL = "SelectALM_NATIVETIMEIN,ALM_NATIVETIMELAST,ALM_TAGNAME,ALM_VALUE,ALM_DESCR,ALM_ALM STATUS FROM FIXALARMS where ((FIXALARMS.ALM_NATIVETIMEIN >={ts '" & strStartTime & "'}) and (FIXALARMS.ALM_NATIVETIMEIN <={ts '" & strEndTime & "'})) "Set cnADO = New ADODB.ConnectionSet rsADO = New ADODB.Recordset'Server=数据库所在机器的IP或机器名,DataBase=用户现场实际访问的数据库。
iFix的默认报警音响是通过主板发声的。
如果要转到音箱,需要写VBA脚本。
首先,新建一个基于事件项的调度。
触发信息里数据源使用Fix32.THISNODE.ALARMCOUNTERS.F_CV > 0。
这里ALARMCOUNTERS是iFix当前报警数量。
事件类型选择“为真时”。
编辑脚本:Private Declare Function sndPlaySound& Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long)‘声明API调用Const SND_ASYNC = &H1 ‘SND_ASYNC作为函数的参数,表示循环播放Private Sub FixEvent1_OnTrue() ‘事件为真时Dim X%Dim Pausetime, Startaa: If Fix32.Fix.ALARMCOUNTERS.F_CV > 0 Then‘当报警数大于零,即有未确认报警X% = sndPlaySound("c:\aaa.wav", &H1)‘调用sndPlaySound函数播放硬盘上的wav文件ElseGoTo BBEnd IfPausetime = 5 ‘循环延时,视所播放声音文件长度调整Start = TimerDo While Timer < Start + PausetimeDoEventsLoopGoTo aaBB:End Sub报警音响将一直持续循环播放到确认报警为止。
如果要求报警音响可选,在触发信息数据源里面添加AND某变量为1或0,然后在相应画面做个切换该数字量的按钮即可。
以上方案在iFix3.5环境下验证有效。
附:在iFix里实现脉冲按钮脚本(1)ToggleDigitalPoint "Fix32.THISNODE.BBB.F_CV"Dim Pausetime, StartPausetime = 2Start = TimerWhile Timer < Start + PausetimeDoEventsWendToggleDigitalPoint "Fix32.THISNODE.BBB.F_CV"(2)Public Sub PAUSE(PAUSETIME As Double)Dim CURRENTTIME As DateCURRENTTIME = TimeWhile Time < DateAdd("S", PAUSETIME, CURRENTTIME)DoEventsWendEnd Sub以上放到globals-user的脚本里。
iFIX使用手册iFIX使用手册目录1、概述1.1 介绍1.2 系统要求1.3 安装iFIX2、iFIX界面2.1 主界面2.2 工作区域2.3 菜单栏2.4 工具栏3、创建项目3.1 新建项目3.2 添加设备驱动3.3 配置通信3.4 导入标签4、设备连接4.1 创建设备4.2 配置设备参数4.3 设备连接状态5、图形化编辑5.1 新建画面5.2 添加控件5.3 编辑控件属性5.4 设定动画效果6、组件库6.1 控件库6.2 字库6.3 符号库7、运行与调试7.1 运行画面7.2 监视标签值7.3 调试功能8、报警与事件8.1 设置报警条件 8.2 定义报警消息8.3 报警处理9、数据存储9.1 历史数据记录 9.2 手动数据录入9.3 数据备份与恢复10、安全与权限控制10.1 用户与用户组10.2 权限设置11、监控与诊断11.1 故障诊断11.2 监控性能12、高级功能12.1 定时任务12.2 脚本编程12.3 接口与对接附件:本文档没有附件。
法律名词及注释:1、设备驱动:用于与外部设备进行通信的软件模块。
2、通信:指计算机之间或计算机与外部设备之间进行数据交换的过程。
3、标签:在iFIX中用于显示变量值的标识符。
4、画面:iFIX中可视化界面的一个页面,用于显示相关设备状态或操作控制界面。
5、控件:用于iFIX画面中显示数据、接受操作或显示系统相关信息的元素。
6、动画效果:在iFIX中实现数据显示动态效果的功能。
7、报警条件:用于设定在某一条件满足时触发报警。
8、报警消息:触发报警时显示的相关信息。
9、权限控制:用于设定用户或用户组对系统功能与数据的访问权限。
10、故障诊断:通过对系统运行状态的监控,快速诊断并解决故障。
11、性能监控:用于监测系统运行状态、性能指标的功能。
当过程值超过所定义的限值时,iFIX 将发送报警来通知操作员。
能使用SCU 的报警配置功能来启用和配置报警服务。
要配置报警,在SCU 工具箱中单击报警按钮。
有关如何配置报警功能,以下章节有详细的描述。
z启用报警服务 z自定义报警服务 z高级报警配置 z编辑报警区域数据库 z配置自动报警管理器 z 配置报警音响报警服务将提供自定义报警配置工具。
能很方便的启用任意一个或所有的报警服务,并且也能为每个服务定义设置来帮助实现报警策略。
下面是在报警配置对话框中可利用的报警服务:z报警打印机1,2,3,4 z报警一览服务 z报警文件服务 z报警历史服务 z报警网络服务(只在网络方式下激活) z报警启动队列(只在配置网络SCADA 服务器下激活) z 报警ODBC 服务要启用和配置服务,只需要双击它。
关于报警服务的更详细信息,请参阅实现报警和消息 手册。
下面部分将详细介绍如何使用SCU 来自定义报警服务。
通过自定义配置修改每个报警服务的一些设置。
每个报警服务都包含各自的配置对话框,并可以修改它。
您也可以从配置对话框中访问报警区域对话框。
有关每个报警服务对话框如何工作的详细信息请参阅实现报警和消息指南。
配置报警区域 配置报警区域对话框将控制哪些报警和应用消息能接收。
在配置对话框上通过单击区域按钮,能访问已配置配置报警启用报警服务自定义报警服务的任务对话框。
注意:也能执行高级报警区域配置功能。
更详细的信息请参阅高级报警配置部分。
更多有关报警区域信息请参阅实现报警和消息指南。
下面部分简要的描述了配置报警区域时如何使用配置报警区域对话框。
如何使用配置报警区域对话框SCU允许您从以下几个位置中来访问配置报警区域对话框:报警服务.在报警配置对话框中双击一个报警服务并单击区域。
出现一个启用特殊服务的已配置报警“区域”对话框。
公共报警区域.在报警配置对话框中,单击“高级”并单击“公共区域”。
出现一个为公共区域的已配置报警区域对话框。
KV7.5报警及报表的时间段数据查询功能实现本月学习中遇到个问题,在KV7.5中按时间查询报警或者报表数据的功能实现。
由于学习初期加上对于产品版本变动不甚熟悉,所以遇到点困难。
现将其中一种实现方法与大家共享下。
功能说明:配合微软日历控件实现对报警记录或者报表数据按时间段查询功能。
所用控件:报警控件、微软日历控件〔Microsoft Date and Time Picker Control 6.0 (SP6)控件〕、KvAdoDBGrid Class控件。
数据库:ACCESS数据库报警查询实现方法:由于KV7.5的默认报警报表的时间字段由原来的AlarmDate和AlarmTime合并成了一个字段AlarmTime且为文本格式。
所以条件查询条件中无法比较文本格式的时间。
如以下图:所以要实现报警的按时间段查询只能通过脚本实现。
1.制作画面:按照报警的一般制作方法和微软日历控件的用法先制作画面。
如以下图:画面中要具备报警控件、KvAdoDBGrid Class控件用于报警的实时查询和历史查询。
微软日历控件,用于查询时间的选择。
需要说明的是微软日历控件需要设置下格式才能显示具体时间格式。
设置方法是选中微软日历控件的空间属性做如以下图的格式选择:2. KvAdoDBGrid Class控件属性及数据源设置首先要利用KvAdoDBGrid Class控件实现报警的历史数据查询需要正确的设置该控件所关联的报警数据源、数据库、表名称、有效字段等属性。
具体例如如以下图:另外,需要在工程浏览器报警配置中做相应设置。
按如上步骤设置即可实现报警的历史数据查询功能。
配合条件查询脚本KV.QueryDialog();KV.FetchData();KV.FetchEnd();实现效果如以下图:3.微软时间控件事件脚本的编写首先,在作为日期选择的控件中添加CloseUP〔〕事件,编写事件脚本如下:float Ayear;float Amonth;float Aday;string temp;Ayear=ADate.Year;Amonth=ADate.Month;Aday=ADate.Day;temp=StrFromInt( Ayear, 10 );if(Amonth<10)temp=temp+"/0"+StrFromInt( Amonth, 10 );elsetemp=temp+"/"+StrFromInt( Amonth, 10 );if(Aday<10)temp=temp+"/0"+StrFromInt( Aday, 10 );elsetemp=temp+"/"+StrFromInt( Aday, 10 );\\local\选择日期=temp;如图:在作为日期选择的控件中添加Change〔〕事件,编写脚本如下:\\local\选择时间=StrFromInt(AT1.Hour, 10)+":" +StrFromInt(AT1.Minute, 10)+":"+StrFromInt(AT1.Second, 10);如图:日期和时间的控件脚本编写,以上两种方式都可以实现。
报警历史查询
数据库的创建(基于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自动生成的点名就是大写。
iFix监控系统中实现报警记录的存储和查询引言 2#联合泵站供水控制系统主要包括铸机供水控制系统、LF炉及RH炉供水控制系统、4300轧机供水控制系统和平流池控制系统。
采用上位机+PLC网络监控的方式,由上位机、施耐德昆腾系列PLC根据生产工艺组成控制网络系统,监控软件采用Intellution的Ifix。
iFIX提供的图形化的过程信息包括原始数据、计算数据、实时报警、变量字符串、点信息、实时趋势图、历史趋势图和变量状态等大量生产信息,操作人员根据这些信息进行分析和管理,并通过操作界面向数据库写数据,从而实现对现场生产工艺及设备的调节控制。
1 应用背景2#联合泵站铸机供水控制系统采用IFIX软件的报警系统,原设计报警信号只能实时显示,报警和操作记录不能保存,不便于优化操作和故障分析。
系统中由于数据采集量大,运行过程中可能出现大量的报警信息,运行人员不易发现真正的故障点,有时还可能出现忽略、丢失重要报警信息的情况。
因此良好的报警管理系统能及时发现和迅速排除故障,能准确查找故障原因,是系统安全稳定运行的有力保障。
2 解决方法对报警系统进行改造,将开关量变位、模拟量越限等数据变化存入到历史数据库中,然后再通过编写程序查询报警历史。
同时对报警信息进行分类优化,便于运行人员快捷的定位故障,及时采取措施,保证安全稳定生产。
下面就改造中的设计思想和方案进行介绍,并讨论具体实现中的关键技术问题。
2.1 报警记录的存储和查询由于iFIX的“报警历史”功能只能存储实时报警信息,要实现报警信息的存储,需要借助其它工具。
IFIX系统的报警信息可以记录到文本文件中,也可以通过ODBC记录到开放式数据库中,如ACCESS、SQL Server 等。
本次改造选用数据库的方式存储报警记录、运行记录,记录可以长期保存,随时查询并可打印。
2.1.1 IFIX数据库中配置报警信号及报警类型在IFIX 数据库中对需要报警的数据和信号进行配置,设置模拟量的报警值、报警类型,如上限、上上限、下限、下下限、变化率、最小偏差和最大偏差等;设置数字量的报警类型,如变位、闭合和打开等。
IFix3.5报警历史的设置与查询在实际工程中需要对开关量变位,模拟量越限等数据变化存入到历史数据库中,在此称之为报警历史库,然后再通过编写程序查询报警历史。
如何实现报警存入报警历史库呢?本章以ACCESS作为报警历史库,来说明报警历史库的实现过程,并给出实际的报警历史查询代码。
第一节报警历史的设置第一步:创建一个ACCESS类型的数据库,命名为hisdata,路径为:D:\Dynamics\SampleSystem\HistoricalData。
第二步:在ODBC中创建DSN,命名为hisdata。
创建过程如下:1:双击ODBC,出现如图1.1所示对话框。
2:点击添加后,出现如图1.2所示对话框。
3:选择Driver do Microsoft Access (*.mdb)项,点击完成,出现如图1.3所示对话框。
4:输入数据源名hisdata,输入说明“IFIX报警历史库”,然后点击选择,出现如图1.4所示对话框。
图1.45:找到开始创建的Access数据库,点击确定。
出现如图1.5所示的对话框。
6:点击确定完成ODBC配置。
第三步,打开ifix3.5的系统配置在系统配置中选择配置下面的报警,显示如图1.6所示对话框。
图1.6第四步:选择Alarm ODBC Service,并启用,点击修改后显示图1.7对话框。
第五步:选择报警ODBC服务配置下的配置按钮,显示图1.8对话框。
4第六步点击数据库类型右边的浏览按钮,出现图1.9所示对话框。
图1.9选择Access点击确定。
第七步点击图1.8中数据库标识符右边的浏览按钮出现图1.10所示的对话框。
5选择hisdata点击确定。
第八步点击图1.8中的现在创建表,会弹出创建成功的对话框。
点击确定返回图1.7所示的对话框,点击确定,返回图1.6所示的对话框,点击确定,然后点击文件中的保存,保存系统配置。
至此iFix3.5报警历史库的配置完成。
第二节报警历史的查询启动iFix3.5演示系统。
按CTRl+W进入编辑模式。
新建画面如图2.1所示,命名为“iFix1_Alarm_history_query.grf“,画面上有1个MSHFlexGrid控件(Grid1),1个ComboBox控件(alarmArea),4个DTPicker控件(StartDTPicker,StartTTPicker,EndDTPicker,EndTTPicker),4个Text控件,1个CommandButton控件(cmdOK)。
MSHFlexGrid控件用来显示查询结果,ComboBox控件用来选择报警区域,DTPicker控件用来选择起始和结束时间,CommandButton控件用来启动查询。
6图2.1需要注意的是采用ADO查询,需要在引用中添加ADO库,如图2.2所示。
7代码及说明如下:Dim rdate, rdate1, tag, tt, dtDim StartTime, EndTime As StringPrivate Sub CFixPicture_Initialize()With alarmArea.AddItem "BATCH_PRODUCTION".AddItem "Discrete_Mfg".AddItem "Pharm_Process".AddItem "Waste_Water".AddItem "ALL".Text = "ALL"End Withrdate = Daterdate = Format(rdate, "yyyy-mm-dd")rdate = rdate & " 00:00:00"StartDTPicker = rdateStartDTPicker1 = rdaterdate1 = Daterdate1 = Format(rdate1, "yyyy-mm-dd")tt = Timett = Format(tt, "hh:mm:ss")rdate1 = rdate1 & " " & ttEndDTPicker = rdate1EndTTPicker = TimeEndDTPicker1 = rdate1EndTTPicker1 = TimeStartTime = rdateEndTime = rdate1End SubCFixPicture_Initialize为初始化画面时的事件,在这里对alarmArea进行初始化,添加需要的报警区域;对起始时间进行设置,起始时间设置为当前日期的零点,结束日期设置为当前日期时间。
Private Sub cmdOK_Click()Dim strQueryAvg, strQueryAvg1, strQueryAvg2, strQueryAvg3 As StringDim str As StringDim Querytime As Stringstr = ""8If alarmArea.Text <> "ALL" Thenstr = alarmArea.TextEnd IfstrQueryAvg = "SELECT FIXALARMS.ALM_DATEIN,FIXALARMS.ALM_TIMEIN,FIXALARMS.ALM_DATELAST,FIXALARMS.ALM_TIMELAST,FIXALARMS.ALM_TAGNAME,FIXALARMS.ALM_DESCR, FIXALARMS.ALM_VALUE,FIXALARMS.ALM_ALMAREA, FIXALARMS.ALM_OPFULLNAME, FIXALARMS.ALM_OPNODE FROM FIXALARMS"strQueryAvg1 = " WHERE (FIXALARMS.ALM_ALMAREA LIKE '%" & str & "%')"strQueryAvg2 = " AND (FIXALARMS.ALM_NATIVETIMELAST BETWEEN {ts '" &StartTime & "'} AND {ts '" & EndTime & "'})"strQueryAvg3 = " ORDER BY FIXALARMS.ALM_NATIVETIMELAST DESC"strQueryAvg = strQueryAvg & strQueryAvg1 & strQueryAvg2 & strQueryAvg3Dim i, j As IntegerDim cnADO As New ADODB.ConnectionDim rsADO As RecordsetSet cnADO = New ADODB.ConnectioncnADO.ConnectionString = "DSN = hisdata; UID = sa; PWD = ;"cnADO.Open "hisdata", "sa", ""Set rsADO = New ADODB.RecordsetrsADO.CursorLocation = adUseClientrsADO.Open strQueryAvg, cnADO, adOpenDynamic, adLockUnspecified, -1If rsADO.RecordCount > 5000 ThenMsgBox "查询结果超过5000条,请缩小查询时间范围"Exit SubEnd IfSet Grid1.DataSource = rsADOSet cnADO = NothingWith Grid1.TextMatrix(0, 1) = "开始日期".TextMatrix(0, 2) = "开始时间".TextMatrix(0, 3) = "结束日期".TextMatrix(0, 4) = "结束时间".TextMatrix(0, 5) = "TAGNAME".TextMatrix(0, 6) = "描述".TextMatrix(0, 7) = "值".TextMatrix(0, 8) = "报警区域"9.TextMatrix(0, 9) = "登录用户".TextMatrix(0, 10) = "操作节点".ColWidth(0) = 500.ColWidth(1) = 1000.ColWidth(2) = 1250.ColWidth(3) = 1000.ColWidth(4) = 1250.ColWidth(5) = 2250.ColWidth(6) = 2000.ColWidth(7) = 1500.ColWidth(8) = 1500.ColWidth(9) = 1500.ColWidth(10) = 1200.ColWidth(11) = 1200End WithFor i = 1 To Grid1.Rows - 1Grid1.TextMatrix(i, 0) = iNextEnd SubcmdOK_Click启动查询,并将查询的结果显示在Grid1上。
在这里注意的是SQL语句,主要用到了SELECT,WHERE,LIKE,BETWEEN,AND,ORDER BY等SQL查询语句。
实现了起始时间到结束时间内,规定报警区域的报警历史查询。
Private Sub EndDTPicker_Change()dt = EndDTPickerdt = Format(dt, "yyyy-mm-dd")tt = EndTTPicker.Hour & ":" & EndTTPicker.minute & ":" & EndTTPicker.secondtt = Format(tt, "hh:mm:ss")EndTime = dt & " " & ttEnd SubPrivate Sub EndTTPicker_Change()dt = EndDTPickerdt = Format(dt, "yyyy-mm-dd")tt = EndTTPicker.Hour & ":" & EndTTPicker.minute & ":" & EndTTPicker.secondtt = Format(tt, "hh:mm:ss")EndTime = dt & " " & ttEnd Sub10Private Sub StartDTPicker_Change()dt = StartDTPickerdt = Format(dt, "yyyy-mm-dd")tt = StartTTPicker.Hour & ":" & StartTTPicker.minute & ":" & StartTTPicker.secondtt = Format(tt, "hh:mm:ss")StartTime = dt & " " & ttEnd SubPrivate Sub StartTTPicker_Change()dt = StartDTPickerdt = Format(dt, "yyyy-mm-dd")tt = StartTTPicker.Hour & ":" & StartTTPicker.minute & ":" & StartTTPicker.secondtt = Format(tt, "hh:mm:ss")StartTime = dt & " " & ttEnd Sub后面四段为起始时间和结束时间的设置。