F_iecChangeLinkLayerMode

F_iecChangeLinkLayerMode 1:

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.

F_iecChangeLinkLayerMode 2:
  • 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.

Syntax

FUNCTION F_iecChangeLinkLayerMode: BOOL
VAR_INPUT
    sendNoReplay   : BOOL;
    globalLinkAddr : BOOL;
END_VAR
VAR_IN_OUT
    asdu           : ST_IEC870_5_101AOGen;
END_VAR

F_iecChangeLinkLayerMode 3: Eingänge

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);

Ein-/Ausgänge

asdu: Die zu versendende Dateneinheit als VAR_IN_OUT-Variable;

F_iecChangeLinkLayerMode 4: Rückgabewert

Rückgabeparameter

Beschreibung

FALSE

Funktion fehlgeschlagen.

TRUE

Kein Fehler.

Beispiel 1 in ST (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 ), 7 (*SIZEOF( txTT )-1*), 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 in ST (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

...

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.4012.0

PC oder CX (x86, x64, ARM)

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