1
zhang
2025-09-26 3897c8800805f6e99e30d700fe0c11c5ed2df84a
1
16个文件已修改
289 ■■■■■ 已修改文件
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/param/CrnOperatorParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/CrnMsgTableVo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/CrnStateTableVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.map.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/crn.html 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -194,7 +194,7 @@
    <build>
<!--        <finalName>rqdzwcs</finalName>-->
        <finalName>czkhwcs</finalName>
        <finalName>wcs</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -21,7 +21,6 @@
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.VersionUtils;
import com.zy.core.CrnThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
@@ -35,7 +34,6 @@
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.properties.SystemProperties;
import com.zy.core.thread.RgvThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -121,6 +119,8 @@
            vo.setStatusType(crnProtocol.modeType.desc);   //  模式状态
            vo.setStatus(crnProtocol.getStatusType().desc);     //  状态
            vo.setLoading(crnProtocol.getLoaded()==1?"有物":"无物");  //  有物
            vo.setLoadTwoing(crnProtocol.getLoadedTwo() == 1 ? "有物" : "无物");  //  有物
            vo.setBay(crnProtocol.getBay());    //  列
            vo.setLev(crnProtocol.getLevel());  //  层
@@ -172,6 +172,19 @@
            } else {
                vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  模式状态
            }
            if (crnProtocol.getTaskNoTwo() > 0) {
                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNoTwo());
                if (wrkMast != null) {
                    vo.setSourceStaNo2(wrkMast.getSourceStaNo$());    //  源站
                    vo.setStaNo2(wrkMast.getStaNo$());   //  目标站
                    vo.setSourceLocNo2(wrkMast.getSourceLocNo());    //  源库位
                    vo.setLocNo2(wrkMast.getLocNo());    //  目标库位
                }
            } else {
                vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO) ? CrnStatusType.MACHINE_AUTO.getDesc() : CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  模式状态
            }
            vo.setXspeed(crnProtocol.getXSpeed());  //  走行速度(m/min)
            vo.setYspeed(crnProtocol.getYSpeed());  //  升降速度(m/min)
            vo.setZspeed(crnProtocol.getZSpeed());  //  叉牙速度(m/min)
@@ -233,7 +246,6 @@
    }
    /****************************************************************/
    /************************** 手动操作 ******************************/
    /****************************************************************/
@@ -275,7 +287,6 @@
//        command.setTraySize(locSts);
//        return crnControl(command)?R.ok():R.error();
//    }
    @ManagerAuth(memo = "库位转移")
    @PostMapping("/operator/stockMove")
    public R crnStockMove(CrnOperatorParam param){
@@ -375,6 +386,7 @@
    @PostMapping("/operator/taskComplete")
    public R crnTaskComplete(CrnOperatorParam param){
        CrnCommand command = new CrnCommand();
        command.setPltType(param.getC());
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 1);  // 任务完成确认位
@@ -387,7 +399,6 @@
        command.setDestinationPosZ((short) 0);     // 目标库位层
        return crnControl(command)?R.ok():R.error();
    }
//    @ManagerAuth(memo = "暂停")
@@ -476,15 +487,12 @@
                    throw new CoolException("堆垛机不在线");
                }
                // 空闲判断
//                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
                    if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) {
                        return true;
                    } else {
                        throw new CoolException("命令下发失败");
                    }
//                } else {
//                    throw new CoolException("堆垛机不在空闲状态");
//                }
            }
        }
        return false;
src/main/java/com/zy/asrs/domain/param/CrnOperatorParam.java
@@ -37,4 +37,7 @@
    private Integer rgvNo;
    private Integer c;
}
src/main/java/com/zy/asrs/domain/vo/CrnMsgTableVo.java
@@ -30,6 +30,18 @@
    // 目标库位
    private String locNo = "-";
    // 源站
    private String sourceStaNo2 = "-";
    // 目标站
    private String staNo2 = "-";
    // 源库位
    private String sourceLocNo2 = "-";
    // 目标库位
    private String locNo2 = "-";
    // 异常
    private String error = "";
src/main/java/com/zy/asrs/domain/vo/CrnStateTableVo.java
@@ -17,6 +17,9 @@
    // 有物
    private String loading = "-";
    // 有物
    private String loadTwoing = "-";
    // 列
    private Short bay;
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -22,6 +22,9 @@
    LocMast queryFreeLocMast(@Param("row") Integer row, @Param("locType1") Short locType1);
    LocMast queryFreeLocMast2(@Param("row") Integer row, @Param("locType1") Short locType1);
    @Select("select loc_no from asr_loc_mast where 1=1 and loc_sts = 'O' and crn_no = #{crnNo}")
    List<String> queryGroupEmptyStock(Integer crnNo);
src/main/java/com/zy/asrs/service/LocMastService.java
@@ -17,6 +17,7 @@
     */
    LocMast queryFreeLocMast(Integer row, Short locType1);
    LocMast queryFreeLocMast2(Integer row, Short locType1);
    /**
     * 获取同组货架的空库位
     * @param sourceLocNo 源库位
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -21,6 +21,11 @@
    public LocMast queryFreeLocMast(Integer row, Short locType1) {
        return this.baseMapper.queryFreeLocMast(row, locType1);
    }
    @Override
    public LocMast queryFreeLocMast2(Integer row, Short locType1) {
        return this.baseMapper.queryFreeLocMast2(row, locType1);
    }
    @Override
    public List<String> queryGroupEmptyStock(String sourceLocNo) {
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -2088,6 +2088,7 @@
        // 命令下发区 --------------------------------------------------------------------------
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setPltType(getCrnStation(wrkMast.getSourceLocNo()));
        crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
@@ -2660,7 +2661,13 @@
            LocMast loc = null;
            for (Integer row : rows) {
                if (Utils.isDeepLoc(slaveProperties, row)) {
                    if (shallowLoc.getRow1() == 1 && row == 1) {
                        loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1());
                    } else if (shallowLoc.getRow1() == 29 && row == 29) {
                        loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1());
                    } else {
                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
                    }
                    if (loc != null) {
                        if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
@@ -2679,7 +2686,14 @@
            if (null == loc) {
                for (Integer row : rows) {
                    if (Utils.isShallowLoc(slaveProperties, row)) {
                        if (shallowLoc.getRow1() == 1 && row == 1) {
                            loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1());
                        } else if (shallowLoc.getRow1() == 29 && row == 29) {
                            loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1());
                        } else {
                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
                        }
                        if (null != loc) {//对应深库位非在库状态,不能移库
                            String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -74,7 +74,12 @@
                        break;
                    // 写入数据 1号工位
                    case 2:
                        write((CrnCommand) task.getData());
                        CrnCommand data = (CrnCommand) task.getData();
                        if (data.getPltType() == null || data.getPltType() == 1) {
                            write(data);
                        } else if (data.getPltType() == 2) {
                            write2(data);
                        }
                        break;
                    // 复位 1号工位
                    case 3:
@@ -93,10 +98,6 @@
                        command.setDestinationPosY((short) 0);     // 目标库位列
                        command.setDestinationPosZ((short) 0);     // 目标库位层
                        write(command);
                        break;
                    // 写入数据 2号工位
                    case 4:
                        write2((CrnCommand) task.getData());
                        break;
                    // 复位 2号工位
                    case 6:
@@ -654,7 +655,8 @@
                    null    // 修改人员
            );
            bean.insert(basCrnOpt);
        } catch (Exception ignore) {}
        } catch (Exception ignore) {
        }
        if (result != null && result.IsSuccess) {
            Thread.sleep(200);
@@ -668,6 +670,7 @@
            return false;
        }
    }
    public void requestStop() {
        isRunning = false;
    }
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -44,31 +44,34 @@
    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
    private short heartBeatVal = 1;
    private StaError1 staError1;
//    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
//
//    }};
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(101);add(102);add(103);
        add(104);add(105);
    }};
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(1101);
        add(1102);
        add(1103);
        add(1104);
        add(1105);
        add(1106);
        add(1107);
    }};
    public static final ArrayList<Integer> BarcodeList1 = new ArrayList<Integer>() {{
        add(1); add(2);add(3);add(4);add(5);
        add(1);
    }};
    public static final ArrayList<Integer> staNosErrList1 = new ArrayList<Integer>() {{
        add(102);
    }};
    public static final ArrayList<Integer> staNoWeight1 = new ArrayList<Integer>() {{
        add(101);add(102);add(103);add(104);add(105);
        add(101);
        add(102);
        add(103);
        add(104);
        add(105);
    }};
    private Integer count=0;
@@ -87,9 +90,7 @@
     * 4.出库模式
     */
    public IoModeType ioModeOf2F = IoModeType.NONE;
//    public IoModeType ioMode = IoModeType.NONE;
    public IoModeType ioModeOf4F = IoModeType.NONE;
//    public IoModeType ioMode = IoModeType.NONE;
    public SiemensDevpThread(DevpSlave slave) {
        this.slave = slave;
@@ -127,6 +128,7 @@
                throw new CoolException("服务器异常");
        }
    }
    private ArrayList<Integer> getBarcodeList() {
        switch (slave.getId()) {
            case 1:
@@ -171,6 +173,7 @@
        }
    }
    /**
     * 初始化站点状态
     */
@@ -222,19 +225,6 @@
        return result;
    }
    public static int getOffsetFromSiteId(int siteId) {
        if (siteId < 100 || siteId > 450) {
            throw new IllegalArgumentException("siteId 超出有效范围: " + siteId);
        }
        return (siteId - 100) * 8;
    }
    public static int getOffsetFromSiteId2(int siteId) {
        if (siteId < 100 || siteId > 450) {
            throw new IllegalArgumentException("siteId 超出有效范围: " + siteId);
        }
        return (siteId - 100) * 6;
    }
    /**
     * 读取状态 ====> 整块plc
@@ -243,25 +233,12 @@
//        // 更新入出库模式
//        updateIoMode();
//        if (slave.getId()==1) return;
        ArrayList<Integer> staNos = staNos1;
        int staNoSize = staNos1.size();
        //ArrayList<Integer> staNos = getStaNo();
        ArrayList<Integer> staNosErrList = getStaNoErr();
        ArrayList<Integer> staNoWeight = getStaNoWeight();
        //int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 8));
        OperateResultExOne<byte[]> resultWeight = null;
        /*if(staNoWeight.size()>4){
            resultWeight = siemensS7Net.Read("DB102.0", (short)  (8 * 4));
        }else{
            resultWeight = siemensS7Net.Read("DB102.0", (short)  (4 * 4));
        }
        OperateResultExOne<byte[]> resultWeight2 = siemensS7Net.Read("DB102.0", (short)  (4 * 4));*/
        //if (result.IsSuccess && resultWeight.IsSuccess) {
            if (result.IsSuccess) {
            int j = 0;
            for(int i = 0 ; i<staNoSize;i++){
                Integer siteId = staNos.get(i); // 站点编号
                StaProtocol staProtocol = station.get(siteId);
@@ -271,22 +248,11 @@
                    station.put(siteId, staProtocol);
                }
                boolean[] status = null;
                int offset = getOffsetFromSiteId(siteId);//取余获得对应db块数据
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8));     // 工作号
                /*if (staNoWeight.contains(siteId)) {
                    if(staNoWeight.size() == 4){
                        staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(resultWeight2.Content, j));
                        j = j + 4;
                    }else{
                        staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(resultWeight.Content, j));
                        j = j + 4;
                    }
                }*/
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 8 + 4));   // 目标站
                status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 8 + 6, 1);
                status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 8 + 6, 1);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
@@ -434,8 +400,7 @@
            if(write.IsSuccess && write1.IsSuccess){
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
            }
            else {
            } else {
                writeCount++;
                log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
src/main/resources/application.yml
@@ -8,7 +8,7 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://192.168.0.2:1433;databasename=rqdzasrs
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=rqdzasrs
    username: sa
    password: sa@123
#    driver-class-name: com.oscar.Driver
@@ -38,7 +38,7 @@
  enable: false
wms:
  url: 127.0.0.1:8080/rqdzasrs
  url: 127.0.0.1:8080/wcs
# 下位机配置
wcs-slave:
@@ -63,31 +63,19 @@
    # 堆垛机入库站点
    crnInStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 101
      staNo: 1105
      row: 2
      bay: 1
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 105
      row: 3
      bay: 1
      lev: 1
      bay: 11
      lev: 2
    # 堆垛机出库站点
    crnOutStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 101
      staNo: 1101
      row: 2
      bay: 1
      lev: 1
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 105
      row: 3
      bay: 1
      lev: 1
      bay: 14
      lev: 2
  # plc
  devp[0]:
    id: 1
@@ -97,9 +85,9 @@
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 102
      staNo: 1106
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 103
      backSta: 1105
      led: ${wcs-slave.led[0].id}
#    # 入库口2
#    inSta[1]:
@@ -109,10 +97,10 @@
#      led: ${wcs-slave.led[1].id}
    # 拣料入库口1
    pickSta[0]:
      staNo: 104
      staNo: 1106
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[1].id}
      backSta: 104
      led: ${wcs-slave.led[0].id}
      backSta: 1105
#    # 拣料入库口2
#    pickSta[1]:
#      staNo: 225
@@ -121,9 +109,9 @@
#      backSta: 224
    # 空板入库口1
    emptyInSta[0]:
      staNo: 102
      staNo: 1106
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 103
      backSta: 1105
      led: ${wcs-slave.led[0].id}
    # 空板入库口2
    #emptyInSta[1]:
@@ -133,7 +121,7 @@
      #led: ${wcs-slave.led[1].id}
    # 出库口1
    outSta[0]:
      staNo: 104
      staNo: 1101
  # 条码扫描仪1
  barcode[0]:
    id: 1
@@ -145,12 +133,12 @@
    ip: 10.10.10.51
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 102
  # LED2
  led[1]:
    id: 123
    ip: 10.10.10.52
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 104
    staArr: 1104
#  # LED2
#  led[1]:
#    id: 123
#    ip: 10.10.10.52
#    port: 5005
#    devpPlcId: ${wcs-slave.devp[0].id}
#    staArr: 104
src/main/resources/mapper/LocMastMapper.xml
@@ -48,6 +48,18 @@
        order by NEWID(),lev1 asc,bay1 asc
    </select>
    <select id="queryFreeLocMast2" resultMap="BaseResultMap">
        select top 1 *
        from asr_loc_mast
        where row1=#{row}
        and loc_sts='O'
        and row1 != #{row}
        <if test="locType1 != null">
            and loc_type1 = #{locType1}
        </if>
        order by NEWID(),lev1 asc,bay1 asc
    </select>
    <select id="queryDemoSourceLoc" resultMap="BaseResultMap">
        select top 1 * from asr_loc_mast where crn_no = #{crnNo}
        and loc_sts='D'
src/main/webapp/static/js/common.js
@@ -1,5 +1,5 @@
// var baseUrl = "/rqdzwcs";
var baseUrl = "/czkhwcs";
var baseUrl = "/wcs";
// 赋值
function setVal(el, val) {
src/main/webapp/static/js/console.map.js
@@ -1,6 +1,6 @@
mapInfo ={
    // "mapName": "rqdzwcs",
    "mapName": "czkhwcs",
    "mapName": "wcs",
    "rackCount": 8,
    "crnCount": 4,
    "stbCount": 120,
@@ -127,9 +127,11 @@
                    "stns": [
                        // { "type": "stn", "id": "site-100", "text": "100", "top": 80, "left": 94, "width": 40, "height": 23 },
                        //{ "type": "stn", "id": "site-103", "text": "103", "top": 160, "left": 1430, "width": 120, "height": 23 },
                        {"type": "stn", "id": "site-313", "text": "313", "top": 200, "left": 990, "width": 170, "height": 25},
                        { "type": "stn", "id": "site-102", "text": "102", "top": 280, "left": 990, "width": 30, "height": 40 },
                        { "type": "stn", "id": "site-101", "text": "101", "top": 230, "left": 990, "width": 30, "height": 40 },
                        {"type": "stn", "id": "site-1103", "text": "1103", "top": 180, "left": 1000, "width": 45, "height": 45},
                        {"type": "stn", "id": "site-1104", "text": "1104", "top": 180, "left": 945, "width": 45, "height": 45},
                        {"type": "stn", "id": "site-1105", "text": "1105", "top": 180, "left": 890, "width": 45, "height": 45},
                        { "type": "stn", "id": "site-1102", "text": "1102", "top": 280, "left": 890, "width": 45, "height": 45 },
                        { "type": "stn", "id": "site-1101", "text": "1101", "top": 230, "left": 890, "width": 45, "height": 45 },
                        // { "type": "stn", "id": "site-110", "text": "110", "top": 130, "left": 1784, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-111", "text": "111", "top": 130, "left": 1826, "width": 40, "height": 23 },
                        //
@@ -143,8 +145,8 @@
                        // { "type": "stn", "id": "site-118", "text": "118", "top": 240, "left": 94, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-119", "text": "119", "top": 240, "left": 52, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-120", "text": "120", "top": 240, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-104", "text": "104", "top": 280, "left": 1130, "width": 30, "height": 40 },
                        { "type": "stn", "id": "site-105", "text": "105", "top": 230, "left": 1130, "width": 30, "height": 40 },
                        { "type": "stn", "id": "site-1107", "text": "1107", "top": 280, "left": 1000, "width": 45, "height": 45 },
                        { "type": "stn", "id": "site-1106", "text": "1106", "top": 230, "left": 1000, "width": 45, "height": 45 },
                        // { "type": "stn", "id": "site-123", "text": "123", "top": 210, "left": 1301, "width": 60, "height": 23 },
                        // { "type": "stn", "id": "site-124", "text": "124", "top": 160, "left": 1742, "width": 120, "height": 23 },
src/main/webapp/views/crn.html
@@ -98,7 +98,8 @@
                        <th>堆垛机</th>
                        <th>模式</th>
                        <th>状态</th>
                        <th>有物</th>
                        <th>工位1有物</th>
                        <th>工位2有物</th>
                        <th>列</th>
                        <th>层</th>
                        <th>货叉定位</th>
@@ -122,9 +123,12 @@
                    <th>工作号</th>
                    <th>状态</th>
                    <th>源站</th>
                    <th>目标站</th>
                    <th>源库位</th>
                    <th>目标库位</th>
                    <th>目标站1</th>
                    <th>源库位1</th>
                    <th>目标库位1</th>
                    <th>目标站2</th>
                    <th>源库位2</th>
                    <th>目标库位2</th>
                    <!--                    <th>走行速度(m/min)</th>-->
                    <!--                    <th>升降速度(m/min)</th>-->
                    <!--                    <th>叉牙速度(m/min)</th>-->
@@ -220,7 +224,9 @@
                        <!--                <button class="item" onclick="bacOrigin()">回原点</button>-->
                        <!--                <button class="item" onclick="reverseOrigin()">反原点</button>-->
                        <!--                <button class="item" onclick="coorMove()">坐标移行</button>-->
                        <button class="item" onclick="taskComplete()">任务完成</button>
                        <button class="item" onclick="taskComplete(1)">任务完成1</button>
                        <button class="item" onclick="taskComplete(2)">任务完成2</button>
                        <!--                <button class="item" onclick="pause()">暂停</button>-->
                        <!--                <button class="item" onclick="boot()">启动</button>-->
                        <button class="item" onclick="clearCommand()">清除命令</button>
@@ -320,13 +326,15 @@
                        setVal(tr.children("td").eq(1), table[i-1].statusType);
                        setVal(tr.children("td").eq(2), table[i-1].status);
                        setVal(tr.children("td").eq(3), table[i-1].loading);
                        setVal(tr.children("td").eq(4), table[i-1].bay);
                        setVal(tr.children("td").eq(5), table[i-1].lev);
                        setVal(tr.children("td").eq(6), table[i-1].forkOffset);
                        setVal(tr.children("td").eq(7), table[i-1].liftPos);
                        setVal(tr.children("td").eq(8), table[i-1].walkPos);
                        setVal(tr.children("td").eq(9), table[i-1].warnCode);
                        setVal(tr.children("td").eq(10), table[i-1].alarm);
                        setVal(tr.children("td").eq(4), table[i-1].loadTwoing);
                        setVal(tr.children("td").eq(5), table[i-1].bay);
                        setVal(tr.children("td").eq(6), table[i-1].lev);
                        setVal(tr.children("td").eq(7), table[i-1].forkOffset);
                        setVal(tr.children("td").eq(8), table[i-1].liftPos);
                        setVal(tr.children("td").eq(9), table[i-1].walkPos);
                        setVal(tr.children("td").eq(10), table[i-1].warnCode);
                        setVal(tr.children("td").eq(11), table[i-1].alarm);
                    }
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
@@ -360,6 +368,10 @@
                        setVal(tr.children("td").eq(4), table[i-1].staNo);
                        setVal(tr.children("td").eq(5), table[i-1].sourceLocNo);
                        setVal(tr.children("td").eq(6), table[i-1].locNo);
                        setVal(tr.children("td").eq(7), table[i-1].staNo2);
                        setVal(tr.children("td").eq(8), table[i-1].sourceLocNo2);
                        setVal(tr.children("td").eq(9), table[i-1].locNo2);
                        // setVal(tr.children("td").eq(7), table[i-1].xspeed);
                        // setVal(tr.children("td").eq(8), table[i-1].yspeed);
                        // setVal(tr.children("td").eq(9), table[i-1].zspeed);
@@ -452,8 +464,8 @@
    }
    // 任务完成
    function taskComplete() {
        http.post(baseUrl+"/crn/operator/taskComplete", getReqParam(), function (res) {
    function taskComplete(c) {
        http.post(baseUrl+"/crn/operator/taskComplete?c="+c, getReqParam(), function (res) {
            layer.msg(res.msg);
        });
    }