ReceiveData

ReceiveData 1:

ReceiveData empfängt Daten beliebigen Typs von der mit der Eingangsvariablen RxBuffer korrespondierenden Schnittstelle und speichert sie in der Variablen ReceiveData. Anfang und Ende des Datenstromes werden über verschiedene miteinander kombinierbare Mechanismen erkannt:

Sobald der Ausgang DataReceived TRUE wird, stehen in der Variablen ReceiveData die empfangenen Daten bereit. Die Anzahl der empfangenen Zeichen wird in LenReceiveData angegeben.

ReceiveData 2: Eingänge

VAR_INPUT
  pPrefix         : POINTER TO BYTE;
  LenPrefix       : BYTE;
  pSuffix         : POINTER TO BYTE;
  LenSuffix       : BYTE;
  pReceiveData    : POINTER TO BYTE;
  SizeReceiveData : DINT;
  Timeout         : TIME;
  Reset           : BOOL;
END_VAR

Name

Typ

Beschreibung

pPrefix

POINTER TO BYTE

pPrefix ist die Adresse einer beliebigen Datenstruktur, die mit ADR(Variablenname) an den Baustein übergeben wird. LenPrefix gibt die Anzahl der Datenbytes des Präfixes an.

LenPrefix

BYTE

LenPrefix gibt die Anzahl der Datenbytes des Präfixes an.

pSuffix

POINTER TO BYTE

pSuffix ist die Adresse einer beliebigen Datenstruktur, die mit ADR(Variablenname) an den Baustein übergeben wird.

LenSuffix

BYTE

LenSuffix gibt die Anzahl der Datenbytes des Suffixes an.

pReceiveData

POINTER TO BYTE

pReceiveData ist die Adresse der Empfangsdaten und wird mit ADR(Empfangsdaten) ermittelt. Die empfangenen Daten werden in der Variablen auf die pReceiveData zeigt abgelegt.

SizeReceiveData

UDINT

SizeReceiveData wird mit SIZEOF(Empfangsdaten) ermittelt und gibt die maximale Größe der Empfangsdaten an.

Timeout

TIME

Timeout definiert die maximale Zeitlücke zwischen zwei empfangenen Zeichen. Die Timeoutüberwachung wird nach dem ersten Zeichen wirksam. Somit kann mit Timeout nicht überwacht werden, ob ein erwartetes Telegramm eintrifft oder nicht. Diese Überwachung erfolgt extern.

Reset

 

BOOL

Durch Setzen des Eingangs Reset wird der Baustein aus dem Empfangszustand in den Grundzustand zurückgesetzt. Das Zurücksetzen ist nur in Ausnahmefällen notwendig, wenn zum Beispiel die erwarteten Daten nicht empfangen werden konnten und der Baustein Busy bleibt.

ReceiveData 3: Ein-/Ausgänge

VAR_IN_OUT
  RXBuffer         : ComBuffer;
END_VAR

Name

Typ

Beschreibung

RxBuffer

ComBuffer

Empfangsdatenpuffer der mit der verwendeten Schnittstelle korrespondiert.

ReceiveData 4: Ausgänge

VAR_OUTPUT
  DataReceived    : BOOL;
  busy            : BOOL;
  Error           : ComError_t;
  RxTimeout       : BOOL;
  LenReceiveData  : UDINT;
END_VAR

Name

Typ

Beschreibung

DataReceived

 

BOOL

DataReceived wird TRUE sobald die Empfangsdaten gültig sind. Der Ausgang ist für genau einen Zyklus TRUE, sodass die empfangenen Daten sofort ausgewertet werden müssen.

Busy

BOOL

Busy wird ab dem ersten empfangenen Zeichen TRUE und wird FALSE sobald die Daten empfangen wurden oder ein Fehler oder ein Timeout aufgetreten ist.

Error

ComError_t

Error gibt im Fehlerfall einen Fehlercode aus.

RxTimeout

 

BOOL

RxTimeout wird TRUE wenn die maximale Zeitlücke zwischen zwei empfangenen Zeichen überschritten wird. Der Datenempfang wird dadurch abgebrochen und die bis dahin empfangenen Zeichen liegen bereit.

Wenn ohne Suffix gearbeitet wird, so ist die Timeout-Erkennung kein Fehler, sondern kennzeichnet das normale Ende der Empfangsdaten.

Wird jedoch ein Suffix verwendet, so konnte dieses nicht empfangen werden. Der Timeout wird nicht als Fehler ausgegeben, sondern allein über diesen Ausgang signalisiert. In einem solchen Fall ist DataReceived dennoch TRUE und LenReceivedData gibt die Anzahl der bis zum Timeout empfangenen Daten an. Um nur gültige und vollständige Empfangsdaten (inkl. Suffix) auszuwerten, sollte eine Abfrage neben DataReceived=TRUE ebenso RxTimeout=FALSE und Error=COMERROR_NOERROR prüfen.

LenReceiveData

UDINT

LenReceiveData gibt die tatsächliche Anzahl der empfangenen Datenbytes an und kann kleiner oder gleich SizeReceiveData sein.

Wenn Prefix oder Suffix verwendet werden, so sind diese ebenfalls in den Empfangsdaten enthalten und LenReceiveData gibt somit die gesamte Anzahl der empfangenen Datenbytes inkl. Prefix und Suffix an.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.1.4012

PC oder CX (ARM, x86, x64)

Tc2_SerialCom