FunctionBlocks Spline MC_MoveSplineFB - ThorstenBrach/SRCI GitHub Wiki

MC_MoveSplineFB

📝 Description:

Move spline previously created on RC.

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

[MoveSplineParCmd]

-

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

[MoveSplineOutCmd]

-

Command specific outputs

M

⚙️ FB Structures:

MoveSplineParCmd
Parameter Data Type Default Value Description Required

SplineID

SINT

-

Index of the spline data set, on which the spline trajectory is based

BlendingMode

BlendingMode

-

Determines the transition behavior at the end of the movement to be sent to the next command.
Allows choosing between exact stop and different blend possibilities.

BlendingParameter

ARRAY[0..1] OF REAL

[10, 0]

Additional parameter for the blending mode, e.g. to define velocity limit (%) or blending radius.
• [0]: default 10
• [1]: default 0

MoveTime

TIME

Used only if greater than 0 (default).
• Velocity input is ignored
• Parameter defines time to reach the target position
An error is sent by the RC if the time cannot be met.

MoveSplineOutCmd
Parameter Data Type Default Value Description Required

ActualIndex

SINT

-

Index of the currently active segment of the spline data set

Progress

REAL

-

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

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

⏳ Timing Diagram:

Work in progress – more content coming soon.

📋 Examples:

Declaration
VAR_GLOBAL
  /// Robot assignment of function
  AxesGroup  : AxesGroup;
  /// Robot Task
  RobotTask  : MC_RobotTaskFB;
  /// Move spline
  MoveSpline : MC_MoveSplineFB;
END_VAR
Call
// call function block
MoveSpline
(
  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  : MoveSplineParCmd;
END_VAR

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

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