Hinweise zur Dokumentation

Diese Beschreibung wendet sich ausschließlich an ausgebildetes Fachpersonal der Steuerungs- und Automatisierungstechnik, das mit den geltenden nationalen Normen vertraut ist.
Zur Installation und Inbetriebnahme der Komponenten ist die Beachtung der Dokumentation und der nachfolgenden Hinweise und Erklärungen unbedingt notwendig.
Das Fachpersonal ist verpflichtet, für jede Installation und Inbetriebnahme die zu dem Zeitpunkt veröffentlichte Dokumentation zu verwenden.

Das Fachpersonal hat sicherzustellen, dass die Anwendung bzw. der Einsatz der beschriebenen Produkte alle Sicherheitsanforderungen, einschließlich sämtlicher anwendbaren Gesetze, Vorschriften, Bestimmungen und Normen erfüllt.

Disclaimer

Diese Dokumentation wurde sorgfältig erstellt. Die beschriebenen Produkte werden jedoch ständig weiter entwickelt.
Wir behalten uns das Recht vor, die Dokumentation jederzeit und ohne Ankündigung zu überarbeiten und zu ändern.
Aus den Angaben, Abbildungen und Beschreibungen in dieser Dokumentation können keine Ansprüche auf Änderung bereits gelieferter Produkte geltend gemacht werden.

Marken

Beckhoff®, TwinCAT®, EtherCAT®, EtherCAT G®, EtherCAT G10®, EtherCAT P®, Safety over EtherCAT®, TwinSAFE®, XFC®, XTS® und XPlanar® sind eingetragene und lizenzierte Marken der Beckhoff Automation GmbH.
Die Verwendung anderer in dieser Dokumentation enthaltenen Marken oder Kennzeichen durch Dritte kann zu einer Verletzung von Rechten der Inhaber der entsprechenden Bezeichnungen führen.

Patente

Die EtherCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP1590927, EP1789857, EP1456722, EP2137893, DE102015105702
mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

EtherCAT® ist eine eingetragene Marke und patentierte Technologie lizenziert durch die Beckhoff Automation GmbH, Deutschland.

Copyright

© Beckhoff Automation GmbH & Co. KG, Deutschland.
Weitergabe sowie Vervielfältigung dieses Dokuments, Verwertung und Mitteilung seines Inhalts sind verboten, soweit nicht ausdrücklich gestattet.
Zuwiderhandlungen verpflichten zu Schadenersatz. Alle Rechte für den Fall der Patent-, Gebrauchsmuster- oder Geschmacksmustereintragung vorbehalten.


Übersicht

Die TwinCAT SPS-Bibliothek TcIEC870_5_101.Lib implementiert die Verbindungsfunktionen und Datenstrukturen nach der IEC60870-5-101 Norm.


FB_IEC870_5_101ErrorFifo

TwinCAT PLC Library: IEC 60870-5-101 Common Data Types

FUNCTION_BLOCK FB_IEC870_5_101ErrorFifo

IEC60870-5-10x Fehler-Fifo. Der älteste Eintrag wird immer überschrieben. Der Fifo hat eine konstante Größe. Die Größe wird durch die Konstante: IEC870_MAX_ERROR_FIFO_SIZE bestimmt (default: 10 Elemente).

Der Funktionsbaustein besitzt drei Aktionen:

  • AddError (fügt eine neue Fehlermeldung dem Fifo hinzu);
  • RemoveError (entfernt die älteste Fehlermeldung aus dem Fifo);
  • Reset (löscht alle Fehlermeldungen, setzt den Fifo zurück);

Im Normalfall werden die Fehlermeldungen durch die internen IEC60870-5-10x Gerätefunktionen dem Fifo hinzugefügt. Die SPS-Applikation kann diese Fehlermeldungen durch den Aufruf der Aktion: RemoveError auslesen und auswerten.

VAR_INPUT

VAR_INPUT
    putError 	: ST_IEC870_5_101ErrorFifoEntry;
END_VAR

putError: Fehlermeldung, die dem Fifo hinzugefügt werden soll.

VAR_OUTPUT

VAR_OUTPUT
    getError 	: ST_IEC870_5_101ErrorFifoEntry;
    nErrors 		: UDINT; (* Error counter *)
    bOk 		: BOOL; (* TRUE = new entry added or removed succesfully, FALSE = fifo empty *)
END_VAR

getError: Fehlermeldung, die aus dem Fifo entfernt wurde.

nErrors: Liefert die aktuelle Anzahl Fifo-Einträge (Fehlermeldungen im Fifo).

bOk: Diese Variable wird TRUE, wenn ein neuer Eintrag erfolgreich hinzugefügt oder aus dem Fifo entfernt wurde.

Beispiel in ST:

Im folgenden ST-Beispiel wird der Gerätefehler-Fifo ausgelesen und die registrierten Fehler ins Windows Application Log geschrieben.

PROGRAM P_LogErrors
VAR_IN_OUT
    fbErrors : FB_IEC870_5_101ErrorFifo;
END_VAR
REPEAT
    fbErrors.RemoveError();
    IF fbErrors.bOk THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
            'IEC60870-5-10x device error: 0x%s',
            DWORD_TO_HEXSTR( fbErrors.getError.nErrId, 8, FALSE) );
    END_IF
UNTIL NOT fbErrors.bOk
END_REPEAT

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


FB_IEC870_5_101TBufferCtrl

FUNCTION_BLOCK FB_IEC870_5_101TBufferCtrl

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.6 / IEC60870-5-101 Unterstation v2.0.2 und höher.

Mit diesem Funktionsbaustein kann der Inhalt des TX/RX-Datenpuffers manipuliert werden, der bei der Kommunikation über das IEC60870-5-104/101 Transport Interface benutzt wird.

Der Funktionsbaustein besitzt folgende Aktionen:

  • RxRemoveObj (entfernt den ältesten Fifoeintrag aus dem RX-Fifo);
  • RxReset (löscht alle RX-Fifoeinträge, setzt den RX-Fifo zurück);
  • TxAddObj (fügt einen neuen Fifoeintrag in den TX-Fifo);
  • TxReset (löscht alle TX-Fifoeinträge, setzt den TX-Fifo zurück)

Durch den Aufruf der oben aufgelisteten Aktionen kann der Inhalt des TX/RX-Datenpuffers verändert werden.

VAR_IN_OUT

VAR_IN_OUT
    buffer 	: ST_IEC870_5_101TBuffer; (* TX/RX data buffer *)
END_VAR

buffer: TX/RX-Datenpuffer. Die TX/RX-Pufferparameter (wie z.B. asduSize ) müssen vor der Benutzung konfiguriert werden.

VAR_INPUT

VAR_INPUT
    putObj 	: ST_IEC870_5_101AOGen; (* ASDU to send *)
END_VAR

putObj: Dateneinheit (ASDU), die gesendet werden soll.

VAR_OUTPUT

VAR_OUTPUT
    getObj 	: ST_IEC870_5_101AOGen; (* received ASDU *)
    bOk 	: BOOL; (* TRUE = action succesfully, FALSE=Fifo overflow or fifo empty *)
END_VAR

getObj: Empfangene Dateneinheit (ASDU).

bOk: Diese Variable wird TRUE, wenn ein neuer Eintrag erfolgreich hinzugefügt oder aus dem Fifo entfernt wurde. Diese Variable wird FALSE beim Pufferüberlauf und wenn kein Eintrag entfernt werden konnte weil der Fifo bereits leer ist.

Beispiel in ST:

Folgendes Beispielcode (Ausschnitt) demonstriert die Benutzung der Baustein-Aktionen. Alle ~100ms (tCycle) wird eine neue ASDU (M_BO_TB_1) mit der Übertragungsursache: Spontan und Zeitstempel generiert und in den TX-Fifo abgelegt.
Die empfangenen Testkommandos (C_TS_TA_1) und Uhrzeitsynchronisationskommandos (C_CS_NA_1) werden aus dem RX-Fifo entfernt und mit gespiegelten ASDU's beantwortet.

PROGRAM P_SAMPLE_1ms
VAR
    (* TX/RX data buffer *)
    fbBuffer 	: FB_IEC870_5_101TBufferCtrl;
    buffer 		: ST_IEC870_5_101TBuffer := ( asduSize := 253 );

    tCycle 	: TIME := T#100ms;
    timer 	: TON;
    dtStart 	: DT := DT#2006-07-05-12:34:56;

    txAsdu 	: ST_IEC870_5_101AOGen;
    rxAsdu 	: ST_IEC870_5_101AOGen;

    txBSI 	: DWORD := 1;
    txQDS 	: BYTE;
    txTT 	: T_CP56Time2a;
    rxTT 	: T_CP56Time2a;
END_VAR

timer( IN := TRUE, PT := tCycle );
IF timer.Q THEN
    timer( IN := FALSE );

    txAsdu.ident.eType := M_BO_TB_1; (* Bit string with time tag *)
    txAsdu.ident.bSQ := FALSE;
    txAsdu.ident.nObj := 1;
    txAsdu.ident.eCOT := eIEC870_COT_SPONTAN;
    txAsdu.ident.nORG := 1;
    txAsdu.ident.bPN := FALSE;
    txAsdu.ident.bT := FALSE;
    txAsdu.ident.eClass := eIEC870_Class_1;
    txAsdu.ident.asduAddr := 7;
    txAsdu.info.objAddr := 100;

    txBSI := ROL( txBSI, 1); (* Modify bit string value *)
    txQDS.7 := NOT txQDS.7; (* Toggle IV quality flag *)

    (* create dummy time tag *)
    dtStart := dtStart + tCycle;
    txTT := SYSTEMTIME_TO_CP56Time2a( DT_TO_SYSTEMTIME( dtStart ), TRUE );

    F_iecResetStream( 0, txAsdu.info.stream ); (* clear previous data (this sets the stream length = 0 *)
    F_iecCopyBufferToStream( ADR( txBSI ), SIZEOF( txBSI ), txAsdu.info.stream ); (* put BSI to stream *)
    F_iecCopyBufferToStream( ADR( txQDS ), SIZEOF( txQDS ), txAsdu.info.stream ); (* put QDS to stream *)
    F_iecCopyBufferToStream( ADR( txTT ), SIZEOF( txTT ), txAsdu.info.stream ); (* put time tag to stream *)

    fbBuffer.TxAddObj( putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
    IF NOT fbBuffer.bOk THEN
        ;(* Report send buffer overflow error *)
    END_IF
END_IF

REPEAT
fbBuffer.RxRemoveObj( getObj=>rxAsdu, buffer := buffer ); (* Try to remove asdu from RX fifo *)
IF fbBuffer.bOk THEN (* success *)

    CASE rxAsdu.ident.eType OF
    C_TS_TA_1: (* Test command *)

        txAsdu := rxAsdu;
        txAsdu.ident.eCOT := eIEC870_COT_ACT_CON; (* send activation confirmation *)

        fbBuffer.TxAddObj( putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
        IF NOT fbBuffer.bOk THEN
            ;(* Report send buffer overflow error *)
        END_IF

    C_CS_NA_1: (* clock synchronisation *)

        F_iecCopyStreamToBuffer( ADR( rxTT ), SIZEOF( rxTT ), rxAsdu.info.stream );

        (*... *)

        txAsdu := rxAsdu; (* dummy old time value *)
        txAsdu.ident.eCOT := eIEC870_COT_ACT_CON; (* send activation confirmation *)

        fbBuffer.TxAddObj( putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
        IF NOT fbBuffer.bOk THEN
            ;(* Report send buffer overflow error *)
        END_IF

    END_CASE

END_IF
UNTIL NOT fbBuffer.bOk (* RX fifo is empty *)
END_REPEAT

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


FB_IEC870_5_101FBufferCtrl

FUNCTION_BLOCK FB_IEC870_5_101FBufferCtrl

From product version: TwinCAT PLC Library IEC60870-5-101/104 substation v3.0.2 / IEC60870-5-104 controlling station v1.0.2 and higher.

Mit diesem Funktionsbaustein kann der Inhalt des TX/RX-Datenpuffers manipuliert werden, der bei der Kommunikation über das IEC60870-5-104/101 (Low Level) Transport Interface benutzt wird. Zusätzlich werden die zu verschickenden ASDUs (nur TX-Richtung) in die Datei gepuffert wenn die Verbindung zur Zentralstation unterbrochen wurde (im Offline-Mode). Die Funktionalität ähnelt der Funktionalität des FB_IEC870_5_101TBufferCtrl-Funktionsbausteins.

Der Funktionsbaustein besitzt folgende Aktionen:

  • RxRemoveObj (entfernt den ältesten Fifoeintrag aus dem RX-Fifo);
  • RxReset (löscht alle RX-Fifoeinträge, setzt den RX-Fifo zurück);
  • TxAddObj (fügt einen neuen Fifoeintrag in den TX-Fifo);
  • TxReset (löscht alle TX-Fifoeinträge, setzt den TX-Fifo zurück)

Durch den Aufruf der oben aufgelisteten Aktionen kann der Inhalt des TX/RX-Datenpuffers verändert werden.

VAR_IN_OUT

VAR_IN_OUT
    bOnline 	: BOOL; (* TRUE => route frames to the link layer, FALSE => route frames to the file buffer *)
    buffer 	: ST_IEC870_5_101TBuffer; (* TX/RX data buffer *)
END_VAR

bOnline: Über diesen Eingang wird dem Funktionsbaustein mitgeteilt ob die Verbindung sich im Offline oder Online-Mode befindet. TRUE = Online, FALSE = Offline. Im Offline-Mode werden die zu versendenden ASDUs in einer Datei gepuffert. Im Online-Mode werden dann die in der Datei gepufferten ASDUs aus der Datei entfernt und an die Zentralstation verschickt.

buffer: TX/RX-Datenpuffer. Die TX/RX-Pufferparameter (wie z.B. asduSize ) müssen vor der Benutzung konfiguriert werden.

VAR_INPUT

VAR_INPUT
    config 	: ST_IEC870_5_101FBufferCfg; (* File buffer configuration settings *)
    putObj 	: ST_IEC870_5_101AOGen; (* ASDU to send *)
END_VAR

config: Offline-Dateipuffer-Konfigurationseinstellungen.

putObj: Dateneinheit (ASDU), die gesendet werden soll.

VAR_OUTPUT

VAR_OUTPUT
    status 	: ST_IEC870_5_101FBufferStatus; (* File buffer status *)
    getObj 	: ST_IEC870_5_101AOGen; (* received ASDU *)
    bOk 	: BOOL; (* TRUE = action succesfully, FALSE=Fifo overflow or fifo empty *)
END_VAR

status: Offline-Datenpuffer-Statusinformationen.

getObj: Empfangene Dateneinheit (ASDU).

bOk: Diese Variable wird TRUE, wenn ein neuer Eintrag erfolgreich hinzugefügt oder aus dem Fifo entfernt wurde. Diese Variable wird FALSE beim Pufferüberlauf und wenn kein Eintrag entfernt werden konnte weil der Fifo bereits leer ist.

Beispiel in ST:

Folgender Beispielcode (Ausschnitt) demonstriert die Benutzung der Baustein-Aktionen. Alle ~1s (tCycle) wird eine neue ASDU (M_BO_TB_1) mit der Übertragungsursache: Spontan und Zeitstempel generiert und in den TX-Fifo abgelegt.
Die empfangenen Testkommandos (C_TS_TA_1) und Uhrzeitsynchronisationskommandos (C_CS_NA_1) werden aus dem RX-Fifo entfernt und mit gespiegelten ASDUs beantwortet.

Über die VAR_IN_OUT-Variable bOnline wird das Speichern oder Laden der ASDUs in die Datei gesteuert. Bei bOnline = FALSE wird die Datei geöffnet und die anfallenden TX-ASDUs im Hintergrund in die Datei geschrieben. Bei bOnline = TRUE werden die ASDUs aus der Datei im Hintergrund geladen und verschickt. Damit das Speichern und Laden der Pufferdatei im Hintergrund durchgeführt werden kann muss der FB_IEC870_5_101FBufferCtrl-Funktionsbaustein zyklisch aufgerufen werden. Das Hinzufügen neuer TX-ASDUs oder das Bearbeiten alter RX-ASDUs wird von dem Speichern/Laden in/aus der Datei nicht beeinflusst.

PROGRAM P_ProcessSlaveBufferData
VAR_IN_OUT
    bOnline : BOOL;
    buffer : ST_IEC870_5_101TBuffer;
END_VAR
VAR
    asduAddr : DWORD := 7; (* Common asdu address *)

    fbBuffer : FB_IEC870_5_101FBufferCtrl :=( config := ( sPathName := 'c:\tmp\OfflineAsdu.dat',
                            bOverwrite := TRUE,
                        cbBuffer := 16#100000 )); (* RX/TX buffer control function block *)

    txAsdu : ST_IEC870_5_101AOGen; (* asdu to send *)
    txTT : T_CP56Time2a; (* time tag to send *)

    rxAsdu : ST_IEC870_5_101AOGen; (* received asdu *)
    rxTT : T_CP56Time2a; (* received time tag *)

    rxQOI : BYTE; (* qualifier of interrogation command *)
    txBSI : DWORD := 1; (* bit string value *)
    txQDS : BYTE; (* bit string quality descriptor *)
    tCycle : TIME := T#1s;
    bSpont : BOOL := TRUE;
    timer : TON;
    fbRTC : RTC_EX2 := ( EN := TRUE, PDT := ( wYear := 2006, wMonth := 8, wDay := 17, wHour := 12, wMinute := 23 ) );
END_VAR
timer( IN := bSpont, PT := tCycle );
IF timer.Q THEN
    timer( IN := FALSE ); timer( IN := bSpont );

    txBSI := ROL( txBSI, 1); (* Modify bit string value *)
    txQDS.7 := NOT txQDS.7; (* Toggle IV quality flag *)

    (* create dummy time tag *)
    fbRTC();
    txTT := SYSTEMTIME_TO_CP56Time2a( fbRTC.CDT, TRUE );

    (* create asdu *)
    txAsdu.ident.eType := M_BO_TB_1; (* Bit string with time tag *)
    txAsdu.ident.bSQ := FALSE;
    txAsdu.ident.nObj := 1;
    txAsdu.ident.eCOT := eIEC870_COT_SPONTAN;
    txAsdu.ident.nORG := 1;
    txAsdu.ident.bPN := FALSE;
    txAsdu.ident.bT := FALSE;
    txAsdu.ident.eClass := eIEC870_Class_1;
    txAsdu.ident.asduAddr := asduAddr;
    txAsdu.info.objAddr := 100;
    F_iecResetStream( 0, txAsdu.info.stream ); (* clear previous data (this sets the stream length = 0 *)
    F_iecCopyBufferToStream( ADR( txBSI ), SIZEOF( txBSI ), txAsdu.info.stream ); (* put BSI to stream *)
    F_iecCopyBufferToStream( ADR( txQDS ), SIZEOF( txQDS ), txAsdu.info.stream ); (* put QDS to stream *)
    F_iecCopyBufferToStream( ADR( txTT ), SIZEOF( txTT ), txAsdu.info.stream ); (* put time tag to stream *)

    fbBuffer.TxAddObj( bOnline := bOnline, putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
    IF NOT fbBuffer.bOk THEN
        RETURN;
        (* TODO: Report send buffer overflow error *)
    END_IF
END_IF

REPEAT
    fbBuffer.RxRemoveObj( bOnline := bOnline, getObj=>rxAsdu, buffer := buffer ); (* Try to remove asdu from RX fifo *)
    IF fbBuffer.RxRemoveObj.bOk THEN (* success *)
        CASE rxAsdu.ident.eType OF

        C_TS_NA_1: (* Simple test command implementation *)

        txAsdu := rxAsdu;
        txAsdu.ident.eCOT := eIEC870_COT_ACT_CON; (* send activation confirmation *)
        fbBuffer.TxAddObj( bOnline := bOnline, putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
        IF NOT fbBuffer.bOk THEN
            EXIT;
            (* TODO: Report send buffer overflow error *)
        END_IF

        C_CS_NA_1: (* Simple clock synchronisation command implementation *)

        F_iecCopyStreamToBuffer( ADR( rxTT ), SIZEOF( rxTT ), rxAsdu.info.stream );

        (*... *)

        txAsdu := rxAsdu; (* dummy old time value *)
        txAsdu.ident.eCOT := eIEC870_COT_ACT_CON; (* send activation confirmation *)
        fbBuffer.TxAddObj( bOnline := bOnline, putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
        IF NOT fbBuffer.bOk THEN
            EXIT;
            (* TODO: Report send buffer overflow error *)
        END_IF

        C_IC_NA_1: (* Simple interrogation command implementation *)

        txAsdu := rxAsdu;
        txAsdu.ident.eCOT := eIEC870_COT_ACT_CON; (* send activation confirmation *)
        fbBuffer.TxAddObj( bOnline := bOnline, putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
        IF NOT fbBuffer.bOk THEN
            EXIT;
            (* TODO: Report send buffer overflow error *)
        END_IF

        F_iecCopyStreamToBuffer( ADR( rxQOI ), SIZEOF(rxQOI), rxAsdu.info.stream );

        (* create asdu *)
        txAsdu.ident.eType := M_BO_NA_1; (* Bit string without time tag! *)
        txAsdu.ident.bSQ := FALSE;
        txAsdu.ident.nObj := 1;
        txAsdu.ident.eCOT := BYTE_TO_INT( rxQOI );
        txAsdu.ident.nORG := 1;
        txAsdu.ident.bPN := FALSE;
        txAsdu.ident.bT := FALSE;
        txAsdu.ident.eClass := eIEC870_Class_1;
        txAsdu.ident.asduAddr := asduAddr;
        txAsdu.info.objAddr := 100;
        F_iecResetStream( 0, txAsdu.info.stream ); (* clear previous data (this sets the stream length = 0 *)
        F_iecCopyBufferToStream( ADR( txBSI ), SIZEOF( txBSI ), txAsdu.info.stream ); (* put BSI to stream *)
        F_iecCopyBufferToStream( ADR( txQDS ), SIZEOF( txQDS ), txAsdu.info.stream ); (* put QDS to stream *)
        fbBuffer.TxAddObj( bOnline := bOnline, putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
        IF NOT fbBuffer.bOk THEN
            EXIT;
            (* TODO: Report send buffer overflow error *)
        END_IF

        txAsdu := rxAsdu;
        txAsdu.ident.eCOT := eIEC870_COT_ACT_TERM; (* send activation termination *)
        fbBuffer.TxAddObj( bOnline := bOnline, putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)
        IF NOT fbBuffer.bOk THEN
            EXIT;
            (* TODO: Report send buffer overflow error *)
        END_IF

        ELSE
            (* TODO: Report invalid asdu type...*)
            EXIT;
        END_CASE

    END_IF
UNTIL NOT fbBuffer.bOk (* RX fifo is empty *)
END_REPEAT

(* Offline frames are written to the file. Execute this function block in every cycle! *)
fbBuffer(bOnline := bOnline, buffer:= buffer );
IF fbBuffer.status.eState = eIEC870_FBUFFER_ERROR THEN
    (*TODO: Report file access error *)
    ;
END_IF

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1313 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


FB_IEC870_5_101TableEventHandler

FUNCTION_BLOCK FB_IEC870_5_101TableEventHandler

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Hinweis!

Das Auslesen der Ereignisse ist optional und nicht zwingend notwendig. D.h. die SPS-Applikation muss diesen Baustein nicht unbedingt instanzieren. Zur Zeit wird diese Funktionalität nur vom IEC 60870-5-104 Master unterstützt!

Mit diesem Funktionsbaustein kann die SPS-Applikation einige Änderungen in der IEC-Applikationsobjektdatenbank erkennen und, wenn nötig, darauf entsprechend reagieren. Die Änderungen werden als Ereignisse bezeichnet. Jeder Ereignis-Typ wird in einer separaten internen Liste verwaltet. Die SPS-Applikation kann durch den Aufruf der Bausteinaktionen die anstehenden Ereignisse aus einer der Listen auslesen. Da auch mehrere Ereignisse pro SPS-Zyklus auftreten können werden die Ereignisse intern gezählt. Der Zähler wird beim Auftreten eines Ereignisses immer inkrementiert. An dem Bausteinausgang wird nur der letzte Wert und der Zählerstand ausgegeben.

Folgende Ereignisse werden von dem Funktionsbaustein registriert:

  • OnCreate-Ereignisse werden immer dann gemeldet wenn ein neues Applikationsobjekt (Single Point, Double Point, Measured Value...) der Applikationsdatenbank hinzugefügt wurde.
  • OnChange-Ereignisse werden dann gemeldet wenn ein Applikationsobjekt von der unteren Transportschicht empfangen wurde (Rx-Frames) oder verschickt wird (Tx-Frames), unabhängig davon ob sich der Wert des Informationsobjektes tatsächlich geändert hat oder nicht. Bei einem direkten Kommando z.B. C_SC_NA_1 in Steuerungsrichtung (Master->Slave) werden im Normalfall bei folgenden Übertragungsursachen Ereignisse gemeldet: eIEC870_COT_ACT (Aktivierung), eIEC870_COT_ACT_CON (Bestätigung der Aktivierung) und bei eIEC870_COT_TERM (Beendigung der Aktivierung). Bei einem Datenpunkt in Überwachungsrichtung (Slave->Master) z.B. M_SP_NA_1 können bei folgenden Übertragungsursachen Ereignisse gemeldet werden: eIEC870_COT_SPONTAN, eIEC870_COT_INROGEN, eIEC870_COT_BACKGROUND usw.

Der Funktionsbaustein besitzt zwei Aktionen:

  • RemoveOnCreateEvent (Liest einen Eintrag aus der OnCreate-Ereignisliste aus);
  • RemoveOnChangeEvent (Liest einen Eintrag aus der OnChange-Ereignisliste aus);

VAR_IN_OUT

VAR_IN_OUT
    hTable : T_HAODBTable;
END_VAR

hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.

VAR_OUTPUT

VAR_OUTPUT
    bOk 	: BOOL := FALSE;
    getObj 	: ST_IEC870_5_101AOGen;
    getCfg 	: ST_IEC870_5_101AOCfg;
    nEvents 	: DWORD := 0;
END_VAR

bOk: Diese Variable wird TRUE, wenn ein Ereignis erfolgreich ausgelesen wurde. Bei FALSE ist die zuletzt gelesene Ereignisliste leer.

getObj: Der aktuelle Wert der Dateneinheit (ASDU).

getCfg: Die aktuellen Konfigurationsparameter der Dateneinheit (ASDU).

nEvents: Ereignis-Zähler (Multiplikator). Wertebereich: (0 bis 16#FFFFFFFF). Beim Erreichen des Maximalwertes wird nicht mehr inkrementiert.

Beispiel in ST:

Im folgenden Programmausschnitt werden die anstehenden Ereignisse in REPEAT-Schleifen ausgelesen und in Windows Application Log geschrieben. Die gesuchten Datenpunkte sind bereits als Hash-Tabelleneinträge konfiguriert worden. Siehe in der Beschreibung der Funktion: F_iecAddTableEntry.

PROGRAM P_LogEvents
VAR_IN_OUT
    hTable : T_HAODBTable;
END_VAR
VAR
    fbHandler : FB_IEC870_5_101TableEventHandler;
END_VAR
REPEAT
    fbHandler.RemoveOnChangeEvent( hTable := hTable );
    IF fbHandler.bOk THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
            'RemoveOnChangeEvent(), IOA: %s',
            DWORD_TO_STRING( fbHandler.getObj.info.objAddr ) );
    END_IF
UNTIL NOT fbHandler.bOk
END_REPEAT

REPEAT
    fbHandler.RemoveOnCreateEvent( hTable := hTable );
    IF fbHandler.bOk THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
            'RemoveOnCreateEvent(), IOA: %s',
            DWORD_TO_STRING( fbHandler.getObj.info.objAddr ) );
    END_IF
UNTIL NOT fbHandler.bOk
END_REPEAT

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecInitAOEntry

FUNCTION F_iecInitAOEntry

Die Funktion F_iecInitAOEntry konfiguriert die Applikationsobjekte (Single Points, Double Points, Measured Values...) in der Applikationsdatenbank als Linear-Tabelleneinträge. Das zu konfigurierende Tabellenelement (Arrayelement) muss als VAR_IN_OUT-Funktionsparameter an die Funktion übergeben werden.

FUNCTION F_iecInitAOEntry: UDINT

VAR_INPUT
    eType 		: E_IEC870_5_101TcTypeID := ASDU_TYPEUNDEF;
    objAddr 		: DWORD := 0;
    group 		: DWORD := 0;
    multiplier 	: BYTE := 0;
    ioMapType 	: E_IEC870_5_101IOMappingType := MAP_AREA_NONE;
    byteOffs 	: UDINT := 0;
    bitOffs 		: UDINT := 0;
END_VAR
VAR_IN_OUT
    dbEntry 		: ST_IEC870_5_101AODBEntry;
END_VAR

eType: Applikationsobjekt Typ, ASDU identifier (z.B.: M_SP_NA_1 für Single-Point oder M_DP_NA_1 für Double-Point ).

objAddr : Objektadresse, frei wählbar.

group: Object-Group-Konfigurationsflags. Hier finden sie die Beschreibung aller Group-Flags. Die Flags können mit OR-Verknüpfung kombiniert werden. Nicht alle Kombinationen sind aber sinnvoll!

multiplier: Basis-Zykluszeit-Multiplikator für zyklische/periodische Datenübertragung. 0 = Deaktiviert. Die Basis-Zykluszeit kann über den tPerCyclicBase-Parameter in den Systemparametern konfiguriert werden.

ioMapType: TwinCAT SPS-Prozessdatenbereich. Dieser Parameter legt fest wie die TwinCAT SPS und IEC-Applikationsobjekt Prozessdaten gemappt werden sollen.

byteOffs: TwinCAT SPS-Prozessdaten-Byte-Offset.

bitOffs: TwinCAT SPS-Prozessdaten-Bit-Offset.

dbEntry: Das zu konfigurierende Tabellenelement (Arrayelement).

Rückgabeparameter | Beschreibung
0 | Kein Fehler.
<> 0 | Fehler: IEC60870-5-10x Fehlercode

Beispiel in ST:

Im folgenden Beispiel werden drei Datenpunkte als Linear-Tabelleneinträge konfiguriert.

eType | objAddr | group | multiplier | ioMapType | byteOffs | bitOffs
M_SP_NA_1 | 100 | IEC870_GRP_INRO1 | 0 | MAP_AREA_MEMORY | 100 | 0
M_DP_NA_1 | 200 | IEC870_GRP_INROGEN | 0 | MAP_AREA_DATA | 200 | 0
M_IT_NA_1 | 800 | IEC870_GRP_REQCOGEN | 0 | MAP_AREA_MEMORY | 800 | 0
VAR_GLOBAL CONSTANT
    MIN_TABLE_IDX : INT := 0;
    MAX_TABLE_IDX : INT := 49;
END_VAR
PROGRAM P_LinearTableConfig
VAR_IN_OUT
    AODB : ARRAY[MIN_TABLE_IDX..MAX_TABLE_IDX] OF ST_IEC870_5_101AODBEntry;
END_VAR
VAR
    init 		: BOOL := TRUE;
    initError 	: UDINT;
END_VAR
IF init THEN
    init := FALSE;
    initError := F_iecInitAOEntry( 	eType 		:= M_SP_NA_1,
                    objAddr 		:= 100,
                    group 		:= IEC870_GRP_INRO1,
                    multiplier 	:= 0,
                    ioMapType 	:= MAP_AREA_MEMORY,
                    byteOffs 	:= 100,
                    bitOffs 		:= 0,
                    dbEntry 		:= AODB[0] );
    IF initError <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
            'F_iecInitAOEntry() error: %s',
            DWORD_TO_HEXSTR( initError, 8, FALSE ) );
        RETURN;
    END_IF

    initError := F_iecInitAOEntry( 	eType 		:= M_DP_NA_1,
                    objAddr 		:= 200,
                    group 		:= IEC870_GRP_INROGEN,
                    multiplier 	:= 0,
                    ioMapType 	:= MAP_AREA_DATA,
                    byteOffs 	:= 200,
                    bitOffs 		:= 0,
                    dbEntry 		:= AODB[1] );
    IF initError <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
            'F_iecInitAOEntry() error: %s',
            DWORD_TO_HEXSTR( initError, 8, FALSE ) );
        RETURN;
    END_IF

    initError := F_iecInitAOEntry( 	eType 		:= M_IT_NA_1,
                    objAddr 		:= 800,
                    group 		:= IEC870_GRP_REQCOGEN,
                    multiplier 	:= 0,
                    ioMapType 	:= MAP_AREA_MEMORY,
                    byteOffs 	:= 800,
                    bitOffs 		:= 0,
                    dbEntry 		:= AODB[2] );
    IF initError <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
            'F_iecInitAOEntry() error: %s',
            DWORD_TO_HEXSTR( initError, 8, FALSE ) );
        RETURN;
    END_IF

END_IF

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


F_iecSetAOQuality

FUNCTION F_iecSetAOQuality

Mit dieser Funktion können Quality-Flags eines Applikationsobjekts auf einen bestimmten Wert gesetzt/zurückgesetzt werden.

FUNCTION F_iecSetAOQuality: UDINT

VAR_INPUT
    QMsk : DWORD;
END_VAR
VAR_IN_OUT
    dbEntry 	: ST_IEC870_5_101AODBEntry;
    device 	: ST_IEC870_5_101DeviceInterface;
END_VAR

QMsk : Quality-Flags. Die Quality-Flags können mit OR-Verknüpfung kombiniert werden. Bei QMsk = Null werden keine Flags gesetzt/zurückgesetzt. Eine Liste der verfügbaren Quality-Flags finden Sie hier: Quality-Flags.

dbEntry: Applikationsobjekt dessen Status der Quality-Flags gesetzt werden soll.

device: Kommunikationsschnittstelle des IEC-Geräts.

Rückgabeparameter | Bedeutung
0 | Kein Fehler.
<> 0 | Fehler: IEC60870-5-10x Fehlercode

Beispiel für einen Aufruf in ST:

PROGRAM MAIN
VAR
    slave1AODB : ARRAY[1..199] OF ST_IEC870_5_101AODBEntry;

    server1 : FB_IEC870_5_104Slave;
...

    bBlock : BOOL;
    bUnblock : BOOL;
    bIsBlocked : BOOL;
END_VAR

Programmcode:

IF bBlock THEN
    bBlock := FALSE;
    F_iecSetAOQuality( IECQ_BL_ON, slave1AODB[1], server1.system.device );
END_IF

IF bUnblock THEN
    bUnblock := FALSE;
    F_iecSetAOQuality( IECQ_BL_OFF, slave1AODB[1], server1.system.device );
END_IF

bIsBlocked := SEL( ( F_iecGetAOQuality( slave1AODB[1], server1.system.device ) AND IECQ_BL_ON ) = IECQ_BL_ON, FALSE, TRUE );

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


F_iecGetAOQuality

FUNCTION F_iecGetAOQuality

Mit der Funktion kann der Status der Quality-Flags eines Applikationsobjekts gelesen werden.

FUNCTION F_iecGetAOQuality: DWORD

VAR_IN_OUT
    dbEntry 	: ST_IEC870_5_101AODBEntry;
    device	: ST_IEC870_5_101DeviceInterface;
END_VAR

dbEntry : Applikationsobjekt dessen Quality-Flags gelesen werden sollen.

device: Kommunikationsschnittstelle zum IEC-Gerät.

Rückgabeparameter | Bedeutung
0 | Fehler, keine Quality-Flags für dieses Applikationsobjekt verfügbar.
<> 0 | Kein Fehler. Der Rückgabeparameter liefert den Status der Quality-Flags. Eine Liste der verfügbaren Quality-Flags finden Sie hier: Quality-Flags.

Beispiel für einen Aufruf in ST:

PROGRAM MAIN
VAR
    slave1AODB : ARRAY[1..199] OF ST_IEC870_5_101AODBEntry;

    server1 : FB_IEC870_5_104Slave;
...

    bBlock : BOOL;
    bUnblock : BOOL;
    bIsBlocked : BOOL;
END_VAR

Programmcode:

IF bBlock THEN
    bBlock := FALSE;
    F_iecSetAOQuality( IECQ_BL_ON, slave1AODB[1], server1.system.device );
END_IF

IF bUnblock THEN
    bUnblock := FALSE;
    F_iecSetAOQuality( IECQ_BL_OFF, slave1AODB[1], server1.system.device );
END_IF

bIsBlocked := SEL( ( F_iecGetAOQuality( slave1AODB[1], server1.system.device ) AND IECQ_BL_ON ) = IECQ_BL_ON, FALSE, TRUE );
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


F_iecGetAOTimeTag

FUNCTION F_iecGetAOTimeTag

Mit dieser Funktion kann der aktuelle Zeitstempel eines Applikationsobjekts in einen Bytepuffer gelesen werden.

FUNCTION F_iecGetAOTimeTag: UDINT

VAR_INPUT
    pDest 	: DWORD; (* Pointer to time tag destination buffer *)
    cbDest 	: UDINT; (* Byte size of time tag destination buffer *)
END_VAR
VAR_IN_OUT
    dbEntry 	: ST_IEC870_5_101AODBEntry;
END_VAR

pDest : Pufferadresse.

cbDest: Bytegröße des Puffers.

dbEntry: Applikationsobjekt dessen Zeitstempel gelesen werden soll.

Rückgabeparameter | Bedeutung
0 | Fehler, das Applikationsobjekt besitzt keinen Zeitstempel.
<> 0 | Anzahl der erfolgreich kopierten Zeitstempeldatenbytes. Bei einem CP24Time2a-Zeitstempelformat sind es z.B. 3 Bytes und bei einem CP56Time2a-Zeitstempelformat sind es 7 Bytes.

Beispiel für einen Aufruf in ST:

PROGRAM MAIN
VAR
(*...*)
    TT1		: T_CP56Time2a;
    TTSize     	: UDINT;
    bGetTT     	: BOOL;
END_VAR
IF bGetTT THEN
    bGetTT 	:= FALSE;
    TTSize 	:= F_iecGetAOTimeTag( ADR( TT1 ), SIZEOF( TT1 ), slave1AODB[1] );
END_IF
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


F_iecIncVTI

FUNCTION F_iecIncVTI

Diese Funktion inkrementiert den INT7 regelnden Schrittwert. Das transiente Bit wird nicht verändert.

FUNCTION F_iecIncVTI: BOOL

VAR_IN_OUT
    VTI : BYTE;
END_VAR

VTI: Das zu inkrementierende Byte.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


F_iecDecVTI

FUNCTION F_iecDecVTI

Diese Funktion dekrementiert den INT7 regelnden Schrittwert. Das transiente Bit wird nicht verändert.

FUNCTION F_iecDecVTI: BOOL

VAR_IN_OUT
    VTI	: BYTE;
END_VAR

VTI: Das zu dekrementierende Byte.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


SYSTEMTIME_TO_CP56Time2a

FUNCTION SYSTEMTIME_TO_CP56Time2a

Die Funktion konvertiert das Windows-Systemtime Format in das CP56Time2a-Format. Alle reservierten Bits sind Null.

FUNCTION SYSTEMTIME_TO_CP56Time2a: T_CP56Time2a

VAR_INPUT
    TIMESTR	 	: TIMESTRUCT;
    SU 		: BOOL;
END_VAR

TIMESTR : Die zu konvertierende Systemzeit.

SU: Sommer-/Winterzeitformat. Diese Information ist in dem TIMESTR-Format nicht vorhanden und muss zusätzlich angegeben werden. TRUE = Sommerzeit, FALSE = Winterzeit.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


CP56Time2a_TO_SYSTEMTIME

FUNCTION CP56Time2a_TO_SYSTEMTIME

Die Funktion konvertiert das CP56Time2a-Zeitformat in Windows-Systemzeit-Format. Das SU-Flag wird nicht benutzt.

FUNCTION CP56Time2a_TO_SYSTEMTIME: TIMESTRUCT

VAR_INPUT
    CP56Time2a 	: T_CP56Time2a;
    century 		: WORD;
END_VAR

CP56Time2a : Die zu konvertierende Zeit im CP56Time2a-Format.

century: Das Jahrhundert ( z.B. 20 für das Jahr 2005 ). Diese Information ist im CP56Time2a-Format nicht enthalten und aus diesem Grund muss sie zusätzlich angegeben werden.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


CP24IOA_TO_DWORD

FUNCTION CP24IOA_TO_DWORD

Ab der Produktversion: TwinCAT PLC Library: IEC60870-5-104 Unterstation v3.0.0 / IEC60870-5-104 Zentralstation v1.0.0 und höher.

Die Funktion generiert eine strukturierte TwinCAT-Objektadresse (3 oktete). Siehe auch: DWORD_TO_CP24IOA.

FUNCTION CP24IOA_TO_DWORD: DWORD

VAR_INPUT
    objAddr : T_CP24IOA;
END_VAR

objAddr : Parameter der strukturierten TwinCAT-Objektadresse.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


DWORD_TO_CP24IOA

FUNCTION DWORD_TO_CP24IOA

Ab der Produktversion: TwinCAT PLC Library: IEC60870-5-104 Unterstation v3.0.0 / IEC60870-5-104 Zentralstation v1.0.0 und höher.

Die Funktion konvertiert eine strukturierte TwinCAT-Objektadresse in einzelne Adressparameter. Siehe auch: CP24IOA_TO_DWORD.

FUNCTION DWORD_TO_CP24IOA: T_CP24IOA

VAR_INPUT
    objAddr : DWORD(0..16777215);
END_VAR

objAddr : Strukturierte TwinCAT-Objektadresse (3 oktete).

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecCopyBufferToStream

FUNCTION F_iecCopyBufferToStream

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.6 und höher.

Diese Funktion kopiert Datenbytes von einer externen Puffervariablen in die stream-Variable. Der Speicherinhalt der stream-Variablen wird vergrößert. Der Rückgabeparameter der Funktion liefert die Anzahl der erfolgreich kopierten Datenbytes.

FUNCTION F_iecCopyBufferToStream: UDINT

VAR_INPUT
    pBuffer 		: DWORD;
    cbBuffer 	: UDINT;
END_VAR
VAR_IN_OUT
    stream 		: ST_IEC870_5_101Stream;
END_VAR

pBuffer: Pointer (Adresse) einer externen Puffervariablen.

cbBuffer: Anzahl der Datenbytes die von der externen Puffervariablen in die stream-Variable kopiert werden sollen.

stream: Datenpuffer.

Beispiel in ST:

Bei einer steigenden Flanke an der bTx werden 4 Datenbytes der txBuffer-Variablen in die stream-Variable hineinkopiert.

PROGRAM P_CopyBufferToStream
VAR
    stream 	: ST_IEC870_5_101Stream;
    txBuffer : ARRAY[0..3] OF BYTE := 1, 2, 3, 4;
    cbTx 	: UDINT;
    bTx 	: BOOL;
END_VAR

IF bTx THEN
    bTx 	:= FALSE;
    cbTx 	:= cbTx + F_iecCopyBufferToStream( ADR( txBuffer ), SIZEOF( txBuffer ), stream );
    txBuffer[0] := txBuffer[0] + 1;
    txBuffer[1] := txBuffer[1] + 1;
    txBuffer[2] := txBuffer[2] + 1;
    txBuffer[3] := txBuffer[3] + 1;
END_IF

Speicherdarstellung der stream-Variablen vor dem ersten Funktionsaufruf:

length | data
0 | 16#00 | 16#00 | 16#00 | 16#00 | 16#00 | ... | ... | ... | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Speicherdarstellung der stream-Variablen nach dem ersten Funktionsaufruf:

length | data
4 | 16#01 | 16#02 | 16#03 | 16#04 | ... | ... | ... | ... | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Speicherdarstellung der stream-Variablen nach dem zweiten Funktionsaufruf:

length | data
8 | 16#01 | 16#02 | 16#03 | 16#04 | 16#02 | 16#03 | 16#04 | 16#05 | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecCopyStreamToBuffer

FUNCTION F_iecCopyStreamToBuffer

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.6 und höher.

Diese Funktion kopiert Datenbytes von der stream-Variablen in eine externe Puffervariable. Der Speicherinhalt der stream-Variablen bleibt unverändert. Der Rückgabeparameter der Funktion liefert die Anzahl der erfolgreich kopierten Datenbytes.

FUNCTION F_iecCopyStreamToBuffer: UDINT

VAR_INPUT
    pBuffer 	: DWORD;
    cbBuffer	: UDINT;
END_VAR
VAR_IN_OUT
    stream 	: ST_IEC870_5_101Stream;
END_VAR

pBuffer: Pointer (Adresse) einer externen Puffervariablen.

cbBuffer: Maximale Anzahl der Datenbytes die aus der stream-Variablen in den externen Puffer kopiert werden sollen.

stream: Datenpuffer.

Beispiel in ST:

Nach dem Programmstart werden 4 Datenbytes in die stream-Variable kopiert. Bei einer steigenden Flanke am bRx werden die ersten vier Datenbytes der stream-Variablen in die rxBuffer-Variable kopiert.

PROGRAM P_CopyStreamToBuffer
VAR
    stream 	: ST_IEC870_5_101Stream;
    txBuffer	: ARRAY[0..3] OF BYTE := 1, 2, 3, 4;
    cbTx 	: UDINT;
    bTx 	: BOOL := TRUE;

    rxBuffer	: ARRAY[0..3] OF BYTE;
    cbRx 	: UDINT;
    bRx 	: BOOL;
END_VAR
IF bTx THEN
    bTx 	:= FALSE;
    cbTx 	:= cbTx + F_iecCopyBufferToStream( ADR( txBuffer ), SIZEOF( txBuffer ), stream );
    txBuffer[0] := txBuffer[0] + 1;
    txBuffer[1] := txBuffer[1] + 1;
    txBuffer[2] := txBuffer[2] + 1;
    txBuffer[3] := txBuffer[3] + 1;
END_IF

IF bRx THEN
    bRx 	:= FALSE;
    cbRx 	:= F_iecCopyStreamToBuffer( ADR( rxBuffer ), SIZEOF( rxBuffer ), stream );
END_IF

Speicherdarstellung der stream-Variablen nach dem Programmstart:

length | data
4 | 16#01 | 16#02 | 16#03 | 16#04 | ... | ... | ... | ... | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Speicherdarstellung der stream-Variablen nach dem ersten und jedem weiteren F_CopyStreamToBuffer-Funktionsaufruf:

length | data
4 | 16#01 | 16#02 | 16#03 | 16#04 | ... | ... | ... | ... | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecCopyStreamToStream

FUNCTION F_iecCopyStreamToStream

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.6 und höher.

Diese Funktion kopiert Datenbytes von der source-Variablen in die target-Variable. Der Speicherinhalt der source-Variablen bleibt unverändert. Der Speicherinhalt der target-Variablen wird vergrößert. Der Rückgabeparameter der Funktion liefert die Anzahl der erfolgreich kopierten Datenbytes.

FUNCTION F_iecCopyStreamToStream: UDINT

VAR_INPUT
    cbCopy	 	: UDINT;
END_VAR
VAR_IN_OUT
    target 		: ST_IEC870_5_101Stream;
    source 		: ST_IEC870_5_101Stream;
END_VAR

cbCopy: Anzahl der Bytes die von der source-Variablen in die target-Variable kopiert werden sollen.

target: Ziel-Datenpuffer.

source: Quell-Datenpuffer.

Beispiel in ST:

Bei einer steigenden Flanke am bCopy wird zuerst srcValue inkrementiert und in srcStream kopiert. Danach werden die ersten 4 Datenbytes von srcStream nach dstStream kopiert. Zum Schluss werden die ersten 4 Datenbytes von dstStream in die dstValue-Variable kopiert.

PROGRAM P_iecCopyStreamToStream
VAR
    srcStream 	: ST_IEC870_5_101Stream;
    srcValue 	: DWORD;

    dstStream 	: ST_IEC870_5_101Stream;
    dstValue 	: DWORD;

    bCopy 		: BOOL;
END_VAR
IF bCopy THEN
    bCopy := FALSE;
    srcValue := srcValue + 1;

    F_iecCopyBufferToStream( ADR( srcValue ), SIZEOF( srcValue ), srcStream );

    F_iecCopyStreamToStream( SIZEOF( srcValue ), dstStream, srcStream );

    F_iecCopyStreamToBuffer( ADR( dstValue ), SIZEOF( dstValue ), dstStream );

END_IF

Speicherdarstellung der srcStream- und dstStream-Variablen nach dem ersten F_iecCopyStreamToStream-Funktionsaufruf:

srcStream:

length | data
4 | 16#01 | 16#00 | 16#00 | 16#00 | ... | ... | ... | ... | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

dstStream:

length | data
4 | 16#01 | 16#00 | 16#00 | 16#00 | ... | ... | ... | ... | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Speicherdarstellung der srcStream- und dstStream-Variablen nach dem zweiten F_iecCopyStreamToStream-Funktionsbaufruf:

srcStream:

length | data
8 | 16#01 | 16#00 | 16#00 | 16#00 | 16#02 | 16#00 | 16#00 | 16#00 | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

dstStream:

length | data
8 | 16#01 | 16#00 | 16#00 | 16#00 | 16#01 | 16#00 | 16#00 | 16#00 | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecMoveStreamToBuffer

FUNCTION F_iecMoveStreamToBuffer

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.6 und höher.

Diese Funktion kopiert Datenbytes von der stream-Variablen in eine externe Puffervariable und löscht anschließend die kopierten Datenbytes aus der stream-Variablen. Der Speicherinhalt der stream-Variablen wird verkleinert. Der Rückgabeparameter der Funktion liefert die Anzahl der erfolgreich kopierten Datenbytes.

FUNCTION F_iecMoveStreamToBuffer : UDINT

VAR_INPUT
    pBuffer 	: DWORD;
    cbBuffer	: UDINT;
END_VAR
VAR_IN_OUT
    stream 	: ST_IEC870_5_101Stream;
END_VAR

pBuffer: Pointer (Adresse) einer externen Puffervariablen.

cbBuffer: Maximale Anzahl der Datenbytes die aus der stream-Variablen in den externen Puffer kopiert werden sollen.

stream: Datenpuffer.

Beispiel in ST:

Nach dem Programmstart werden zwei DWORD-Werte in die stream-Variable kopiert. Bei einer steigenden Flanke an bRx werden jedes Mal 4 Datenbytes aus der stream-Variablen in die rxBuffer-Variable kopiert.

PROGRAM P_MoveStreamToBuffer
VAR
    stream 	: ST_IEC870_5_101Stream;
    txBuffer	: ARRAY[0..1] OF DWORD := 16#12345678, 16#ABCDEF01;
    cbTx 	: UDINT;
    bTx 	: BOOL := TRUE;

    rxBuffer	: DWORD;
    cbRx 	: UDINT;
    bRx 	: BOOL;
END_VAR
IF bTx THEN
    bTx 	:= FALSE;
    cbTx 	:= F_iecCopyBufferToStream( ADR( txBuffer ), SIZEOF( txBuffer ), stream );
END_IF

IF bRx THEN
    bRx 	:= FALSE;
    cbRx 	:= F_iecMoveStreamToBuffer( ADR( rxBuffer ), SIZEOF( rxBuffer ), stream );
END_IF

Speicherdarstellung der stream-Variablen nach dem Programmstart:

length | data
8 | 16#78 | 16#56 | 16#34 | 16#12 | 16#01 | 16#EF | 16#CD | 16#AB | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Speicherdarstellung der stream-Variablen nach dem ersten F_iecMoveStreamToBuffer-Funktionsaufruf:

length | data
4 | 16#01 | 16#EF | 16#CD | 16#AB | 16#01 | 16#EF | 16#CD | 16#AB | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Speicherdarstellung der stream-Variablen nach dem zweiten F_iecMoveStreamToBuffer-Funktionsaufruf:

length | data
0 | 16#01 | 16#EF | 16#CD | 16#AB | 16#01 | 16#EF | 16#CD | 16#AB | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecMoveStreamToStream

FUNCTION F_iecMoveStreamToStream

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.6 und höher.

Diese Funktion kopiert Datenbytes von der source-Variablen zur target-Variablen und löscht anschließend die kopieren Datenbytes aus der source-Variablen. Der Speicherinhalt der source-Variablen wird verkleinert und der, der target-Variablen vergrößert.

FUNCTION F_iecMoveStreamToStream : UDINT

VAR_INPUT
    cbCopy	: UDINT;
END_VAR
VAR_IN_OUT
    target 	: ST_IEC870_5_101Stream;
    source 	: ST_IEC870_5_101Stream;
END_VAR

cbCopy: Anzahl der Datenbytes die von der source-Variablen in die target-Variablen kopiert werden sollen.

target: Ziel-Datenpuffer.

source: Quell-Datenpuffer.

Beispiel in ST:

In Vorbereitung.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecResetStream

FUNCTION F_iecResetStream

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.6 und höher.

Die Funktion initialisiert und setzt die stream-Variable zurück. Optional kann der interne Datenpuffer der stream-Variablen mit einer bestimmten Anzahl an Null-Bytes initialisiert werden. Der Rückgabewert der Funktion liefert die Anzahl der erfolgreich initialisierten Null-Bytes.

FUNCTION F_iecResetStream: UDINT

VAR_INPUT
    cbLength : UDINT; (* number of init data bytes *)
END_VAR
VAR_IN_OUT
    stream 	: ST_IEC870_5_101Stream;
END_VAR

cbLength: Anzahl der zu initialisierten Null-Bytes.

stream: Variable, die initialisiert werden soll.

Beispiel in ST:

Nach dem Programmstart wird der interne Puffer der stream-Variablen zurückgesetzt und mit 5 Null-Bytes initialisiert.

PROGRAM P_ResetStream
VAR
    stream : ST_IEC870_5_101Stream;
    bReset : BOOL := TRUE;
END_VAR
IF bReset THEN
    bReset := FALSE;
    F_iecResetStream( 5, stream );
END_IF

Speicherinhalt der stream-Variablen nach dem Programmstart:

length | data
5 | 16#00 | 16#00 | 16#00 | 16#00 | 16#00 | ... | ... | ... | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecCreateTableHnd

FUNCTION F_iecCreateTableHnd

Ab Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Die Funktion F_iecCreateTableHnd initialisiert das Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig initialisiert werden.

FUNCTION F_iecCreateTableHnd: UDINT

VAR_INPUT
    pAOEntries 	: POINTER TO ST_IEC870_5_101AODBEntry := 0;
    cbAOEntries 	: UDINT := 0;
END_VAR
VAR_IN_OUT
    hTable 		: T_HAODBTable;
ENd_VAR

pAOEntries: Adresse der Applikationsobjekt-Datenbankvariablen.

cbAOEntries: Bytegröße der Applikationsobjekt-Datenbankvariablen.

hTable: Das zu initialisierende Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle).

Rückgabeparameter | Beschreibung
0 | Kein Fehler.
<> 0 | Fehler: IEC60870-5-10x Fehlercode

Beispiel in ST:

Siehe in der Beschreibung der F_iecAddTableEntry-Funktion.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecAddTableEntry

FUNCTION F_iecAddTableEntry

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Die Funktion F_iecAddTableEntry konfiguriert die Applikationsobjekte (Single Points, Double Points, Measured Values...) in der Applikationsdatenbank als Hash-Tabelleneinträge. Die Funktion sucht automatisch nach einem freien, noch nicht belegten Tabellenelement (Arrayelement) und setzt dessen Konfigurationsparameter.

FUNCTION F_iecAddTableEntry: UDINT

VAR_INPUT
    eType 		: E_IEC870_5_101TcTypeID := ASDU_TYPEUNDEF;
    asduAddr 	: DWORD := 0;
    objAddr 		: DWORD := 0;
    group 		: DWORD := 0;
    multiplier 	: BYTE := 0;
    ioMapType 	: E_IEC870_5_101IOMappingType := MAP_AREA_NONE;
    byteOffs 	: UDINT := 0;
    bitOffs 		: UDINT := 0;
    hUser 		: DWORD := 0;
END_VAR
VAR_IN_OUT
    hTable 		: T_HAODBTable;
ENd_VAR

eType: Applikationsobjekt Typ, ASDU identifier (z.B.: M_SP_NA_1 für Single-Point oder M_DP_NA_1 für Double-Point ).

asduAddr: Gemeinsame ASDU-Adresse.

objAddr: Objektadresse, frei wählbar.

group: Object-Group-Konfigurationsflags. Hier finden sie die Beschreibung aller Group-Flags. Die Flags können mit OR-Verknüpfung kombiniert werden. Nicht alle Kombinationen sind aber sinnvoll!

multiplier: Basis-Zykluszeit-Multiplikator für zyklische/periodische Datenübertragung. 0 = Deaktiviert. Die Basis-Zykluszeit kann über den tPerCyclicBase-Parameter in den Systemparametern konfiguriert werden.

ioMapType: TwinCAT SPS-Prozessdatenbereich. Dieser Parameter legt fest wie die TwinCAT SPS und IEC-Applikationsobjekt Prozessdaten gemappt werden sollen.

byteOffs: TwinCAT SPS-Prozessdaten-Byte-Offset.

bitOffs: TwinCAT SPS-Prozessdaten-Bit-Offset.

hUser: Frei definierbarer 32-Bit-Wert. Dieser Wert wird in den Konfigurationsdaten des Applikationsobjekts abgelegt.

hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.

Rückgabeparameter | Beschreibung
0 | Kein Fehler.
<> 0 | Fehler: IEC60870-5-10x Fehlercode

Beispiel in ST:

Im folgenden Beispiel werden drei Datenpunkte in die Applikationsdatenbank als Hash-Tabelleneinträge hinzugefügt:

eType | asduAddr | objAddr | group | multiplier | ioMapType | byteOffs | bitOffs | hUser
M_SP_NA_1 | 11 | 100 | IEC870_GRP_INRO1 | 0 | MAP_AREA_MEMORY | 100 | 0 | 16#00BECF01
M_DP_NA_1 | 11 | 200 | IEC870_GRP_INROGEN | 0 | MAP_AREA_DATA | 200 | 0 | 16#00BECF02
M_IT_NA_1 | 11 | 800 | IEC870_GRP_REQCOGEN | 0 | MAP_AREA_MEMORY | 800 | 0 | 16#00BECF03
VAR_GLOBAL CONSTANT
    MIN_TABLE_IDX : INT := 0;
    MAX_TABLE_IDX : INT := 49;
END_VAR
PROGRAM P_HashTableConfig
VAR_IN_OUT
    hTable 	: T_HAODBTable;
    AODB 	: ARRAY[MIN_TABLE_IDX..MAX_TABLE_IDX] OF ST_IEC870_5_101AODBEntry;
END_VAR
VAR
    init 	: BOOL := TRUE;
    initError : UDINT;
END_VAR
IF init THEN
    init := FALSE;
    initError := F_iecCreateTableHnd( ADR( AODB ), SIZEOF( AODB ), hTable );
    IF initError <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
            'F_iecCreateTableHnd() error: %s',
            DWORD_TO_HEXSTR( initError, 8, FALSE ) );
        RETURN;
    END_IF
    initError := F_iecAddTableEntry( 	eType 		:= M_SP_NA_1,
                    asduAddr 	:= 11,
                    objAddr		:= 100,
                    group		:= IEC870_GRP_INRO1,
                    multiplier 	:= 0,
                    ioMapType 	:= MAP_AREA_MEMORY,
                    byteOffs 	:= 100,
                    bitOffs 		:= 0,
                    hUser 		:= 16#00BECF01,
                    hTable 		:= hTable );
    IF initError <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
            'F_iecAddTableEntry() error: %s',
            DWORD_TO_HEXSTR( initError, 8, FALSE ) );
        RETURN;
    END_IF

    initError := F_iecAddTableEntry( 	eType 		:= M_DP_NA_1,
                    asduAddr 	:= 11,
                    objAddr 		:= 200,
                    group 		:= IEC870_GRP_INROGEN,
                    multiplier 	:= 0,
                    ioMapType 	:= MAP_AREA_DATA,
                    byteOffs 	:= 200,
                    bitOffs 		:= 0,
                    hUser 		:= 16#00BECF02,
                    hTable 		:= hTable );
    IF initError <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
            'F_iecAddTableEntry() error: %s',
            DWORD_TO_HEXSTR( initError, 8, FALSE ) );
        RETURN;
    END_IF

    initError := F_iecAddTableEntry( 	eType 		:= M_IT_NA_1,
                    asduAddr 	:= 11,
                    objAddr 		:= 800,
                    group 		:= IEC870_GRP_REQCOGEN,
                    multiplier 	:= 0,
                    ioMapType 	:= MAP_AREA_MEMORY,
                    byteOffs 	:= 800,
                    bitOffs 		:= 0,
                    hUser 		:= 16#00BECF03,
                    hTable 		:= hTable );
    IF initError <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
            'F_iecAddTableEntry() error: %s',
            DWORD_TO_HEXSTR( initError, 8, FALSE ) );
        RETURN;
    END_IF
END_IF
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecGetPosOfTableEntry

FUNCTION F_iecGetPosOfTableEntry

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Die Funktion F_iecGetPosOfTableEntry liefert den zum Lookup-Schlüssel passenden Tabellenindex (Arrayindex) eines Hash-Tabelleneintrags. Das erste Arrayelement hat die Positionsnummer eins (non-zero-based array position).

FUNCTION F_iecGetPosOfTableEntry: UDINT

VAR_INPUT
    key : ST_IEC870_5_101HashTableKey;
END_VAR
VAR_IN_OUT
    hTable 	: T_HAODBTable;
ENd_VAR

key: Lookup-Schlüssel.

hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.

Rückgabeparameter | Beschreibung
0 | Es wurde kein zum Schlüssel passender Tabelleneintrag gefunden.
<> 0 | Kein Fehler. Der Rückgabeparameter liefert den gesuchten Tabellenindex (non-zero-based array position).

Beispiel in ST:
Es wird nach dem Linearen-Tabellenindex von drei Datenpunkten gesucht. Die gesuchten Datenpunkte sind bereits als Hash-Tabelleneinträge konfiguriert worden. Siehe in der Beschreibung der Funktion: F_iecAddTableEntry.

eType | objAddr | asduAddr | group
M_SP_NA_1 | 100 | 11 | IEC870_GRP_INRO1
M_DP_NA_1 | 200 | 11 | IEC870_GRP_INROGEN
M_IT_NA_1 | 800 | 11 | IEC870_GRP_REQCOGEN
VAR_GLOBAL CONSTANT
    MIN_TABLE_IDX : INT := 0;
    MAX_TABLE_IDX : INT := 49;
END_VAR
PROGRAM P_GetPosOfTableEntry
VAR_IN_OUT
    hTable 	: T_HAODBTable;
    AODB 	: ARRAY[MIN_TABLE_IDX..MAX_TABLE_IDX] OF ST_IEC870_5_101AODBEntry;
END_VAR
VAR
    bGetPos 	: BOOL;
    position	: UDINT;
    key 	: ST_IEC870_5_101HashTableKey;
    hUser 	: UDINT;
END_VAR
IF bGetPos 	THEN
    bGetPos 		:= FALSE;

    key.eType 	:= M_SP_NA_1;
    key.asduAddr 	:= 11;
    key.objAddr 	:= 100;
    key.group 	:= IEC870_GRP_INRO1;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    position 	:= F_iecGetPosOfTableEntry( key := key, hTable := hTable );
    IF position <> 0 THEN
        hUser := AODB[MIN_TABLE_IDX+position-1].aObj.cfg.hUser;
    ELSE
        ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
        'F_iecGetPosOfTableEntry() error: %s', '' );
    END_IF

    key.eType 	:= M_DP_NA_1;
    key.objAddr 	:= 200;
    key.group 	:= IEC870_GRP_INROGEN;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    position 	:= F_iecGetPosOfTableEntry( key := key, hTable := hTable );
    IF position <> 0 THEN
        hUser := AODB[MIN_TABLE_IDX+position-1].aObj.cfg.hUser;
    ELSE
        ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
        'F_iecGetPosOfTableEntry() error: %s', '' );
    END_IF

    key.eType 	:= M_IT_NA_1;
    key.objAddr 	:= 800;
    key.group 	:= IEC870_GRP_REQCOGEN;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    position 	:= F_iecGetPosOfTableEntry( key := key, hTable := hTable );
    IF position <> 0 THEN
        hUser := AODB[MIN_TABLE_IDX+position-1].aObj.cfg.hUser;
    ELSE
        ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
            'F_iecGetPosOfTableEntry() error: %s', '' );
    END_IF
END_IF
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecLookupTableEntry

FUNCTION F_iecLookupTableEntry

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Die Funktion F_iecLookupTableEntry prüft ob ein zum Schlüssel passender Tabelleneintrag bereits vorhanden ist.

FUNCTION F_iecLookupTableEntry: UDINT

VAR_INPUT
    key : ST_IEC870_5_101HashTableKey;
END_VAR
VAR_IN_OUT
    hTable 	: T_HAODBTable;
ENd_VAR

key: Lookup-Schlüssel.

hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.

Rückgabeparameter | Beschreibung
0 | Kein Fehler. Es existiert ein zum Schlüssel passender Tabelleneintrag.
<> 0 | Es wurde kein Tabelleneintrag gefunden. Fehler: IEC60870-5-10x Fehlercode

Beispiel in ST:

Es wird die Existenz von drei Datenpunkten in der Applikationsdatenbank überprüft. Die gesuchten Datenpunkte sind bereits als Hash-Tabelleneinträge konfiguriert worden. Siehe in der Beschreibung der Funktion: F_iecAddTableEntry.

eType | objAddr | asduAddr | group
M_SP_NA_1 | 100 | 11 | IEC870_GRP_INRO1
M_DP_NA_1 | 200 | 11 | IEC870_GRP_INROGEN
M_IT_NA_1 | 800 | 11 | IEC870_GRP_REQCOGEN
PROGRAM P_LookupEntry
VAR_IN_OUT
    hTable : T_HAODBTable;
END_VAR
VAR
    key : ST_IEC870_5_101HashTableKey;
    bLookup : BOOL;
    nFound : BYTE;
    nError : UDINT;
END_VAR
IF bLookup THEN
    bLookup := FALSE;

    key.eType 	:= M_SP_NA_1;
    key.asduAddr 	:= 11;
    key.objAddr 	:= 100;
    key.group 	:= IEC870_GRP_INRO1;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    nError 		:= F_iecLookupTableEntry( key := key, hTable := hTable );
    IF nError <> 0 THEN
        RETURN;
    ELSE
        nFound := nFound + 1;
    END_IF

    key.eType 	:= M_DP_NA_1;
    key.asduAddr 	:= 11;
    key.objAddr 	:= 200;
    key.group 	:= IEC870_GRP_INROGEN;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    nError 		:= F_iecLookupTableEntry( key := key, hTable := hTable );
    IF nError <> 0 THEN
        RETURN;
    ELSE
        nFound := nFound + 1;
    END_IF

    key.eType 	:= M_IT_NA_1;
    key.asduAddr 	:= 11;
    key.objAddr 	:= 800;
    key.group 	:= IEC870_GRP_REQCOGEN;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    nError 		:= F_iecLookupTableEntry( key := key, hTable := hTable );
    IF nError <> 0 THEN
        RETURN;
    ELSE
        nFound := nFound + 1;
    END_IF
END_IF

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecRemoveTableEntry

FUNCTION F_iecRemoveTableEntry

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Die Funktion F_iecRemoveTableEntry entfernt einen zum Schlüssel passenden Hash-Tabelleneintrag.

FUNCTION F_iecRemoveTableEntry: UDINT

VAR_INPUT
    key : ST_IEC870_5_101HashTableKey;
END_VAR
VAR_IN_OUT
    hTable 	: T_HAODBTable;
ENd_VAR

key: Lookup-Schlüssel.

hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.

Rückgabeparameter | Beschreibung
0 | Kein Fehler, der Tabelleneintrag wurde erfolgreich entfernt.
<> 0 | Fehler: IEC60870-5-10x Fehlercode

Beispiel in ST:

Es werden drei Hash-Tabelleneinträge aus der Applikationsdatenbank entfernt. Die gesuchten Datenpunkte sind bereits als Hash-Tabelleneinträge konfiguriert worden. Siehe in der Beschreibung der Funktion: F_iecAddTableEntry.

eType | objAddr | asduAddr | group
M_SP_NA_1 | 100 | 11 | IEC870_GRP_INRO1
M_DP_NA_1 | 200 | 11 | IEC870_GRP_INROGEN
M_IT_NA_1 | 800 | 11 | IEC870_GRP_REQCOGEN
PROGRAM P_RemoveEntry
VAR_IN_OUT
    hTable : T_HAODBTable;
END_VAR
VAR
    key : ST_IEC870_5_101HashTableKey;
    bRemove : BOOL;
    nError : UDINT;
END_VAR
IF bRemove THEN
    bRemove 		:= FALSE;

    key.eType 	:= M_SP_NA_1;
    key.asduAddr 	:= 11;
    key.objAddr 	:= 100;
    key.group 	:= IEC870_GRP_INRO1;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    nError 		:= F_iecRemoveTableEntry( key := key, hTable := hTable );
    IF nError <> 0 THEN
        RETURN;
    END_IF

    key.eType 	:= M_DP_NA_1;
    key.asduAddr 	:= 11;
    key.objAddr 	:= 200;
    key.group 	:= IEC870_GRP_INROGEN;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    nError 		:= F_iecRemoveTableEntry( key := key, hTable := hTable );
    IF nError <> 0 THEN
        RETURN;
    END_IF

    key.eType 	:= M_IT_NA_1;
    key.asduAddr 	:= 11;
    key.objAddr 	:= 800;
    key.group 	:= IEC870_GRP_REQCOGEN;
    key.lookup 	:= IEC870_LOOKUP_KEY_ALL_ON;
    nError 		:= F_iecRemoveTableEntry( key := key, hTable := hTable );
    IF nError <> 0 THEN
        RETURN;
    END_IF
END_IF

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecCmpAddrOctets

FUNCTION F_iecCmpAddrOctets

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-101/104 Unterstation v3.0.2 / IEC60870-5-104 Zentralstation v1.0.2 und höher.

Diese Funktion vergleicht zwei Adressen (z.B. ldie Verbindungsadresse, Objektadresse oder die gemeinsame ASDU-Adresse).

FUNCTION F_iecCmpAddrOctets: BOOL

VAR_INPUT
    a : DWORD; (* first address *)
    b : DWORD; (* second address *)
    size : INT(0..4); (* address octet size (0..3, 4 = reserved) *)
END_VAR

a: Erste Adresse.

b: Zweite Adresse.

size: Bytegrösse der Adresse.

Rückgabeparameter | Bedeutung
TRUE | (a und b sind gleich) oder (b ist eine Adresse an alle(broadcast)) oder (size ist 0),
FALSE | Alle anderen Fälle.
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1307 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecGetSPI

FUNCTION F_iecGetSPI

Mit dieser Hilfsfunktion kann aus einer Byte-Variablen die Information einer Einzelmeldung (single point information) ausmaskiert werden. In der TwinCAT SPS belegt die Information einer Einzelmeldung 1 Bit an Prozessdaten. In einer Byte-Variablen können somit Informationen von bis zu 8 Einzelmeldungen gemappt werden.

FUNCTION F_iecGetSPI: E_IEC870_5_101SPI

VAR_INPUT
    in : BYTE; (* Byte variable from where the single point information have to be decoded *)
    offset : UDINT(0..7); (* Single point information offset *)
END_VAR

Beispiel:

Die Information der vier Einzelmeldungen wird ausmaskiert.

PROGRAM MAIN
VAR
    memarea AT%MB0 : ARRAY[0..10] OF BYTE;
    eSPI : E_IEC870_5_101SPI;
ENd_VAR
eSPI := F_iecGetSPI( memarea[0], 0 );
eSPI := F_iecGetSPI( memarea[0], 1 );
eSPI := F_iecGetSPI( memarea[0], 2 );
eSPI := F_iecGetSPI( memarea[0], 3 );
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1324 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecGetDPI

FUNCTION F_iecGetDPI

Mit dieser Hilfsfunktion kann aus einer Byte-Variablen die Information einer Doppelmeldung (double point information) ausmaskiert werden. In der TwinCAT SPS belegt die Information einer Doppelmeldung 2 Bit an Prozessdaten. In einer Byte-Variablen kann somit die Information von bis zu 4 Doppelmeldungen gemappt werden.

FUNCTION F_iecGetDPI: E_IEC870_5_101DPI

VAR_INPUT
    in : BYTE; (* Byte variable from where the double point information have to be decoded *)
    offset : UDINT(0..3); (* Double point information offset *)
END_VAR

Beispiel:

Die Information der vier Doppelmeldungen wird ausmaskiert.

PROGRAM MAIN
VAR
    memarea AT%MB0 : ARRAY[0..10] OF BYTE;
    eDPI : E_IEC870_5_101DPI;
ENd_VAR
eDPI := F_iecGetDPI( memarea[0], 0 );
eDPI := F_iecGetDPI( memarea[0], 1 );
eDPI := F_iecGetDPI( memarea[0], 2 );
eDPI := F_iecGetDPI( memarea[0], 3 );

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1324 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecGetSCS

FUNCTION F_iecGetSCS

Mit dieser Hilfsfunktion kann aus einer Byte-Variablen der Status eines Einzelbefehls (single command state) ausmaskiert werden. In der TwinCAT SPS belegt der Status eines Einzelbefehls 1 Bit an Prozessdaten. In einer Byte-Variablen kann somit der Status von bis zu 8 Einzelbefehlen gemappt werden.

FUNCTION F_iecGetSCS: E_IEC870_5_101SCS

VAR_INPUT
    in : BYTE;(* Byte variable from where the single command state have to be decoded *)
    offset : UDINT(0..7); (* Single command state offset *)
END_VAR

Beispiel:

Der Status der vier Einzelbefehle wird ausmaskiert.

PROGRAM MAIN
VAR
    memarea AT%MB0 : ARRAY[0..10] OF BYTE;
    eSCS : E_IEC870_5_101SCS;
ENd_VAR
eSCS := F_iecGetSCS( memarea[0], 0 );
eSCS := F_iecGetSCS( memarea[0], 1 );
eSCS := F_iecGetSCS( memarea[0], 2 );
eSCS := F_iecGetSCS( memarea[0], 3 );
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1324 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecGetDCS

FUNCTION F_iecGetDCS

Mit dieser Hilfsfunktion kann aus einer Byte-Variablen der Status eines Doppelbefehls (double command state) ausmaskiert werden. In der TwinCAT SPS belegt der Status eines Doppelbefehls 2 Bit an Prozessdaten. In einer Byte-Variablen kann somit der Status von bis zu 4 Doppelbefehlen gemappt werden.

FUNCTION F_iecGetDCS: E_IEC870_5_101DCS

VAR_INPUT
    in : BYTE; (* Byte variable from where the double command state have to be decoded *)
    offset : UDINT(0..3); (* Double command state offset *)
END_VAR

Beispiel:

Der Status der vier Doppelbefehle wird ausmaskiert.

PROGRAM MAIN
VAR
    memarea AT%MB0 : ARRAY[0..10] OF BYTE;
    eDCS : E_IEC870_5_101DCS;
ENd_VAR
eDCS := F_iecGetDCS( memarea[0], 0 );
eDCS := F_iecGetDCS( memarea[0], 1 );
eDCS := F_iecGetDCS( memarea[0], 2 );
eDCS := F_iecGetDCS( memarea[0], 3 );

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1324 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecSetSPI

FUNCTION F_iecSetSPI

Diese Hilfsfunktion kopiert die Information einer Einzelmeldung (single point information) in eine Byte-Variable. In der TwinCAT SPS belegt die Information einer Einzelmeldung 1 Bit an Prozessdaten. In einer Byte-Variablen können somit Informationen von bis zu 8 Einzelmeldungen gemappt werden.

FUNCTION F_iecSetSPI: BYTE

VAR_INPUT
    in : BYTE; (* Byte variable where the new single point information have to be encoded. *)
    offset : UDINT(0..7);(* Single point information offset. *)
    eSPI : E_IEC870_5_101SPI; (* The new value of single point information. *)
END_VAR

Beispiel:

Die Information der vier Einzelmeldungen wird auf ON gesetzt.

PROGRAM MAIN
VAR
    memarea AT%MB0 : ARRAY[0..10] OF BYTE;
END_VAR
memarea[0] := F_iecSetSPI( memarea[0], 0, eIEC870_SPI_ON );
memarea[0] := F_iecSetSPI( memarea[0], 1, eIEC870_SPI_ON );
memarea[0] := F_iecSetSPI( memarea[0], 2, eIEC870_SPI_ON );
memarea[0] := F_iecSetSPI( memarea[0], 3, eIEC870_SPI_ON );

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1324 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecSetDPI

FUNCTION F_iecSetDPI

Diese Hilfsfunktion kopiert die Information einer Doppelmeldung (double point information) in eine Byte-Variable. In der TwinCAT SPS belegt die Information einer Doppelmeldung 2 Bit an Prozessdaten. In einer Byte-Variablen kann somit die Information von bis zu 4 Doppelmeldungen gemappt werden.

FUNCTION F_iecSetDPI: BYTE

VAR_INPUT
    in : BYTE; (* Byte variable where the new double point information have to be encoded. *)
    offset : UDINT(0..3);(* Double point information offset. *)
    eDPI : E_IEC870_5_101DPI; (* The new value of double point information. *)
END_VAR

Beispiel:

Die Information der vier Doppelmeldungen wird auf ON gesetzt.

PROGRAM MAIN
VAR
    memarea AT%MB0 : ARRAY[0..10] OF BYTE;
END_VAR
memarea[0] := F_iecSetDPI( memarea[0], 0, eIEC870_DPI_ON );
memarea[0] := F_iecSetDPI( memarea[0], 1, eIEC870_DPI_ON );
memarea[0] := F_iecSetDPI( memarea[0], 2, eIEC870_DPI_ON );
memarea[0] := F_iecSetDPI( memarea[0], 3, eIEC870_DPI_ON );

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1324 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecSetSCS

FUNCTION F_iecSetSCS

Diese Hilfsfunktion kopiert den Status eines Einzelbefehls (single command state) in eine Byte-Variable. In der TwinCAT SPS belegt der Status eines Einzelbefehls 1 Bit an Prozessdaten. In einer Byte-Variablen kann somit der Status von bis zu 8 Einzelbefehlen gemappt werden.

FUNCTION F_iecSetSCS: BYTE

VAR_INPUT
    in : BYTE; (* Byte variable where the new single command state have to be encoded. *)
    offset : UDINT(0..7);(* Single command state offset. *)
    eSCS : E_IEC870_5_101SCS; (* The new value of single command state. *)
END_VAR

Beispiel:

Der Status der vier Einzelbefehle wird auf ON gesetzt.

PROGRAM MAIN
VAR
    memarea AT%MB0 : ARRAY[0..10] OF BYTE;
END_VAR
memarea[0] := F_iecSetSCS( memarea[0], 0, eIEC870_SCS_ON );
memarea[0] := F_iecSetSCS( memarea[0], 1, eIEC870_SCS_ON );
memarea[0] := F_iecSetSCS( memarea[0], 2, eIEC870_SCS_ON );
memarea[0] := F_iecSetSCS( memarea[0], 3, eIEC870_SCS_ON );

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1324 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecSetDCS

FUNCTION F_iecSetDCS

Diese Hilfsfunktion kopiert den Status eines Doppelbefehls (double command state) in eine Byte-Variable. In der TwinCAT SPS belegt der Status eines Doppelbefehls 2 Bit an Prozessdaten. In einer Byte-Variablen kann somit der Status von bis zu 4 Doppelbefehlen gemappt werden.

FUNCTION F_iecSetDCS: BYTE

VAR_INPUT
    in : BYTE; (* Byte variable where the new double command state have to be encoded. *)
    offset : UDINT(0..3);(* Double command state offset. *)
    eDCS : E_IEC870_5_101DCS; (* The new value of double command state *)
END_VAR

Beispiel:

Der Status der vier Doppelbefehle wird auf ON gesetzt.

PROGRAM MAIN
VAR
    memarea AT%MB0 : ARRAY[0..10] OF BYTE;
END_VAR
memarea[0] := F_iecSetDCS( memarea[0], 0, eIEC870_DCS_ON );
memarea[0] := F_iecSetDCS( memarea[0], 1, eIEC870_DCS_ON );
memarea[0] := F_iecSetDCS( memarea[0], 2, eIEC870_DCS_ON );
memarea[0] := F_iecSetDCS( memarea[0], 3, eIEC870_DCS_ON );
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1324 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_iecChangeLinkLayerMode

FUNCTION F_iecChangeLinkLayerMode

Ab der Produktversion:

  • TwinCAT PLC Library IEC60870-5-101 Zentralstation v2.0.3;
  • TwinCAT PLC Library IEC60870-5-101 Unterstation v4.0.3;
  • TwinCAT PLC Library IEC60870-5-102 Zentralstation v2.0.3;
  • TwinCAT PLC Library IEC60870-5-103 Zentralstation v2.0.3;

Mit dieser Funktion kann das Defaultverhalten jedes einzelnen ASDU-Frames auf der Link-Layer-Ebene in der Primärstation festgelegt bzw. verändert werden. Das zu versendende ASDU-Frame kann als SEND/NO REPLY-Frame (Funktion 4) oder Broadcast-Frame gekennzeichnet werden. Die Kennzeichnung der Frames erfolgt vor dem Ablegen des Frames in dem TX-Puffer. D.h. vor dem Aufruf der FB_IEC870_5_101TBufferCtrl.TxAddObj-Aktion.

Wenn Sie die Funktion nicht verwenden, dann werden in der Primärstation alle Frames als SEND/CONFIRM-Frames (Funktion 3) versendet. Als Linkadresse wird in diesem Fall die konfigurierte Stationsadresse verwendet.

Wichtige Hinweise:

  • Im Unbalanced-Modus hat die Verwendung dieser Funktion in der Unterstation keine Bedeutung. Die Unterstation agiert in diesem Modus niemals als Primärstation.
  • Bei der Verwendung des IEC 6087-5-104 Protokolls hat die Funktion keine Bedeutung.
  • Diese Funktionalität wird nur bei der Verwendung der "Low level"-Schnittstelle unterstützt.

FUNCTION F_iecChangeLinkLayerMode: BOOL

VAR_INPUT
    sendNoReplay : BOOL;(* TRUE => Use SEND / NO REPLAY link layer function, FALSE => Use SEND/CONFIRM function (default) *)
    globalLinkAddr : BOOL;(* TRUE => Use global (broadcast link address, 0xFF... ), FALSE => Use configured (station) link address *)
END_VAR
VAR_IN_OUT
    asdu : ST_IEC870_5_101AOGen;
END_VAR

sendNoReplay : Dieser Parameter legt fest ob beim Versenden des Frames die Link-Layer-Funktion: SEND/NO REPLY (TRUE = Funktion 4) oder SEND/CONFIRM (FALSE = Funktion 3) verwendet werden soll;

globalLinkAddr : Dieser Parameter legt fest ob beim Versenden des Frames statt der konfigurierten Stations-Linkadresse eine globale (Broadcast) Adresse verwendet werden soll. Beim Wert TRUE wird als Linkadresse im gesendeten Frame 16#FF bzw. 16#FFFF verwendet (one octet size, two octets size link address);

asdu : Das zu versendende ASDU-Frame als VAR_IN_OUT-Variable;

Rückgabeparameter | Beschreibung
FALSE | Funktion fehlgeschlagen.
TRUE | Kein Fehler.

Beispiel 1 (Ausschnitt)

Die spontanen Daten eines Bitstrings sollen mit der Hilfe der Funktion SEND/NO REPLY an die Zentralstation gesendet werden (Balanced-Mode).

...

(* Send spontanous bitstring data *)
IF ( txQDS <> BITSTRING_QUALITY_100 ) OR ( txBSI <> BITSTRING_100 ) THEN

    txBSI	:= BITSTRING_100;
    txQDS 	:= BITSTRING_QUALITY_100;(* Get quality *)
    txTT	:= SYSTEMTIME_TO_CP56Time2a( fbRTC.CDT, TRUE );(* Get current time stamp *)

    (* create asdu *)
    txAsdu.ident.eType 	:= M_BO_TB_1;  (* Bit string with time tag *)
    txAsdu.ident.bSQ 		:= FALSE;
    txAsdu.ident.nObj 	:= 1;
    txAsdu.ident.eCOT 	:= eIEC870_COT_SPONTAN;
    txAsdu.ident.nORG 	:= sysPara.nOrg;(* Set originator address *)
    txAsdu.ident.bPN 		:= FALSE;
    txAsdu.ident.bT 		:= FALSE;
    txAsdu.ident.eClass 	:= eIEC870_Class_1;(* Put to the high priority tx buffer *)
    txAsdu.ident.asduAddr 	:= sysPara.asduAddr;(* Set common asdu address *)
    txAsdu.info.objAddr	:= 100;(* Set information object address *)
    F_iecResetStream( 0, txAsdu.info.stream ); (* clear previous data (this sets the stream length = 0 *)
    F_iecCopyBufferToStream( ADR( txBSI ), SIZEOF( txBSI ), txAsdu.info.stream ); (* put BSI to stream *)
    F_iecCopyBufferToStream( ADR( txQDS ), SIZEOF( txQDS ), txAsdu.info.stream ); (* put QDS to stream *)
    F_iecCopyBufferToStream( ADR( txTT ), SIZEOF( txTT ), txAsdu.info.stream ); (* put time tag to stream *)

    F_iecChangeLinkLayerMode( TRUE, FALSE, txAsdu );

    fbBuffer.TxAddObj( putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)

    F_iecChangeLinkLayerMode( FALSE, FALSE, txAsdu );

    IF fbBuffer.bOk THEN
        fbLog( put := CONCAT( '<=', IEC101ASDU_TO_STRING(txAsdu) ) );
    ELSE(* Report send buffer overflow error *)
        fbLog( put := 'TX buffer overflow (spontanous bitstring data)!' );
    END_IF
END_IF

...

Die txAsdu-Variable wird zum Versenden weiterer Datenpunkte verwendet. Die Default-Konfiguration des txAsdu-Frames wird durch einen weiteren F_iecChangeLinkLayerMode(FALSE, FALSE, ...)-Funktionsaufruf hergestellt. Andere ASDUs sollen nicht als SEND/NO REPLY-Telegramme gesendet werden.

Beispiel 2 (Ausschnitt)

Ein Einzelbefehl soll mit der Hilfe der Funktion SEND/NO REPLAY an die Unterstation gesendet werden (Unbalanced-Mode).

...

(* Send one single command *)
IF SND_SCS_2100 THEN
    SND_SCS_2100 := FALSE; (* Reset flag *)

    txAsdu.ident.eType 	:= C_SC_NA_1; (* Single command *)
    txAsdu.ident.bSQ 		:= FALSE;
    txAsdu.ident.nObj 	:= 1;
    txAsdu.ident.eCOT 	:= eIEC870_COT_ACT; (* Command activation *)
    txAsdu.ident.nORG 	:= sysPara.nOrg;(* Set originator address *)
    txAsdu.ident.bPN 		:= FALSE;
    txAsdu.ident.bT 		:= FALSE;
    txAsdu.ident.eClass 	:= eIEC870_Class_1;(* Put to the high priority tx buffer *)
    txAsdu.ident.asduAddr 	:= sysPara.asduAddr;(* Set common asdu address *)
    txAsdu.info.objAddr	:= 2100;(* Set information object address *)
    tmpByte 			:= INT_TO_BYTE(SCS_2100);(* Set single command state *)
    tmpByte.7 		:= 0;(* Set select/execute bit *)

    F_iecResetStream( 0, txAsdu.info.stream ); (* Clear previous data (this sets the stream length = 0 *)
    F_iecCopyBufferToStream( ADR( tmpByte ), SIZEOF( tmpByte ), txAsdu.info.stream ); (* put QCC to stream *)

    F_iecChangeLinkLayerMode( TRUE, FALSE, txAsdu );

    fbBuffer.TxAddObj( putObj := txAsdu, buffer := buffer ); (* put asdu to the TX fifo *)

    F_iecChangeLinkLayerMode( FALSE, FALSE, txAsdu );

    IF fbBuffer.bOk THEN
        timerCON( IN := FALSE );(* Reset timer *)
        timerTERM( IN := FALSE );(* Reset timer *)
        fbLog( put := CONCAT( '<=', IEC101ASDU_TO_STRING(txAsdu) ) );
        state := 80;(* Wait for command confirmation *)
    ELSE(* Report send buffer overflow error *)
        fbLog( put := 'TX buffer overflow (single command)!' );
        state := 1;
    END_IF

END_IF

...

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.11.0 Build >= 1554 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


F_GetVersionTcIEC870_5_101

FUNCTION F_GetVersionTcIEC870_5_101

Mit dieser Funktion können Versionsinformationen der SPS-Bibliothek ausgelesen werden.

FUNCTION F_GetVersionTcIEC870_5_101: UINT

VAR_INPUT
    nVersionElement : INT;
END_VAR

nVersionElement : Versionselement, das gelesen werden soll. Mögliche Parameter:

  • 1 : major number;
  • 2 : minor number;
  • 3 : revision number;
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101TBuffer

TYPE ST_IEC870_5_101TBuffer

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.6 / IEC60870-5-101 Unterstation v2.0.2 und höher.

Diese Datenstruktur wird beim Datenaustausch (TX/RX-Datenpuffer) über das IEC60870-5-104/101 Transport Interface benutzt.

TYPE ST_IEC870_5_101TBuffer :
STRUCT
    eDbg 		: E_IEC870_5_101FifoDbgFlags :=eIEC870_FIFO_DBG_OFF; (* enable/disable log view hex output *)
    asduFmt 		: ST_IEC870_5_101AsduFmtParams; (* ASDU frame format parameters *)
    asduSize 		: BYTE := 0; (* max. length of ASDU data *)
    mode		: DWORD := 0;
    dataLink 		: ST_IEC870_5_101DataLink; (* internal tx/rx buffer *)
    bOverwrite 	: BOOL := FALSE;(* TRUE = Overwrite oldest entry, FALSE = don't overwrite *)
END_STRUCT
END_TYPE

eDbg: Debug-Ausgabe-Parameter.

asduFmt: ASDU-Formatparameter.

asduSize: Maximale Bytelänge der ASDU.

mode: Reserviert, wird zur Zeit nicht benutzt. Dieser Wert sollte Null sein.

dataLink: Auf die Elemente dieser Datenstruktur sollte nicht direkt, sondern nur mit einer Instanz des FB_IEC870_5_101TBufferCtrl-Funktionsbausteins zugegriffen werden.

Der TX/RX-Datenpuffer verwendet intern zwei Sende-Fifos und einen Empfangs-Fifo:

  1. Class 1 Sende-Fifo mit (hochprioren) Daten;
  2. Class 2 Sende-Fifo mit (niederprioren) Daten;
  3. Receive-Fifo (für Class 1 und Class 2 Daten);

Die unteren Transportfunktionen der Bibliothek leeren zuerst den Class 1-Fifo und dann den Class 2-Fifo. Die Class 2 Daten werden nur dann versendet wenn der Class 1-Fifo keine zu versendenden Daten enthält.

Jeder der internen Fifos hat eine feste Größe von 10000 Bytes. Dies dürfte für die meisten Anwendungen ausreichen, weil die Anzahl der Frames die einmalig verschickt werden können durch die iK und iW-Protokollparameter begrenzt wird. Erfahrungsgemäß können in jedem Fifo ca. 200 ASDUs mit einem Informations-Element (Objekt) oder ca. 20 ASDUs mit einer Sequence von 100 Informations-Elementen (Objekten) abgelegt werden.

Wenn eine größere Anzahl der zu versendenden oder zu empfangenen Frames zwischengespeichert werden soll (z.B. ~20000), so können diese in externen, vom SPS-Programmierer festgelegten Puffern/Fifos zwischengehalten werden. Die SPS-Applikation kann dann zur Laufzeit die TwinCAT-Sende-Fifos mit den eigenen Fifo-Einträgen nachfüllen oder bei vielen empfangenen Frames den TwinCAT-Receive-Fifo leeren. Eine andere Möglichkeit ist z.B. zwei Puffer zu benutzen und diese abwechselnd zu füllen/lesen und an den Kommunikationsbaustein übergeben.

bOverwrite: Implementiert ab IEC870-5-104 Slave Library v3.0.14 und höher. Aktiviert/deaktiviert das Überschreiben der ältesten Meldungen im Sendepuffer bei der Überschreitung der max. zulässigen Puffergröße. Dieser Parameter sollte nur im Offline-Mode aktiviert werden (d.h. wenn die Verbindung unterbrochen wurde) und wenn Offline-Datenspeicherung zusätzlich über den bRetainBuffer-Parameter in den Protokollparametern (ST_IEC870_5_10xProtPara) aktiviert wurde. Im Online-Mode (d.h. wenn der Datentransfer gestartet wurde) sollten keine älteren Meldungen überschrieben werden (sonst fehlen möglicherweise einige Zwischenwerte).

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101AODBEntry

TYPE ST_IEC870_5_101AODBEntry

TYPE ST_IEC870_5_101AODBEntry :
STRUCT
    aObj : ST_IEC870_5_101AOEntry; 	(* application object *)
    ctrl : FB_IEC870_5_101AOCtrl; 	(* application object control function *)
END_STRUCT
END_TYPE

Ein IEC Applikationsobjekt-Datenbankeintrag. Die IEC-Applikationsobjekt Datenbank wird als Array-Variable von Typ ST_IEC870_5_101AODBEntry deklariert. Die Membervariablen dieses strukturierten Typs werden nicht direkt, sondern nur mit Hilfe der zur Verfügung stehenden Funktionen oder Funktionsbausteine verändert. Die F_iecIniAOEntry gehört z.B. zu einer solchen Funktion.

Beispiel für eine Deklaration von einer Applikationsdatenbank mit 2001 Objekten:

VAR_GLOBAL
    slave1AODB : ARRAY[0..2000] OF ST_IEC870_5_101AODBEntry;
ENd_VAR
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101AOGen

TYPE ST_IEC870_5_101AOGen

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v2.0.5 und höher.

Variablen von diesem Typ repräsentieren ein ASDU-Objekt.

TYPE ST_IEC870_5_101AOGen:
STRUCT
    head : ST_IEC870_5_101FifoHead :=(	source := ( link := 0, addr := 0 ),
                    target := ( link := 0, addr := 0 ),
                    ctrl := 0 ); (* Header *)

    ident 	: ST_IEC870_5_101DataUnit_Ident := ( eType 	:= ASDU_TYPEUNDEF,
                        nObj 	:= 0,
                        bSQ 	:= FALSE,
                        bT 		:= FALSE,
                        bPN 	:= FALSE,
                        nORG 	:= 0,
                        asduAddr	:= 0,
                        eCOT 	:= eIEC870_COT_UNUSED,
                        eClass 	:= eIEC870_Class_None ); (* Data unit identifier *)

    info 	: ST_IEC870_5_101AOInfoObj	:= ( objAddr := 0, stream := ( length := 0 ) ); (* information object *)
END_STRUCT
END_TYPE

head: Header (reserviert).

ident:Identifikationsfelder der Dateneinheit (ASDU).

info: Informationsobjekt-/Informationselement-Datenfeld.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101AOCfg

TYPE ST_IEC870_5_101AOCfg

Ab der Produktversion: TwinCAT PLC Library: IEC60870-5-104 Unterstation v3.0.0 / IEC60870-5-104 Zentralstation v1.0.0 und höher.

ASDU-Objekt-Konfigurationsparameter. Diese Parameter werden während der Konfiguration der Datenpunkte ( F_iecInitAOEntry oder F_iecAddTableEntry ) gesetzt und sollten nicht direkt aus der SPS-Applikation beschrieben werden.

TYPE ST_IEC870_5_101AOCfg:
STRUCT
    group 		: DWORD := IEC870_GRP_INROGEN;
    multiplier 	: BYTE := 0;
    opt 		: BYTE := 0;
    ioMapType 	: E_IEC870_5_101IOMappingType := MAP_AREA_NONE;
    byteOffs 	: DWORD := 0;
    bitOffs 		: DWORD := 0;
    hUser 		: DWORD := 0;
    ext 		: DWORD := 0;
END_STRUCT
END_TYPE

group: Object-Group-Konfigurationsflags. Hier finden Sie die Beschreibung aller Group-Flags. Die Flags können mit OR-Verknüpfung kombiniert werden. Nicht alle Kombinationen sind aber sinnvoll!

multiplier: Basis-Zykluszeit-Multiplikator für zyklische/periodische Datenübertragung. 0 = Deaktiviert. Die Basis-Zykluszeit kann über den tPerCyclicBase-Parameter in den Systemparametern konfiguriert werden.

opt: Reserviert.

ioMapType: TwinCAT SPS-Prozessdatenbereich. Dieser Parameter legt fest wie die TwinCAT SPS und IEC-Applikationsobjekt Prozessdaten gemappt werden sollen.

byteOffs: TwinCAT SPS-Prozessdaten-Byte-Offset.

bitOffs: TwinCAT SPS-Prozessdaten-Bit-Offset.

hUser: Benutzer-Handle. Frei definierbarer 32-Bit-Wert.

ext: Reserviert.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101DataUnit_Ident

TYPE ST_IEC870_5_101DataUnit_Ident

Identifikationsfeld der Dateneinheit (ASDU).

TYPE ST_IEC870_5_101DataUnit_Ident:
STRUCT
    eType 	: E_IEC870_5_101TcTypeID; (* TwinCAT ASDU type identifier *)
    bSQ 	: BOOL; (* Single/Sequence *)
    nObj 	: BYTE; (* Number of information objects or elements *)
    bT 	: BOOL; (* Test bit *)
    bPN 	: BOOL; (* Positive/Negative confirmation *)
    eCOT 	: E_IEC870_5_101COTType; (* Cause of transmission *)
    nORG 	: BYTE; (* Originator address (optional) *)
    asduAddr	: DWORD; (* Common address of ASDU *)
    eClass 	: E_IEC870_5_101ClassType; (* Object class *)
END_STRUCT
END_TYPE

eType: Typ.

bSQ: Sequence-Flag.

nObj: Anzahl der Informationsobjekte oder Informationselemente.

bT: Test-Flag

bPN: Positive/negative Bestätigung.

eCOT: Übertragungsursache.

nORG: Quelladresse.

asduAddr: Gemeinsame ASDU-Adresse

eClass: Prioritätsklasse.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101AOInfoObj

TYPE ST_IEC870_5_101AOInfoObj

Informationsobjektbeschreibung.

TYPE ST_IEC870_5_101AOInfoObj :
STRUCT
    objAddr 	: DWORD; (* Information object address *)
    stream 	: ST_IEC870_5_101Stream; (* Information element of max. length *)
END_STRUCT
END_TYPE

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101Stream

TYPE ST_IEC870_5_101Stream

Variablen von diesem Typ werden als Datenpuffer (Stream) benutzt. Im Stream werden "rohe" Datenbytes zwischengespeichert, mit der Reihenfolge, wie sie später verschickt werden sollen oder wie sie empfangen wurden. Beim Senden oder Empfang wird zuerst das Datenbyte Null verschickt bzw. empfangen.

TYPE ST_IEC870_5_101Stream :
STRUCT
    length 	: DWORD := 0; (* current stream length *)
    data 	: ARRAY[0..IEC870_MAX_ASDU_DATA_BYTE] OF BYTE; (* stream data *)
END_STRUCT
END_TYPE

length: Aktuelle Anzahl der Datenbytes im Stream;

data: Stream-Datenpuffer;

Speicherdarstellung einer Stream-Variablen mit einer zwischengespeicherten DWORD-Variablen mit dem Wert: 16#BECF1234. Beachten Sie die vertauschen Datenbytes im Intel-Format!

length | data
4 | 16#34 | 16#12 | 16#CF | 16#BE | ... | ... | ... | ... | ... | ... | ... | IEC870_MAX_ASDU_DATA_BYTE

Benutzen Sie die in der Tabelle aufgeführten Funktionen um den Speicherinhalt einer Stream-Variablen zu verändern:

Function | Description
F_iecResetStream | Stream-Initialisierung/-Reset.
F_iecCopyBufferToStream | Kopiert Datenbytes von einer externen Puffervariablen in den Stream. Der Speicherinhalt der Stream-Variablen wird vergrößert.
F_iecCopyStreamToBuffer | Kopiert Datenbytes vom Stream in eine externe Puffervariable. Der Speicherinhalt der Stream-Variablen bleibt unverändert.
F_iecCopyStreamToStream | Kopiert Datenbytes von einem Stream zum anderen Stream. Der Speicherinhalt der Quell-Variablen bleibt unverändert. Der Speicherinhalt der Ziel-Variablen wird vergrößert.
F_iecMoveStreamToBuffer | Kopiert Datenbytes vom Stream in eine externe Puffervariable und löscht anschließend die kopierten Datenbytes im Stream. Der Speicherinhalt der Stream-Variablen wird verkleinert.
F_iecMoveStreamToStream | Kopiert Datenbytes vom Quell-Stream zum Ziel-Stream und löscht anschließend die kopieren Datenbytes im Quell-Stream. Der Speicherinhalt der Quell-Variablen wird verkleinert und der Ziel-Variablen vergrößert.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101SystemParams

TYPE ST_IEC870_5_101SystemParams

TYPE ST_IEC870_5_101SystemParams :
STRUCT
    asduAddr 	: DWORD := 11;
    asduAddrRev 	: DWORD := 22;

    asduFmt 		: ST_IEC870_5_101AsduFmtParams := (	eCOTSize 	:= eIEC870_COT_TwoOctets,
                            eAsduAddrSize 	:= eIEC870_AsduAddr_TwoOctets,
                            eObjAddrSize 	:= eIEC870_ObjAddr_ThreeOctets );
    bEndOfInit 	: BOOL := TRUE;

    bSyncTime 	: BOOL := TRUE;
    bSyncPCTime 	: BOOL := FALSE;

    bUsePCTime 	: BOOL := TRUE;
    tSyncToPCTime 	: TIME := T#0s;
    sPCTimeNetID 	: T_AmsNetID := '';

    bTimeCOT3 	: BOOL := FALSE;
    tSyncTimeut 	: TIME := T#0m;

    bACTCONRes 	: BOOL := TRUE;
    bACTTERMRes 	: BOOL := TRUE;

    bPerCyclic 	: BOOL := FALSE;
    tPerCyclicBase 	: TIME := T#60s;

    bBackScan 	: BOOL := FALSE;
    tBackScanCycle 	: TIME := T#60s;

    bPerFRZ 		: BOOL := FALSE;
    tPerFRZCycle 	: TIME := T#60s;

    tSelExecTimeout 	: TIME := T#10s;
    tActConTimeout 	: TIME := T#5s;
    tActTermTimeout 	: TIME := T#30s;
    tDeactConTimeout 	: TIME := T#5s;
    tReadResTimeout 	: TIME := T#5s;

    dbgMode 		: DWORD := 0; (* 0 => disabled,
                Bit 0 set => IEC870_DEBUGMODE_ASDU => debug asdu's,
                Bit 1 set => IEC870_DEBUGMODE_DEVSTATE => debug device state changes
                Bit 2 set => IEC870_DEBUGMODE_LINKLAYER => link layer frame data *)
    orgAddr 		: BYTE := 1; (* Oiginator address, reserved, not used *)

    bOverwrite 	: BOOL := FALSE;(* TRUE = Overwrite oldest entries, FALSE = don't overwrite *)
END_STRUCT
END_TYPEEND_TYPE

asduAddr: Gemeinsame ASDU-Adresse in Standardrichtung. Default: 11.

asduAddrRev: Gemeinsame ASDU-Adresse in Umkehrrichtung. Default: 22.

asduFmt: ASDU-Formatparameter (z.B. Oktetlänge der Übertragungsursache-, ASDU-Adresse- und der Object-Adresse );

bEndOfInit: Wenn TRUE, sende M_EI_NA_1 (End of init) nachdem die Stationsinitialisierung abgeschlossen wurde. Eine Stationsinitialisierung wird beim Systemstart oder nach einem Prozess Reset durchgeführt. Default: TRUE.

bSyncTime: Wenn TRUE, aktiviere IEC-Systemzeit Synchronisation beim Empfang des C_CS_NA_1-Kommandos. Default: TRUE.

bSyncPCTime: Wenn TRUE, synchronisiere neben der IEC-Systemzeit auch die Systemzeit des TwinCAT PC's (die Windows-Systemzeit in der Taskleiste). Default: FALSE.

bUsePCTime: Wenn TRUE, synchronisiere die IEC-Systemzeit mit der Systemzeit des PC's. Nach der Initialisierung der Unterstation wird die IEC-Systemzeit zuerst mit der Systemzeit des TwinCAT PC's (Windows-Systemzeit) synchronisiert. Default: TRUE.

tSyncToPCTime : Steuert die zyklische Synchronisation der IEC-Systemzeit mit der Systemzeit des TwinCAT PC's (im Online- und Offline-Mode). Implementiert in IEC870-5-104 slave Bibliothek v3.0.3 und höher.

Die Zeit bestimmt die Zykluszeit in der die Synchronisation durchgeführt wirde. Bei einem Wert = T#0s ist die zyklische Synchronisation deaktiviert. Default: T#0s.

sPCTimeNetID: TwinCAT Netzwerkadresse des PCs dessen Systemzeit bei der Synchronisierung benutzt werden soll. Für den lokalen PC kann auch ein Leerstring angegeben werden. Default: Leerstring = Lokaler PC.

bTimeCOT3: Wenn TRUE, sende die Systemzeit zur Zentralstation mit der Übertragungsursache <3> Spontan beim Stundenwechsel. Default: FALSE.

tSyncTimeout: Uhrzeitsynchronisationsintervall-Timeoutüberwachung. Implementiert in IEC870-5-101/104 slave Bibliothek v2.0.0 und höher. In früheren Versionen wird dieser Parameter nicht benutzt. Die Zeitstempel haben einen IV-Quality-Flag (invalid). Bei einem Wert <> T#0m (z.B. T#60m) wird das IV-Quality-Flag bei allen darauf folgenden Zeitstempeln auf Invalid gesetzt wenn innerhalb einer Stunde keine Uhrzeitsynchronisation durchgeführt wurde. Das IV-Quality-Flag des Zeitstempels kann vom Master als Indikator für die Qualität des Zeitstempels benutzt werden. Bei tSyncTimeout = T#0m ist die Überwachung nicht aktiv.

bACTCONRes: Wenn TRUE, sende ACTCON response.

bACTTERMRes: Wenn TRUE, sende ACTTERM response.

bPerCyclic: Wenn TRUE, aktiviere zyklische/periodische Datenübertragung.

tPerCyclicBase: Basiszeit der zyklischen/periodischen Datenübertragung.

bBackScan: Wenn TRUE, aktiviere Hintergrundabfrage.

tBackScanCycle: Hintergrundabfrage-Zykluszeit.

bPerFRZ: Wenn TRUE, aktiviere lokales Umspeichern/Rücksetzen der Zählerwerte.

tPerFRZCycle: Zykluszeit für lokales Umspeichern/Rücksetzen.

tSelExecTimeout: Max. Timeoutzeit zwischen dem Anwahlbefehl und dem Ausführungsbefehl (nur Zentralstation).

tActConTimeout :Max. Timeoutzeit für den Empfang der Bestätigung der Befehlaktivierung (nur Zentralstation).

tActTermTimeout : Max. Timeoutzeit für den Empfang der Befehlterminierung (nur Zentralstation).

tDeactConTimeout : Max. Timeoutzeit für den Empfang der Bestätigung des Befehlabbruchs (nur Zentralstation).

tReadResTimeout : Max. Timeoutzeit für die Ausführung des Lesebefehls (C_RD_NA_1) (nur Zentralstation).

dbgMode:Debug-Flags:

Wert | Beschreibung
IEC870_DEBUGMODE_DISABLED | Loggen deaktiviert
IEC870_DEBUGMODE_ASDU | Die ASDUs werden als hexadezimale Ausgabe im Application-Log geloggt.
IEC870_DEBUGMODE_DEVSTATE | Statusänderungen der Station werden im Application-Log geloggt.
IEC870_DEBUGMODE_LINKLAYER Link layer frames werden im Application-Log geloggt

IEC870-5-101 slave Bibliothek: bei allen Versionen verfügbar;
IEC870-5-104 slave Bibliothek: ab v2.0.0 und höher verfügbar;

IEC870_DEBUGMODE_LINKERROR | Link layer Fehlermeldungen werden im Application-Log geloggt.

Die Flags können in der gewünschten Kombination verodert werden.

orgAddr: Quelladresse (wird zur Zeit nicht benutzt).

bOverwrite: Implementiert ab IEC870-5-104 slave library v3.0.14 und höher. Aktiviert/deaktiviert das Überschreiben der ältesten Meldungen im Sendepuffer bei der Überschreitung der max. zulässigen Puffergrösse. Dieser Parameter ist nur im Offline-Mode aktiv (d.h. wenn die Verbindung unterbrochen wurde) und wenn Offline-Datenspeicherung zusätzlich über den bRetainBuffer-Parameter in den Protokollparametern (ST_IEC870_5_104ProtPara) aktiviert wurde. Im Online-Mode (d.h. wenn der Datentransfer gestartet wurde) werden keine älteren Meldungen überschrieben (sonst würden möglicherweise einige Zwischenwerte fehlen).

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101DeviceInterface

TYPE ST_IEC870_5_101DeviceInterface

TYPE ST_IEC870_5_101DeviceInterface :
STRUCT
    asduAddr 	: DWORD;
    asduAddrRev 	: DWORD;
    dataLink 	: ST_IEC870_5_101DataLink;
    clock 		: ST_IEC870_5_101SystemRTC;
    comp 		: ST_IEC870_5_101DeviceCompatibility;
    errors 		: FB_IEC870_5_101ErrorFifo;
    status 		: DWORD;
END_STRUCT
END_TYPEEND_TYPE

asduAddr: Gemeinsame ASDU-Adresse in Standardrichtung;

asduAddrRev: Gemeinsame ASDU-Adresse in Umkehrrichtung.

dataLink: Interne ASDU-Send/Receive-Fifos;

clock: IEC-Systemzeitobjekt;

comp: Kompatibilitätsliste mit der Zuordnung der ASDU-Typen zu den Übertragungsursachen;

errors: Gerätefehler-Fifo;

status: Globaler-Gerätestatus. 1=OK, 0=Not OK;

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101AsduFmtParams

TYPE ST_IEC870_5_101AsduFmtParams

TYPE ST_IEC870_5_101AsduFmtParams :
STRUCT
    eCOTSize 	: E_IEC870_5_101COTSize 		:= eIEC870_COT_TwoOctets;
    eAsduAddrSize 	: E_IEC870_5_101AsduAddrSize 	:= eIEC870_AsduAddr_TwoOctets;
    eObjAddrSize 	: E_IEC870_5_101ObjAddrSize 	:= eIEC870_ObjAddr_ThreeOctets;
END_STRUCT
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101ErrorFifoEntry

TYPE ST_IEC870_5_101ErrorFifoEntry

IEC60870-5-10x Gerätefehler.

TYPE ST_IEC870_5_101ErrorFifoEntry :
STRUCT
    nErrId : UDINT;
    eSrcId : E_IEC870_5_101ErrorSourceID;
END_STRUCT
END_TYPEEND_TYPE

nErrID: Fehlercode.

eSrcID: Fehlerquelle. Die Fehlerquelle gibt nähere Informationen über die Fehlerursache, die Komponente oder den Dienst der den Fehler gemeldet hat.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


ST_IEC870_5_101AcquisitionParams

TYPE ST_IEC870_5_101AcquisitionParams

Ab der Produktversion:

  • TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher;
  • TwinCAT PLC Library IEC60870-5-101 Zentralstation v1.0.1 und höher;

Konfigurationsparameter für die zyklische Datenerfassung. Die Initialisierungssequence, Kommandos die im arrInitSeq-Array konfiguriert wurden, werden einmalig nach dem Empfang von M_EI_NA_1 (end of initialisation) oder nach der Herstellung der Kommunikationsverbindung ausgeführt. Danach beginnt die Ausführung der zyklischen Befehle, die über die Strukturparameter: testCmd, clockSync, arrGenro, arrCoro oder genCmd konfiguriert wurden.

TYPE ST_IEC870_5_101AcquisitionParams :
STRUCT
    (* Initialization sequence steps *)
    arrInitSeq : ARRAY[IEC870_MIN_ISTEP..IEC870_MAX_ISTEP] OF E_IEC870_5_101InitSeqStep :=
    eIEC870_ISTEP_TEST, (* Send test command *)
    eIEC870_ISTEP_CLOCK, (* Send clock synchronization command *)
    eIEC870_ISTEP_GENRO, (* Send general interrogation command *)
    eIEC870_ISTEP_CORO, (* Send counter interrogation command *)
    eIEC870_ISTEP_UNUSED, (* Reserved *)
    eIEC870_ISTEP_UNUSED, (* Reserved *)
    eIEC870_ISTEP_UNUSED; (* Reserved *)

    (* Test command polling settings *)
    testCmd : ST_IEC870_5_101TestPollParams := (
    asduAddr := IEC870_ASDUADDR_SYSPARA,
    tPollCycle := T#60s,
    bEnable := TRUE );

    (* Clock synchronisation polling settings *)
    clockSync : ST_IEC870_5_101ClockPollParams := (
    asduAddr := IEC870_ASDUADDR_SYSPARA,
    tPollCycle := T#60s,
    bEnable := TRUE );

    (* Station interrogation polling settings *)
    arrGenro : ARRAY[0..16] OF ST_IEC870_5_101GenroPollParams := (
    asduAddr := IEC870_ASDUADDR_SYSPARA,
    tPollCycle := T#60s,
    eQOI := eIEC870_QOI_INROGEN,
    bEnable := TRUE );

    (* Counter interrogation polling settings *)
    arrCoro : ARRAY[0..4] OF ST_IEC870_5_101CoroPollParams := (
    asduAddr := IEC870_ASDUADDR_SYSPARA,
    tPollCycle := T#60s,
    eRQT := eIEC870_RQT_REQCOGEN,
    eFRZ := eIEC870_FRZ_READ,
    bEnable := TRUE );

    (* General command acquisition settings *)
    genCmd : ST_IEC870_5_101GenCmdPollParams := (
    tPollCycle := T#1h,
    bEnable := FALSE );

    (* Delay command acquisition settings *)
    delayCmd : ST_IEC870_5_101DelayPollParams := (
    tDelay := T#5s );

    eAODBType : E_IEC870_5_101AODBType := eIEC870_AODB_STATIC;
END_STRUCT
END_TYPE

arrInitSeq: Initialisierungssequence. Die Initialisierungssequence wird immer nach dem Empfang von M_EI_NA_1 (end of initialisation) einmalig ausgeführt.

testCmd: Parameter für zyklische Testbefehle. Standardwert: Ein Testkommando alle 60s.

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

arrGenro: Parameter für zyklische Stationsabfragebefehle. Es können Stationsabfragen von bis zu 17 Datenpunktgruppen konfiguriert werden. Standardwert: 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: Eine Zählerabfrage der Gruppe Allgemein alle 60s.

genCmd: Parameter für zyklische Übertragung der Datenpunkte in Steuerungsrichtung (Einzelbefehl, Doppelbefehl, Sollwerte usw.). Standardwert: 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;

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101TestPollParams

TYPE ST_IEC870_5_101TestPollParams

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Konfigurationsparameter für den zyklischen Testbefehl.

TYPE ST_IEC870_5_101TestPollParams:
STRUCT
    asduAddr 	: DWORD := IEC870_ASDUADDR_SYSPARA;
    tPollCycle 	: TIME := T#60s;
    bEnable 		: BOOL := FALSE;
END_STRUCT
END_TYPE

asduAddr: Zieladresse;

tPollCycle: Zykluszeit des Testbefehls.

bEnable: Aktiviert (TRUE) oder deaktiviert (FALSE) die zyklischen Testbefehle.

Entwicklingsumgebung | Zielsystem | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101ClockPollParams

TYPE ST_IEC870_5_101ClockPollParams

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Konfigurationsparameter für den zyklischen Uhrzeitsynchronisationsbefehl. Die Station, welche die Uhrzeitsynchronisationsbefehle sendet, besitzt eine eigene interne Software-Uhr. Diese Uhr wird während der Stationsinitialisierung mit der lokalen Windows-Systemzeit (der Uhrzeit in der Windows Taskleiste) synchronisiert. Im Betrieb werden die Zielstationen über die Uhrzeitsynchronisationsbefehle mit der Uhrzeit der internen Software-Uhr synchronisiert.

TYPE ST_IEC870_5_101ClockPollParams:
STRUCT
    asduAddr 	: DWORD := IEC870_ASDUADDR_SYSPARA;
    tPollCycle 	: TIME := T#60s;
    bEnable 		: BOOL := FALSE;
END_STRUCT
END_TYPE

asduAddr: Zieladresse.

tPollCycle: Zykluszeit des Uhrzeitsynchronisationsbefehls.

bEnable: Aktiviert/deaktiviert die zyklischen Uhrzeitsynchronisationsbefehle.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101GenroPollParams

TYPE ST_IEC870_5_101GenroPollParams

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Konfigurationsparameter für den zyklischen Stationsabfragebefehl.

TYPE ST_IEC870_5_101GenroPollParams:
STRUCT
    asduAddr 	: DWORD := IEC870_ASDUADDR_SYSPARA;
    tPollCycle 	: TIME := T#60s;
    eQOI 		: E_IEC870_5_101QOI := eIEC870_QOI_INROGEN;
    bEnable 		: BOOL := FALSE;
END_STRUCT
END_TYPE

asduAddr: Zieladresse.

tPollCycle: Stationsabfrage-Zykluszeit.

eQOI: Abfrageparameter/Kennung.

bEnable: Aktiviert (TRUE) oder deaktiviert (FALSE) die Stationsabfragebefehle.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101CoroPollParams

TYPE ST_IEC870_5_101CoroPollParams

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Konfigurationsparameter für den zyklischen Zählerabfragebefehl.

TYPE ST_IEC870_5_101CoroPollParams:
STRUCT
    asduAddr 	: DWORD := IEC870_ASDUADDR_SYSPARA;
    tPollCycle 	: TIME := T#60s;
    eRQT 		: E_IEC870_5_101RQT := eIEC870_RQT_REQCOGEN;
    eFRZ 		: E_IEC870_5_101FRZ := eIEC870_FRZ_READ;
    bEnable 		: BOOL := FALSE;
END_STRUCT
END_TYPE

asduAddr: Zieladresse;

tPollCycle: Zykluszeit des Zählerabfragebefehls.

eRQT: Kennung für die Zählerabfrage.

eFRZ: FREEZE-/RESET-Kennung.

bEnable: Aktiviert/deaktiviert die zyklischen Zählerabfragebefehle.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101GenCmdPollParams

TYPE ST_IEC870_5_101GenCmdPollParams

Parameter für zyklische Übertragung der Datenpunkte in Steuerungsrichtung (Einzelbefehl, Doppelbefehl, Sollwerte usw.).

TYPE ST_IEC870_5_101GenCmdPollParams:
STRUCT
    tPollCycle : TIME := T#1h; (* General command cycle time *)
    bEnable : BOOL := FALSE; (* TRUE = Enable cyclic general command, FALSE = Disable *)
    options : DWORD := 0; (* Additional general command options *)
END_STRUCT
END_TYPE

tPollCycle: Übertragungszykluszeit.

bEnable: Aktiviert/deaktiviert die zyklische Übertragung der Datenpunkte.

options: Zusätzliche Parameter.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101DelayPollParams

TYPE ST_IEC870_5_101DelayPollParams

Konfigurationsparameter für die Verzögerung des nächsten Initialisierungsschrittes.

TYPE ST_IEC870_5_101DelayPollParams:
STRUCT
    tDelay : TIME := T#5s; (* Delay time *)
END_STRUCT
END_TYPE

tDelay: Verzögerungszeit.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101HashTableKey

TYPE ST_IEC870_5_101HashTableKey

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Unterstation v3.0.0 / IEC60870-5-104 Zentralstation v1.0.0 und höher.

Applikationsobjekt-Datenbank-Lookup-Schlüssel. Mit Hilfe des Schlüssels können die Hash-Tabelleneinträge lokalisiert und modifiziert werden.

TYPE ST_IEC870_5_101HashTableKey :
STRUCT
    eType 		: E_IEC870_5_101TcTypeID := ASDU_TYPEUNDEF;
    asduAddr 	: DWORD := 0;
    objAddr 		: DWORD := 0;
    group 		: DWORD := 0;
    lookup 		: DWORD := IEC870_LOOKUP_KEY_ALL_ON;
END_STRUCT
END_TYPE

eType: Applikationsobjekt Typ, ASDU identifier (z.B.: M_SP_NA_1 für Single-Point oder M_DP_NA_1 für Double-Point usw.).

asduAddr: Gemeinsame ASDU-Adresse.

objAddr: Objektadresse, frei wählbar.

group: Object-Group-Konfigurationsflags. Hier finden Sie die Beschreibung aller Group-Flags. Die Flags können mit OR-Verknüpfung kombiniert werden. Wenn dieser Parameter den Wert Null hat werden die group-Parameter ignoriert.

lookup: Zusätzliche Lookup-Schlüsselparameter. Die verfügbaren Parameter sind als Konstanten deklariert (siehe untere Tabelle). Diese können mit OR-Verknüpfung kombiniert werden.

Konstante | Wert | Beschreibung
IEC870_LOOKUP_KEY_ALL_ON | 0 | Bei der Suche werden alle Parameter berücksichtigt (eType, asduAddr, objAddr, group).
IEC870_LOOKUP_KEY_TYPE_OFF | 1 | Bei der Suche wird der eType-Parameter ignoriert.
IEC870_LOOKUP_KEY_ASDUADDR_OFF | 2 | Bei der Suche wird der asduAddr-Parameter ignoriert.
IEC870_LOOKUP_KEY_GROUP_OFF | 4 | Bei der Suche wird der group-Parameter ignoriert.
IEC870_LOOKUP_KEY_OBJADDR_OFF | 8 | Bei der Suche wird der objAddr-Parameter ignoriert. Dieser Parameter ist nicht zu empfehlen da alle Datenpunkte über eine eindeutige Objektadresse identifizierbar sein müssen.

Beispiel in ST:

Siehe in der Beschreibung der Funktion: F_iecLookupTableEntry, F_iecRemoveTableEntry, F_iecGetPosOfTableEntry.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC or CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101FBufferCfg

TYPE ST_IEC870_5_101FBufferCfg

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-101/104 Unterstation v3.0.2 / IEC60870-5-104 Zentralstation v1.0.2 und höher.

Konfigurationseinstellungen für den Offline-ASDU-Dateipuffer. Diese Struktur wird von dem FB_IEC870_5_101FBufferCtrl Funktionsbaustein benutzt.

TYPE ST_IEC870_5_101FBufferCfg :
STRUCT
    sNetID 		: T_AmsNetID := ''; (* TwinCAT System network address *)
    sPathName 	: T_MaxString := 'c:\Temp\data.dat'; (* File buffer path name (max. length = 255 characters) *)
    ePath 		: E_OpenPath := PATH_GENERIC; (* Default: Open generic file *)
    cbBuffer 	: UDINT := 16#100000; (* Max. size of file: 16#100000 = 1MB *)
    bOverwrite 	: BOOL := TRUE; (* TRUE = overwrite oldest entry, FALSE = don't overwrite *)
    bFilter 		: BOOL := FALSE; (* Enable/disable frame filter (reserved)*)
    cotFilter 	: T_IEC870_5_101COTBits := 8(0); (* COT (cause of transfer) filter, reserved for future use *)
    tTimeout 	: TIME := DEFAULT_ADS_TIMEOUT; (* ADS (file access) timeout *)
ND_STRUCT
END_TYPE

sNetID: Hier kann die Netzwerkadresse des TwinCAT-Rechners angegeben werden, auf dem die Pufferdatei erstellt werden soll. Für den lokalen PC kann auch ein Leerstring angegeben werden.

sPathName: Enthält den Pfad- und Dateinamen der zu öffnenden Datei. Hinweis: Der Pfad kann nur auf das lokale File System des Rechners zeigen! Das bedeutet, Netzwerkpfade können hier nicht angegeben werden!

ePath: Über diesen Eingang kann ein TwinCAT - Systempfad auf dem Zielgerät zum Öffnen der Datei angewählt werden.

cbBuffer: Max. Bytegröße der Pufferdatei. Wenn bOverwrite = FALSE gesetzt wurde und die max. Größe überschritten wurde wird ein Fehler zurückgemeldet.

bOverwrite: Beim Erreichen der max. Größe werden die ältesten Einträge überschrieben wenn diese Variable auf TRUE gesetzt wurde.

bFilter: Zur Zeit noch nicht implementiert. Aktiviert/deaktiviert einen COT-Filter (Cause of transfer). Nur ASDUs mit bestimmten Übertragungsursachen werden in die Datei gepuffert.

cotFilter: Zur Zeit noch nicht implementiert. Über diese Variable können Übertragungsursachen (COTs) konfiguriert werden, die in die Datei gepuffert werden sollen.

tTimeout: Maximale Timeoutzeit die bei dem Dateizugriff nicht überschritten werden sollte.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1313 | PC or CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


ST_IEC870_5_101FBufferStatus

TYPE ST_IEC870_5_101FBufferStatus

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-101/104 Unterstation v3.0.2 / IEC60870-5-104 Zentralstation v1.0.2 und höher.

Statusinformationen zum Offline ASDU Dateipuffer. Diese Struktur wird von dem FB_IEC870_5_101FBufferCtrl Funktionsbaustein benutzt.

TYPE ST_IEC870_5_101FBufferStatus:
STRUCT
    eState 		: E_IEC870_5_101FBufferState := eIEC870_FBUFFER_IDLE; (* File buffer data direction status (storing, loading, idle, error) *)
    nErrID 		: UDINT; (* File access error code *)
    bCorrupted 	: BOOL; (* TRUE => Existing file was corrupted and with new (empty) file replaced.
    FALSE => Existing file was not corrupted or new (empty) file created. *)
    nCount 		: UDINT; (* Number of buffered entries in file *)
END_STRUCT
END_TYPE

eState: Liefert den Dateipuffer Status (Datei wird geschrieben, geladen, ist geschlossen oder es ist ein Fehler beim Schreiben/Laden aufgetreten).

nErrID: Liefert bei einem Dateizugriffsfehler die ADS-Fehlernummer.

bCorrupted: Bei TRUE war die zuletzt geöffnete Datei als korrupt erkannt und wurde durch eine neue leere Datei ersetzt. Eine korrupte Datei kann z.B. dann entstehen wenn die max. Dateipuffergröße geändert wurde oder die Datei nicht richtig geschlossen wurde.

nCount: Aktuelle Anzahl der gepufferten Einträge im Dateipuffer. Der Dateipuffer muss zuerst geöffnet werden um die Anzahl der Einträge in einer existierenden Datei ermitteln zu können. D.h. die Verbindung muss kurz in den Offline Mode gehen.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1313 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


E_IEC870_5_101TcTypeID

TYPE E_IEC870_5_101TcTypeID

Datenpunkt-Typbezeichner.

TYPE E_IEC870_5_101TcTypeID :
(
    ASDU_TYPEUNDEF := 0, (* (000, 0x00) not allowed *)
    (* reserved standard asdu types *)
    M_SP_NA_1, (* (001, 0x01) Single-point information *)
    M_SP_TA_1, (* (002, 0x02) Single-point information with time tag *)
    M_DP_NA_1, (* (003, 0x03) Double-point information *)
    M_DP_TA_1, (* (004, 0x04) Double-point information with time tag *)
    M_ST_NA_1, (* (005, 0x05) Step position information *)
    M_ST_TA_1, (* (006, 0x06) Step position information with time tag *)
    M_BO_NA_1, (* (007, 0x07) Bitstring of 32 bit *)
    M_BO_TA_1, (* (008, 0x08) Bitstring of 32 bit with time tag *)
    M_ME_NA_1, (* (009, 0x09) Measured value, normalised value *)
    M_ME_TA_1, (* (010, 0x0A) Measured value, normalized value with time tag *)
    M_ME_NB_1, (* (011, 0x0B) Measured value, scaled value *)
    M_ME_TB_1, (* (012, 0x0C) Measured value, scaled value wit time tag *)
    M_ME_NC_1, (* (013, 0x0D) Measured value, short floating point number *)
    M_ME_TC_1, (* (014, 0x0E) Measured value, short floating point number with time tag *)
    M_IT_NA_1, (* (015, 0x0F) Integrated totals *)
    M_IT_TA_1, (* (016, 0x10) Integrated totals with time tag *)
    M_EP_TA_1, (* (017, 0x11) Event of protection equipment with time tag *)
    M_EP_TB_1, (* (018, 0x12) Packed start events of protection equipment with time tag *)
    M_EP_TC_1, (* (019, 0x13) Packed output circuit information of protection equipment with time tag *)
    M_PS_NA_1, (* (020, 0x14) Packed single point information with status change detection *)
    M_ME_ND_1, (* (021, 0x15) Measured value, normalized value without quality descriptor *)
    ASDU_TYPE_22,
    ASDU_TYPE_23,
    ASDU_TYPE_24,
    ASDU_TYPE_25,
    ASDU_TYPE_26,
    ASDU_TYPE_27,
    ASDU_TYPE_28,
    ASDU_TYPE_29,
    M_SP_TB_1, (* (030, 0x1E) Single-point information with time tag CP56Time2a *)
    M_DP_TB_1, (* (031, 0x1F) Double-point information with time tag CP56Time2a *)
    M_ST_TB_1, (* (032, 0x20) Step position information with time tag CP56Time2a *)
    M_BO_TB_1, (* (033, 0x21) Bitstring of 32 bit with time tag CP56Time2a *)
    M_ME_TD_1, (* (034, 0x22) Measured value, normalised value with time tag CP56Time2a *)
    M_ME_TE_1, (* (035, 0x23) Measured value, scaled value with time tag CP56Time2a *)
    M_ME_TF_1, (* (036, 0x24) Measured value, short floating point number with time tag CP56Time2a *)
    M_IT_TB_1, (* (037, 0x25) Integrated totals with time tag CP56Time2a *)
    M_EP_TD_1, (* (038, 0x26) Event of protection equipment with time tag CP56Time2a *)
    M_EP_TE_1, (* (039, 0x27) Packed start events of protection equipment with time tag CP56Time2a *)
    M_EP_TF_1, (* (040, 0x28) Packed output circuit information of protection equipment with time tag CP56Time2a *)
    ASDU_TYPE_41,
    ASDU_TYPE_42,
    ASDU_TYPE_43,
    ASDU_TYPE_44,
    C_SC_NA_1, (* (045, 0x2D) Single command *)
    C_DC_NA_1, (* (046, 0x2E) Double command *)
    C_RC_NA_1, (* (047, 0x2F) Regulating step command *)
    C_SE_NA_1, (* (048, 0x30) Set-point Command, normalised value *)
    C_SE_NB_1, (* (049, 0x31) Set-point Command, scaled value *)
    C_SE_NC_1, (* (050, 0x32) Set-point Command, short floating point number *)
    C_BO_NA_1, (* (051, 0x33) Bitstring 32 bit command *)
    ASDU_TYPE_52,
    ASDU_TYPE_53,
    ASDU_TYPE_54,
    ASDU_TYPE_55,
    ASDU_TYPE_56,
    ASDU_TYPE_57,
    C_SC_TA_1, (* (058, 0x3A) Single command with time tag CP56Time2a *)
    C_DC_TA_1, (* (059, 0x3B) Double command with time tag CP56Time2a *)
    C_RC_TA_1, (* (060, 0x3C) Regulating step command with time tag CP56Time2a *)
    C_SE_TA_1, (* (061, 0x3D) Measured value, normalised value command with time tag CP56Time2a *)
    C_SE_TB_1, (* (062, 0x3E) Measured value, scaled value command with time tag CP56Time2a *)
    C_SE_TC_1, (* (063, 0x3F) Measured value, short floating point number command with time tag CP56Time2a *)
    C_BO_TA_1, (* (064, 0x40) Bitstring of 32 bit command with time tag CP56Time2a *)
    ASDU_TYPE_65,
    ASDU_TYPE_66,
    ASDU_TYPE_67,
    ASDU_TYPE_68,
    ASDU_TYPE_69,
    M_EI_NA_1, (* (070, 0x46) End of Initialisation *)
    ASDU_TYPE_71,
    ASDU_TYPE_72,
    ASDU_TYPE_73,
    ASDU_TYPE_74,
    ASDU_TYPE_75,
    ASDU_TYPE_76,
    ASDU_TYPE_77,
    ASDU_TYPE_78,
    ASDU_TYPE_79,
    ASDU_TYPE_80,
    ASDU_TYPE_81,
    ASDU_TYPE_82,
    ASDU_TYPE_83,
    ASDU_TYPE_84,
    ASDU_TYPE_85,
    ASDU_TYPE_86,
    ASDU_TYPE_87,
    ASDU_TYPE_88,
    ASDU_TYPE_89,
    ASDU_TYPE_90,
    ASDU_TYPE_91,
    ASDU_TYPE_92,
    ASDU_TYPE_93,
    ASDU_TYPE_94,
    ASDU_TYPE_95,
    ASDU_TYPE_96,
    ASDU_TYPE_97,
    ASDU_TYPE_98,
    ASDU_TYPE_99,
    C_IC_NA_1, (* (100, 0x64) Interrogation command *)
    C_CI_NA_1, (* (101, 0x65) Counter interrogation command *)
    C_RD_NA_1, (* (102, 0x66) Read Command*)
    C_CS_NA_1, (* (103, 0x67) Clock synchronisation command *)
    C_TS_NA_1, (* (104, 0x68) Test command *)
    C_RP_NA_1, (* (105, 0x69) Reset process command *)
    C_CD_NA_1, (* (106, 0x6A) C_CD_NA_1 Delay acquisition command *)
    C_TS_TA_1, (* (107, 0x6B) Test command with time tag CP56Time2a *)
    ASDU_TYPE_108,
    ASDU_TYPE_109,
    P_ME_NA_1, (* (110, 0x6E) Parameter of measured values, normalized value *)
    P_ME_NB_1, (* (111, 0x6F) Parameter of measured values, scaled value *)
    P_ME_NC_1, (* (112, 0x70) Parameter of measured values, short floating point number *)
    P_AC_NA_1, (* (113, 0x71) Parameter activation *)
    ASDU_TYPE_114,
    ASDU_TYPE_115,
    ASDU_TYPE_116,
    ASDU_TYPE_117,
    ASDU_TYPE_118,
    ASDU_TYPE_119,
    F_FR_NA_1, (* (120, 0x78) File ready *)
    F_SR_NA_1, (* (121, 0x79) Section ready *)
    F_SC_NA_1, (* (122, 0x7A) Call directory, select file, call file, call section *)
    F_LS_NA_1, (* (123, 0x7B) Last section, last segment *)
    F_FA_NA_1, (* (124, 0x7C) ACK file, ACK section *)
    F_SG_NA_1, (* (125, 0x7D) Segment *)
    F_DR_TA_1, (* (126, 0x7E) Directory *)
    ASDU_TYPE_127,
    (* reserved user asdu types *)
    ASDU_TYPE_128,
    ASDU_TYPE_129,
    ASDU_TYPE_130,
    ASDU_TYPE_131,
    ASDU_TYPE_132,
    ASDU_TYPE_133,
    ASDU_TYPE_134,
    ASDU_TYPE_135,
    ASDU_TYPE_136,
    ASDU_TYPE_137,
    ASDU_TYPE_138,
    ASDU_TYPE_139,
    ASDU_TYPE_140,
    ASDU_TYPE_141,
    ASDU_TYPE_142,
    ASDU_TYPE_143,
    ASDU_TYPE_144,
    ASDU_TYPE_145,
    ASDU_TYPE_146,
    ASDU_TYPE_147,
    ASDU_TYPE_148,
    ASDU_TYPE_149,
    ASDU_TYPE_150,
    ASDU_TYPE_151,
    ASDU_TYPE_152,
    ASDU_TYPE_153,
    ASDU_TYPE_154,
    ASDU_TYPE_155,
    ASDU_TYPE_156,
    ASDU_TYPE_157,
    ASDU_TYPE_158,
    ASDU_TYPE_159,
    ASDU_TYPE_160,
    ASDU_TYPE_161,
    ASDU_TYPE_162,
    ASDU_TYPE_163,
    ASDU_TYPE_164,
    ASDU_TYPE_165,
    ASDU_TYPE_166,
    ASDU_TYPE_167,
    ASDU_TYPE_168,
    ASDU_TYPE_169,
    ASDU_TYPE_170,
    ASDU_TYPE_171,
    ASDU_TYPE_172,
    ASDU_TYPE_173,
    ASDU_TYPE_174,
    ASDU_TYPE_175,
    ASDU_TYPE_176,
    ASDU_TYPE_177,
    ASDU_TYPE_178,
    ASDU_TYPE_179,
    ASDU_TYPE_180,
    ASDU_TYPE_181,
    ASDU_TYPE_182,
    ASDU_TYPE_183,
    ASDU_TYPE_184,
    ASDU_TYPE_185,
    ASDU_TYPE_186,
    ASDU_TYPE_187,
    ASDU_TYPE_188,
    ASDU_TYPE_189,
    ASDU_TYPE_190,
    ASDU_TYPE_191,
    ASDU_TYPE_192,
    ASDU_TYPE_193,
    ASDU_TYPE_194,
    ASDU_TYPE_195,
    ASDU_TYPE_196,
    ASDU_TYPE_197,
    ASDU_TYPE_198,
    ASDU_TYPE_199,
    ASDU_TYPE_200,
    ASDU_TYPE_201,
    ASDU_TYPE_202,
    ASDU_TYPE_203,
    ASDU_TYPE_204,
    ASDU_TYPE_205,
    ASDU_TYPE_206,
    ASDU_TYPE_207,
    ASDU_TYPE_208,
    ASDU_TYPE_209,
    ASDU_TYPE_210,
    ASDU_TYPE_211,
    ASDU_TYPE_212,
    ASDU_TYPE_213,
    ASDU_TYPE_214,
    ASDU_TYPE_215,
    ASDU_TYPE_216,
    ASDU_TYPE_217,
    ASDU_TYPE_218,
    ASDU_TYPE_219,
    ASDU_TYPE_220,
    ASDU_TYPE_221,
    ASDU_TYPE_222,
    ASDU_TYPE_223,
    ASDU_TYPE_224,
    ASDU_TYPE_225,
    ASDU_TYPE_226,
    ASDU_TYPE_227,
    ASDU_TYPE_228,
    ASDU_TYPE_229,
    ASDU_TYPE_230,
    ASDU_TYPE_231,
    ASDU_TYPE_232,
    ASDU_TYPE_233,
    ASDU_TYPE_234,
    ASDU_TYPE_235,
    ASDU_TYPE_236,
    ASDU_TYPE_237,
    ASDU_TYPE_238,
    ASDU_TYPE_239,
    ASDU_TYPE_240,
    ASDU_TYPE_241,
    ASDU_TYPE_242,
    ASDU_TYPE_243,
    ASDU_TYPE_244,
    ASDU_TYPE_245,
    ASDU_TYPE_246,
    ASDU_TYPE_247,
    ASDU_TYPE_248,
    ASDU_TYPE_249,
    ASDU_TYPE_250,
    ASDU_TYPE_251,
    ASDU_TYPE_252,
    ASDU_TYPE_253,
    ASDU_TYPE_254,
    ASDU_TYPE_255,
    ASDU_TYPEMAX (* not used *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101IOMappingType

TYPE E_IEC870_5_101IOMappingType

TYPE E_IEC870_5_101IOMappingType :
(
    MAP_AREA_NONE 	:= 0,
    MAP_AREA_MEMORY 	:= 1,
    MAP_AREA_INPUT 	:= 2,
    MAP_AREA_OUTPUT 	:= 4,
    MAP_AREA_DATA 	:= 8
);
END_TYPE

TwinCAT SPS-Prozessdatenbereich (inputs, outputs, memory, data) in den bzw. aus dem die IEC-Prozessdaten gemappt (kopiert) werden sollen.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101AsduAddrSize

TYPE E_IEC870_5_101AsduAddrSize

TYPE E_IEC870_5_101AsduAddrSize :
(
    eIEC870_AsduAddr_OneOctet 		:= 1, (* One octet *)
    eIEC870_AsduAddr_TwoOctets 	:= 2 (* Two octets *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101COTSize

TYPE E_IEC870_5_101COTSize

TYPE E_IEC870_5_101COTSize :
(
    eIEC870_COT_OneOctet 	:= 1, (* One octet *)
    eIEC870_COT_TwoOctets 	:= 2 (* Two octets *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101LinkAddrSize

TYPE E_IEC870_5_101LinkAddrSize

TYPE E_IEC870_5_101LinkAddrSize :
(
    eIEC870_LinkAddr_None 		:= 0, (* None *)
    eIEC870_LinkAddr_OneOctet 		:= 1, (* One octet *)
    eIEC870_LinkAddr_TwoOctets 	:= 2 (* Two octets *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101ObjAddrSize

TYPE E_IEC870_5_101ObjAddrSize

TYPE E_IEC870_5_101ObjAddrSize :
(
    eIEC870_ObjAddr_OneOctet 		:= 1, (* One octet *)
    eIEC870_ObjAddr_TwoOctets 		:= 2, (* Two octets *)
    eIEC870_ObjAddr_ThreeOctets 	:= 3 (* Three octets *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101ErrorSourceID

TYPE E_IEC870_5_101ErrorSourceID

Fehlerquelle.

TYPE E_IEC870_5_101ErrorSourceID :
(
    eIEC870_ESRC_NONE,				(* Fehlerquelle ist unbekannt *)
    eIEC870_ESRC_COUNTER_INTERROGATION, 		(* Fehler während der Ausführung der Zählwertabfrage *)
    eIEC870_ESRC_SYNC_CLOCK_CTRL, 		(* Fehler während der Ausführung der Uhrzeitsynchronisation *)
    eIEC870_ESRC_CLOCK_EVENT, 			(* Fehler während der spontanen Übertragung der Uhrzeit *)
    eIEC870_ESRC_GETPCTIME, 			(* Fehler während der Synchronisierung der Geräte-Uhrzeit mit der Uhrzeit des PC's *)
    eIEC870_ESRC_SETPCTIME, 			(* Fehler während der Synchronisierung der PC-Uhrzeit mit der Uhrzeit des Gerätes *)
    eIEC870_ESRC_STATION_INTERROGATION, 		(* Fehler während der Generalabfrage *)
    eIEC870_ESRC_READ_DATA_CMD, 		(* Fehler beim Lesekommando *)
    eIEC870_ESRC_RESET_PROCESS, 		(* Fehler beim Process-Reset-Kommando *)
    eIEC870_ESRC_TEST_CMD,			(* Fehler beim Testkommando *)
    eIEC870_ESRC_ENDOFINIT,			(* Fehler bei M_EI_NA_1 (Ende der Initialisierung) *)
    eIEC870_ESRC_BACKGROUND_SCAN,		(* Fehler bei der Ausführung der Hintegrundabfrage *)
    eIEC870_ESRC_COMMAND_CTRL,			(* Fehler bei der Initialisierung des Befehls (single-command, double-command, setpoint-command ...) *)
    eIEC870_ESRC_COMMAND_EXEC,			(* Fehler bei der Ausführung des Befehls *)
    eIEC870_ESRC_LOCAL_FREEZE_RESET,		(* Fehler beim Umspeichern / Zurücksetzen *)
    eIEC870_ESRC_PERIODIC_CYCLIC,		(* Fehler bei der periodischen/zyklischen Datenübertragung *)
    eIEC870_ESRC_USERAPP_OBJECT,		(* Fehler im Applikationsobjekt (fehlerhafte Konfiguration/Wert) *)
    eIEC870_ESRC_USERAPP_SETQUALITY,		(* Fehler bei der Quality-Flag-Bearbeitung *)
    eIEC870_ESRC_IEC60870_5_104LINK,		(* Fehler im IEC60870-5-104 Link Layer *)
    eIEC870_ESRC_IEC60870_5_101LINK,		(* Fehler im IEC60870-5-101 Link Layer *)
    eIEC870_ESRC_COMLIB,			(* Fehler in der unterlagerten Kommunikation über die seriellen Schnittstellen *)
    eIEC870_ESRC_POLLING_SEVICE			(* Fehler in der Acquisition-State-Machine (Abarbeitung der zyklische Pollanfragen)*)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101ClassType

TYPE E_IEC870_5_101ClassType

TYPE E_IEC870_5_101ClassType :
(
    eIEC870_Class_None,
    eIEC870_Class_1,
    eIEC870_Class_2
);
END_TYPE

Prioritätsklasse der ASDU. Hochpriore Daten werden der Klasse 1 zugeordnet und niederpriore Daten der Klasse 2.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101COTType

TYPE E_IEC870_5_101COTType

Übertragungsursache (Cause of transfer).

TYPE E_IEC870_5_101COTType:
(
    eIEC870_COT_UNUSED := 0,
    eIEC870_COT_CYCLIC := 1,
    eIEC870_COT_BACKGROUND := 2,
    eIEC870_COT_SPONTAN := 3,
    eIEC870_COT_INIT := 4,
    eIEC870_COT_REQ := 5,
    eIEC870_COT_ACT := 6,
    eIEC870_COT_ACT_CON := 7,
    eIEC870_COT_DEACT := 8,
    eIEC870_COT_DEACT_CON := 9,
    eIEC870_COT_ACT_TERM := 10,
    eIEC870_COT_RETREM := 11,
    eIEC870_COT_RETLOC := 12,
    eIEC870_COT_FILE := 13,
    eIEC870_COT_14 := 14,
    eIEC870_COT_15 := 15,
    eIEC870_COT_16 := 16,
    eIEC870_COT_17 := 17,
    eIEC870_COT_18 := 18,
    eIEC870_COT_19 := 19,
    eIEC870_COT_INROGEN := 20,
    eIEC870_COT_INRO1 := 21,
    eIEC870_COT_INRO2 := 22,
    eIEC870_COT_INRO3 := 23,
    eIEC870_COT_INRO4 := 24,
    eIEC870_COT_INRO5 := 25,
    eIEC870_COT_INRO6 := 26,
    eIEC870_COT_INRO7 := 27,
    eIEC870_COT_INRO8 := 28,
    eIEC870_COT_INRO9 := 29,
    eIEC870_COT_INRO10 := 30,
    eIEC870_COT_INRO11 := 31,
    eIEC870_COT_INRO12 := 32,
    eIEC870_COT_INRO13 := 33,
    eIEC870_COT_INRO14 := 34,
    eIEC870_COT_INRO15 := 35,
    eIEC870_COT_INRO16 := 36,
    eIEC870_COT_REQCOGEN := 37,
    eIEC870_COT_REQCO1 := 38,
    eIEC870_COT_REQCO2 := 39,
    eIEC870_COT_REQCO3 := 40,
    eIEC870_COT_REQCO4 := 41,
    eIEC870_COT_42 := 42,
    eIEC870_COT_43 := 43,
    eIEC870_COT_UNKNOWN_TYPE := 44,
    eIEC870_COT_UNKNOWN_CAUSE := 45,
    eIEC870_COT_UNKNOWN_ASDU_ADDRESS := 46,
    eIEC870_COT_UNKNOWN_OBJECT_ADDRESS := 47,
    eIEC870_COT_48 := 48,
    eIEC870_COT_49 := 49,
    eIEC870_COT_50 := 50,
    eIEC870_COT_51 := 51,
    eIEC870_COT_52 := 52,
    eIEC870_COT_53 := 53,
    eIEC870_COT_54 := 54,
    eIEC870_COT_55 := 55,
    eIEC870_COT_56 := 56,
    eIEC870_COT_57 := 57,
    eIEC870_COT_58 := 58,
    eIEC870_COT_59 := 59,
    eIEC870_COT_60 := 60,
    eIEC870_COT_61 := 61,
    eIEC870_COT_62 := 62,
    eIEC870_COT_63 := 63
);
END_TYPE
Wert | Beschreibung
eIEC870_COT_UNUSED | Wird nicht benutzt
eIEC870_COT_CYCLIC | Zyklische Daten
eIEC870_COT_BACKGROUND | Hintergrundabfrage
eIEC870_COT_SPONTAN | Spontane Daten
eIEC870_COT_INIT | Ende der Initialisierung
eIEC870_COT_REQ | Read-Request
eIEC870_COT_ACT | Kommando-Aktivierung
eIEC870_COT_ACT_CON | Bestätigung der Kommando-Aktivierung
eIEC870_COT_DEACT | Kommando-Abbruch
eIEC870_COT_DEACT_CON | Bestätigung des Kommando-Abbruchs
eIEC870_COT_ACT_TERM | Terminierung der Kommando-Aktivierung
eIEC870_COT_RETREM | Erwidert wegen einem Fern-Kommando
eIEC870_COT_RETLOC | Erwidert wegen einem Lokal-Kommando
eIEC870_COT_FILE | Dateizugriff
eIEC870_COT_INROGEN | Stationsabfrage (allgemein)
eIEC870_COT_INRO1 | Stationsabfrage der Gruppe 1
eIEC870_COT_INRO2 | Stationsabfrage der Gruppe 2
eIEC870_COT_INRO3 | Stationsabfrage der Gruppe 3
eIEC870_COT_INRO4 | Stationsabfrage der Gruppe 4
eIEC870_COT_INRO5 | Stationsabfrage der Gruppe 5
eIEC870_COT_INRO6 | Stationsabfrage der Gruppe 6
eIEC870_COT_INRO7 | Stationsabfrage der Gruppe 7
eIEC870_COT_INRO8 | Stationsabfrage der Gruppe 8
eIEC870_COT_INRO9 | Stationsabfrage der Gruppe 9
eIEC870_COT_INRO10 | Stationsabfrage der Gruppe 10
eIEC870_COT_INRO11 | Stationsabfrage der Gruppe 11
eIEC870_COT_INRO12 | Stationsabfrage der Gruppe 12
eIEC870_COT_INRO13 | Stationsabfrage der Gruppe 13
eIEC870_COT_INRO14 | Stationsabfrage der Gruppe 14
eIEC870_COT_INRO15 | Stationsabfrage der Gruppe 15
eIEC870_COT_INRO16 | Stationsabfrage der Gruppe 16
eIEC870_COT_REQCOGEN | Zählerabfrage (allgemein)
eIEC870_COT_REQCO1 | Zählerabfrage der Gruppe 1
eIEC870_COT_REQCO2 | Zählerabfrage der Gruppe 2
eIEC870_COT_REQCO3 | Zählerabfrage der Gruppe 3
eIEC870_COT_REQCO4 | Zählerabfrage der Gruppe 4
eIEC870_COT_UNKNOWN_TYPE | Unbekannter Typ
eIEC870_COT_UNKNOWN_CAUSE | Unbekannte Übertragungsursache
eIEC870_COT_UNKNOWN_ASDU_ADDRESS | Unbekannte gemeinsame Asdu-Adresse
eIEC870_COT_UNKNOWN_OBJECT_ADDRESS | Unbekannte Objekt-Adresse
eIEC870_COT_14..eIEC870_COT_19 eIEC870_COT_42..eIEC870_COT_43 eIEC870_COT_48..eIEC870_COT_63 | Bereich, der reserviert/unbenutzt ist.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101FifoDbgFlags

TYPE E_IEC870_5_101FifoDbgFlags

Debug-Ausgabe-Flags. Bei einer aktivierten Debug-Ausgabe werden die ASDU-Hexbytes in TwinCAT System Manager Loggerfenster geloggt.

TYPE E_IEC870_5_101FifoDbgFlags:
(
    eIEC870_FIFO_DBG_OFF := 0,
    eIEC870_FIFO_DBG_PUT := 1,
    eIEC870_FIFO_DBG_GET := 2,
    eIEC870_FIFO_DBG_ALL := 3
);
END_TYPE

Wichtiger Hinweis:

Bitte beachten Sie, dass die Debug-Ausgabe eine höhere Systemauslastung erzeugt.

Wert | Beschreibung
eIEC870_FIFO_DBG_OFF | Keine Debug-Ausgabe
eIEC870_FIFO_DBG_PUT | Debug-Ausgabe beim Hinzufügen der Fifo-Elemente
eIEC870_FIFO_DBG_GET | Debug-Ausgabe beim Entfernen der Fifo-Elemente
eIEC870_FIFO_DBG_ALL | Debug-Ausgabe beim Hinzufügen und Entfernen der Fifo-Elemente

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101AODBType

TYPE E_IEC870_5_101AODBType

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 IEC60870-5-104 Zentralstation v1.0.0 und höher.

Typ der Applikationsdatenbank. Zu Zeit wird nur der Typ eIEC870_AODB_STATIC unterstützt. D.h. alle Applikationsobjekte (Datenpunkte) müssen von der SPS-Applikation konfiguriert werden.

TYPE E_IEC870_5_101AODBType :
(
    eIEC870_AODB_STATIC := 0,
    eIEC870_AODB_DYNAMIC := 1
);
END_TYPE

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC or CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


E_IEC870_5_101InitSeqStep

TYPE E_IEC870_5_101InitSeqStep

Befehle, die nach dem Empfang vom M_EI_NA_1 ( end of initialisation ) oder nach der Herstellung der Kommunikationsverbindung einmalig ausgeführt werden sollen ( Initialisierungssequence ).

TYPE E_IEC870_5_101InitSeqStep :
(
    eIEC870_ISTEP_UNUSED := 0, 	(* Do nothing *)
    eIEC870_ISTEP_CLOCK, 	(* Send clock synchronization command *)
    eIEC870_ISTEP_TEST, 	(* Send test command *)
    eIEC870_ISTEP_GENRO, 	(* Send general interrogation command *)
    eIEC870_ISTEP_CORO, 	(* Send counter interrogation command *)
    eIEC870_ISTEP_COMMAND, 	(* Send general command *)
    eIEC870_ISTEP_DELAY 	(* Delay timer *)
);
END_TYPE
Initialisierungsschritt | Bedeutung
eIEC870_ISTEP_UNUSED | Der Initialisierungsschritt wird nicht benutzt.
eIEC870_ISTEP_CLOCK | Der Server soll ein Uhrzeitsynchronisationsbefehl senden.
eIEC870_ISTEP_TEST | Der Server soll ein Testbefehl senden.
eIEC870_ISTEP_GENRO | Der Server soll ein Generalabfragebefehl senden.
eIEC870_ISTEP_CORO | Der Server soll ein Zählerabfragebefehl senden.
eIEC870_ISTEP_COMMAND | Der Server soll alle Kommandos einmalig senden (Datanpunkte in Steuerungsrichtung: Einzelbefehle, Doppelbefehle, Sollwerte usw. ).
eIEC870_ISTEP_DELAY | Der Server soll mit der Ausführung des nächsten Initialisierungsschrittes warten.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC or CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


E_IEC870_5_101FBufferState

TYPE E_IEC870_5_101FBufferState

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-101/104 Unterstation v3.0.2 / IEC60870-5-104 Zentralstation v1.0.2 und höher.

Aktueller Offline-ASDU-Dateipuffer-Status.

TYPE E_IEC870_5_101QU :
(
    eIEC870_FBUFFER_IDLE := 0,
    eIEC870_FBUFFER_SAVING := 1,
    eIEC870_FBUFFER_LOADING := 2,
    eIEC870_FBUFFER_ERROR := 3
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1313 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


E_IEC870_5_101SCS

TYPE E_IEC870_5_101SCS

Single command state.

TYPE E_IEC870_5_101SCS :
(
    eIEC870_SCS_OFF 	:= 0,
    eIEC870_SCS_ON 	:= 1
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101DCS

TYPE E_IEC870_5_101DCS

Double command state.

TYPE E_IEC870_5_101DCS :
(
    eIEC870_DCS_INDETERMINATE0 	:= 0,
    eIEC870_DCS_OFF 			:= 1,
    eIEC870_DCS_ON 			:= 2,
    eIEC870_DCS_INDETERMINATE3 	:= 3
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101COI

TYPE E_IEC870_5_101COI

Cause of initialization.

TYPE E_IEC870_5_101COI :
(
    eIEC870_COI_LOCAL_POWER_ON 	:= 0, (* Local power ON *)
    eIEC870_COI_LOCAL_MANUAL_RESET 	:= 1, (* Local manual reset *)
    eIEC870_COI_REMOTE_RESET 		:= 2 (* Remote reset *)
    (* <3..31> := reserved for future norm definitions
    <32..127> := reserved for user definitions (private range) *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101QOI

TYPE E_IEC870_5_101QOI

Qualifier of interrogation command.

TYPE E_IEC870_5_101QOI :
(
    eIEC870_QOI_UNUSED 	:= 0, (* not used*)
    (* <1..19> := reserved for standard definitions of this companion standard *)
    eIEC870_QOI_INROGEN 	:= 20, (* global station interrogation *)
    eIEC870_QOI_INRO1 	:= 21, (* group 1 station interrogation *)
    eIEC870_QOI_INRO2 	:= 22, (* group 2 station interrogation...*)
    eIEC870_QOI_INRO3 	:= 23,
    eIEC870_QOI_INRO4 	:= 24,
    eIEC870_QOI_INRO5 	:= 25,
    eIEC870_QOI_INRO6 	:= 26,
    eIEC870_QOI_INRO7 	:= 27,
    eIEC870_QOI_INRO8 	:= 28,
    eIEC870_QOI_INRO9 	:= 29,
    eIEC870_QOI_INRO10 	:= 30,
    eIEC870_QOI_INRO11 	:= 31,
    eIEC870_QOI_INRO12 	:= 32,
    eIEC870_QOI_INRO13 	:= 33,
    eIEC870_QOI_INRO14 	:= 34,
    eIEC870_QOI_INRO15 	:= 35,
    eIEC870_QOI_INRO16 	:= 36 (* group 16 station interrogation*)
    (* <37..63> := reserved for future norm definitions of this companion standard (compatible range) *)
    (* <64..255> := reserved for user definitions (private range) *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101QL

TYPE E_IEC870_5_101QL

Qualifier of set-point command.

TYPE E_IEC870_5_101QL :
(
    eIEC870_QL_DEFAULT := 0
    (* <1..63> := reserved for standard definitions (compatible range)
    <64..127> := reserved for special use (private range) *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101FRZ

TYPE E_IEC870_5_101FRZ

Freeze/reset qualifier of counter interrogation command.

TYPE E_IEC870_5_101FRZ :
(
    eIEC870_FRZ_READ 		:= 0, (* Read only (no freeze or reset) *)
    eIEC870_FRZ_FREEZE 	:= 1, (* Counter freeze without reset (value frozen represents integrated total) *)
    eIEC870_FRZ_FREEZE_AND_RESET := 2, (* Counter freeze with reset (value frozen represents incremental information) *)
    eIEC870_FRZ_RESET 	:= 3 (* Counter reset *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101RQT

TYPE E_IEC870_5_101RQT

Request qualifier of counter interrogation command.

TYPE E_IEC870_5_101RQT :
(
    eIEC870_RQT_NONE 		:= 0, (* No counter read *)
    eIEC870_RQT_REQCO1 	:= 1, (* Group 1 counter interrogation *)
    eIEC870_RQT_REQCO2 	:= 2, (* Group 2 counter interrogation *)
    eIEC870_RQT_REQCO3 	:= 3, (* Group 3 counter interrogation *)
    eIEC870_RQT_REQCO4 	:= 4, (* Group 4 counter interrogation *)
    eIEC870_RQT_REQCOGEN 	:= 5 (* General counter interrogation *)
    (* <6..31> reserved for future norm definitions
    <32..63> reserved for user definitions (private range) *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101QRP

TYPE E_IEC870_5_101QRP

Qualifier of reset process command.

TYPE E_IEC870_5_101QRP :
(
    eIEC870_QRP_UNUSED 	:= 0, (* not used *)
    eIEC870_QRP_GENERAL 	:= 1, (* general process reset *)
    eIEC870_QRP_TTEVENTS 	:= 2 (* reset pending events with time tag *)
    (* <3..127> := reserved for future norm definitions
    <128..255> := reserved for user definitions (private range) *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101QU

TYPE E_IEC870_5_101QU

Qualifier der Befehle.

TYPE E_IEC870_5_101QU :
(
    eIEC870_QU_UNSPECIFIED 	:= 0,
    eIEC870_QU_SHORTPULSE 	:= 1,
    eIEC870_QU_LONGPULSE 	:= 2,
    eIEC870_QU_PERSISTENT 	:= 3
    (* <4..8> := reserved for standrad definitions of companion standard (compatible range)
    <9..15> := reserved for the selection of other predefined functions
    <16..31> := reserved for special use (private range) *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101ES

TYPE E_IEC870_5_101ES

Event state (single event of protection equipment).

TYPE E_IEC870_5_101ES:
(
    eIEC870_ES_INDETERMINATE0 	:= 0,
    eIEC870_ES_OFF 		:= 1,
    eIEC870_ES_ON 		:= 2,
    eIEC870_ES_INDETERMINATE3 	:= 3
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101KPA

TYPE E_IEC870_5_101KPA

Kind of parameter.

TYPE E_IEC870_5_101KPA:
(
    eIEC870_KPA_UNUSED := 0,
    eIEC870_KPA_THRESH := 1,
    eIEC870_KPA_FILTER := 2,
    eIEC870_KPA_LOLIMIT := 3,
    eIEC870_KPA_HILIMIT := 4
    (* <5..31> := reserved for standard definitions (compatible range)
    <32..63> := reserved for special use (private range) *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101QPA

TYPE E_IEC870_5_101QPA

Qualifier of parameter activation.

TYPE E_IEC870_5_101QPA:
(
    eIEC870_QPA_UNUSED := 0,
    eIEC870_QPA_GENERAL := 1,
    eIEC870_QPA_OBJECT := 2,
    eIEC870_QPA_TRANSMISSION := 3
    (* <4..127> := reserved for standard definitions (compatible range)
    <128..255> := reserved for special use (private range) *)
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101RCS

TYPE E_IEC870_5_101RCS

Regulating step command state.

TYPE E_IEC870_5_101RCS :
(
    eIEC870_RCS_NOTALLOWED0 	:= 0,
    eIEC870_RCS_DECREMENT 	:= 1,
    eIEC870_RCS_INCREMENT 	:= 2,
    eIEC870_RCS_NOTALLOWED3 	:= 3
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101SPI

TYPE E_IEC870_5_101SPI

Single-point information.

TYPE E_IEC870_5_101SPI :
(
    eIEC870_SPI_OFF 	:= 0,
    eIEC870_SPI_ON 	:= 1
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


E_IEC870_5_101DPI

TYPE E_IEC870_5_101DPI

Double-point information.

TYPE E_IEC870_5_101DPI :
(
    eIEC870_DPI_INDETERMINATE0 	:= 0,
    eIEC870_DPI_OFF 			:= 1,
    eIEC870_DPI_ON 			:= 2,
    eIEC870_DPI_INDETERMINATE3 	:= 3
);
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC or CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


T_HAODBTable

TYPE T_HAODBTable

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.

TYPE T_HAODBTable :
STRUCT
(*...*)
END_STRUCT
END_TYPE

Auf Variablen dieses strukturierten Typs wird nicht direkt, sondern nur mit Hilfe der zur Verfügung stehenden Funktionen oder Funktionsbausteine zugegriffen. Benutzen Sie die in der Tabelle aufgeführten Funktionen:

Function | Description
F_iecCreateTableHnd | Initialisiert das Hash-Tabellenhandle
F_iecAddTableEntry | Konfiguriert und fügt einen einen neuen Hash-Tabelleneintrag
F_iecRemoveTableEntry | Entfernt einen Hash-Tabelleneintrag
F_iecLookupTableEntry | Prüft ob ein bestimmter Hash-Tabelleneintrag existiert
F_iecGetPosOfTableEntry | Ermittelt die lineare Position eines Hash-Tabelleneientrags

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) CX (ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


T_CP56Time2a

TYPE T_CP56Time2a

Binäres 7 byte Zeitformat.

TYPE T_CP56Time2a :
STRUCT
    Milliseconds 	: WORD; (* 0..59.999ms = 60sec = 1min *)
    IVResMinute 	: BYTE; (* Bit 7 = IV (invalid time), Bit 6 = Res (spare bit), Bit 0..5 = Minutes (0..59min) *)
    SURes2Hour 	: BYTE; (* Bit 7 = SU (1=summer time, 0=normal time), Bits 5..6 = Res2, Bits 0..4 = Hours (0..23) *)
    DOWDay 		: BYTE; (* Bits 5..7 = Day of week (1..7, not used 0 !!!), Bits 0..4 = Day of month (1..31)*)
    Res3Month 	: BYTE; (* Bits 4..7 = Res3 (spare bits), Bits 0..3 = Month (1..12) *)
    Res4Year 	: BYTE; (* Bit 7 = Res4, Bits 0..6 = Year (0..99) *)
END_STRUCT
END_TYPE

Wochentag (DOW): 1 = Montag, 7 = Sonntag, 0 = wird nicht benutzt;

Sommerzeit (SU): 1 = Sommerzeit, 0 = Normalzeit;

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


T_CP32Time2a

TYPE T_CP32Time2a

Binäres vierbyte Zeitformat.

TYPE T_CP32Time2a :
STRUCT
    Milliseconds 	: WORD; (* 0..59.999ms = 60sec = 1min *)
    IVResMinute 	: BYTE; (* Bit 7 = IV (invalid time), Bit 6 = Res (spare bit), Bit 0..5 = Minutes (0..59min) *)
    SURes2Hour 	: BYTE; (* Bit 7 = SU (1=summer time, 0=normal time), Bits 5..6 = Res2, Bits 0..4 = Hours (0..23) *)
END_STRUCT
END_TYPE

Sommerzeit (SU): 1 = Sommerzeit, 0 = Normalzeit;

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1307 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


T_CP24Time2a

TYPE T_CP24Time2a

Binäres dreibyte Zeitformat

TYPE T_CP24Time2a :
STRUCT
    Milliseconds 	: WORD; (* 0..59.999ms = 60sec = 1min *)
    IVResMinute 	: BYTE; (* Bit 7 = IV (invalid time), Bit 6 = Res (spare bit), Bit 0..5 = Minutes (0..59min) *)
END_STRUCT
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


T_CP16Time2a

TYPE T_CP16Time2a

Binäres zweibyte Zeitformat.

TYPE T_CP16Time2a :
STRUCT
    Milliseconds 	: WORD; (* 0..59.999ms = 60sec = 1min *)
END_STRUCT
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


T_CP24IOA

TYPE T_CP24IOA

Ab der Produktversion: TwinCAT PLC Library: IEC60870-5-104 Unterstation v3.0.0 / IEC60870-5-104 Zentralstation v1.0.0 und höher.

Strukturierte TwinCAT Objektadresse.

TYPE T_CP24IOA:
STRUCT
    ioMapType 	: E_IEC870_5_101IOMappingType := MAP_AREA_NONE;
    byteOffs 	: WORD := 0;
    bitOffs 		: BYTE(0..7) := 0;
END_STRUCT
END_TYPE

ioMapType: TwinCAT SPS-Prozessdatenbereich. Dieser Parameter legt fest wie die TwinCAT SPS und IEC-Applikationsobjekt Prozessdaten gemappt werden sollen.

byteOffs: TwinCAT SPS-Prozessdaten Byte-Offset. Wertebereich: 0..65535.

bitOffs: TwinCAT SPS-Prozessdaten Bit-Offset. Wertebereich: 0..7.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )


T_IEC870_5_101COTBits

TYPE T_IEC870_5_101COTBits

TYPE T_IEC870_5_101COTBits :  ARRAY[0..7] OF BYTE; (* Cause of transfer bit field (e.g. used in compatiblity list mask).*)
END_TYPE
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


NVA

Normalized value.


S/E

Select/execute state.

  • <0> = Ausführen (execute);
  • <1> = Anwählen (select);


BSI

Bitstring of 32 bits.


SVA

Scaled value.


R32

Short floating point value.


TSC

Test command counter.


LPC

Local parameter change flag.

  • <0> = No change;
  • <1> = Changed;


BCR

Binary counter reading.


VTI

Value with transient state indication (8 bits).

Transient state (bit 7):

  • <0> = equipment is not in transient state;
  • <1> = equipment is in transient state;

Value (bits 0..6) = <-64..63>;


Other information elements

Quality descriptor

QDS

OV

Overflow quality flag:

  • <0> = no overflow;
  • <1> = overflow;

BL

Blocked quality flag:

  • <0> = not blocked;
  • <1> = blocked;

SB

Substituted quality flag:

  • <0> = not substituted;
  • <1> = substituted;

NT

Topical quality flag:

  • <0> = topical;
  • <1> = not topical;

IV

Invalid quality flag:

  • <0> = valid;
  • <1> = invalid;

CY

Carry flag:

  • <0> = no carry;
  • <1> = carry;

CA

Adjusted flag:

  • <0> = Counter was not adjusted;
  • <1> = Counter was adjusted;

EI

Elapsed flag:

  • <0> = Elapsed time valid;
  • <1> = Elapsed time not valid;


Group config flags

Group Konfigurationsflags

Mit den Group-Flags werden Applikationsobjekte bestimmten Gruppen zugeordnet. Die Group-Flags für Stationsabfrage und Zählwertübermittlung sind auf folgende Weise definiert worden:

  • Stationsabfrage: Alle Applikationsobjekte, die der Gruppe 1 bis 16 zugeordnet wurden, gehören automatisch auch zur globalen Gruppe: IEC870_GRP_INROGEN;
  • Zählwertübertragung: Alle Applikationsobjekte, die der Gruppe 1 bis 4 zugeordnet wurden, gehören automatisch auch zur globalen Gruppe: IEC870_GRP_REQCOGEN;

Sie können aber die automatische Zugehörigkeit der Applikationsobjekte zur globalen Gruppe verhindern in dem Sie die entsprechenden Bits während der Konfiguration ausmaskieren.

Beispiele:

IEC870_GRP_INRO3 AND NOT IEC870_GRP_INROGEN

oder

IEC870_GRP_REQCO1 AND NOT IEC870_GRP_REQCOGEN

Constant | Value | Description
Stationsabfrage
IEC870_GRP_INROGEN | 16#00000001 | Interrogated by general interrogation (station or global)
IEC870_GRP_INRO1 | 16#00000003 | Interrogated by group 1 interrogation
IEC870_GRP_INRO2 | 16#00000005 | Interrogated by group 2 interrogation
IEC870_GRP_INRO3 | 16#00000009 | Interrogated by group 3 interrogation
IEC870_GRP_INRO4 | 16#00000011 | Interrogated by group 4 interrogation
IEC870_GRP_INRO5 | 16#00000021 | Interrogated by group 5 interrogation
IEC870_GRP_INRO6 | 16#00000041 | Interrogated by group 6 interrogation
IEC870_GRP_INRO7 | 16#00000081 | Interrogated by group 7 interrogation
IEC870_GRP_INRO8 | 16#00000101 | Interrogated by group 8 interrogation
IEC870_GRP_INRO9 | 16#00000201 | Interrogated by group 9 interrogation
IEC870_GRP_INRO10 | 16#00000401 | Interrogated by group 10 interrogation
IEC870_GRP_INRO11 | 16#00000801 | Interrogated by group 11 interrogation
IEC870_GRP_INRO12 | 16#00001001 | Interrogated by group 12 interrogation
IEC870_GRP_INRO13 | 16#00002001 | Interrogated by group 13 interrogation
IEC870_GRP_INRO14 | 16#00004001 | Interrogated by group 14 interrogation
IEC870_GRP_INRO15 | 16#00008001 | Interrogated by group 15 interrogation
IEC870_GRP_INRO16 | 16#00010001 | Interrogated by group 16 interrogation
Zählwertübertragung
IEC870_GRP_REQCOGEN | 16#00020000 | Interrogated by general counter request
IEC870_GRP_REQCO1 | 16#00060000 | Interrogated by group 1 counter request
IEC870_GRP_REQCO2 | 16#000A0000 | Interrogated by group 2 counter request
IEC870_GRP_REQCO3 | 16#00120000 | Interrogated by group 3 counter request
IEC870_GRP_REQCO4 | 16#00220000 | Interrogated by group 4 counter request
IEC870_GRP_LOCFREEZE | 16#00400000 | Enable cyclic local freeze of counter value
IEC870_GRP_LOCRESET | 16#00800000 | Enable cyclic local reset of counter value
Andere
IEC870_GRP_IV_OFF | 16#01000000 | Don't set invalid quality bit
IEC870_GRP_REVERSE | 16#02000000 | Object used in reverse direction (reserved)
IEC870_GRP_SELECTCMD | 16#04000000 | Force select/execute command for this point (reserved)
not defined | 16#08000000 | not used
IEC870_GRP_USERCMD | 16#10000000 | User command (reserved)
IEC870_GRP_BACKGROUND | 16#20000000 | Enable background scan for this point
IEC870_GRP_PERCYC | 16#40000000 | Enable periodic/cyclic data for this point
IEC870_GRP_SPONTOFF | 16#80000000 | Disable event (spontanous) scanning of this point

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


Quality flags

Quality-Flags

Constant | Value | Description
IECQ_BL_ON | 16#0001 | Blocked
IECQ_BL_OFF | 16#0002 | Not blocked
IECQ_SB_ON | 16#0004 | Substituted
IECQ_SB_OFF | 16#0008 | Not substituted
IECQ_NT_ON | 16#0010 | Not topical
IECQ_NT_OFF | 16#0020 | Topical
IECQ_IV_ON | 16#0040 | Invalid
IECQ_IV_OFF | 16#0080 | Valid
IECQ_OV_ON | 16#0100 | Overflow
IECQ_OV_OFF | 16#0200 | Not overflow
IECQ_EI_ON | 16#0400 | Elapsed time invalid
IECQ_EI_OFF | 16#0800 | Elapsed time valid
IECQ_CY_ON | 16#1000 | Carry
IECQ_CY_OFF | 16#2000 | Not carry
IECQ_CA_ON | 16#4000 | Counter was adjusted
IECQ_CA_OFF | 16#8000 | Counter was not adjusted

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)


IEC60870-5-101 error codes

IEC 60870-5-10x Fehlercodes

Fehlercodes (Hex) | Fehlercodes (Dez) | Fehlerquelle | Beschreibung
0x00008100-0x000081FF | 33024-33279 | IEC60870-5-10x Fehlercodes | Interne IEC60870-5-10x Fehler


Internal Fehlercodes

IEC60870-5-10x Fehlercodes

Fehlercode (Hex) | Fehlercode (Dez) | Symbolische Konstante | Beschreibung
0x00008101 | 33025 | IEC870_COMMERR_INVALIDSTARTBYTE | Invalid frame start character <> 0x68
0x00008102 | 33026 | IEC870_COMMERR_RXBUFFOVERFLOW | Receive buffer overflow
0x00008103 | 33027 | IEC870_COMMERR_TXBUFFOVERFLOW | Send buffer overflow
0x00008104 | 33028 | IEC870_COMMERR_INVALIDUFFMT | Invalid U-Frame format, more than one function (STARTDT, STOPDT, TESTFR) activated
0x00008105 | 33029 | IEC870_COMMERR_INVALIDSFFMT | Invalid S-Frame format, invalid length parameter
0x00008106 | 33030 | IEC870_COMMERR_T1RESPONSE | t1 (response timeout) expired
0x00008107 | 33031 | IEC870_COMMERR_SENDSEQ | Send sequence error
0x00008108 | 33032 | IEC870_COMMERR_KOVERFLOW | k reached
0x00008109 | 33033 | IEC870_COMMERR_FATALERR | Fatal internal error
0x0000810A | 33034 | IEC870_COMMERR_INVALIDSTATE | Device is in invalid state (disconnected?)
0x0000810B | 33035 | IEC870_COMMERR_INVALIDSIZE | Invalid parameter size
0x0000810C | 33036 | IEC870_COMMERR_INVALIDVALUE | Invalid parameter value
0x0000810D | 33037 | IEC870_COMMERR_INVALIDTYPE | Invalid asdu (object) type
0x0000810F | 33039 | IEC870_COMMERR_TIMEOUT | Communication timeout
0x00008110 | 33040 | IEC870_COMMERR_LENGTH1 | Invalid length field value
0x00008111 | 33041 | IEC870_COMMERR_LENGTH2 | Length field and length field copy differs
0x00008112 | 33042 | IEC870_COMMERR_STARTCHAR2 | Invalid second stat character
0x00008113 | 33043 | IEC870_COMMERR_CHECKSUM | Invalid checksum
0x00008114 | 33044 | IEC870_COMMERR_ENDCHAR | Invalid end character
0x00008115 | 33045 | IEC870_COMMERR_LINKADDR | Invalid link address size
0x00008116 | 33046 | IEC870_COMMERR_SRVFUNCODE | Invalid link service function code
0x00008117 | 33047 | IEC870_COMMERR_FRAMETYPE | Invalid frame type
0x00008118 | 33048 | IEC870_COMMERR_UNSUPMODE | Unsupported comunication mode (balanced mode)
0x00008119 | 33049 | IEC870_COMMERR_T2KOVERFLOW | k reached and t2 (response timeout) expired
0x0000811A | 33050 | IEC870_COMMERR_INVALIDCONFIG | Invalid object configuration/initialization
0x0000811B | 33051 | IEC870_COMMERR_UNKNOWNTYPE | Unknown asdu type
0x0000811C | 33052 | IEC870_COMMERR_UNKNOWNCOT | Unknown cause of transfer
0x0000811D | 33053 | IEC870_COMMERR_UNKNOWNASDUADDR | Unknown asdu address
0x0000811E | 33054 | IEC870_COMMERR_UNKNOWNOBJADDR | Unknown object address
0x0000811F | 33055 | IEC870_COMMERR_NEGACTCON | Negative activation confirmation
0x00008120 | 33056 | IEC870_COMMERR_NEGACTTERM | Negative activation termination
0x00008121 | 33057 | IEC870_COMMERR_NEGDEACTCON | Negative deactivation confirmation
0x00008122 | 33058 | IEC870_COMMERR_BUSY | Allready in busy state
0x00008123 | 33059 | IEC870_COMMERR_AODBOVERFLOW | Application object database overflow
0x00008124 | 33060 | IEC870_COMMERR_AODBNOTFOUND | Application object not in database
0x00008125 | 33061 | IEC870_COMMERR_ACTCONTIMEOUT | Activation confirmation timeout error
0x00008126 | 33062 | IEC870_COMMERR_ACTTERMTIMEOUT | Activation termination timeout error
0x00008127 | 33063 | IEC870_COMMERR_DEACTCONTIMEOUT | Deactivation termination timeout error
0x00008128 | 33064 | IEC870_COMMERR_SELEXECTIMEOUT | Command select/execute timeout error
0x00008129 | 33065 | IEC870_COMMERR_READRESTIMEOUT | Read command response timeout error
0x00008130 | 33072 | IEC870_COMMERR_LIBNOTCOMPAT | Product libraries are incompatible
0x00008131 | 33073 | IEC870_COMMERR_DIR | Invalid DIR bit value
0x00008132 | 33074 | IEC870_COMMERR_PRM | Invalid PRM bit value
0x00008133 | 33075 | IEC870_COMMERR_FCV | Invalid FCV bit value
0x00008134 | 33076 | IEC870_COMMERR_SCANTIMEOUT | Station scan cycle timeout error

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.9.0 Build >= 1030 | PC oder CX (x86) | TcIEC870_5_101.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; werden automatisch eingebunden )
TwinCAT v2.10.0 Build >= 1301 | CX (ARM)