Allgemeiner Treiber

Der Allgemeine Treiber ist eine Sammlung von Klassen, welche die Funktionalität abdeckt, die jeder Treiber in WinCC OA enthalten sollte. Außerdem definiert er eine Schnittstelle zum hardwarespezifischen Teil. Der Allgemeine Treiber enthält folgende Funktionalität:

  • Initialisierung des Datenpunkttyp- und Datenpunktcontainers

  • Umwandlung von internen Datenpunktnamen auf DpIdentifier (über Data-Manager)

Hinweis

Die Umwandlung eines DpIdentifiers in einen String bei unbekanntem DP liefert die Nummer des DpIdentfiers.

  • Anmeldung beim Event-Manager für die Datenpunkte (bzw. Peripherieadressen), die auf Ausgang parametriert sind

  • Anmeldung bei Event-Manager für treiberinterne Datenpunkte

  • Zuordnung von Peripherieadressen auf Hardwareadressen und umgekehrt

  • Connect-Mechanismus (Event-Manager meldet sich für Attribute beim Treiber an)

  • Request-Behandlung (Behandlung von Abfragen der Attribute jener Configs, die vom Treiber verwaltet werden.)

  • Polling (Zyklische Abfragen von Eingangswerten.)

  • Transformation (HW-Datenformate auf WinCC OA Datenformate und umgekehrt)

  • Befehls-, Meldeumrechnung und Glättung

  • Reconnect bei Ausfall des Event-Manager

  • Überwachung der Verbindung(en) zu Hardwarekomponenten (Alive-Mechanismus)

Diese Funktionalität wird soweit als möglich über virtuelle Funktionen so implementiert, dass durch Ableiten einer eigenen Klasse und Definition eigener Funktionen die Bearbeitung modifiziert werden kann. Dabei sollten natürlich nur die Sonderfälle behandelt werden und im Normalfall die Methoden der Basisklasse zur Bearbeitung aufgerufen werden.

Das (Software-)Interface zur Hardware wurde als leere Klasse implementiert, die naturgemäß für jeden realen Treiber abgeleitet und implementiert werden muss (HWService!).

Hinweis

Werden mehr als drei Treiber verwendet und somit neue Datenpunkte vom Typ _DriverCommon angelegt, so müssen diese auch in der Config-Datei config.redu berücksichtigt werden!

Ablauf

Der allgemeine Treiber durchläuft folgende Phasen (diese entsprechen den verwendeten Routinen):

  • init()
  • connectToData()
  • HWService.initialize()
  • connectToEvent()
  • HWService.start()
  • mainLoop()
  • HWService.stop()

Nach dem Start werden die verschiedenen Treibermodule initialisiert (mittels init()). Die dafür vorhandenen Methoden sind:

  • install_DpContainer(): Initialisierung und Einbindung des Datenpunktcontainers

  • install_DpConfigManager(): Initialisierung des treiberinternen Konfig-Manager

  • install_HWMapper(): Installiert die Zuordnungstabelle zwischen Hardwareobjekten und Datenpunkten

  • install_HWService(): Der HWServicehandler ist die Schnittstelle zur Hardware und enthält alle Methoden zur Kommunikation mit der Hardware. Dieser Teil wird immer abgeleitet.

    • install_PollGroupList(): Verwaltung der zyklisch abzufragenden Datenpunkte mittels Pollgruppen.

  • install_PollList(): Verwaltung der zyklisch abzufragenden Datenpunkte mit Poll-Liste. Seit 3.0 nur mehr zwecks Kompatibilität mit dem alten Pollmodus nötig.

    • install_IOTransCont(): Verwaltung der Transaktionen von I/O Adressen.

  • set_DpConfigInitList(): setzt Zeiger auf Liste der Konfigtypen, die der Datenmanager nach dem Verbindungsaufbau schicken soll.

Nach dieser Initialisierung wird die Verbindung mit dem Data-Manager aufgebaut (connectToData()) und die Konfigs des Treibers vom Data-Manager geschickt. Dann wird das HWService-Objekt initialisiert (HWService.initialize()).Die Verbindung mit dem Event-Manager wird aufgenommen (connectToEvent()). Die Kommunikation des hardwarespezifischen Treiberteils wird gestartet (HWService.start()). Meist wird dabei auch bereits die Kommunikation mit der Peripherie aufgenommen. Dann läuft der Treiber in einer Schleife, in der er auf Messages wartet und prüft, ob Datenpunkte der Peripherie zu pollen sind und ruft zyklisch eine Arbeitsprozedur (workProc()) des HWService-Objektes auf, die von der Peripherie ankommende Daten behandelt und verarbeitet, sowie eventuell benötigte Antworten schickt. Messages, die interne Datenpunkte des Treibers betreffen, werden hierbei an das HWService-Objekt weitergereicht.

Ist irgendeine Peripherie-Adresse auf Polling eingestellt, wird zu den parametrierten Zeitpunkten HWService::singleQuery() aufgerufen, um den Wert abzufragen. Darüber hinaus werden in der HWService::workProc() die spontanen Benachrichtigungen verarbeitet. Die Verarbeitung von Wertemeldungen im HWService-Objekt erfolgt durch Aufruf der Funktion toDp() des DrvManagers. Diese nimmt ein HardwareObjekt entgegen, führt gegebenenfalls einen low-level-alt-neu-Vergleich durch (parametrierbar, basiert auf einem byteweisen Vergleich der Datenpuffer des HardwareObjekts), wandelt es in ein WinCC OA internes Datenformat um (mittels geeigneter datenformatabhängiger Transformation), führt gegebenenfalls Umrechnung und Glättung durch und sendet es (falls es nicht in den vorigen Schritten weggeglättet wurde) an den Event-Manager.

In Befehlsrichtung sorgt die Funktion toHW() für die Umformung von WinCC OA Datenpunkten in Hardwareobjekte, die dann von der Methode HWService::writeDate() des HWServicehandlers an die Peripherie verschickt werden. Daten, die vom Kommunikationsprotokoll als Einheit behandelt werden (diese gehören meist auch logisch zusammen), müssen auch als Gruppe parametriert werden (im Konfig _address). Diese werden dann vom allgemeinen Treiber auch automatisch als Gruppe angemeldet, wodurch bei jeder Datenänderung durch einen Benutzer der Eventmanager die ganze Gruppe gemeinsam an den Treiber schickt. Dieser stellt die Daten bereits in der Routine toHW() zu einem Paket zusammen und sie werden als einzelnes Hardwareobjekt an writeData() übergeben.

Vor Beenden des Treibers wird noch die Funktion HWService.stop() ausgeführt, die für einen geregelten Verbindungsabbau zur Peripherie sorgt.

Kapitel Beschreibung
Allgemeiner Treiber Allgemeines und Links zu den Kapiteln.
Klassen Einleitung zu den Klassen.
DrvManager Der DrvManager ist die Manager-Klasse des Treibers. Sie ist ihrerseits von der Basis-Klasse Manager abgeleitet.
DrvRsce Die Klasse DrvRsrce stellt das Interface zu den Ressourcen (der Konfigurationsdatei) dar.
DrvDpCont Diese Klasse - vom DpContainer abgeleitet - implementiert die Besonderheiten des Treiber-Datenpunktcontainers wie z.B. Umrechnungs- oder Glättungskonfigs, die auch an Knoten im Datenpunkt definiert werden können und für darunterliegende Elemente gelten.
DrvDpConfMan DrvDpConfMan ist ein Manager für die Configs des Treibers.
HWMapper Diese Klasse dient der Abbildung von Peripherie auf Hardware-Adressen und umgekehrt.
Transformation Transformationen beschreiben den Zusammenhang zwischen Hardwareobjekt und der Darstellung in WinCC OA .
HWMapDpPa Diese Klasse stellt die Verbindung zwischen Peripherie-Adressen-Config und DpIdentifier her.
HWObject HWObject ist die Basisklasse für ein Hardware-Objekt.
HWService Diese Klasse beinhaltet das Interface zwischen Allgemeinem Treiber und Hardware-spezifischem Teil.
DrvAlive Bildet die Basisklasse für die Implementierung eines Alive-Mechanismus für eine physikalische Verbindung.
PollGroupList Ist eine dynamische Liste von Pollgruppen, die die zu pollenden Adressen enthalten. Die Pollgruppenliste ist nach dem Pollzeitpunkt sortiert.
PollGroup Sind die einzelnen Einträge der PollGroupList.
Implementation Bei der Implementierung eines eigenen Treibers müssen neue Klassen, von den im allgemeinen Treiber definierten Klassen, abgeleitet werden.