src/main/java/com/zy/asrs/controller/CrnController.java
@@ -376,6 +376,10 @@ @ManagerAuth(memo = "入库") @PostMapping("/crn/operator/put") public R crnPut(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 @@ -394,6 +398,10 @@ @ManagerAuth(memo = "出库") @PostMapping("/crn/operator/take") public R crnTake(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 @@ -411,6 +419,10 @@ @ManagerAuth(memo = "库位转移") @PostMapping("/crn/operator/stockMove") public R crnStockMove(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 @@ -434,6 +446,10 @@ @ManagerAuth(memo = "站到站") @PostMapping("/crn/operator/siteMove") public R crnSiteMove(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 @@ -451,6 +467,10 @@ @ManagerAuth(memo = "回原点") @PostMapping("/crn/operator/bacOrigin") public R crnBacOrigin(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 @@ -468,6 +488,10 @@ @ManagerAuth(memo = "反原点") @PostMapping("/crn/operator/reverseOrigin") public R reverseOrigin(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 @@ -503,6 +527,10 @@ @ManagerAuth(memo = "任务完成") @PostMapping("/crn/operator/taskComplete") public R crnTaskComplete(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 @@ -532,6 +560,10 @@ @ManagerAuth(memo = "清除命令") @PostMapping("/crn/operator/clearCommand") public R crnClearCommand(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } if (param.getCrnNo() == null) { throw new CoolException("请选择堆垛机"); } @@ -552,6 +584,10 @@ @ManagerAuth(memo = "手动复位") @PostMapping("/crn/operator/handleReset") public R handleReset(CrnOperatorParam param) throws Exception { // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } if (param.getCrnNo() == null) { throw new CoolException("请选择堆垛机"); } @@ -590,6 +626,10 @@ @ManagerAuth(memo = "切换联机模式") @PostMapping("/crn/operator/auto") public R crnAuto(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } short[] array = new short[9]; CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 @@ -601,6 +641,10 @@ @ManagerAuth(memo = "切换半手动模式") @PostMapping("/crn/operator/semiAutomatic") public R crnsemiAutomatic(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } short[] array = new short[9]; CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 @@ -612,6 +656,10 @@ @ManagerAuth(memo = "切换手动模式") @PostMapping("/crn/operator/hand") public R onlineWrk1(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } short[] array = new short[9]; CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 @@ -623,6 +671,10 @@ @ManagerAuth(memo = "申请完成任务") @PostMapping("/crn/operator/onlineWrk1") public R onlineWrk2(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } short[] array = new short[9]; CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 @@ -634,6 +686,10 @@ @ManagerAuth(memo = "申请取消任务") @PostMapping("/crn/operator/onlineWrk2") public R onlineWrk3(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } short[] array = new short[9]; CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 @@ -645,6 +701,10 @@ @ManagerAuth(memo = "清除联机任务") @PostMapping("/crn/operator/onlineWrk3") public R onlineWrk4(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } short[] array = new short[9]; CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 @@ -656,6 +716,10 @@ @ManagerAuth(memo = "恢复联机任务") @PostMapping("/crn/operator/onlineWrk4") public R crnHand(CrnOperatorParam param){ // 系统运行状态判断 if (SystemProperties.WCS_RUNNING_STATUS.get()) { return R.error("wcs系统状态为开启"); } short[] array = new short[9]; CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -145,9 +145,19 @@ if (Cools.isEmpty(locMast) || null==locMast.getLocNo()){ return R.error(); } if (!Cools.isEmpty(locMast.getContainerCode())){ locMast.setBarcode(locMast.getContainerCode()); } if (locMast.getEmptyContainer$().equals("N") ){ if (locMast.getContainerCode().isEmpty() || locMast.getContainerTypeCode().isEmpty()){ return R.error("容器编码或容器类型有误"); } } locMast.setModiUser(getUserId()); locMast.setModiTime(new Date()); locMastService.updateById(locMast); locMastService.toWmsLocStatus(locMast); return R.ok(); } src/main/java/com/zy/asrs/entity/LocMast.java
@@ -178,6 +178,23 @@ @ApiModelProperty(value= "") private String status; @TableField(exist = false) private String containerCode; @TableField(exist = false) private String containerTypeCode; @TableField(exist = false) private String emptyContainer; public String getEmptyContainer$(){ if (Cools.isEmpty(this.emptyContainer)){ return ""; } if (this.emptyContainer.equals("1")){ return "Y"; }else { return "N"; } } public String getIoTime$(){ if (Cools.isEmpty(this.ioTime)){ return ""; src/main/java/com/zy/asrs/entity/WmsLocStatus.java
New file @@ -0,0 +1,13 @@ package com.zy.asrs.entity; import lombok.Data; @Data public class WmsLocStatus { private String warehouseId; private String locationCode; private String status; private String containerCode; private String containerTypeCode; private String emptyContainer; } src/main/java/com/zy/asrs/service/LocMastService.java
@@ -1,6 +1,7 @@ package com.zy.asrs.service; import com.baomidou.mybatisplus.service.IService; import com.core.common.R; import com.zy.asrs.entity.LocMast; import java.util.List; @@ -49,4 +50,5 @@ List<LocMast> selectLocByLev(Integer lev); R toWmsLocStatus(LocMast locMast); } src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -1,16 +1,34 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WmsLocStatus; import com.zy.asrs.entity.param.TaskOverToWms; import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; import com.zy.asrs.mapper.LocMastMapper; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.utils.Utils; import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @Service("locMastService") public class LocMastServiceImpl extends ServiceImpl<LocMastMapper, LocMast> implements LocMastService { @Value("${wms.url}") private String wmsUrl; @Autowired private ApiLogService apiLogService; @Override public List<Integer> queryDistinctRow(Integer crnNo) { @@ -61,4 +79,52 @@ public List<LocMast> selectLocByLev(Integer lev) { return this.baseMapper.selectLocByLev(lev); } @Override public R toWmsLocStatus(LocMast locMast) { String response = null; Map<String, Object> map = new HashMap<>(); map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2"); WmsLocStatus param = new WmsLocStatus(); param.setWarehouseId("1688469798893297665"); param.setLocationCode(Utils.getWmsLocNo(locMast.getLocNo())); param.setEmptyContainer(locMast.getEmptyContainer$()); if (locMast.getLocSts().equals("Z")){ param.setStatus("JY"); }else { param.setStatus("QY"); } if (Cools.isEmpty(locMast.getBarcode()) || locMast.getLocSts().equals("O")){ param.setContainerCode(""); param.setContainerTypeCode(""); }else { param.setContainerCode(locMast.getBarcode()); param.setContainerTypeCode(locMast.getContainerTypeCode()); } try { response = new HttpHandler.Builder() .setHeaders(map) .setUri(wmsUrl) .setPath("wcsManager/wcsInterface/locationUpdate") .setJson(JSON.toJSONString(param)) .build() .doPost(); }catch (Exception e){ log.error("堆垛机任务完成,请求wms任务完成接口失败"); } JSONObject jsonObject = JSON.parseObject(response); apiLogService.save("Wms变更货位状态" ,wmsUrl+"wcsManager/wcsInterface/inboundTaskApply" ,null ,"127.0.0.1" ,JSON.toJSONString(param) ,response ,true ); return null; } } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -109,11 +109,9 @@ staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && (workNo >= 0) && staProtocol.isPakMk()) { Short stano = staProtocol.getStaNo(); // 尺寸检测异常 boolean back = false; @@ -148,6 +146,12 @@ } // 退回 if (back) { if (stano == inSta.getBackSta().shortValue()){ continue; } if (workNo == 0 && stano == 0){ continue; } // News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); staProtocol.setWorkNo(workNo); staProtocol.setStaNo(inSta.getBackSta().shortValue()); @@ -161,6 +165,11 @@ } continue; } // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && (workNo >= 0) && staProtocol.isPakMk()) { // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); if (barcodeThread == null) { src/main/java/com/zy/asrs/utils/Utils.java
@@ -18,29 +18,49 @@ private static final DecimalFormat fmt = new DecimalFormat("##0.00"); public static String getWmsRow(String loc){ String row = loc.substring(0, 2); String bay = loc.substring(3, 5); String lev = loc.substring(5, 7); String locNo = null; public static String getWmsLocNo(String locNo) { String loc = null; int row = Integer.parseInt(locNo.substring(0, 2)); int bay = Integer.parseInt(locNo.substring(2, 5))-1; int lev = Integer.parseInt(locNo.substring(5, 7)); Integer sssc = getRowZ(row); Integer fz = getFZ(row, sssc); Integer fz1 = getFZ1(row, sssc); ArrayList<String> list = new ArrayList<>(); list.add("01");list.add("02");list.add("03");list.add("04"); int i = list.indexOf(row); if (i != -1){ if (i == 0){ locNo = "01"+"-"+bay+"-"+lev+"-"+"01-02"; }else if (i == 1) { locNo = "01"+"-"+bay+"-"+lev+"-"+"01-01"; }else if (i == 2) { locNo = "01"+"-"+bay+"-"+lev+"-"+"02-01"; }else if (i == 3) { locNo = "01"+"-"+bay+"-"+lev+"-"+"02-02"; } } return locNo; //System.out.println(sssc + "-" + bay + "-" + lev + "-" + fz + "-" + fz1); loc = String.format("%02d",sssc) + "-" + String.format("%02d",bay) + "-" + String.format("%02d",lev) + "-" + String.format("%02d",fz) + "-" + String.format("%02d",fz1); return loc; } public static Integer getRowZ(int row) { return row < 5 ? 1 : (row + 1) / 4 + 1; } public static Integer getFZ(int row, int crnNo) { List<Integer> ii = new ArrayList<Integer>(); if (crnNo == 1) { ii.add(3); ii.add(0); } else { ii.add(2); if (crnNo > 2) ii.add(1); } return ii.contains(row % 4) ? 2 : 1; } public static Integer getFZ1(int row, int crnNo) { if (crnNo == 2) return 1; List<Integer> ii = new ArrayList<Integer>(); ii.add(2); ii.add(3); int s = 2; if (ii.contains(row % 4)) { s = 1; } return crnNo == 1 ? s : 3 - s; } //转换wms传输的库位号 @@ -354,7 +374,7 @@ // slaveProperties.setGroupCount(4); // Integer deepRow = getDeepRow(slaveProperties, 6); // System.out.println(deepRow); CrnSlave.CrnStn crnStnByStaNo = getCrnStnByStaNo(235, true); System.out.println(crnStnByStaNo); System.out.println(getWmsLocNo("1900201")); } } src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -235,7 +235,6 @@ taskOverToWms.setEquipmentCode(map1.get(taskWrk.getTargetPoint())); //设备编码 taskOverToWms.setSourceLocationCode(taskWrk.getOriginStartPoint()); //源库位 } taskOverToWms.setTaskStatus("location_done"); //任务状态 String response = null; try { src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -124,9 +124,12 @@ // 写数据 ID+目标站 case 2: write((StaProtocol)task.getData()); read(); break; case 3: write2((StaProtocol)task.getData()); read(); break; default: break; } src/main/webapp/static/wcs/css/crn.css
@@ -14,7 +14,7 @@ background-color: #fff; border-radius: 5px; box-shadow: 0 0 3px rgba(0,0,0,.3); height: 200px; height: 300px; } /* 左 */ @@ -232,7 +232,7 @@ /* -------------------- 第四模块 -------------------- */ .crn-output-board { margin-top: 10px; height: 200px; height: 350px; background-color: #fff; border-radius: 5px; box-shadow: 0 0 3px rgba(0,0,0,.3); src/main/webapp/static/wms/js/locMast/locMast.js
@@ -459,6 +459,9 @@ barcode: $('#barcode').val(), PdcType: $('#PdcType').val(), ctnNo: $('#ctnNo').val(), containerCode:$('#containerCode').val(), containerTypeCode:$('#containerTypeCode').val(), emptyContainer:$('#emptyContainer').val(), }; $.ajax({ src/main/webapp/views/deviceOperate/crnOperate.html
@@ -79,7 +79,7 @@ <el-button @click="requestOperate('siteMove')" type="primary">站到站</el-button> <el-button @click="requestOperate('taskComplete')" type="primary">任务完成</el-button> <el-button @click="requestOperate('clearCommand')" type="primary">清除命令</el-button> <el-button @click="requestOperate('handleReset')" type="primary">复位</el-button> <!-- <el-button @click="requestOperate('handleReset')" type="primary">复位</el-button>--> <br/> <br/> <el-button @click="requestOperate('auto')" type="warning">联机</el-button> src/main/webapp/views/locMast/locMast_detail.html
@@ -84,29 +84,45 @@ </div> </div> <div class="layui-inline" style="width:80%;"> <label class="layui-form-label">排:</label> <label class="layui-form-label">容器编码:</label> <div class="layui-input-inline"> <input id="row1" class="layui-input" type="text" autocomplete="off" disabled="disabled"> <input id="containerCode" class="layui-input" type="text" autocomplete="off"> </div> </div> <div class="layui-inline" style="width:80%;"> <label class="layui-form-label">排:</label> <div class="layui-input-inline"> <input id="row1" class="layui-input" type="text" autocomplete="off" disabled="disabled"> </div> <label class="layui-form-label">容器类型:</label> <div class="layui-input-inline"> <input id="containerTypeCode" class="layui-input" type="text" autocomplete="off" > </div> </div> <div class="layui-inline" style="width:80%;"> <label class="layui-form-label">列:</label> <label class="layui-form-label">空托盘:</label> <div class="layui-input-inline"> <input id="bay1" class="layui-input" type="text" autocomplete="off" disabled="disabled"> <select id="emptyContainer" name="emptyContainer" lay-verify="required"> <option value="1" selected = "selected">是</option> <option value="0">否</option> </select> </div> </div> <div class="layui-inline" style="width:80%;"> <label class="layui-form-label">层:</label> <div class="layui-input-inline"> <input id="lev1" class="layui-input" type="text" autocomplete="off" disabled="disabled"> </div> </div> <!-- <div class="layui-inline" style="width:80%;">--> <!-- <label class="layui-form-label">排:</label>--> <!-- <div class="layui-input-inline">--> <!-- <input id="row1" class="layui-input" type="text" autocomplete="off" disabled="disabled">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-inline" style="width:80%;">--> <!-- <label class="layui-form-label">列:</label>--> <!-- <div class="layui-input-inline">--> <!-- <input id="bay1" class="layui-input" type="text" autocomplete="off" disabled="disabled">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-inline" style="width:80%;">--> <!-- <label class="layui-form-label">层:</label>--> <!-- <div class="layui-input-inline">--> <!-- <input id="lev1" class="layui-input" type="text" autocomplete="off" disabled="disabled">--> <!-- </div>--> <!-- </div>--> <div class="layui-inline" style="width:80%;display: none"> <label class="layui-form-label">满 板:</label> <div class="layui-input-inline" style="text-align: left"> src/main/webapp/views/realtimeWatch/crn2.html
@@ -142,92 +142,92 @@ <div class="crn-operation"> <!-- 遮罩层 --> <div class="crn-operation-shade"> <span class="crn-operation-shade-span"> WCS 系统运行中,请停止后操作 </span> </div> <!-- <div class="crn-operation-shade">--> <!-- <span class="crn-operation-shade-span">--> <!-- WCS 系统运行中,请停止后操作--> <!-- </span>--> <!-- </div>--> <!-- 设备任务选择 --> <div class="task-select"> <!-- 堆垛机选择 --> <div id="crn-select" class="operator-item" style="width: 55%"> <span class="select-title">堆垛机号</span> <div class="select-container" style="padding: 20px 0;"> <label><input type="radio" name="crnSelect" value="1" checked> 1号堆垛机</label> <label><input type="radio" name="crnSelect" value="2"> 2号堆垛机</label> <label><input type="radio" name="crnSelect" value="3"> 3号堆垛机</label> <label><input type="radio" name="crnSelect" value="4"> 4号堆垛机</label> <label><input type="radio" name="crnSelect" value="5"> 5号堆垛机</label> <label><input type="radio" name="crnSelect" value="6"> 6号堆垛机</label> </div> </div> <!-- <div id="crn-select" class="operator-item" style="width: 55%">--> <!-- <span class="select-title">堆垛机号</span>--> <!-- <div class="select-container" style="padding: 20px 0;">--> <!-- <label><input type="radio" name="crnSelect" value="1" checked> 1号堆垛机</label>--> <!-- <label><input type="radio" name="crnSelect" value="2"> 2号堆垛机</label>--> <!-- <label><input type="radio" name="crnSelect" value="3"> 3号堆垛机</label>--> <!-- <label><input type="radio" name="crnSelect" value="4"> 4号堆垛机</label>--> <!-- <label><input type="radio" name="crnSelect" value="5"> 5号堆垛机</label>--> <!-- <label><input type="radio" name="crnSelect" value="6"> 6号堆垛机</label>--> <!-- </div>--> <!-- </div>--> <!-- 源站/源库位 选择 --> <div id="source-select" class="operator-item"> <span class="select-title">源站/源库位</span> <div class="select-container"> <div class="select-container-item"> <span>站</span> <label><input id="sourceStaNo" type="number" name="points" min="0" /></label> </div> <div class="select-container-item"> <span>排</span> <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> </div> <div class="select-container-item"> <span>列</span> <label><input id="sourceBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label> </div> <div class="select-container-item"> <span>层</span> <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> </div> </div> </div> <!-- 目标站/目标库位 选择 --> <div id="target-select" class="operator-item"> <span class="select-title">目标站/目标库位</span> <div class="select-container"> <div class="select-container-item"> <span>站</span> <label><input id="staNo" type="number" name="points" min="0" /></label> </div> <div class="select-container-item"> <span>排</span> <label><input id="row" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> </div> <div class="select-container-item"> <span>列</span> <label><input id="bay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label> </div> <div class="select-container-item"> <span>层</span> <label><input id="lev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> </div> </div> </div> <!-- <div id="source-select" class="operator-item">--> <!-- <span class="select-title">源站/源库位</span>--> <!-- <div class="select-container">--> <!-- <div class="select-container-item">--> <!-- <span>站</span>--> <!-- <label><input id="sourceStaNo" type="number" name="points" min="0" /></label>--> <!-- </div>--> <!-- <div class="select-container-item">--> <!-- <span>排</span>--> <!-- <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>--> <!-- </div>--> <!-- <div class="select-container-item">--> <!-- <span>列</span>--> <!-- <label><input id="sourceBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label>--> <!-- </div>--> <!-- <div class="select-container-item">--> <!-- <span>层</span>--> <!-- <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>--> <!-- </div>--> <!-- </div>--> <!-- </div>--> <!-- <!– 目标站/目标库位 选择 –>--> <!-- <div id="target-select" class="operator-item">--> <!-- <span class="select-title">目标站/目标库位</span>--> <!-- <div class="select-container">--> <!-- <div class="select-container-item">--> <!-- <span>站</span>--> <!-- <label><input id="staNo" type="number" name="points" min="0" /></label>--> <!-- </div>--> <!-- <div class="select-container-item">--> <!-- <span>排</span>--> <!-- <label><input id="row" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>--> <!-- </div>--> <!-- <div class="select-container-item">--> <!-- <span>列</span>--> <!-- <label><input id="bay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label>--> <!-- </div>--> <!-- <div class="select-container-item">--> <!-- <span>层</span>--> <!-- <label><input id="lev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>--> <!-- </div>--> <!-- </div>--> <!-- </div>--> </div> <!-- 设备任务操作 --> <div class="task-operator"> <fieldset> <legend>手动操作</legend> <div class="button-group"> <button class="item" onclick="put()">入库</button> <button class="item" onclick="take()">出库</button> <button class="item" onclick="stockMove()">库位转移</button> <button class="item" onclick="siteMove()">站到站</button> <!-- <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="pause()">暂停</button>--> <!-- <button class="item" onclick="boot()">启动</button>--> <button class="item" onclick="clearCommand()">清除命令</button> <button class="item" onclick="handleReset()">复位</button> </div> </fieldset> </div> <!-- <!– 设备任务操作 –>--> <!-- <div class="task-operator">--> <!-- <fieldset>--> <!-- <legend>手动操作</legend>--> <!-- <div class="button-group">--> <!-- <button class="item" onclick="put()">入库</button>--> <!-- <button class="item" onclick="take()">出库</button>--> <!-- <button class="item" onclick="stockMove()">库位转移</button>--> <!-- <button class="item" onclick="siteMove()">站到站</button>--> <!-- <!– <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="pause()">暂停</button>–>--> <!-- <!– <button class="item" onclick="boot()">启动</button>–>--> <!-- <button class="item" onclick="clearCommand()">清除命令</button>--> <!-- <button class="item" onclick="handleReset()">复位</button>--> <!-- </div>--> <!-- </fieldset>--> <!-- </div>--> </div> <!-- 堆垛机日志输出 -->