Sepasoft MES Module Suite
Batch Procedure Equipment Phase Script
The use-case for the Phase Transfer Control functionality is an agitator, heat, etc. where the equipment does not stop when the step is complete and additional adjustments to parameter values can occur for subsequent instances of the same equipment phase.
The following script creates an Agitate 2 equipment phase and recipe. Notice there are 3 instances of the Agitate 2 phase and that the first two instances have the Disable Complete parameter set to True. When the Disable Complete parameter is set to False, the phase will not be ended (it will still be in Running state) when the step completes. Also, the step will not wait until the state is set to Complete (the normal equipment phase functionality) The Disable Complete parameter is set to the default False value for the last instance of the Agitate 2 phase. This causes it to have normal functionality of waiting for the state is set to Complete before the step completes.
Python |
#CREATE EQUIPMENT PHASES phaseClass = system.mes.batch.phase.getClassLink('User Phases') builtInPhaseLink = system.mes.batch.phase.getBuiltInPhaseLink("Equipment Phase") myPhase = system.mes.batch.phase.createPhase("Agitate 2", builtInPhaseLink, phaseClass) myPhase.setExposed(True) param = myPhase.addParameter('Speed') param.setParamDirectionName('Input') param.setParamRecordingTypeName('Save Both') param.setParamDataTypeName('Integer') param.setParamValueOriginName('Fixed Recipe Value') param.setParamKindName('User Phase') system.mes.batch.phase.savePhase(myPhase) #ADD PHASES TO UNIT CLASS ucLink = system.mes.batch.unitclass.getLink('Mixer') unitClass = ucLink.getMESObject() pLink1 = system.mes.batch.phase.getPhaseLink('Agitate 2') unitClass.addPhase(pLink1) system.mes.batch.unitclass.save(unitClass) #CREATE RECIPE recipeCls = system.mes.batch.recipe.loadClass('My Recipes', None) recipe = system.mes.batch.recipe.createRecipe('Disable Phase Complete 2', recipeCls.asLink()) recipe.setRecipeState('Production Ready') recipe.setRecipeScale(0.5) recipe.setUserVersion(1) procedure = recipe.createLogic('Procedure'); #Custom batch parameters are added to the Procedure unitProcedure = procedure.createLogic('Unit Procedure') unitClassLink = system.mes.batch.unitclass.getLink('Mixer') unitProcedure.setUnitClassRef(unitClassLink) operation = unitProcedure.createLogic('Operation') procedure.addStep("P1", 1, system.mes.batch.phase.getBuiltInPhaseLink('Start')) p2 = procedure.addStep("P2", 2, system.mes.batch.phase.getBuiltInPhaseLink('Unit Procedure')) p3 = procedure.addStep("P3", 3, system.mes.batch.phase.getBuiltInPhaseLink('Transition')) procedure.addStep("P4", 4, system.mes.batch.phase.getBuiltInPhaseLink('Terminator')) p2.setLogicRefUUID(unitProcedure.getUUID()) p3.setParameterValue('Transition_Expression', 'P2.Complete = True') procedure.addLink(1, 2) procedure.addLink(2, 3) procedure.addLink(3, 4) unitProcedure.addStep("UP1", 1, system.mes.batch.phase.getBuiltInPhaseLink('Start')) uP2 = unitProcedure.addStep("UP2", 2, system.mes.batch.phase.getPhaseLink('Operation')) uP3 = unitProcedure.addStep("UP3", 3, system.mes.batch.phase.getBuiltInPhaseLink('Transition')) unitProcedure.addStep("UP4", 4, system.mes.batch.phase.getBuiltInPhaseLink('Terminator')) uP2.setLogicRefUUID(operation.getUUID()) uP3.setParameterValue('Transition_Expression', 'UP2.Complete = True') unitProcedure.addLink(1, 2) unitProcedure.addLink(2, 3) unitProcedure.addLink(3, 4) operation.addStep("O1", 1, system.mes.batch.phase.getBuiltInPhaseLink('Start')) o2 = operation.addStep("O2", 2, system.mes.batch.phase.getPhaseLink('Agitate 2')) o3 = operation.addStep("O3", 3, system.mes.batch.phase.getBuiltInPhaseLink('Transition')) o4 = operation.addStep("O4", 4, system.mes.batch.phase.getPhaseLink('Timer')) o5 = operation.addStep("O5", 5, system.mes.batch.phase.getBuiltInPhaseLink('Transition')) o6 = operation.addStep("O6", 6, system.mes.batch.phase.getPhaseLink('Agitate 2')) o7 = operation.addStep("O7", 7, system.mes.batch.phase.getBuiltInPhaseLink('Transition')) o8 = operation.addStep("O8", 8, system.mes.batch.phase.getPhaseLink('Timer')) o9 = operation.addStep("O9", 9, system.mes.batch.phase.getBuiltInPhaseLink('Transition')) o10 = operation.addStep("O10", 10, system.mes.batch.phase.getPhaseLink('Agitate 2')) o11 = operation.addStep("O11", 11, system.mes.batch.phase.getBuiltInPhaseLink('Transition')) operation.addStep("O12", 12, system.mes.batch.phase.getBuiltInPhaseLink('Terminator')) o2.setParameterValue('Disable Complete', True) o2.setParameterValue('Speed', 25) o3.setParameterValue('Transition_Expression', 'O2.Complete = True') o4.setParameterValue('Mode', 'Retentive') o4.setParameterValue('Interval', '1 Second') o4.setParameterValue('Timer_Direction', 'Up') o4.setParameterValue('Target_Duration', '00:00:30') o5.setParameterValue('Transition_Expression', 'O4.Complete = True') o6.setParameterValue('Disable Complete', True) o6.setParameterValue('Speed', 75) o7.setParameterValue('Transition_Expression', 'O6.Complete = True') o8.setParameterValue('Mode', 'Retentive') o8.setParameterValue('Interval', '1 Second') o8.setParameterValue('Timer_Direction', 'Up') o8.setParameterValue('Target_Duration', '00:00:30') o9.setParameterValue('Transition_Expression', 'O8.Complete = True') o10.setParameterValue('Disable Complete', False) o10.setParameterValue('Speed', 0) o11.setParameterValue('Transition_Expression', 'O10.Complete = True') operation.addLink(1, 2) operation.addLink(2, 3) operation.addLink(3, 4) operation.addLink(4, 5) operation.addLink(5, 6) operation.addLink(6, 7) operation.addLink(7, 8) operation.addLink(8, 9) operation.addLink(9, 10) operation.addLink(10, 11) operation.addLink(11, 12) saveList = system.mes.object.list.createList() saveList.add(recipe) saveList.add(procedure) saveList.add(unitProcedure) saveList.add(operation) system.mes.batch.recipe.saveRecipe(saveList) |
Sepasoft MES Module Suite