| | |
| | | package cn.stylefeng.guns.plcserver.callback; |
| | | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam; |
| | | import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult; |
| | | import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService; |
| | | import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService; |
| | | import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService; |
| | | import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection; |
| | | import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam; |
| | | import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService; |
| | | import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam; |
| | |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | public class COP030Callback implements SubscriptionCallback { |
| | | public class COP030Callback{ |
| | | |
| | | public MiloService miloService; |
| | | |
| | |
| | | private static String PRODUCTION_LINE = "COP";//产线号 |
| | | private static String LOCATION_CODE = "COP030";//工位号 |
| | | private static List list = null; |
| | | |
| | | private static String PRODUCT_STATE = "合格"; |
| | | public COP030Callback(MiloService miloService, |
| | | ProductionOrdeInfoService productionOrdeInfoService, |
| | | PassingStationCollectionService passingStationCollectionService, |
| | |
| | | this.productionOrderRecordsService = productionOrderRecordsService; |
| | | this.productionOrderBatchInfoService = productionOrderBatchInfoService; |
| | | } |
| | | @Override |
| | | public void onSubscribe(String identifier, Object value) { |
| | | String ecpStr = "";//异常记录标记 |
| | | try { |
| | | //心跳 |
| | | if(null != value && identifier.equals(OPCElement.COP030_F_HEART_BEAT)){ |
| | | if( "false".equals(value.toString())) |
| | | { |
| | | ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP030_F_HEART_BEAT,true); |
| | | miloService.writeToOpcUa(entity); |
| | | } |
| | | } |
| | | //PLC进站 |
| | | else if(null != value && identifier.equals(OPCElement.COP030_J_PLC_START)){ |
| | | if("true".equals(value.toString())){ |
| | | handleOrder(); |
| | | } |
| | | } |
| | | //PLC出站 |
| | | else if(null != value && identifier.equals(OPCElement.COP030_J_PLC_FINISH)){ |
| | | if("true".equals(value.toString())){ |
| | | handleFinsh(); |
| | | handleInfo(); |
| | | handleMaterial(); |
| | | } |
| | | }else{ |
| | | System.out.println("值没有变"); |
| | | } |
| | | } catch (Exception e) { |
| | | ecpStr ="出现异常:" + logUtil.getTrace(e); |
| | | }finally { |
| | | if(!"".equals(ecpStr)){ |
| | | logger.info(ecpStr+"\r\n"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | //PC读工单 |
| | | public void handleOrder() throws Exception { |
| | |
| | | String S_PRODUCT_STATE_CODE = miloService. |
| | | readFromOpcUa(OPCElement.COP030_S_PRODUCT_STATE_CODE) |
| | | .getValue().toString(); |
| | | |
| | | if("2".equals(S_PRODUCT_STATE_CODE)){ |
| | | PRODUCT_STATE = "不合格"; |
| | | } |
| | | ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP030_J_PC_FINISH,true); |
| | | miloService.writeToOpcUa(entity);//写PC完成 |
| | | //处理过站信息 |
| | | PassingStationCollectionParam param = new PassingStationCollectionParam(); |
| | | param.setWorkOrderNo(S_ORDER_CODE); |
| | |
| | | param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格 |
| | | passingStationCollectionService.add(param); |
| | | |
| | | ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP030_J_PC_FINISH,true); |
| | | miloService.writeToOpcUa(entity);//写PC完成 |
| | | |
| | | logger.info("handleFinsh PC处理完成!"); |
| | | } |
| | | |
| | | public void handleMaterial() { |
| | | |
| | | if(S_ORDER_CODE.isEmpty()){ |
| | | return; |
| | | } |
| | | //查询批次上料信息 |
| | | ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam(); |
| | | productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE); |
| | |
| | | list = collectionParamConfService.findListBySpec(collectionParamConfParam); |
| | | } |
| | | if(null != list && !list.isEmpty()) { |
| | | |
| | | List<String> nodeIdList = new ArrayList<>(); |
| | | for (int i = 0; i < list.size(); i++) { |
| | | CollectionParamConfResult result = (CollectionParamConfResult) list.get(i); |
| | | Object value = miloService. |
| | | readFromOpcUa(result.getGatherAddress()) |
| | | .getValue();//读参数值 |
| | | if(null != value) { |
| | | ParamCollectionParam paramCollectionParam = new ParamCollectionParam(); |
| | | paramCollectionParam.setParamCode(result.getParamCode()); |
| | | paramCollectionParam.setParamName(result.getParamName()); |
| | | paramCollectionParam.setWorkOrderNo(S_ORDER_CODE); |
| | | paramCollectionParam.setSfcCode(S_SFC_CODE); |
| | | paramCollectionParam.setProductCode(S_PRODUCT_CODE); |
| | | paramCollectionParam.setProductionLine(result.getProductionLine()); |
| | | paramCollectionParam.setLocationCode(result.getLocationCode()); |
| | | paramCollectionParam.setParamValue(value.toString()); |
| | | paramCollectionParam.setParamLower(result.getParamLower()); |
| | | paramCollectionParam.setParamUpper(result.getParamUpper()); |
| | | paramCollectionParam.setParamStandard(result.getParamCentral()); |
| | | paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate()); |
| | | paramCollectionParam.setUnit(result.getUnit()); |
| | | paramCollectionService.add(paramCollectionParam); |
| | | nodeIdList.add(result.getGatherAddress()); |
| | | } |
| | | |
| | | List<ReadWriteEntity> readWriteEntityList = new ArrayList<>(); |
| | | if(CollUtil.isNotEmpty(nodeIdList)){ |
| | | readWriteEntityList = miloService.readFromOpcUa(nodeIdList); |
| | | } |
| | | |
| | | List<ParamCollection> paramCollectionlist = new ArrayList<>(); |
| | | if (CollUtil.isNotEmpty(nodeIdList)){ |
| | | for(int i=0;i<nodeIdList.size();i++){ |
| | | if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){ |
| | | CollectionParamConfResult result = (CollectionParamConfResult) list.get(i); |
| | | |
| | | String value = "0"; |
| | | if (readWriteEntityList.get(i).getValue() != null){ |
| | | value = readWriteEntityList.get(i).getValue().toString(); |
| | | } |
| | | if(result.getParamName() != null && result.getParamName().contains("状态")){ |
| | | if("2".equals(value)){ |
| | | value = "不合格"; |
| | | }else { |
| | | value = "合格"; |
| | | } |
| | | } |
| | | ParamCollection paramCollectionParam = new ParamCollection(); |
| | | paramCollectionParam.setParamCode(result.getParamCode()); |
| | | paramCollectionParam.setParamName(result.getParamName()); |
| | | paramCollectionParam.setWorkOrderNo(S_ORDER_CODE); |
| | | paramCollectionParam.setSfcCode(S_SFC_CODE); |
| | | paramCollectionParam.setProductCode(S_PRODUCT_CODE); |
| | | paramCollectionParam.setProductionLine(result.getProductionLine()); |
| | | paramCollectionParam.setLocationCode(result.getLocationCode()); |
| | | paramCollectionParam.setParamValue(value.toString()); |
| | | paramCollectionParam.setParamLower(result.getParamLower()); |
| | | paramCollectionParam.setParamUpper(result.getParamUpper()); |
| | | paramCollectionParam.setParamStandard(result.getParamCentral()); |
| | | paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate()); |
| | | paramCollectionParam.setUnit(result.getUnit()); |
| | | paramCollectionParam.setSpareField2(PRODUCT_STATE); |
| | | paramCollectionlist.add(paramCollectionParam); |
| | | } |
| | | } |
| | | paramCollectionService.saveBatch(paramCollectionlist); |
| | | } |
| | | } |
| | | |