Plugin: Profinet (GInsPNIODevice)

How to set up the Profinet plugin for Q.station X PN

 

Das Plugin “GInsPNIODevice” ist die Implementierung eines “PROFINET IO Device” für die “Q.station”.

Mit Hilfe dieses Plugins können die aktuellen Werte von Variablen an einen “PROFINET IO Controller” innerhalb eines “PROFINET Netzwerkes” übertragen sowie die Werte von Variablen durch ein “PROFINET IO Controller” geschrieben werden.

Technische Daten

  • PROFINET Geräteklasse: “IO Device”
    • Herstellerkennung (Vendor ID): 0x04A2 (1186)
    • Gerätekennung (Device ID): 0x00AF (175)
  • PROFINET Spezifikation: V2.3 Edition 2, Maintenance Update 3 (Ed2 MU3)
  • PROFINET “Conformance Class (CC)”: “CC-A”
  • PROFINET Netzlastklasse (Net load class): “I”
  • PROFINET Profil: nein
  • Funktionen und Protokolle
    • zyklischer Datenaustausch (RT): ja
    • isochroner Datenaustausch (IRT): nein
    • azyklische Parameterdaten (Record Data CR): ja
    • Geräteidentifizierung (I&M 0): ja
    • erweiterte Geräteidentifizierung (I&M 1-5): ja
    • Gerätediagnose: nein
    • Alarme: nein
    • Topologieinformation (LLDP): ja
    • Simple Network Management Protocol (SNMP): ja
    • Discovery and Basic Configuration Protocol (DCP): ja
    • Link Layer Discovery Protocol (LLDP): ja
    • Dynamic Host Configuration Protocol (DHCP): nein
    • Media Redundancy Protocol (MRP): ja (Client)
    • Mehrfachzugriff auf Eingänge (Shared Input): nein
    • Aufteilung von Gerätefunktionen auf Steuerungen (Shared Device): nein
    • Konfigurationsänderung im Betrieb (Dynamic Reconfiguration, CiR): nein
    • Systemredundanz (SR-AR): nein
  • Zyklischer Datenaustausch
    • Anzahl zyklische Input-Daten: max. 1440 Byte (inkl. “IO Provider Status” und “IO Consumer Status”)
    • Anzahl zyklische Output-Daten: max. 1440 Byte (inkl. “IO Provider Status” und “IO Consumer Status”)
    • Anzahl Submodule: max. 255 (Slot 1..255)
    • Anzahl “Application Relationship (AR)”: 1
    • Anzahl “Communication Relationship (CR)”: nur 1 Input-CR und 1 Output-CR wird unterstützt
    • Zykluszeit für Aktualisierung der IO-Daten
      • min. 1ms (:!: unter bestimmten einzuhaltenden Bedingungen)
      • max. 1s
  • Physisches Interface:
    • Ethernet-Controller mit 2 integrierten Switch-Port
    • Anschluss: 2x RJ45-Buchse (IP20)
    • Ethernet 100 MBit/s
    • Übertragungsmedium: Kupferkabel
    • Voll-Duplex: ja
    • Half-Duplex: nein; wird erkannt, ein Verbindungsaufbau wird jedoch abgelehnt
    • Auto Negoation: ja
    • Auto Crossover: ja

Voraussetzungen

  • Controller “Q.station-XB PN” (Type = 175011) oder “Q.station-XT PN” (Type = 175012)
    • Controller “Q.station-X” mit Erweiterungseinheit für Profinet (“PN”) mit Mini PCI Express Karte “CIFX 90E-RE\F” und Aufsteckschnittstelle für Ethernet
    • Controller “Q.station-X” Firmware “2.14 B10” oder neuer

Lieferumfang

  • Installationspaket “GInsPNIODevice” als ZIP-Archiv
  • Gerätebeschreibungsdatei für “Q.station” mit dazugehörigen Grafikdateien
    • Profinet IO GSDML files
    • "GSDML-V2.33-GINS-QSTATION-20181126.xml"
    • "GSDML-04A2-00AF-QSTATION.bmp"
    • "GSDML-04A2-00AF-QSTATION.ico"
    • Die Gerätebeschreibungsdatei muss - zusammen mit dem dazugehörigen Grafikdateien - dem verwendeten Konfigurationsprogram für den “PROFINET IO Controller” zu Verfügung gestellt und in den Gerätekatalog aufgenommen werden.

Installation

  • Das Installationspaket für das Plugin “GInsPNIODevice” wird als ZIP-Archiv bereitgestellt (z.B. "GInsPNIODevice##qstation-qa3-32_2.14.10.zip" für die “Q.station” mit FW-Version “V2.14 B10”).
  • Die Installation erfolgt mit Hilfe eines USB-Sticks:
    • ZIP-Archiv "GInsPNIODevice##qstation-qa3-32_x.xx.x.zip" entpacken und die enthaltenen Dateien auf eine leeren USB-Stick (Dateisystem “FAT32”) kopieren:
      • GInsPNIODevice.zip
      • autorun.sh
    • Den USB-Stick an einen der USB-Anschlüsse der “Q.station” stecken.
      Das Plugin “GInsPNIODevice” wird nun automatisch installiert und registriert.
      :!: Ein bereits installiertes Plugin “GInsPNIODevice” wird inklusive aller Konfigrationsdateien automatisch entfernt!
    • Zur Kontrolle kann die Datei “#actual.sta” aus dem Controller gelesen werden (FTP-Verbindung mit Benutzername “6” und Kennwort “6”).
      Wurde das Plugin erfolgreich installiert, dann befindet sich ein entsprechender Eintrag im Abschnitt “PLUGIN STATES:”; z.B.:
      PLUGIN STATES:
      Plugin 0: GInsPNIODevice Act: 1 Cycles: 15608555 Version: 0.1 Port: 1201

Start

Nach der Installation des Plugins wird dieses nur dann (automatisch) gestartet, wenn die Option “Plugins” für den Controller auf “activated” gesetzt ist!

  • Konfiguration der Option “Plugins” (hier für Konfigurationsprogramm “test.commander”)

  • Bearbeitung der Konfigurationsdatei “/gins/fs/config/@main_c.gcf”:
    Eintrag “PluginMode” in Sektion “[DEVICE]”
    [DEVICE]
    PluginMode=1

Funktionsweise

  • Die Werte der im Controller “Q.station” verfügbaren “Process Image Variablen (PI-Variablen)” werden in “Slots” und “Subslots” übertragen.
    • Es gibt “Input subslots” und “Output subslots”:
      • “Input subslot”: Input-Daten (Datenrichtung “PROFINET IO Device” ⇒ “PROFINET IO Controller”)
      • “Output sublot”: Output-Daten (Datenrichtung “PROFINET IO Controller” ⇒ “PROFINET IO Device”)
    • Die “Subslots” werden in “Slots” angeordnet:
      • “Input subslots” werden in “Input slots” angeordnet.
      • “Output subslots” werden in “Output slots” angeordnet.
  • Einem “Input subslot” kann eine PI-Variable mit Datennrichtung “INPUT” oder “INPUT/OUTPUT” zugeordnet werden.
    Es wird der Input-Wert der PI-Variablen gelesen und zum “PROFINET IO Controller” gesendet.
  • Einem “Output subslot” kann eine PI-Variable mit Datennrichtung “OUTPUT” oder “INPUT/OUTPUT” zugeordnet werden.
    Der vom “PROFINET IO Controller” gesendete Wert wird in den Output-Wert der PI-Variablen geschrieben.
  • Eine PI-Variable mit Datennrichtung “INPUT/OUTPUT” kann sowohl einem “Input slot” als auch einem “Output slot” zugeordnet werden.
    Somit ist es z.B. möglich, den aktuellen Wert einer “SetPoint”-Variable mit der Datennrichtung “Input & Output” an den “PROFINET IO Controller” zu übertragen und der “PROFINET IO Controller” kann wiederrum den Wert der “SetPoint”-Variable setzen.
  • Der Datentyp für ein Subslot wird automatisch an Hand des Datentyps der PI-Variablen ausgewählt; es ist keine implizite Datenkonvertierung möglich.
    Z.B.: Für eine PI-Variable mit dem Datentyp “SInt32” wird automatisch ein Subslot mit dem Datentyp “Integer32” konfiguriert.
  • Das tatsächliche Prozessdatenabbild (“Process data image”) ergibt sich - getrennt für Input- und Output-Daten - aus der Reihenfolge der “Slots” (Slotnummer) und aus der Reihenfolge der den “Subslots” (Subslotnummer) zugeordneten Variablen.
  • Die Größe des Prozessdatenabbilds ergibt sich - getrennt für Input- und Output-Daten - aus der Anzahl und dem Datentyp der Subslots.
    • Die maximale Größe eines Prozessdatenabbilds beträgt 1440 Byte: max. 1440 Byte für Input- und max. 1440 Byte für Output-Daten.
    • :!: In der maximale Größe von 1440 Byte sind die “IO Consumer Status” Bytes und “IO Provider Status” Bytes mit eingeschlossen!
    • :!: In der maximale Größe von 1440 Byte sind jeweils 4 Byte für das Interface (“Data Access Point (DAP)” und Ports) mit eingeschlossen!
    • Prozessdatenabbild für Input-Daten
      • 4 Bytes “Provider status” für das Interface (“Data Access Point (DAP)” und Ports)
      • + “Process data”: für jeden “Input subslot” die für den Datentyp notwendige Anzahl Bytes (1..8 Byte)
      • + “Provider status”: für jeden “Input subslot” 1 Byte
      • + “Consumer status”: für jeden “Output subslot” 1 Byte
    • Prozessdatenabbild für Output-Daten
      • 4 Bytes “Consumer status” für das Interface (“Data Access Point (DAP)” und Ports)
      • + “Consumer status”: für jeden “Input subslot” 1 Byte
      • + “Process data”: für jeden “Output subslot” die für den Datentyp notwendige Anzahl Bytes (1..8 Byte)
      • + “Provider status”: für jeden “Output subslot” 1 Byte
  • Beispiel:
    • Es werden nur Input-Daten und keine Output-Daten übertragen.
      Es könnten maximal 287 Variablen mit Datentyp “Float 32-Bit” übertragen werden.

Bedienung

  • Das Plugin “GInsPNIODevice” hat eine eigene XML-RPC-Schnittstelle “GInsPNIODevice/PluginAPI”.
  • Die Bedienung des Plugins erfolgt durch Aufruf der PluginAPI-Funktionen.
    Diese Aufrufe können mit dem Programm “GI.monitor” vorgenommen werden:

    GInsPNIODevice Plugin-API

Konfiguration

  • Ist beim Start des Plugins keine Konfigurationsdatei vorhanden, dann wird automatisch ein Konfiguration für das “PFORFINET IO Device” aus den im Controller vorhandenen PI-Variablen erstellt und abgespeichert.
    Diese “Standardkonfiguration” kann anschließend mit der Plugin-API Methode "Configure" bearbeitet und geändert werden.
    Mit Aufruf der Plugin-API Methode "ConfigureDefault" kann jederzeit eine neue “Standardkonfiguration” erstellt werden.

"Configure"

  • Mit Hilfe der Methode “Configure” wird die Funktionaltät des Plugins bezüglich “PROFINET IO” konfiguriert.
  • :!: Eine Änderung der Konfiguration wird erst nach Ausführung der Methoden “Stop” und anschließendem “Start” wirksam!
  • Die Konfiguration wird in einer XML-Datei im Installationsverzeichnis des Plugins nicht flüchtig gespeichert.
    • :!: Beim Entfernen oder bei erneuter Installation des Plugins wird eine vorhandene Konfigurationsdatei gelöscht; die gespeicherte Konfiguration geht verloren!
  • Slots und Subslots
    • Jedem Slot muss eine über alle Slots eindeutige Slotnummer (SlotNr = 1..255) zugewiesen werden.
    • Jedem Slot können Subslots durch Angabe von Variablennamen zugewiesen werden.
      Die Reihenfolge der Subslots und die Subslotummer(1..255) wird durch die Reihenfolge der Variablen bestimmt.
      Der Typ des Subslots wird automatisch an Hand des Datentyps der Variablen bestimmt.
    • :!: Wird einem Input-Slot eine Variable zugewiesen, welche nicht die Datenrichtung “INPUT” oder “INPUT/OUTPUT” hat, so wird diese Variable bei der Konfiguration nicht berücksichtigt; für diese Variable wird kein Input-Subslot konfiguriert!
    • :!: Wird einem Output-Slot eine Variable zugewiesen, welche nicht die Datenrichtung “OUTPUT” oder “INPUT/OUTPUT” hat, so wird diese Variable bei der Konfiguration nicht berücksichtigt; für diese Variable wird kein Output-Subslot konfiguriert!
  • Netzwerk
    • Stationsname
      • Die Angabe des “StationName” ist optional.
      • Wird kein Name für Station vergeben (leeres Feld), so wird der Name der Station automatisch gebildet:
        • “qstation-<SNR>”, SNR: Seriennummer des Controllers “Q.station” (6 Stellen)
        • z.B. “qstation-770849”
      • Wird ein Name für Station vergeben, so müssen folgende Regeln eingehalten werden:
        • 1 or more labels, separated by “.”
        • Total length is 1 to 240
        • Label length is 1 to 63
        • Labels consist of “a-z0-9-”
        • Labels do not start with “-”
        • Labels do not end with “-”
        • Labels do not use multiple concatenated “-”
        • The first label does not have the form “port-xyz” or “port-xyz-abcde” with a, b, c, d, e, x, y, z = 0…9, to avoid wrong similarity with the field “AliasName”
        • Station-names do not have the form a.b.c.d with a, b, c, d = 0…999
    • IP-Adresse
      • Die Angabe der “IPAddress” für das “PNIODevice” ist optional.
      • Wird keine IP-Adresse explizit vergeben, so wird dies mit “0.0.0.0” angegeben.
        In diesem Fall erfolgt die Vergabe der IP-Adresse für das “Profinet IO Device” durch den “Profinet IO Controller”.
    • Gateway
      • Die Angabe der IP-Adresse für das “Gateway” sind optional.
      • Wird keine IP-Adresse explizit vergeben, so wird dies mit “0.0.0.0” angegeben.
    • Subnetzmaske
      • Die Angabe der “SubnetMask” ist optional.
      • Wird keine Subnetzmaske explizit vergeben, so wird dies mit “0.0.0.0” angegeben.
  • Zykluszeit für die Aktualisierung der IO-Daten
    • Die Zykluszeit für die Aktualisierung der IO-Daten ist genau oder ein Vielfaches der Systemzykluszeit (“SystemCycleTime”) des Controllers, mindestens jedoch 1ms (1kHz).
    • Mit der Angabe eines Wertes größer als “1” für “SystemCycleCounter” kann die Zykluszeit für die Aktualisierung der IO-Daten “untersetzt” werden; die Zykluszeit ist dann “SystemCycleCounter * SystemCycleTime”.
    • :!: Es wird dringend empfohlen, die Einhaltung der eingestellten Zykluszeit für die Aktualisierung der IO-Daten nach jeder Änderung der Konfiguration des Controllers zu prüfen! Dazu kann u.a. des Loggingsystem für das Plugin hinzugezogen werden (siehe "Logging").
    • :!: Die Einhaltung einer Zykluszeit <10ms (>100Hz) ist an bestimmte Bedingungen geknüpft:
      • Gesamtauslastung des Controllers, welche durch zahlreiche Faktoren bestimmt wird; z.B.
        • Datentransfer zwischen Controller und PC (Transfer von Online-Daten oder Dateitransfer)
        • Datenlogging
        • Anzahl der aktiven Plugin's
      • Stabilität der Zeitsynchonisation
        • Stabilität des für die Zeitsynchonisation verwendeten Zeitsignals
  • Konfigurationsbeispiel
    • Slots und Subslots
      • Input-Slot mit Slotnummer “1” enthält 4 Subslots für die Variablen
        • “Timestamp”
        • “Variable 1”
        • “Vatiable 2”
        • “SetPointTest”
      • Input-Slot mit Slotnummer “2” enthält 1 Subslot für die Variable
        • Arithmetic_1“
      • Output-Slot mit Slotnummer “3” enthält 1 Subslot für die Variable
        • “SetPointTest”
    • Netzwerk
      • Es wird kein Stationsname angegeben; der Name der Station wird automatisch gebildet.
      • Es wird keine explizite IP-Adresse für das “PNIODevice” angegeben.
      • Es wird keine explizite IP-Adresse für “Gateway” angegeben.
      • Es wird keine explizite Subnetzmaske angegeben.
    • Zykluszeit für die Aktualisierung der IO-Daten
      • Die Zykluszeit für die Aktualisierung der Input- oder Output-Daten ist das Zehnfache der Systemzykluszeit (SystemCycleCounter = 10)

        Methode "Configure"

"ConfigureDefault"

  • Mit Hilfe der Methode “ConfigureDefault” wird eine Konfiguration aus allen im Controller vorhandenen PI-Variablen erstellt.
  • :!: Die Konfiguration wird erst nach Ausführung der Methoden “Stop” und “Start” wirksam!
  • Die Konfiguration wird in einer XML-Datei im Installationsverzeichnis des Plugins nicht flüchtig gespeichert.
    • :!: Beim Entfernen oder bei erneuter Installation des Plugins wird eine vorhandene Konfigurationsdatei gelöscht; die gespeicherte Konfiguration geht verloren!
  • Slots und Subslots
    • Für jede Input-Variable wird ein Input-Subslot konfiguriert.
      Die Reihenfolge der Input-Subslots entspricht der Reihenfolge der im Controller konfigurierten Variablen mit Datenrichtung “INPUT”.
    • Für jede Output-Variable wird ein Output-Subslot konfiguriert.
      Die Reihenfolge der Output-Subslots entspricht der Reihenfolge der im Controller konfigurierten Variablen mit Datenrichtung “OUTPUT”.
    • Alle Input-Subslots befinden sich in einem Input-Slot.
    • Alle Output-Subslots befinden sich in einem Output-Slot.
    • :!: Es werden keine weiteren Subslots konfiguriert, wenn die maximale Ausnutzung des Prozessdatenabbilds erreicht ist!
  • Netzwerk
    • StationName = leer (der Name der Station wird automatisch gebildet)
    • IPAdress = 0.0.0.0
    • Gateway = 0.0.0.0
    • SubnetMask = 0.0.0.0
  • Zykluszeit für die Aktualisierung der IO-Daten: 10ms

"GetPNIODeviceConfig"

  • Mit Hilfe der Methode “GetPNIODeviceConfig” kann die tatsächliche Konfiguration und der aktulle Betriebszustand ermittelt werden.
  • Die Angabe der Zeiten “IOCycleTime” und “SystemCycleTime” erfolgt in “µs”.
  • :!: Die Konfiguration kann u.U. von der mit “Configure” angebenen Konfiguration abweichen (z.B. Angabe von Variablen mit nicht passender Datenrichtung oder Angabe eines Wertes für “SystemCycleCounter”, welcher zu einer Unterschreitung der minimal zulässigen “IOCycleTime” führt)!
  • Auf Grundlage dieser Angaben und auf Basis der Gerätebeschreibungsdatei (GSDML-Datei) für “Q.station” erfolgt die Konfiguration des “PROFINET IO Controllers”.
  • Beispiel
    • Konfiguration “GInsPNIODevice”

      Methode "GetPNIODeviceConfig"

    • Konfiguration und Prozessdatenabbild “PROFINET IO Controller” (hier: “SYCON.net”)



Sonstiges

 

Zertifizierung

Profinet ist in der IEC 61158 genormt.
Sie ist die Basis dafür, dass Geräte in industriellen Anlagen miteinander vernetzt werden können und ihre Daten fehlerfrei miteinander austauschen können.
Die Sicherstellung von Interoperabilität in Automatisierungsanlagen erfordert entsprechende Qualitätssicherungsmaßnahmen.
Aus diesem Grund hat die Profibus-Nutzerorganisation ein Zertifizierungsverfahren etabliert, bei dem auf der Basis von Prüfberichten nach DIN ISO 9001 akkreditierten Prüflaboren Zertifikate für Profinet-Geräte ausgestellt werden.

Bei Profinet müssen alle Feldgeräte ein Zertifikat der Profibus-Nutzerorganisation haben.
Während bei Profibus die Zertifizierung eines Feldgerätes freiwillig ist, ist die Zertifizierung eines Gerätes bei Profinet IO verbindlich vorgeschrieben!
Ohne einen erfolgreichen Test, der durch ein Zertifikat bescheinigt wird, dürfen die Geräte nicht vermarktet werden!

Der Controller “Q.station” als “PROFINET IO Device” ist derzeit noch nicht zertifiziert!
Das Plugin “GInsPNIODevice” sollte nicht ohne vorherige Rücksprache in produktiven Anlagen eingesetzt werden!

Kommunikations-LEDs

Q.station E1: LEDs

Die Kommunikations-LEDs “SF” (“Systemfehler”) und “BF” (“Busfehler”) sowie die LEDs “LINK” und “RX/TX” die nachfolgend beschriebenen Zustände annehmen:

Überwachung der Zykluszeit

  • Die Zykluszeit für den Austausch der I/O-Daten wird überwacht und protokolliert, wenn der Wert für “Log-Level” nicht “Log level none” ist.
  • Die Überwachung erfolgt durch Auswertung der Variable “V1: Timestamp”.
    Die Variable “Timestamp” muss dazu die Zeit seit dem 01.01.2000 (“DCTime”) enthalten.
  • In der Projektkonfiguration für den Controller “Q.station” muss die Variable “Timestamp” wie folgt konfiguriert werden (hier für Konfigurationsprogramm “test.commander”)

    "KOnfiguration Variable "Timestamp"

Logging

  • Mit Start des Plugins wird im Dateisystem der “Q.station” im Verzeichnis /tmp/gins_tmp/ eine Log-Datei “ginspniodevice.log” angelegt, wenn der “LogLevel” nicht “Log level none” ist.
    Wird der Wert für den “LogLevel” nach dem Start des Plugins auf einen Wert ungleich “Log level none” geändert, dann wird Log-Datei automatisch erstellt, wenn diese noch nicht vorhanden ist.
  • Abhängig vom eingestellten “LogLevel” werden Einträge in die Log-Datei geschrieben.
    • Der “Log-Level” ist im Auslieferzustand bzw. nach einem Neustart des Plugin's auf den Wert “Log level none” gesetzt.
    • Der “Log-Level” kann mit der Plugin-API Methode “SetLogLevel” geändert werden.
      Anwendbare Werte sind “Log level none”, “Log level error” und “Log level information”.
    • :! Der “Log-Level” wird nicht in der Konfigurationsdateio für das Plugin gespeichert!
  • Die Log-Datei kann mit Hilfe einer FTP-Verbindung (Benutzer “6”, Passwort “6”) im Verzeichnis /tmp/ gelesen und bearbeitet werden (z.B. Löschen des gesamten Inhalts).
  • :!: Die Log-Datei darf nicht entfernt (gelöscht) werden!
  • :!: Beim Beenden oder bei erneuter Installation des Plugins wird eine vorhandene Log-Datei gelöscht; die gespeicherten Daten gehen verloren!
  • :!: Die Log-Datei befindet sich in einem temporären Verzeichnis im RAM. Mit dem Ausschalten des Controllers wird die vorhandene Log-Datei gelöscht!
  • :!: Die Log-Datei befindet sich in einem temporären Verzeichnis im RAM. Der dafür vorgesehene Speicherplatz ist begrenzt. Damit andere Prozesse nicht gestört werden, sollte die Log-Datei nicht zu viel Platz beanspruchen. Für den Dauerbetrieb sollte daher der Log-Level mit der Plugin-API Methode “SetLogLevel” auf “Log level none” gesetzt werden!
  • Auzug aus einer Log-Datei. Der Zeitstempel vor jedem Eintrag ist “UTC”-Zeit; Zeitzonen werden nicht berücksichtigt.

    [12.12.2019 10:25:28] PluginInit(): begin
    [12.12.2019 10:25:28] Plugin information
    [12.12.2019 10:25:28] Plugin executable: GInsPNIODevice
    [12.12.2019 10:25:28] Plugin main thread name: "PNIOPluginMain"
    [12.12.2019 10:25:28] Plugin version: 0.1 (Dec 12 2019 10:24:01 UTC)
    [12.12.2019 10:25:28] Logging file name: /tmp/gins_tmp/ginspniodevice.log
    [12.12.2019 10:25:28] Logging level: information
    [12.12.2019 10:25:28] GLIBC version: 2.26
    [12.12.2019 10:25:28] Temporary files directory: /tmp/gins_tmp
    [12.12.2019 10:25:28] PluginInit(): end
    [12.12.2019 10:25:28] PluginMain(): begin
    [12.12.2019 10:25:28] Process information
    [12.12.2019 10:25:28] PID = 928
    [12.12.2019 10:25:28] PPID = 741
    [12.12.2019 10:25:28] Main thread ID = 928
    [12.12.2019 10:25:28] PluginMain(): SMState_NotDefined --> SMState_Init
    [12.12.2019 10:25:28] SMHandler_Init(): begin
    [12.12.2019 10:25:28] SMHandler_Init(): end
    [12.12.2019 10:25:28] PluginMain(): SMState_Init --> SMState_Idle
    [12.12.2019 10:25:32] ==> PluginStart()
    [12.12.2019 10:25:32] PluginMain(): SMState_Idle --> SMState_Start
    [12.12.2019 10:25:32] SMHandler_Start(): begin
    [12.12.2019 10:25:32] Starting PNIODevice ...
    [12.12.2019 10:25:32] Load plugin configuration ...
    [12.12.2019 10:25:32] PNIODevice: set thread real-time scheduling ...
    [12.12.2019 10:25:32] PNIODevice: real-time scheduling, policy = SCHED_RR, priority = 90
    [12.12.2019 10:25:32] PNIODevice: Thread ID = 7
    [12.12.2019 10:25:34] Driver information
    [12.12.2019 10:25:34] DriverVersion : "cifX Toolkit 1.2.0.0"
    [12.12.2019 10:25:34] BoardCnt : 1
    [12.12.2019 10:25:34] Board information for board 0
    [12.12.2019 10:25:34] BoardName : "cifX0"
    [12.12.2019 10:25:34] BoardAlias : "MyAlias"
    [12.12.2019 10:25:34] BoardID : 0
    [12.12.2019 10:25:34] SystemError : 0x00000000
    [12.12.2019 10:25:34] IrqNumber : 0
    [12.12.2019 10:25:34] IrqEnabled : 1
    [12.12.2019 10:25:34] ChannelCnt : 2
    [12.12.2019 10:25:34] DpmTotalSize : 65536[Byte]
    [12.12.2019 10:25:34] System device information
    [12.12.2019 10:25:34] abCookie : netX
    [12.12.2019 10:25:34] DpmTotalSize : 32000[Byte]
    [12.12.2019 10:25:34] DeviceNumber : 1291109
    [12.12.2019 10:25:34] SerialNumber : 20119
    [12.12.2019 10:25:34] ausHwOptions[0] : 0x0080 (ETHERNET, internal PHY)
    [12.12.2019 10:25:34] ausHwOptions[1] : 0x0080 (ETHERNET, internal PHY)
    [12.12.2019 10:25:34] ausHwOptions[2] : 0xfffb (I2C PIO INTERFACE)
    [12.12.2019 10:25:34] ausHwOptions[3] : 0xfff6 (SYNC INTERFACE)
    [12.12.2019 10:25:34] Manufacturer : 1 (Hilscher GmbH)
    [12.12.2019 10:25:34] ProductionDate : 2019/KW34
    [12.12.2019 10:25:34] ulLicenseFlags1 : 0x00000000
    [12.12.2019 10:25:34] ulLicenseFlags2 : 0x00000000
    [12.12.2019 10:25:34] NetxLicenseID : 0
    [12.12.2019 10:25:34] NetxLicenseFlags : 0x0000
    [12.12.2019 10:25:34] DeviceClass : 0x0003 (CIFIX, all PCI types)
    [12.12.2019 10:25:34] HwRevision : 1
    [12.12.2019 10:25:34] HwCompatibility : 0
    [12.12.2019 10:25:34] Channel information for channel 0
    [12.12.2019 10:25:34] BoardName : "cifX0"
    [12.12.2019 10:25:34] DeviceNumber : 1291109
    [12.12.2019 10:25:34] SerialNumber : 20119
    [12.12.2019 10:25:34] FWName : "PROFINET IO Device"
    [12.12.2019 10:25:34] FWVersion : 3.13.2 Build 0
    [12.12.2019 10:25:34] FWDate : 17.10.2018
    [12.12.2019 10:25:34] ChannelError : 0xC0000145
    [12.12.2019 10:25:34] MailboxSize : 1596[Byte]
    [12.12.2019 10:25:34] IOInAreaCnt : 2
    [12.12.2019 10:25:34] IOOutAreaCnt : 2
    [12.12.2019 10:25:34] NetxFlags : 0x00000032
    [12.12.2019 10:25:34] HostFlags : 0x00000030
    [12.12.2019 10:25:34] HostCOSFlags : 0x00000000
    [12.12.2019 10:25:34] DeviceCOSFlags : 0x00000001
    [12.12.2019 10:25:34] Starting controller interface ...
    ...