#
LSH
2024-04-03 1725fe3afb54e76d490e3efb4f14931960618eae
#
4个文件已修改
126 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/RouteUtils.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastStaMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java
@@ -18,6 +18,7 @@
    * */
    Integer selectAllWrkCount(@Param("type")Integer type);
    Integer selectAllWrkStsCount(@Param("type")Integer type,@Param("wrkSts")Integer wrkSts);
    WrkMastSta selectAllWrkStsCountWrkMastSta(@Param("type")Integer type,@Param("wrkSts")Integer wrkSts);
    /*
    * 获取所有可执行任务
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4084,37 +4084,16 @@
    * */
    public synchronized void rgvRunWrkMastEmptyStaAvoidance() {
        try{
            Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//查询状态为0的任务
            if (integer==0){
//            Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//查询状态为0的任务
//            if (integer==0){
//                return;
//            }
            WrkMastSta wrkMastSta = wrkMastStaMapper.selectAllWrkStsCountWrkMastSta(null, 0);
            if (Cools.isEmpty(wrkMastSta)){
                return;
            }
            Integer[] rgvRunSta = RouteUtils.RgvRunSta(wrkMastSta.getStaStart(), wrkMastSta.getStaEnd());
            boolean signRgv = true;
            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
                )) {
                    signRgv = false;
                    break;
                }
            }
            if (signRgv){
                for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
                    RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                    RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
@@ -4136,17 +4115,44 @@
                            && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
                            && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
                    ) {
                        BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                        if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
                            continue;
//                    if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
                    if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),rgvRunSta[rgvProtocol.getRgvNo()-1],rgvProtocol.getRgvNo())){
                        signRgv = false;
                        break;
                        }
                        if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){
                            continue;
                        signRgv = false;
                        break;
                        } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){
                        signRgv = false;
                        break;
                    }
                }else {
                    signRgv = false;
                    break;
                }
            }
            if (signRgv){
                for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
                    RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                    RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                    if (rgvProtocol == null) {
                            continue;
                        }
                        rgvAvoidanceXY(rgvProtocol.getRgvNo());
                    // 只有当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());
                        rgvAvoidanceXY(rgvProtocol.getRgvNo(),rgvRunSta);
                        rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                        break;
                    }
                }
            }
@@ -4194,10 +4200,10 @@
    /*
     * 小车XY移动  避让
     * */
    public synchronized boolean rgvAvoidanceXY(Integer rgvId){
    public synchronized boolean rgvAvoidanceXY(Integer rgvId, Integer[] rgvRunSta){
        if (rgvId==1){
            try{
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
//                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
                //  命令下发区 --------------------------------------------------------------------------
                RgvCommand rgvCommand = new RgvCommand();
                rgvCommand.setRgvNo(rgvId); // RGV编号
@@ -4205,7 +4211,7 @@
                rgvCommand.setTaskNo1((short)32222); // 工位1工作号
                rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 工位1任务模式:  回原点
                //basRgvMap.getLockStartRoute().shortValue()
                rgvCommand.setSourceStaNo1( (short)101);
                rgvCommand.setSourceStaNo1(rgvRunSta[0].shortValue());
                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任务号
@@ -4220,14 +4226,14 @@
            }
        }else {
            try{
                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
//                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.setSourceStaNo2(rgvRunSta[1].shortValue());
                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任务号
src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -3,6 +3,8 @@
import java.util.ArrayList;
import java.util.List;
import static java.util.stream.Collectors.toList;
import com.zy.asrs.entity.WrkMastSta;
import com.zy.core.enums.RouteCollectCountType;
import springfox.documentation.spring.web.json.Json;
@@ -347,6 +349,36 @@
        return getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);
    }
    public static Integer[] RgvRunSta(Integer runStaStart,Integer runStaEnd){
        int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(runStaStart);
        int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(runStaEnd);
        if (ia<=ib){
            return new Integer[]{runStaStart,runStaEnd};
        }else {
            return new Integer[]{runStaEnd,runStaStart};
        }
    }
    public static boolean RgvRunStaSign(Integer staBow,Integer runStaEnd,Integer rgvNo){
        int ia =  TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(staBow);
        int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(runStaEnd);
        if (rgvNo==1){
            if (ia>ib){
                return true;//需要避让
            }else {
                return false;//不需要避让
            }
        }else {
            if (ia<ib){
                return true;//需要避让
            }else {
                return false;//不需要避让
            }
        }
    }
    public static void main(String[] arge){
src/main/resources/mapper/WrkMastStaMapper.xml
@@ -93,6 +93,17 @@
        </if>
    </select>
    <select id="selectAllWrkStsCount" resultMap="BaseResultMap">
        select top 1 * from asr_wrk_mast_sta
        where 1=1
        <if test="type!=null">
            and type = #{type}
        </if>
        <if test="wrkSts!=null">
            and wrk_sts = #{wrkSts}
        </if>
    </select>