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