The fast PLC task

Add the following PLC code to the declaration part:

PROGRAM P_SerialComm_HighSpeed
VAR
     fbSerialLineCtrl    : FB_IEC870_SerialLineCtrl := (
                Mode        := SERIALLINEMODE_PC_COM_PORT, (*SERIALLINEMODE_KL6_5B_STANDARD *)
                Baudrate    := 19200,
                NoDatabits      := 8,
                Parity      := PARITY_EVEN,
                Stopbits    := 1,
                Handshake       := HANDSHAKE_NONE,
                ContinousMode   := FALSE );

    serial_in           AT%IB4000       : PcComInData;
    serial_out      AT%QB4000       : PcComOutData;

    KL6_in      AT%IB4100       : KL6inData5B;
    KL6_out     AT%QB4100       : KL6outData5B;

    hSerial     : T_HSERIALCTRL;
END_VAR

and in the program code:

fbSerialLineCtrl(       pComIn      := SEL( fbSerialLineCtrl.Mode = SERIALLINEMODE_KL6_5B_STANDARD, ADR( serial_in ), ADR( KL6_in ) ),
                    pComOut     := SEL( fbSerialLineCtrl.Mode = SERIALLINEMODE_KL6_5B_STANDARD, ADR( serial_out ), ADR( KL6_out ) ),
                    SizeComIn       := SEL( fbSerialLineCtrl.Mode = SERIALLINEMODE_KL6_5B_STANDARD, SIZEOF( serial_in ), SIZEOF( KL6_in ) ),
                    hSerial     := hSerial );

A TwinCAT System Manager configuration suitable for this sample can be found on the sample overview page. The mode variable can be used to switch between two communication paths.

Communication via standard PC COMx interface

Communication via serial Beckhoff Bus Terminals KL6xxx

Communication via serial Beckhoff Bus Terminals EL6xxx

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