Skip to main content

RMPSendMessage

Dieser Baustein wird verwendet, um einer beliebigen (aber durch seine ID bekannten) Modulinstanz eine Nachricht zu schicken.

Das Verhalten der Variablen xExecute, xDone, xBusy and xError ist entsprechend der „Guidelines for Library Design“. Dieses Dokument ist Bestandteil der CODESYS-Standardinstallation.

FUNCTION_BLOCK: RMPSendMessage

FUNCTION_BLOCK RMPSendMessage EXTENDS CBM.ETRIG
VAR_IN_OUT
    mdData: ARRAY[0..63] OF BYTE;
END_VAR
VAR_INPUT
    itfrmp: IRMPService;
    xExecute: BOOL;
    udiReceiverID: UDINT;
    uiSenderModuleID: UINT;
    tValidity: TIME := t#1s;
END_VAR
VAR_OUTPUT
    xDone: BOOL;
    xBusy: BOOL;
    xError: BOOL;
    uiErrorID: UINT;
END_VAR

Man beachte, dass die Aufgabe des Bausteins erfolgreich erledigt ist, sobald der Empfang der Nachricht im RMPService der Gegenseite bestätigt ist. Das muss jedoch nicht bedeuten, dass die Nachricht beim eigentlichen Empfänger angekommen ist.

In mdData werden die zu sendenden Daten übergeben. In udiReceiverID steht der Empfänger und rmp enthält die lokale RMPService-Instanz.

. In tValidity steht die Dauer der Gültigkeit der Nachricht. Dadurch wird folgendes geprüft:
  • Die Zeitdauer, bis die Nachricht verschickt worden ist, darf tValidity nicht überschritten werden (ansonsten wird eine Fehlermeldung erzeugt).

  • Die Zeitdauer, bis die Nachricht auf der Gegenseite vom Empfänger abgeholt wird, darf tValidity nicht überschreiten, sonst wird die Nachricht gelöscht.

. Folgende Fehlerursachen treten auf und werden in uiErrorID zurückgegeben:
  • Sende-Buffer ist voll; es empfiehlt sich ein erneuter Sendeversuch zu einem späteren Zeitpunkt.

  • Die Nachricht wird nicht aus dem Sende-Buffer gelöscht. Ursachen dafür können eine zu langsame Übertragung, eine gestörte Verbindung oder ein voller Empfangspuffer auf der Gegenseite sein.

  • Die Applikation, an die die Nachricht gerichtet ist, ist nicht mit dieser Applikation verbunden. Dadruch ist eine Übertragung prinzipiell unmöglich.