FunctionBlocks SearchHardstop MC_SearchHardStopFB - ThorstenBrach/SRCI GitHub Wiki

MC_SearchHardStopFB

📝 Description:

Move robot into contact with obstruction (mechanical Limit) and hold it in this position.

⚙️ 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.SEQUENCE_PRIMARY

Execution mode of the command

M

Priority

PriorityLevel

PriorityLevel.NORMAL

Priority of the command

M

AbortingMode

AbortingMode

-

Parameter which determines the behavior towards the previously sent and still active or buffered commands

M

SequenceFlag

SequenceFlag

-

Defines the target sequence in which the command will be executed For more information about the differentiation of sequences

M

Execute

BOOL

-

Start of the command at the rising edge

M

ParCmd

[SearchHardStopParCmd]

-

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

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

Active

BOOL

-

The command takes control of the motion of the according axis group

M

CommandAborted

BOOL

-

The command was aborted by another command

M

CommandInterrupted

BOOL

-

TRUE, while command is interrupted during execution and can be continued

M

OutCmd

[SearchHardStopOutCmd]

-

Command specific outputs

M

⚙️ FB Structures:

SearchHardStopParCmd
Parameter Data Type Default Value Description Required

Position

RobotCartesianPosition

-

Absolute target coordinates in the selected coordinate system (see input parameters ToolNo and FrameNo)

DetectionMode

DetectionMode

-

Defines the type of collision detection, which parameter should be observed

DetectionVector

ARRAY[0..5] OF REAL

-

Additional parameter for the detection of an end position. Defines the limits for seven joints, where the robot stops when one of the limits is reached.
Unit depends on the DetectionMode:
• Torque (default) [Nm] – Only positive values accepted
• Force [N] – Only positive values accepted
• Electrical current [A] – Only positive values accepted
• Following Error [mm]:
  - >0: Robot stops when the following error reaches the positive limit
  - <0: Robot stops when the following error reaches the negative limit

VelocityRate

REAL

-

TCP velocity in % of nominal velocity.
• <0%: (default) → Use default velocity
• 0%: → Use internal minimal velocity
• 100%: → Use maximal reference velocity

AccelerationRate

REAL

-

Acceleration for movement in % of nominal acceleration.
• <0%: (default) → Use default acceleration
• 0%: → Use internal minimal acceleration
• 100%: → Use maximal reference acceleration

DecelerationRate

REAL

-

Deceleration for movement in % of nominal deceleration.
• <0%: (default) → Use default deceleration
• 0%: → Use internal minimal deceleration
• 100%: → Use maximal reference deceleration

JerkRate

REAL

-

Jerk of the movement in % of nominal jerk.
• <0%: (default) → Use default jerk
• 0%: → Use internal minimal jerk
• 100%: → Use maximal reference jerk

ToolNo

USINT

-

Index of tool.
• 0: Flange (default)
• 1..254: Tool frames

FrameNo

USINT

-

Index of frame.
• 0: WCS (default)
• 1..254: User frames

OriMode

OriMode

-

Parameter to describe how the orientation axes (RX, RY, RZ) will be interpolated during the movement

ConfigMode

ArmConfigParameter

-

Defines the usage of the config byte inside the position

TurnMode

TurnMode

-

Defines the usage of the TurnNumber byte inside the position

Manipulation

BOOL

FALSE

Set TRUE to allow manipulation of this move command through superimposing functions.

SearchHardStopOutCmd
Parameter Data Type Default Value Description Required

RemainingDistance

REAL

-

Distance-to-go of the current job.
• -1: No valid value because move command is not yet active (valid values are pending) or not supported by RC
• >0: Actual distance between current and target position
• 0: Target position reached

Progress

REAL

-

Percentage of already traversed distance of current job.
If not supported: • -1

⏳ Timing Diagram:

Work in progress – more content coming soon.

📋 Examples:

Declaration
VAR_GLOBAL
  /// Robot assignment of function
  AxesGroup      : AxesGroup;
  /// Robot Task
  RobotTask      : MC_RobotTaskFB;
  /// Search hard stop
  SearchHardStop : MC_SearchHardStopFB;
END_VAR
Call
// call function block
SearchHardStop
(
  Name         := 'SRCI_Robot',
  ExecMode     := ExecutionMode.SEQUENCE_PRIMARY,
  AbortingMode := AbortingMode.BUFFER,
  SequenceFlag := SequenceFlag.PRIMARY_SEQUENCE,
  Priority     := PriorityLevel.NORMAL,
  AxesGroup    := AxesGroup
);
Usage
VAR_INPUT
  /// Start command execution
  Execute : BOOL;
  /// Command parameter
  ParCmd  : SearchHardStopParCmd;
END_VAR

VAR_OUTPUT
  /// Error ID
  ErrorID     : DINT;
  /// Error addition text
  ErrorAddTxt : STRING;
  /// Command outputs
  OutCmd      : SearchHardStopOutCmd;
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)
SearchHardStop.ParCmd := ParCmd;
// forwarding command output(s)
OutCmd := SearchHardStop.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 SearchHardStop.Busy  ) AND
         ( NOT SearchHardStop.Error ))
     THEN
       // start execution
       SearchHardStop.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 (SearchHardStop.Error)
       THEN
         ErrorID     := SearchHardStop.ErrorID;
         ErrorAddTxt := CONCAT('_stepCmd = ' , DINT_TO_STRING(_stepCmd));
       END_IF
     END_IF

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