| | |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.R; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.domain.enums.WorkNoType; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.mapper.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.CodeDetectionUtil; |
| | | import com.zy.asrs.utils.RouteUtils; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.asrs.utils.VersionUtils; |
| | | import com.zy.asrs.utils.*; |
| | | import com.zy.common.model.LocTypeDto; |
| | | import com.zy.common.model.MatDto; |
| | | import com.zy.common.model.SearchLocParam; |
| | |
| | | import com.zy.common.utils.RgvUtils; |
| | | import com.zy.core.CrnThread; |
| | | import com.zy.core.DevpThread; |
| | | import com.zy.core.Slave; |
| | | import com.zy.core.cache.MessageQueue; |
| | | import com.zy.core.cache.SlaveConnection; |
| | | import com.zy.core.enums.*; |
| | | import com.zy.core.model.*; |
| | | import com.zy.core.model.command.CrnCommand; |
| | | import com.zy.core.model.command.LedCommand; |
| | | import com.zy.core.model.command.RgvCommand; |
| | | import com.zy.core.model.protocol.CrnProtocol; |
| | | import com.zy.core.model.protocol.RgvProtocol; |
| | | import com.zy.core.model.protocol.StaProtocol; |
| | | import com.zy.core.model.command.*; |
| | | import com.zy.core.model.cpmmandParam.CrnCommandParam; |
| | | import com.zy.core.model.protocol.*; |
| | | import com.zy.core.properties.SlaveProperties; |
| | | import com.zy.core.thread.BarcodeThread; |
| | | import com.zy.core.thread.LedThread; |
| | | import com.zy.core.thread.RgvThread; |
| | | import com.zy.core.thread.SiemensDevpThread; |
| | | import com.zy.core.thread.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | import springfox.documentation.spring.web.json.Json; |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | |
| | | public class MainServiceImpl { |
| | | |
| | | public static final long COMMAND_TIMEOUT = 5 * 1000; |
| | | // private static final int[][] execute = new int[][]{{1,4},{2,4},{3,4},{4,4},{5,6},{6,6},{7,4},{8,4},{9,3},{10,4},{11,4}}; |
| | | private static final int[][] execute = new int[][]{{1,4},{2,4},{3,4},{4,4},{5,6},{6,6},{7,4},{8,4},{9,3},{10,4},{11,4}}; |
| | | |
| | | @Autowired |
| | | private CommonService commonService; |
| | |
| | | private WrkMastCrnMapper wrkMastCrnMapper; |
| | | @Autowired |
| | | private WrkMastSplitTwinMapper wrkMastSplitTwinMapper; |
| | | @Autowired |
| | | private WrkMastSplitTwinService wrkMastSplitTwinService; |
| | | @Autowired |
| | | private BasJarMastService basJarMastService; |
| | | @Autowired |
| | | private WrkMastExecuteService wrkMastExecuteService; |
| | | @Autowired |
| | | private BasJarService basJarService; |
| | | @Autowired |
| | | private BasJarMapper basJarMapper; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | | private WrkMastSplitTwinServiceImpl wrkMastSplitTwinService; |
| | | |
| | | |
| | | |
| | | /** |
| | | * 组托 |
| | |
| | | // 判断重复工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); |
| | | if (wrkMast != null) { |
| | | log.error("工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo()); |
| | | continue; |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | barcodeThread.setBarcode(""); |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | return; |
| | | } |
| | | // // 获取入库通知档 |
| | | // List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N")); |
| | |
| | | // throw new CoolException("更新plc站点信息失败"); |
| | | // } |
| | | continue; |
| | | } |
| | | |
| | | // 判断重复工作档 |
| | | WrkMast wrkMast111 = wrkMastMapper.selectPakInStep111(inSta.getStaNo(), barcode); |
| | | if (wrkMast111 != null) { |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | barcodeThread.setBarcode(""); |
| | | staProtocol.setWorkNo(wrkMast111.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast111.getStaNo()); |
| | | |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | // 判断重复工作档 |
| | |
| | | // } |
| | | continue; |
| | | } |
| | | |
| | | // |
| | | // // 判断重复工作档 |
| | | // WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); |
| | | // if (wrkMast != null) { |
| | | // log.error("工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo()); |
| | | // continue; |
| | | // } |
| | | // 判断重复工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); |
| | | if (wrkMast != null) { |
| | | log.error("工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo()); |
| | | continue; |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | barcodeThread.setBarcode(""); |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | return; |
| | | } |
| | | // // 获取入库通知档 |
| | | // List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N")); |
| | |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); |
| | | SearchLocParam param2 = new SearchLocParam(); |
| | | param2.setBarcode(barcode); |
| | | param2.setSourceStaNo(inSta.getStaNo()); |
| | | param2.setLocType1(locTypeDto.getLocType1()); |
| | | String response2 = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/yx/loc/v33") |
| | | .setJson(JSON.toJSONString(param2)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject2 = JSON.parseObject(response2); |
| | | if (jsonObject2.getInteger("code").equals(200)) { |
| | | log.info("大料箱自动组托成功!!"); |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); |
| | | |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); |
| | | |
| | | if (ledThread != null) { |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, "入库失败!")); |
| | | if (ledThread != null) { |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, "入库失败!")); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 组托 |
| | | * 入库站,根据条码扫描通知桁架码垛 |
| | | */ |
| | | public synchronized void generateStoreWrkFileFull2LouM() { |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历码垛口 |
| | | for (DevpSlave.Sta driveSta : devp.getDriveSta()) { |
| | | // 获取条码扫描仪信息 |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, driveSta.getBarcode()); |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | |
| | | if (!Cools.isEmpty(barcode) && !barcode.equals("") && !barcode.equals(" ")) { |
| | | if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { |
| | | continue; |
| | | } |
| | | } else { |
| | | continue; |
| | | } |
| | | |
| | | // 获取码垛口信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(driveSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | && staProtocol.isInEnable() |
| | | && staProtocol.isEmptyMk() |
| | | && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000) ) |
| | | ) { |
| | | try { |
| | | BasDevp basDevp = basDevpService.selectById(driveSta.getStaNo()); |
| | | if (basDevp.getReportSign()>0){ |
| | | continue; |
| | | } |
| | | basDevp.setBarcode(barcode); |
| | | basDevp.setReportSign(1); |
| | | basDevpService.updateById(basDevp); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 2楼212呼叫空板 |
| | | */ |
| | | public synchronized void stnToCrnStnPick3Auto(Integer sign) { |
| | | try{ |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocol = devpThread.getStation().get(212); |
| | | if (staProtocol == null) { |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo()==0 ){ |
| | | switch (sign){ |
| | | //执行小车货物搬运任务 |
| | | case 1: |
| | | case 4: |
| | | stnToCrnStnPick3(); |
| | | return; |
| | | //执行小车空板搬运任务 |
| | | case 2://放//拆盘 |
| | | case 5://放//拆盘 |
| | | stnToCrnStnPick4(); |
| | | return; |
| | | default: |
| | | return; |
| | | } |
| | | } else if (staProtocol.isAutoing() && staProtocol.isLoading()){ |
| | | switch (sign){ |
| | | case 3://满放 |
| | | case 6://满放 |
| | | stnToCrnStnPick5(); |
| | | return; |
| | | default: |
| | | return; |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("2楼212呼叫空板"+e); |
| | | } |
| | | } |
| | | /** |
| | | * 2楼212呼叫空板 |
| | | */ |
| | | public synchronized void stnToCrnStnPick3() { |
| | | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); |
| | | if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts()!=61){//61、等待空板 |
| | | return; |
| | | } |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | for (DevpSlave.Sta driveSta : devp.getDriveSta()) { |
| | | if (driveSta.getStaNo()!=215){ |
| | | continue; |
| | | } |
| | | // 获取拣料入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(driveSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo()==0 |
| | | || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000)) ){ |
| | | boolean result1 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()-1); |
| | | staProtocol.setStaNo(driveSta.getStaNo()==215? 217:221); |
| | | boolean result2 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result2) { |
| | | log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | } |
| | | wrkMast.setWrkSts(62L); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | boolean result3 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol)); |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 2楼212呼叫空板 |
| | | */ |
| | | public synchronized void stnToCrnStnPick4() { |
| | | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); |
| | | if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts()!=62){//62、等待小车搬运 |
| | | return; |
| | | } |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | for (DevpSlave.Sta driveSta : devp.getInSta()) { |
| | | if (driveSta.getStaNo()!=217){ |
| | | continue; |
| | | } |
| | | // 获取拣料入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(driveSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | StaProtocol staProtocol212 = devpThread.getStation().get(212); |
| | | if (staProtocol212 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol212 = staProtocol212.clone(); |
| | | } |
| | | if (staProtocol212.isAutoing() && !staProtocol212.isLoading() && staProtocol212.getWorkNo()==0){ |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo()==0 |
| | | || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000) || staProtocol.getWorkNo()==wrkMast.getWrkNo()-1) ){ |
| | | // boolean result1 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(212); |
| | | boolean result2 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result2) { |
| | | log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); |
| | | } |
| | | wrkMast.setWrkSts(63L); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | // boolean result3 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol)); |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 2楼212呼叫空板 |
| | | */ |
| | | public synchronized void stnToCrnStnPick5() { |
| | | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); |
| | | if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts()!=63){//63、等待完成 |
| | | return; |
| | | } |
| | | |
| | | // 获取拣料入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocol = devpThread.getStation().get(212); |
| | | if (staProtocol == null) { |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading()){ |
| | | // boolean result1 = MessageQueue.offer(SlaveType.Devp, 2, new Task(3, staProtocol)); |
| | | |
| | | wrkMast.setWrkSts(64L); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | // boolean result3 = MessageQueue.offer(SlaveType.Devp, 2, new Task(4, staProtocol)); |
| | | return; |
| | | } |
| | | } |
| | | /** |
| | | * 拣料、并板、盘点再入库 拆垛位置 |
| | | */ |
| | | public synchronized void storeEmptyPlt4() { |
| | |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | crnStnToOutStnTwo(crnStn,1); |
| | | crnStnToOutStnTwo(crnSlave.getId(),crnStn,1); |
| | | continue; |
| | | case 6: |
| | | case 7: |
| | |
| | | } |
| | | return false; |
| | | } |
| | | public synchronized boolean crnStnToOutStnTwo(CrnSlave.CrnStn crnStn ,Integer conStation) { |
| | | |
| | | public synchronized boolean crnStnToOutStnTwo(Integer crnNo,CrnSlave.CrnStn crnStn ,Integer conStation) { |
| | | try{ |
| | | Date now = new Date(); |
| | | // 获取堆垛机出库站信息 |
| | |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { |
| | | // 查询工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId()); |
| | | if (wrkMast == null) { |
| | | return false; |
| | | } |
| | | // 判断工作档条件 |
| | | if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { |
| | | return false; |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == null || staProtocol.getWorkNo() == 0)) { |
| | | |
| | | // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn,crnNo); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | |
| | | if (conStation==1){ |
| | | // 查询工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakOutStep2345(staProtocol.getSiteId(),crnProtocol.getTaskNo().intValue()); |
| | | if (wrkMast == null) { |
| | | return false; |
| | | } |
| | | // 判断工作档条件 |
| | | if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { |
| | | return false; |
| | | } |
| | | if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) { |
| | | // 移动中 |
| | | return false; |
| | |
| | | } |
| | | } |
| | | }else if (conStation==2){ |
| | | if (crnProtocol.statusType != CrnStatusType.IDLE){ |
| | | return false; |
| | | } |
| | | // 查询工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakOutStep2345(staProtocol.getSiteId(),crnProtocol.getTaskNoTwo().intValue()); |
| | | if (wrkMast == null) { |
| | | return false; |
| | | } |
| | | // 判断工作档条件 |
| | | if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { |
| | | return false; |
| | | } |
| | | if (crnProtocol.statusTypeTwo == CrnStatusType.FETCHING || crnProtocol.statusTypeTwo == CrnStatusType.PUTTING) { |
| | | // 移动中 |
| | | return false; |
| | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public synchronized boolean crnStnToOutStnThree(CrnSlave.CrnStn crnStn ) { |
| | | try{ |
| | | // 获取堆垛机出库站信息 |
| | |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | crnStnToOutStnTwo(crnStn,2); |
| | | crnStnToOutStnTwo(crnSlave.getId(),crnStn,2); |
| | | continue; |
| | | default: |
| | | break; |
| | |
| | | && crnProtocol.getTaskNo() == 0 |
| | | && crnProtocol.getLoaded() == 0 |
| | | && crnProtocol.getForkPos() == 0) { |
| | | // sign[0] = 1; |
| | | // sign[1] = 1; |
| | | /* |
| | | * 任务拆分特殊处理 |
| | | * */ |
| | |
| | | sign[0] = 1; |
| | | sign[1] = 1; |
| | | } |
| | | }else if (crnProtocol.getStatusTypeTwo() == CrnStatusType.IDLE |
| | | && crnProtocol.getTaskNoTwo() == 0 |
| | | && crnProtocol.getLoadedTwo() == 0 |
| | | && crnProtocol.getForkPosTwo() == 0){ |
| | | sign[0] = 1; |
| | | sign[1] = 2; |
| | | } |
| | | } |
| | | |
| | | if (sign[0]==1 && sign[1] == 1){ |
| | | if (sign[0]==1){ |
| | | // 如果最近一次是入库模式 |
| | | if (crnProtocol.getLastIo().equals("I")) { |
| | | if (basCrnp.getInEnable().equals("Y")) { |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 搜索RGV车。通过目标站搜索哪台车可用 |
| | | */ |
| | | public synchronized Integer searchRgvNo(Integer staNo) { |
| | | try{ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (basDevp == null) { |
| | | return null;//目标站不存在 |
| | | } |
| | | //路径值 |
| | | int path = basDevp.getLocType3().intValue(); |
| | | |
| | | ArrayList<RgvThread> list = new ArrayList<>(); |
| | | for (RgvSlave rgv : slaveProperties.getRgv()) { |
| | | // 获取RGV信息 |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | |
| | | continue; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgv.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgv.getId()); |
| | | continue; |
| | | } |
| | | |
| | | list.add(rgvThread); |
| | | } |
| | | |
| | | if (list.size() > 1) { |
| | | //超过两台车,按照配置的规则进行分配 |
| | | for (RgvThread rgvThread : list) { |
| | | //获取车辆配置的路径规则 |
| | | BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(rgvThread.getSlave().getId()); |
| | | if (basRgvPath == null) { |
| | | continue; |
| | | } |
| | | //目标站是否包含当前路径中 |
| | | List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class); |
| | | if (rgvPath.contains(path)) { |
| | | //当前路径中包含目标站,则选定这台车 |
| | | return rgvThread.getSlave().getId(); |
| | | } |
| | | } |
| | | }else { |
| | | //小于或等于1台车,分配全路径 |
| | | BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//获取默认路径 |
| | | if (basRgvPath == null) { |
| | | return null; |
| | | } |
| | | List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class); |
| | | if (rgvPath.contains(path)) { |
| | | //当前路径中包含目标站,则选定这台车 |
| | | return list.get(0).getSlave().getId(); |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | }catch (Exception e){ |
| | | log.error("搜索RGV车。通过目标站搜索哪台车可用"+e); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 回原点,堆垛机没有执行中任务,设备存在入库任务时叫回原点 |
| | | */ |
| | | public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread) { |
| | | // for (CrnSlave crn : slaveProperties.getCrn()) { |
| | | // // 获取堆垛机信息 |
| | | // CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); |
| | | // CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | // if (crnProtocol == null) { |
| | | // continue; |
| | | // } |
| | | // BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); |
| | | // if (basCrnp == null) { |
| | | // log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId()); |
| | | // continue; |
| | | // } |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { |
| | | if (crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) { |
| | | return; |
| | | } |
| | | |
| | | // 已经存在吊车执行任务时,则过滤3,12 |
| | | if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) { |
| | | return; |
| | | } |
| | | |
| | | //堆垛机有执行中任务,过滤3,4,11,12 |
| | | if (wrkMastMapper.selectCrnWorking(crnProtocol.getCrnNo()) != null) { |
| | | return; |
| | | } |
| | | |
| | | //输送线没有入库任务,过滤2 |
| | | if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) == null) { |
| | | return; |
| | | } |
| | | log.info("堆垛机召回原点==>>" + crnProtocol.getCrnNo() + "号堆垛机有入库任务,召回原点"); |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号 |
| | | crnCommand.setTaskNo((short) 63333); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式: 回原点 |
| | | crnCommand.setSourcePosX((short) 0); // 源库位排 |
| | | crnCommand.setSourcePosY((short) 0); // 源库位列 |
| | | crnCommand.setSourcePosZ((short) 0); // 源库位层 |
| | | crnCommand.setDestinationPosX((short) 0); // 目标库位排 |
| | | crnCommand.setDestinationPosY((short) 0); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short) 0); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机回原点命令下发失败,堆垛机号={},任务数据={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } |
| | | crnThread.setBackHpFlag(true); |
| | | } |
| | | // } |
| | | } |
| | | |
| | | /** |
| | | * 入库 ===>> 堆垛机站到库位 |
| | |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | |
| | | // long startTime = System.currentTimeMillis(); |
| | |
| | | */ |
| | | public synchronized void crnStnToLoc1Big(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation) { |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectPakInStep12(slave.getId()); |
| | | Integer crnStation1 = crnStation;//记录 |
| | | for(WrkMast wrkMast : wrkMasts){ |
| | | if (wrkMast == null) { |
| | | continue; |
| | | } |
| | | |
| | | crnStation=crnStation1;//刷新 |
| | | |
| | | CrnSlave.CrnStn crnStn = null; |
| | | for (CrnSlave.CrnStn crnStn1 : slave.getCrnInStn()){ |
| | |
| | | break; |
| | | } |
| | | |
| | | if (locMast.getBay1()==81){ |
| | | crnStation=2; |
| | | } |
| | | |
| | | |
| | | // 已经存在吊车执行任务时,则过滤 |
| | | if (wrkMastMapper.selectWorking(slave.getId()) != null) { |
| | |
| | | } |
| | | } |
| | | |
| | | StaProtocol staProtocolOther = devpThread.getStation().get(crnStn.getStaNoOther()); |
| | | if (staProtocolOther == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolOther = staProtocolOther.clone(); |
| | | } |
| | | |
| | | // 查询站点详细信息 |
| | | BasDevp staDetlOther = basDevpService.selectById(crnStn.getStaNoOther()); |
| | | if (staDetlOther == null) { |
| | | log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNoOther()); |
| | | continue; |
| | | } |
| | | if (staProtocolOther.getWorkNo()!=0){ |
| | | WrkMast wrkMastOther = wrkMastMapper.selectPakInStep3(staProtocolOther.getWorkNo()); |
| | | if (Cools.isEmpty(wrkMastOther)){ |
| | | log.error("Other查询工作档案无数据--工作号{},站点号:{}", staProtocolOther.getWorkNo(),staProtocolOther.getSiteId()); |
| | | continue; |
| | | } |
| | | // 获取库位信息 |
| | | LocMast locMastOther = locMastService.selectById(wrkMastOther.getLocNo()); |
| | | if (locMastOther == null) { |
| | | log.error("查询库存无数据--库位号{}", locMastOther.getLocNo()); |
| | | continue; |
| | | } |
| | | if (!locMastOther.getLocSts().equals("S") && !locMastOther.getLocSts().equals("Q")) { |
| | | log.error("入库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMastOther.getLocNo(), locMastOther.getLocSts()); |
| | | continue; |
| | | } |
| | | if (locMastOther.getBay1()!=81){ |
| | | if (staProtocolOther.isAutoing() && staProtocolOther.isLoading() |
| | | && staProtocolOther.isInEnable() && staDetlOther.getCanining() != null && staDetlOther.getCanining().equals("Y")) { |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommandParam crnCommandParam = new CrnCommandParam(); |
| | | crnCommandParam.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | |
| | | crnCommandParam.setTaskNo2(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | crnCommandParam.setAckFinish2((short) 0); // 任务完成确认位 |
| | | crnCommandParam.setTaskMode2(CrnTaskModeType.SEPARATE_TAKE); // 任务模式: 单取货 |
| | | crnCommandParam.setSourcePosX2(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommandParam.setSourcePosY2(crnStn.getBay().shortValue()); // 源库位列 |
| | | crnCommandParam.setSourcePosZ2(crnStn.getLev().shortValue()); // 源库位层 |
| | | crnCommandParam.setDestinationPosX2((short)0); // 目标库位排 |
| | | crnCommandParam.setDestinationPosY2((short)0); // 目标库位列 |
| | | crnCommandParam.setDestinationPosZ2((short)0); // 目标库位层 |
| | | |
| | | crnCommandParam.setTaskNo(wrkMastOther.getWrkNo().shortValue()); // 工作号 |
| | | crnCommandParam.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommandParam.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 任务模式: 单取货 |
| | | crnCommandParam.setSourcePosX(crnStn.getRow().shortValue()); // 源库位排 |
| | | crnCommandParam.setSourcePosY(crnStn.getBay().shortValue()); // 源库位列 |
| | | crnCommandParam.setSourcePosZ(crnStn.getLev().shortValue()); // 源库位层 |
| | | crnCommandParam.setDestinationPosX((short)0); // 目标库位排 |
| | | crnCommandParam.setDestinationPosY((short)0); // 目标库位列 |
| | | crnCommandParam.setDestinationPosZ((short)0); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(99, crnCommandParam.getCrnNo()-2))) { |
| | | log.error("输送线锁定命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), crnCommandParam.getCrnNo()-2); |
| | | continue; |
| | | } |
| | | if (!MessageQueue.offer(SlaveType.Crn, crnCommandParam.getCrnNo(), new Task(9, crnCommandParam))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommandParam)); |
| | | } else { |
| | | // 修改工作档状态 2.设备上走 => 3.吊车入库中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(3L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | WrkMastSplitTwin wrkMastSplitTwin = new WrkMastSplitTwin(wrkMast,2,now); |
| | | wrkMastSplitTwin.setWrkSts(1); |
| | | wrkMastSplitTwin.setWrkStart(wrkMast.getStaNo().toString()); |
| | | wrkMastSplitTwin.setWrkEnd(wrkMast.getLocNo()); |
| | | wrkMastSplitTwin.setStartRow(crnStn.getRow()); |
| | | wrkMastSplitTwin.setStartBay(crnStn.getBay()); |
| | | wrkMastSplitTwin.setStartLev(crnStn.getLev()); |
| | | wrkMastSplitTwin.setEndRow(locMast.getRow1()); |
| | | wrkMastSplitTwin.setEndBay(locMast.getBay1()); |
| | | wrkMastSplitTwin.setEndLev(locMast.getLev1()); |
| | | wrkMastSplitTwin.setWrkType(1); |
| | | wrkMastSplitTwin.setIoType(1); |
| | | |
| | | wrkMastOther.setWrkSts(3L); |
| | | wrkMastOther.setCrnStrTime(now); |
| | | wrkMastOther.setModiTime(now); |
| | | WrkMastSplitTwin wrkMastSplitTwinOther = new WrkMastSplitTwin(wrkMastOther,1,now); |
| | | wrkMastSplitTwinOther.setWrkSts(1); |
| | | wrkMastSplitTwinOther.setWrkStart(wrkMastOther.getStaNo().toString()); |
| | | wrkMastSplitTwinOther.setWrkEnd(wrkMastOther.getLocNo()); |
| | | wrkMastSplitTwinOther.setStartRow(crnStn.getRow()); |
| | | wrkMastSplitTwinOther.setStartBay(crnStn.getBay()); |
| | | wrkMastSplitTwinOther.setStartLev(crnStn.getLev()); |
| | | wrkMastSplitTwinOther.setEndRow(locMastOther.getRow1()); |
| | | wrkMastSplitTwinOther.setEndBay(locMastOther.getBay1()); |
| | | wrkMastSplitTwinOther.setEndLev(locMastOther.getLev1()); |
| | | wrkMastSplitTwinOther.setWrkType(1); |
| | | wrkMastSplitTwinOther.setIoType(1); |
| | | |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | |
| | | if (wrkMastSplitTwinMapper.insert(wrkMastSplitTwin)==0){ |
| | | log.error("创建 堆垛机执行任务 失败!!,工作号={},堆垛机号={}", wrkMast.getWrkNo(),wrkMast.getCrnNo()); |
| | | } |
| | | |
| | | if (wrkMastMapper.updateById(wrkMastOther) == 0) { |
| | | log.error("Other修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | |
| | | if (wrkMastSplitTwinMapper.insert(wrkMastSplitTwinOther)==0){ |
| | | log.error("Other创建 堆垛机执行任务 失败!!,工作号={},堆垛机号={}", wrkMast.getWrkNo(),wrkMast.getCrnNo()); |
| | | } |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | StaProtocol staProtocolOther1 = devpThread.getStation().get(crnStn.getStaNoOther1()); |
| | | if (staProtocolOther1 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolOther1 = staProtocolOther1.clone(); |
| | | } |
| | | |
| | | if (staProtocolOther1.isAutoing() && staProtocolOther1.getWorkNo()!=0){ |
| | | return; |
| | | } |
| | | |
| | | |
| | | StaProtocol staProtocolOther2 = devpThread.getStation().get(crnStn.getStaNoOther2()); |
| | | if (staProtocolOther2 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolOther2 = staProtocolOther2.clone(); |
| | | } |
| | | if (staProtocolOther2.isAutoing() && staProtocolOther2.getWorkNo()!=0){ |
| | | return; |
| | | } |
| | | crnStation = 2; |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | |
| | | crnCommand.setDestinationPosX((short)0); // 目标库位排 |
| | | crnCommand.setDestinationPosY((short)0); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short)0); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | |
| | | if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(99, crnCommand.getCrnNo()-2))) { |
| | | log.error("输送线锁定命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), crnCommand.getCrnNo()-2); |
| | | continue; |
| | | } |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(5, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 2.设备上走 => 3.吊车入库中 |
| | | Date now = new Date(); |
| | |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 2.设备上走 => 3.吊车入库中 |
| | | Date now = new Date(); |
| | |
| | | crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 2.设备上走 => 3.吊车入库中 |
| | | Date now = new Date(); |
| | |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMastCrn.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMastCrn.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMastCrn.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | |
| | | */ |
| | | public synchronized void locToCrnStn1Big(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation) { |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep12(slave.getId()); |
| | | Integer crnStation1 = crnStation; |
| | | for (WrkMast wrkMast : wrkMasts) { |
| | | if (wrkMast == null) { |
| | | continue; |
| | | } |
| | | |
| | | crnStation = crnStation1; |
| | | |
| | | CrnSlave.CrnStn crnStn = null; |
| | | for (CrnSlave.CrnStn crnStn1 : slave.getCrnOutStn()){ |
| | |
| | | break; |
| | | } |
| | | |
| | | if (sourceSta.getBay1().shortValue()==81){ |
| | | crnStation = 2; |
| | | } |
| | | |
| | | // 双深库位且浅库位有货,则需先对浅库位进行库位移转 |
| | | if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { |
| | | String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo()); |
| | |
| | | // return; |
| | | } |
| | | |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 任务模式: 单取货 |
| | | crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX((short)0); // 目标库位排 |
| | | crnCommand.setDestinationPosY((short)0); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short)0); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(12L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | WrkMastSplitTwin wrkMastSplitTwin = new WrkMastSplitTwin(wrkMast,crnStation,now); |
| | | wrkMastSplitTwin.setWrkSts(1); |
| | | wrkMastSplitTwin.setWrkStart(wrkMast.getSourceLocNo()); |
| | | wrkMastSplitTwin.setWrkEnd(wrkMast.getSourceStaNo().toString()); |
| | | wrkMastSplitTwin.setStartRow(sourceSta.getRow1()); |
| | | wrkMastSplitTwin.setStartBay(sourceSta.getBay1()); |
| | | wrkMastSplitTwin.setStartLev(sourceSta.getLev1()); |
| | | wrkMastSplitTwin.setEndRow(crnStn.getRow()); |
| | | wrkMastSplitTwin.setEndBay(crnStn.getBay()); |
| | | wrkMastSplitTwin.setEndLev(crnStn.getLev()); |
| | | wrkMastSplitTwin.setWrkType(1); |
| | | wrkMastSplitTwin.setIoType(2); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | if (true){ |
| | | // 1.堆垛机开始移动 |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommand.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 任务模式: 单取货 |
| | | crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | crnCommand.setDestinationPosX((short)0); // 目标库位排 |
| | | crnCommand.setDestinationPosY((short)0); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short)0); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | | wrkMast.setWrkSts(12L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | WrkMastSplitTwin wrkMastSplitTwin = new WrkMastSplitTwin(wrkMast,crnStation,now); |
| | | wrkMastSplitTwin.setWrkSts(1); |
| | | wrkMastSplitTwin.setWrkStart(wrkMast.getSourceLocNo()); |
| | | wrkMastSplitTwin.setWrkEnd(wrkMast.getSourceStaNo().toString()); |
| | | wrkMastSplitTwin.setStartRow(sourceSta.getRow1()); |
| | | wrkMastSplitTwin.setStartBay(sourceSta.getBay1()); |
| | | wrkMastSplitTwin.setStartLev(sourceSta.getLev1()); |
| | | wrkMastSplitTwin.setEndRow(crnStn.getRow()); |
| | | wrkMastSplitTwin.setEndBay(crnStn.getBay()); |
| | | wrkMastSplitTwin.setEndLev(crnStn.getLev()); |
| | | wrkMastSplitTwin.setWrkType(1); |
| | | wrkMastSplitTwin.setIoType(2); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | |
| | | if (wrkMastSplitTwinMapper.insert(wrkMastSplitTwin)==0){ |
| | | log.error("创建 堆垛机执行任务 失败!!,工作号={},堆垛机号={}", wrkMast.getWrkNo(),wrkMast.getCrnNo()); |
| | | } |
| | | break; |
| | | } |
| | | |
| | | if (wrkMastSplitTwinMapper.insert(wrkMastSplitTwin)==0){ |
| | | log.error("创建 堆垛机执行任务 失败!!,工作号={},堆垛机号={}", wrkMast.getWrkNo(),wrkMast.getCrnNo()); |
| | | } |
| | | break; |
| | | } |
| | | // else { |
| | | // // 1.堆垛机开始移动 |
| | | // CrnCommandParam crnCommandParam = new CrnCommandParam(); |
| | | // CrnCommand crnCommand = new CrnCommand(); |
| | | // crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 |
| | | // crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 |
| | | // crnCommand.setAckFinish((short) 0); // 任务完成确认位 |
| | | // crnCommand.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 任务模式: 单取货 |
| | | // crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 源库位排 |
| | | // crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 源库位列 |
| | | // crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 源库位层 |
| | | // crnCommand.setDestinationPosX((short)0); // 目标库位排 |
| | | // crnCommand.setDestinationPosY((short)0); // 目标库位列 |
| | | // crnCommand.setDestinationPosZ((short)0); // 目标库位层 |
| | | // if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) { |
| | | // log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | // } else { |
| | | // // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | // Date now = new Date(); |
| | | // wrkMast.setWrkSts(12L); |
| | | // wrkMast.setCrnStrTime(now); |
| | | // wrkMast.setModiTime(now); |
| | | // WrkMastSplitTwin wrkMastSplitTwin = new WrkMastSplitTwin(wrkMast,crnStation,now); |
| | | // wrkMastSplitTwin.setWrkSts(1); |
| | | // wrkMastSplitTwin.setWrkStart(wrkMast.getSourceLocNo()); |
| | | // wrkMastSplitTwin.setWrkEnd(wrkMast.getSourceStaNo().toString()); |
| | | // wrkMastSplitTwin.setStartRow(sourceSta.getRow1()); |
| | | // wrkMastSplitTwin.setStartBay(sourceSta.getBay1()); |
| | | // wrkMastSplitTwin.setStartLev(sourceSta.getLev1()); |
| | | // wrkMastSplitTwin.setEndRow(crnStn.getRow()); |
| | | // wrkMastSplitTwin.setEndBay(crnStn.getBay()); |
| | | // wrkMastSplitTwin.setEndLev(crnStn.getLev()); |
| | | // wrkMastSplitTwin.setWrkType(1); |
| | | // wrkMastSplitTwin.setIoType(2); |
| | | // if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | // log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | // } |
| | | // |
| | | // if (wrkMastSplitTwinMapper.insert(wrkMastSplitTwin)==0){ |
| | | // log.error("创建 堆垛机执行任务 失败!!,工作号={},堆垛机号={}", wrkMast.getWrkNo(),wrkMast.getCrnNo()); |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 查找工作状态为2(设备上走),且RGV入库接驳站符合的的入库工作档,提取出最多2笔 |
| | | * @param slave |
| | | * @return |
| | | */ |
| | | public synchronized List<WrkMast> getRgvInTask(RgvSlave slave){ |
| | | List<WrkMast> wrkMastTask = new ArrayList<>(); |
| | | List<Integer> staNos = new ArrayList<>(); |
| | | for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) { |
| | | staNos.add(rgvStn.getStaNo()); |
| | | } |
| | | if(staNos.size() < 1){ |
| | | return null; |
| | | } |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep1(slave.getId(), staNos); |
| | | for(WrkMast wrkMast : wrkMasts){ |
| | | Integer plcId = 0; |
| | | for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) { |
| | | if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ |
| | | plcId = rgvStn.getDevpPlcId(); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId); |
| | | //判断RGV入库源站点,自动、有物,有任务号,可出 |
| | | boolean flag1 = false; |
| | | StaProtocol staProtocol1 = devpThread.getStation().get(wrkMast.getRgvSstaNo()); |
| | | if (staProtocol1 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol1 = staProtocol1.clone(); |
| | | } |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl1 = basDevpService.selectById(wrkMast.getRgvSstaNo()); |
| | | if (staDetl1 == null) { |
| | | log.error("RGV入库 ===>> 输送机源站点在数据库不存在, 站点编号={}", wrkMast.getRgvSstaNo()); |
| | | continue; |
| | | } |
| | | if (staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.getWorkNo().intValue() == wrkMast.getWrkNo() |
| | | && staProtocol1.isOutEnable() && staDetl1.getOutEnable() != null && staDetl1.getOutEnable().equals("Y")) { |
| | | flag1 = true; |
| | | } |
| | | |
| | | //判断RGV入库目标站点,自动、无物,没有任务号,可入 |
| | | boolean flag2 = false; |
| | | StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast.getRgvDstaNo()); |
| | | if (staProtocol2 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol2 = staProtocol2.clone(); |
| | | } |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl2 = basDevpService.selectById(wrkMast.getRgvSstaNo()); |
| | | if (staDetl2 == null) { |
| | | log.error("RGV入库 ===>> 输送机源站点在数据库不存在, 站点编号={}", wrkMast.getRgvSstaNo()); |
| | | continue; |
| | | } |
| | | if (staProtocol2.isAutoing() && staProtocol2.isLoading() && staProtocol2.getWorkNo().intValue() == wrkMast.getWrkNo() |
| | | && staProtocol2.isInEnable() && staDetl2.getCanining() != null && staDetl2.getCanining().equals("Y")) { |
| | | flag2 = true; |
| | | } |
| | | |
| | | if(flag1 && flag2){ |
| | | wrkMastTask.add(wrkMast); |
| | | if(wrkMastTask.size() >= 2) break; |
| | | } |
| | | } |
| | | return wrkMastTask; |
| | | } |
| | | |
| | | /** |
| | | * 查找工作状态为14(出库完成),且RGV出库接驳站符合的的出库工作档,提取出最多2笔 |
| | | * @param slave |
| | | * @return |
| | | */ |
| | | public synchronized List<WrkMast> getRgvOutTask(RgvSlave slave){ |
| | | List<WrkMast> wrkMastTask = new ArrayList<>(); |
| | | List<Integer> staNos = new ArrayList<>(); |
| | | for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) { |
| | | staNos.add(rgvStn.getStaNo()); |
| | | } |
| | | if(staNos.size() < 1){ |
| | | return null; |
| | | } |
| | | List<WrkMast> wrkMasts = wrkMastMapper.selectRgvOutStep1(slave.getId(), staNos); |
| | | for(WrkMast wrkMast : wrkMasts){ |
| | | Integer plcId = 0; |
| | | for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) { |
| | | if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ |
| | | plcId = rgvStn.getDevpPlcId(); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId); |
| | | //判断RGV出库源站点,自动、有物,有任务号,可出 |
| | | boolean flag1 = false; |
| | | StaProtocol staProtocol1 = devpThread.getStation().get(wrkMast.getRgvSstaNo()); |
| | | if (staProtocol1 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol1 = staProtocol1.clone(); |
| | | } |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl1 = basDevpService.selectById(wrkMast.getRgvSstaNo()); |
| | | if (staDetl1 == null) { |
| | | log.error("RGV出库 ===>> 输送机源站点在数据库不存在, 站点编号={}", wrkMast.getRgvSstaNo()); |
| | | continue; |
| | | } |
| | | if (staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.getWorkNo().intValue() == wrkMast.getWrkNo() |
| | | && staProtocol1.isOutEnable() && staDetl1.getOutEnable() != null && staDetl1.getOutEnable().equals("Y")) { |
| | | flag1 = true; |
| | | } |
| | | |
| | | //判断RGV出库目标站点,自动、无物,没有任务号,可入 |
| | | boolean flag2 = false; |
| | | StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast.getRgvDstaNo()); |
| | | if (staProtocol2 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol2 = staProtocol2.clone(); |
| | | } |
| | | // 查询站点详细信息 |
| | | BasDevp staDetl2 = basDevpService.selectById(wrkMast.getRgvSstaNo()); |
| | | if (staDetl2 == null) { |
| | | log.error("RGV出库 ===>> 输送机源站点在数据库不存在, 站点编号={}", wrkMast.getRgvSstaNo()); |
| | | continue; |
| | | } |
| | | if (staProtocol2.isAutoing() && staProtocol2.isLoading() && staProtocol2.getWorkNo().intValue() == wrkMast.getWrkNo() |
| | | && staProtocol2.isInEnable() && staDetl2.getCanining() != null && staDetl2.getCanining().equals("Y")) { |
| | | flag2 = true; |
| | | } |
| | | |
| | | if(flag1 && flag2){ |
| | | wrkMastTask.add(wrkMast); |
| | | if(wrkMastTask.size() >= 2) break; |
| | | } |
| | | } |
| | | return wrkMastTask; |
| | | } |
| | | |
| | | /** |
| | |
| | | crnCommand.setDestinationPosY(sta.getBay1().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(sta.getLev1().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | public synchronized boolean storeFinishedExecuteOne(CrnSlave crn) { |
| | | try{ |
| | | // 获取堆垛机信息 |
| | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public synchronized boolean storeFinishedExecuteTwo(CrnSlave crn) { |
| | | try{ |
| | | // 获取堆垛机信息 |
| | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public synchronized boolean storeFinishedExecuteThree(CrnSlave crn) { |
| | | try{ |
| | | // 获取堆垛机信息 |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 空栈板初始化入库,叉车入库站放货 |
| | | */ |
| | |
| | | } |
| | | } |
| | | |
| | | // /** |
| | | // * 初始化RGV地图 |
| | | // */ |
| | | // public synchronized void initRgvMap() { |
| | | // Object data = redisUtil.get("rgv_map"); |
| | | // if (data == null) { |
| | | // //重新获取全路径地图 |
| | | // BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//获取默认路径 |
| | | // if (basRgvPath != null) { |
| | | // ArrayList<RgvNode> rgvNodes = new ArrayList<>(); |
| | | // List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class); |
| | | // for (Integer integer : rgvPath) { |
| | | // RgvNode rgvNode = new RgvNode(integer); |
| | | // rgvNodes.add(rgvNode); |
| | | // } |
| | | // //将数据库地图数据存入redis |
| | | // redisUtil.set("rgv_map", JSON.toJSONString(rgvNodes)); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * 堆垛机演示 ===>> 库位移转 |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 堆垛机命令下发后,异步修改工作档状态 |
| | | */ |
| | | public synchronized void crnIoWrkMast() { |
| | | for (CrnSlave crn : slaveProperties.getCrn()) { |
| | | // 获取堆垛机信息 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | if (crnProtocol == null) { |
| | | continue; |
| | | } |
| | | Date now = new Date(); |
| | | // 堆垛机正在运行 |
| | | if (crnProtocol.getStatusType() != CrnStatusType.IDLE && crnProtocol.getTaskNo() != 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { |
| | | // 获取工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo()); |
| | | if (wrkMast == null) { |
| | | continue; |
| | | } |
| | | // 入库 |
| | | if (wrkMast.getWrkSts() == 1 || wrkMast.getWrkSts() == 2) { |
| | | log.warn("堆垛机非空闲情况下,开始修改工作档状态。[id:{},时间:{}] >>>>> 堆垛机当前状态为:{}。任务号:{}", crn.getId(), DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), crnProtocol.getStatusType().desc, crnProtocol.getTaskNo()); |
| | | // 修改工作档状态 2.设备上走 => 3.吊车入库中 |
| | | wrkMast.setWrkSts(3L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | log.warn("修改工作档状态成功。[时间:{}] >>>>> 任务号:{}", DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), wrkMast.getWrkNo()); |
| | | } |
| | | // 出库、移库 |
| | | if (wrkMast.getWrkSts() == 11) { |
| | | log.warn("堆垛机非空闲情况下,开始修改工作档状态。[id:{},时间:{}] >>>>> 堆垛机当前状态为:{}。任务号:{}", crn.getId(), DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), crnProtocol.getStatusType().desc, crnProtocol.getTaskNo()); |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | wrkMast.setWrkSts(12L); |
| | | wrkMast.setCrnStrTime(now); |
| | | wrkMast.setModiTime(now); |
| | | if (wrkMastMapper.updateById(wrkMast) == 0) { |
| | | log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); |
| | | } |
| | | log.warn("修改工作档状态成功。[时间:{}] >>>>> 任务号:{}", DateUtils.convert(now, DateUtils.yyyyMMddHHmmsssss_F), wrkMast.getWrkNo()); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 入出库模式切换函数 |
| | | */ |
| | | public synchronized void ioConvert() { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | if (inSta.getStaNo() == 2) { |
| | | continue; |
| | | } |
| | | WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getStaNo()); |
| | | switch (inSta.getStaNo()) { |
| | | case 203://1F |
| | | if (pakout != null) { |
| | | if (devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { |
| | | // 出库切换中 |
| | | devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING; |
| | | WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); |
| | | if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() |
| | | && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading() |
| | | && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) { |
| | | // 出库模式 |
| | | devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE; |
| | | } |
| | | } |
| | | } else { |
| | | // 入库模式 |
| | | devpThread.ioModeOf2F = IoModeType.PAKIN_MODE; |
| | | } |
| | | break; |
| | | case 401://1F |
| | | if (pakout != null) { |
| | | if (devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) { |
| | | // 出库切换中 |
| | | devpThread.ioModeOf4F = IoModeType.PAKOUT_BOOTING; |
| | | WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo()); |
| | | if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() |
| | | && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading() |
| | | && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) { |
| | | // 出库模式 |
| | | devpThread.ioModeOf4F = IoModeType.PAKOUT_MODE; |
| | | } |
| | | } |
| | | } else { |
| | | // 入库模式 |
| | | devpThread.ioModeOf4F = IoModeType.PAKIN_MODE; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | // /** |
| | | // * 其他 ===>> 码垛位自动补充空板:驱动拆盘机输出托盘 |
| | | // */ |
| | | // public synchronized void dischargingMachineOutputTray() { |
| | | // try { |
| | | // List<WrkMast> wrkMasts = wrkMastMapper.selectDischargingMachineOutputTray(); |
| | | // if (Cools.isEmpty(wrkMasts) || wrkMasts.size()>3){ |
| | | // return; |
| | | // } |
| | | // |
| | | // // 获取入库站信息 |
| | | // SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | // StaProtocol staProtocol = devpThread.getStation().get(213); |
| | | // if (staProtocol == null) { |
| | | // log.error("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点查询失败"); |
| | | // return; |
| | | // } else { |
| | | // staProtocol = staProtocol.clone(); |
| | | // } |
| | | // |
| | | // if (!staProtocol.isLoading()){ |
| | | // log.info("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点无物,正在自动调出空板!"); |
| | | // int i = wrkMastMapper.selectConfigCount10468N(); |
| | | // if (i==1){ |
| | | // wrkMastMapper.updateConfig10468Y(); |
| | | // } |
| | | // return; |
| | | // }else { |
| | | // int i = wrkMastMapper.selectConfigCount10468N(); |
| | | // if (i==0){ |
| | | // return; |
| | | // } |
| | | // } |
| | | // StaProtocol staProtocol214 = devpThread.getStation().get(214); |
| | | // // 判断是否满足入库条件 |
| | | // if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk() && staProtocol214.getWorkNo()==0) { |
| | | // staProtocol.setWorkNo((short)9999); |
| | | // staProtocol.setStaNo((short)214); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); |
| | | // if (!result) { |
| | | // throw new CoolException("更新plc站点信息失败==>码垛位自动补充空板:驱动拆盘机输出托盘!"); |
| | | // } |
| | | // log.info("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发成功:工作号9999、目标站214!"); |
| | | // }else { |
| | | // log.error("码垛位自动补充空板:驱动拆盘机输出托盘,任务下发失败,站点状态不符合!"); |
| | | // } |
| | | // }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | // } |
| | | // } |
| | | |
| | | // /** |
| | | // * 其他 ===>> 拆盘机处空板扫码,驱动托盘向码垛位,不入库 |
| | | // */ |
| | | // public synchronized void scanBarcodeEmptyBoard() { |
| | | // try { |
| | | // |
| | | // }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * 其他 ===>> 码垛完成驱动托盘进入下一步(入库前扫码) |
| | | */ |
| | | public synchronized void stackingCompletionDriveTray() { |
| | | try { |
| | | int[] staNos=new int[]{215,219};//(2楼两个入库码垛站) |
| | | for (int staNo : staNos){ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if ((basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)) || Cools.isEmpty(basDevp.getBarcode())){ |
| | | continue; |
| | | } |
| | | Integer zpallet = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", basDevp.getBarcode()).eq("status","N")); |
| | | if (zpallet<=0){ |
| | | continue; |
| | | } |
| | | // 获取入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 入出库模式判断 |
| | | // if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } |
| | | // if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { |
| | | // continue; |
| | | // } |
| | | |
| | | if (!staProtocol.isLoading()){ |
| | | log.info("{}站点无物,正在自动调出空板!",staNo); |
| | | continue; |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | && staProtocol.isInEnable() |
| | | && !staProtocol.isEmptyMk() |
| | | && (basDevp.getWrkNo()==0 || (basDevp.getWrkNo()>=9900 && basDevp.getWrkNo()<=9999)) |
| | | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { |
| | | int workNo = commonService.getWorkNo(5); |
| | | staProtocol.setWorkNo(workNo); |
| | | staProtocol.setStaNo(staNo + 2); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | log.error("其他 ===>> 码垛完成驱动托盘进入下一步(入库前扫码)"+e); |
| | | } |
| | | } |
| | | /** |
| | | * 其他 ===>> 码垛完成驱动托盘进入下一步 |
| | | */ |
| | | public synchronized void stackingCompletionDriveTray2() { |
| | | try { |
| | | int[] staNos=new int[]{131,135};//(2个入库站点,1楼2个出库码垛站,根据现场修改) |
| | | for (int staNo : staNos){ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){ |
| | | continue; |
| | | } |
| | | if (basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo); |
| | | if (Cools.isEmpty(wrkMast)){ |
| | | continue; |
| | | } |
| | | // 获取站点信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 入出库模式判断 |
| | | // if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } |
| | | // if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { |
| | | // continue; |
| | | // } |
| | | |
| | | if (!staProtocol.isLoading()){ |
| | | log.info("{}站点无物,异常!",staNo); |
| | | continue; |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | && staProtocol.isInEnable() |
| | | && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000)) |
| | | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { |
| | | |
| | | //任务完成 |
| | | boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol)); |
| | | Thread.sleep(100); |
| | | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(144); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); |
| | | } |
| | | wrkMast.setWrkSts(52L); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | Thread.sleep(100); |
| | | |
| | | //任务完成 |
| | | boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol)); |
| | | |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | log.error("其他 ===>> 码垛完成驱动托盘进入下一步"+e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 其他 ===>> 码垛完成驱动托盘进入下一步 |
| | | */ |
| | | public synchronized void stackingCompletionDriveTrayOk2() { |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历拣料入库口 |
| | | for (DevpSlave.Sta pickSta : devp.getPickSta2()) { |
| | | |
| | | // 获取拣料入库站信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo()!=0 && staProtocol.isOutEnable()) {// |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo()); |
| | | |
| | | if (wrkMast == null) { |
| | | log.error("站点号"+staProtocol.getSiteId()+"未查询到工作档案!"); |
| | | // 无拣料数据 |
| | | continue; |
| | | } |
| | | if (Cools.isEmpty(wrkMast.getSheetNo()) || !wrkMast.getSheetNo().equals("2") || wrkMast.getIoType()<100 || wrkMast.getWrkSts()!=14){ |
| | | continue; |
| | | } |
| | | if (wrkMast.getIoType()==101){ |
| | | //任务完成 |
| | | boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol)); |
| | | wrkMast.setSheetNo("3"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | }else { |
| | | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) |
| | | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { |
| | | continue; |
| | | } |
| | | //任务完成 |
| | | boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol)); |
| | | wrkMast.setSheetNo("3"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | try{ |
| | | Thread.sleep(100); |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | | |
| | | boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol)); |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 其他 ===>> 贴标完成驱动托盘进入下一步 |
| | | */ |
| | | public synchronized void stackingCompletionDriveTray3() { |
| | | try { |
| | | int[] staNos=new int[]{144};//(1楼1个贴标位,根据现场修改) |
| | | for (int staNo : staNos){ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if ((basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999) && basDevp.getWrkNo()!=32222){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo); |
| | | if (Cools.isEmpty(wrkMast)){ |
| | | continue; |
| | | } |
| | | // 获取站点信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | // 入出库模式判断 |
| | | // if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } |
| | | // if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { |
| | | // continue; |
| | | // } |
| | | |
| | | if (!staProtocol.isLoading()){ |
| | | log.info("{}站点无物,异常!",staNo); |
| | | continue; |
| | | } |
| | | if (!staProtocol.getWorkNo().equals(wrkMast.getWrkNo())){ |
| | | log.info("站点工作号={} 与贴标工作号={} 不一致,异常!",staProtocol.getWorkNo(),wrkMast.getWrkNo().shortValue()); |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { |
| | | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); |
| | | } |
| | | wrkMast.setWrkSts(55L); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | log.error("其他 ===>> 贴标完成驱动托盘进入下一步"+e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 其他 ===>> 退货码垛完成托盘继续下一步 |
| | | */ |
| | | public synchronized void stackingCompletionDriveTrayOk3() { |
| | | try { |
| | | int[] staNos=new int[]{118}; |
| | | for (int staNo : staNos){ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()!=0 || basDevp.getReportSign()!=3){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne145(145); |
| | | if (Cools.isEmpty(wrkMast)){ |
| | | continue; |
| | | } |
| | | // 获取站点信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | StaProtocol staProtocol147 = devpThread.getStation().get(147); |
| | | if (staProtocol147 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol147 = staProtocol147.clone(); |
| | | } |
| | | |
| | | if (!staProtocol.isLoading()){ |
| | | log.info("{}站点无物,异常!",staNo); |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol147.isLoading()){ |
| | | log.info("{}站点有物!",staProtocol147.getSiteId()); |
| | | continue; |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | && !staProtocol.isEmptyMk() |
| | | ) { |
| | | |
| | | boolean result3 = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol147)); |
| | | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); |
| | | } |
| | | |
| | | wrkMast.setSheetNo("5"); |
| | | wrkMastMapper.updateById(wrkMast); |
| | | |
| | | boolean result4 = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol147)); |
| | | |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | log.error("其他 ===>> 退货码垛完成托盘继续下一步"+e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 其他 ===>> 拆垛完成继续下一步 运行途中自动避让空板 |
| | | */ |
| | | public synchronized void stackingCompletionDriveTray4() { |
| | | try { |
| | | int[] staNos=new int[]{134};//(134有任务,135空闲,则避让) |
| | | for (int staNo : staNos){ |
| | | BasDevp basDevp = basDevpService.selectById(staNo); |
| | | BasDevp basDevp135 = basDevpService.selectById(135); |
| | | if (basDevp.getWrkNo()==0 || (basDevp.getWrkNo()<10000 && basDevp.getWrkNo()>9899) ){ |
| | | continue; |
| | | } |
| | | if (basDevp135.getReportSign()!=0){ |
| | | continue; |
| | | } |
| | | WrkMast wrkMast131 = wrkMastMapper.selectWrkMastUnstackingOne202Two(131); |
| | | if (Cools.isEmpty(wrkMast131)){ |
| | | continue; |
| | | } |
| | | // 获取站点信息 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol135 = devpThread.getStation().get(135); |
| | | if (staProtocol135 == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol135 = staProtocol135.clone(); |
| | | } |
| | | if (staProtocol135.getWorkNo()<9900 || staProtocol135.getWorkNo()>9999 || staProtocol135.getWorkNo()==0 |
| | | || !staProtocol135.isLoading() || !staProtocol135.isAutoing()){ |
| | | continue; |
| | | } |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | |
| | | if (!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | // if (!staProtocol.getWorkNo().equals(wrkMast131.getWrkNo())){ |
| | | // log.info("站点工作号={} 与贴标工作号={} 不一致,异常!",staProtocol.getWorkNo(),wrkMast131.getWrkNo().shortValue()); |
| | | // } |
| | | // 判断是否满足入库条件 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | && basDevp.getReportSign()==0 |
| | | ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { |
| | | // if (true){ |
| | | // return; |
| | | // } |
| | | |
| | | //任务完成 |
| | | boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol135)); |
| | | try{ |
| | | Thread.sleep(100); |
| | | }catch (Exception e){ } |
| | | basDevp135.setReportSign(2); |
| | | basDevpService.updateById(basDevp135); |
| | | int workNo = commonService.getWorkNo(5); |
| | | staProtocol135.setWorkNo(workNo); |
| | | staProtocol135.setStaNo(144); |
| | | devpThread.setPakMk(staProtocol135.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol135)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); |
| | | } |
| | | boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol135)); |
| | | |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | log.error("其他 ===>> 贴标完成驱动托盘进入下一步"+e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 完成小车任务 |
| | | */ |
| | | public synchronized void rgvCompleteWrkMastSta() { |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | } |
| | | |
| | | // 只有当RGV等待WCS确认、自动 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.WORKING |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && ((rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.WAITING ) || |
| | | (rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING )) |
| | | ) { |
| | | log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); |
| | | if (rgvProtocol.getTaskNo1()!=0 && (rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING)){ |
| | | if (rgvProtocol.getTaskNo1()==(short)32222){ |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | break; |
| | | } |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().longValue()); |
| | | if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){ |
| | | log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){ |
| | | Thread.sleep(200); |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { |
| | | continue; |
| | | } |
| | | log.error("小车任务完成下发输送线任务:"+staProtocol); |
| | | // try{ |
| | | // Thread.sleep(1000); |
| | | // DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | // StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); |
| | | // log.error("小车任务完成读取输送线任务:"+staProtocolEnd); |
| | | // if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) |
| | | // staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); |
| | | // staProtocolEnd.setStaNo(wrkMast.getStaNo()); |
| | | // if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { |
| | | // continue; |
| | | // } |
| | | // log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); |
| | | // } |
| | | // }catch (Exception e){ |
| | | // |
| | | // } |
| | | } |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | }else if (rgvProtocol.getTaskNo2()!=0 && (rgvProtocol.getStatusType2()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING)){ |
| | | if (rgvProtocol.getTaskNo2()==(short)32222){ |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | break; |
| | | } |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().longValue()); |
| | | if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){ |
| | | log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); |
| | | if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){ |
| | | Thread.sleep(200); |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); |
| | | if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | staProtocol.setStaNo(wrkMast.getStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { |
| | | continue; |
| | | } |
| | | log.error("小车任务完成下发输送线任务:"+staProtocol); |
| | | // try{ |
| | | // Thread.sleep(1000); |
| | | // DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); |
| | | // StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); |
| | | // log.error("小车任务完成读取输送线任务:"+staProtocolEnd); |
| | | // if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) |
| | | // staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); |
| | | // staProtocolEnd.setStaNo(wrkMast.getStaNo()); |
| | | // if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { |
| | | // continue; |
| | | // } |
| | | // log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); |
| | | // } |
| | | // }catch (Exception e){ |
| | | // |
| | | // } |
| | | } |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | }else { |
| | | log.error("小车复位失败,小车号{},等待wcs确认但是没有工作号!",rgvProtocol.getRgvNo()); |
| | | } |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("小车复位线程报错!"+e); |
| | | } |
| | | } |
| | | /** |
| | | * 入出库 ===>> 小车作业下发 |
| | | */ |
| | | public synchronized boolean rgvIoExecute(Integer sign) { |
| | | boolean rgvIoExecuteSign = false; |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | // 获取小车信息 |
| | | boolean signWork = false; |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | ) { |
| | | switch (sign){ |
| | | //执行小车货物搬运任务 |
| | | case 1: |
| | | signWork = rgvRunWrkMastFullSta(rgvSlave); |
| | | break; |
| | | //执行小车空板搬运任务 |
| | | case 2://放//拆盘 |
| | | signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); |
| | | break; |
| | | case 3://满放 |
| | | signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); |
| | | break; |
| | | case 4://取叠盘 |
| | | signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); |
| | | break; |
| | | case 5:////满取 |
| | | signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); |
| | | break; |
| | | case 6:////提升 |
| | | // signWork = qwe(); |
| | | break; |
| | | case 7:////位移 |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | for (int signCount = 1;!signWork && signCount<7;signCount++){ |
| | | switch (signCount){ |
| | | case 1://执行小车货物搬运任务 |
| | | signWork = rgvRunWrkMastFullSta(rgvSlave); |
| | | break; |
| | | case 2://放//拆盘 |
| | | signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); |
| | | break; |
| | | case 3://满放 |
| | | signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); |
| | | break; |
| | | case 4://取叠盘 |
| | | signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); |
| | | break; |
| | | case 5:////满取 |
| | | signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); |
| | | break; |
| | | case 6:////提升 |
| | | // signWork = rgvRunWrkMastEmptyStaPut(); |
| | | break; |
| | | case 7:////位移 |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | }else { |
| | | continue; |
| | | } |
| | | if (!rgvIoExecuteSign){ |
| | | rgvIoExecuteSign = signWork; |
| | | } |
| | | } |
| | | // if (!rgvIoExecuteSign){ |
| | | // if (sign>6){ |
| | | // |
| | | // } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("RGV小车任务下发报错"+e); |
| | | } |
| | | return rgvIoExecuteSign; |
| | | } |
| | | /** |
| | | * 执行小车搬运任务 |
| | | */ |
| | | public synchronized boolean rgvRunWrkMastFullSta(RgvSlave rgvSlave) { |
| | | try{ |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | return false; |
| | | } |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); |
| | | for (WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:满版 3:取放 |
| | | continue; |
| | | } |
| | | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); |
| | | if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ |
| | | continue; |
| | | } |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); |
| | | if (sign){ |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd()); |
| | | if (signMap){ |
| | | wrkMastSta.setWrkSts(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return true; |
| | | }else { |
| | | log.error("3864行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | }else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3875行执行小车搬运任务下发失败"); |
| | | log.error("3875行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | /** |
| | | * 执行小车搬运任务//拆盘 |
| | | */ |
| | | public synchronized boolean rgvRunWrkMastEmptyStaPut(RgvSlave rgvSlave) {//拆盘 |
| | | try{ |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位二有物//rgv可用//拆盘 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | && (rgvProtocol.getLoaded2()==3 || rgvProtocol.getLoaded2()==1 || rgvProtocol.getLoaded2()==4)////0 无物;1 一层无物二层有物 (只能拆叠) ;2一层有物二层无物() ;3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | return false; |
| | | } |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//查询可执行任务 |
| | | for (WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=2){// 2:空板 || 工作类型 1:取(叠盘) 2:拆盘 5:满取 6:满放 |
| | | continue; |
| | | } |
| | | boolean sign = false; |
| | | if ( wrkMastSta.getStaEnd()!=0){//放 |
| | | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); |
| | | if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ |
| | | continue; |
| | | } |
| | | sign = rgvPutEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//拆盘 |
| | | }else { |
| | | continue; |
| | | } |
| | | if (sign){ |
| | | boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); |
| | | if (signMap){ |
| | | wrkMastSta.setWrkSts(2); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return true; |
| | | }else { |
| | | log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | }else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3933行执行小车放空板任务下发失败"); |
| | | log.error("3933行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 执行小车搬运任务 |
| | | */ |
| | | public synchronized boolean rgvRunWrkMastEmptyStaPutFull(RgvSlave rgvSlave) {//满放 |
| | | try{ |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位二有物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物 ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | return false; |
| | | } |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//查询可执行任务 |
| | | for (WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=6){// 2:空板 || 工作类型 1:取(叠盘) 2:拆盘 5:满取 6:满放 7:提升 |
| | | continue; |
| | | } |
| | | boolean sign = false; |
| | | if ( wrkMastSta.getStaEnd()!=0){//满放 |
| | | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); |
| | | if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ |
| | | continue; |
| | | } |
| | | sign = rgvPutEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); |
| | | }else { |
| | | continue; |
| | | } |
| | | if (sign){ |
| | | boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); |
| | | if (signMap){ |
| | | wrkMastSta.setWrkSts(2); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return true; |
| | | }else { |
| | | log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | }else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3933行执行小车放空板任务下发失败"); |
| | | log.error("3933行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public synchronized boolean rgvRunWrkMastEmptyStaTake(RgvSlave rgvSlave) {//叠盘 |
| | | try{ |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位二无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | && (rgvProtocol.getLoaded2()==0 || rgvProtocol.getLoaded2()==1 ) //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠) ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | return false; |
| | | } |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); |
| | | for (WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=1){// 2:空板 || 工作类型 1:取(叠盘) 2:拆盘 5:满取 6:满放 |
| | | continue; |
| | | } |
| | | boolean sign = false; |
| | | if ( wrkMastSta.getStaStart()!=0){//取 |
| | | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); |
| | | if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ |
| | | continue; |
| | | } |
| | | sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//叠盘 |
| | | }else { |
| | | continue; |
| | | } |
| | | if (sign){ |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); |
| | | if (signMap){ |
| | | wrkMastSta.setWrkSts(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return true; |
| | | }else { |
| | | log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | }else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3989行执行小车取空板任务下发失败"); |
| | | log.error("3989行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public synchronized boolean rgvRunWrkMastEmptyStaTakeFull(RgvSlave rgvSlave) {//满取 |
| | | try{ |
| | | // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | return false; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | return false; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位二无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 |
| | | && rgvProtocol.getLoaded2()==0 //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠) ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | | log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); |
| | | return false; |
| | | } |
| | | List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); |
| | | for (WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=5){// 2:空板 || 工作类型 1:取(叠盘) 2:拆盘 5:满取 6:满放 |
| | | continue; |
| | | } |
| | | boolean sign = false; |
| | | if (wrkMastSta.getStaStart()!=0){//满取 |
| | | BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); |
| | | if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ |
| | | continue; |
| | | } |
| | | sign = rgvTakeEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); |
| | | }else { |
| | | continue; |
| | | } |
| | | if (sign){ |
| | | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); |
| | | if (signMap){ |
| | | wrkMastSta.setWrkSts(1); |
| | | try{ |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | }catch (Exception e){ |
| | | log.error("更新小车任务失败"); |
| | | } |
| | | return true; |
| | | }else { |
| | | log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | }else { |
| | | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | // } |
| | | }catch (Exception e){ |
| | | log.error("3989行执行小车取空板任务下发失败"); |
| | | log.error("3989行"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * 有任务但未执行 此时需要调整小车位置 |
| | | * */ |
| | | public synchronized void rgvRunWrkMastEmptyStaAvoidance() { |
| | | try{ |
| | | Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//查询状态为0的任务 |
| | | if (integer==0){ |
| | | return; |
| | | } |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && rgvProtocol.getTaskNo1()==0 |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | && rgvProtocol.getStatusType1() == RgvStatusType.IDLE |
| | | && rgvProtocol.getStatusType2() == RgvStatusType.IDLE |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){ |
| | | continue; |
| | | } |
| | | if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){ |
| | | continue; |
| | | } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){ |
| | | continue; |
| | | } |
| | | rgvAvoidanceXY(rgvProtocol.getRgvNo()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("4109行执行小车初始化任务下发失败"); |
| | | log.error("4109行"+e); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 刷新地图数据 |
| | | * */ |
| | | public synchronized void refreshRgvMap() { |
| | | try{ |
| | | for (RgvSlave rgvSlave:slaveProperties.getRgv()) { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | continue; |
| | | } |
| | | BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); |
| | | if (basRgv == null) { |
| | | log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); |
| | | continue; |
| | | } |
| | | |
| | | // 只有当RGV空闲、自动,工位一无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && rgvProtocol.getTaskNo1()==0 |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvSlave.getId()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("4109行执行小车初始化任务下发失败"); |
| | | log.error("4109行"+e); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车XY移动 避让 |
| | | * */ |
| | | public synchronized boolean rgvAvoidanceXY(Integer rgvId){ |
| | | if (rgvId==1){ |
| | | try{ |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1((short)32222); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 工位1任务模式: 回原点 |
| | | //basRgvMap.getLockStartRoute().shortValue() |
| | | rgvCommand.setSourceStaNo1( (short)101); |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 step=9,回原点 9999任务号 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | |
| | | } |
| | | }else { |
| | | try{ |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2((short)32222); // 工位2工作号 |
| | | rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 工位2任务模式: 回原点 |
| | | rgvCommand.setSourceStaNo2((short)117); |
| | | rgvCommand.setCommand((short) 2); //工位2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 step=9,回原点 9999任务号 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /* |
| | | * 小车取货至工位任务 |
| | | * */ |
| | | public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式: 取放货 |
| | | rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //工位1起点 |
| | | rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车取货至工位任务 |
| | | * */ |
| | | public synchronized boolean rgvTakeFull(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式: 取货 |
| | | rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //工位1起点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车放货至输送线任务 |
| | | * */ |
| | | public synchronized boolean rgvPutFull(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish1((short) 0); // 工位1任务完成确认位 |
| | | rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 工位1工作号 |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式: 放货 |
| | | rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车取空板至工位任务 叠盘 |
| | | * */ |
| | | public synchronized boolean rgvTakeEmpty(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 |
| | | rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 工位2任务模式: 取货 |
| | | rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue()); //工位2起点 |
| | | rgvCommand.setCommand((short) 2); //工位2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车放空板至输送线任务 //拆盘 |
| | | * */ |
| | | public synchronized boolean rgvPutEmpty(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 |
| | | rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 工位2任务模式: 放货 |
| | | rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue()); //工位2目标站点 |
| | | rgvCommand.setCommand((short) 2); //工位2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车取空板至工位任务 满取 |
| | | * */ |
| | | public synchronized boolean rgvTakeEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 |
| | | rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_5); // 工位2任务模式: 满取 |
| | | rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue()); //工位2起点 |
| | | rgvCommand.setCommand((short) 2); //工位2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车放空板至输送线任务 //满放 |
| | | * */ |
| | | public synchronized boolean rgvPutEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setRgvNo(rgvId); // RGV编号 |
| | | rgvCommand.setAckFinish2((short) 0); // 工位2任务完成确认位 |
| | | rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 工位2工作号 |
| | | rgvCommand.setTaskMode2(RgvTaskModeType.PUT_6); // 工位2任务模式: 满放 |
| | | rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue()); //工位2目标站点 |
| | | rgvCommand.setCommand((short) 2); //工位2任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车复位 |
| | | * */ |
| | | public synchronized boolean rgvComplete(Integer rgvId){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={}",rgvId); |
| | | return false; |
| | | } else { |
| | | log.info("RGV命令下发成功,RGV号={}",rgvId); |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("RGV命令下发失败,RGV号={}。异常:"+e,rgvId); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 小车地图更新 更新锁 |
| | | * */ |
| | | public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){ |
| | | if (true){ |
| | | basRgvMapMapper.updateById(basRgvMapCurrent); |
| | | return true; |
| | | } |
| | | |
| | | // List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute()); |
| | | //更新当前小车锁 |
| | | try{ |
| | | Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//获取最远站点 |
| | | Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //获取合并干涉项 |
| | | basRgvMapCurrent.setLockEndRoute(fallMerge); |
| | | basRgvMapMapper.updateById(basRgvMapCurrent); |
| | | |
| | | //更新另一台小车地图 |
| | | Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther(); |
| | | BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther); |
| | | List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute()); |
| | | Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//另一台小车可活动最远位置 |
| | | basRgvMapOther.setEndRoute(lockEndRoute); |
| | | basRgvMapMapper.updateById(basRgvMapOther); |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("小车地图更新出错!"); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 入出库 ===>> 小车作业下发 |
| | | */ |
| | | public synchronized boolean steIoExecute(Integer sign) { |
| | |
| | | /** |
| | | * 入出库 ===>> 堆垛机入出库作业下发 |
| | | */ |
| | | public synchronized void crnIoExecuteTwoExecute() { |
| | | public synchronized void crnIoExecuteTwoExecute(Integer i) { |
| | | for (CrnSlave crn : slaveProperties.getCrn()) { |
| | | try{ |
| | | switch (crn.getId()){ |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | crnWrkMastSplitTwinExecute(crn); |
| | | crnWrkMastSplitTwinExecute(crn,i); |
| | | continue; |
| | | default: |
| | | continue; |
| | |
| | | } |
| | | |
| | | |
| | | public synchronized boolean crnWrkMastSplitTwinExecute(CrnSlave crn){ |
| | | public synchronized boolean crnWrkMastSplitTwinExecute(CrnSlave crn,Integer i){ |
| | | try{ |
| | | // 获取堆垛机信息 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); |
| | |
| | | int[] sign = new int[]{0,0}; |
| | | // 只有当堆垛机自动时才继续执行 |
| | | if (crnProtocol.getModeType() == CrnModeType.AUTO) { |
| | | // 只有当堆垛机工位1取货或者有物 并且 工位2无任务时才继续执行 |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE |
| | | && crnProtocol.getTaskNo() == 0 |
| | | && crnProtocol.getLoaded() == 0 |
| | | && crnProtocol.getForkPos() == 0) { |
| | | sign[0] = 1; |
| | | sign[1] = 1; |
| | | } else if (crnProtocol.getStatusTypeTwo() == CrnStatusType.IDLE |
| | | && crnProtocol.getTaskNoTwo() == 0 |
| | | && crnProtocol.getLoadedTwo() == 0 |
| | | && crnProtocol.getForkPosTwo() == 0){ |
| | | sign[0] = 1; |
| | | sign[1] = 2; |
| | | } else if (crnProtocol.getStatusType() == CrnStatusType.SEPARATE_IDLE |
| | | //双 |
| | | if (crnProtocol.getStatusType() == CrnStatusType.SEPARATE_IDLE |
| | | && crnProtocol.getTaskNo() == 0 |
| | | && crnProtocol.getLoaded() == 1 |
| | | && crnProtocol.getForkPos() == 0) { |
| | | sign[0] = 2; |
| | | sign[1] = 1; |
| | | } else if (crnProtocol.getStatusTypeTwo() == CrnStatusType.SEPARATE_IDLE |
| | | && crnProtocol.getTaskNoTwo() == 0 |
| | | && crnProtocol.getLoadedTwo() == 1 |
| | | && crnProtocol.getForkPosTwo() == 0){ |
| | | sign[0] = 2; |
| | | sign[1] = 2; |
| | | if (crnProtocol.getStatusTypeTwo() == CrnStatusType.SEPARATE_IDLE |
| | | && crnProtocol.getTaskNoTwo() == 0 |
| | | && crnProtocol.getLoadedTwo() == 1 |
| | | && crnProtocol.getForkPosTwo() == 0){ |
| | | List<WrkMastSplitTwin> wrkMastSplitTwinList1 = wrkMastSplitTwinService.getWrkMastSplitTwin(crn.getId(),1,2,2,0); |
| | | List<WrkMastSplitTwin> wrkMastSplitTwinList2 = wrkMastSplitTwinService.getWrkMastSplitTwin(crn.getId(),2,2,2,0); |
| | | if (!wrkMastSplitTwinList1.isEmpty() && !wrkMastSplitTwinList2.isEmpty() ){ |
| | | if (wrkMastSplitTwinList1.size()>1 || wrkMastSplitTwinList2.size()>1 ){ |
| | | log.error("Pair堆垛机出入库下发异常,堆垛机号={},异常信息={},工位号={},工作类型={}",crn.getId(),"存在多笔可执行作业,请删除无效作业!!!",sign[1],sign[0]); |
| | | return false; |
| | | } |
| | | WrkMastSplitTwin wrkMastSplitTwin1 = wrkMastSplitTwinList1.get(0); |
| | | WrkMastSplitTwin wrkMastSplitTwin2 = wrkMastSplitTwinList2.get(0); |
| | | boolean ack = crnExecutePutFullPair(crn.getId(), wrkMastSplitTwin1,wrkMastSplitTwin2, sign[1]); |
| | | if (ack){ |
| | | wrkMastSplitTwin1.setWrkSts(wrkMastSplitTwin1.getWrkType()==1? 1:3); |
| | | wrkMastSplitTwinService.updateById(wrkMastSplitTwin1); |
| | | wrkMastSplitTwin2.setWrkSts(wrkMastSplitTwin2.getWrkType()==1? 1:3); |
| | | wrkMastSplitTwinService.updateById(wrkMastSplitTwin2); |
| | | }else { |
| | | log.error("堆垛机出入库下发报错,堆垛机号={},异常信息={}",crn.getId(),"下发任务返回值为:"+ack); |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | } |
| | | // 只有当堆垛机工位1取货或者有物 并且 工位2无任务时才继续执行 |
| | | switch (i){ |
| | | case 1: |
| | | if (crnProtocol.getStatusType() == CrnStatusType.IDLE |
| | | && crnProtocol.getTaskNo() == 0 |
| | | && crnProtocol.getLoaded() == 0 |
| | | && crnProtocol.getForkPos() == 0) { |
| | | sign[0] = 1; |
| | | sign[1] = 1; |
| | | } |
| | | break; |
| | | case 2: |
| | | if (crnProtocol.getStatusType() == CrnStatusType.SEPARATE_IDLE |
| | | && crnProtocol.getTaskNo() == 0 |
| | | && crnProtocol.getLoaded() == 1 |
| | | && crnProtocol.getForkPos() == 0) { |
| | | sign[0] = 2; |
| | | sign[1] = 1; |
| | | } |
| | | break; |
| | | case 3: |
| | | if (crnProtocol.getStatusTypeTwo() == CrnStatusType.IDLE |
| | | && crnProtocol.getTaskNoTwo() == 0 |
| | | && crnProtocol.getLoadedTwo() == 0 |
| | | && crnProtocol.getForkPosTwo() == 0){ |
| | | sign[0] = 1; |
| | | sign[1] = 2; |
| | | } |
| | | break; |
| | | case 4: |
| | | if (crnProtocol.getStatusTypeTwo() == CrnStatusType.SEPARATE_IDLE |
| | | && crnProtocol.getTaskNoTwo() == 0 |
| | | && crnProtocol.getLoadedTwo() == 1 |
| | | && crnProtocol.getForkPosTwo() == 0){ |
| | | sign[0] = 2; |
| | | sign[1] = 2; |
| | | } |
| | | break; |
| | | default: |
| | | } |
| | | } |
| | | |
| | | if (sign[0]!=0){ |
| | | List<WrkMastSplitTwin> wrkMastSplitTwinList = wrkMastSplitTwinService.getWrkMastSplitTwin(crn.getId(),sign[1],null,sign[0],0); |
| | | if (wrkMastSplitTwinList.size()!=1){ |
| | | log.error("堆垛机出入库下发异常,堆垛机号={},异常信息={},工位号={},工作类型={}",crn.getId(),"不存在或者存在多笔可执行作业,请删除无效作业!!!",sign[1],sign[0]); |
| | | if (wrkMastSplitTwinList.size()>1){ |
| | | log.error("堆垛机出入库下发异常,堆垛机号={},异常信息={},工位号={},工作类型={}",crn.getId(),"存在多笔可执行作业,请删除无效作业!!!",sign[1],sign[0]); |
| | | return false; |
| | | } |
| | | for (WrkMastSplitTwin wrkMastSplitTwin:wrkMastSplitTwinList){ |
| | | return sign[0] == 1? crnExecuteTakeFull(crn.getId(), wrkMastSplitTwin, sign[1]) : crnExecutePutFull(crn.getId(), wrkMastSplitTwin, sign[1]); |
| | | boolean ack = sign[0] == 1 ? crnExecuteTakeFull(crn.getId(), wrkMastSplitTwin, sign[1]) : crnExecutePutFull(crn.getId(), wrkMastSplitTwin, sign[1]); |
| | | if (ack){ |
| | | wrkMastSplitTwin.setWrkSts(wrkMastSplitTwin.getWrkType()==1? 1:3); |
| | | wrkMastSplitTwinService.updateById(wrkMastSplitTwin); |
| | | }else { |
| | | log.error("堆垛机出入库下发报错,堆垛机号={},异常信息={}",crn.getId(),"下发任务返回值为:"+ack); |
| | | } |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | |
| | | crnCommand.setDestinationPosY((short)0); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short)0); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMastSplitTwin.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMastSplitTwin.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMastSplitTwin.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | |
| | | crnCommand.setDestinationPosY(wrkMastSplitTwin.getEndBay().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(wrkMastSplitTwin.getEndLev().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, wrkMastSplitTwin.getCrnNo(), new Task(crnStation==1? 2:5, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMastSplitTwin.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMastSplitTwin.getCrnNo(), JSON.toJSONString(crnCommand)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 堆垛机取货至工位任务 |
| | | * */ |
| | | public synchronized boolean crnExecuteTakeFullPair(Integer crnNo,WrkMastSplitTwin wrkMastSplitTwinOne,WrkMastSplitTwin wrkMastSplitTwinTwo, Integer crnStation){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | // 1.堆垛机开始移动 |
| | | CrnCommandParam crnCommandParam = new CrnCommandParam(); |
| | | crnCommandParam.setCrnNo(crnNo); // 堆垛机编号 |
| | | crnCommandParam.setTaskNo(wrkMastSplitTwinOne.getWrkNo().shortValue()); // 工作号 |
| | | crnCommandParam.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommandParam.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 任务模式: 单取货 |
| | | crnCommandParam.setSourcePosX(wrkMastSplitTwinOne.getStartRow().shortValue()); // 源库位排 |
| | | crnCommandParam.setSourcePosY(wrkMastSplitTwinOne.getStartBay().shortValue()); // 源库位列 |
| | | crnCommandParam.setSourcePosZ(wrkMastSplitTwinOne.getStartLev().shortValue()); // 源库位层 |
| | | crnCommandParam.setDestinationPosX((short)0); // 目标库位排 |
| | | crnCommandParam.setDestinationPosY((short)0); // 目标库位列 |
| | | crnCommandParam.setDestinationPosZ((short)0); // 目标库位层 |
| | | |
| | | crnCommandParam.setTaskNo2(wrkMastSplitTwinTwo.getWrkNo().shortValue()); // 工作号 |
| | | crnCommandParam.setAckFinish2((short) 0); // 任务完成确认位 |
| | | crnCommandParam.setTaskMode2(CrnTaskModeType.SEPARATE_TAKE); // 任务模式: 单取货 |
| | | crnCommandParam.setSourcePosX2(wrkMastSplitTwinTwo.getStartRow().shortValue()); // 源库位排 |
| | | crnCommandParam.setSourcePosY2(wrkMastSplitTwinTwo.getStartBay().shortValue()); // 源库位列 |
| | | crnCommandParam.setSourcePosZ2(wrkMastSplitTwinTwo.getStartLev().shortValue()); // 源库位层 |
| | | crnCommandParam.setDestinationPosX2((short)0); // 目标库位排 |
| | | crnCommandParam.setDestinationPosY2((short)0); // 目标库位列 |
| | | crnCommandParam.setDestinationPosZ2((short)0); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, crnCommandParam.getCrnNo(), new Task(9, crnCommandParam))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", crnCommandParam.getCrnNo(), JSON.toJSONString(crnCommandParam)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * 堆垛机放货货至出库站点任务 |
| | | * */ |
| | | public synchronized boolean crnExecutePutFullPair(Integer crnNo,WrkMastSplitTwin wrkMastSplitTwinOne,WrkMastSplitTwin wrkMastSplitTwinTwo, Integer crnStation){ |
| | | try{ |
| | | // 命令下发区 -------------------------------------------------------------------------- |
| | | // 1.堆垛机开始移动 |
| | | CrnCommandParam crnCommandParam = new CrnCommandParam(); |
| | | crnCommandParam.setCrnNo(crnNo); // 堆垛机编号 |
| | | crnCommandParam.setTaskNo(wrkMastSplitTwinOne.getWrkNo().shortValue()); // 工作号 |
| | | crnCommandParam.setAckFinish((short) 0); // 任务完成确认位 |
| | | crnCommandParam.setTaskMode(CrnTaskModeType.SEPARATE_PUT); // 任务模式: 单放货 |
| | | crnCommandParam.setSourcePosX((short)0); // 源库位排 |
| | | crnCommandParam.setSourcePosY((short)0); // 源库位列 |
| | | crnCommandParam.setSourcePosZ((short)0); // 源库位层 |
| | | crnCommandParam.setDestinationPosX(wrkMastSplitTwinOne.getEndRow().shortValue()); // 目标库位排 |
| | | crnCommandParam.setDestinationPosY(wrkMastSplitTwinOne.getEndBay().shortValue()); // 目标库位列 |
| | | crnCommandParam.setDestinationPosZ(wrkMastSplitTwinOne.getEndLev().shortValue()); // 目标库位层 |
| | | |
| | | crnCommandParam.setTaskNo2(wrkMastSplitTwinTwo.getWrkNo().shortValue()); // 工作号 |
| | | crnCommandParam.setAckFinish2((short) 0); // 任务完成确认位 |
| | | crnCommandParam.setTaskMode2(CrnTaskModeType.SEPARATE_PUT); // 任务模式: 单放货 |
| | | crnCommandParam.setSourcePosX2((short)0); // 源库位排 |
| | | crnCommandParam.setSourcePosY2((short)0); // 源库位列 |
| | | crnCommandParam.setSourcePosZ2((short)0); // 源库位层 |
| | | crnCommandParam.setDestinationPosX2(wrkMastSplitTwinTwo.getEndRow().shortValue()); // 目标库位排 |
| | | crnCommandParam.setDestinationPosY2(wrkMastSplitTwinTwo.getEndBay().shortValue()); // 目标库位列 |
| | | crnCommandParam.setDestinationPosZ2(wrkMastSplitTwinTwo.getEndLev().shortValue()); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, crnCommandParam.getCrnNo(), new Task(9, crnCommandParam))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", crnCommandParam.getCrnNo(), JSON.toJSONString(crnCommandParam)); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Jar任务创建 初始 //完成 |
| | | */ |
| | | public synchronized void jarMastGenerate() { |
| | | for (JarSlave jarSlave : slaveProperties.getJar()) { |
| | | if (jarSlave.getId()>4){ |
| | | continue; |
| | | } |
| | | try{ |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | continue; |
| | | } |
| | | for(JarSlave.StaStn staStn : jarSlave.getJarInSta()){ |
| | | // 获取硫化罐入库站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, staStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(staStn.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo()!=0){ |
| | | try{ |
| | | if (basJarMastService.selectJarMastOperation(jarSlave.getId(),2)!=0){ |
| | | break; |
| | | } |
| | | if (basJarMastService.selectJarMastOperation(jarSlave.getJarOtherId(),3)!=0){ |
| | | break; |
| | | } |
| | | if (basJarMastService.getJarMastByJarIdCount(jarSlave.getId())>=14){ |
| | | break; |
| | | } |
| | | if (basJarMastService.selectJarMastOperation(jarSlave.getId(),0,9)>=7){ |
| | | break; |
| | | } |
| | | if (!Objects.equals |
| | | ( |
| | | basJarMastService.selectJarMastOperation(jarSlave.getId(), 0, 4) |
| | | , |
| | | basJarMastService.selectJarMastOperation(jarSlave.getId(), 0, 9) |
| | | ) |
| | | ){ |
| | | break; |
| | | } |
| | | BasJarMast jarMastByJarIdMax = basJarMastService.getJarMastByJarIdMax(jarSlave.getId(),0,4); |
| | | int jarLocDigit = 0; |
| | | if (Cools.isEmpty(jarMastByJarIdMax)){ |
| | | if (basJarMastService.selectJarMastOperation(jarSlave.getId(),0,4)!=0){ |
| | | break; |
| | | } |
| | | jarLocDigit = 1; |
| | | } else if (jarMastByJarIdMax.getJarLocDigit()<7){ |
| | | jarLocDigit = jarMastByJarIdMax.getJarLocDigit()+1; |
| | | } else { |
| | | continue; |
| | | } |
| | | WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); |
| | | if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts()!=2){ |
| | | continue; |
| | | } |
| | | BasJarMast basJarMast = basJarMastService.getJarMastByWrkNo(wrkMast.getWrkNo().longValue()); |
| | | if (!Cools.isEmpty(basJarMast)){ |
| | | continue; |
| | | } |
| | | WrkMastExecute wrkMastExecute = wrkMastExecuteService.getWrkMastExecuteByWrkNo(wrkMast.getWrkNo().longValue()); |
| | | if (!Cools.isEmpty(wrkMastExecute)){ |
| | | continue; |
| | | } |
| | | log.error("Jar任务创建 初始===>行={}",4484); |
| | | if (jarMastGenerateExecute(jarSlave,wrkMast,jarLocDigit,staStn.getStaNo())){ |
| | | return; |
| | | } |
| | | }catch (Exception e){ |
| | | log.error(jarSlave.getId()+"号硫化罐Jar任务创建异常!"+e); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐Jar任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Jar任务创建===》执行 //完成 |
| | | */ |
| | | public synchronized boolean jarMastGenerateExecute(JarSlave jarSlave,WrkMast wrkMast,Integer jarLocDigit,Integer staNo) { |
| | | try{ |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | JarThread jarOtherThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getJarOtherId()); |
| | | JarProtocol jarOtherProtocol = jarOtherThread.getJarProtocol(); |
| | | if (jarOtherProtocol == null) { |
| | | return false; |
| | | } |
| | | // if (jarOtherProtocol.modeType != JarModeType.AUTO){ |
| | | // return false; |
| | | // } |
| | | |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (basJar.getJarMode()!=2){ |
| | | return false; |
| | | } |
| | | |
| | | //自动、空闲、右门关闭、 Other左门关闭 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | if (jarProtocol.statusType != JarStatusType.SOS){ |
| | | log.error("Jar任务创建===》执行===>行={}",4537); |
| | | BasJarMast basJarMast = new BasJarMast(basJar, wrkMast, jarLocDigit); |
| | | basJarMast.setJarEnterStaNo(staNo);//入硫化罐站点 |
| | | basJarMastService.insert(basJarMast); |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐生成BasJarMast初始任务失败,异常原因={},工作号={},硫化库位={}",jarSlave.getId(),e.getMessage(),wrkMast,jarLocDigit); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * Jar任务完成 //完成 |
| | | */ |
| | | public synchronized boolean jarMastGenerateComplete() { |
| | | try{ |
| | | for (int[] ex : execute){ |
| | | try{ |
| | | WrkMastExecute wrkMastExecuteSou = new WrkMastExecute(); |
| | | wrkMastExecuteSou.setIoType(ex[0]); |
| | | wrkMastExecuteSou.setWrkSts(ex[1]); |
| | | wrkMastExecuteSou.setWrkType(1); |
| | | List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou); |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ |
| | | log.error("Jar任务完成===>行={}",4564); |
| | | BasJarMast jarMastByWrkNo = basJarMastService.getJarMastByWrkNo(wrkMastExecute.getWrkNo()); |
| | | jarMastByWrkNo.setStatus(jarMastByWrkNo.getStatusComplete()); |
| | | if (!basJarMastService.updateById(jarMastByWrkNo)){ |
| | | log.error("硫化区域分段任务完成异常,BasJarMast={},异常信息={}",JSON.toJSONString(jarMastByWrkNo),"更新basJarMast失败"); |
| | | } |
| | | wrkMastExecute.setWrkSts(wrkMastExecute.getWrkStsComplete()); |
| | | wrkMastExecute.setWrkType(2); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化区域分段任务完成异常,wrkMastExecute={},异常信息={}",JSON.toJSONString(wrkMastExecute),"更新wrkMastExecute失败"); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("硫化区域分段任务完成异常,execute={},异常信息={}",JSON.toJSONString(ex),e.getMessage()); |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("硫化区域分段任务完成异常,异常信息={}",e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务创建 //完成 |
| | | */ |
| | | public synchronized void jarWrkMastExecuteGenerate(Integer sign) { |
| | | try{ |
| | | boolean[] signExecute = new boolean[]{false,false}; |
| | | switch (sign){ |
| | | case 1: |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | signExecute = jarWrkMastExecuteGenerateJar(signExecute,sign);//硫化罐任务 |
| | | case 5: |
| | | signExecute = jarWrkMastExecuteGenerateBurial(signExecute, sign);//冷却槽取输送线 |
| | | default: |
| | | jarWrkMastExecuteGenerateSte(signExecute,sign);//小车移动 |
| | | } |
| | | if (!signExecute[0] && !signExecute[1]){ |
| | | //Ste移动 |
| | | jarMastMove(); |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("硫化区域分段任务创建异常,异常信息={}",e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | public synchronized boolean[] jarWrkMastExecuteGenerateJar(boolean[] signExecute,Integer sign) { |
| | | for (JarSlave jarSlave : slaveProperties.getJar()) { |
| | | int i = jarSlave.getId()>2? 1:0; |
| | | try{ |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | continue; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | continue; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | continue; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | continue; |
| | | } |
| | | |
| | | JarThread jarOtherThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getJarOtherId()); |
| | | JarProtocol jarOtherProtocol = jarOtherThread.getJarProtocol(); |
| | | if (jarOtherProtocol == null) { |
| | | continue; |
| | | } |
| | | // if (jarOtherProtocol.modeType != JarModeType.AUTO){ |
| | | // continue; |
| | | // } |
| | | |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | continue; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、右门关闭、 Other左门关闭 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | switch (sign){ |
| | | case 0: |
| | | case 1: |
| | | if (jarWrkMastExecuteGenerate1(jarSlave,sign)){ |
| | | signExecute[i] = true; |
| | | break;//开门任务 生成入硫化罐任务 |
| | | } |
| | | case 2: |
| | | if (jarWrkMastExecuteGenerate2(jarSlave,sign)){ |
| | | signExecute[i] = true; |
| | | break;//关进料门 |
| | | } |
| | | case 3: |
| | | if (jarWrkMastExecuteGenerate3(jarSlave,sign)){ |
| | | signExecute[i] = true; |
| | | break;//开出料门 |
| | | } |
| | | case 4: |
| | | if (jarWrkMastExecuteGenerate4(jarSlave,sign)){ |
| | | signExecute[i] = true; |
| | | break;//出硫化罐 ===》 入冷却槽 |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | } |
| | | return signExecute; |
| | | } |
| | | |
| | | public synchronized boolean[] jarWrkMastExecuteGenerateBurial(boolean[] signExecute,Integer sign) { |
| | | for (JarSlave jarSlave : slaveProperties.getJar()) { |
| | | if (jarSlave.getId()<5){ |
| | | continue; |
| | | } |
| | | try{ |
| | | if (signExecute[jarSlave.getId()-5]){ |
| | | continue; |
| | | } |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | signExecute[jarSlave.getId()-5] = true; |
| | | continue; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | signExecute[jarSlave.getId()-5] = true; |
| | | continue; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | signExecute[jarSlave.getId()-5] = true; |
| | | continue; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | continue; |
| | | } |
| | | |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | continue; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、右门关闭、 Other左门关闭 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0){ |
| | | if (jarWrkMastExecuteGenerate5(jarSlave,sign)){ |
| | | signExecute[jarSlave.getId()-5] = true; |
| | | //出硫化罐 ===》 入冷却槽 |
| | | } |
| | | return signExecute; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | } |
| | | return signExecute; |
| | | } |
| | | |
| | | public synchronized boolean[] jarWrkMastExecuteGenerateSte(boolean[] signExecute,Integer sign) { |
| | | for (JarSlave jarSlave : slaveProperties.getJar()) { |
| | | if (jarSlave.getId()<5){ |
| | | continue; |
| | | } |
| | | try{ |
| | | if (signExecute[jarSlave.getId()-5]){ |
| | | continue; |
| | | } |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | continue; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | continue; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | continue; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | continue; |
| | | } |
| | | |
| | | JarThread jarOtherThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getJarOtherId()); |
| | | JarProtocol jarOtherProtocol = jarOtherThread.getJarProtocol(); |
| | | if (jarOtherProtocol == null) { |
| | | continue; |
| | | } |
| | | // if (jarOtherProtocol.modeType != JarModeType.AUTO){ |
| | | // continue; |
| | | // } |
| | | |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | continue; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、右门关闭、 Other左门关闭 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | switch (sign){ |
| | | case 5: |
| | | if (jarWrkMastExecuteGenerate5(jarSlave,sign)){ |
| | | signExecute[jarSlave.getId()-5] = true; |
| | | break;//出硫化罐 ===》 入冷却槽 |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | } |
| | | return signExecute; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务创建 //完成 |
| | | * 开门任务 |
| | | * 生成入硫化罐任务 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerate1(JarSlave jarSlave,Integer sign) { |
| | | try{ |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | return false; |
| | | } |
| | | List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ |
| | | add(0); |
| | | add(2); |
| | | }}); |
| | | |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(jarSlave.getJarInSte().get(0).getSteNo(),1,SteStatusType.IDLE)){ |
| | | // return false; |
| | | // } |
| | | |
| | | for (BasJarMast basJarMast : basJarMastList){ |
| | | JarSlave.StaStn staStn = null; |
| | | for (JarSlave.StaStn staStn1 : jarSlave.getJarInSta()){ |
| | | if (staStn1.getStaNo().equals(basJarMast.getJarEnterStaNo())){ |
| | | staStn = staStn1; |
| | | } |
| | | } |
| | | if (Cools.isEmpty(staStn)){ |
| | | continue; |
| | | } |
| | | //检测站点状态 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, staStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(staStn.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo()==basJarMast.getWrkNo().intValue()){ |
| | | |
| | | //检测RGV状态 |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(staStn.getRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV.rgvBoolean(1)){ |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.statusType .equals(JarStatusType.WAITING2) || jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | continue; |
| | | } |
| | | JarThread jarOtherThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getJarOtherId()); |
| | | JarProtocol jarOtherProtocol = jarOtherThread.getJarProtocol(); |
| | | if (jarOtherProtocol == null) { |
| | | return false; |
| | | } |
| | | // if (jarOtherProtocol.modeType != JarModeType.AUTO){ |
| | | // continue; |
| | | // } |
| | | |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | //门作业 无 |
| | | //自动、空闲、右门关闭、 Other左门关闭 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | if (!jarProtocol.isLeftDoor() && basJarMast.getStatus()==0){ |
| | | //生成开门任务 OpenTheDoor |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvNo(),1,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast)); |
| | | } |
| | | return true; |
| | | } else if (jarProtocol.isLeftDoor()){ |
| | | //生成入硫化罐任务 |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvNo(),5,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast)); |
| | | } |
| | | return true; |
| | | } |
| | | // else if (jarProtocol.statusType == JarStatusType.IDLE && jarProtocol.isLeftDoor()){ |
| | | // log.error("JarWrkMastExecute任务创建===>执行异常===》硫化罐空闲但是门未关===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast)); |
| | | // } |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(staProtocolRGV)+";BasJarMast:"+JSON.toJSONString(basJarMast)); |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务创建 //完成 |
| | | * 关进料门 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerate2(JarSlave jarSlave,Integer sign) { |
| | | try{ |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | return false; |
| | | } |
| | | List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ |
| | | add(4); |
| | | }}); |
| | | if (basJarMastList.size() != 7){ |
| | | return false; |
| | | } |
| | | |
| | | BasJarMast basJarMastSign = basJarMastList.get(0); |
| | | if (Cools.isEmpty(basJarMastSign)){ |
| | | return false; |
| | | } |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(jarSlave.getJarInSte().get(0).getSteNo(),1,SteStatusType.IDLE)){ |
| | | // return false; |
| | | // } |
| | | |
| | | JarSlave.RgvStn rgvStn = jarSlave.getJarInRgv().get(0); |
| | | |
| | | if (jarWrkMastExecuteGenerateRgvStatus(rgvStn.getRgvNo(),rgvStn.getDevpPlcId(),1)){ |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | |
| | | if (jarProtocol.statusType .equals(JarStatusType.WAITING2) || jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (basJar.getJarCount()!=7){ |
| | | log.error("{}号硫化罐查询设备库存数异常!!!库存待入数:{}",jarProtocol.getJarNo(),basJar.getJarCount()); |
| | | return false; |
| | | } |
| | | |
| | | //门作业 无 |
| | | if (jarProtocol.isAutoing() && jarProtocol.statusType == JarStatusType.WAITING3 && jarProtocol.jarErr==0 |
| | | && jarProtocol.isRightDoor() && jarProtocol.isLeftDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | //关进料门 |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMastSign,basJar.getJarNo(),new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvNo(),2,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMastSign)); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(rgvStn)+";BasJarMast:"+JSON.toJSONString(basJarMastSign)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务创建 //完成 |
| | | * 开出料门 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerate3(JarSlave jarSlave,Integer sign) { |
| | | try{ |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | return false; |
| | | } |
| | | List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ |
| | | add(6); |
| | | }}); |
| | | if (basJarMastList.size() != 7){ |
| | | return false; |
| | | } |
| | | if (basJarMastService.selectJarMastOperation(jarSlave.getJarOtherId(),5)!=0){ |
| | | return false; |
| | | } |
| | | |
| | | BasJarMast basJarMastSign = basJarMastList.get(0); |
| | | if (Cools.isEmpty(basJarMastSign)){ |
| | | return false; |
| | | } |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(jarSlave.getJarInSte().get(0).getSteNo(),2,SteStatusType.IDLE)){ |
| | | // return false; |
| | | // } |
| | | |
| | | //判断RGV状态 |
| | | JarSlave.RgvStn rgvStn = jarSlave.getJarOutRgv().get(0); |
| | | |
| | | if (jarWrkMastExecuteGenerateRgvStatus(rgvStn.getRgvNo(),rgvStn.getDevpPlcId(),1)){ |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | |
| | | if (jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | //门作业 无 |
| | | if (jarProtocol.isAutoing() && jarProtocol.statusType == JarStatusType.WAITING2 && jarProtocol.jarErr==0 |
| | | && !jarProtocol.isLeftDoor() && !jarProtocol.isRightDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | //开出料门 |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMastSign,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),3,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMastSign)); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(rgvStn)+";BasJarMast:"+JSON.toJSONString(basJarMastSign)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务创建 //完成 |
| | | * 出硫化罐 ===》 入冷却槽 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerate4(JarSlave jarSlave,Integer sign) { |
| | | try{ |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | return false; |
| | | } |
| | | List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ |
| | | add(8); |
| | | }}); |
| | | if (basJarMastList.isEmpty()){ |
| | | return false; |
| | | } |
| | | |
| | | if (basJarMastService.selectJarMastOperation(jarSlave.getJarOtherId(),4)!=0){ |
| | | return false; |
| | | } |
| | | |
| | | BasJarMast jarMastByJarIdMin = basJarMastService.getJarMastByJarIdMin(jarSlave.getId(),8,8); |
| | | if (Cools.isEmpty(jarMastByJarIdMin)){ |
| | | return false; |
| | | } |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(jarSlave.getJarOutSte().get(0).getSteNo(),2,SteStatusType.IDLE)){ |
| | | // return false; |
| | | // } |
| | | |
| | | //判断RGV状态 |
| | | JarSlave.RgvStn rgvStn = jarSlave.getJarOutRgv().get(0); |
| | | |
| | | if (jarWrkMastExecuteGenerateRgvStatus(rgvStn.getRgvNo(),rgvStn.getDevpPlcId(),1)){ |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | |
| | | if (jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | //门作业 无 |
| | | // if (jarProtocol.isAutoing() && jarProtocol.statusType == JarStatusType.WAITING4 && jarProtocol.jarErr==0 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 |
| | | && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | //入冷却槽 |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByJarIdMin,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),6,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByJarIdMin)); |
| | | } |
| | | jarMastByJarIdMin.setStatus(jarMastByJarIdMin.getStatusComplete()); |
| | | |
| | | if (!basJarMastService.updateById(jarMastByJarIdMin)){ |
| | | log.error("JarWrkMastExecute任务创建===>jarMastByJarIdMin更新失败===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByJarIdMin)); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(rgvStn)+";BasJarMast:"+JSON.toJSONString(jarMastByJarIdMin)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务创建 //完成 |
| | | * 冷却完成上输送线 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerate5(JarSlave jarSlave,Integer sign) { |
| | | try{ |
| | | if (wrkMastExecuteService.getWrkMastExecuteByJarIdCount(jarSlave.getId())!=0){ |
| | | return false; |
| | | } |
| | | List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusListB(jarSlave.getId(), new ArrayList<Integer>() {{ |
| | | add(12);//冷却完成 |
| | | }}); |
| | | if (basJarMastList.isEmpty()){ |
| | | return false; |
| | | } |
| | | |
| | | if (basJarMastService.selectJarMastOperation(jarSlave.getJarOtherId(),6)!=0){ |
| | | return false; |
| | | } |
| | | |
| | | BasJarMast jarMastByJarIdMin = basJarMastService.getJarMastByJarIdMinB(jarSlave.getId(),12,12); |
| | | if (Cools.isEmpty(jarMastByJarIdMin)){ |
| | | return false; |
| | | } |
| | | // |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(jarSlave.getJarOutSte().get(0).getSteNo(),3,SteStatusType.IDLE)){ |
| | | // return false; |
| | | // } |
| | | |
| | | //判断RGV状态 |
| | | JarSlave.RgvStn rgvStn = jarSlave.getJarOutRgv().get(0); |
| | | |
| | | if (jarWrkMastExecuteGenerateRgvStatus(rgvStn.getRgvNo(),rgvStn.getDevpPlcId(),1)){ |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | //门作业 无 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0){ |
| | | //冷却完成上输送线 |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByJarIdMin,basJar.getBurial(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),9,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByJarIdMin)); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(rgvStn)+";BasJarMast:"+JSON.toJSONString(jarMastByJarIdMin)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 判断STE小车状态 //完成 |
| | | * 1:A面 进料面 |
| | | * 2:B面 出料面 |
| | | * 3:冷却槽B面 上输送线 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerateSteStatus(Integer steNo,Integer type,SteStatusType steStatusType,boolean chargeSign) { |
| | | try{ |
| | | //判断小车状态 |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); |
| | | if (steThread == null) { |
| | | return false; |
| | | } |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { |
| | | return false; |
| | | } |
| | | if (steProtocol.getMode() != (short)1) { |
| | | log.error(steNo + "号小车离线,无法操作"); |
| | | return false; |
| | | } |
| | | if (steProtocol.getChargeStatus()!=0){ |
| | | log.error(steNo + "号小车在充电,等待...."); |
| | | return false; |
| | | } |
| | | if (steProtocol.getCharge()<31.0F && chargeSign){ |
| | | log.error(steNo + "号小车当前电量过低,准备充电...当前电量"+steProtocol.getCharge().toString()); |
| | | return false; |
| | | } |
| | | if (!steProtocol.getStatusType().equals(steStatusType)) { |
| | | log.error(steNo + "号小车状态不是"+JSON.toJSONString(steStatusType)+",等待...."); |
| | | return false; |
| | | } |
| | | switch (type){ |
| | | case 1: |
| | | if (!steProtocol.getLocaType().equals(SteLocaType.POINT20)) { |
| | | log.error(steNo + "号小车不在A面平移车,无法操作"); |
| | | return false; |
| | | } |
| | | break; |
| | | case 2: |
| | | if (!steProtocol.getLocaType().equals(SteLocaType.POINT23)) { |
| | | log.error(steNo + "号小车不在B面平移车,无法操作"); |
| | | return false; |
| | | } |
| | | break; |
| | | case 3: |
| | | if (!steProtocol.getLocaType().equals(SteLocaType.POINT26) && !steProtocol.getLocaType().equals(SteLocaType.POINT25)) { |
| | | log.error(steNo + "号小车不在水槽B端,无法操作"); |
| | | return false; |
| | | } |
| | | break; |
| | | default: return false; |
| | | } |
| | | return true; |
| | | } catch (Exception e){ |
| | | log.error("{}号小车状态判断状态异常,异常原因={}",steNo,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public synchronized boolean jarWrkMastExecuteGenerateSteStatusCharge(Integer steNo,Integer type,SteStatusType steStatusType,boolean chargeSign) { |
| | | try{ |
| | | //判断小车状态 |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); |
| | | if (steThread == null) { |
| | | return false; |
| | | } |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { |
| | | return false; |
| | | } |
| | | if (steProtocol.getMode() != (short)1) { |
| | | log.error(steNo + "号小车离线,无法操作"); |
| | | return false; |
| | | } |
| | | if (steProtocol.getCharge()<31.0F && chargeSign){ |
| | | log.error(steNo + "号小车当前电量过低,准备充电...当前电量"+steProtocol.getCharge().toString()); |
| | | return false; |
| | | } |
| | | if (!steProtocol.getStatusType().equals(steStatusType)) { |
| | | log.error(steNo + "号小车状态不是"+JSON.toJSONString(steStatusType)+",等待...."); |
| | | return false; |
| | | } |
| | | switch (type){ |
| | | case 1: |
| | | if (!steProtocol.getLocaType().equals(SteLocaType.POINT20)) { |
| | | log.error(steNo + "号小车不在A面平移车,无法操作"); |
| | | return false; |
| | | } |
| | | break; |
| | | case 2: |
| | | if (!steProtocol.getLocaType().equals(SteLocaType.POINT23)) { |
| | | log.error(steNo + "号小车不在B面平移车,无法操作"); |
| | | return false; |
| | | } |
| | | break; |
| | | case 3: |
| | | if (!steProtocol.getLocaType().equals(SteLocaType.POINT26) && !steProtocol.getLocaType().equals(SteLocaType.POINT25)) { |
| | | log.error(steNo + "号小车不在水槽B端,无法操作"); |
| | | return false; |
| | | } |
| | | break; |
| | | default: return false; |
| | | } |
| | | return true; |
| | | } catch (Exception e){ |
| | | log.error("{}号小车状态判断状态异常,异常原因={}",steNo,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * 判断RGV小车状态 //完成 |
| | | * RGV1;//小车无货空闲 |
| | | * RGV2;//小车输送线取货到位 |
| | | * RGV3;//小车运行中 |
| | | * RGV3;//小车运行中 |
| | | * RGV4;//小车改左侧货物目标站 取1(左)货物 |
| | | * RGV5;//小车改右侧货物目标站 取2(右)货物 |
| | | * RGV6;//上位机清除平移车资料 |
| | | * */ |
| | | public synchronized boolean jarWrkMastExecuteGenerateRgvStatus(Integer rgvNo,Integer rgvPlcId,Integer type) { |
| | | try{ |
| | | //检测RGV状态 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvPlcId); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(rgvNo); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | return staProtocolRGV.rgvBoolean(type); |
| | | } catch (Exception e){ |
| | | log.error("{}号RGV状态判断状态异常,异常原因={}",rgvNo,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务创建===>执行 //完成 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerateExecute(BasJar basJar,BasJarMast basJarMast,Integer id,int[] digit) { |
| | | try { |
| | | WrkMastExecute wrkMastExecute = new WrkMastExecute(basJarMast); |
| | | wrkMastExecute.setJarId(id); |
| | | wrkMastExecute.setSteId(digit[0]);//穿梭板ID |
| | | wrkMastExecute.setRgvId(basJar.getEnterRgvNo());//RGV ID enter |
| | | wrkMastExecute.setRgvEndId(basJar.getOutRgvNo());//RGV ID out |
| | | wrkMastExecute.setIoType(digit[2]);//任务类型 0: 未知 1: 开进料门 2: 关进料门 3: 开出料门 4: 关出料门 5: 入硫化罐 6: 入冷却槽 7: 穿梭车进冷却槽 8: 穿梭车离开冷却槽 9: 出冷却槽 10:A=>B 11:B=>A 100:小车充电任务 |
| | | wrkMastExecute.setType(digit[3]);//设备 0: 未知 1: 硫化罐 2: 冷却槽 3: 硫化罐==>冷却槽 |
| | | return wrkMastExecuteService.insert(wrkMastExecute); |
| | | } catch (Exception e) { |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常原因:"+e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务创建===>执行 //完成 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerateExecuteMove(BasJar basJar,BasJarMast basJarMast,Integer id,int[] digit) { |
| | | try { |
| | | WrkMastExecute wrkMastExecute = new WrkMastExecute(basJarMast); |
| | | wrkMastExecute.setJarId(id); |
| | | wrkMastExecute.setSteId(digit[0]);//穿梭板ID |
| | | wrkMastExecute.setRgvId(basJar.getEnterRgvNo());//RGV ID enter |
| | | wrkMastExecute.setRgvEndId(basJar.getOutRgvNo());//RGV ID out |
| | | wrkMastExecute.setIoType(digit[2]);//任务类型 0: 未知 1: 开进料门 2: 关进料门 3: 开出料门 4: 关出料门 5: 入硫化罐 6: 入冷却槽 7: 穿梭车进冷却槽 8: 穿梭车离开冷却槽 9: 出冷却槽 10:A=>B 11:B=>A |
| | | wrkMastExecute.setType(digit[3]);//设备 0: 未知 1: 硫化罐 2: 冷却槽 3: 硫化罐==>冷却槽 |
| | | return wrkMastExecuteService.insert(wrkMastExecute); |
| | | } catch (Exception e) { |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常原因:"+e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * JarWrkMastExecute任务创建==>下发 |
| | | * Action |
| | | * */ |
| | | public synchronized void jarWrkMastExecuteAction(Integer sign,Integer sign2) { |
| | | if (sign2==0){ |
| | | jarWrkMastExecuteActionOne(sign); |
| | | } else if (sign2 == 1){ |
| | | jarWrkMastExecuteActionTwo(sign); |
| | | } else if (sign2 == 2){ |
| | | jarWrkMastExecuteActionThree(sign); |
| | | } |
| | | } |
| | | public synchronized void jarWrkMastExecuteActionOne(Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, null,0); |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ |
| | | if (wrkMastExecute.getWrkSts()!=0){ |
| | | continue; |
| | | } |
| | | /* |
| | | * 任务类型 0: 未知 |
| | | * 1: 开进料门 2: 关进料门 3: 开出料门 4: 关出料门 |
| | | * 5: 入硫化罐 |
| | | * 6: 入冷却槽 |
| | | * 7: 穿梭车进冷却槽 8: 穿梭车离开冷却槽 |
| | | * 9: 出冷却槽 |
| | | * 10:A=>B 11:B=>A |
| | | * 100:充电任务 |
| | | * */ |
| | | log.error("JarWrkMastExecute任务创建==>下发===>行={}",5326); |
| | | switch (wrkMastExecute.getIoType()){ |
| | | case 1://1: 开进料门 |
| | | case 3://3: 开出料门 |
| | | if (jarWrkMastExecuteActionExecute1(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | continue; |
| | | case 2: |
| | | case 4: |
| | | if (jarWrkMastExecuteActionExecute2(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | continue; |
| | | case 5: |
| | | if (jarWrkMastExecuteActionExecute5(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | continue; |
| | | case 6: |
| | | if (jarWrkMastExecuteActionExecute6(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | continue; |
| | | case 7: |
| | | case 8: |
| | | if (jarWrkMastExecuteActionExecute7(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | continue; |
| | | case 9: |
| | | if (jarWrkMastExecuteActionExecute9(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | continue; |
| | | case 10: |
| | | case 11: |
| | | if (jarWrkMastExecuteActionExecute10(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | continue; |
| | | case 100: |
| | | if (jarWrkMastExecuteActionExecute100(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("JarWrkMastExecute任务创建===>Action==>下发"+e.getMessage()); |
| | | } |
| | | |
| | | } |
| | | |
| | | /* |
| | | * JarWrkMastExecute任务创建==>下发 |
| | | * Action |
| | | * */ |
| | | public synchronized void jarWrkMastExecuteActionTwo(Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, null,2); |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ |
| | | /* |
| | | * 任务类型 0: 未知 |
| | | * 1: 开进料门 2: 关进料门 3: 开出料门 4: 关出料门 |
| | | * 5: 入硫化罐 |
| | | * 6: 入冷却槽 |
| | | * 7: 穿梭车进冷却槽 8: 穿梭车离开冷却槽 |
| | | * 9: 出冷却槽 |
| | | * 10:A=>B 11:B=>A |
| | | * */ |
| | | switch (wrkMastExecute.getIoType()){ |
| | | case 1://1: 开进料门 |
| | | case 3://3: 开出料门 |
| | | if (jarWrkMastExecuteActionExecute1(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | case 2: |
| | | case 4: |
| | | if (jarWrkMastExecuteActionExecute2(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | case 5: |
| | | if (jarWrkMastExecuteActionExecute5(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | case 6: |
| | | if (jarWrkMastExecuteActionExecute6(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | case 7: |
| | | case 8: |
| | | if (jarWrkMastExecuteActionExecute7(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | case 9: |
| | | if (jarWrkMastExecuteActionExecute9Two(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | case 10: |
| | | case 11: |
| | | if (jarWrkMastExecuteActionExecute10(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("JarWrkMastExecute任务创建===>Action==>下发"+e.getMessage()); |
| | | } |
| | | |
| | | } |
| | | |
| | | /* |
| | | * JarWrkMastExecute任务创建==>下发 |
| | | * Action |
| | | * */ |
| | | public synchronized void jarWrkMastExecuteActionThree(Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, null,4); |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ |
| | | /* |
| | | * 任务类型 0: 未知 |
| | | * 1: 开进料门 2: 关进料门 3: 开出料门 4: 关出料门 |
| | | * 5: 入硫化罐 |
| | | * 6: 入冷却槽 |
| | | * 7: 穿梭车进冷却槽 8: 穿梭车离开冷却槽 |
| | | * 9: 出冷却槽 |
| | | * 10:A=>B 11:B=>A |
| | | * */ |
| | | switch (wrkMastExecute.getIoType()){ |
| | | case 5: |
| | | if (jarWrkMastExecuteActionExecute5Three(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | case 6: |
| | | if (jarWrkMastExecuteActionExecute6Three(wrkMastExecute,sign)){ |
| | | break; |
| | | } |
| | | return; |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("JarWrkMastExecute任务创建===>Action==>下发"+e.getMessage()); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 1、3开进料门 |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute1(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId()); |
| | | if (wrkMastExecuteByJarNo.size()!=1 |
| | | || !wrkMastExecuteByJarNo.get(0).getIoType().equals(wrkMastExecute.getIoType()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkSts().equals(wrkMastExecute.getWrkSts()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo()) ){ |
| | | return false; |
| | | } |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){ |
| | | // return false; |
| | | // } |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | } |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){ |
| | | if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、 进料们关闭需打开 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | log.error("1、3开进料门==>任务下发===>行={}",5546); |
| | | if (!jarProtocol.isLeftDoor() && !jarProtocol.isRightDoor()){ |
| | | if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(2); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else { |
| | | //直接开门/关门 |
| | | if (!jarDoorTake(wrkMastExecute,JarTaskModeType.OPEN_THE_DOOR)){ |
| | | log.error("硫化罐Jar命令下发失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | }else if (jarProtocol.isLeftDoor() && jarProtocol.isRightDoor()){ |
| | | //直接完成 |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 2、4:关进料门 |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute2(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId()); |
| | | if (wrkMastExecuteByJarNo.size()!=1 |
| | | || !wrkMastExecuteByJarNo.get(0).getIoType().equals(wrkMastExecute.getIoType()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkSts().equals(wrkMastExecute.getWrkSts()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo()) ){ |
| | | return false; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.statusType .equals(JarStatusType.WAITING2) || jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){ |
| | | // return false; |
| | | // } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | } |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){ |
| | | if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、 进料们打开需关闭 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | log.error("2、4:关门==>任务下发===>行={}",5667); |
| | | if (jarProtocol.isLeftDoor() && jarProtocol.isRightDoor()){ |
| | | if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(2); |
| | | |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else { |
| | | //直接关门 |
| | | if (!jarDoorTake(wrkMastExecute,JarTaskModeType.CLOSE_THE_DOOR)){ |
| | | log.error("硫化罐Jar命令下发失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | } else if (!jarProtocol.isLeftDoor() && !jarProtocol.isRightDoor()){ |
| | | //直接完成 |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 5:入硫化罐 |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute5(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId()); |
| | | if (wrkMastExecuteByJarNo.size()!=1 |
| | | || !wrkMastExecuteByJarNo.get(0).getIoType().equals(wrkMastExecute.getIoType()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkSts().equals(wrkMastExecute.getWrkSts()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo()) ){ |
| | | return false; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.statusType .equals(JarStatusType.WAITING2) || jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | } |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } |
| | | if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){ |
| | | if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、 进料们打开需关闭 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | log.error("5:入硫化罐==>任务下发===>行={}",5667); |
| | | //判断小车状态 //入硫化罐小车可临时屏蔽 |
| | | if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1,SteStatusType.IDLE,true)){ |
| | | return false; |
| | | } |
| | | if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){ |
| | | |
| | | //调车 == > 取货 |
| | | if (!jarRgvGetTake(wrkMastExecute |
| | | ,SteAndJarUtil.getRgvStaRow(wrkMastExecute.getJarEnterStaNo())==1 |
| | | ,SteAndJarUtil.getRgvStaRow(wrkMastExecute.getJarEnterStaNo())==3)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | return true; |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else { |
| | | //调车 == > endRow |
| | | if (!jarRgvMoveTake(wrkMastExecute,SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId()))){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(2); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * io_type==>5:入硫化罐 : wrkSts ==>4:rgv取货完成 |
| | | * =====>wrkSts ==>5:Ste穿梭版入硫化罐(清楚RGV资料) |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute5Three(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecute); |
| | | if (wrkMastExecuteByJarNo.size()!=1 || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo())){ |
| | | return false; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.statusType .equals(JarStatusType.WAITING2) || jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){ |
| | | // return false; |
| | | // } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | } |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (staProtocolRGV.rgvBoolean(2) && staProtocolRGVOther.rgvBoolean(1)){//临时 |
| | | // if (staProtocolRGV.rgvBoolean(2)){ |
| | | if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、 进料们打开需关闭 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | log.error("io_type==>5:入硫化罐 : wrkSts ==>4:rgv取货完成==>任务下发===>行={}",5898); |
| | | |
| | | if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){ |
| | | //判断小车状态 |
| | | if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1,SteStatusType.IDLE,true)){ |
| | | return false; |
| | | } |
| | | //调车 == > 取货 |
| | | if (!jarSteTake(wrkMastExecute,SteLocaType.POINT20.id,SteLocaType.POINT22.id,SteTaskModeType.STE_WFFH_13,false,wrkMastExecute.getJarId())){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(5); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else { |
| | | //调车 == > endRow |
| | | if (!jarRgvMoveTake(wrkMastExecute,SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId()))){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 6:入冷却槽 |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute6(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId()); |
| | | if (wrkMastExecuteByJarNo.size()!=1 |
| | | || !wrkMastExecuteByJarNo.get(0).getIoType().equals(wrkMastExecute.getIoType()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkSts().equals(wrkMastExecute.getWrkSts()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo()) ){ |
| | | return false; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | } |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){ //临时 |
| | | // if ( staProtocolRGVOther.rgvBoolean(1)){ |
| | | if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | log.error("6:入冷却槽==>任务下发===>行={}",6002); |
| | | //判断小车状态 |
| | | if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),2,SteStatusType.IDLE,true)){ |
| | | return false; |
| | | } |
| | | |
| | | if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){ |
| | | |
| | | //调车 == > 取货 |
| | | if (!jarSteTake(wrkMastExecute,SteLocaType.POINT23.id,SteLocaType.POINT21.id,SteTaskModeType.STE_WFQH_12,false,wrkMastExecute.getJarId())){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else { |
| | | //调车 == > endRow |
| | | if (!jarRgvMoveTake(wrkMastExecute,SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId()))){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(2); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 6:入冷却槽 |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute6Three(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecute); |
| | | if (wrkMastExecuteByJarNo.size()!=1 || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo())){ |
| | | return false; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | |
| | | if (jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){ |
| | | // return false; |
| | | // } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | } |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){ //临时 |
| | | // if (staProtocolRGVOther.rgvBoolean(1)){ |
| | | if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0){ |
| | | log.error("6:入冷却槽 Three==>任务下发===>行={}",6115); |
| | | |
| | | if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){ |
| | | //判断小车状态 |
| | | if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),2,SteStatusType.WAITING2,false)){ |
| | | return false; |
| | | } |
| | | //调车 == > 取货 |
| | | if (!jarSteTake(wrkMastExecute,SteLocaType.POINT23.id,SteLocaType.POINT25.id,SteTaskModeType.STE_WFFH_13,false,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(5); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else { |
| | | //调车 == > endRow |
| | | if (!jarRgvMoveTake(wrkMastExecute,1)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | // wrkMastExecute.setWrkType(1); |
| | | // wrkMastExecute.setWrkSts(2); |
| | | // if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | // log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | // wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | // } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 7:穿梭车进冷却槽 7 B=>C |
| | | * 8:穿梭车离开冷却槽 8 C=>B |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute7(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecute); |
| | | if (wrkMastExecuteByJarNo.size()!=1 || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo())){ |
| | | return false; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThreadOther = (JarThread) SlaveConnection.get(SlaveType.Jar, SteAndJarUtil.getRgvJarNo(wrkMastExecute.getJarId())); |
| | | JarProtocol jarProtocolOther = jarThreadOther.getJarProtocol(); |
| | | if (jarProtocolOther == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocolOther.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | |
| | | BasJar basJarOther = basJarMapper.selectById(jarProtocolOther.getJarNo()); |
| | | if (Cools.isEmpty(basJarOther)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocolOther.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){ |
| | | // return false; |
| | | // } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | } |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){ |
| | | if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0 |
| | | && jarProtocolOther.isLeftDoor() && jarProtocolOther.isRightDoor() |
| | | ){ |
| | | log.error("7:穿梭车进冷却槽 7 B=>C//8:穿梭车离开冷却槽 8 C=>B Three==>任务下发===>行={}",6245); |
| | | if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocolOther.getJarNo())){ |
| | | //判断小车状态 |
| | | if (wrkMastExecute.getIoType()==7){ //7 B=>C |
| | | if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),2,SteStatusType.IDLE,true)){ |
| | | //调车 == > 移动 |
| | | if (jarSteTake(wrkMastExecute,SteLocaType.POINT23.id,SteLocaType.POINT26.id,SteTaskModeType.STE_MOVE_14,false,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),3,SteStatusType.IDLE,false)){ |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | } else { //8 C=>B |
| | | if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),3,SteStatusType.IDLE,false)){ |
| | | //调车 == > 移动 |
| | | if (!jarSteTake(wrkMastExecute,SteLocaType.POINT26.id,SteLocaType.POINT23.id,SteTaskModeType.STE_MOVE_14,false,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),2,SteStatusType.IDLE,false)){ |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | //调车 == > endRow |
| | | if (!jarRgvMoveTake(wrkMastExecute,SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId()))){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(2); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 9:出冷却槽 |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute9(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId()); |
| | | if (wrkMastExecuteByJarNo.size()!=1 |
| | | || !wrkMastExecuteByJarNo.get(0).getIoType().equals(wrkMastExecute.getIoType()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkSts().equals(wrkMastExecute.getWrkSts()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo()) ){ |
| | | return false; |
| | | } |
| | | |
| | | // // 获取硫化罐信息 |
| | | // JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | // JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | // if (jarProtocol == null) { |
| | | // return false; |
| | | // } |
| | | // if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | // return false; |
| | | // } |
| | | // if (jarProtocol.getJarTemperature()>50){ |
| | | // log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | // return false; |
| | | // } |
| | | BasJar basJar = basJarMapper.selectById(wrkMastExecute.getJarId()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号冷却槽查询设备档案无信息!!!",wrkMastExecute.getJarId()); |
| | | return false; |
| | | } |
| | | |
| | | // // 获取硫化罐信息 |
| | | // JarThread jarThreadOther = (JarThread) SlaveConnection.get(SlaveType.Jar, SteAndJarUtil.getRgvJarNo(wrkMastExecute.getJarId())); |
| | | // JarProtocol jarProtocolOther = jarThreadOther.getJarProtocol(); |
| | | // if (jarProtocolOther == null) { |
| | | // return false; |
| | | // } |
| | | // if (jarProtocolOther.modeType != JarModeType.AUTO){ |
| | | // return false; |
| | | // } |
| | | // |
| | | // BasJar basJarOther = basJarMapper.selectByJarNo(jarProtocolOther.getJarNo()); |
| | | // if (Cools.isEmpty(basJarOther)){ |
| | | // log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocolOther.getJarNo()); |
| | | // return false; |
| | | // } |
| | | |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){ |
| | | // return false; |
| | | // } |
| | | // |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocol = devpThread.getStation().get(basJar.getStaNo()); |
| | | if (staProtocol == null) { |
| | | return false; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol == null) { |
| | | return false; |
| | | } |
| | | if (staProtocol.getWorkNo()!=0 || !staProtocol.isAutoing() || staProtocol.isLoading()){ |
| | | return false; |
| | | } |
| | | // |
| | | // StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | // if (staProtocolRGVOther == null) { |
| | | // return false; |
| | | // } else { |
| | | // staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | // } |
| | | // if (staProtocolRGVOther == null) { |
| | | // return false; |
| | | // } |
| | | // |
| | | // if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){ |
| | | // if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | // //移走 == > 2 |
| | | // if (jarRgvTake(wrkMastExecute,2)){ |
| | | // log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | // wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | // } |
| | | // return true; |
| | | // } |
| | | //门作业 无 |
| | | //自动、空闲、 |
| | | // if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() |
| | | // && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0 |
| | | // ){ |
| | | //判断小车状态 |
| | | if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),3,SteStatusType.IDLE,true)){ |
| | | log.error("9:出冷却槽==>任务下发===>行={}",6410); |
| | | |
| | | //调车 == > 取货 |
| | | if (!jarSteTake(wrkMastExecute,SteLocaType.POINT26.id,SteLocaType.POINT24.id,SteTaskModeType.STE_WFQH_12,false,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},冷却槽数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(basJar),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(1); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},冷却槽数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(basJar),sign); |
| | | } |
| | | } |
| | | return true; |
| | | // } |
| | | // return false; |
| | | // } else { |
| | | // log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | // return false; |
| | | // } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 9:出冷却槽 |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute9Two(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.getWrkMastExecuteByJarNo(wrkMastExecute.getJarId()); |
| | | if (wrkMastExecuteByJarNo.size()!=1 |
| | | || !wrkMastExecuteByJarNo.get(0).getIoType().equals(wrkMastExecute.getIoType()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkSts().equals(wrkMastExecute.getWrkSts()) |
| | | || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo()) ){ |
| | | return false; |
| | | } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocol = devpThread.getStation().get(wrkMastExecute.getJarOutStaNo()); |
| | | if (staProtocol == null) { |
| | | return false; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol == null) { |
| | | return false; |
| | | } |
| | | if (staProtocol.getWorkNo()!=0 || !staProtocol.isAutoing() || !staProtocol.isLoading()){ |
| | | return false; |
| | | } |
| | | |
| | | //判断STE小车状态 |
| | | if (jarWrkMastExecuteGenerateSteStatus(wrkMastExecute.getSteId(),3,SteStatusType.IDLE,false)){ |
| | | log.error("9:出冷却槽Two==>任务下发===>行={}",6468); |
| | | // 下发站点信息 |
| | | staProtocol.setWorkNo(wrkMastExecute.getWrkNo().intValue()); |
| | | staProtocol.setStaNo(wrkMastExecute.getOutStaNo()); |
| | | if (!MessageQueue.offer(SlaveType.Devp, 2, new Task(2, staProtocol))) { |
| | | return false; |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("输送线出库目标站命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},放货站点数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(staProtocol),sign); |
| | | } |
| | | } |
| | | return true; |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 10:A=>B\11:B=>A |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute10(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | List<WrkMastExecute> wrkMastExecuteByJarNo = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecute); |
| | | if (wrkMastExecuteByJarNo.size()!=1 || !wrkMastExecuteByJarNo.get(0).getWrkNo().equals(wrkMastExecute.getWrkNo())){ |
| | | return false; |
| | | } |
| | | |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, wrkMastExecute.getJarId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | return false; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | return false; |
| | | } |
| | | |
| | | if (jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | log.error("{}号硫化罐查询设备正在硫化中,任务异常!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | |
| | | // //判断小车状态 |
| | | // if (!jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1)){ |
| | | // return false; |
| | | // } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVOther = devpThread.getStation().get(basJar.getOutRgvNo()); |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGVOther = staProtocolRGVOther.clone(); |
| | | } |
| | | if (staProtocolRGVOther == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (staProtocolRGV.rgvBoolean(1) && staProtocolRGVOther.rgvBoolean(1)){ //临时 |
| | | // if ( staProtocolRGVOther.rgvBoolean(1)){ |
| | | if (staProtocolRGV.getNowRow() != staProtocolRGVOther.getNowRow()){ |
| | | //移走 == > 2 |
| | | if (!jarRgvMoveTake(wrkMastExecute,2)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | //门作业 无 |
| | | //自动、空闲、 |
| | | if (jarProtocol.isAutoing() && jarProtocol.jarErr==0 && jarProtocol.isLeftDoor() && jarProtocol.isRightDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0 |
| | | ){ |
| | | log.error("10:A=>B\\11:B=>A==>任务下发===>行={}",6558); |
| | | if (SteAndJarUtil.steAndJarNowRow(staProtocolRGV.getNowRow() , jarProtocol.getJarNo())){ |
| | | //判断小车状态 |
| | | if (wrkMastExecute.getIoType()==10){//10:A=>B |
| | | if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1,SteStatusType.IDLE,true)){ |
| | | //调车 == > 移动 |
| | | if (!jarSteTake(wrkMastExecute,SteLocaType.POINT20.id,SteLocaType.POINT23.id,SteTaskModeType.STE_MOVE_14,false,wrkMastExecute.getJarId())){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),2,SteStatusType.IDLE,false)){ |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | } else {//11:B=>A |
| | | if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),2,SteStatusType.IDLE,false)){ |
| | | //调车 == > 移动 |
| | | if (!jarSteTake(wrkMastExecute,SteLocaType.POINT23.id,SteLocaType.POINT20.id,SteTaskModeType.STE_MOVE_14,false,wrkMastExecute.getJarId())){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(3); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } else if (jarWrkMastExecuteGenerateSteStatus(basJar.getEnterSteNo(),1,SteStatusType.IDLE,false)){ |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | //调车 == > endRow |
| | | if (!jarRgvMoveTake(wrkMastExecute,SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId()))){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(2); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("硫化罐Jar命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(jarProtocol),sign); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } else { |
| | | log.error("jarWrkMastExecuteActionExecute1===>执行异常===》RGV不满足条件,等待===》异常数据:BasJar:"+ JSON.toJSONString(basJar.getEnterRgvNo())+";WrkMastExecute:"+JSON.toJSONString(wrkMastExecute)); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("jarWrkMastExecuteActionExecute1任务执行下发异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务==>下发 //完成 |
| | | * 100:充电任务 |
| | | * 任务下发 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteActionExecute100(WrkMastExecute wrkMastExecute,Integer sign) { |
| | | try{ |
| | | // 获取硫化罐信息 |
| | | BasJar basJar = basJarMapper.selectById(wrkMastExecute.getJarId()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",wrkMastExecute.getJarId()); |
| | | return false; |
| | | } |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(basJar.getEnterRgvNo()); |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (staProtocolRGV.rgvBoolean(1) || staProtocolRGV.rgvBoolean(2)){ |
| | | //门作业 无 |
| | | //自动、空闲、 |
| | | log.error("100:充电任务==>任务下发===>行={}",6899); |
| | | //判断小车状态 |
| | | if (!jarWrkMastExecuteGenerateSteStatusCharge(basJar.getEnterSteNo(),1,SteStatusType.IDLE,false)){ |
| | | return false; |
| | | } |
| | | //调车 == > 取货 |
| | | if (!jarSteTake(wrkMastExecute,SteLocaType.POINT20.id,SteLocaType.POINT20.id,SteTaskModeType.START_CHARGE,false,wrkMastExecute.getJarId())){ |
| | | log.error("穿梭板Ste充电命令下发失败,ste号={},任务数据={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute)); |
| | | } |
| | | wrkMastExecute.setWrkType(1); |
| | | wrkMastExecute.setWrkSts(99); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭板Ste充电命令下发失败===>更新wrkMastExecute失败,ste号={},任务数据={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute)); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } catch (Exception e){ |
| | | log.error("穿梭板Ste充电命令下发失败,异常==》wrkMastExecute={},异常原因={}",wrkMastExecute,e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * Rgv 动作 移动 |
| | | * */ |
| | | public synchronized boolean jarRgvMoveTake(WrkMastExecute wrkMastExecute,Integer endRow){ |
| | | try { |
| | | StaProtocol staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(wrkMastExecute.getRgvId()); |
| | | staProtocol.setEndRow(endRow.shortValue()); |
| | | // 下发站点信息 |
| | | if (!MessageQueue.offer(SlaveType.Devp, 2, new Task(9, staProtocol))) { |
| | | log.error("平衡车Rgv命令下发失败,堆垛机号={},任务数据={},下发数据={}", wrkMastExecute.getRgvId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocol)); |
| | | return false; |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("平衡车Rgv命令下发失败,Rgv号={},任务数据={},endRow={}", wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(endRow)); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * Rgv 动作 取货 |
| | | * */ |
| | | public synchronized boolean jarRgvGetTake(WrkMastExecute wrkMastExecute,boolean RGV4,boolean RGV5){ |
| | | try { |
| | | StaProtocol staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(wrkMastExecute.getRgvId()); |
| | | staProtocol.setRGV4(RGV4); |
| | | staProtocol.setRGV5(RGV5); |
| | | // 下发站点信息 |
| | | if (!MessageQueue.offer(SlaveType.Devp, 2, new Task(10, staProtocol))) { |
| | | log.error("平衡车Rgv命令下发失败,堆垛机号={},任务数据={},下发数据={}", wrkMastExecute.getRgvId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocol)); |
| | | return false; |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("平衡车Rgv命令下发失败,Rgv号={},任务数据={},RGV4={},RGV5={}", wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(RGV4), JSON.toJSON(RGV5)); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * Rgv 动作 取货完成复位 |
| | | * */ |
| | | public synchronized boolean jarRgvGetFuTake(WrkMastExecute wrkMastExecute,boolean RGV6){ |
| | | try { |
| | | StaProtocol staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(wrkMastExecute.getRgvId()); |
| | | staProtocol.setRGV6(RGV6); |
| | | // 下发站点信息 |
| | | if (!MessageQueue.offer(SlaveType.Devp, 2, new Task(11, staProtocol))) { |
| | | log.error("平衡车Rgv命令下发失败,堆垛机号={},任务数据={},下发数据={}", wrkMastExecute.getRgvId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocol)); |
| | | return false; |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("平衡车Rgv命令下发失败,Rgv号={},任务数据={},RGV6={}", wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(RGV6)); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * Ste 动作 |
| | | * */ |
| | | public synchronized boolean jarSteTake(WrkMastExecute wrkMastExecute,Integer startLoad,Integer endLoad,SteTaskModeType steTaskModeType,boolean complete,Integer siteId){ |
| | | try { |
| | | SteCommand steCommand = new SteCommand(); |
| | | steCommand.setTaskNo(wrkMastExecute.getWrkNo().intValue()); |
| | | steCommand.setSteNo(wrkMastExecute.getSteId()); |
| | | steCommand.setStartLoad(startLoad); |
| | | steCommand.setEndLoad(endLoad); |
| | | steCommand.setTaskModeType(steTaskModeType); |
| | | steCommand.setComplete(complete); |
| | | if (!complete){ |
| | | steCommand.setTaskMode(steTaskModeType.id.shortValue()); |
| | | } |
| | | steCommand.setJarNo(siteId.shortValue()); |
| | | if (!MessageQueue.offer(SlaveType.Ste, steCommand.getSteNo(), new Task(2, steCommand))) { |
| | | log.error("穿梭车Ste命令下发失败,堆垛机号={},任务数据={},下发数据={},complete={}", steCommand.getSteNo(), JSON.toJSON(wrkMastExecute), JSON.toJSON(steCommand),complete); |
| | | return false; |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("穿梭车Ste命令下发失败,堆垛机号={},任务数据={},complete={}", wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(complete)); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | | * Jar 动作 |
| | | * */ |
| | | public synchronized boolean jarDoorTake(WrkMastExecute wrkMastExecute,JarTaskModeType jarTaskModeType){ |
| | | try{ |
| | | JarCommand jarCommand = new JarCommand(); |
| | | jarCommand.setJarNo(wrkMastExecute.getJarId()); |
| | | jarCommand.setTaskModeType(jarTaskModeType); |
| | | if (!MessageQueue.offer(SlaveType.Jar, jarCommand.getJarNo(), new Task(2, jarCommand))) { |
| | | log.error("硫化罐Jar命令下发失败,堆垛机号={},任务数据={},下发数据={}", jarCommand.getJarNo(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarCommand)); |
| | | return false; |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("硫化罐Jar命令下发失败,堆垛机号={},任务数据={},下发数据={}", wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarTaskModeType)); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务完成 //完成 |
| | | */ |
| | | public synchronized void jarWrkMastExecuteGenerateComplete(Integer sign) { |
| | | try{ |
| | | switch (sign){ |
| | | case 1: |
| | | case 5: |
| | | case 9: |
| | | if (jarWrkMastExecuteGenerateSteComplete(sign)){ |
| | | break; |
| | | } |
| | | case 2: |
| | | case 6: |
| | | case 10: |
| | | if (jarWrkMastExecuteGenerateJarComplete(sign)){ |
| | | break; |
| | | } |
| | | case 3: |
| | | case 7: |
| | | case 11: |
| | | if (jarWrkMastExecuteGenerateRgvComplete1(sign)){ |
| | | break; |
| | | } |
| | | case 4: |
| | | case 8: |
| | | case 12: |
| | | if (jarWrkMastExecuteGenerateRgvComplete2(sign)){ |
| | | break; |
| | | } |
| | | default: |
| | | return; |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("JarWrkMastExecute任务完成报错!"+e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务完成 ===>Ste //完成 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerateSteComplete(Integer sign) { |
| | | try{ |
| | | for (SteSlave steSlave : slaveProperties.getSte()) { |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steSlave.getId()); |
| | | if (steThread == null) { |
| | | continue; |
| | | } |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { |
| | | continue; |
| | | } |
| | | if (steProtocol.getMode()==(short)1 && steProtocol.taskNo!=0 && steProtocol.getChargeStatus()==0){ |
| | | // if (steProtocol.statusType.equals(SteStatusType.WAITING)){ |
| | | // |
| | | // } |
| | | List<WrkMastExecute> wrkMastExecuteByWrkNoList = wrkMastExecuteService.getWrkMastExecuteByWrkNoList(steProtocol.getTaskNo().longValue()); |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteByWrkNoList){ |
| | | if (!Cools.isEmpty(wrkMastExecute)){ |
| | | switch (wrkMastExecute.getIoType()){ |
| | | case 6: |
| | | if (wrkMastExecute.getWrkSts()==3){//==>4 |
| | | //1:RGV小车移动、2:RGV小车到位、3:Ste穿梭版取货、4:取货完成等待下一步、5:Ste穿梭版放货至冷却池、6:放货完成、7:更新完成 //io_type = 6 |
| | | //ste任务等待完成 |
| | | if (steProtocol.statusType.equals(SteStatusType.WAITING)){ |
| | | //ste任务完成 |
| | | if (jarSteTake(wrkMastExecute,null,null,null,true,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){ |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭车Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},穿梭车数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSON(steProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | log.error("穿梭车Ste命令下发失败===>下发异常,jar号={},任务数据={},穿梭车数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSONString(wrkMastExecute), JSON.toJSONString(steProtocol),sign); |
| | | return true; |
| | | } |
| | | case 5: |
| | | if (wrkMastExecute.getWrkSts()==5){ |
| | | //1:RGV小车移动、2:RGV小车到位、3:rgv取货、4:rgv取货完成、5:Ste穿梭版入硫化罐、6:入罐完成、7:更新完成 //io_type = 5 |
| | | //ste任务完成 |
| | | if (steProtocol.statusType.equals(SteStatusType.WAITING)){ |
| | | //ste任务完成 |
| | | if (jarSteTake(wrkMastExecute,null,null,null,true,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){ |
| | | wrkMastExecute.setWrkSts(6); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭车Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},穿梭车数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(steProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | log.error("穿梭车Ste命令下发失败===>下发异常,jar号={},任务数据={},穿梭车数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(steProtocol),sign); |
| | | return true; |
| | | } |
| | | continue; |
| | | case 7: |
| | | case 8: |
| | | case 10: |
| | | case 11: |
| | | //1:RGV小车移动、2:RGV小车到位、3:Ste穿梭版移动中、4:移动完成、5:更新完成 |
| | | if (wrkMastExecute.getWrkSts()==3){ |
| | | //ste任务完成 |
| | | if (steProtocol.statusType.equals(SteStatusType.WAITING)){ |
| | | //ste任务完成 |
| | | if (jarSteTake(wrkMastExecute,null,null,null,true,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){ |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭车Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},穿梭车数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(steProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | log.error("穿梭车Ste命令下发失败===>下发异常,jar号={},任务数据={},穿梭车数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(steProtocol),sign); |
| | | return true; |
| | | } |
| | | continue; |
| | | case 9: |
| | | if (wrkMastExecute.getWrkSts()==1){ |
| | | //1:Ste穿梭版取放货中、2:放货完成等待下一步、3:输送线任务下发完成、4:更新完成 //io_type = 9 |
| | | //ste任务完成 |
| | | if (steProtocol.statusType.equals(SteStatusType.WAITING)){ |
| | | //ste任务完成 |
| | | if (jarSteTake(wrkMastExecute,null,null,null,true,SteAndJarUtil.getBJarNo(wrkMastExecute.getJarId()))){ |
| | | wrkMastExecute.setWrkSts(2); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("穿梭车Ste命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},穿梭车数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(steProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | log.error("穿梭车Ste命令下发失败===>下发异常,jar号={},任务数据={},穿梭车数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(steProtocol),sign); |
| | | continue; |
| | | } |
| | | default: continue; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("JarWrkMastExecute任务完成 ===>Ste报错!"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务完成 ===>Jar //完成 |
| | | * //硫化完成 修改任务状态 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerateJarComplete(Integer sign) { |
| | | try{ |
| | | for (JarSlave jarSlave : slaveProperties.getJar()) { |
| | | if (jarSlave.getId()>4){ |
| | | continue; |
| | | } |
| | | // 获取硫化罐信息 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | continue; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | continue; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | log.error("{}号硫化罐查询设备温度过高,等待降温....!!!",jarProtocol.getJarNo()); |
| | | return false; |
| | | } |
| | | BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo()); |
| | | continue; |
| | | } |
| | | //WAITING2(4, "硫化完成"), |
| | | if (jarProtocol.getJarErr()==0 && jarProtocol.getStatusType().equals(JarStatusType.WAITING2) |
| | | && jarProtocol.isRightDoor() && jarProtocol.isLeftDoor() |
| | | && jarProtocol.leftDoorOpen==0 && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0 && jarProtocol.rightDoorClose==0 |
| | | ){ |
| | | List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{ |
| | | add(5);//硫化中 |
| | | }}); |
| | | if (basJarMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | Integer integer = basJarMastService.updateStatus(jarProtocol.getJarNo(), 5, 6); |
| | | if (basJarMastList.size()!=integer){ |
| | | log.error("{}号硫化罐硫化完成修改硫化档案状态结果数量不一致!!!查询资料数量={},更新返回数量={}",jarProtocol.getJarNo(),basJarMastList.size(),integer); |
| | | } |
| | | } else if (jarProtocol.getJarErr()==0 |
| | | && jarProtocol.isRightDoor() && jarProtocol.isLeftDoor() |
| | | && jarProtocol.leftDoorOpen!=1 && jarProtocol.leftDoorOpen!=3 |
| | | && jarProtocol.rightDoorOpen!=1 && jarProtocol.rightDoorOpen!=3 |
| | | && (jarProtocol.leftDoorOpen==2 || jarProtocol.rightDoorOpen==2)){ |
| | | WrkMastExecute wrkMastExecuteSou = new WrkMastExecute(); |
| | | wrkMastExecuteSou.setWrkSts(3); |
| | | List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou); |
| | | if (wrkMastExecuteList.isEmpty()){ |
| | | WrkMastExecute execute = new WrkMastExecute(); |
| | | execute.setJarId(jarProtocol.getJarNo()); |
| | | //直接关门 |
| | | if (!jarDoorTake(execute,JarTaskModeType.OPEN_THE_DOOR_COMPLETE)){ |
| | | log.error("硫化罐Jar命令下发失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | execute.getJarId(), JSON.toJSON(execute), JSON.toJSON(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ |
| | | if (wrkMastExecute.getIoType() == 1 || wrkMastExecute.getIoType() == 3){ |
| | | //直接关门 |
| | | if (!jarDoorTake(wrkMastExecute,JarTaskModeType.OPEN_THE_DOOR_COMPLETE)){ |
| | | log.error("硫化罐Jar命令下发失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("平衡车Rgv命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | } else if (jarProtocol.getJarErr()==0 |
| | | && jarProtocol.isRightDoor() && jarProtocol.isLeftDoor() |
| | | && jarProtocol.leftDoorClose!=1 && jarProtocol.leftDoorClose!=3 |
| | | && jarProtocol.rightDoorClose!=1 && jarProtocol.rightDoorClose!=3 |
| | | && (jarProtocol.leftDoorClose==2 || jarProtocol.rightDoorClose==2)){ |
| | | WrkMastExecute wrkMastExecuteSou = new WrkMastExecute(); |
| | | wrkMastExecuteSou.setWrkSts(3); |
| | | List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou); |
| | | if (wrkMastExecuteList.isEmpty()){ |
| | | WrkMastExecute execute = new WrkMastExecute(); |
| | | execute.setJarId(jarProtocol.getJarNo()); |
| | | //直接关门 |
| | | if (!jarDoorTake(execute,JarTaskModeType.CLOSE_THE_DOOR_COMPLETE)){ |
| | | log.error("硫化罐Jar命令下发失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | execute.getJarId(), JSON.toJSON(execute), JSON.toJSON(jarProtocol),sign); |
| | | } |
| | | return true; |
| | | } |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ |
| | | if (wrkMastExecute.getIoType() == 2 || wrkMastExecute.getIoType() == 4){ |
| | | //直接关门 |
| | | if (!jarDoorTake(wrkMastExecute,JarTaskModeType.CLOSE_THE_DOOR_COMPLETE)){ |
| | | log.error("硫化罐Jar命令下发失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign); |
| | | } |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("平衡车Rgv命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(jarProtocol),sign); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("//硫化完成 修改任务状态 报错!"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务完成 ===>RGV移动 //完成 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerateRgvComplete1(Integer sign) { |
| | | try{ |
| | | WrkMastExecute wrkMastExecuteSou = new WrkMastExecute(); |
| | | wrkMastExecuteSou.setWrkSts(1); |
| | | List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou); |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ |
| | | if (wrkMastExecute.getIoType() == 9){ |
| | | continue; |
| | | } |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(wrkMastExecute.getRgvId()); |
| | | if (staProtocolRGV == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | continue; |
| | | } |
| | | |
| | | StaProtocol staProtocolRGVEnd = devpThread.getStation().get(wrkMastExecute.getRgvEndId()); |
| | | if (staProtocolRGVEnd == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolRGVEnd = staProtocolRGVEnd.clone(); |
| | | } |
| | | if (staProtocolRGVEnd == null) { |
| | | continue; |
| | | } |
| | | if (staProtocolRGV.getNowRow() == staProtocolRGVEnd.getNowRow() |
| | | && staProtocolRGV.getNowRow() == SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId())){ |
| | | wrkMastExecute.setWrkSts(2); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("平衡车Rgv命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},平衡车Rgv数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocolRGV),sign); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error("JarWrkMastExecute任务完成 ===>RGV移动!异常"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * JarWrkMastExecute任务完成 ===>RGV取货 //完成 |
| | | */ |
| | | public synchronized boolean jarWrkMastExecuteGenerateRgvComplete2(Integer sign) { |
| | | try{ |
| | | WrkMastExecute wrkMastExecuteSou = new WrkMastExecute(); |
| | | wrkMastExecuteSou.setWrkSts(3); |
| | | wrkMastExecuteSou.setIoType(5); |
| | | List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectWrkMastExecuteByWrk(wrkMastExecuteSou); |
| | | for (WrkMastExecute wrkMastExecute : wrkMastExecuteList){ |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); |
| | | StaProtocol staProtocolRGV = devpThread.getStation().get(wrkMastExecute.getRgvId()); |
| | | if (staProtocolRGV == null) { |
| | | continue; |
| | | } else { |
| | | staProtocolRGV = staProtocolRGV.clone(); |
| | | } |
| | | if (staProtocolRGV == null) { |
| | | continue; |
| | | } |
| | | |
| | | |
| | | if ( staProtocolRGV.rgvBoolean(2) |
| | | && staProtocolRGV.getNowRow() == SteAndJarUtil.getRgvJarNowRow(wrkMastExecute.getJarId())){ |
| | | //调车 == > 取货完成复位 |
| | | if (!jarRgvGetFuTake(wrkMastExecute,true)){ |
| | | log.error("平衡车RGV命令下发失败,rgv号={},任务数据={},硫化罐数据={},sign={}", |
| | | wrkMastExecute.getJarId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocolRGV),sign); |
| | | return true; |
| | | } |
| | | wrkMastExecute.setWrkSts(4); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecute)){ |
| | | log.error("平衡车Rgv命令下发失败===>更新wrkMastExecute失败,jar号={},任务数据={},平衡车Rgv数据={},sign={}", |
| | | wrkMastExecute.getSteId(), JSON.toJSON(wrkMastExecute), JSON.toJSON(staProtocolRGV),sign); |
| | | return true; |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | return true; |
| | | }catch (Exception e){ |
| | | log.error(" JarWrkMastExecute任务完成 ===>RGV取货 异常!"+e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * Jar任务 穿梭车移动任务 //完成 |
| | | */ |
| | | public synchronized boolean jarMastMove() { |
| | | try{ |
| | | for (SteSlave steSlave : slaveProperties.getSte()){ |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steSlave.getId()); |
| | | if (steThread == null) { |
| | | continue; |
| | | } |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null) { |
| | | continue; |
| | | } |
| | | |
| | | if (wrkMastExecuteService.selectNoStart(steSlave.getId())!=0){ |
| | | continue; |
| | | } |
| | | |
| | | if (wrkMastExecuteService.selectMoveStart(steSlave.getId())!=0){ |
| | | continue; |
| | | } |
| | | |
| | | try{ |
| | | if (jarWrkMastExecuteGenerateSteStatus(steSlave.getId(),1,SteStatusType.IDLE,false)){ |
| | | List<WrkMastExecute> wrkMastExecutes = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 5, null); |
| | | if (wrkMastExecutes.isEmpty()){ |
| | | List<WrkMastExecute> wrkMastExecutesB = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 6, null); |
| | | List<WrkMastExecute> wrkMastExecutesC = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 9, null); |
| | | |
| | | if (!wrkMastExecutesB.isEmpty() || !wrkMastExecutesC.isEmpty()){ |
| | | WrkMastExecute wrkMastExecute = !wrkMastExecutesB.isEmpty() ? wrkMastExecutesB.get(0) : wrkMastExecutesC.get(0); |
| | | BasJar basJar = basJarMapper.selectById(wrkMastExecute.getJarId()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",wrkMastExecute.getJarId()); |
| | | return false; |
| | | } |
| | | BasJarMast jarMastByWrkNo = basJarMastService.getJarMastByWrkNo(wrkMastExecute.getWrkNo()); |
| | | //A==>B |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByWrkNo,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),10,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByWrkNo)); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | } else if (jarWrkMastExecuteGenerateSteStatus(steSlave.getId(),2,SteStatusType.IDLE,false)){ |
| | | List<WrkMastExecute> wrkMastExecutes = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 6, null); |
| | | if (wrkMastExecutes.isEmpty()){ |
| | | List<WrkMastExecute> wrkMastExecutesA = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 5, null); |
| | | List<WrkMastExecute> wrkMastExecutesC = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 9, null); |
| | | List<WrkMastExecute> wrkMastExecutes100 = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 100, null); |
| | | if (!wrkMastExecutes100.isEmpty()){ |
| | | WrkMastExecute wrkMastExecute = wrkMastExecutes100.get(0); |
| | | BasJar basJar = basJarMapper.selectById(wrkMastExecute.getJarId()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",wrkMastExecute.getJarId()); |
| | | return false; |
| | | } |
| | | |
| | | BasJarMast jarMastByWrkNo = new BasJarMast(basJar); |
| | | jarMastByWrkNo.setWrkNo(Integer.toUnsignedLong(wrkMastExecute.getWrkNo().intValue()));//工作号 |
| | | jarMastByWrkNo.setJarEnterStaNo(basJar.getEnterRgvNo()); |
| | | jarMastByWrkNo.setEnterStaNo(basJar.getEnterRgvNo()); |
| | | jarMastByWrkNo.setOutStaNo(basJar.getOutRgvNo()); |
| | | //B==>A |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByWrkNo,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),11,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByWrkNo)); |
| | | } |
| | | continue; |
| | | } |
| | | if (!wrkMastExecutesA.isEmpty()){ |
| | | WrkMastExecute wrkMastExecute = wrkMastExecutesA.get(0); |
| | | BasJar basJar = basJarMapper.selectById(wrkMastExecute.getJarId()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",wrkMastExecute.getJarId()); |
| | | return false; |
| | | } |
| | | BasJarMast jarMastByWrkNo = basJarMastService.getJarMastByWrkNo(wrkMastExecute.getWrkNo()); |
| | | //B==>A |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByWrkNo,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),11,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByWrkNo)); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | if (!wrkMastExecutesC.isEmpty()){ |
| | | WrkMastExecute wrkMastExecute = wrkMastExecutesC.get(0); |
| | | BasJar basJar = basJarMapper.selectById(wrkMastExecute.getJarId()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",wrkMastExecute.getJarId()); |
| | | return false; |
| | | } |
| | | BasJarMast jarMastByWrkNo = basJarMastService.getJarMastByWrkNo(wrkMastExecute.getWrkNo()); |
| | | //B==>C |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByWrkNo,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),7,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByWrkNo)); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | } else if (jarWrkMastExecuteGenerateSteStatus(steSlave.getId(),3,SteStatusType.IDLE,false)){ |
| | | List<WrkMastExecute> wrkMastExecutes = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 9, null); |
| | | if (wrkMastExecutes.isEmpty()){ |
| | | List<WrkMastExecute> wrkMastExecutesB = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 6, null); |
| | | List<WrkMastExecute> wrkMastExecutesA = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 5, null); |
| | | List<WrkMastExecute> wrkMastExecutes100 = wrkMastExecuteService.selectWrkMastExecuteByTypeAndIoTyperAndWrkType(null, 100, null); |
| | | if (!wrkMastExecutes100.isEmpty()){ |
| | | WrkMastExecute wrkMastExecute = wrkMastExecutes100.get(0); |
| | | BasJar basJar = basJarMapper.selectById(wrkMastExecute.getJarId()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",wrkMastExecute.getJarId()); |
| | | return false; |
| | | } |
| | | |
| | | BasJarMast jarMastByWrkNo = new BasJarMast(basJar); |
| | | jarMastByWrkNo.setWrkNo(Integer.toUnsignedLong(wrkMastExecute.getWrkNo().intValue()));//工作号 |
| | | jarMastByWrkNo.setJarEnterStaNo(basJar.getEnterRgvNo()); |
| | | jarMastByWrkNo.setEnterStaNo(basJar.getEnterRgvNo()); |
| | | jarMastByWrkNo.setOutStaNo(basJar.getOutRgvNo()); |
| | | //C==>B |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByWrkNo,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),8,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByWrkNo)); |
| | | } |
| | | continue; |
| | | } |
| | | if (!wrkMastExecutesB.isEmpty() || !wrkMastExecutesA.isEmpty()){ |
| | | WrkMastExecute wrkMastExecute = !wrkMastExecutesB.isEmpty() ? wrkMastExecutesB.get(0) : wrkMastExecutesA.get(0); |
| | | BasJar basJar = basJarMapper.selectById(wrkMastExecute.getJarId()); |
| | | if (Cools.isEmpty(basJar)){ |
| | | log.error("{}号硫化罐查询设备档案无信息!!!",wrkMastExecute.getJarId()); |
| | | return false; |
| | | } |
| | | BasJarMast jarMastByWrkNo = basJarMastService.getJarMastByWrkNo(wrkMastExecute.getWrkNo()); |
| | | //C==>B |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByWrkNo,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),8,1})){ |
| | | log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByWrkNo)); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("硫化区域分段任务完成异常,steProtocol={},异常信息={}",JSON.toJSONString(steProtocol),e.getMessage()); |
| | | } |
| | | |
| | | WrkMastExecute wrkMastExecute = wrkMastExecuteService.selectStart(steSlave.getId()); |
| | | |
| | | |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("硫化区域分段任务完成异常,异常信息={}",e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | /** |
| | | * ste充电任务创建 //完成 |
| | | */ |
| | | public synchronized boolean jarChargeGenerate() { |
| | | try{ |
| | | //80%电量 无任务 充电 >50电量 有任务 断电 |
| | | //30%电量 不接取任务 无进行中任务 充电 >50电量 有任务 断电 |
| | | for (SteSlave steSlave : slaveProperties.getSte()){ |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steSlave.getId()); |
| | | if (steThread == null) { |
| | | continue; |
| | | } |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null || steProtocol.getChargeStatus()!=0) { |
| | | continue; |
| | | } |
| | | WrkMastExecute wrkMastExecuteByCharge = wrkMastExecuteService.getWrkMastExecuteByCharge(steSlave.getId()); |
| | | if (!Cools.isEmpty(wrkMastExecuteByCharge)){ |
| | | continue; |
| | | } |
| | | |
| | | if (steProtocol.getCharge()<30.0F){ |
| | | if (wrkMastExecuteService.selectMoveStartCharge(steSlave.getId())!=0){ |
| | | continue; |
| | | } |
| | | } else if (steProtocol.getCharge()<80.0F){ |
| | | List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusListCharge(steSlave.getId(), new ArrayList<Integer>() {{ |
| | | add(5); |
| | | add(11); |
| | | add(16); |
| | | }}); |
| | | if(!basJarMastList.isEmpty()){ |
| | | continue; |
| | | } |
| | | if (wrkMastExecuteService.selectNoStart(steSlave.getId())!=0){ |
| | | continue; |
| | | } |
| | | if (wrkMastExecuteService.selectMoveStart(steSlave.getId())!=0){ |
| | | continue; |
| | | } |
| | | } else { |
| | | continue; |
| | | } |
| | | |
| | | try{ |
| | | boolean jarIDLESign = false; |
| | | if (jarWrkMastExecuteGenerateSteStatus(steSlave.getId(),1,SteStatusType.IDLE,false)){ |
| | | //生成充电任务 |
| | | //A |
| | | BasJar basJar = basJarMapper.selectById(steSlave.getId()==1? 1:3); |
| | | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(7));//充电工作号 |
| | | BasJarMast basJarMast = new BasJarMast(basJar); |
| | | basJarMast.setWrkNo(Integer.toUnsignedLong(workNo));//工作号 |
| | | basJarMast.setJarEnterStaNo(basJar.getEnterRgvNo()); |
| | | basJarMast.setEnterStaNo(basJar.getEnterRgvNo()); |
| | | basJarMast.setOutStaNo(basJar.getOutRgvNo()); |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),100,1})){ |
| | | log.error("JarWrkMastExecute充电任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast)); |
| | | } |
| | | continue; |
| | | } else if (jarWrkMastExecuteGenerateSteStatus(steSlave.getId(),2,SteStatusType.IDLE,false)){ |
| | | jarIDLESign =true; |
| | | } else if (jarWrkMastExecuteGenerateSteStatus(steSlave.getId(),3,SteStatusType.IDLE,false)){ |
| | | jarIDLESign =true; |
| | | } |
| | | if (jarIDLESign){ |
| | | //生成充电任务 |
| | | //C==>A |
| | | BasJar basJar = null; |
| | | List<BasJar> basJarList = basJarMapper.selectList(new EntityWrapper<BasJar>().eq("region", steSlave.getId())); |
| | | for (BasJar basJarNow : basJarList){ |
| | | // 获取硫化罐信息0.0 |
| | | JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, basJarNow.getJarNo()); |
| | | JarProtocol jarProtocol = jarThread.getJarProtocol(); |
| | | if (jarProtocol == null) { |
| | | continue; |
| | | } |
| | | if (jarProtocol.modeType != JarModeType.AUTO){ |
| | | continue; |
| | | } |
| | | if (jarProtocol.statusType .equals(JarStatusType.SOS)){ |
| | | continue; |
| | | } |
| | | if (jarProtocol.getJarTemperature()>50){ |
| | | continue; |
| | | } |
| | | if (jarProtocol.leftDoorOpen != 0 || jarProtocol.rightDoorOpen != 0){ |
| | | continue; |
| | | } |
| | | basJar = basJarNow; |
| | | break; |
| | | } |
| | | if (basJar == null){ |
| | | continue; |
| | | } |
| | | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(7));//充电工作号 |
| | | BasJarMast basJarMast = new BasJarMast(basJar); |
| | | basJarMast.setWrkNo(Integer.toUnsignedLong(workNo));//工作号 |
| | | basJarMast.setJarEnterStaNo(basJar.getEnterRgvNo()); |
| | | basJarMast.setEnterStaNo(basJar.getEnterRgvNo()); |
| | | basJarMast.setOutStaNo(basJar.getOutRgvNo()); |
| | | if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),100,1})){ |
| | | log.error("JarWrkMastExecute充电任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast)); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("充电任务创建异常,steProtocol={},异常信息={}",JSON.toJSONString(steProtocol),e.getMessage()); |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("硫化区域分段任务完成异常,异常信息={}",e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | /** |
| | | * Ste充电任务完成 //完成 |
| | | */ |
| | | public synchronized boolean jarChargeComplete() { |
| | | try{ |
| | | //80%电量 无任务 充电 >50电量 有任务 断电 |
| | | //30%电量 不接取任务 无进行中任务 充电 >50电量 有任务 断电 |
| | | for (SteSlave steSlave : slaveProperties.getSte()){ |
| | | SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steSlave.getId()); |
| | | if (steThread == null) { |
| | | continue; |
| | | } |
| | | SteProtocol steProtocol = steThread.getSteProtocol(); |
| | | if (steProtocol == null || steProtocol.getChargeStatus()!=1) { |
| | | continue; |
| | | } |
| | | |
| | | if (steProtocol.getCharge()>95.0F || steProtocol.getFullCharge()){ |
| | | } else if (steProtocol.getCharge()>50.0F){ |
| | | if (wrkMastExecuteService.selectNoStartCharge(steSlave.getId())==0){ |
| | | if (wrkMastExecuteService.selectMoveStart(steSlave.getId())==0){ |
| | | continue; |
| | | } |
| | | } |
| | | } else { |
| | | continue; |
| | | } |
| | | |
| | | WrkMastExecute wrkMastExecuteByCharge = wrkMastExecuteService.getWrkMastExecuteByCharge(steSlave.getId()); |
| | | if (Cools.isEmpty(wrkMastExecuteByCharge)){ |
| | | BasJar basJar = basJarMapper.selectById(steSlave.getId()==1? 1:3); |
| | | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(7));//充电工作号 |
| | | BasJarMast basJarMast = new BasJarMast(basJar); |
| | | basJarMast.setWrkNo(Integer.toUnsignedLong(workNo));//工作号 |
| | | basJarMast.setJarEnterStaNo(basJar.getEnterRgvNo()); |
| | | basJarMast.setEnterStaNo(basJar.getEnterRgvNo()); |
| | | basJarMast.setOutStaNo(basJar.getOutRgvNo()); |
| | | wrkMastExecuteByCharge = new WrkMastExecute(basJarMast); |
| | | wrkMastExecuteByCharge.setJarId(basJar.getJarNo()); |
| | | wrkMastExecuteByCharge.setSteId(steSlave.getId());//穿梭板ID |
| | | wrkMastExecuteByCharge.setRgvId(basJar.getEnterRgvNo());//RGV ID enter |
| | | wrkMastExecuteByCharge.setRgvEndId(basJar.getOutRgvNo());//RGV ID out |
| | | wrkMastExecuteByCharge.setIoType(100);//任务类型 0: 未知 1: 开进料门 2: 关进料门 3: 开出料门 4: 关出料门 5: 入硫化罐 6: 入冷却槽 7: 穿梭车进冷却槽 8: 穿梭车离开冷却槽 9: 出冷却槽 10:A=>B 11:B=>A 100:小车充电任务 |
| | | wrkMastExecuteByCharge.setType(1);//设备 0: 未知 1: 硫化罐 2: 冷却槽 3: 硫化罐==>冷却槽 |
| | | } |
| | | |
| | | try{ |
| | | if (jarWrkMastExecuteGenerateSteStatusCharge(steSlave.getId(),1,SteStatusType.CHARGE,true)){ |
| | | //完成充电任务 |
| | | //调车 == > 断开充电 |
| | | if (!jarSteTake(wrkMastExecuteByCharge,SteLocaType.POINT20.id,SteLocaType.POINT20.id,SteTaskModeType.CLOSE_CHARGE,true,wrkMastExecuteByCharge.getJarId())){ |
| | | log.error("穿梭板Ste命令下发失败,ste号={},任务数据={}", |
| | | wrkMastExecuteByCharge.getSteId(), JSON.toJSONString(wrkMastExecuteByCharge)); |
| | | } |
| | | wrkMastExecuteByCharge.setWrkType(2); |
| | | wrkMastExecuteByCharge.setWrkSts(100); |
| | | if (!wrkMastExecuteService.updateById(wrkMastExecuteByCharge)){ |
| | | log.error("充电任务完成命令下发失败===>更新wrkMastExecute失败,ste号={},任务数据={}", |
| | | wrkMastExecuteByCharge.getSteId(), JSON.toJSONString(wrkMastExecuteByCharge)); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("充电任务完成异常,steProtocol={},异常信息={}",JSON.toJSONString(steProtocol),e.getMessage()); |
| | | } |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("硫化区域分段任务完成异常,异常信息={}",e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |