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