OEE | Scheduling OEE Production Runs by Material via Scripting

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)