FunctionBlocks Read MC_ReadMessagesFB - ThorstenBrach/SRCI GitHub Wiki

MC_ReadMessagesFB

📝 Description:

Read error codes of pending errors and move them into user data block "RobotData".

Caution

This command is used internally by the RobotTask functionblock and should not be used directly within the application. The RobotTask functionblock automatically provides the extracted data in the UserData.

⚙️ FB Variables:

VAR_INPUT
Parameter Data Type Default Value Description Required

InternalLogger

IMessageLogger

-

For internal usage only

-

ExternalLogger

IMessageLogger

-

For internal usage only

-

LogLevel

LogLevelEnum

-

For internal usage only

-

Name

STRING(20)

-

User defined command name

O

ExecMode

ExecutionMode

ExecutionMode.PARALLEL

Execution mode of the command

M

Priority

PriorityLevel

PriorityMode.NORMAL

Priority of the command

M

Enable

BOOL

-

Enable / Disable the command at rising / falling edge

M

ParCmd

[ReadMessagesParCmd]

-

Command specific parameter

M

VAR_IN_OUT
Parameter Data Type Default Value Description Required

AxesGroup

AxesGroup

-

Robot group assigned to the function

M

VAR_OUTPUT
Parameter Data Type Default Value Description Required

CommandData

RobotLibraryCommandDataFB

-

For internal usage only

-

ResponseData

RobotLibraryResponseDataFB

-

For internal usage only

-

Error

BOOL

-

Error occurred during execution. See ErrorID for details

M

ErrorID

WORD

-

Error ID as raw value for error diagnosis

M

ErrorIDEnum

RobotLibraryErrorIdEnum

-

Error ID as enumeration for error diagnosis

M

ErrorAddTxt

STRING(MAX_ADD_TEXT_LENGTH)

-

Additional error text information

M

WarningID

WORD

-

Warning ID as raw value for identifying warnings

M

WarningIDEnum

RobotLibraryWarningIdEnum

-

Warning ID as enumeration for identifying warning

M

InfoID

WORD

-

Info ID for as raw value for identifying additional information

M

InfoIDEnum

RobotLibraryInfoIdEnum

-

Info ID for as enumeration for identifying additional information

M

Enabled

BOOL

-

Command enabled successfully

M

Busy

BOOL

-

Function block is being processed

M

CommmandBuffered

BOOL

-

Command was transferred to the robot-controller and confirmed

M

Valid

BOOL

-

TRUE, while the following outputs return valid values: • Values

M

OutCmd

[ReadMessagesOutCmd]

-

Command specific outputs

M

⚙️ FB Structures:

ReadMessagesParCmd
Parameter Data Type Default Value Description Required

MsgID

USINT

-

ID for function specific acknowledgement mechanism

M

MessageLevel

MessageLevel

-

Defines up to which level of severity messages will be transmitted to the PLC’s message buffer

M

ReadMessagesOutCmd
Parameter Data Type Default Value Description Required

MsgId

USINT

-

ID for function-specific acknowledgement mechanism

M

NumberOfActiveErrors

USINT

-

Number of pending errors on RC

M

NumberOfActiveWarnings

USINT

-

Number of pending warnings on RC

M

Timestamp

IEC_TIMESTAMP

-

Timestamp

M

MsgType

MessageType

-

Message Type

M

Severity

Severity

-

Severity of returned message

M

ErrorCode

DWORD

-

Error code

M

Text

STRING(255)

-

Message text

M

⏳ Timing Diagram:

Work in progress – more content coming soon.

📋 Examples:

Declaration
VAR_GLOBAL
  /// Robot assignment of function
  AxesGroup    : AxesGroup;
  /// Robot Task
  RobotTask    : MC_RobotTaskFB;
  /// Read Messages
  ReadMessages : MC_ReadMessagesFB;
END_VAR
Call
// call function block
ReadMessages
(
  Name      := 'SRCI_Robot',
  ExecMode  := ExecutionMode.PARALLEL,
  Priority  := PriorityLevel.NORMAL,
  AxesGroup := AxesGroup
);
Usage
VAR_INPUT
  /// Request enable read messages
  Enable : BOOL;
  /// Command parameter
  ParCmd : ReadMessagesParCmd;
END_VAR

VAR_OUTPUT
  /// Error ID
  ErrorID     : DINT;
  /// Error addition text
  ErrorAddTxt : STRING;
  /// Command outputs
  OutCmd      : ReadMessagesOutCmd;
END_VAR

VAR
  /// internal step counter
 _stepCmd    : DINT;
  /// internal timer for command
 _timerCmd   : TON;
  /// internal timeout for command
 _timeoutCmd : TIME := T#5S;
END_VAR
// forwarding command parameter(s)
ReadMessages.ParCmd := ParCmd;
// forwarding command output(s)
OutCmd := ReadMessages.OutCmd;


CASE _stepCmd OF

  0: // Enable or disable function ?
     IF ((     Enable               ) XOR
         ( NOT ReadMessages.Enabled ))
     THEN
       // Set parameter
       ReadMessages.ParCmd.MsgID        := 1;
       ReadMessages.ParCmd.MessageLevel := MessageLevel.WARNING;
       // set timeout
       SetTimeout(PT := _timeoutCmd, rTimer := _timerCmd);
       // inc step counter
      _stepCmd := _stepCmd + 1;
     END_IF

  1: // Start Execution
     IF (( NOT ReadMessages.Busy  ) AND
         ( NOT ReadMessages.Error ))
     THEN
       // enable/disable read messages
       ReadMessages.Enable := Enable;
       // set timeout
       SetTimeout(PT := _timeoutCmd, rTimer := _timerCmd);
       // inc step counter
      _stepCmd := _stepCmd + 1;
     ELSE
       // timeout exceeded ?
       IF (CheckTimeout(_timerCmd) = RobotLibraryConstants.OK)
       THEN
         ErrorID     := RobotLibraryErrorIdEnum.ERR_TIMEOUT_CMD;
         ErrorAddTxt := CONCAT('_stepCmd = ' , DINT_TO_STRING(_stepCmd));
       END_IF

       // Error occurred ?
       IF (ReadMessages.Error)
       THEN
         ErrorID     := ReadMessages.ErrorID;
         ErrorAddTxt := CONCAT('_stepCmd = ' , DINT_TO_STRING(_stepCmd));
       END_IF
     END_IF


  2: // Wait Execution done ?
     IF (( NOT ReadMessages.Busy                    ) AND
         (     ReadMessages.Enabled = Enable ))
     THEN
       // set timeout
       SetTimeout(PT := _timeoutCmd, rTimer := _timerCmd);
       // set step counter
      _stepCmd := 0;
     ELSE
       // timeout exceeded ?
       IF (CheckTimeout(_timerCmd) = RobotLibraryConstants.OK)
       THEN
         ErrorID     := RobotLibraryErrorIdEnum.ERR_TIMEOUT_CMD;
         ErrorAddTxt := CONCAT('_stepCmd = ' , DINT_TO_STRING(_stepCmd));
       END_IF

       // Error occurred ?
       IF (ReadMessages.Error)
       THEN
         ErrorID     := ReadMessages.ErrorID;
         ErrorAddTxt := CONCAT('_stepCmd = ' , DINT_TO_STRING(_stepCmd));
       END_IF
     END_IF

ELSE
  // invalid step
  ErrorID     := RobotLibraryErrorIdEnum.ERR_INVALID_STEP;
  ErrorAddTxt := CONCAT('_stepCmd = ' , DINT_TO_STRING(_stepCmd));
END_CASE

💡 Additional Information:

Work in progress – more content coming soon.

⚠️ **GitHub.com Fallback** ⚠️