src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/RouteUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/RgvSlave.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/WrkMastMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -173,4 +173,22 @@ * @return */ List<WrkMast> selectRgvOutWorking(@Param("rgvNo")Integer rgvNo); /*================================================RGV任务绑定相关 ==================================================*/ /** * 查找是否存在RGV正在出库工作中的任务 * @param wrkNo * @return */ WrkMast selectRgvInSteWrkNo(@Param("wrkNo")Integer wrkNo); /** * 查找是否存在RGV正在出库工作中的任务 * @param wrkNo * @return */ WrkMast selectRgvOutSteWrkNo(@Param("wrkNo")Integer wrkNo); /*================================================RGV任务绑定相关 ==================================================*/ } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -513,6 +513,95 @@ } /** * 绑定小车方法 */ public synchronized void rgvBindSte() { 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; } // 只有当RGV空闲、自动, 并且无任务、无物时才继续执行 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0 ) { // 如果最近一次是入库模式 if (rgvProtocol.getLastIo().equals("I")) { if (basRgv.getInEnable().equals("Y")) { this.rgvBindSteIn(rgv, rgvProtocol); // 入库 rgvProtocol.setLastIo("O"); } else if (basRgv.getOutEnable().equals("Y")) { this.rgvBindSteOut(rgv, rgvProtocol); // 出库 rgvProtocol.setLastIo("I"); } } // 如果最近一次是出库模式 else if (rgvProtocol.getLastIo().equals("O")) { if (basRgv.getOutEnable().equals("Y")) { this.rgvBindSteOut(rgv, rgvProtocol); // 出库 rgvProtocol.setLastIo("I"); } else if (basRgv.getInEnable().equals("Y")) { this.rgvBindSteIn(rgv, rgvProtocol); // 入库 rgvProtocol.setLastIo("O"); } } } } } /** * 绑定小车入库方法 */ public synchronized void rgvBindSteIn(RgvSlave slave, RgvProtocol rgvProtocol) { for (RgvSlave.RgvStn rgvStn: slave.getRgvInSStn()){ Integer staNo = rgvStn.getStaNo(); BasDevp basDevp = basDevpService.selectById(rgvStn.getDevpPlcId()); if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){ continue; }else { WrkMast wrkMast = wrkMastMapper.selectRgvInSteWrkNo(basDevp.getWrkNo()); if (!Cools.isEmpty(wrkMast)){ wrkMast.setRgvNo(wrkMast.getCrnNo()>3 ? 2 : 1); wrkMast.setAppeTime(new Date()); if (wrkMastMapper.updateById(wrkMast)==0){ log.error("绑定小车更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo()); } } } } } /** * 绑定小车出库方法 */ public synchronized void rgvBindSteOut(RgvSlave slave, RgvProtocol rgvProtocol) { for (RgvSlave.RgvStn rgvStn: slave.getRgvOutSStn()){ BasDevp basDevp = basDevpService.selectById(rgvStn.getDevpPlcId()); if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){ continue; }else { WrkMast wrkMast = wrkMastMapper.selectRgvOutSteWrkNo(basDevp.getWrkNo()); if (!Cools.isEmpty(wrkMast)){ wrkMast.setRgvNo(rgvStn.getStaNo()); wrkMast.setAppeTime(new Date()); if (wrkMastMapper.updateById(wrkMast)==0){ log.error("绑定小车更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo()); } } } } } /** * 入出库 ===>> RGV入出库作业下发 */ public synchronized void rgvIoExecute() { src/main/java/com/zy/asrs/utils/RouteUtils.java
New file @@ -0,0 +1,79 @@ package com.zy.asrs.utils; import com.core.common.Arith; import com.core.common.Cools; import com.zy.core.properties.SlaveProperties; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * Created by vincent on 2020/8/27 */ public class RouteUtils { // 正序 public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList<Integer>() {{ add(1);add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);add(10);add(11);add(12); }}; // 反序 public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{ add(12);add(11);add(10);add(9);add(8);add(7);add(6);add(5);add(4);add(3);add(2);add(1); }}; public static String zerofill(String msg, Integer count){ if (msg.length() == count){ return msg; } else if (msg.length() > count){ return msg.substring(0, 16); } else { StringBuilder msgBuilder = new StringBuilder(msg); for (int i = 0; i<count-msg.length(); i++){ msgBuilder.insert(0,"0"); } return msgBuilder.toString(); } } // 获取当前小车未行走的路线 public static List<Integer> getRoute(boolean sign,Integer drop){ List<Integer> result = new ArrayList<>(); List<Integer> groupRoute = new ArrayList<>(); if (sign){ groupRoute = TRACK_POSITION_POSITIVE_SEQUENCE; }else { groupRoute = TRACK_POSITION_REVERSE_SEQUENCE; } if (groupRoute.contains(drop)) { sign = false; for (Integer route : groupRoute) { if (route == drop){ sign=true; } if (sign){ result.add(route); } } }else { return null; } return result; } // 外侧方向的货位 优先入库方向/优先出库方向 ===>> 反之 public static List<String> getGroupOutsideLoc(String locNo,Integer crnNo){ List<String> result = new ArrayList<>(); return result; } } src/main/java/com/zy/core/MainProcess.java
@@ -62,6 +62,8 @@ mainService.storeFinished(); ///////////////////////RGV调度///////////////////////////////////// //绑定小车方法 mainService.rgvBindSte(); // 入出库 ===>> RGV入出库作业下发 mainService.rgvIoExecute(); // RGV入库 ===>> 根据RGV完成信号,执行对工作档的完成操作 src/main/java/com/zy/core/model/RgvSlave.java
@@ -28,6 +28,12 @@ // RGV出库源站点 private List<RgvStn> rgvOutSStn = new ArrayList<>(); // RGV叠盘 private List<RgvStn> rgvEmptyInSStn = new ArrayList<>(); // RGV空板入库 private List<RgvStn> rgvEmptyOutSStn = new ArrayList<>(); // RGV出库目标站点 private List<RgvStn> rgvDestStn = new ArrayList<>(); src/main/resources/mapper/WrkMastMapper.xml
@@ -238,5 +238,16 @@ select * from dbo.asr_wrk_mast where 1=1 and wrk_sts in (16,17) and rgv_no=#{rgvNo} order by io_time,wrk_no </select> <!-- RGV调度入出库相关 --> <!-- ==============================================RGV任务绑定相关 ============================================== --> <select id="selectRgvInSteWrkNo" resultMap="BaseResultMap"> select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts =12 and wrk_no=#{wrkNo} and rgv_no is null </select> <select id="selectRgvOutSteWrkNo" resultMap="BaseResultMap"> select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts =24 and wrk_no=#{wrkNo} and rgv_no is null </select> <!-- ==============================================RGV任务绑定相关 ============================================== --> </mapper>