#
LSH
2023-06-27 1e585dfd636f811952a0d2b0fc3e735325cd5243
#
5个文件已修改
1个文件已添加
205 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/RouteUtils.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/RgvSlave.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | 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>