Equipment Phase Script

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