Schedule Production Runs via Scripting
Example Scripts for scheduling production runs based on material information or work orders.
Scheduling with existing Work Orders
Python |
####User edit woName = 'WO123' eqPath = 'JR Brews\EDH\Packaging\Packaging Line 1' newStartDate = system.date.addHours(system.date.now(),2) quantity = 1000 ####End user edit woObj = system.mes.workorder.getMESWorkOrder(woName) matObj = system.mes.loadMESObject(woObj.getMaterialRefUUID()) #all oee operations are structured as materialname-enterprise:site:area:line searchPattern = matObj.getName() + '-*' + eqPath.replace('\',':') #https://help.sepasoft.com/docs/display/SEPA/system.mes.getAvailableOperations results = system.mes.getAvailableOperations(eqPath,searchPattern, False, True) if results.size() == 1: opDef = results.get(0).getMESObject() allowOverlapping = False category = 'Active' schedule = system.mes.createSchedule(opDef) #https://help.sepasoft.com/docs/display/MHD/system.mes.scheduleOperations scheduleList = system.mes.scheduleOperations(schedule, newStartDate, allowOverlapping, category) for ndx in range(scheduleList.size()): scheduleOperations = scheduleList.get(ndx) objTypeName = scheduleOperations.getMESObjectType().getName() ##Set the schedule production count on the Operations Schedule object (top level) if objTypeName == 'OperationsSchedule': #https://help.sepasoft.com/docs/display/SEPA/Operations+Schedule scheduleOperations.setScheduleProductionCount(quantity) ##Set the Material Qty on the Production Request Segment elif objTypeName == 'RequestSegment' and (scheduleOperations.getComplexPropertyCount('ResponseMaterial') > 0): #https://help.sepasoft.com/docs/display/SEPA/Request+Segment if scheduleOperations.getAvailableMaterialOptions('Material Out').size() > 0: scheduleOperations.setMaterial('Material Out', matObj.getName(), eqPath, quantity) #save all objects system.mes.saveSchedule(scheduleList) |
Scheduling without Work Orders
Python |
def scheduleMatRun(matName, line, startDate, startTime, qty): lineObj = system.mes.loadMESObject(line, 'Line') eqPath = lineObj.getEquipmentPath() matList = system.mes.oee.getEquipmentAvailableMaterial(eqPath, matName) matLink = matList.get(0) searchString = matName + '-' + eqPath.replace('\', ':') opList = system.mes.getAvailableOperations(eqPath, searchString, True, True) opDef = opList.get(0).getMESObject() schedule = system.mes.createSchedule(opDef) startDate = startDate.split('-') startTime = startTime.split(':') startDate = system.date.getDate(int(startDate[0]), int(startDate[1])-1, int(startDate[2])) startDate = system.date.setTime(startDate, int(startTime[0]), int(startTime[1]), int(startTime[2])) dueDate = system.date.addDays(startDate, 5) scheduleList = system.mes.scheduleOperations(schedule, startDate, dueDate, True, 'Active') for ndx in range(scheduleList.size()): scheduleOperations = scheduleList.get(ndx) print scheduleOperations objTypeName = scheduleOperations.getMESObjectType().getName() ##Sort the schedule items in the list by their object type. ##Set the schedule production count on the Operations Schedule object (top level) if objTypeName == 'OperationsSchedule': scheduleOperations.setScheduleProductionCount(qty) ##Set the Material Qty on the Production Request Segment elif objTypeName == 'RequestSegment' and (scheduleOperations.getComplexPropertyCount('ResponseMaterial') > 0): if scheduleOperations.getAvailableMaterialOptions('Material Out').size() > 0: scheduleOperations.setMaterial('Material Out', matName, eqPath, qty) print 'set work order scheduled qty', scheduleOperations system.mes.saveSchedule(scheduleList) scheduleMatRun('PC_01', 'Line 1', '2017-05-24', '17:02:01', 150) |
Result
OperationsSchedule (a09bc3ae-afbe-4b52-899a-b146355d6d71, PC_01-Enterprise:Site 1:Area 1:Line 1 Schedule, 0 parents, 0 children, 0 custom properties, 1 complex properties)
OperationsRequest (4e1d973e-66aa-4221-bdc2-6a2a255b86cd, PC_01-Enterprise:Site 1:Area 1:Line 1, 0 parents, 0 children, 0 custom properties, 2 complex properties)
RequestSegment (b57531c6-03ae-4152-9a7f-637c5b161ca2, PC_01-Enterprise:Site 1:Area 1:Line 1_CO, 0 parents, 0 children, 0 custom properties, 7 complex properties)
RequestSegment (6f505601-8dc4-4b81-822f-904628bb3a43, PC_01-Enterprise:Site 1:Area 1:Line 1, 0 parents, 0 children, 0 custom properties, 7 complex properties)
set work order scheduled qty RequestSegment (6f505601-8dc4-4b81-822f-904628bb3a43, PC_01-Enterprise:Site 1:Area 1:Line 1, 0 parents, 0 children, 0 custom properties, 7 complex properties)