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-101 SPS-Bausteinen ab.
Wenn Sie für die Kommunikation eine serielle Klemme KL60xx benutzen, dann wird die Busklemme zuerst 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;
ND_VAR

hSerial    :

VAR_INPUT

VAR_INPUT
    Mode            : ComSerialLineMode_t  := SERIALLINEMODE_PC_COM_PORT; (* or SERIALLINEMODE_PC_COM_PORT *)
    Baudrate        : UDINT             := 19200;     (* KL60xx only: 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200 *)
 NoDatabits         : BYTE      := 8;           (* KL60xx only: 7 or 8 *)
    Parity          : ComParity_t  := PARITY_EVEN;         (* KL60xx only: PARITY_NONE=0, PARITY_EVEN=1, PARITY_ODD=2 *)
    Stopbits        : BYTE          := 1;         (* KL60xx only: 1 or 2 *)
    Handshake       : ComHandshake_t       := HANDSHAKE_NONE;      (* KL60xx only: HANDSHAKE_NONE=0, HANDSHAKE_RTSCTS=1, HANDSHAKE_XONXOFF=2 *)
    ContinousMode   : BOOL;                     (* KL60xx only: Don't start transmission before transmit buffer is filled *)
    pComIn      : POINTER TO BYTE;
    pComOut         : POINTER TO BYTE;
    SizeComIn       : UINT;
END_VAR

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

Baudrate : Die Baudrate, soweit durch die serielle Hardware unterstützt

NoDatabits : Anzahl der Nutzdatenbits in einem Datenbyte

Parity : Typ des Paritybits eines Datenbytes

Stopbits : Anzahl der Stoppbits pro Datenbyte

Handshake : Typ des verwendeten Handshakes soweit durch die serielle Hardware unterstützt

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%IB0  : PcComInData;
    serial_out AT%QB0 : PcComOutData;
    KL6_in AT%IB100   : KL6inData5B;
    KL6_out AT%QB100  : 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%IB4100  : EL6inData22B;
    EL6_out     AT%QB4100  : 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

TwinCAT v2.9.0 Build >= 1030

PC or CX (x86)

TcIEC870_5_101Link.Lib

( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib; TcIEC870_5_101.Lib; COMlibV2.Lib; werden automatisch eingebunden )

TwinCAT v2.10.0 Build >= 1301

CX (ARM)