FunctionBlocks Additional MC_ActivateNextCommandFB - ThorstenBrach/SRCI GitHub Wiki

MC_ActivateNextCommandFB

📝 Description:

This command terminates the current instruction in the sequence buffer and proceeds with the next one.

The input parameter ProcessingMode determines whether the function is executed once in the parallel buffer or waits for a trigger signal. If the function is set to wait for a trigger, it can be configured to run either once (Trigger Once) or repeatedly (Trigger Multiple) until the user disables it. The ListenerID parameter specifies which trigger action to listen for.

If an error occurs during execution or if the RC is unable to process the command, an error message along with a corresponding ErrorID is returned.

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

Execute

BOOL

-

Start of the command at the rising edge

M

ParCmd

[ActivateNextCommandParCmd]

-

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

OutCmd

[ActivateNextCommandOutCmd]

-

Command specific outputs

M

⚙️ FB Structures:

ActivateNextCommandParCmd
Parameter Data Type Default Value Description Required

ProcessingMode

ProcessingMode

-

Processing mode used to activate the next command

ListenerID

SINT

-

ID of the trigger function that may be triggered:
• 0: Immediately (default) – execute this function immediately
• >0: Execute when the trigger function with the same EmitterID is called

ActivateNextCommandOutCmd
Parameter Data Type Default Value Description Required

OriginID

INT

-

Unique system-generated ID of the "Action" when the function is triggered.
• >0: Action is started by trigger with same FollowID
• <0: Action is stopped by trigger with same FollowID

InvocationCounter

USINT

-

Number of successful trigger-based command invocations
Only relevant if ListenerID > 0

⏳ Timing Diagram:

Work in progress – more content coming soon.

📋 Examples:

Declaration
VAR_GLOBAL
  /// Robot assignment of function
  AxesGroup           : AxesGroup;
  /// Robot Task
  RobotTask           : MC_RobotTaskFB;
  /// Activate next command
  ActivateNextCommand : MC_ActivateNextCommandFB;
END_VAR
Call
// Call functionblock
ActivateNextCommand
(
  Name           := 'SRCI_Robot',
  ExecMode       := ExecutionMode.PARALLEL,
  Priority       := PriorityLevel.NORMAL,
  ProcessingMode := ProcessingModeEnum.PARALLEL,
  AxesGroup      := AxesGroup
);
Usage
VAR_INPUT
  /// Start command execution
  Execute : BOOL;
  /// Command parameter
  ParCmd  : ActivateNextCommandParCmd;
END_VAR

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

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