ST_IEC870_5_101AcquisitionParams

Konfigurationsparameter für die zyklische Datenerfassung. In den meisten Fällen soll von der Zentralstation einmalig eine Initialisierungssequenz ausgeführt werden. In dieser Sequenz sind einige Befehle enthalten, die nach der Herstellung der Kommunikationsverbindung und/oder nach dem Empfang von ASDU: M_EI_NA_1 (Ende der Initialisierung) ausgeführt werden. Zu solchen Befehlen gehört z.B. der Uhrzeitsynchronisationsbefehl. Danach soll die Zentralstation z. B. kontinuierlich zyklische Abfragebefehle zur Unterstation senden. Bei einer IEC 60870-5-104 Zentralstation wird der Datenaustausch aktiviert, nachdem die Kommunikationsverbindung hergestellt und „STARTDT“ (Start Data Transfer) empfangen wurde. Im Fall einer IEC 60870-5-101 Zentralstation nach dem Verbindungsreset (Reset Of Link).

Ab der Tc2_IEC60870_5_10x.compiled-library v3.0.7.0 kann der Zeitpunkt der Abarbeitung der Initialisierungssequenz und der zyklischen Abfragebefehle konfiguriert werden. Die Applikation kann wählen ob die Initialisierungssequenz nach dem STARTDT oder erst nach dem Empfang von M_EI_NA_1 ausgeführt werden soll.

Die Strukturkomponente arrInitSeq dient der Konfiguration der Initialisierungssequenz. Dort können Sie einige unterschiedliche Befehle vorkonfigurieren.

Die Strukturkomponente eMode legt fest wann diese Befehle ausgeführt werden sollen. Die Initialisierungssequenz kann z. B. nach der Herstellung der Verbindung (nach STARTDT oder Reset Of Link) oder erst nach dem Empfang von ASDU: M_EI_NA_1 (Ende der Initialisierung) ausgeführt werden.

Die zyklischen Abfragebefehle werden über die Strukturkomponenten testCmd, clockSync, arrGenro, arrCoro oder genCmd konfiguriert.

Syntax

TYPE ST_IEC870_5_101AcquisitionParams :
STRUCT
    eMode : E_IEC870_5_101AcquisitionMode := E_IEC870_5_101AcquisitionMode.InitSeq_CyclicPoll;

    arrInitSeq : ARRAY[IEC870_MIN_ISTEP..IEC870_MAX_ISTEP] OF E_IEC870_5_101InitSeqStep :=
        [eIEC870_ISTEP_TEST,
         eIEC870_ISTEP_CLOCK,
         eIEC870_ISTEP_GENRO,
         eIEC870_ISTEP_CORO,
         eIEC870_ISTEP_UNUSED,
         eIEC870_ISTEP_UNUSED,
         eIEC870_ISTEP_UNUSED];

    testCmd : ST_IEC870_5_101TestPollParams := 
            (asduAddr := IEC870_ASDUADDR_SYSPARA, tPollCycle := T#60S, bEnable := TRUE);

    clockSync : ST_IEC870_5_101ClockPollParams :=
             (asduAddr := IEC870_ASDUADDR_SYSPARA, tPollCycle := T#60S, bEnable := TRUE);

    arrGenro : ARRAY[0..16] OF ST_IEC870_5_101GenroPollParams :=
        [(eQOI := eIEC870_QOI_INROGEN, tPollCycle := T#60S, bEnable := TRUE),
         (eQOI := eIEC870_QOI_INRO1),
         (eQOI := eIEC870_QOI_INRO2),
         (eQOI := eIEC870_QOI_INRO3),
         (eQOI := eIEC870_QOI_INRO4),
         (eQOI := eIEC870_QOI_INRO5),
         (eQOI := eIEC870_QOI_INRO6),
         (eQOI := eIEC870_QOI_INRO7),
         (eQOI := eIEC870_QOI_INRO8),
         (eQOI := eIEC870_QOI_INRO9),
         (eQOI := eIEC870_QOI_INRO10),
         (eQOI := eIEC870_QOI_INRO11),
         (eQOI := eIEC870_QOI_INRO12),
         (eQOI := eIEC870_QOI_INRO13),
         (eQOI := eIEC870_QOI_INRO14),
         (eQOI := eIEC870_QOI_INRO15),
         (eQOI := eIEC870_QOI_INRO16)];

    arrCoro : ARRAY[0..4] OF ST_IEC870_5_101CoroPollParams :=
        [(eRQT := eIEC870_RQT_REQCOGEN, eFRZ := eIEC870_FRZ_READ, tPollCycle := T#60S, bEnable := TRUE),
         (eRQT := eIEC870_RQT_REQCO1),
         (eRQT := eIEC870_RQT_REQCO2),
         (eRQT := eIEC870_RQT_REQCO3),
         (eRQT := eIEC870_RQT_REQCO4)];

    genCmd : ST_IEC870_5_101GenCmdPollParams :=
        (tPollCycle := T#1H, bEnable := FALSE);

    delayCmd : ST_IEC870_5_101DelayPollParams := (tDelay := T#5S);

    eAODBType : E_IEC870_5_101AODBType := eIEC870_AODB_STATIC;
END_STRUCT
END_TYPE

eMode: Konfiguration des Triggers/Auslösers für die Abarbeitung der Initialisierungssequenz (arrInitSeq) und der zyklischen Abfragebefehle. Da nicht jeder Server immer die ASDU: M_EI_NA_1 (Ende der Initialisierung) sendet, wurde folgende Standardeinstellung gewählt: E_IEC870_5_101AcquisitionMode.InitSeq_CyclicPoll.

In der Standardeinstellung werden nach dem Start des Datentransfers (IEC 60870-5-104, STARTDT) oder dem Reset der Verbindung (IEC 60870-5-101) zuerst alle Befehle der Initialisierungssequenz einmalig, danach die zyklischen Abfragebefehle fortlaufend ausgeführt. Die ASDU: M_EI_NA_1 wird nicht ausgewertet und ignoriert.

Wenn die Initialisierungssequenz beim Empfang von M_EI_NA_1 ausgeführt werden soll, muss eine andere Einstellung gewählt werden, z. B.: E_IEC870_5_101AcquisitionMode.CyclicPoll_OnEndOfInit_InitSeq_CyclicPoll oder E_IEC870_5_101AcquisitionMode.OnEndOfInit_InitSeq_CyclicPoll.

arrInitSeq: Initialisierungssequence. Die Standardkonfiguration der Initialisierungssequence führt folgende Befehle aus:

testCmd: Parameter für zyklische Testbefehle. Standardwert: Aktiv, ein Testkommando alle 60s.

clockSync: Parameter für zyklische Uhrzeitsynchronisationsbefehle. Standardwert: Aktiv, Uhrzeitsynchronisation alle 60s.

arrGenro: Parameter für zyklische Stationsabfragebefehle. Es können Stationsabfragen von bis zu 17 Datenpunktgruppen konfiguriert werden. Standardwert: Aktiv, eine Stationsabfrage der Gruppe 'Allgemein' alle 60s.

arrCoro: Parameter für zyklische Zählerabfragebefehle. Es können Zählerabfragen von bis zu 5 Zählergruppen konfiguriert werden. Standardwert: Aktiv, eine Zählerabfrage der Gruppe Allgemein alle 60s.

genCmd: Parameter für zyklische Übertragung der Datenpunkte in Steuerungsrichtung (Einzelbefehl, Doppelbefehl, Sollwerte usw.). Standardwert: Nicht aktiv, die Befehle werden alle 60min. übertragen.

delayCmd: Parameter für die Verzögerung des nächsten Initialisierungsschrittes während der Ausführung der Initialisierungssequence. Standardwert: Der nächste Initialisierungsschritt wird um 5s verzögert.

eAODBType: Applikationsdatenbank-Typ. Dieser Parameter legt fest wie die Datenpunkte in der Applikationsdatenbank abgespeichert werden.

Beispiel in ST

Im folgenden Programmausschnitt wird die zyklische Datenerfassung wie folgt konfiguriert: Alle Initialisierungsschritte werden deaktiviert. Das zyklische Testkommando und Uhrzeitsynchronisationskommando werden auch deaktiviert. Zusätzlich zu der Standard-Stationsabfrage wird noch eine weitere Stationsabfrage der Gruppe 1 alle 100s konfiguriert. Außerdem wird zu der Standard-Zählerabfrage eine Zählerabfrage (Umspeichern) der Zählergruppe 1 alle 200s konfiguriert.

PROGRAM P_AcquisitionConfig
VAR_IN_OUT
    acqPara : ST_IEC870_5_101AcquisitionParams;
END_VAR
acqPara.arrInitSeq[0]          := eIEC870_ISTEP_UNUSED;
acqPara.arrInitSeq[1]         := eIEC870_ISTEP_UNUSED;
acqPara.arrInitSeq[2]         := eIEC870_ISTEP_UNUSED;
acqPara.arrInitSeq[3]         := eIEC870_ISTEP_UNUSED;
acqPara.arrInitSeq[4]         := eIEC870_ISTEP_UNUSED;

acqPara.testCmd.bEnable       := FALSE;

acqPara.clockSync.bEnable     := FALSE;

acqPara.arrGenro[1].asduAddr  := IEC870_ASDUADDR_SYSPARA;
acqPara.arrGenro[1].eQOI      := eIEC870_QOI_INRO1;
acqPara.arrGenro[1].tPollCycle:= T#100s;
acqPara.arrGenro[1].bEnable   := TRUE;

acqPara.arrCoro[1].asduAddr   := IEC870_ASDUADDR_SYSPARA;
acqPara.arrCoro[1].eFRZ       := eIEC870_FRZ_FREEZE;
acqPara.arrCoro[1].eRQT       := eIEC870_RQT_REQCO1;
acqpara.arrCoro[1].tPollCycle := T#200s;
acqPara.arrCoro[1].bEnable    := TRUE;

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.4012.0

PC oder CX (x86, x64, ARM)

Tc2_IEC60870_5_10x (Communication->IEC60870)
Tc2_SerialCom (Communication->Serial)
Tc2_TcpIp (Communication->TcpIp)
Tc2_Utilities (System)