| | |
| | | import com.zy.core.properties.SlaveProperties; |
| | | import com.zy.core.thread.BarcodeThread; |
| | | import com.zy.core.thread.LedThread; |
| | | import com.zy.core.thread.SiemensCrnThread; |
| | | import com.zy.core.thread.SiemensDevpThread; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历入库口 |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | inSta.setStaNo(102); |
| | | // 获取条码扫描仪信息 |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | // barcode="ILY0127 0001"; |
| | | if(!Cools.isEmpty(barcode)) { |
| | | log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | |
| | | try { |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(staProtocol); |
| | | |
| | | locTypeDto.setLocType1((short)1); |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setBarcode(barcode); |
| | | param.setIoType(1); |
| | |
| | | ledCommand.setStaNo(wrkMast.getStaNo()); |
| | | if (wrkMast.getIoType() != 110) { |
| | | List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); |
| | | wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatNo(), wrkDetl.getMatName(), wrkDetl.getQty()))); |
| | | wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme()))); |
| | | } |
| | | commands.add(ledCommand); |
| | | } |
| | |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.setWrkNo(workNo); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setQty(locDetl.getQty()); |
| | | wrkDetl.setAnfme(locDetl.getAnfme()); |
| | | VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.setWrkNo(workNo); |
| | | wrkDetl.setIoTime(new Date()); |
| | | wrkDetl.setQty(locDetl.getQty()); |
| | | wrkDetl.setAnfme(locDetl.getAnfme()); |
| | | VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 |
| | | wrkDetl.setAppeTime(new Date()); |
| | | wrkDetl.setModiTime(new Date()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据PLC按钮测试信号,发送启动申请到测试系统 |
| | | * 根据PLC按钮测试、完成、暂停信号,更新testMast表中status值,交由WMS系统处理 |
| | | */ |
| | | @Transactional |
| | | public void startTest() { |
| | | public void packTest() { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | if(null != devpThread){ |
| | | int channel = 0; |
| | | for (int i = 0; i < 4; i++){ |
| | | switch (i){ |
| | | case 0: |
| | | channel = devpThread.startSignal1; |
| | | for (int i = 0; i < 48; i++){ |
| | | int olsStatus = 0;//testMast表原来status数据状态 |
| | | int newStatus = 0;//testMast表待修改的status数据状态 |
| | | short newSingle = 0; //PLC地址待修改的新值 |
| | | switch (devpThread.startSignal[i]){//根据信号查找testMast表中对应状态条件,olsStatus,newStatus根据实际流程调整 |
| | | case 1://启动复核信号 |
| | | olsStatus = 2; |
| | | newStatus = 3; |
| | | newSingle = 2;//测试复核,寄存器地址,1===>>2 |
| | | break; |
| | | case 1: |
| | | channel = devpThread.startSignal2; |
| | | case 3://完成测试信号 |
| | | olsStatus = 3; |
| | | newStatus = 4; |
| | | newSingle = 0;//测试完成,寄存器地址清零,3===>>0 |
| | | break; |
| | | case 2: |
| | | channel = devpThread.startSignal3; |
| | | case 5://暂停信号 |
| | | olsStatus = 99;//plc给出暂停信号 |
| | | newStatus = 0;//WCS收到暂停信号后,更新testMast |
| | | newSingle = 6;//暂停测试,寄存器地址,5===>>6 |
| | | break; |
| | | case 3: |
| | | channel = devpThread.startSignal4; |
| | | case 7://紧急出库确认充电线已经拔出 |
| | | olsStatus = 99;//plc给出暂停信号 |
| | | newStatus = 0;//WCS收到暂停信号后,更新testMast |
| | | newSingle = 6;//暂停测试,寄存器地址,7===>>6 |
| | | break; |
| | | case 8://解除暂停 |
| | | olsStatus = 99; |
| | | newStatus = 0; |
| | | newSingle = 0;//测试复核,寄存器地址,8===>>0 |
| | | break; |
| | | case 11://入库前判断充电线是否放好 |
| | | olsStatus = 99; |
| | | newStatus = 0; |
| | | newSingle = 11;// |
| | | break; |
| | | case 12://充电线放好 |
| | | olsStatus = 99; |
| | | newStatus = 0; |
| | | newSingle = 0;//测试复核,寄存器地址,12===>>0 |
| | | break; |
| | | } |
| | | if (channel == 1){ |
| | | TestMast testMast = testMastService.selectOne(new EntityWrapper<TestMast>() |
| | | .eq("channel",(i+1)).eq("status",0)); |
| | | if(null != testMast){ |
| | | Date now = new Date(); |
| | | //http请求测试 |
| | | TestDto testDto = new TestDto(); |
| | | testDto.setLocNo(testMast.getLocNo()); |
| | | testDto.setBarcode(testMast.getBarcode()); |
| | | testDto.setUserId(testMast.getUserId()); |
| | | testDto.setRequestTime(DateUtils.convert(now)); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(testUrl) |
| | | .setPath("/testUrlPath") |
| | | .setJson(JSON.toJSONString(testDto)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | //更新测试表状态 |
| | | testMast.setStatus(1); |
| | | testMast.setModiTime(now); |
| | | if(!testMastService.update(testMast,new EntityWrapper<TestMast>() |
| | | .eq("channel",1).eq("status",0))){ |
| | | throw new CoolException("更新产品测试状态失败"); |
| | | } |
| | | // //更新库位状态,锁定pack状态,禁止入出库作业 |
| | | // LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",testMast.getLocNo())); |
| | | // if(null != locMast){ |
| | | // locMast.setPackStatus(2);//测试中 |
| | | // locMast.setModiTime(now); |
| | | // if(!locMastService.update(locMast,new EntityWrapper<LocMast>().eq("loc_no",testMast.getLocNo()))){ |
| | | // throw new CoolException("产品开始测试,更新目标库位锁定状态失败"); |
| | | // } |
| | | // } |
| | | //复位PLC信号 |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, i*2)); |
| | | } else { |
| | | log.error("请求接口失败!!!url:{},request:{},response:{}", testUrl+"/rpc/pakin/loc/v1", JSON.toJSONString(testDto), response); |
| | | } |
| | | |
| | | TestMast testMast = testMastService.selectOne(new EntityWrapper<TestMast>() |
| | | .eq("channel",(i+1)).eq("status",olsStatus));//查找原来的状态 |
| | | if(null != testMast && |
| | | (devpThread.startSignal[i] == 1 || devpThread.startSignal[i] == 3)){ |
| | | testMast.setStatus(newStatus); |
| | | testMast.setModiTime(new Date()); |
| | | if(!testMastService.update(testMast,new EntityWrapper<TestMast>() |
| | | .eq("channel",(i+1)).eq("status",olsStatus))){ |
| | | throw new CoolException("更新产品测试状态失败"); |
| | | } |
| | | } |
| | | |
| | | //复位PLC信号,借用输送站点实体类 |
| | | StaProtocol staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(i*2);//寄存器地址 |
| | | staProtocol.setStaNo(newSingle);//修改PLC寄存器地址值,1==>2或3==>0,5==>6 |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | if(!result){ |
| | | log.error("更新测试信号失败===>>[channel:{},locNo:{},barcode:{}]", i+1, testMast.getLocNo(), testMast.getBarcode()); |
| | | // throw new CoolException("更新测试信号失败===>>" + i); |
| | | } else { |
| | | devpThread.startSignal[i] = newSingle; |
| | | } |
| | | }else if (devpThread.startSignal[i] == 5){ |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setBarcode(i+1+""); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/mobile/test/suspend/auth") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | //复位PLC信号,借用输送站点实体类 |
| | | StaProtocol staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(i*2);//寄存器地址 |
| | | staProtocol.setStaNo(newSingle);//修改PLC寄存器地址值,5==>6 |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | if(!result){ |
| | | log.error("暂停测试失败===>>["+i+1+"]号通道"); |
| | | // throw new CoolException("更新测试信号失败===>>" + i); |
| | | } else { |
| | | devpThread.startSignal[i] = newSingle; |
| | | } |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl+"/mobile/test/suspend/auth", JSON.toJSONString(param), response); |
| | | } |
| | | }else if (devpThread.startSignal[i] == 7){ |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("channel",(i+1))); |
| | | if (locMast.getLocSts().equals("F")){ |
| | | locMast.setPackStatus(7); //7.紧急出库 |
| | | locMastService.update(locMast,new EntityWrapper<LocMast>() |
| | | .eq("channel",(i+1))); |
| | | } |
| | | //复位PLC信号,借用输送站点实体类 |
| | | StaProtocol staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(i*2);//寄存器地址 |
| | | staProtocol.setStaNo(newSingle);//修改PLC寄存器地址值,7==>6 |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | if(!result){ |
| | | log.error("更新库位紧急出库信号失败===>>[channel:{},locNo:{},barcode:{}]", i+1, locMast.getLocNo(), locMast.getBarcode()); |
| | | // throw new CoolException("更新测试信号失败===>>" + i); |
| | | } else { |
| | | devpThread.startSignal[i] = newSingle; |
| | | } |
| | | }else if (devpThread.startSignal[i] == 8){ |
| | | //复位PLC信号,借用输送站点实体类 |
| | | StaProtocol staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(i*2);//寄存器地址 |
| | | staProtocol.setStaNo(newSingle);//修改PLC寄存器地址值,8==>0 |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | if(!result){ |
| | | // log.error("更新库位紧急出库信号失败===>>[channel:{},locNo:{},barcode:{}]", i+1, locMast.getLocNo(), locMast.getBarcode()); |
| | | // throw new CoolException("更新测试信号失败===>>" + i); |
| | | } else { |
| | | devpThread.startSignal[i] = newSingle; |
| | | } |
| | | }else if (devpThread.startSignal[i] == 11){ |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("channel",(i+1))); |
| | | if (locMast.getLocSts().equals("O")){ |
| | | locMast.setLocSts("X"); |
| | | locMastService.update(locMast,new EntityWrapper<LocMast>() |
| | | .eq("channel",(i+1))); |
| | | } |
| | | }else if (devpThread.startSignal[i] == 12){ |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("channel",(i+1))); |
| | | if (locMast.getLocSts().equals("X")){ |
| | | locMast.setLocSts("O"); |
| | | locMastService.update(locMast,new EntityWrapper<LocMast>() |
| | | .eq("channel",(i+1))); |
| | | } |
| | | //复位PLC信号,借用输送站点实体类 |
| | | StaProtocol staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(i*2);//寄存器地址 |
| | | staProtocol.setStaNo(newSingle);//修改PLC寄存器地址值,12==>0 |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | if(!result){ |
| | | // log.error("更新库位紧急出库信号失败===>>[channel:{},locNo:{},barcode:{}]", i+1, locMast.getLocNo(), locMast.getBarcode()); |
| | | // throw new CoolException("更新测试信号失败===>>" + i); |
| | | } else { |
| | | devpThread.startSignal[i] = newSingle; |
| | | } |
| | | }else { } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("启动测试 ===>> 启动测试失败", e); |
| | | e.printStackTrace(); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 将火警报警信号写入到堆垛机PLC中 |
| | | */ |
| | | @Transactional |
| | | public void fierCrn() { |
| | | try { |
| | | for (CrnSlave crn :slaveProperties.getCrn()) { |
| | | // 获取堆垛机信息 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("fire_status", 1)); |
| | | if (!Cools.isEmpty(locMast)){ |
| | | //报警信号写入1 |
| | | if (!MessageQueue.offer(SlaveType.Crn, locMast.getCrnNo(), new Task(4, (short)1))) { |
| | | log.error("火警 ===>> 给堆垛机发送报警信号失败"); |
| | | } |
| | | } else { |
| | | //报警信号没有后,复位地址 |
| | | if (!MessageQueue.offer(SlaveType.Crn, locMast.getCrnNo(), new Task(4, (short)0))) { |
| | | log.error("火警 ===>> 给堆垛机清零复位报警信号失败"); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("火警 ===>> 给堆垛机发送警报失败", e); |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | |
| | | } |