FB_IEC870_SerialLineCtrl

FB_IEC870_SerialLineCtrl 1:

Der Funktionsbaustein FB_IEC870_SerialLineCtrl wickelt die Kommunikation zwischen einer seriellen Schnittstelle (KL60xx, EL60xx oder COM-Schnittstelle) und den IEC60870-5-10x SPS-Bausteinen ab.
Wenn Sie für die Kommunikation eine serielle Klemme KL60xx benutzen, dann wird die Busklemme zuerst von dem Baustein initialisiert und konfiguriert (Baudrate, Parity, usw.). Die Konfiguration der PC-COM-Schnittstelle und der Klemme EL60xx muss aber in TwinCAT System Manager durchgeführt werden. Die empfangenen und zu sendenden Daten werden in den internen Puffern der hSerial-Variablen gehalten. Der Funktionsbaustein muss in der SPS-Task zyklisch aufgerufen werden.

VAR_IN_OUT

VAR_IN_OUT
    hSerial     : T_HSERIALCTRL;
END_VAR

hSerial : Verbindungs-Handle zu anderen IEC 60870-5-10x Protokoll-Funktionsbausteinen. Über diese Variable werden mit dem FB_IEC870_SerialLineCtrl-Funktionsbaustein die zu sendenden und empfangenen Daten ausgetauscht.

VAR_INPUT

VAR_INPUT
    Mode         : ComSerialLineMode_t   := SERIALLINEMODE_PC_COM_PORT;
    Baudrate     : UDINT      := 19200;
    NoDatabits   : BYTE       := 8;
    Parity       : ComParity_t:= PARITY_EVEN;
    Stopbits     : BYTE       := 1;
    Handshake    : ComHandshake_t    := HANDSHAKE_NONE;
    ContinousMode: BOOL       := FALSE;
    pComIn       : PVOID      := 0;
    pComOut      : PVOID      := 0;
    SizeComIn    : UINT       := 0;
END_VAR

Mode: Der Mode-Eingang legt eindeutig fest, welche serielle Hardware verwendet wird.

Baudrate: Die Baudrate, soweit durch die serielle Hardware unterstützt (nur bei KL60xx-Mode: 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200).

NoDatabits: Anzahl der Nutzdatenbits in einem Datenbyte (nur bei KL60xx-Mode: 7 or 8).

Parity: Typ des Paritybits eines Datenbytes (nur bei KL60xx-Mode: PARITY_NONE=0, PARITY_EVEN=1, PARITY_ODD=2).

Stopbits: Anzahl der Stoppbits pro Datenbyte (nur bei KL60xx-Mode: 1 or 2).

Handshake : Typ des verwendeten Handshakes soweit durch die serielle Hardware unterstützt (nur bei KL60xx-Mode: HANDSHAKE_NONE=0, HANDSHAKE_RTSCTS=1, HANDSHAKE_XONXOFF=2).

ContinousMode: Schaltet das kontinuierliche Senden ein, wenn es durch die serielle Hardware unterstützt wird.

Wenn ContinousMode TRUE ist, werden gesendete Daten erst dann aus der seriellen Hardware abgeschickt, wenn der Hardware-Sendepuffer voll ist. Dadurch wird ein zeitlückenfreies Senden gewährleistet, solange die Datenmenge in der Größenordnung des Hardware-Sendepuffers liegt. Der continous mode wird nur in besonderen Fällen benötigt, wenn das Endgerät auf Zeitlücken mit einem Timeout reagiert.

pComIn: Universeller Pointer auf die Eingangsvariable der Prozessdaten der seriellen Hardware (Datentypen KL6inData, KL6inData5b, PcComInData, EL6inData22B). Der Pointer wird mit der ADR() Funktion zugewiesen.

pComOut: Universeller Pointer auf die Ausgangsvariable der Prozessdaten der seriellen Hardware (Datentypen KL6outData, KL6outData5b, PcComOutData, EL6outData22B). Der Pointer wird mit der ADR() Funktion zugewiesen.

SizeComIn: Größe des Eingangs-Prozessabbildes der verwendeten seriellen Hardware. Die Größe wird mit der SIZEOF() Funktion ermittelt und zugewiesen.

Beispiel 1:

Das Beispiel zeigt einen Aufruf in ST. Durch das Setzen der Mode-Variablen kann zwischen zwei Kommunikationswegen umgeschaltet werden.

Bei Mode = SERIALLINEMODE_PC_COM_PORT wird über eine serielle COM-Schnittstelle des PC's und bei Mode = SERIALLINEMODE_KL6_5B_STANDARD über eine KL6001 Busklemme kommuniziert (5 Byte mode).

PROGRAM P_SerialComm_HighSpeed
VAR
    fbSerialLineCtrl   : FB_IEC870_SerialLineCtrl;
    Mode               : ComSerialLineMode_t := SERIALLINEMODE_KL6_5B_STANDARD; (* SERIALLINEMODE_PC_COM_PORT *)

    serial_in AT%I*    : PcComInData;
    serial_out AT%Q*   : PcComOutData;
    KL6_in AT%I*       : KL6inData5B;
    KL6_out AT%Q*      : KL6outData5B;

    hSerial            : T_HSERIALCTRL;
END_VAR
fbSerialLineCtrl( Mode := Mode,
        Baudrate := 19200,
        NoDatabits := 8,
        Parity := PARITY_EVEN,
        Stopbits := 1,
        Handshake := HANDSHAKE_NONE,
        ContinousMode := FALSE,
        pComIn := SEL( Mode = SERIALLINEMODE_KL6_5B_STANDARD, ADR( serial_in ), ADR( KL6_in ) ),
        pComOut := SEL( Mode = SERIALLINEMODE_KL6_5B_STANDARD, ADR( serial_out ), ADR( KL6_out ) ),
        SizeComIn := SEL( Mode = SERIALLINEMODE_KL6_5B_STANDARD, SIZEOF( serial_in ), SIZEOF( KL6_in ) ),
        hSerial := hSerial );

Beispiel 2:

In diesem Beispiel wird über eine EL6001 kommuniziert (22 Byte mode). Die Konfiguration der EL6001 Klemme (Baudrate, Parity usw.) muss in TwinCAT System Manager durchgeführt werden.

PROGRAM P_SerialComm_HighSpeed
VAR
    fbSerialLineCtrl   : FB_IEC870_SerialLineCtrl := ( Mode := SERIALLINEMODE_EL6_22B );
    EL6_in AT%I*       : EL6inData22B;
    EL6_out AT%Q*      : EL6outData22B;
    hSerial            : T_HSERIALCTRL;
END_VAR
fbSerialLineCtrl( pComIn := ADR( EL6_in ), pComOut := ADR( EL6_out ), SizeComIn := SIZEOF( EL6_in ), hSerial := hSerial );

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)