Beispiel für das Einfügen einer benutzerdefinierten Spalte

Dieses Kapitel beschreibt, wie Sie eine benutzerdefinierte Spalte zu dem Alarm- und Ereignisschirm hinzufügen und wie Sie eine DLL, die einen Wert in der benutzerdefinierten Spalte anzeigt, implementieren.

In diesem Beispiel werden die Inhalte der Spalten "Richtung" und "Quittierungszustand" kombiniert. Die benutzerdefinierte Spalte soll den Text "Alarm aktiv - nicht quittiert", "Alarm aktiv - quittiert" usw. zeigen.

Um die Spalte hinzuzufügen, gehen Sie wie folgt vor:

  1. Installieren Sie zuerst die WinCC OA API, falls die noch nicht installiert wurde (siehe API-Installation).

  2. Installieren Sie die “TabUtilEx.dll” in <project-path>/bin. Ein Beispiel dieser DLL finden Sie im API-Verzeichnis unter <wincc_oa_path>/api/SampleTabUtil.

VORSICHT:

Beachten Sie, dass beim Umstieg von der WinCC OA Version 3.0 auf 3.01 und Verwendung von eigenen Funktionen, die TabUtilEx.dll neu kompiliert werden muss. (Siehe auch Kapitel Beispiel für das Einfügen einer benutzerdefinierten Spalte)

  1. Für das nachfolgende Beispiel wird eine Katalog Datei "MYAES.cat" benötigt. Diese Datei mit entsprechenden Beispieleinträgen befindet sich unter <wincc_oa_path>/api/SampleTabUtil und muss in das /msg Verzeichnis des Projektes kopiert werden.

  2. Implementieren Sie die Funktion in der SampleTabUtil.cxx, die die zwei Funktionen verbindet. Die Funktion erwartet die folgenden zwei Argumente:

_ack_state = Quittierungszustand einer Meldung

und

_direction = Melderichtung. Der folgende Code zeigt die implementierte Funktion:

TABUTIL_EXPORT int tabUtilTranslateDirection( const DynVar &in, DynVar &out)
// Argumente, die an die Funktion weitergegeben werden
//Rückgabewert der Funktion
{
//Lokale Daten
IntegerVar *pAckStateValue; //Das erste Argument ist _ack_state
BitVar *pDirectionBit; //Das zweite Argument ist _direction
int t; /* Zähler, der die, an diese Funktion weitergegebenen Argumente durchgeht */
char szBuffer[ 100 ]; //Buffer, der die Antwort formatiert
CharString strActive; /* Der Text, der angezeigt wird wenn ein Element aktiv/inaktiv ist */
CharString strAcked; /* Der Text, der angezeigt wird wenn ein Element quittiert wird */
bool bFound;
//Es werden 2 gültige Werte erwartet
/* Versichern, dass gültige Zeiger mit gültigem Datentyp zurückgegeben werden */
for( t=1; t <= 2; t++)
{
  if( !in[t] ) //beenden wenn es keinen gültigen Pointer gibt
    return -1;
  if( in[t]->isA() != ANYTYPE_VAR ) /* Alle Argumente sollten ANYTYPE_VAR sein */
    return -1; //nur beenden
}
/* Konvertiere das erste Argument in ein INTEGER_VAR. Das wird _ack_state sein */
if( ((AnyTypeVar *)in[1])->getVar()->convert( INTEGER_VAR, (Variable *&) pAckStateValue ) != Variable::OK )
{
  return -1;
}
/* Konvertiere das zweite Argument in ein BIT_VAR. Dies ist die "KAM" oder "GING"-Richtung */
if( ((AnyTypeVar *)in[2])->getVar()->convert( BIT_VAR, (Variable *&) pDirectionBit ) != Variable::OK )
{
  /* Wenn die Konvertierung scheitert,müssen die vorher belegte Argumente gelöscht werden */
  delete pAckStateValue;
  return -1;
}
/* der richtige Text wird für "Aktiv/Inaktiv" und "Quittiert/Unquittiert" benötigt */
strActive = StrUtil::catgets("MYAES",(PVSSshort)*pDirectionBit ? "Aktiv" : "Inaktiv", bFound );
if( !bFound )
 strActive = "Catalogue file ?";
strAcked = StrUtil::catgets("MYAES",(PVSSshort)*pAckStateValue ? "Quittiert" : "Unquittiert", bFound );
if( !bFound )
  strAcked = "Catalogue file ?";
/* Formatiere den aktuellen String, den wir im Alarm- und Ereignisschirm sehen wollen */
sprintf( szBuffer, "%s - %s",(const char *)strActive, (const char *) strAcked );
//Belege den String, der zurückgegeben wird
 out.append( new AnyTypeVar (new TextVar( szBuffer )));
 //Befreie beliebige belegte Variablen.
 delete pDirectionBit;
 delete pAckStateValue;
   return 1;
}

Der fett gedruckte Codeteil zeigt wie die zwei Argumente verbunden werden und in einem String zurückgegeben werden.

  1. Eine benutzerdefinierte Spalte muss erstellt werden. Die Spalte ruft z.B. die Funktion “tabUtilTranslateDirection”, die in der DLL dargestellt wird.

  2. Registrieren Sie die DLL-Funktion (C++). Öffnen Sie die Tabellenkonfiguration des Alarm- und Alarmschirms über System Management -> AES Einst. Öffnen Sie hier die Alarme-Registerkarte und drücken Sie die "Funktionen konfigurieren"-Schaltfläche. Geben Sie hier den Funktionsnamen "tabUtilTranslateDirection" ein. Wählen Sie die Argumente "_alert_hdl.._ack_state" und "_alert_hdl..._direction" für die Funktion über die "..."-Schaltfläche.

Abbildung 1. Funktionen konfigurieren
  1. Fügen Sie eine neue Spalte über die Schaltfläche ein. Doppelklicken Sie auf die neue Spalte. Das Panel Spaltenkonfiguration wird geöffnet.

Abbildung 2. Spaltenkonfiguration

Selektieren API Funktionen und Ihre Funktion tabUtilTranslateDirection aus der Combobox. Selektieren Sie doAcknowledge aus der Auf Klick()-Combobox. Das bedeutet, dass ein Alarm über Klick auf die Spalte quittiert wird.

  1. Erstellen Sie eine neue Konfiguration"MyAES" über System Management -> Einstellungen -> AES Einst da die Standardkonfiguration nicht des Alarm- und Ereignisschirms nicht konfiguriert werden soll.

  2. Die neue Konfiguration erstellen Sie über die Neue Konfiguration-Schaltfläche auf der Registerkarte Allgemeine Einstellungen.

  3. Setzen Sie die MyAES-Konfiguration als default und klicken Sie Konfiguration abspeichern.

  4. Wählen Sie die Checkbox "Aktiv" für die untere Tabelle ab da das AES-Panel nur Alarme anzeigen sollte.

Abbildung 3. MyAES-Schirmkonfiguration
  1. Klicken Sie auf die "Eigenschaften der oberen Tabelle"-Schaltfläche um neue Eigenschaften zu definieren. Im Eigenschaften-Panel klicken Sie die Eigenschaft neu anlegen-Schaltfläche und definieren Sie einen Namen für Ihre Eigenschaften.

Abbildung 4. Eigenschaftenpanel
  1. Setzen Sie die Spalte sichtbar über die Sichtbarkeit-Registerkarte des Eigenschaftenpanels.

  2. Speichern Sie die Eigenschaften über die Eigenschaft speichern-Schaltfläche (siehe Abbildung oberhalb.

Anmerkung:

Sie können z.B. eine Schaltfläche, welche Ihre eigene Schirmkonfiguration anstatt der Default-Konfiguration über die openAES()-Funktion öffnet, in Ihre Applikation integrieren.

  1. Öffnen Sie den Alarmschirm über System Management ->Diagnostik -> Alarmschirm

  2. Generieren Sie einen Alarm. Der Quittierungszustand und Melderichtung werden in der neuen Spalte angezeigt.

Abbildung 5. AESchirm und die neue Spalte