Aktive Alarme in einer benutzerdefinierten Listenansicht

Das folgende Beispiel zeigt, wie man eine benutzerdefinierte Listenansicht, die aktive Alarme in Visual Basic anzeigt, für den TcEventLogger erstellt.

Die folgenden Schritte müssen ausgeführt werden, um das Beispiel zu erstellen.

  1. Erstellen Sie ein Standard EXE Projekt mit einem Formular.
  2. Fügen Sie die Microsoft Standardsteuerelemente 6 in die Liste der Steuerelemente ein.
  3. Fügen Sie die Beckhoff TcEventLogger Bibliothek zu der Referenzliste hinzu.
  4. Fügen Sie ein Listenansicht ActiveX Steuerelement in das Formular ein.
  5. Benennen Sie die Listenansicht in lvwAlarm um.
  6. Kopieren Sie den folgenden Code in das Formular.
Option Explicit
Dim WithEvents objEventLogger As TcEventLog

'------------------------------------------------------
' this method is called when the form is loaded
'
Private Sub Form_Load()
  Set objEventLogger = New TcEventLog
  Call initListView
  Call DisplayActiveAlarms
End Sub

'------------------------------------------------------
' this method is called when a new alarm is issued
'
Private Sub objEventLogger_OnNewEvent(ByVal evtObj As Object)
  ' cast to TcEvent interface
  Dim objEvent As TcEvent
  Set objEvent = evtObj
  ' get the key
  Dim newKey As String
  newKey = GetKeyFromIDs(objEvent.SrcId, objEvent.Id)
  'get the Event Message Text
  Dim strMessage As String
  strMessage = objEvent.GetMsgString(1033)
  'add the Message to the listview
  Dim objListItem As ListItem
  Set objListItem = lvwAlarm.ListItems.Add(, newKey, strMessage & objEvent.Date)
End Sub

'------------------------------------------------------
' this method is called when a alarm is reset
'
Private Sub objEventLogger_OnResetEvent(ByVal evtObj As Object)
  ' cast to TcEvent interface
  Dim objEvent As TcEvent
  Set objEvent = evtObj
  ' get the key
  Dim newKey As String
  newKey = GetKeyFromIDs(objEvent.SrcId, objEvent.Id)
  'remove the event from the listview
  Call lvwAlarm.ListItems.Remove(newKey)
End Sub

'------------------------------------------------------
' initalize the list view
'
Sub initListView()
  lvwAlarm.View = lvwReport
  lvwAlarm.GridLines = True
  'init the Header
  Dim objColHdr As ColumnHeaders
  Set objColHdr = lvwAlarm.ColumnHeaders
  Debug.Assert Not objColHdr Is Nothing
  Call objColHdr.Clear
  Call objColHdr.Add(1, "Message", "Message", 5000)
End Sub

'------------------------------------------------------
' display all active alarms
'
Private Sub DisplayActiveAlarms()
 'clear the listview
 Call lvwAlarm.ListItems.Clear

 Debug.Assert Not objEventLogger Is Nothing

 Dim objEvent As TcEvent
 'get the number of active Events
 For Each objEvent In objEventLogger.EnumActiveEventsEx
  If (Not objEvent Is Nothing) Then
   'here we get one Event from the collection
   Dim strMessage As String
   'get the Event Message Text
   strMessage = objEvent.GetMsgString(1033)
   'get the key
   Dim newKey As String
   newKey = GetKeyFromIDs(objEvent.SrcId, objEvent.Id)
   'add the Message to the listview
   Dim objListItem As ListItem
   Set objListItem = lvwAlarm.ListItems.Add(, newKey, strMessage & objEvent.Date)
  End If
 Next
End Sub

'------------------------------------------------------
' create unique key from event group and event id
'
Public Function GetKeyFromIDs(ByVal SourceId As Long, ByVal EventId As Long) As String
  GetKeyFromIDs = SourceId & "-" & EventId
End Function

Beim Aufruf des Formulars wird eine Referenz zu dem einzigen EventLogger erzeugt, selbst dann wenn wir einen neuen Operator verwenden. Dann wird die Listenansicht initialisiert. Die Listenansicht enthält eine Spalte in der die Ereignismeldung in Englisch angezeigt wird. Die Methode DisplayActiveAlarms holt die Liste der aktiven Alarme vom EventLogger und zeigt sie anschließend an. Wenn ein neuer Alarm ausgegeben wird oder bestehende Alarme zurückgesetzt werden, fügt die Ereignisfunktion OnNewEvent Ereignisse in die Listenansicht ein und die Ereignisfunktion OnResetEvent entfernt Ereignisse aus der Listenansicht. Die Methode GetKeyFromIDs erzeugt einen einmaligen Schlüssel von der Ereignisgruppe und der Ereignis-ID.

Die benutzerdefinierte Ereignisansicht unterstützt nur Ereignisse, die nicht quittiert werden müssen. Um die benutzerdefinierte Ereignisansicht für quittierungspflichtige Alarme verwenden zu können, müssen die Ereignisse ITcEventLogEvents::OnSignalEvent und ITcEventLogEvents::OnConfirmEvent angelegt werden.

 

Sprache / IDE

Beispielprogram auspacken

Visual Basic 6.0

Sample02.zip