野心家
2025-05-09 b1fe5e3f3eed2e4cf20a1ca2871db3f3f6576f2d
初始化
17个文件已修改
608 ■■■■ 已修改文件
pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/StorageEscalationParam.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/TaskLogScheduler.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 187 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 244 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wcs/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wcs/js/console.map.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wms/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -9,13 +9,13 @@
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zy</groupId>
    <artifactId>jdzwcs</artifactId>
    <artifactId>scwcs</artifactId>
    <version>1.0.0</version>
    <packaging>war</packaging>
    <properties>
        <java.version>1.8</java.version>
        <cool.version>3.4.5</cool.version>
        <cool.version>3.4.0</cool.version>
        <mysql-driver.version>5.1.47</mysql-driver.version>
        <mybatis-plus.version>2.3.2</mybatis-plus.version>
        <fastjson.version>1.2.58</fastjson.version>
@@ -200,7 +200,7 @@
    </dependencies>
    <build>
        <finalName>jdzwcs</finalName>
        <finalName>scwcs</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -429,12 +429,12 @@
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式
        command.setSourcePosZ(param.getSourceRow());     // 源库位排
        command.setSourcePosX(param.getSourceBay());     // 源库位列
        command.setSourcePosY(param.getSourceLev());     // 源库位层
        command.setDestinationPosZ(param.getRow());     // 目标库位排
        command.setDestinationPosX(param.getBay());     // 目标库位列
        command.setDestinationPosY(param.getLev());     // 目标库位层
        command.setSourcePosX(param.getSourceRow());     // 源库位排
        command.setSourcePosY(param.getSourceBay());     // 源库位列
        command.setSourcePosZ(param.getSourceLev());     // 源库位层
        command.setDestinationPosX(param.getRow());     // 目标库位排
        command.setDestinationPosY(param.getBay());     // 目标库位列
        command.setDestinationPosZ(param.getLev());     // 目标库位层
//        command.setCommand((short)1);
        LocMast sourceLoc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", command.getSourcePosX())
                .eq("bay1", command.getSourcePosY()).eq("lev1", command.getSourcePosZ()));
src/main/java/com/zy/asrs/entity/param/StorageEscalationParam.java
@@ -10,4 +10,8 @@
    private Integer WCSStatus=0;
    //错误信息   具体的错误信息(超高,超重等)
    private String WCSErrorMessage="";
    //是否满板 1满板  0空板
    private int StaType=1;
    //库位类型 1高库位 0低库位
    private int LocType=0;
}
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -30,7 +30,7 @@
    LocMast queryDemoSourceLoc(@Param("crnNo") Integer crnNo);
    LocMast queryDemoLoc(@Param("crnNo") Integer crnNo);
    LocMast queryDemoLoc(@Param("crnNo") Integer crnNo,@Param("locType1") short locType1);
    @Select("select count(*) as count from asr_loc_mast where 1=1 and loc_sts = 'O' and loc_type1 = #{locType1} and crn_no = #{crnNo}")
    Integer selectEmptyLocCount(@Param("locType1") Short locType1, @Param("crnNo") Integer crnNo);
src/main/java/com/zy/asrs/service/LocMastService.java
@@ -37,7 +37,7 @@
     * @param crn
     * @return
     */
    LocMast queryDemoLoc(Integer crn);
    LocMast queryDemoLoc(Integer crn,short locType1);
    /**
     * 检查当前库位所属巷道的空库位数量
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -59,8 +59,8 @@
    }
    @Override
    public LocMast queryDemoLoc(Integer crn) {
        return this.baseMapper.queryDemoLoc(crn);
    public LocMast queryDemoLoc(Integer crn,short locType1) {
        return this.baseMapper.queryDemoLoc(crn,locType1);
    }
    @Override
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -113,6 +113,70 @@
    private CrnController crnController;
    @Autowired
    private SiteController siteController;
    /**
     * 堆垛机演示  ===>> 库位移转
     */
    public synchronized void crnDemoOfLocMove1() {
        try {
            List <BasCrnp> basCrnps =basCrnpService.selectList(new EntityWrapper<BasCrnp>());
            for (BasCrnp crn : basCrnps) {
                if (!crn.getEmpIn().equals("1")) {
                    continue;
                }   // 必须为演示状态
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getCrnNo());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol == null) {
                    continue;
                }
                // 只有当堆垛机空闲 并且 无任务时才继续执行
                if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
                    // 获取移库工作档信息
                    WrkMast wrkMast = wrkMastMapper.selectLocMove(crn.getCrnNo());
                    if (null != wrkMast) {
                        continue;
                    }
                    LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getCrnNo());
                    LocMast loc = locMastService.queryDemoLoc(crn.getCrnNo(),sourceLoc.getLocType1());
                    if (null == sourceLoc || null == loc) {
                        continue;
                    }
                    String sourceLocNo = sourceLoc.getLocNo();
                    String locNo = loc.getLocNo();
                    // 获取工作号
                    int workNo = commonService.getWorkNo(0);
                    // 保存工作档
                    TaskWrk taskWrk = new TaskWrk();
                    taskWrk.setWrkNo(workNo);
                    taskWrk.setTaskNo(workNo+"");//任务号
                    taskWrk.setWrkSts(11); // 工作状态:11.生成出库ID
                    taskWrk.setIoType(3); // 入出库状态: 3.库格移载
                    taskWrk.setIoPri(13);
                    taskWrk.setCrnNo(crn.getCrnNo());
                    taskWrk.setStartPoint(sourceLocNo);//起点
                    taskWrk.setTargetPoint(locNo);
                    taskWrk.setBarcode(sourceLoc.getBarcode()); // 托盘码
                    taskWrk.setModiTime(new Date());
                    int res = taskWrkMapper.insert(taskWrk);
                    if (res == 0) {
                        throw new CoolException("保存工作档失败");
                    }else {
                        loc.setCtnKind(1);
                        locMastService.updateById(loc);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
    @Synchronized
    public void shiftTargetToCyclePoint() throws IOException, InterruptedException {
        try {
@@ -221,9 +285,6 @@
    }
    public synchronized void generateStoreWrkFile1() throws IOException, InterruptedException {
        try {
            // 根据输送线plc遍历
@@ -276,7 +337,7 @@
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing() && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && !staProtocol.isEmptyMk() && workNo >= 9790
                            && workNo >= 9990
                            && staProtocol.isPakMk()) {
                        // 获取条码扫描仪信息
                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
@@ -303,6 +364,10 @@
                        }
                        log.info("组托入库={}", storageEscalationParam);
                        storageEscalationParam.setBoxNo(BoxNo);
                        //是否满板 1满板  0空板
                        storageEscalationParam.setStaType(staProtocol.isEmptyMk()? 0:1);
                        //库位类型 1高库位 0低库位
                        storageEscalationParam.setLocType(staProtocol.isHigh()? 1:0);
                        String response = "";
                        Boolean success = false;
                        try {
@@ -314,15 +379,8 @@
                                    .doPost();
                            JSONObject jsonObject = JSON.parseObject(response);
                            if(back){
                                if(staProtocol.getWorkNo()>=9801&&staProtocol.getWorkNo()<=9825){
                                    staProtocol.setStaNo((short)105);
                                } else if (staProtocol.getWorkNo()>=9826&&staProtocol.getWorkNo()<=9850) {
                                    staProtocol.setStaNo((short)107);
                                }else if (staProtocol.getWorkNo()>=9851&&staProtocol.getWorkNo()<=9875) {
                                    staProtocol.setStaNo((short)109);
                                }else if (staProtocol.getWorkNo()>=9876 && staProtocol.getWorkNo() <= 9900){
                                    staProtocol.setStaNo((short)110);
                                }
                                staProtocol.setWorkNo((short) 9991);
                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            }else{
@@ -371,22 +429,14 @@
                                            }
                                        }
                                    } else {
//                                    staProtocol.setWorkNo((short) 9991);
                                        if(staProtocol.getWorkNo()>=9801&&staProtocol.getWorkNo()<=9825){
                                            staProtocol.setStaNo((short)105);
                                        } else if (staProtocol.getWorkNo()>=9826&&staProtocol.getWorkNo()<=9850) {
                                            staProtocol.setStaNo((short)107);
                                        }else if (staProtocol.getWorkNo()>=9851&&staProtocol.getWorkNo()<=9875) {
                                            staProtocol.setStaNo((short)109);
                                        }else{
                                            staProtocol.setStaNo((short)110);
                                        }
                                        staProtocol.setWorkNo((short) 9991);
                                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                    }
                                } else {
//                                staProtocol.setWorkNo((short) 9991);
                                    staProtocol.setWorkNo((short) 9991);
                                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -11,7 +11,10 @@
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.TaskWrkLogServiceImpl;
import com.zy.asrs.utils.PostMesDataUtils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -57,11 +60,23 @@
    private String TaskExecCallback;
    @Value("${wms.taskStatusFeedbackPath}")
    private String taskStatusFeedbackPath;
    @Autowired
    private ConfigService configService;
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute() throws IOException {
        for (TaskWrk taskWrk : taskWrkService.selectToBeHistoryData()) {
            Config config =configService.selectByCode("ysms");
            if(config.getValue().equals("Y")&&taskWrk.getIoType()==3){
                TaskWrkLog taskWrkLog = new TaskWrkLog(taskWrk);
                if (!wrkLogService.insert(taskWrkLog)) {
                    throw new CoolException("转历史档失败" + taskWrkLog);
                }
                if (!taskWrkService.deleteById(taskWrk)) {
                    throw new CoolException("任务档删除失败" + taskWrkLog);
                }
            }else{
            HashMap<String, Object> headParam = new HashMap<>();
            if (taskWrk.getStatus().equals(TaskStatusType.OVER.id) || taskWrk.getStatus() == 7) {//完成
                headParam.put("Result", 1);
@@ -102,6 +117,8 @@
                );
            }
        }
        }
    }
}
src/main/java/com/zy/core/MainProcess.java
@@ -47,7 +47,7 @@
                    }
                    // 演示
//                    mainService.crnDemoOfLocMove1();
                    mainService.crnDemoOfLocMove1();
                    // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                    mainService.generateStoreWrkFile1(); // 组托
                    // 出库  ===>>  堆垛机出库站到出库站
@@ -68,13 +68,13 @@
                    //环形循环函数
//                    mainService.shiftTargetToCyclePoint();
//                    mainService.shiftCyclePointToTarget();
                    i++;
                    if (i > 2) {
                        //环形循环函数
                        mainService.shiftTargetToCyclePoint();
                        mainService.shiftCyclePointToTarget();
                        i = 0;
                    }
//                    i++;
//                    if (i > 2) {
//                        //环形循环函数
//                        mainService.shiftTargetToCyclePoint();
//                        mainService.shiftCyclePointToTarget();
//                        i = 0;
//                    }
                    //自动派发任务
   //                 mainService.autoDistribute();
src/main/java/com/zy/core/thread/SiemensCrnThread.java
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -49,32 +49,72 @@
    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
    private short heartBeatVal = 1;
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(100);add(101);add(102);add(103);add(104);
        add(105);add(106);add(107);add(108);add(109);
        add(110);add(111);add(112);add(113);add(114);
        add(115);add(116);add(117);add(118);add(119);
        add(120);add(121);add(122);add(123);add(124);
        add(125);add(1001);add(1002);add(1003);add(1004);
        add(1001);
        add(1002);
        add(1003);
        add(1004);
        add(1005);
        add(1010);
        add(1006);
        add(1007);
        add(1008);
        add(1009);
        add(1011);
        add(1012);
        add(1013);
        add(1014);
        add(1015);
        add(1016);
        add(1017);
        add(1018);
        add(1019);
        add(1020);
    }};
    /*public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(200);add(201);add(202);add(203);
        add(204);add(205);add(206);add(207);
        add(208);add(209);add(210);add(211);
        add(212);add(213);add(214);add(215);
        add(216);add(217);add(218);add(219);
        add(220);add(221);add(222);add(223);
        add(224);add(225);add(226);add(227);
        add(228);add(229);add(230);add(231);
        add(232);add(233);add(234);add(235);
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(2001);
        add(2002);
        add(2003);
        add(2004);
        add(2005);
        add(2006);
        add(2007);
        add(2008);
        add(2009);
        add(2010);
        add(2011);
        add(2012);
        add(2013);
        add(2014);
        add(2015);
        add(2016);
        add(2017);
        add(2018);
        add(2019);
    }};
    public static final ArrayList<Integer> staNos3 = new ArrayList<Integer>() {{
        add(300);add(301);add(302);add(303);
        add(304);add(305);add(306);add(307);
        add(1051);
        add(1052);
        add(1053);
        add(1054);
        add(1055);
        add(1056);
        add(1057);
        add(1058);
    }};
    public static final ArrayList<Integer> staNos4 = new ArrayList<Integer>() {{
        add(400);add(401);add(402);add(403);
        add(404);add(405);add(406);add(407);
    }};*/
        add(2051);
        add(2052);
        add(2053);
        add(2054);
        add(2055);
        add(2056);
        add(2057);
        add(2058);
    }};
    /**
     * 条码数量
@@ -90,17 +130,18 @@
     * 4.出库模式
     */
    public IoModeType ioModeOf2F = IoModeType.NONE;
//    public IoModeType ioMode = IoModeType.NONE;
    private ArrayList<Integer> getStaNo() {
        switch (slave.getId()) {
            case 1:
                return staNos1;
            /*case 2:
            case 2:
                return staNos2;
            case 3:
                return staNos3;
            case 4:
                return staNos4;*/
                return staNos4;
            default:
                throw new CoolException("服务器异常");
        }
@@ -240,77 +281,9 @@
            }
        }
//        OperateResultExOne<byte[]> resultAgvAndPlc = siemensS7Net.Read("DB102.0", (short) 30);
//        if (resultAgvAndPlc.IsSuccess) {
//            for (int i = 0; i < staNoSize; i++) {
//                int sign =(i+2)/2-1;
//                if ((i+2)%2!=0){
//                    Integer siteId = staNos.get(i); // 站点编号
//                    StaProtocol staProtocol = station.get(siteId);
//                    if (null == staProtocol) {
//                        staProtocol = new StaProtocol();
//                        staProtocol.setSiteId(siteId);
//                        station.put(siteId, staProtocol);
//                    }
//                    staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4));     // 允许取货
//                    staProtocol.setAgvStartPlace((short)0);   // 允许放货
//                    continue;
//                }
//                Integer siteId = staNos.get(i); // 站点编号
//                StaProtocol staProtocol = station.get(siteId);
//                if (null == staProtocol) {
//                    staProtocol = new StaProtocol();
//                    staProtocol.setSiteId(siteId);
//                    station.put(siteId, staProtocol);
//                }
//                staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6));     // 允许取货
//                staProtocol.setAgvStartPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2));   // 允许放货
//            }
//        }
//        OperateResultExOne<byte[]> resultAgvAndPlcOk = siemensS7Net.Read("DB132.0", (short) 30);
//        if (resultAgvAndPlcOk.IsSuccess) {
//            for (int i = 0; i < staNoSize; i++) {
//                int sign =(i+2)/2-1;
//                if ((i+2)%2!=0){
//                    Integer siteId = staNos.get(i); // 站点编号
//                    StaProtocol staProtocol = station.get(siteId);
//                    if (null == staProtocol) {
//                        staProtocol = new StaProtocol();
//                        staProtocol.setSiteId(siteId);
//                        station.put(siteId, staProtocol);
//                    }
//                    staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6+4));     // 允许取货
//                    staProtocol.setAgvTargetPlace((short)0);   // 允许放货
//                    continue;
//                }
//                Integer siteId = staNos.get(i); // 站点编号
//                StaProtocol staProtocol = station.get(siteId);
//                if (null == staProtocol) {
//                    staProtocol = new StaProtocol();
//                    staProtocol.setSiteId(siteId);
//                    station.put(siteId, staProtocol);
//                }
//                try{
//                    staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6));     // 取货完成
//                    if (staProtocol.getAgvTargetPick()!=0){
//                        System.out.println(staProtocol.getAgvTargetPick());
//                    }
//                    staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6 + 2));   // 放货完成
//                    if (staProtocol.getAgvTargetPlace()!=0){
//                        System.out.println(staProtocol.getAgvTargetPlace());
//                    }
//                }catch (Exception e){
//                    log.error(""+e);
//                }
//            }
//        }
        if (slave.getId() == 1) {
            //条码
            //Thread.sleep(200);
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.848.0", (short) 8);
        Thread.sleep(200);
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840.0", (short) 8);
            if (result2.IsSuccess) {
                for (int i = 0; i < 1; i++) {
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
@@ -322,8 +295,24 @@
            }
            //外形检测
            OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.810.0", (short) (barcodeSize*1));
            StaProtocol staProtocol1 = station.get(116);
        OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.802.0", (short) (barcodeSize * 1));
        if (resultErr1.IsSuccess) {
            int sta = 0;
            switch (slave.getId()) {
                case 1:
                    sta = 1014;
                    break;
                case 2:
                    sta = 2007;
                    break;
                case 3:
                    sta = 1052;
                    break;
                case 4:
                    sta = 2056;
                    break;
            }
            StaProtocol staProtocol1 = station.get(sta);
            boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, 0, 1);
            staProtocol1.setFrontErr(status1[0]);
            staProtocol1.setBackErr(status1[1]);
@@ -332,6 +321,8 @@
            staProtocol1.setRightErr(status1[4]);
            staProtocol1.setWeightErr(status1[5]);
            staProtocol1.setBarcodeErr(status1[6]);
        }
            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (staNoSize * 4));
            if (resultErr.IsSuccess) {
@@ -349,8 +340,6 @@
                    staProtocol.setUpcontactErr(status[7]);
                }
            }
        }
@@ -378,7 +367,6 @@
//        }
        if (result.IsSuccess ) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
            // 根据实时信息更新数据库
@@ -493,6 +481,7 @@
    }
    private void write(StaProtocol staProtocol) throws InterruptedException {
        if (staProtocol == null) {
            return;
@@ -510,7 +499,7 @@
        boolean writeFlag = false; // 任务下发成功标记
        String plcAddressWorkNo = "DB100." + index * 6;
        String plcAddressStaNo = "DB100." + (index * 6 + 4);
        Thread.sleep(100);
        while (writeCount < 5) {
            // **读取当前PLC状态,避免不必要的写入**
            OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
src/main/resources/application-prod.yml
@@ -1,6 +1,6 @@
wcs-slave:
  doubleDeep: true #双深
  doubleLocs: 1,4,5,8 #双深库位排号 1,4,5,8
  doubleLocs: 1,4 #双深库位排号 1,4
  groupCount: 4 #一个堆垛机负责的货架排数
  crn[0]: #堆垛机1
    id: 1
@@ -10,19 +10,32 @@
    rack: 0
    offset: 2  #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[0]: #堆垛机出库站点
      staNo: 125
      row: 3
    crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口
      staNo: 1002
      row: 1
      bay: 1
      lev: 2
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnInStn[0]: #堆垛机入库站点1
      staNo: 100
    crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口
      staNo: 1004
      row: 2
      bay: 1
      lev: 2
      lev: 1
      backSta: 102
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2002
      row: 1
      bay: 59
      lev: 11
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]: #堆垛机入库站点--2F输送线 取货口
      staNo: 2003
      row: 2
      bay: 59
      lev: 11
      backSta: 102
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[1]: #堆垛机2
    id: 2
    ip: 10.10.10.120
@@ -31,43 +44,224 @@
    rack: 0
    offset: 2  #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[0]: #堆垛机出库站点
      staNo: 115
      row: 7
    crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口
      staNo: 1006
      row: 3
      bay: 1
      lev: 2
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnInStn[0]: #堆垛机入库站点1
      staNo: 120
      row: 6
    crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口
      staNo: 1008
      row: 4
      bay: 1
      lev: 2
      lev: 1
      backSta: 106
      devpPlcId: ${wcs-slave.devp[0].id}
  devp[0]: #输送线
    crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2002
      row: 3
      bay: 59
      lev: 11
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2003
      row: 4
      bay: 59
      lev: 11
      backSta: 106
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[2]: #堆垛机3
    id: 3
    ip: 192.168.110.10
    slot: 0
    demo: false
    rack: 0
    offset: 2  #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口
      staNo: 1056
      row: 6
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[2].id}
    crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口
      staNo: 1058
      row: 7
      bay: 1
      lev: 1
      backSta: 106
      devpPlcId: ${wcs-slave.devp[2].id}
    crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2057
      row: 7
      bay: 1
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[1]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2057
      row: 7
      bay: 1
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
    crnOutStn[2]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2058
      row: 6
      bay: 1
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[2]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2058
      row: 6
      bay: 1
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
    crnOutStn[3]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2051
      row: 7
      bay: 13
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[3]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2051
      row: 7
      bay: 13
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
    crnOutStn[4]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2052
      row: 7
      bay: 10
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[4]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2052
      row: 7
      bay: 10
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
    crnOutStn[5]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2054
      row: 7
      bay: 4
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[5]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2056
      row: 7
      bay: 12
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
  devp[0]: #输送线--半成品1F
    id: 1
    ip: 10.10.10.130
    ip: 192.168.110.50
    rack: 0
    port: 102
    slot: 0
    emptyInSta[0]: #空板入库口0
      staNo: 116
      staNo: 1014
    inSta[0]: #入库口1
      staNo: 116
      backSta: 110
      staNo: 1014
      backSta: 1015
      barcode: ${wcs-slave.barcode[0].id}
    outSta[0]: #出库口1
      staNo: 105
      staNo: 1019
    outSta[1]: #出库口2
      staNo: 107
      staNo: 1010
    outSta[2]: #出库口2
      staNo: 109
      staNo: 1020
  devp[1]: #输送线--半成品2F
    id: 2
    ip: 192.168.110.70
    rack: 0
    port: 102
    slot: 0
    emptyInSta[0]: #空板入库口0
      staNo: 2007
    inSta[0]: #入库口1
      staNo: 2007
      backSta: 2006
      barcode: ${wcs-slave.barcode[1].id}
    outSta[0]: #出库口1
      staNo: 2001
    outSta[1]: #出库口2
      staNo: 2019
  devp[2]: #输送线--成品1F
    id: 3
    ip: 192.168.110.30
    rack: 0
    port: 102
    slot: 0
    emptyInSta[0]: #空板入库口0
      staNo: 1058
    inSta[0]: #入库口1
      staNo: 1052
      backSta: 1051
      barcode: ${wcs-slave.barcode[2].id}
    inSta[1]: #入库口2  #空板入库口0
      staNo: 1058
      backSta: 1053
      barcode: ${wcs-slave.barcode[2].id}
    outSta[0]: #出库口1
      staNo: 1053
  devp[3]: #输送线--成品2F
    id: 4
    ip: 192.168.110.70
    rack: 0
    port: 102
    slot: 0
    emptyInSta[0]: #空板入库口0
      staNo: 2056
    inSta[0]: #入库口1
      staNo: 2056
      backSta: 2055
      barcode: ${wcs-slave.barcode[3].id}
    outSta[0]: #出库口1
      staNo: 1053
    outSta[1]: #出库口1
      staNo: 251
    outSta[2]: #出库口1
      staNo: 252
    outSta[3]: #出库口1
      staNo: 110
      staNo: 257
    outSta[4]: #出库口1
      staNo: 258
    # 拣料入库口1
    pickSta[0]:
      staNo: 2051
      barcode: ${wcs-slave.barcode[3].id}
    # 拣料入库口2
    pickSta[1]:
      staNo: 2052
      barcode: ${wcs-slave.barcode[3].id}
    # 拣料入库口3
    pickSta[2]:
      staNo: 2057
      barcode: ${wcs-slave.barcode[3].id}
    # 拣料入库口4
    pickSta[3]:
      staNo: 2058
      barcode: ${wcs-slave.barcode[3].id}
  barcode[0]: #条码扫描仪
    port: 51236
    ip: 172.17.91.39
    id: 1
  barcode[1]: #条码扫描仪
    port: 51236
    ip: 172.17.91.39
    id: 1
  barcode[2]: #条码扫描仪
    port: 51236
    ip: 172.17.91.39
    id: 1
  barcode[3]: #条码扫描仪
    port: 51236
    ip: 172.17.91.39
    id: 1
#  crn[0]: #堆垛机1
#    rack: 0
#    offset: 2    #偏移量,当堆垛机站点列号=1时,偏移量=2
src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
  port: 8080
  port: 8081
  servlet:
    context-path: /@pom.build.finalName@
@@ -8,7 +8,7 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://10.10.10.220:1433;databasename=rywxasrs
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=czscwcs
    username: sa
    password: sa@123
  mvc:
@@ -37,7 +37,7 @@
#License相关配置
license:
  subject: jdzwcs
  subject: scwcs
  publicAlias: publicCert
  storePass: public_zhongyang_123456789
  licensePath: license.lic
src/main/resources/mapper/LocMastMapper.xml
@@ -51,12 +51,12 @@
    <select id="queryDemoSourceLoc" resultMap="BaseResultMap">
        select top 1 * from asr_loc_mast where crn_no = #{crnNo}
        and loc_sts='D'
        and loc_sts='F'
        ORDER BY NEWID()
    </select>
    <select id="queryDemoLoc" resultMap="BaseResultMap">
        select top 1 * from asr_loc_mast where crn_no = #{crnNo} and loc_sts = 'O'
        select top 1 * from asr_loc_mast where crn_no = #{crnNo} and loc_type1 = #{locType1} and loc_sts = 'O' and (ctn_kind=0 or ctn_kind is null)
        ORDER BY NEWID()
    </select>
src/main/webapp/static/wcs/js/common.js
@@ -1,4 +1,4 @@
var baseUrl = "/jdzwcs";
var baseUrl = "/scwcs";
// 赋值
function setVal(el, val) {
src/main/webapp/static/wcs/js/console.map.js
@@ -1,5 +1,5 @@
mapInfo = {
    "mapName": "jdzwcs",
    "mapName": "scwcs",
    "rackCount": 13,
    "crnCount": 4,
    "stbCount": 4,
src/main/webapp/static/wms/js/common.js
@@ -1,4 +1,4 @@
var baseUrl = "/jdzwcs";
var baseUrl = "/scwcs";
// 详情窗口-高度
var detailHeight = '80%';