P3964R

P3964R 1:

VAR_INPUT
    TXstart  : BOOL; (* Startsignal, Flankengetriggert *)
    RXstart  : BOOL; (* Startsignal, Flankengetriggert *)
    Priority : BOOL; (* 3964-Priorität *)
    TXcount  : INT; (* Anzahl Datenbytes in TxData *)
END_VAR
VAR_OUTPUT
    Busy       : BOOL;    (* Baustein aktiv *)
    TXbusy     : BOOL; (* Sendezustand *)
    TXready    : BOOL; (* Senden beendet *)
    RXbusy     : BOOL; (* Empfangszustand *)
    RXready    : BOOL; (* Empfang beendet *)
    RXcount    : INT; (* Anzahl Datenbytes in RxData *)
    Error      : BOOL; (* Fehler *)
    ErrorID    : INT; (* Fehlernummer *)
    ErrorState : STRING(80); (* interner Fehlerzustand *)
END_VAR
VAR_IN_OUT
    TXbuffer : COMbuffer; (* Zwischenpuffer zur Hardware *)
    RXbuffer : COMbuffer; (* Zwischenpuffer zur Hardware *)
    TXdata   : P3964buffer; (* Anwendungsdaten (zu senden) *)
    RXdata   : P3964buffer; (* Anwendungsdaten (empfangen)*)
END_VAR

Hardwareanbindung

Der Funktionsbaustein P3964R wickelt das 3964R-Protokoll ab. Über die verwendete Hardwareschnittstelle entscheidet die Hintergrundkommunikation, die durch einen separaten Baustein (PcComControl, KL6Control, KL6Control5B) abgewickelt wird. Die zugehörigen Datenpuffer Txbuffer und Rxbuffer 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. Txstart ist flankengetriggert, das heißt, vor einem neuen Sendeversuch muß der Baustein mit Txstart=FALSE aufgerufen werden. 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. Rxstart ist ebenfalls flankengetriggert. 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.

Fehler

Im Fehlerfall geht der Baustein in den Grundzustand (Busy=FALSE) und der Ausgang Error wird TRUE. Die ErrorId gibt den Fehlercode zurück. ErrorState gibt bei Kenntnis der internen Protokollstruktur Aufschluss über den Zustand, in dem der Fehler aufgetreten ist.