RMPExchangeData (STRUCT) ¶ TYPE RMPExchangeData : STRUCT Data structure used to transfer the data in the RMP (Reliable Message Protocoll) InOut: Name Type Comment usiLastReceivedCounter USINT Bit0-6: acknowledgement mechanism: tells remote MH, which message (usiMessageSendCounter) was received as last Bit7: toggle bit (mirror of usiMessageSendCounter.7) mdData ARRAY [0..63] OF BYTE Data uiReceiverModuleID UINT ModuleID on receiver application uiSenderModuleID UINT ModuleID on sender application tValidity TIME Validity of this message in ms usiMessageSendCounter USINT Bit0-6: counter that is increased with each sent message (Bit0-6) Bit7: toggle-bit to check connection
RMPMessageBuffer (FB) ¶ FUNCTION_BLOCK FINAL RMPMessageBuffer This FB represents a queue of messages that are stored in a RMPService; it is used both for sending and receiving Methods: AddMessage ClearExpiredMessages Delete EnlargeExpirationTime ExistsMessageWithHandle GetMessage GetMessageForReceiver GetMessageToApplication Lock Unlock Structure: AddMessage (Method) ClearExpiredMessages (Method) Delete (Method) EnlargeExpirationTime (Method) ExistsMessageWithHandle (Method) GetMessage (Method) GetMessageForReceiver (Method) GetMessageToApplication (Method) Lock (Method) Unlock (Method)
RMPMessageBuffer.AddMessage (METH) ¶ METHOD FINAL AddMessage : UINT Queues message and returns the handle of this message or 16#FFFF, if the buffer was full InOut: Scope Name Type Comment Return AddMessage UINT Input udiSenderID UDINT The sender ID of the message udiReceiverID UDINT The receiver ID of the message tValidity TIME For send lists: tExpirationTime is the time distance, how long this message shall be kept in the receive queue for receive lists: tExpirationTime is the point in time, when it hat to be deleted if not acknowledged pmdData POINTER TO ARRAY [0..63] OF BYTE Data
RMPMessageBuffer.ClearExpiredMessages (METH) ¶ METHOD PUBLIC FINAL ClearExpiredMessages Clears the expired messages out of the buffer
IRMPService.QueueSendMessage (METH) ¶ METHOD QueueSendMessage : UINT This method is used internally. Use the function block RMPSendMessage instead. This method adds a message to send into the send queue and returns a handle, that enables to check if the transmission was successful FFFF indicates that the buffer is full and the message was not transmitted FFFE indicates that the receiver module is in the same application and that the transmission was successful InOut: Scope Name Type Comment Return QueueSendMessage UINT Input udiSenderID UDINT The sender ID of the message (see function description for details) udiReceiverID UDINT The receiver ID of the message (see function description for details) tValidity TIME The time this message remains valid pmdData POINTER TO ARRAY [0..63] OF BYTE Data
IRMPService.Receive (METH) ¶ METHOD Receive : UDINT This method is called by each module that is able to receive a message it takes the oldest received message for uiReceiverID and acknowledges it. Returns 16#FFFFFFFF if there is no message waiting for the receiver. Returns 16#FFFFFFFE if there is at least one message waiting for the receiver, if the oldest message is currently locked by a different task. In all other cases, the communication address of the sender is returned. A possible call semantic could be: udiRec := Environment^.rmps.Receive(uiReceiverModuleID:=UDINT_TO_UINT(ComAddress AND 16#FFFF), pmd:=ADR(mdData)); Where udiRec returns the address of the module/communicator from which the message was received. Accesing this function was done using the environemin any module implementing IModule . InOut: Scope Name Type Comment Return Receive UDINT Input uiReceiverModuleID UINT The (local) address of the receiver, which equals the first 16bit of the ComAddress (see AND 16#FFFF) pmd POINTER TO ARRAY [0..63] OF BYTE The message data buffer to write to
IRmpService2 (ITF) ¶ INTERFACE IRmpService2 EXTENDS IRmpService Interface implemented by the RMP (Reliable Message Protocoll) service Methods: GetIsActionOngoing SetIsActionOngoing Structure: GetIsActionOngoing (Method) SetIsActionOngoing (Method)
IRmpService2.GetIsActionOngoing (METH) ¶ METHOD GetIsActionOngoing : BOOL This method determines if this channel (for RMP) is currently active writing or reading. ..note: Do not perform an action without checking for avitivity first. This is especially important when using multi-threading (especially on multi-core systems). Whenever an action is ongoing, one should omit to do any work on variables used in the RMP (for example as mirror variables). In the case of an action is ongoing and you want to work on RMP variables, just wait as amny cycles as necessary, until no action is ongoing any more. Then when working on the variables use IRmpService2.SetIsActionOngoing to ensure, that AC generated code will not interfere with your work on the RMP variables. ..return: If it was possible to get the current state of activity. If this is FALSE xIsActionOngoing is not valid! InOut: Scope Name Type Comment Return GetIsActionOngoing BOOL Output xIsActionOngoing BOOL Whether the RMPService is currently active.
IRmpService2.SetIsActionOngoing (METH) ¶ METHOD SetIsActionOngoing : BOOL This method tries to set that this channel (for RMP) is currently active writing or reading. ..note: Do not start an activity without setting the flag by this method! And do not forget to reset it after finishing. This is especially important when using multi-threading (especially on multi-core systems). Whenever an action is ongoing, one should omit to do any work on variables used in the RMP (for example as mirror variables). In the case of an action is ongoing and you want to work on RMP variables, just wait as many cycles as necessary, until no action is ongoing any more. Then when working on the variables use IRmpService2.SetIsActionOngoing to ensure, that AC generated code will not interfere with your work on the RMP variables. ..return: If it was possible to set the current state of activity. If this is FALSE xIsActionOngoing has not been set! InOut: Scope Name Type Return SetIsActionOngoing BOOL Input xIsActionOngoing BOOL
IRMPFBCommunication.InitializeCommunicationFBConnections (METH) ¶ METHOD InitializeCommunicationFBConnections : BOOL This method is called before the Cyclic-RMP-Communication AND provides you with a complete List of all locally (on one application) generated communication FBs (including the this instance). InOut: Scope Name Type Comment Return InitializeCommunicationFBConnections BOOL Input pComFBs POINTER TO IRMPFBCommunication The list of locally generated communication FBs udiComFBsCount UDINT This is the number of locally generated communication FBs pComFBs