FunctionBlocks Read MC_ReadRobotDataFB - ThorstenBrach/SRCI GitHub Wiki

MC_ReadRobotDataFB

📝 Description:

Read robot-specific data from the RC.

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

Execute

BOOL

-

Start of the command at the rising edge

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

Done

BOOL

-

Command executed successfully

M

Busy

BOOL

-

Function block is being processed

M

CommmandBuffered

BOOL

-

Command was transferred to the robot-controller and confirmed

M

OutCmd

[ReadRobotDataOutCmd]

-

Command specific outputs

M

⚙️ FB Struktures:

ReadRobotDataOutCmd
Parameter Data Type Default Value Description Required

RCManufacturer

STRING(20)

-

RC manufacturer name

M

RCOrderID

STRING(20)

-

RC part number

M

RCSerialNumber

STRING(16)

-

RC serial number

M

RASerialNumber

STRING(16)

-

RA serial number

M

RCFirmwareVersion

STRING(12)

-

Robot firmware version in manufacturer-specific format

M

RCInterpreterVersion

STRING(3)

-

Interpreter version

M

AxisJointUsed

AxisJointUsed

-

Used joint axes of the robot

M

AxisExternalUsed

AxisExternalUsed

-

Used external axes of the robot

M

AxisJointUnit

AxisJointUnit

-

Unit of the joint axes of the robot

M

AxisExternalUnit

AxisExternalUnit

-

Unit of the external axes of the robot

M

RCSupportedFunctions

RCSupportedFunctions

-

Functions supported by the RC

M

RobotID

STRING(16)

-

Unique and unmodifiable identification of the RA

M

InterpreterCycleTime

UINT

-

Interpreter task cycle time of the RC [ms]

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 Robot Data
  ReadRobotData : MC_ReadRobotDataFB;
END_VAR
Call
// call function block
ReadRobotData
(
  Name      := 'SRCI_Robot',
  ExecMode  := ExecutionMode.PARALLEL,
  Priority  := PriorityLevel.NORMAL,
  AxesGroup := AxesGroup,
);
Usage
VAR_INPUT
  /// Start command execution
  Execute : BOOL;
  /// Command parameter
  ParCmd  : ReadRobotDataParCmd;
END_VAR

VAR_OUTPUT
  /// Error ID
  ErrorID     : DINT;
  /// Error addition text
  ErrorAddTxt : STRING;
  /// Command outputs
  OutCmd      : ReadRobotDataOutCmd;
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)
ReadRobotData.ParCmd := ParCmd;
// forwarding command output(s)
OutCmd := ReadRobotData.OutCmd;

CASE _stepCmd OF

  0: // start execution ?
     IF ( Execute )
     THEN
       // Reset request
       Execute := FALSE;
       // set timeout
       SetTimeout(PT := _timeoutCmd, rTimer := _timerCmd);
       // inc step counter
      _stepCmd := _stepCmd + 1;
     END_IF

  1: // Start Execution
     IF (( NOT ReadRobotData.Busy  ) AND
         ( NOT ReadRobotData.Error ))
     THEN
       // start execution
       ReadRobotData.Execute := TRUE;
       // 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 (ReadRobotData.Error)
       THEN
         ErrorID     := ReadRobotData.ErrorID;
         ErrorAddTxt := CONCAT('_stepCmd = ' , DINT_TO_STRING(_stepCmd));
       END_IF
     END_IF

  2: // Wait Execution done ?
     IF (( NOT ReadRobotData.Busy ) AND
         (     ReadRobotData.Done ))
     THEN
       // stop execution
       ReadRobotData.Execute := FALSE;
       // 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 (ReadRobotData.Error)
       THEN
         ErrorID     := ReadRobotData.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** ⚠️