def configureMaterial(matName, matClass): import time try: matClassObj = system.mes.loadMESObject(matClass, 'MaterialClass') except: root = system.mes.loadMESObject('Material Root','MaterialRoot') matClassObj = system.mes.createMESObject('MaterialClass') matClassObj.setName(matClass) matClassObj.addParent(root) print 'creating material class',matClass matDefObj = system.mes.createMESObject('MaterialDef') matDefObj.setName(matName) matDefObj.addParent(matClassObj) list = system.mes.object.list.createList() list.add(matClassObj) list.add(matDefObj) system.mes.saveMESObjects(list) print 'creating material definition',matName time.sleep(1) def configMaterialOperation(matName, matClassName, config): try: matLink = system.mes.getMESObjectLinkByName('MaterialDef', matName) except: configureMaterial(matName, matClassName) matLink = system.mes.getMESObjectLinkByName('MaterialDef', matName) operList = system.mes.oee.createMaterialProcessSegment(matLink, config['linePath']) for opSeg in operList: if opSeg.getMESObjectTypeName() == 'OperationsDefinition': print opSeg.getTrackProgressBy() if config.has_key('trackProductionBy') and config['trackProductionBy'] == 'time': opSeg.setTrackProgressBy('Use Time') else: opSeg.setTrackProgressBy('Material Out') if opSeg.getMESObjectTypeName() == 'OperationsSegment': if '_CO' not in opSeg.getName(): matProp = opSeg.getComplexProperty('Material', 'Material Out') if matProp: if config.has_key('scheduleRate'): matProp.setRate(float(config['scheduleRate'])) if config.has_key('infeedUnits'): matProp.setUnits(config['infeedUnits']) if config.has_key('ratePeriod'): matProp.setRatePeriod(config['ratePeriod']) productionSettings = opSeg.getComplexProperty('ProductionSettings', 0) if config.has_key('OEERate'): productionSettings.setOEERate(float(config['OEERate'])) if config.has_key('outfeedUnits'): productionSettings.setOutfeedUnits(config['outfeedUnits']) if config.has_key('infeedUnits'): productionSettings.setInfeedUnits(config['infeedUnits']) if config.has_key('rejectUnits'): productionSettings.setRejectUnits(config['rejectUnits']) if config.has_key('outfeedEquipmentPath'): outfeedEquipLink = system.mes.getMESObjectLinkByEquipmentPath(config['outfeedEquipmentPath']) productionSettings.setOutfeedEquipmentRef(outfeedEquipLink) if config.has_key('infeedEquipmentPath'): infeedEquipLink = system.mes.getMESObjectLinkByEquipmentPath(config['infeedEquipmentPath']) productionSettings.setInfeedEquipmentRef(infeedEquipLink) if config.has_key('packageCount'): productionSettings.setPackageCount(float(config['packageCount'])) opSeg.setPropertyValue('ProductionSettings', productionSettings) triggerEnd = opSeg.getPrimaryEndTrigger() if config.has_key('autoEndProduction'): triggerEnd.setAuto(config['autoEndProduction'] == 'True') if config.has_key('trackProductionBy'): if config['trackProductionBy'] == 'time': triggerEnd.setMode('Schedule (time)') else: triggerEnd.setMode('Schedule (production)') else: triggerEnd = opSeg.getPrimaryEndTrigger() if config.has_key('autoEndChangeover'): triggerEnd.setAuto(config['autoEndChangeover'] == 'True') if config.has_key('changeoverDuration'): triggerEnd.setFixedDuration(int(config['changeoverDuration'])) try: system.mes.saveMESObjects(operList) return True except: return False
materialDefName = 'test03' materialClass = 'TestClass1' config = { "materialName":materialDefName, "materialClass":materialClass, "productionSettings":{ "linePath": "Enterprise\\El Dorado Hills\\Packaging Area\\Packaging Line 3", "infeedEquipmentPath": "Enterprise\\El Dorado Hills\\Packaging Area\\Packaging Line 3\\Depal", "outfeedEquipmentPath": "Enterprise\\El Dorado Hills\\Packaging Area\\Packaging Line 3\\Palletizer", "OEERate":"101", "scheduleRate":"80", "ratePeriod": "Min", "infeedUnits":"cans", "outfeedUnits": "cases", "rejectUnits": "cans", "autoEndChangeover":"True", "autoEndProduction":"True", "changeoverDuration":"65", "packageCount":"1", "trackProductionBy":"time" } }
configMaterialOperation(config['materialName'], config['materialClass'], config['productionSettings'])
matClassLink = system.mes.getMESObjectLinkByName('MaterialDef', materialDefName) opsegs = system.mes.oee.getMaterialOperationsSegments(matClassLink, '*') lineProdSettings = [] import pprint for opSeg in opsegs: if '_CO' not in opSeg.getName(): matProp = opSeg.getComplexProperty('Material', 'Material Out') print opSeg if matProp: lineSetting = { 'linePath':opSeg.getEquipment().getEquipmentPath(), 'ratePeriod': matProp.getRatePeriod(), 'infeedUnits': matProp.getUnits(), 'scheduleRate': matProp.getRate() } productionSettings = opSeg.getComplexProperty('ProductionSettings', 0) lineSetting.update({"OEERate":productionSettings.getOEERate()}) lineSetting.update({"outfeedUnits":productionSettings.getOutfeedUnits()}) if productionSettings.getOutfeedEquipmentRef(): lineSetting.update({"outfeedEquipmentPath":productionSettings.getOutfeedEquipmentRef().getMESObject().getEquipmentPath()}) else: lineSetting.update({"outfeedEquipmentPath":None}) if productionSettings.getInfeedEquipmentRef(): lineSetting.update({"infeedEquipmentPath": productionSettings.getInfeedEquipmentRef().getMESObject().getEquipmentPath()}) else: lineSetting.update({"infeedEquipmentPath":None}) lineSetting.update({"packageCount": productionSettings.getPackageCount()}) triggerEnd = opSeg.getPrimaryEndTrigger() if triggerEnd: lineSetting.update({"trackProductionBy":triggerEnd.getMode()}) lineSetting.update({"autoEndProduction":triggerEnd.isAuto()}) else: triggerEnd = opSeg.getPrimaryEndTrigger() lineSetting.update({'autoEndChangeover':triggerEnd.isAuto()}) lineSetting.update({'changeoverDuration':triggerEnd.getFixedDuration()}) lineProdSettings.append(lineSetting) pprint.pprint(lineProdSettings)
|