Zentralstation Tutorial (Master)
Eine komplexere Zentralstation-Applikation mit unterschiedlichen Datenpunkten in beide Richtungen und einer Verbindung zur Unterstation. Die Beispielapplikation verwendet das TwinCAT IEC 60870-5-104 High-Level Interface.
Download TwinCAT XAE Project (*.zip): TutorialSampleMaster104.zip
Im Beispielprojekt sind folgende Stationsparameter für die Zentralstation eingestellt:
- Server host address (IP-Adresse der Unterstation): 127.0.0.1 (Sie müssen mindestens diesen Parameter an Ihre Zielplattform anpassen!).
- Server port address (Portadresse der Unterstation): 2404.
- k: 12.
- w: 8.
- t0: 30s.
- t1: 15s.
- t2: 10s.
- t3: 20s.
- Cause of transfer size: 2 octets (inclusive originator address).
- Common ASDU address size: 2 octets.
- Information object address size: 3 octets.
- Originator address: 1.
- Common ASDU address: 7.
- Max. APDU length: 253.
Datenpunktkonfiguration (sollte gleich sein mit der Datenpunktkonfiguration der Unterstation):
- Single point information: M_SP_NA_1 (IOA := 100), M_SP_NA_1(IOA := 101), M_SP_TB_1(IOA := 102).
- Double point information: M_DP_NA_1 (IOA := 200), M_DP_NA_1 (IOA := 201), M_DP_TB_1 (IOA := 202).
- Regulating step value: M_ST_NA_1 (IOA := 300), M_ST_NA_1 (IOA := 301), M_ST_TB_1 (IOA := 302).
- Bitstring value: M_BO_NA_1 (IOA := 400), M_BO_NA_1 (IOA := 401), M_BO_TB_1 (IOA := 402).
- Measured value, normalized value: M_ME_NA_1 (IOA := 500), M_ME_NA_1 (IOA := 501), M_ME_TD_1 (IOA := 502).
- Measured value, scaled value: M_ME_NB_1 (IOA := 600), M_ME_NB_1 (IOA := 601), M_ME_TD_1 (IOA := 602).
- Measured value, short floating point value: M_ME_NC_1 (IOA := 700), M_ME_NC_1 (IOA := 701), M_ME_TF_1 (IOA := 702).
- Binary counter value: M_IT_NA_1 (IOA := 800), M_IT_NA_1 (IOA := 801), M_IT_TB_1 (IOA := 802).
- Single command: C_SC_NA_1 (IOA := 10), C_SC_NA_1 (IOA := 11), C_SC_TA_1 (IOA := 12).
- Double command: C_DC_NA_1 (IOA := 20), C_DC_NA_1 (IOA := 21), C_DC_TA_1 (IOA := 22).
- Bitstring command: C_BO_NA_1 (IOA := 40), C_BO_NA_1 (IOA := 41), C_BO_TA_1 (IOA := 42).
- Setpoint command, normalized value: C_SE_NA_1 (IOA := 50), C_SE_NA_1 (IOA := 51), C_SE_TA_1 (IOA := 52).
- Setpoint command, scaled value: C_SE_NB_1 (IOA := 60), C_SE_NB_1 (IOA := 61), C_SE_TB_1 (IOA := 62).
- Setpoint command, short floating point value: C_SE_NC_1 (IOA := 70), C_SE_NC_1 (IOA := 71), C_SE_TC_1 (IOA := 72).
Initialisierungssequenz, die nach dem Verbindungsaufbau einmalig/automatisch ausgeführt wird:
- Kein Testbefehl (C_TS_NA_1, deaktiviert).
- Uhrzeitsynchronisationsbefehl (C_CS_NA_1).
- Generalabfragebefehl (C_IC_NA_1) der Gruppe: Allgemein (eIEC870_QOI_INROGEN).
- Kein Zählerabfragebefehl (C_IC_NA_1) der Gruppe: Allgemein (eIEC870_RQT_REQCOGEN, deaktiviert). Zählerabfrage Mode A (Zähler werden lokal in der Unterstation umgespeichert und als spontane Daten an die Zentralstation gesendet).
Beispielimplementierung folgender Dienste:
- Testbefehl (C_TS_NA_1) alle 60 Sekunden.
- Uhrzeitsynchronisationsbefehl (C_CS_NA_1) alle 60 Sekunden.
- Generalabfragebefehl (C_IC_NA_1) der Gruppe: Allgemein (eIEC870_QOI_INROGEN) alle 60 Sekunden.
- Kein Zählerabfragebefehl (C_IC_NA_1) der Gruppe: Allgemein (eIEC870_RQT_REQCOGEN, deaktiviert). Zählerabfrage Mode A (Zähler werden lokal in der Unterstation umgespeichert und als spontane Daten an die Zentralstation gesendet).
- Simulation und Übertragung der Befehle alle 10 Sekunden wenn die Variable bSendCmd auf TRUE gesetzt wurde (siehe obere Datenpunktkonfiguration).
- Empfang spontaner Daten.
- Empfang von M_EI_NA_1 (Ende der Initialisierung).
Folgende Tabelle beschreibt kurz die Hauptkomponenten des Projekts:
Komponente | Typ | Beschreibung |
---|---|---|
MAIN | PRG | Dieses Programmteil implementiert das Fernwirkprotokoll (langsame Task). |
fbClient | FB_IEC870_5_104Master (FB) | Implementiert die Zentralstation. Eine Instanz dieses Bausteins kann nur mit einer Unterstation kommunizieren. Für jede weitere Unterstation mit der kommuniziert werden soll wird eine weitere Instanz dieses Funktionsbausteins benötigt. |
AODB | ARRAY OF ST_IEC870_5_101AODBEntry (STRUCT) | Applikationsobjektdatenbank. Es ist eine Array-Variable. Für jeden Datenpunkt wird ein Arrayelement benötigt. |
hTable | T_HAODBTable (STRUCT) | Applikationsobjektdatenbank-Handle. Mit Hilfe dieser Variablen wird auf die Applikationsobjektdatenbank zugegriffen und nie direkt auf die einzelnen Arrayelemente. |
F_iecCreateTableHnd | FUNCTION | Im Initialisierungsschritt werden alle Arrayelemente von AODB mit diesem Funktionsaufruf einmalig initialisiert. Beim Erfolg liefert dieser Funktionsaufruf das Handle. |
F_iecAddTableEntry | FUNCTION | Im Initialisierungsschritt werden die einzelnen Datenpunkte der Station mit diesem Funktionsaufruf einmalig konfiguriert. |
memory | ST_MemoryData (STRUCT) | Diese Struktur beinhaltet die empfangenen und die zu sendenden Prozessdaten die ständig aktualisiert werden. |
fbHandler | FB_IEC870_5_101TableEventHandler (FB) | Dieser Funktionsbaustein teilt der Applikation mit wenn Datenpunktdaten geändert oder aktualisiert wurden. |