P3964R

P3964R 1:

Der Funktionsbaustein P3964R wickelt das 3964R-Protokoll ab. Über die verwendete Hardwareschnittstelle entscheidet die Hintergrundkommunikation, die durch einen separaten Baustein SerialLineControl abgewickelt wird. Die zugehörigen Datenpuffer TxBuffer und RxBuffer (vom Typ ComBuffer) werden an den Baustein P3964R übergeben.

Senden

Sendedaten werden von der SPS in den Sendedatenpuffer TXdata eingetragen. Die eingetragene Anzahl der Datenbytes wird in TXcount übergeben und anschließend TXstart auf TRUE gesetzt. Im Sendezustand ist TXbusy=TRUE. Nachdem die Daten erfolgreich übertragen wurden, wird TXready=TRUE.

Empfangen

Zum Empfang von Daten wird RXstart auf TRUE gesetzt. Nachdem ein vollständiger Datensatz empfangen wurde, geht der Ausgang RXready auf TRUE und RXcount Datenbytes liegen im Empfangsdatenpuffer RXdata bereit. Im Empfangszustand ist RXbusy=TRUE.

Empfang abbrechen

Der Baustein P3964R kann entweder im Sende- oder im Empfangsmodus betrieben werden. Es ist empfehlenswert, den Baustein in der Zeit, in der nicht gesendet wird auf Empfang zu schalten. Solange der Baustein im Empfangsmodus ist, jedoch noch kein Startzeichen der Gegenstelle empfangen wurde kann durch eine steigende Flanke an TXstart der Empfang unterbrochen und das Senden von Daten eingeleitet werden. Nach der Übertragung geht der Baustein in den Grundzustand (Busy=FALSE) und wird erst durch eine neue Flanke an RXstart auf Empfang geschaltet.

Priorität

Bei einer 3964R-Datenverbindung darf jede Gegenstelle zu einem beliebigen Zeitpunkt senden. Versuchen beide Seiten gleichzeitig zu senden, kommt es zu einer Kollision. In diesem Fall geht die Seite mit niedriger Priorität in den Empfangszustand und die Seite mit hoher Priorität sendet erneut. Aus diesem Grund kann bei niedriger Priorität der Ausgang RXready=TRUE werden, obwohl Daten gesendet werden sollten. Die Daten in RXdata sind dann gegebenenfalls auszuwerten. Die Einstellung der Priorität auf beiden Seiten ist Vereinbarungssache.

P3964R 2: Eingänge

VAR_INPUT
  TXstart  : BOOL;    (* start signal, edge-triggered *)
  RXstart  : BOOL;    (* start signal, edge-triggered *)
  Priority : BOOL;    (* 3964 priority, TRUE=high, FALSE=low *)
  TXcount  : INT;     (* number of data bytes in TxData *)
END_VAR

Name

Typ

Beschreibung

TXstart

BOOL

TXstart ist flankengetriggert, das heißt, vor einem neuen Sendeversuch muss der Baustein mit TXstart=FALSE aufgerufen werden. Wird TXstart dann auf TRUE gesetzt, startet dies den Sendeversuch.

RXstart

BOOL

RXstart ist flankengetriggert. Zum Empfang von Daten wird RXstart auf TRUE gesetzt.

Priority

BOOL

Bei einer 3964R-Datenverbindung darf jede Gegenstelle zu einem beliebigen Zeitpunkt senden. Versuchen beide Seiten gleichzeitig zu senden, kommt es zu einer Kollision. In diesem Fall geht die Seite mit niedriger Priorität in den Empfangszustand und die Seite mit hoher Priorität sendet erneut. Aus diesem Grund kann bei niedriger Priorität der Ausgang RXready=TRUE werden, obwohl Daten gesendet werden sollten. Die Daten in RXdata sind dann gegebenenfalls auszuwerten. Die Einstellung der Priorität auf beiden Seiten ist Vereinbarungssache.

TXcount

INT

Die eingetragene Anzahl der Datenbytes wird in TXcount übergeben.

P3964R 3: Ein-/Ausgänge

VAR_IN_OUT
  TXdata          : P3964buffer;  (* application data (to send)*)
  RXdata          : P3964buffer;  (* application data (received)*)
  TxBuffer        : ComBuffer;    (* buffer between protocol software and terminal *)
  RxBuffer        : ComBuffer;    (* buffer between protocol software and terminal *)
END_VAR

Name

Typ

Beschreibung

TXdata

P3964buffer

Sendedaten werden von der SPS in den Sendedatenpuffer TXdata eingetragen.

RXdata

P3964buffer

RXcount Datenbytes liegen im Empfangsdatenpuffer RXdata bereit.

TxBuffer

ComBuffer

Puffer mit Sendedaten für die verwendete serielle Hardware.

RxBuffer

ComBuffer

Puffer in dem die Empfangsdaten abgelegt werden.

P3964R 4: Ausgänge

VAR_OUTPUT
  Busy       : BOOL;           (* block is active *)
  TXbusy     : BOOL;           (* send state *)
  TXready    : BOOL;           (* send completed, data were transferred *)
  RXbusy     : BOOL;           (* receive state *)
  RXready    : BOOL;           (* receive completed, data were transferred *)
  RXcount    : INT;            (* number of data bytes in RxData *)
  Error      : BOOL;           (* error *)
  ErrorID    : P3964R_Error_t; (* error id *)
  ErrorState : STRING(80);     (* internal error state *)
END_VAR

Name

Typ

Beschreibung

Busy

BOOL

Nach der Übertragung geht der Baustein in den Grundzustand (Busy=FALSE).

TXbusy

BOOL

Im Sendezustand ist TXbusy=TRUE.

TXready

BOOL

Nachdem die Daten erfolgreich übertragen wurden, wird TXready=TRUE.

RXbusy

BOOL

Im Empfangszustand ist RXbusy=TRUE.

RXready

BOOL

Nachdem ein vollständiger Datensatz empfangen wurde, ist der Ausgang RXready=TRUE.

RXcount

INT

RXcount Datenbytes liegen im Empfangsdatenpuffer RXdata bereit.

Error

BOOL

Im Fehlerfall wird der Ausgang Error=TRUE und der Baustein geht in den Grundzustand (Busy=FALSE).

ErrorID

P3964R_Error_t

Die ErrorID gibt den Fehlercode zurück.

ErrorState

STRING

ErrorState gibt bei Kenntnis der internen Protokollstruktur Aufschluss über den Zustand, in dem der Fehler aufgetreten ist.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.1.4012

PC oder CX (ARM, x86, x64)

Tc2_SerialCom