当前位置:文档之家› IFix3.5报警历史的设置与查询

IFix3.5报警历史的设置与查询

IFix3.5报警历史的设置与查询
IFix3.5报警历史的设置与查询

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.4

5:找到开始创建的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, dt

Dim StartTime, EndTime As String

Private Sub CFixPicture_Initialize()

With alarmArea

.AddItem "BATCH_PRODUCTION"

.AddItem "Discrete_Mfg"

.AddItem "Pharm_Process"

.AddItem "Waste_Water"

.AddItem "ALL"

.Text = "ALL"

End With

rdate = Date

rdate = Format(rdate, "yyyy-mm-dd")

rdate = rdate & " 00:00:00"

StartDTPicker = rdate

StartDTPicker1 = rdate

rdate1 = Date

rdate1 = Format(rdate1, "yyyy-mm-dd")

tt = Time

tt = Format(tt, "hh:mm:ss")

rdate1 = rdate1 & " " & tt

EndDTPicker = rdate1

EndTTPicker = Time

EndDTPicker1 = rdate1

EndTTPicker1 = Time

StartTime = rdate

EndTime = rdate1

End Sub

CFixPicture_Initialize为初始化画面时的事件,在这里对alarmArea进行初始化,添加需要的报警区域;对起始时间进行设置,起始时间设置为当前日期的零点,结束日期设置为当前日期时间。

Private Sub cmdOK_Click()

Dim strQueryAvg, strQueryAvg1, strQueryAvg2, strQueryAvg3 As String

Dim str As String

Dim Querytime As String

str = ""

8

If alarmArea.Text <> "ALL" Then

str = alarmArea.Text

End If

strQueryAvg = "SELECT FIXALARMS.ALM_DATEIN,FIXALARMS.ALM_TIMEIN,FIXALARMS.ALM_DATELAS

T,FIXALARMS.ALM_TIMELAST,FIXALARMS.ALM_TAGNAME,FIXALARMS.ALM_D

ESCR, 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 & strQueryAvg3

Dim i, j As Integer

Dim cnADO As New ADODB.Connection

Dim rsADO As Recordset

Set cnADO = New ADODB.Connection

cnADO.ConnectionString = "DSN = hisdata; UID = sa; PWD = ;"

cnADO.Open "hisdata", "sa", ""

Set rsADO = New ADODB.Recordset

rsADO.CursorLocation = adUseClient

rsADO.Open strQueryAvg, cnADO, adOpenDynamic, adLockUnspecified, -1

If rsADO.RecordCount > 5000 Then

MsgBox "查询结果超过5000条,请缩小查询时间范围"

Exit Sub

End If

Set Grid1.DataSource = rsADO

Set cnADO = Nothing

With 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) = 1200

End With

For i = 1 To Grid1.Rows - 1

Grid1.TextMatrix(i, 0) = i

Next

End Sub

cmdOK_Click启动查询,并将查询的结果显示在Grid1上。在这里注意的是SQL语句,主要用到了SELECT,WHERE,LIKE,BETWEEN,AND,ORDER BY等SQL查询语句。

实现了起始时间到结束时间内,规定报警区域的报警历史查询。

Private Sub EndDTPicker_Change()

dt = EndDTPicker

dt = Format(dt, "yyyy-mm-dd")

tt = EndTTPicker.Hour & ":" & EndTTPicker.minute & ":" & EndTTPicker.second

tt = Format(tt, "hh:mm:ss")

EndTime = dt & " " & tt

End Sub

Private Sub EndTTPicker_Change()

dt = EndDTPicker

dt = Format(dt, "yyyy-mm-dd")

tt = EndTTPicker.Hour & ":" & EndTTPicker.minute & ":" & EndTTPicker.second

tt = Format(tt, "hh:mm:ss")

EndTime = dt & " " & tt

End Sub

10

Private Sub StartDTPicker_Change()

dt = StartDTPicker

dt = Format(dt, "yyyy-mm-dd")

tt = StartTTPicker.Hour & ":" & StartTTPicker.minute & ":" & StartTTPicker.second

tt = Format(tt, "hh:mm:ss")

StartTime = dt & " " & tt

End Sub

Private Sub StartTTPicker_Change()

dt = StartDTPicker

dt = Format(dt, "yyyy-mm-dd")

tt = StartTTPicker.Hour & ":" & StartTTPicker.minute & ":" & StartTTPicker.second

tt = Format(tt, "hh:mm:ss")

StartTime = dt & " " & tt

End Sub

后面四段为起始时间和结束时间的设置。

第三节如何加快查询的效率

一:设置主键。

二:SQL查询限制最大查询数目。

第四节如何在SQL SERVER中查询

与采用ACCESS数据库的方法一样,在SQL SERVER中建立数据库后,首先通过ODBC建立DSN,然后一样的步骤进行报警设置,在第六步中选择SQL Server即可。

11

相关主题
文本预览
相关文档 最新文档