IFIX2.6中报警区域及报警查询的设置和编程
系统例子是一锅炉的监控系统:
1.系统情况:五个锅炉站分散于最远距离在几公里的范围
2.监控系统配置:五个站由OMRON PLC(CQM1H-CPU21)采集现场的开关量报警信号;通过MOXA的NPORT以太网模块―――(光纤收发器―――光纤―――光纤收发器―――)交换机,送到上位监控作相应处理
3.配置:
311# 192.168.127.1 COM3 D11
67#  192.168.127.2  COM4  D21
82#  192.168.127.3  COM5  D31
227#  192.168.127.4  COM6  D41
9#    192.168.127.5  COM7  D51
4.
一、系统配置
1.数据库中,在建立的报警采集数据中加入域名,可以是文字表示:在变量的报警扩展域的报警域1中添加;
2.在系统配置中SCU-FIX:
启用 Alarm Summary Service。使用公用区域用于所有服务;
启用 Alarm file Service。(用于报警总览和查询表格)
报警区域:A~E
格式:日期=8    时间=16    报警扩展1=15    描述=50    数值=8
      消息长度=132  (表格顺序)
高级设置:公共格式:日期=8    时间=10    节点=10    标签名=30
报警类型=9    数值=13    单位=4      描述=39
消息长度=132
    操作员消息:A~E
    列队设置:报警一览列队:500
              文件列队:300
              历史列队:100
3.在报警查询中运用“报警总览”控件的各属性,由VBA编辑脚本实现所要求的功能
二、功能
1.报警声的屏蔽与取消控制
按键:按一下屏蔽报警音响;再按一下,恢复报警音响
按键外观特性:Fix32.FIX.sound_stop.F_CV的真/伪:
=1 屏蔽报警音响
=0 支持报警音响 (同时闪烁)
脚本编辑:Toggledigitalpoint "Fix32.FIX.sound_stop.F_CV"
报警音乐由WIN中选择COPY到:timeout on t2 timer\Dynamics\ringin.wav
2.报警确认
全部报警确认:按键脚本: AlarmSummaryOCX2.AckAllAlarms
选择报警确认:按键脚本:
Dim sNode As String, sTag As String, boolTagSelected As Boolean
boolTagSelected = AlarmSummaryOCX2.GetSelectedNodeTag(sNode, sTag)
If boolTagSelected Then AlarmSummaryOCX2.AckAlarm sNode, stag
未确认的分域(C)报警数:DATALINK动态特性:
属性名CAPTION 的数据源:Fix32.FIX.CALARM_SUM.F_CV
      SIM Simulation Driver  C:C:UNACK
3.报警音响的再次触发:报警确认后,如果报警仍存在,则数秒后报警声将再次触发;如果又出现报警,则系统自动支持音响
Dim TTT1 As Long
Dim j1 As Integer
Private Sub FixTimer3_OnTimeOut(ByVal lTimerId As Long)
If Fix32.Fix.alarm_sum > 0 Then 只要有报警出现
If Fix32.Fix.sound_stop.F_CV = 1 Then
      TTT1 = mciExecute("play " + "D:\Dynamics\ringin.wav")
    End If
  If Fix32.Fix.picture_stop.F_CV = 1 Then
      openpicture "f4"  ' 打开报警总览画面。
    End If
  j1 = j1 + 1
If j1 > 50 Then  ' 确认报警仍未消除后数秒。
      j1 = 0
      Fix32.Fix.picture_stop.F_CV = 1
    End If
Else
Fix32.Fix.sound_stop.F_CV = 1
Fix32.Fix.picture_stop.F_CV = 1
End If
End Sub
4.报警查询
查询时期:创建日期的选择,插入OLE对象:年=txtyear,月= txtmonth,
日=txtday以及相关的选择按钮spbyear spbmonthspbday
编辑角本:
Private Sub spbyear_Change()
txtyear.Value = spbyear.Value & "年"
End Sub
Private Sub spbmonth_Change()
txtmonth.Value = spbmonth.Value & "月"
End Sub
Private Sub spbday_Change()
txtday.Value = spbday.Value & "日"
End Sub
查询显示:命令键=CommandButton1
Private Sub CommandButton1_Click()
Dim MyChar, TextLine As String
Dim myear As String
Dim mmonth As String
Dim mday As String
Dim mdate As String
Dim fixok, fixok1 As Integer
On Error GoTo ErrorHandler
mday = Right("0" & spbday.Value, 2)
mmonth = Right("0" & spbmonth.Value, 2)
myear = Right(spbyear.Value, 2)
mdate = "D:\Dynamics\ALM\" & myear & mmonth & mday & ".alm"
MyChar = ""
On Error GoTo ERRORHANDLE
 
Open mdate For Input As #2      ' 打开输入文件。
Do While Not EOF(2)  ' 循环至文件尾。
    Line Input #2, TextLine  ' 读入一行数据并将其赋予某变量。
    fixok = InStr(1, TextLine, "227#锅炉站", vbTextCompare)
    fixok1 = InStr(1, TextLine, "", vbTextCompare)
    If fixok > 0 And fixok1 = 0 Then
      MyChar = MyChar + TextLine + Chr(13) + Chr(10) ' 读入一个字符。        End If
  Loop
  Close #2  ' 关闭文件。
  almlist.Text = MyChar
  MyChar = ""
Exit Sub
  ErrorHandler:
ERRORHANDLE:
    MsgBox ("所选日期无数据!")
End Sub
5.通讯监测 作文本=Fix32.FIX.COM_67.F_CV(对应67#站) SIM100:0
=0为通讯失败 红/闪烁
=1为通讯正常 绿
脚本编辑
Private Sub FixTimer4_OnTimeOut(ByVal lTimerId As Long)
On Error GoTo ERR2
If Fix32.Fix.B000.F_CV = 1 Or Fix32.Fix.B000.F_CV = 0 Then
    Fix32.Fix.COM_67.F_CV = 1 ‘从PLC采集的量不是空或?表示通讯OK
Else
ERR2: Fix32.Fix.COM_67.F_CV = 0
End If
End Sub
6.时间调度:FixTimer3和 FixTimer4,建立时钟作上述监测,连续触发;
间隔:FixTimer3=3秒  FixTimer4=2秒
三、IFIX制作
1、“时间查询”的OLE对象
工具栏中插入OLE对象:MICROSOFT FORMS 2.0 TEXTBOX
-----分别表示时间:年,月,日
                            MICROSOFT SCROLLBAR CONTROL V6.0
                            -----作上下翻转选择键标
2、报警变量的设置 
显示...的数目
使用SYSTEM标签...
SIM地址...
区域报警计数器...
区域“area.”已确认的报警
System.A_AA%
C:area:ACK或C:AA%
area.A_AREA_ACK或area.F_AREA_ACK
区域“area.”未确认的报警
System.A_UA%
C:area:UNACK或  C:UA%
area.A_AREA_UNACK或area.F_AREA_UNACK  area.A_CV或area.F_CV
区域“area.”中的报警。
不可用
C:area:TOT
area.A_AREA_TOT或area.F_AREA_TOT
区域“area.”中高优先级报警
不可用
C:area:TOTHI
area.A_AREA_TOTHI或area.F_AREA_TOTHI
区域“area.”中的中优先级报警
不可用
C:area:TOTMED
area.A_AREA_TOTMED或area.F_AREA_TOTMED
区域“area.”中的低优先级报警
不可用
C:area:TOTLO
area.A_AREA_TOTLO或area.F_AREA_TOTLO
区域“area.”中已确认的高优先级报警。
不可用
C:area:ACKHI
area.A_AREA_ACKHI或area.F_AREA_ACKHI
区域“area.”中已确认的中优先级报警。
不可用
C:area:ACKMED
area.A_AREA_ACKMED或area.F_AREA_ACKMED
区域“area.”中已确认的低优先级报警。
不可用
C:area:ACKLO
area.A_AREA_ACKLO
区域“area.”中未确认的高优先级报警。
不可用
C:area:UNACKHI
area.A_AREA_UNACKHI
区域“area.”中未确认的中优先级报警。
不可用
C:area:UNACKMED
area.A_AREA_UNACKMED
区域“area.”中未确认的低优先级报警。
不可用
C:area:UNACKLO
area.A_AREA_UNACKLO
3、报警总和。区域和节点运行时的总和报警计数器。