FB_IEC870_SerialLineCtrl
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_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) |