Skip to main content

run

Short Summary

This method should be called in every cycle as it calls recursively every single node in the hierarical composition tree. It handles the enabling, initializing, distributing of hmi signals/modes and disabling of the machine.

Parameters

none

Code

Declaration

METHOD run
VAR_INST
cycleManager :CNM_CycleManager.SimpleCycleManager;
END_VAR
VAR CONSTANT
STARTUP :DINT := CNM_ReturnTypes.DefaultSteps.STEP.INIT;
DISABLED :DINT := STARTUP + 1;
ENABLE :DINT := DISABLED + 1;
RUN_MODE :DINT := ENABLE + 1;
MODE_DONE :DINT := RUN_MODE +1;
STOP :DINT := MODE_DONE + 1;
DISABLE :DINT := STOP + 1;
ERROR :DINT := CNM_ReturnTypes.DefaultSteps.STEP.ERROR;
END_VAR

Implementation

cycleManager(execute := TRUE);
THIS^.enableTrigger(CLK:=THIS^.safetyRelease);
THIS^.disableTrigger(CLK:= THIS^.safetyRelease);
THIS^.stopTrigger(CLK := THIS^.stopImmediateRequired);

IF ( THIS^.disableTrigger.Q ) OR_ELSE ( THIS^.stopTrigger.Q ) THEN
cycleManager.proceedWith(step := STOP);
// start the stop request within one cycle
cycleManager(execute := TRUE);
THIS^.root.handleNodeRequest(
execute := cycleManager.executeStep,
request := THIS^.requests.stopImmediate
);
cycleManager(execute := TRUE);
END_IF

CASE cycleManager.step.current OF
STARTUP:
THIS^.stopImmediateRequired := FALSE;
THIS^.setMode( mode := THIS^.idleMode );
THIS^.runMode := FALSE;
THIS^.root.handleNodeRequest(
execute := cycleManager.executeStep,
request := THIS^.requests.initialize
);
cycleManager.evaluate(THIS^.root.nodeState);
DISABLED:
THIS^.runMode := FALSE;
THIS^.stopImmediateRequired := FALSE;
IF ( THIS^.enableTrigger.Q ) THEN
cycleManager.proceed();
END_IF
ENABLE:
THIS^.root.handleNodeRequest(
execute := cycleManager.executeStep,
request := THIS^.requests.enable
);
cycleManager.evaluate(THIS^.root.nodeState);
RUN_MODE:
THIS^.modeRunning := THIS^.runMode AND_THEN cycleManager.executeStep;
THIS^.root.handleMode(
execute := THIS^.modeRunning,
pause := THIS^.pauseMode,
mode := THIS^.currentMode
);

IF THIS^.modeRunning THEN
cycleManager.evaluate(THIS^.root.nodeState);
END_IF;
MODE_DONE:
THIS^.stopImmediateRequired := FALSE;
THIS^.runMode := FALSE;
THIS^.modeRunning := FALSE;
cycleManager.proceedWith(RUN_MODE);
STOP:
cycleManager.step.next := SEL(THIS^.safetyRelease, DISABLE, MODE_DONE);
THIS^.root.handleNodeRequest(
execute := cycleManager.executeStep,
request := THIS^.requests.stopImmediate
);
cycleManager.evaluate(THIS^.root.nodeState);
DISABLE:
cycleManager.step.next := DISABLED;
THIS^.root.handleNodeRequest(
execute := cycleManager.executeStep,
request := THIS^.requests.disable
);
cycleManager.evaluate(THIS^.root.nodeState);
ERROR:
cycleManager.proceedWith(STOP);
ELSE
cycleManager.proceedWith(ERROR);
END_CASE