#
1
昨天 1af93b3d4833dfead180264f41cfaa896ac7d24b
#
10个文件已修改
179 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/BasDevpOpt.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasDevpOptMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasDevpOptService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasDevpOptServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasDevpOptMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasDevpOpt.java
@@ -110,7 +110,7 @@
    public BasDevpOpt() {}
    public BasDevpOpt(Integer wrkNo,Date sendTime,Integer sourceSta,Integer posSta,Date updateTime,String sourceLoading,String barcode,Long frontErr,Long backErr,Long highErr,Long leftErr,Long rightErr,Long barcodeErr) {
    public BasDevpOpt(Integer wrkNo,Date sendTime,Integer sourceSta,Integer posSta,Date updateTime,String sourceLoading,String barcode,Long frontErr,Long backErr,Long highErr,Long leftErr,Long rightErr,Long barcodeErr,String posLoading) {
        this.wrkNo = wrkNo;
        this.sendTime = sendTime;
        this.sourceSta = sourceSta;
@@ -124,6 +124,7 @@
        this.leftErr = leftErr;
        this.rightErr = rightErr;
        this.barcodeErr = barcodeErr;
        this.posLoading =posLoading;
    }
//    BasDevpOpt basDevpOpt = new BasDevpOpt(
src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java
@@ -35,15 +35,23 @@
        switch (basAgvMast.getIoType()){
            case 0:
                getAgvTaskAssignmentParam0(basAgvMast);
                taskTyp = "1FQ3";
                ctnrTyp = "1";
                return;
            case 1:
                getAgvTaskAssignmentParam1(basAgvMast);
//                taskTyp = "1FQ2";
                ctnrTyp = "1";
                return;
            case 2:
                getAgvTaskAssignmentParam2(basAgvMast);
                taskTyp = "1FQ1";
                ctnrTyp = "1";
                return;
            case 3:
                getAgvTaskAssignmentParam3(basAgvMast);
//                taskTyp = "1FQ4";
                ctnrTyp = "1";
                return;
            default:
                return;
src/main/java/com/zy/asrs/mapper/BasDevpOptMapper.java
@@ -8,5 +8,5 @@
@Mapper
@Repository
public interface BasDevpOptMapper extends BaseMapper<BasDevpOpt> {
    String getErr(Integer wrkNo);
}
src/main/java/com/zy/asrs/service/BasDevpOptService.java
@@ -4,5 +4,6 @@
import com.baomidou.mybatisplus.service.IService;
public interface BasDevpOptService extends IService<BasDevpOpt> {
    String getErr(Integer wrkNo);
}
src/main/java/com/zy/asrs/service/impl/BasDevpOptServiceImpl.java
@@ -8,5 +8,8 @@
@Service("basDevpOptService")
public class BasDevpOptServiceImpl extends ServiceImpl<BasDevpOptMapper, BasDevpOpt> implements BasDevpOptService {
    @Override
    public String getErr(Integer wrkNo){
        return baseMapper.getErr(wrkNo);
    }
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -111,6 +111,8 @@
    private BasArmMastService basArmMastService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private BasDevpOptService basDevpOptService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -201,6 +203,7 @@
                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
                    }
                    staProtocol.setWorkNo(wrkNo);
                    staProtocol.setErrCode(errMsg);
                    News.info("异常判断{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
                    wrkNo++;
                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -229,6 +232,7 @@
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                        }
                        staProtocol.setWorkNo(wrkNo);
                        staProtocol.setErrCode(errMsg);
                        News.info("条码判断{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
                        wrkNo++;
                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -299,7 +303,6 @@
                    }
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                        SearchLocParam param = new SearchLocParam();
                        param.setBarcode(barcode);
                        param.setIoType(1);
@@ -334,6 +337,10 @@
                            staProtocol.setWorkNo(wrkNo);
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            switch (jsonObject.getInteger("code")){
                                case 700: staProtocol.setErrCode("未组托");break;
                                case 500: staProtocol.setErrCode("工作档/库存条码数据已存在");break;
                            }
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            News.info("任务下发判断{}入库回退:{},错误编号{},任务号:{}", inSta.getStaNo(), errMsg,jsonObject.getInteger("code"),wrkNo);
                            wrkNo++;
@@ -2259,7 +2266,8 @@
                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
                if (null == wrkMast) {
                    if(staProtocol.getWorkNo() > 9999){ //异常退出
                        MessageQueue.offer(SlaveType.Led, 2, new Task(3, "异常退出"));
                        String err = basDevpOptService.getErr(staProtocol.getWorkNo());
                        MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, err));
                    }
                    continue;
                }
@@ -2390,6 +2398,8 @@
            // 命令集合
            boolean reset = true;
            for (Integer staNo : led.getStaArr()) {
//                System.out.println("staArr = " + staNo);
                // 获取叉车站点
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
                if (staProtocol == null) { continue; }
@@ -3553,7 +3563,8 @@
            }
            if(rgvProtocol.getStatusType1() == RgvStatusType.WORKING){
                rgvThread.setPaking(true);
            }else if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE){
            }
            if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE){
                rgvThread.setPaking(true);
            }
            if(rgvProtocol.isLoaded1ing() && rgvProtocol.isLoaded2ing()){
@@ -4767,7 +4778,9 @@
//                        News.info("{}号站点存在任务执行中,请等待任务执行完毕:{}", outStaAgv.getStaNo(), barcode);
                        continue;
                    }
                    if(barcode.equals("0")){
                        continue;
                    }
                    List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("barcode", barcode));
                    if (!locMastList.isEmpty()) {
                        News.info("{}号站点条码信息重复:{}", outStaAgv.getStaNo(), barcode);
@@ -4873,6 +4886,52 @@
        }
    }
    /*
     * agv任务生成 异常送到入库口
     * */
    public synchronized void agvTaskCreateException() {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            Integer outStaAgv = 1041;
            // 获取入库站信息
            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
            StaProtocol staProtocol = devpThread.getStation().get(outStaAgv);
            if (staProtocol == null) {
                continue;
            } else {
                staProtocol = staProtocol.clone();
            }
            // 判断是否满足入库条件
            if (!staProtocol.isLoading()){
                continue;
            }
            if (staProtocol.isAutoing() && staProtocol.getWorkNo() > 10000) {
                // 判断重复工作档
                List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("sta_no", 1037));
                if (!basAgvMastList.isEmpty()) {
                    News.info("{}号站点存在任务执行中,等待任务执行完毕!!!", outStaAgv);
                    continue;
                }
                // 任务生成区 --------------------------------------------------------------------------
                BasAgvMast basAgvMast = new BasAgvMast();
                try {
                    basAgvMast.setTaskNo(staProtocol.getWorkNo());
                    basAgvMast.setSourceStaNo(1041);
                    basAgvMast.setStaNo(1037);
                    basAgvMast.setDevpId(devp.getId());
                    basAgvMast.setIoType(3);//输送==》输送线站点 3
                    basAgvMastService.insert(basAgvMast);
                    break;
                } catch (Exception e) {
                    News.error(JSON.toJSONString(e.getMessage()));
                }
            }
        }
    }
    /*
     * agv任务下发:AGV库位==》输送线站点
@@ -4916,6 +4975,8 @@
        }
    }
    /*
     * agv任务下发:AGV库位==》AGV库位
     * */
src/main/java/com/zy/core/MainProcess.java
@@ -165,15 +165,16 @@
                    continue;
                }
                //agv任务下发
//                mainService.agvTaskAssignment0();//0===》1  AGV库位==》输送线站点  0
//                mainService.agvTaskAssignment1();//0===》1  AGV库位==》AGV库位  1
//                mainService.agvTaskAssignment2();//0===》1  输送线站点==》AGV库位  2
//                mainService.agvTaskAssignment3();//0===》1  输送线站点==》输送线站点  3
//
//
//                mainService.agvTaskCreateFull();//任务生成  出库口==》AGV库位
//                mainService.agvTaskCreateEmpty();//任务生成  出库口==》AGV库位
//                mainService.agvTaskCreateR();//任务生成  AGV库位==》入库口
                mainService.agvTaskAssignment0();//0===》1  AGV库位==》输送线站点  0
                mainService.agvTaskAssignment1();//0===》1  AGV库位==》AGV库位  1
                mainService.agvTaskAssignment2();//0===》1  输送线站点==》AGV库位  2
                mainService.agvTaskAssignment3();//0===》1  输送线站点==》输送线站点  3
                mainService.agvTaskCreateFull();//任务生成  出库口==》AGV库位
                mainService.agvTaskCreateEmpty();//任务生成  出库口==》AGV库位
                mainService.agvTaskCreateR();//任务生成  AGV库位==》入库口
                mainService.agvTaskCreateException();//任务生成  出库口==》入库口
            } catch (Exception e) {
                e.printStackTrace();
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -14,6 +14,9 @@
    // 站点编号
    private Integer siteId;
    //错误编号
    private String errCode = null;
    // ----------------------------------------------------------------
    // 工作号
    private Integer workNo = 0;
@@ -156,6 +159,21 @@
    private Boolean sensorDecL = false; //左移方向减速
    private Boolean sensorArriveR = false; //右移方向到位
    private Boolean sensorDecR = false; //右移方向减速
    //agv----------------------------------------------------------
    private Boolean heartbeatDevp = false;  //心跳
    private Boolean conveyorAllowPick = false;//输送线允许取货
    private Boolean conveyorAllowPlace = false;//输送线允许放货
    private Boolean conveyorPickDone = false;//输送线取货完成确认
    private Boolean conveyorPlaceDone = false;//输送线放货完成确认
    private Boolean safetyDoorOpen = false;//安全门打开
    private Boolean externalEmergencyStop = false;//外部急停
    private Boolean heartbeatAgv = false;
    private Boolean agvRequestPlace = false;//AGV 申请放货
    private Boolean agvRequestPick = false;//AGV 申请取货
    private Boolean agvPickDone = false;//AGV 取货完成
    private Boolean agvPlaceDone = false;//AGV 放货完成
    private Boolean agvForbidden = false;//AGV 禁止运行
    public BasDevpErrorLog toSqlModelError(){
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -167,6 +167,10 @@
        put(1036, 512);put(1103, 476);put(1047, 452);put(2037, 270);put(4001,294);
    }};
    public static final Map<Integer, Integer> siteAgvOffsetMap = new HashMap<Integer, Integer>() {{
        put(1037, 0);put(1039, 2);put(1041, 4);put(2033, 0);put(2034,2);put(4003,4);put(4006,6);
    }};
    // 特殊站点集合
    private static final Set<Integer> specialSites = new HashSet<>(
@@ -179,6 +183,8 @@
    private static final Set<Integer> specialSites3 = new HashSet<>(//机械臂站点
            Arrays.asList(1098,1093,1087,1082,1074,1071,1061,1058));
    private static final Set<Integer> specialAgvSites = new HashSet<>(//agv取放货站点
            Arrays.asList(1037,1039,1041,2033,2034,4003,4006));
    public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{
        add(0); add(1); add(2);
@@ -329,6 +335,9 @@
                        write((StaProtocol)task.getData());
                        log.error("输送线下发命令:"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
                        break;
//                    case 3:
//                        writeAgv((StaProtocol)task.getData());
//                        break;
                    default:
                        break;
                }
@@ -449,7 +458,8 @@
        OperateResultExOne<byte[]> result4 = null;//1054-1079
        OperateResultExOne<byte[]> result5 = null;//1080-1110
        OperateResultExOne<byte[]> resultErr = null;
        OperateResultExOne<byte[]> resultAlarm = null;
        OperateResultExOne<byte[]> resultPlc = null;
        OperateResultExOne<byte[]> resultAgv = null;
        if(staNoSize == 102){
            result1 = siemensS7Net.Read("DB100.0", (short) (2768));//1001-1028
@@ -458,14 +468,15 @@
            result4 = siemensS7Net.Read("DB103.0", (short) (2824));//1054-1079
            result5 = siemensS7Net.Read("DB102.0", (short) (3428));//1080-1110
            resultErr = siemensS7Net.Read("DB3.0", (short) (536));
//            resultAlarm = siemensS7Net.Read("DB800.0", (short) (220));
//            resultAgv = siemensS7Net.Read("DB901.0", (short) (5)); //agv取放货请求
//            resultPlc = siemensS7Net.Read("DB902.0", (short) (5)); //输送线确认
        }else{
            result1 = siemensS7Net.Read("DB200.0", (short) (3000));//2001-2030
            result2 = siemensS7Net.Read("DB201.0", (short) (720));//2031-2037
            result3 = siemensS7Net.Read("DB400.0", (short) (600));//4001-4006
            resultErr = siemensS7Net.Read("DB3.0", (short) (354));
//            resultAlarm = siemensS7Net.Read("DB800.0", (short) (126));
//            resultAgv = siemensS7Net.Read("DB901.0", (short) (7)); //agv取放货请求
//            resultPlc = siemensS7Net.Read("DB902.0", (short) (7)); //输送线确认
        }
@@ -631,6 +642,30 @@
                    staProtocol.setSensorDecL(statusSign[19]);
                    staProtocol.setSensorArriveR(statusSign[20]);
                    staProtocol.setSensorDecR(statusSign[21]);
//                    Integer offsetAgv = siteAgvOffsetMap.get(siteId);
//
//                    boolean[] statusPlc = siemensS7Net.getByteTransform().TransBool(resultPlc.Content, offsetAgv, 1);
//                    boolean[] statusAgv = siemensS7Net.getByteTransform().TransBool(resultAgv.Content, offsetAgv, 1);
//
//                    if(specialAgvSites.contains(siteId)){
//                        // 心跳
//                        staProtocol.setHeartbeatDevp(statusPlc[0]);
//                        staProtocol.setHeartbeatAgv(statusAgv[0]);
//                        // 输送线(PLC)
//                        staProtocol.setConveyorAllowPick(statusPlc[1]);
//                        staProtocol.setConveyorAllowPlace(statusPlc[2]);
//                        staProtocol.setConveyorPickDone(statusPlc[3]);
//                        staProtocol.setConveyorPlaceDone(statusPlc[4]);
//                        staProtocol.setSafetyDoorOpen(statusPlc[5]);
//                        staProtocol.setExternalEmergencyStop(statusPlc[6]);
//                        // AGV
//                        staProtocol.setAgvRequestPlace(statusAgv[1]);
//                        staProtocol.setAgvRequestPick(statusAgv[2]);
//                        staProtocol.setAgvPickDone(statusAgv[3]);
//                        staProtocol.setAgvPlaceDone(statusAgv[4]);
//                        staProtocol.setAgvForbidden(statusAgv[5]);
//                    }
                    if( (staProtocol.getPassTimeOut() ||
@@ -899,8 +934,8 @@
                    staProtocol.isHighErr()? 1L:0L,
                    staProtocol.isLeftErr()? 1L:0L,
                    staProtocol.isRightErr()? 1L:0L,
                    staProtocol.isBarcodeErr()? 1L:0L
                    staProtocol.isBarcodeErr()? 1L:0L,
                    staProtocol.getErrCode()
            );
            bean.insert(basDevpOpt);
        } catch (Exception ignore) {
src/main/resources/mapper/BasDevpOptMapper.xml
@@ -23,4 +23,11 @@
    </resultMap>
    <select id="getErr" resultType="String">
        SELECT TOP 1 pos_loading
        FROM asr_bas_devp_opt
        WHERE wrk_no = #{wrkNo}
        ORDER BY send_time DESC
    </select>
</mapper>