niotix IEC-60870-5-104


Das Modul „niotix IEC-60870-5-104“ ist eine Erweiterung für niotix zur Integration von Messdaten aus niotix in Netzleitsysteme über das Fernwirkprotokoll IEC-60870-5-104. Das Modul besteht aus den Komponenten „Konnektor IEC-60870-5-104 Push“ in niotix und der separaten Komponente „niotix IEC-104-Server“. Das Modul niotix IEC-60870-5-104 bietet eine robuste Lösung für die nahtlose Integration von IoT-Daten in Netzleitsysteme oder andere Fernwirkanlagen.

Wesentliche Merkmale der Lösung sind:

  • Automatisierte Konfiguration der Datenpunkte der niotix IEC-104-Servers: Die Datenpunkte werden automatisch aus niotix übernommen und müssen nicht separat im IEC-104-Server konfiguriert werden.
  • Automatisierte Konfiguration der IEC-104-Server: Es können in Abhängigkeit von der Konfiguration der Konnektoren in niotix automatisch mehrere IEC-104-Server gestartet werden.
  • Betrieb auf virtueller Serverinfrastruktur: Die Komponente niotix IEC-104-Server wird als Docker Container ausgeliefert und kann so skalierbar und zuverlässig auf virtueller Infrastruktur betrieben werden. Es ist auch eine auslieferung auf dezidierter Hardware möglich.
  • Datenpunkte können automatisch mit IEC Quality Flags versehen werden.
  • Die Konfiguration der Datenpunkte in niotix ist über eine API möglich: So können große Mengen an Datenpunkten effizient bearbeitet werden.
  • Eventbasierte Kommunikation zwischen niotix und niotix IEC-104-Server - Die Datenpunkte werden bei Aktualisierung übertragen, hierdurch werden auch schnelle Wechsel an das Leitsystem übertragen.
  • Verwendung mit digitalen Zwillingen und virtuellen Geräten möglich: Hierdurch können auch aggregierte Werte und IoT-Daten aus beliebigen Quellen an das Leitsystem gesendet werden

Allgemeine Informationen

Die Integration der Messdaten in das Netzleitsystem erfolgt über den IEC-60870-5-104 Push Konnektor innerhalb von niotix und den niotix IEC-104-Server mit Anbindung an das Leitsystem.

Die folgende Grafik stellt die Komponenten des Moduls und den grundlegen Datenfluss dar:

%%{ init: { 'theme': 'base', 'themeVariables': { 'primaryColor': '#FFFFFF', 'primaryTextColor': '#031403', 'primaryBorderColor': '#606060', 'lineColor': '#606060', 'secondaryColor': '#2fcbff', 'tertiaryColor': '#E7E6E6', 'primary_font' : 'Poppins:wght@300;400;500;600;700;800', 'primary_font_type' : 'sans-serif' } } }%% flowchart LR subgraph niotix A([ Konnektor: IEC-60870-5-104 Push]) end A-->C([ niotix IEC 104 Server])-->|IEC 60870-5-104| D([ Netzleitsystem])

niotix IEC-60870-5-104 Push Konnektor

Der IEC-60870-5-104 Push Konnektor ist ein ausgehender Konnektor in niotix, welcher mit einem Integrationflow Daten an den niotix IEC-104-Server sendet. Die Ausgehenden Pakete enthalten neben den Standard-Metadaten auch das Objekt outbound_values, welches die IEC-104-spezifische Parameter enthält.

Konfigurationoptionen des Konnektors

Der IEC-104 Push-Konnektor in niotix ermöglicht eine benutzerfreundliche Konfiguration für die Übertragung von Datenpunkten. Folgende Einstellungen können vorgenommen werden:

  • Instanzname: Gib dem Konnektor einen individuellen, einfach zu erschließenden Namen.
  • Beschreibung: Gib eine kurze Beschreibung an.
  • IEC Port: Gib hier den gewünschten Port des niotix IEC-104-Server für die Kommunikation mit dem Leitsystem an. Der Standard-Port ist 2404.
  • IEC Server Push URL: Gib hier die URL des IEC Servers für den Datenempfang ein.
  • Header Auth Type: Gib die Art der Authentifizierung an
  • Header Auth Value: Gib den Wert der Authentifizierung an
  • IEC Server Time UTC: Aktiviere diesen Toggle Button, um die Server-Zeit auf UTC festzulegen.
  • Reject invalid SSL certs: Aktiviere diesen Toggle Button, um ungültige SSL-Zertifikate abzulehnen.
  • IEC k Value: Gib die maximale Anzahl unbestätigter Application Protocol Data Units (APDU) an, die der IEC104 Server über diesen Kanal senden soll, bevor er auf eine Bestätigung des Leitsystems wartet, dass diese APDUs erfolgreich empfangen wurden. (Wert: 1 – 32767)
  • IEC w Value: Gib die maximale Anzahl von APDUs an, die der IEC-104 Server auf diesem Kanal empfangen kann, bevor er eine Bestätigung sendet, dass er diese APDUs erfolgreich empfangen hat. (Wert: 1 – 32767)
  • IEC Timeout 1: Gib hier die maximale Zeit in Sekunden an, die der IEC-104 Server wartet, bis eine gesendete APDU vom Leitsystem als empfangen bestätigt wird.
  • IEC Timeout 2: Hiermit wird die maximale Zeitspanne festgelegt, die der IEC-104 Server nach dem Empfang einer APDU im Leerlauf bleiben kann, bevor er eine Antwort an den Leitsystem senden muss, um anzuzeigen, dass er die APDU erfolgreich empfangen hat.
  • IEC Timeout 3: Mit dieser Funktion kann der IEC-104 Server so eingestellt werden, dass dieser in bestimmten Abständen einen Test-Frame (über den Kanal) sendet. Durch die Übertragung eines Test-Frames kann der IEC-104 Server feststellen, ob der Kanal nach einer längeren Zeit der Kommunikationsinaktivität (es werden keine Daten über den Kanal gesendet) noch verfügbar ist.
  • Whitelisted Clients (Comma Separated List): Gib hier eine durch Kommas getrennte Liste an erlaubten Clients an.
  • Allow Anon. Clients: Gib an, ob anonyme Clients akzeptiert werden sollen.
  • IEC Server Push URL : In diesem Feld wird die URL eingetragen, unter welcher der HTTP Listener des IEC-104 Servers erreichbar ist.

Konfigurationsoptionen der Datenpunkte

Die Konfiguration der Datenpunkte erfolgt im UI im Datenpunkt eines Digitalen Zwillings oder eines Virtuellen Geräts (siehe Abbildung unten). Für größere Datenpunktmengen kann für einen komfortablen und skalierbaren Import die externe API (XAPI) verwendet werden. Für die Vorbereitung ist es sinnvoll, eine Mappingtabelle zu erstellen, welche die in niotix verwendeten Datenpunkt-Identifier jeweils einer Informationsobjektadresse zuordnet. Die einzelnen Digitalen Zwillinge werden bespielsweise auf die Allgemeine Adresse gemappt. Anschließend kann mit Hilfe eines speziellen API-Endpoints durch iteration über die Digitalen Zwillinge oder Virtuellen Geräte die Konfiguration erfolgen (siehe Dokumentation der XAPI).

Neben der Festlegung des jeweiligen IEC-Konnektors erfolgt die Festlegung folgender Parameter:

  • Common Address (Allgemeine Adresse; ca): Die Adresse wird als gemeinsame Adresse bezeichnet, da sie mit allen in der ASDU enthaltenen Objekten verbunden ist. Vergabe der Common-Address (CA; min: 1, max: 65534).
  • Information Object Address (Informationsobjektadresse; ioa): Jedes Informationsobjekt wird durch eine Informations-Objekt-Adresse (IOA) adressiert, die die jeweiligen Daten innerhalb einer bestimmten Station identifiziert. Ihre Länge beträgt 3 Byte für IEC 104. Die Adresse wird als Zieladresse in Steuerrichtung und als Quelladresse in Überwachungsrichtung verwendet. Vergabe der Information-Objekt-Adresse (IOA; min: 1, max: 16777215).
  • Datentyp (type): Hier muss der Standard IEC Datentyp ausgewählt werden. Die unterschiedlichen Datentypen sind u.a im niotix Interoperability Statement zu finden.
  • Deadband (db): Setzt den Schwellwert für jeden gemessenen Datenpunkt. Eine Wertänderung muss größer sein als das Dead-Band, um als event-getriebenes Ereignis gemeldet zu werden. Die Einstellung ist optional (Standardwert= 0,0) und nur für Messwerte relevant. Zulässige Typen sind int und float (z.B. “deadband”: 3.0)
  • lowerLimit (Unterer Grenzwert): Optional, erforderlich für das automatische Setzen der Quality Flags. Wenn der Wert des Datenpunktes den unteren Grenzwert unterschreitet, wird der untere Grenzwert als Wert gesetzt und der Datenpunkt mit dem Quality Flag “Overflow” versehen. Der untere Grenzwert muss kleiner oder gleich dem oberen Grenzwert sein. Ein Quality Flag “Overflow” wird nur bei Messwerten (Typ 13 oder 36) gesetzt.
  • upperLimit (Oberer Grenzwert): Optional, erforderlich für das automatische Setzen der Quality Flags. Wenn der Wert des Datenpunktes den unteren Grenzwert unterschreitet, wird der untere Grenzwert als Wert gesetzt und der Datenpunkt mit dem Quality Flag “Overflow” versehen. Der obere Grenzwert muss größer oder gleich dem unteren Grenzwert sein. Ein Quality Flag “Overflow” wird nur bei Messwerten (Typ 13 oder 36) gesetzt.
  • validityPeriod (Gültigkeitsdauer in Sekunden): Optional, erforderlich für das automatische Setzen der Quality Flags (muss in der Konfiguration des niotix IEC-104-Servers durch Setzen des Parameters „validity-check-interval-in-s“ aktiviert werden). Ist der Zeitstempel des Datenpunktes im IEC Server (Eingangszeitpunkt) älter als die Gültigkeitsdauer, wird dieser bei der nächsten Überprüfung nach ablauf des Intervalls(„validity-check-interval-in-s“) mit den Quality Flags “Invalid” und “Not Topical” versehen. Der Quality Flag “Not Topical” wird nicht bei den Zählwerten (Typ 15 oder 37) gesetzt.

niotix IEC-104-Server

Die Komponente niotix IEC-104-Server sendet niotix-Datenwerte über IEC 60870-5-104 an den IEC-104 Master (z.B. ein Netzleitsystem).

IEC 60870-5-104-Dienste

Der niotix IEC-104-Server unterstützt verschiedene Dienste, die durch das IEC 60870-5-104-Protokoll definiert sind. Hierzu gehören:

  • Interrogation Command (C_IC_NA <100>): Abfragebefehl für Datenpunkte.
  • Counter Interrogation Command (C_CI_NA <101>): Abfragebefehl für Zählerdaten.
  • Read Command (C_RD_NA <102>): Lesebefehl für Datenpunkte.

Datenübertragung und -konfiguration

Die Messdaten werden bei Aktualisierung eines Datenpunktes in einem Digitalen Zwilling oder einem Virtuellen Gerät von niotix per Webhook Konnektor an den niotix IEC-104-Server gesendet. Seitens des niotix IEC-104-Servers erfolgt eine dynamische Konfiguration und ein dynamisches Hinzufügen/Entfernen von IEC-104-Servern und Datenpunkten. Die Konfiguration wird gespeichert und bei Neustart wiederhergestellt.

Quality Flags

Datenpunkte können mit Quality Flags markiert werden, die den Zustand der IEC-104-Datenpunkte anzeigen:

Grenzwerte

Bei Messwerten mit den Datentypen 13 (M_ME_NC) und 36 (M_ME_TF) wird das Quality Flag „Overflow" gesetzt, wenn der Wert den Parameter „upperLimit" überschreitet oder den Parameter „lowerLimit" unterschreitet. Der Datenpunkt wird dann auf den Wert des oberen oder unteren Grenzwertes gesetzt. Sofern die Parameter „upperLimit" oder „lowerLimit" nicht gesetzt sind, ist diese Funktion inaktiv für den entsprechenden Datenpunkt. Diese Funktion erfordert niotix IEC-104-Server Version 2.3.1 oder höher.

Gültigkeitsüberprüfung

Bei allen Datentypen mit Außnahme von 15 (M_IT_NA) und 37 (M_IT_TB) werden die Quality Flags „Invalid" und „Not Topical" gesetzt, wenn der Zeitstempel älter ist als die Gültigkeitsdauer (validityPeriod). Bei den Datentypen 15 und 37 wird nur das Quality Flag „invalid" gesetzt.

Die Häufigkeit der Überprüfung wird im niotix IEC-104-Server über den Parameter „validity-check-interval-in-s" definiert (siehe Abschnitt Konfiguration). Diese Funktion erfordert niotix IEC-104-Server Version 2.3.1 oder höher.

Verfügbare Datentypen

Der niotix IEC-104-Server unterstützt vier verschiedene IEC 60870-5-104-Datentypen, jeweils mit oder ohne Zeitstempel:

Typennummer Beschreibung Kurzname
1 Einzelpunktinformation M_SP_NA
3 Doppelpunktionformation M_DP_NA
13 Messwert, kurze Fließkommazahl M_ME_NC
15 Zählwert M_IT_NA
30 Einzelpunktinformation mit Zeitstempel M_SP_NA
31 Doppelpunktinformation mit Zeitstempel M_DP_TB
36 Messwert, kurze Fließkommazahl mit Zeitstempel M_ME_TF
37 Zählwert mit Zeitstempel M_IT_TB

Event Reporting

Event Daten, oder die sogenannte spontane Datenübertragung, ermöglichen die Übermittlung von Datenpunkten bei Änderungen an den Werten oder Flags. Events werden nur ausgelöst, wenn sich der Wert eines Datenpunkts ändert, nicht jedoch bei einer Änderung des Zeitstempels. Events für Messdaten werden nur ausgelöst, wenn das Deadband überschritten wurde.

Konfiguration

Der niotix IEC-104-Server bietet verschiedene Parameter zur Konfiguration (siehe docker-compose.yml):

  • logging.level.com.digimondo: Einstellung des Log-Levels (TRACE, DEBUG, INFO, WARN, ERROR).
  • http-auth-enabled: Aktivierung/Deaktivierung der HTTP-Basisauthentifizierung für die Health- und Metrik-Endpunkte.
  • http-auth-user: Benutzername für die HTTP-Basisauthentifizierung.
  • http-auth-pass: Passwort für die HTTP-Basisauthentifizierung.
  • buffer-interval-in-ms: Zeitintervall, in dem Daten gepuffert werden können (0 für Deaktivierung).
  • delete-dp-interval-in-s: Zeitintervall für das Löschen von Datenpunkten (0 für Deaktivierung).
  • config-backup-path: Pfad zur Backup-Datei für die IEC-Server-Konfiguration.
  • validity-check-interval-in-s: Länge des Intervalls in Sekunden, in dem das alter der Datenpunkte überprüft wird. Optional, erforderlich für das automatische Setzen der Quality Flags
  • metrics-endpoint: Die URL des Metrik-Endpunkts. Der IEC104Server sendet Metrikdaten per HTTP POST an diesen Endpunkt. Siehe unten für eine detaillierte Beschreibung.
  • metrics-post-interval: Das Intervall in Sekunden für die Übermittlung von Metrikdaten. Bei dem Wert Null wird das das Posten von Metrikdaten deaktiviert.

Metrikdaten

Der niotix IEC-104-Server stellt ein Metrik-Objekt zur Verfügung, welches die aktiven Datenpunkte aller IEC-104 Serverinstanzen enthält. Das Metrikobjekt wird über einen API-Endpoint bereitgestellt und kann per HTTP POST an einen definierten Endpoint übertragen werden.

Lokaler API-Endpoint (curl):

curl --location 'http://<IEC104Server-IP>/metrics/'

Beispielantwort:

{
  "data": {
    "servers": [  // Liste der aktiven IEC-104-Serverinstanzen
      {
        "id": "123", // ID des IEC-104-Push Konnektors
        "port": 2404, // IEC Server Port
        "status": "ok", // Status kann "ok" oder eine Fehlermeldung sein, z.B. "port already in use by other server"
        "numConnectedClients": 2, //Anzahl der verbundenen IEC-104-Clients
        "lastConfigChange": "2020-08-18T13:28:53.000Z",  // letzte Konfigurationsänderung des Datenpunktes
        "lastDataUpdate": "2020-08-18T13:28:53.000Z", // letzte Datenaktualisierung
        "dataPoints": [
          {
            "ca": 1,
            "ioa": 146,
            "value": 0,
            "flags": [
              "invalid"
            ],
            "timestamp": "2020-08-18T13:28:53.000Z",
            "type": 36,
            "deadband": 0.0,
            "group": 0
          }
        ]
      }
    ]
  }
}

Installationsvarianten

Das Modul niotix IEC-60870-5-104 bietet flexible Installationsmöglichkeiten, um den Anforderungen unterschiedlicher IT-Architekturen gerecht zu werden. Folgende Installationsvarianten sind verfügbar:

Variante „Standard"

  • niotix als SaaS: niotix bleibt als SaaS-Plattform in der Cloud für Benutzer verfügbar.
  • IEC 104 Server in IT-Infrastruktur des Kunden als Docker Container: Der IEC 104 Server wird als Docker-Container bereitgestellt und in der internen IT-Infrastruktur des Kunden betrieben. Hierdurch werden insbesondere Sicherheitsanforderungen erfüllt.

Kommunikazionsskizze

%%{ init: { 'theme': 'base', 'themeVariables': { 'primaryColor': '#FFFFFF', 'primaryTextColor': '#031403', 'primaryBorderColor': '#606060', 'lineColor': '#606060', 'secondaryColor': '#2fcbff', 'tertiaryColor': '#E7E6E6', 'primary_font' : 'Poppins:wght@300;400;500;600;700;800', 'primary_font_type' : 'sans-serif' } } }%% flowchart LR style B stroke:#f66 A([ niotix])<==>|Site2Site VPN| B A -.HTTPS, Port 443.-> C subgraph "`**Internes Netzwerk**`" direction LR B(" Firewall")--> C([ niotix IEC 104 Server])-->|IEC 60870-5-104| D([ Netzleitsystem]) end

Variante „OnPremise"

  • niotix und IEC 104 Server in der Infrastruktur des Kunden: Sowohl niotix als auch der IEC 104 Server werden intern in der IT-Infrastruktur des Kunden bereitgestellt, was volle Kontrolle und Anpassungsmöglichkeiten ermöglicht.

Kommunikazionsskizze

%%{ init: { 'theme': 'base', 'themeVariables': { 'primaryColor': '#FFFFFF', 'primaryTextColor': '#031403', 'primaryBorderColor': '#606060', 'lineColor': '#606060', 'secondaryColor': '#2fcbff', 'tertiaryColor': '#E7E6E6', 'primary_font' : 'Poppins:wght@300;400;500;600;700;800', 'primary_font_type' : 'sans-serif' } } }%% flowchart LR subgraph "`**Internes Netzwerk**`" direction LR A([ niotix])-->|HTTPS, Port 443| C([ niotix IEC 104 Server])-->|IEC 60870-5-104| D([ Netzleitsystem]) end

VPN-Anforderungen

Für eine reibungslose Integration in der Variante “Standard” sind bestimmte Anforderungen für ein Site2Site VPN erforderlich:

  • IKEv2-Unterstützung
  • Portweiterleitung: Port 500 in + out (UDP)
  • Whitelist kompatibler Software und Hardware siehe Link

Systemanforderungen

Für die Varianten “Standard” und “OnPremise” werden folgende Anforderungen gestellt:

  • CPU : 2 Kerne
  • RAM : 8 GB
  • HDD : 50 GB
  • OS : Ubuntu 16.4 oder höher
  • Software: Docker Host und Docker Compose (Auslieferung als Docker-Image)
  • Sonstiges: Interne URL als Ziel für den Datenempfang aus niotix

Schritte zur Konfiguration

Anlegen des Konnektors

Im ersten Schritt muss zunächst ein niotix IEC-60870-5-104 Push Konnektor in dem jeweiligen Konto angelegt und konfiguriert werden. Dies erfolgt im Menüpunkt Integrationen / Konnektoren.
Informationen zu den Einstellungen siehe oben.

Konfiguration der Datenpunkte

Die Konfiguration der Datenpunkte erfolgt im UI im Datenpunkt eines Digitalen Zwillings oder eines Virtuellen Geräts. Für größere Datenpunktmengen kann für einen komfortablen und skalierbaren Import die externe API (XAPI) verwendet werden.

Konfiguration via XAPI

Für größere Datenpunktmengen kann für einen komfortablen und skalierbaren Import die externe API (XAPI) verwendet werden. Für die Vorbereitung ist es sinnvoll, eine Mappingtabelle zu erstellen, welche die in niotix verwendeten Datenpunkt-Identifier jeweils einer Informationsobjektadresse zuordnet. Die einzelnen Digitalen Zwillinge werden bespielsweise auf die Allgemeine Adresse gemappt. Anschließend kann mit Hilfe eines speziellen XAPI-Endpoints durch iteration über die Digitalen Zwillinge oder Virtuellen Geräte die Konfiguration erfolgen (siehe Link).

Im JSON Body des PUT Befehls wird das Array “outboundConfiguration” verwendet mit folgenden Feldern verwendet:

  • “connectorId” benötigt als Wert die ID des niotix IEC-60870-5-104 Push Konnektors.
  • Das Objekt “config” beinhaltet die Parameter für die Datenpunkt-Konfiguration (Erläuterungen siehe oben).
    • ca
    • io
    • type
    • db
    • lowerLimit (optional)
    • upperLimit (optional)
    • validityPeriod (optional)

Beispiel ohne optionale Parameter:

{
  "outboundConfiguration":[
    {
      "connectorId":123,
      "config":{
        "ca":256,
        "ioa":65537,
        "type":13,
        "db":0
      }
    }
  ]
}

Konfiguration via UI

Ist der Konnektor aktiviert, erscheint in allen Datenpunkten der Digitalen Zwillinge und Virtuellen Geräte das neue Feld “Outbound Konfiguration”. Wird der Konnektor hier ausgewählt, ist es möglich, die IEC-104-Adressen dezimal oder auch strukturiert einzugeben.

Erstellen eines Integrationsflows

Um die Datenpunkte den Server zu senden, muss ein Integrationsflow erstellt werden. Hierfür müssen ein Filter, sowie ein Transformation angelegt werden und in der folgenden Reihenfolge in einen Integrationsflow integriert werden:

  1. Filter
  2. Transformation
  3. Konnektor

Anlegen des Filters

Der Filter sorgt dafür, dass nur Nachrichten von Datenpunkten an den IEC-104 Server gesendet werden, bei denen das Objekt outbound_values existiert. Beispielkonfiguration:

  • Modus: erweitert
  • Typ: JSONATA
  • Code:
$exists(meta.outbound_values)

Anlegen der Transformation

Um einen vollständigen Integrationsflow zu erstellen, muss zudem eine Transformation erstellt werden. Einzig der Ausgabetyp muss zu application/json geändert werden. Bei der Transformation selbst bleibt der Input unverändert.

  • Ausgabetyp: application/json
  • Code:
$