src/main/java/com/zy/asrs/controller/CrnController.java
@@ -420,6 +420,7 @@ crnCommand.setCrnNo(crn.getId()); // 堆垛机编号 crnCommand.setTaskMode(CrnTaskModeType.CLEAR); crnCommand.setAckFinish((short) 0); // 任务完成确认位 crnCommand.setCommand((short) 0); // 任务完成确认位 // 延时发送 Thread.sleep(1000L); if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) { src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -22,46 +22,53 @@ private static final long serialVersionUID = 1L; @ApiModelProperty(value= "库位号") @TableId(value = "loc_no", type = IdType.INPUT) @TableField("loc_no") private String locNo; @ApiModelProperty(value= "商品编号") @TableId(value = "matnr", type = IdType.INPUT) private String matnr; @ApiModelProperty(value= "产品编码") @TableId(value = "mat_no", type = IdType.INPUT) @TableField("mat_no") private String matNo; @ApiModelProperty(value= "商品名称") private String maktx; @ApiModelProperty(value= "产品名称") @TableId(value = "mat_name") @TableField("mat_name") private String matName; @ApiModelProperty(value= "规格") private String lgnum; private String specs; @ApiModelProperty(value= "型号") private String type; @ApiModelProperty(value= "尺寸") private String size; @ApiModelProperty(value= "条码") @ApiModelProperty(value= "颜色") private String color; @ApiModelProperty(value= "批号") @ApiModelProperty(value= "单重") private Double weight; @ApiModelProperty(value= "供应商") private String supplier; @ApiModelProperty(value= "单据编号") @ApiModelProperty(value= "仓库") private String warehouse; @ApiModelProperty(value= "品项数") @ApiModelProperty(value= "品牌") private String brand; @ApiModelProperty(value= "数量") private Double anfme; private Double qty; @ApiModelProperty(value= "单位") private String altme; private String unit; @ApiModelProperty(value= "托盘条码") private String zpallet; @ApiModelProperty(value= "客户名称") @ApiModelProperty(value= "用户ID") private String bname; @ApiModelProperty(value= "备注") @@ -82,6 +89,31 @@ @ApiModelProperty(value= "添加时间") @TableField("appe_time") private Date appeTime; @TableField("bill_no") private String billNo; @TableField("seq_no") private int seqNo; @TableField("bill_type") private int billType; @TableField("object_id") private String objectId; @TableField("object_name") private String objectName; @TableField("det_id") private int detId; @TableId(value = "Item_batch", type = IdType.INPUT) @TableField("Item_batch") private String itemBatch; @TableField("order_no") private String orderNo; public String getLocNo$(){ LocMastService service = SpringUtils.getBean(LocMastService.class); @@ -124,5 +156,4 @@ } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); } } src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -1,19 +1,24 @@ package com.zy.asrs.entity; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.system.entity.User; import com.zy.system.service.UserService; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; @Data @NoArgsConstructor @AllArgsConstructor @TableName("asr_wrk_detl") public class WrkDetl implements Serializable { @@ -33,65 +38,59 @@ @TableField("io_time") private Date ioTime; /** * 物料 */ @ApiModelProperty(value= "商品编号") private String matnr; @ApiModelProperty(value= "产品编码") @TableId(value = "mat_no") @TableField("mat_no") private String matNo; /** * 物料描述 */ @ApiModelProperty(value= "商品名称") private String maktx; @ApiModelProperty(value= "产品名称") @TableId(value = "mat_name") @TableField("mat_name") private String matName; /** * 仓库号 */ @ApiModelProperty(value= "规格") private String lgnum; private String specs; /** * 仓库号 */ @ApiModelProperty(value= "型号") private String type; @ApiModelProperty(value= "尺寸") private String size; /** * 条码 */ @ApiModelProperty(value= "条码") @ApiModelProperty(value= "颜色") private String color; /** * 批号 */ @ApiModelProperty(value= "批号") private String supplier; @ApiModelProperty(value= "单重") private Double weight; /** * 单据编号 */ @ApiModelProperty(value= "单据编号") private String warehouse; @TableField("bill_no") private String billNo; /** * 品项数 * 序号 */ @ApiModelProperty(value= "品项数") @ApiModelProperty(value= "序号") @TableField("seq_no") private Integer seqNo; /** * 仓库号 */ @ApiModelProperty(value= "品牌") private String brand; /** * 数量 */ @ApiModelProperty(value= "数量") private Double anfme; private Double qty; /** * 单位 */ @ApiModelProperty(value= "单位") private String altme; private String unit; /** * 托盘条码 @@ -100,9 +99,9 @@ private String zpallet; /** * 客户名称 * 用户ID */ @ApiModelProperty(value= "客户名称") @ApiModelProperty(value= "用户ID") private String bname; /** @@ -139,6 +138,16 @@ @TableField("appe_time") private Date appeTime; @ApiModelProperty(value= "库位号") @TableField(exist = false) private String locNo; @TableField("Item_batch") private String itemBatch; @TableField("order_no") private String orderNo; public String getIoTime$(){ if (Cools.isEmpty(this.ioTime)){ return ""; src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -111,6 +111,8 @@ if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { continue; } } else { continue; } // 获取入库站信息 @@ -662,7 +664,7 @@ wrkMast.setUpdMk("Y"); wrkMastMapper.updateById(wrkMast); // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行) // moveLocForDeepLoc(slave, shallowLoc); moveLocForDeepLoc(slave, shallowLoc); } log.error("{}任务出库失败,浅库位堵塞!", wrkMast.getWrkNo()); continue; @@ -1098,7 +1100,7 @@ ledCommand.setStaNo(wrkMast.getStaNo()); if (wrkMast.getIoType() != 110) { List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme()))); wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatNo(), wrkDetl.getMatName(), wrkDetl.getQty()))); } commands.add(ledCommand); } @@ -1228,7 +1230,7 @@ WrkDetl wrkDetl = new WrkDetl(); wrkDetl.setWrkNo(workNo); wrkDetl.setIoTime(new Date()); wrkDetl.setAnfme(locDetl.getAnfme()); wrkDetl.setQty(locDetl.getQty()); VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 wrkDetl.setAppeTime(new Date()); wrkDetl.setModiTime(new Date()); src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -38,7 +38,6 @@ WrkDetl wrkDetl = new WrkDetl(); wrkDetl.setWrkNo(workNo); wrkDetl.setIoTime(new Date()); wrkDetl.setAnfme(waitPakin.getAnfme()); // 数量 VersionUtils.setWrkDetl(wrkDetl, matCode); // 版本控制 wrkDetl.setZpallet(barcode); // 托盘条码 wrkDetl.setAppeTime(new Date()); src/main/java/com/zy/asrs/utils/VersionUtils.java
@@ -15,56 +15,50 @@ // 业务 ---------------------------------------------------------------------- public static void setWrkDetl(WrkDetl wrkDetl, MatCode matCode) { wrkDetl.setMatnr(matCode.getMatNo()); // 物料编号 wrkDetl.setMaktx(matCode.getMatName()); // 物料描述 wrkDetl.setLgnum(matCode.getStr2()); // 规格 wrkDetl.setType(matCode.getStr5()); // 型号 wrkDetl.setColor(matCode.getBarcode()); // 条码 wrkDetl.setSupplier(matCode.getStr6()); // 批号 wrkDetl.setWarehouse(matCode.getStr7()); // 单据编号 wrkDetl.setBrand(matCode.getStr3()); // 品项数 wrkDetl.setAltme(matCode.getStr1()); // 单位 wrkDetl.setBname(matCode.getStr4()); // 客户名称 // wrkDetl.setMatNo(matCode.getMatNo()); // 物料编号 // wrkDetl.setMatName(matCode.getMatName()); // 物料描述 // wrkDetl.setLgnum(matCode.getStr2()); // 规格 // wrkDetl.setType(matCode.getStr5()); // 型号 // wrkDetl.setColor(matCode.getBarcode()); // 条码 // wrkDetl.setSupplier(matCode.getStr6()); // 批号 // wrkDetl.setWarehouse(matCode.getStr7()); // 单据编号 // wrkDetl.setBrand(matCode.getStr3()); // 品项数 // wrkDetl.setAltme(matCode.getStr1()); // 单位 // wrkDetl.setBname(matCode.getStr4()); // 客户名称 } public static void setWrkDetl(WrkDetl wrkDetl, LocDetl locDetl) { wrkDetl.setMatnr(locDetl.getMatnr()); // 物料编号 wrkDetl.setMaktx(locDetl.getMaktx()); // 物料描述 wrkDetl.setLgnum(locDetl.getLgnum()); // 规格 wrkDetl.setType(locDetl.getType()); // 型号 wrkDetl.setColor(locDetl.getColor()); // 条码 wrkDetl.setSupplier(locDetl.getSupplier()); // 批号 wrkDetl.setWarehouse(locDetl.getWarehouse()); // 单据编号 wrkDetl.setBrand(locDetl.getBrand()); // 品项数 wrkDetl.setAltme(locDetl.getAltme()); // 单位 wrkDetl.setBname(locDetl.getBname()); // 客户名称 wrkDetl.setMatNo(locDetl.getMatNo()); // 产品编号 wrkDetl.setMatName(locDetl.getMatName()); // 产品描述 wrkDetl.setSpecs(locDetl.getSpecs()); // 规格 wrkDetl.setUnit(locDetl.getUnit()); // 单位 wrkDetl.setSize(locDetl.getSize()); // 尺寸 wrkDetl.setColor(locDetl.getColor()); // 颜色 wrkDetl.setWeight(locDetl.getWeight()); // 单重 wrkDetl.setZpallet(locDetl.getZpallet()); // 托盘条码 } public static void setLocDetl(LocDetl locDetl, MatCode matCode) { locDetl.setMatnr(matCode.getMatNo()); // 物料编号 locDetl.setMaktx(matCode.getMatName()); // 物料描述 locDetl.setLgnum(matCode.getStr2()); // 规格 locDetl.setType(matCode.getStr5()); // 型号 locDetl.setColor(matCode.getBarcode()); // 条码 locDetl.setSupplier(matCode.getStr6()); // 批号 locDetl.setWarehouse(matCode.getStr7()); // 单据编号 locDetl.setBrand(matCode.getStr3()); // 品项数 locDetl.setAltme(matCode.getStr1()); // 单位 locDetl.setBname(matCode.getStr4()); // 客户名称 // locDetl.setMatNo(matCode.getMatNo()); // 物料编号 // locDetl.setMatName(matCode.getMatName()); // 物料描述 // locDetl.setLgnum(matCode.getStr2()); // 规格 // locDetl.setType(matCode.getStr5()); // 型号 // locDetl.setColor(matCode.getBarcode()); // 条码 // locDetl.setSupplier(matCode.getStr6()); // 批号 // locDetl.setWarehouse(matCode.getStr7()); // 单据编号 // locDetl.setBrand(matCode.getStr3()); // 品项数 // locDetl.setAltme(matCode.getStr1()); // 单位 // locDetl.setBname(matCode.getStr4()); // 客户名称 } public static void setLocDetl(LocDetl locDetl, WrkDetl wrkDetl) { locDetl.setMatnr(wrkDetl.getMatnr()); // 物料编号 locDetl.setMaktx(wrkDetl.getMaktx()); // 物料描述 locDetl.setLgnum(wrkDetl.getLgnum()); // 规格 locDetl.setType(wrkDetl.getType()); // 型号 locDetl.setColor(wrkDetl.getColor()); // 条码 locDetl.setSupplier(wrkDetl.getSupplier()); // 批号 locDetl.setWarehouse(wrkDetl.getWarehouse()); // 单据编号 locDetl.setBrand(wrkDetl.getBrand()); // 品项数 locDetl.setAltme(wrkDetl.getAltme()); // 单位 locDetl.setBname(wrkDetl.getBname()); // 客户名称 locDetl.setMatNo(wrkDetl.getMatNo()); // 产品编号 locDetl.setMatName(wrkDetl.getMatName()); // 产品描述 locDetl.setSpecs(wrkDetl.getSpecs()); // 规格 locDetl.setUnit(wrkDetl.getUnit()); // 单位 locDetl.setSize(wrkDetl.getSize()); // 尺寸 locDetl.setColor(wrkDetl.getColor()); // 颜色 locDetl.setQty(wrkDetl.getQty()); // 数量 locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码 } @@ -73,19 +67,16 @@ **/ public static void locMoveCheckLocType(LocMast sourceLoc, LocMast loc){ // 如果源库位是高库位,目标库位是低库位 if (sourceLoc.getLocType1() == 2 && loc.getLocType1() == 1) { throw new CoolException("高库位不能移转至低库位"); } // if (sourceLoc.getLocType1() == 2 && loc.getLocType1() == 1) { // throw new CoolException("高库位不能移转至低库位"); // } } /** * 库位移转时类型检测 **/ public static boolean locMoveCheckLocType(LocMast loc, LocTypeDto dto){ // 如果源库位是高库位,目标库位是低库位 if (dto.getLocType1() == 2 && loc.getLocType1() == 1) { return false; } return true; } src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -24,6 +24,7 @@ import com.zy.core.model.protocol.CrnProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import java.text.MessageFormat; import java.util.Date; @@ -50,6 +51,11 @@ @SuppressWarnings("InfiniteLoopStatement") public void run() { this.connect(); // try { // Thread.sleep(2000); // } catch (InterruptedException e) { // e.printStackTrace(); // } while (true) { try { int step = 1; @@ -137,7 +143,7 @@ log.error("堆垛机plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); initCrn(); } melsecMcNet.ConnectClose(); // melsecMcNet.ConnectClose(); return result; } @@ -146,9 +152,11 @@ */ private void readStatus(){ try { if (this.slave.getId() == 1) { System.out.println("==="); } // if (this.slave.getId() == 1 && flag1.equals(0)) { // Thread.sleep(3000); // flag1=1; // System.out.println("==="); // } OperateResultExOne<byte[]> result = melsecMcNet.Read("D20", (short) 70); if (result.IsSuccess) { if (null == crnProtocol) { @@ -190,6 +198,7 @@ } } // 根据实时信息更新数据库 BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); BasCrnp basCrnp = new BasCrnp(); src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -123,7 +123,7 @@ staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*2)); // 工作号 } } Thread.sleep(50); Thread.sleep(200); OperateResultExOne<byte[]> result0 = siemensS7Net.Read("DB101.0", (short) 166); if (result0.IsSuccess) { for (int i = 0; i < 83; i++) { @@ -137,7 +137,7 @@ staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result0.Content, i*2)); // 目标站 } } Thread.sleep(50); Thread.sleep(200); OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB102.0", (short) 166); if (result1.IsSuccess) { for (int i = 0; i < 83; i++) { @@ -181,7 +181,7 @@ } else { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】读取输送线plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); // log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } src/main/resources/application.yml
@@ -8,10 +8,10 @@ name: @pom.build.finalName@ datasource: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # url: jdbc:sqlserver://47.97.1.152:51433;databasename=xgmasrs # username: sa # password: Zoneyung@zy56$ url: jdbc:sqlserver://localhost:1433;databasename=xgmasrs # url: jdbc:sqlserver://47.97.1.152:51433;databasename=xgmasrs # username: sa # password: Zoneyung@zy56$ url: jdbc:sqlserver://10.10.10.238:1433;databasename=xgmasrs username: sa password: sa@123 mvc: @@ -37,7 +37,8 @@ enable: false wms: url: localhost:8080/xgmwms # url: 10.10.10.238:8080/xgmwms url: localhost:8082/xgmwms # 下位机配置 wcs-slave: @@ -185,34 +186,17 @@ id: 1 ip: 10.10.10.52 port: 51236 # LED1 # LED1 led[0]: id: 1 ip: 192.168.10.211 ip: 10.10.10.60 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 170 staArr: 173 # LED2 led[1]: id: 2 ip: 192.168.10.221 ip: 10.10.10.61 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 180 staArr: 182 src/main/resources/mapper/LocDetlMapper.xml
@@ -5,16 +5,17 @@ <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.zy.asrs.entity.LocDetl"> <result column="loc_no" property="locNo" /> <result column="matnr" property="matnr" /> <result column="maktx" property="maktx" /> <result column="lgnum" property="lgnum" /> <result column="type" property="type" /> <result column="mat_no" property="matNo" /> <result column="mat_name" property="matName" /> <result column="specs" property="specs" /> <result column="size" property="size" /> <result column="color" property="color" /> <result column="weight" property="weight" /> <result column="supplier" property="supplier" /> <result column="warehouse" property="warehouse" /> <result column="brand" property="brand" /> <result column="anfme" property="anfme" /> <result column="altme" property="altme" /> <result column="qty" property="qty" /> <result column="unit" property="unit" /> <result column="zpallet" property="zpallet" /> <result column="bname" property="bname" /> <result column="memo" property="memo" /> @@ -28,11 +29,11 @@ <if test="loc_no!=null and loc_no!='' "> and a.loc_no like '%' + #{loc_no} + '%' </if> <if test="matnr!=null and matnr!='' "> and a.matnr like '%' + #{matnr} + '%' <if test="matNo!=null and matNo!='' "> and a.mat_no like '%' + #{matNo} + '%' </if> <if test="maktx!=null and maktx!='' "> and a.maktx like '%' + #{maktx} + '%' <if test="matName!=null and matName!='' "> and a.mat_name like '%' + #{matName} + '%' </if> <if test="anfme!=null and anfme!='' "> and a.anfme like '%' + #{anfme} + '%' src/main/resources/mapper/WrkDetlMapper.xml
@@ -6,16 +6,17 @@ <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkDetl"> <result column="wrk_no" property="wrkNo" /> <result column="io_time" property="ioTime" /> <result column="matnr" property="matnr" /> <result column="maktx" property="maktx" /> <result column="lgnum" property="lgnum" /> <result column="type" property="type" /> <result column="mat_no" property="matNo" /> <result column="mat_name" property="matName" /> <result column="specs" property="specs" /> <result column="size" property="size" /> <result column="color" property="color" /> <result column="supplier" property="supplier" /> <result column="warehouse" property="warehouse" /> <result column="weight" property="weight" /> <result column="bill_no" property="billNo" /> <result column="seq_no" property="seqNo" /> <result column="brand" property="brand" /> <result column="anfme" property="anfme" /> <result column="altme" property="altme" /> <result column="qty" property="qty" /> <result column="unit" property="unit" /> <result column="zpallet" property="zpallet" /> <result column="bname" property="bname" /> <result column="memo" property="memo" /> src/main/webapp/static/css/console.css
@@ -1,512 +1,513 @@ * { margin: 0; overflow: hidden; } html,body { height: 100%; } #root { width: 100%; height: 100%; background-color: rgb(108,167,168); } .head { height: 10%; width: 20%; padding-top: 1%; padding-left: 1%; color: #FFFFFF; } .head h1 { font-weight: 400; letter-spacing:3px; } .head h6 { font-weight: 400; } #body { width: 100%; height: 23% ; position: absolute; bottom: 1%; } /* 控制开关 */ .system-state { display: inline-block; width: 15%; height: 100%; background-color: rgba(0, 0, 0, 0.3); border-radius: 15px; margin-left: 1%; } /* 堆垛机状态 */ .machine-status { display: inline-block; width: 15%; height: 100%; background-color: rgba(0, 0, 0, 0.3); border-radius: 15px; margin-left: 1%; } .state-ss { margin-left: 60px; * { margin: 0; overflow: hidden; } html,body { height: 100%; } #root { width: 100%; height: 100%; background-color: rgb(108,167,168); } .head { height: 10%; width: 20%; padding-top: 1%; padding-left: 1%; color: #FFFFFF; } .head h1 { font-weight: 400; letter-spacing:3px; } .head h6 { font-weight: 400; } #body { width: 100%; height: 23% ; position: absolute; bottom: 1%; } /* 控制开关 */ .system-state { display: inline-block; width: 15%; height: 100%; background-color: rgba(0, 0, 0, 0.3); border-radius: 15px; margin-left: 1%; } /* 堆垛机状态 */ .machine-status { display: inline-block; width: 15%; height: 100%; background-color: rgba(0, 0, 0, 0.3); border-radius: 15px; margin-left: 1%; } .state-ss { margin-left: 60px; } } /* 输送线状态 */ .line-status { display: inline-block; width: 15%; height: 100%; background-color: rgba(0, 0, 0, 0.3); border-radius: 15px; margin-left: 1%; } .line-ss { display: inline-block; float: right; height: 15px; width: 40px; margin-top: 10px; margin-right: 15px; line-height: 15px; text-align: center; background-color: rgba(5, 5, 5, 0.3); color: #ffdd00; } /* 条码扫描器 */ .bar-code { display: inline-block; width: 49%; height: 100%; background-color: rgba(0, 0, 0, 0.3); border-radius: 15px; margin-left: 1%; } /*扫码表单*/ .tablebox { display: inline-block; width: 290px; height: 162px; margin-left: 1.5%; color: white; font-size: 14px; list-style: none; line-height: 27px; text-indent: 10px; } .table-head { width: 100%; height: 27px; background:linear-gradient(to right, rgb(94, 193, 184),rgb(12,71,63)); } .right { float: right; text-indent: 10px; padding-right: 10px; } .table-body li { background-color: #5D7677; } .table-body li:nth-child(even) { background-color: #4A6565; } /* 输送线状态 */ .line-status { display: inline-block; width: 15%; height: 100%; background-color: rgba(0, 0, 0, 0.3); border-radius: 15px; margin-left: 1%; } .line-ss { display: inline-block; float: right; height: 15px; width: 40px; margin-top: 10px; margin-right: 15px; line-height: 15px; text-align: center; background-color: rgba(5, 5, 5, 0.3); color: #ffdd00; } /* 条码扫描器 */ .bar-code { display: inline-block; width: 49%; height: 100%; background-color: rgba(0, 0, 0, 0.3); border-radius: 15px; margin-left: 1%; } /*扫码表单*/ .tablebox { display: inline-block; width: 290px; height: 162px; margin-left: 1.5%; color: white; font-size: 14px; list-style: none; line-height: 27px; text-indent: 10px; } .table-head { width: 100%; height: 27px; background:linear-gradient(to right, rgb(94, 193, 184),rgb(12,71,63)); } .right { float: right; text-indent: 10px; padding-right: 10px; } .table-body li { background-color: #5D7677; } .table-body li:nth-child(even) { background-color: #4A6565; } /* 控制表头 */ .body-head { height: 35px; width: 100%; background-image: url(../images/status_bar_1.png); background-repeat: no-repeat; margin-left: 5%; margin-top: 20px; text-indent: 25px; color: white; } .system-icon-open { width: 153px; height: 153px; background-image: url(../images/start48.png); display: inline-block; } .system-icon-close { width: 153px; height: 153px; background-image: url(../images/stop48.png); display: inline-block; } .switch_r { color: #FFFFFF; font-size: 14px; width: 130px; height: 153px; float: right; padding-top: 30px; } #system-run-desc { font-size: 20px; margin-top: 15px; } .state { height: 34px; width: 200px; background-color: rgba(255,255,255,0.1); background-image: url(../images/stacker.png); background-repeat: no-repeat; border-radius: 17px 0 0 17px; padding-left: 50px; line-height: 34px; margin-bottom: 10px; margin-left: 5%; color: #FFFFFF; font-size: 10px; } .states { background-image: url(../images/line.png); margin-bottom:54px; } .button { margin-left: 5%; font-size: 14px; color: #FFFFFF; } /* 入库 */ .machine-put-flag { padding: 0 10px; background-color: rgb(163,214,242); } /* 出库 */ .machine-take-flag { padding: 0 10px; background-color: rgb(151,180,0); } /* 库到库 */ .machine-stock-move-flag { padding: 0 10px; background-color: rgb(58,77,249); } /* 站到站 */ .machine-site-move-flag { padding: 0 10px; background-color: rgb(240,140,10); } /* PToP */ .machine-p-move-flag { padding: 0 10px; background-color: rgb(29,152,23); } /* 异常 */ .machine-error-flag { padding: 0 10px; background-color: rgb(252,48,48); } /* 自动 */ .machine-auto-flag { padding: 0 10px; background-color: rgb(132,255,115); } /* 非自动/手动 */ .machine-unauto-flag { padding: 0 10px; background-color: rgb(184,184,184); } /* 自动+有物+ID */ .site-auto-run-id { padding: 0 25px; background-color: rgb(252,48,48); } /* 自动+有物 */ .site-auto-run { padding: 0 25px; background-color: rgb(250,81,246); } /* 自动+ID */ .site-auto-id { padding: 0 10px; background-color: rgb(196,196,0); } .site-auto { padding: 0 10px; background-color: rgb(120,255,129); } /* 非自动/手动 */ .site-unauto { padding: 0 10px; background-color: rgb(184,184,184); } #code { background-image: url(../images/status_bar_2.png); background-repeat: no-repeat; margin-left: 2%; } /* 站点 */ .site { color: #333; height: 18px; border: 1px solid rgb(108,167,168); cursor: pointer; width: 50px; text-align: center; background-color: rgb(120,255,129); font-size: 13px; } /*空站点*/ /* ------------------ 输送线总成 ------------------ */ .site-row { position: absolute; top: 122px; } /* 输送线第一列 */ .site-row-1 { top: 205px; left: 172px; } .site-row-1 .site { width: 70px; } /* 输送线第二列 */ .site-row-2 { top: 205px; left: 243px; } .site-row-2 .site { width: 70px; } .site-row-3 { top: 246px; left: 314px; } .site-row-3 .site { width: 70px; } .site-row-4 { top: 205px; left: 314px; } .site-row-5 { top: 71px; left: 456px; } .site-row-5 .site { width: 70px; } .site-row-6 { top: 71px; left: 528px; } .site-row-6 .site { width: 70px; } /* ------------------ 货架总成 ------------------ */ .main-part { position: absolute; top: 20px; left: 600px; } .main-part .lane { margin-top: 30px; } /* 库位组 */ .stock-group .item { float: left; border-top: 1px solid rgb(194,76,65); border-bottom: 1px solid rgb(194,76,65); border-left: 1px solid rgb(194,76,65); border-right: 1px solid rgb(194,76,65); border-right: none; cursor: inherit; color: rgb(194,76,65); } .stock-group .site { width: 80px; float: left; } .stock-group::after, .stock-group::before { content: ""; display: table; clear: both; } /* 堆垛机轨道 */ .pathway { margin-left: 30px; border: 1px solid #333; position: absolute; background-color:#333!important; color: #333 !important; width: 100%; margin-top: 10px; } /* 堆垛机 */ .machine { margin-left: 30px; position: relative; background-color: rgb(108,167,168); height: 20px; width: 80px; background-image: url("../images/Crane_auto.png"); background-repeat: no-repeat; background-size:100% 100%; background-position: top center; cursor: pointer; } /* 入库 */ .machine-pakin { background-image: url("../images/Crane_store.png"); } /* 出库 */ .machine-pakout { background-image: url("../images/Crane_retrieve.png"); } /* 库到库 */ .machine-stock-move { background-image: url("../images/Crane_loctoloc.png"); } /* 站到站 */ .machine-site-move { background-image: url("../images/Crane_stntostn.png"); } /* p to p */ .machine-p-move { background-image: url("../images/Crane_hptoohp.png"); } /* 异常 */ .machine-error { background-image: url("../images/Crane_error.png"); } /* 自动 */ .machine-auto { background-image: url("../images/Crane_auto.png"); } /* 非自动/收到 */ .machine-un-auto { background-image: url("../images/Crane_manual.png"); } /* 控制表头 */ .body-head { height: 35px; width: 100%; background-image: url(../images/status_bar_1.png); background-repeat: no-repeat; margin-left: 5%; margin-top: 20px; text-indent: 25px; color: white; } /* 堆垛机弹窗 */ #crnWindow { width: 291px; height: 365px; background-image: url(../images/Popup-yellow.png); position: fixed; color:white; left: 50%; top: 50%; transform: translate(-50%,-50%); } /* 输送设备弹窗 */ #siteWindow { width: 291px; height: 336px; background-image: url(../images/Popup-green.png); position: fixed; color:white; left: 50%; top: 50%; transform: translate(-50%,-50%); } #siteWindow-head { width: 291px; height: 55px; line-height: 55px; margin-left: 25px; color: #000000; font-weight: 700; letter-spacing: 2px; } #siteWindow-head .detailed { display: inline-block; } #siteWindow-head button { width: 25px; height: 25px; padding: 0px; border: none; border-radius: 25px; background-image: url(../images/siteclose.png); display: inline-block; float: right; margin-top: 15px; margin-right: 50px; } #crnWindow-head { width: 291px; height: 55px; line-height: 55px; margin-left: 55px; color: #000000; font-weight: 700; letter-spacing: 2px; } #crnWindow-head .detailed { display: inline-block; } #crnWindow-head button { width: 25px; height: 25px; padding: 0px; border: none; border-radius: 25px; background-image: url(../images/siteclose.png); display: inline-block; float: right; margin-top: 15px; margin-right: 80px; } /* 弹窗 */ form .form-item { display: inline-block; padding-left: 10px; } form .form-item-label { display: inline-block; width: 90px; font-size: 10px; } form .form-item-input { display: inline-block; width: 180px; } form .form-item-input input { background-color: rgba(255,255,255,.3); color: #FFFFFF; padding: 0; border: none; border-radius: 2px; height: 18px; padding-left: 10px; } /* checkbox */ form .form-item-checkbox { display: inline-block; padding-left: 10px; width: 20%; } form .form-item-label-checkbox { display: inline-block; width: auto; font-size: 14px; } form .form-item-input-checkbox { display: inline-block; width: auto; .system-icon-open { width: 153px; height: 153px; background-image: url(../images/start48.png); display: inline-block; } .system-icon-close { width: 153px; height: 153px; background-image: url(../images/stop48.png); display: inline-block; } .switch_r { color: #FFFFFF; font-size: 14px; width: 130px; height: 153px; float: right; padding-top: 30px; } #system-run-desc { font-size: 20px; margin-top: 15px; } .state { height: 34px; width: 200px; background-color: rgba(255,255,255,0.1); background-image: url(../images/stacker.png); background-repeat: no-repeat; border-radius: 17px 0 0 17px; padding-left: 50px; line-height: 34px; margin-bottom: 10px; margin-left: 5%; color: #FFFFFF; font-size: 10px; } .states { background-image: url(../images/line.png); margin-bottom:54px; } .button { margin-left: 5%; font-size: 14px; color: #FFFFFF; } /* 入库 */ .machine-put-flag { padding: 0 10px; background-color: rgb(163,214,242); } /* 出库 */ .machine-take-flag { padding: 0 10px; background-color: rgb(151,180,0); } /* 库到库 */ .machine-stock-move-flag { padding: 0 10px; background-color: rgb(58,77,249); } /* 站到站 */ .machine-site-move-flag { padding: 0 10px; background-color: rgb(240,140,10); } /* PToP */ .machine-p-move-flag { padding: 0 10px; background-color: rgb(29,152,23); } /* 异常 */ .machine-error-flag { padding: 0 10px; background-color: rgb(252,48,48); } /* 自动 */ .machine-auto-flag { padding: 0 10px; background-color: rgb(132,255,115); } /* 非自动/手动 */ .machine-unauto-flag { padding: 0 10px; background-color: rgb(184,184,184); } /* 自动+有物+ID */ .site-auto-run-id { background-color: rgb(252,48,48); } /* 自动+有物 */ .site-auto-run { background-color: rgb(250,81,246); } /* 自动+ID */ .site-auto-id { background-color: rgb(196,196,0); } /* 自动 */ .site-auto { background-color: rgb(120,255,129); } /* 非自动/手动 */ .site-unauto { background-color: rgb(184,184,184); } #code { background-image: url(../images/status_bar_2.png); background-repeat: no-repeat; margin-left: 2%; } /* 站点 */ .site { color: #333; height: 18px; border: 1px solid rgb(108,167,168); cursor: pointer; width: 50px; text-align: center; background-color: rgb(120,255,129); font-size: 13px; } .site-k { border: 1px solid rgb(108,167,168); background-color: rgb(108, 167, 168); } /*空站点*/ /* ------------------ 输送线总成 ------------------ */ .site-row { position: absolute; top: 122px; } /* 输送线第一列 */ .site-row-1 { top: 205px; left: 128px; } .site-row-1 .site { width: 90px; } } /* 输送线第二列 */ .site-row-2 { top: 205px; left: 230px; } .site-row-2 .site { width: 90px; } .site-row-3 { top: 205px; left: 302px; width: 144px; } .site-row-3 .site { width: 90px; } .site-row-4 { top: 246px; left: 374px; } .site-row-5 { top: 71px; left: 446px; } .site-row-5 .site { width: 90px; } .site-row-6 { top: 71px; left: 518px; } .site-row-6 .site { width: 90px; } /* ------------------ 货架总成 ------------------ */ .main-part { position: absolute; top: 20px; left: 590px; } .main-part .lane { margin-top: 30px; } /* 库位组 */ .stock-group .item { float: left; border-top: 1px solid rgb(194,76,65); border-bottom: 1px solid rgb(194,76,65); border-left: 1px solid rgb(194,76,65); border-right: 1px solid rgb(194,76,65); border-right: none; cursor: inherit; color: rgb(194,76,65); } .stock-group .site { width: 80px; float: left; } .stock-group::after, .stock-group::before { content: ""; display: table; clear: both; } /* 堆垛机轨道 */ .pathway { margin-left: 30px; border: 1px solid #333; position: absolute; background-color:#333!important; color: #333 !important; width: 100%; margin-top: 10px; } /* 堆垛机 */ .machine { margin-left: 30px; position: relative; background-color: rgb(108,167,168); height: 20px; width: 80px; background-image: url("../images/Crane_auto.png"); background-repeat: no-repeat; background-size:100% 100%; background-position: top center; cursor: pointer; } /* 入库 */ .machine-pakin { background-image: url("../images/Crane_store.png"); } /* 出库 */ .machine-pakout { background-image: url("../images/Crane_retrieve.png"); } /* 库到库 */ .machine-stock-move { background-image: url("../images/Crane_loctoloc.png"); } /* 站到站 */ .machine-site-move { background-image: url("../images/Crane_stntostn.png"); } /* p to p */ .machine-p-move { background-image: url("../images/Crane_hptoohp.png"); } /* 异常 */ .machine-error { background-image: url("../images/Crane_error.png"); } /* 自动 */ .machine-auto { background-image: url("../images/Crane_auto.png"); } /* 非自动/收到 */ .machine-un-auto { background-image: url("../images/Crane_manual.png"); } /* 堆垛机弹窗 */ #crnWindow { width: 291px; height: 365px; background-image: url(../images/Popup-yellow.png); position: fixed; color:white; left: 50%; top: 50%; transform: translate(-50%,-50%); } /* 输送设备弹窗 */ #siteWindow { width: 291px; height: 336px; background-image: url(../images/Popup-green.png); position: fixed; color:white; left: 50%; top: 50%; transform: translate(-50%,-50%); } #siteWindow-head { width: 291px; height: 55px; line-height: 55px; margin-left: 25px; color: #000000; font-weight: 700; letter-spacing: 2px; } #siteWindow-head .detailed { display: inline-block; } #siteWindow-head button { width: 25px; height: 25px; padding: 0px; border: none; border-radius: 25px; background-image: url(../images/siteclose.png); display: inline-block; float: right; margin-top: 15px; margin-right: 50px; } #crnWindow-head { width: 291px; height: 55px; line-height: 55px; margin-left: 55px; color: #000000; font-weight: 700; letter-spacing: 2px; } #crnWindow-head .detailed { display: inline-block; } #crnWindow-head button { width: 25px; height: 25px; padding: 0px; border: none; border-radius: 25px; background-image: url(../images/siteclose.png); display: inline-block; float: right; margin-top: 15px; margin-right: 80px; } /* 弹窗 */ form .form-item { display: inline-block; padding-left: 10px; } form .form-item-label { display: inline-block; width: 90px; font-size: 10px; } form .form-item-input { display: inline-block; width: 180px; } form .form-item-input input { background-color: rgba(255,255,255,.3); color: #FFFFFF; padding: 0; border: none; border-radius: 2px; height: 18px; padding-left: 10px; } /* checkbox */ form .form-item-checkbox { display: inline-block; padding-left: 10px; width: 20%; } form .form-item-label-checkbox { display: inline-block; width: auto; font-size: 14px; } form .form-item-input-checkbox { display: inline-block; width: auto; } src/main/webapp/static/css/crn.css
@@ -2,7 +2,11 @@ padding: 10px; background-color: #f1f1f1; } .button-window { float: left; width: 5%; height: 100%; } /* -------------------- 第一模块 -------------------- */ .log-board { background-color: #fff; @@ -15,7 +19,7 @@ .command-log { float: left; height: 100%; width: 20%; width: 19%; text-align: center; } .command-log h2 { @@ -47,7 +51,7 @@ .crn-state { float: left; height: 100%; width: 80%; width: 76%; overflow: auto; } /* 堆垛机状态表 */ @@ -75,7 +79,7 @@ /* -------------------- 第二模块 -------------------- */ .crn-msg { overflow: auto; /*overflow: auto;*/ margin-top: 10px; height: 23%; background-color: #fff; src/main/webapp/static/css/index.css
@@ -1,63 +1,65 @@ * { margin: 0; overflow: hidden; margin: 0; overflow: hidden; } html,body { height: 100%; height: 100%; } .nav { width: 100%; height: 90px; line-height: 90px; list-style: none; color: #fff; position: fixed; text-align: center; letter-spacing:3px; width: 100%; height: 90px; line-height: 90px; list-style: none; color: #fff; position: fixed; text-align: center; letter-spacing:3px; } .right { float: right; margin-right: 1%; margin-top: 1%; float: right; margin-right: 1%; margin-top: 1%; } #about { width: 47px; height: 47px; display: inline-block; background-image: url(../images/cancellation.png); width: 47px; height: 47px; display: inline-block; background-image: url(../images/cancellation.png); } .sidebar { width: 7%; height: 40%; line-height: 90px; position: fixed; top: 50%; transform: translateY(-50%); width: 7%; height: 40%; line-height: 90px; position: fixed; top: 50%; transform: translateY(-50%); } .sidebar ul { font-size: 20px; font-weight: 500; padding-left: 15%; font-size: 20px; font-weight: 700; padding-left: 15%; } .sidebar a { text-decoration: none; /* color: #fff; */ text-decoration: none; /*color: #cbcbcb;*/ } .sidebar a:hover { color: rgb(87,214,201); color: rgb(87,214,201); } .nav-unselect { color: #fff; color: #5D7677; } .nav-select { .nav-select { color: rgb(87,214,201); } @@ -66,9 +68,9 @@ /* 主体 */ iframe { width: 100%; height: 100%; border-width: 0; width: 100%; height: 100%; border-width: 0; } /* 底部 */ footer { src/main/webapp/static/css/pipeline.css
@@ -9,9 +9,15 @@ box-shadow: 0 0 3px rgba(0,0,0,.3); margin-bottom: 8px; } .main-board { .button-window { float: left; width: 50%; width: 5%; height: 100%; } .main-board { padding-left: 1%; float: left; width: 47.5%; height: 100%; overflow: auto; } src/main/webapp/views/crn.html
@@ -41,6 +41,7 @@ </style> </head> <body> <div class="button-window"></div> <!-- 日志监控板 --> <div class="log-board"> <!-- 执行命令 --> @@ -83,19 +84,19 @@ <div class="crn-state"> <table id="crn-state-table"> <thead> <tr> <th>堆垛机</th> <th>模式</th> <th>状态</th> <th>有物</th> <th>列</th> <th>层</th> <th>货叉定位</th> <th>载货台定位</th> <th>走行在定位</th> <th>故障代码</th> <th>故障描述</th> </tr> <tr> <th>堆垛机</th> <th>模式</th> <th>状态</th> <th>有物</th> <th>列</th> <th>层</th> <th>货叉定位</th> <th>载货台定位</th> <th>走行在定位</th> <th>故障代码</th> <th>故障描述</th> </tr> </thead> <tbody> </tbody> @@ -106,22 +107,22 @@ <div class="crn-msg"> <table id="crn-msg-table"> <thead> <tr> <th>堆垛机</th> <th>工作号</th> <th>状态</th> <th>源站</th> <th>目标站</th> <th>源库位</th> <th>目标库位</th> <th>走行速度(m/min)</th> <th>升降速度(m/min)</th> <th>叉牙速度(m/min)</th> <th>走行距离(m)</th> <th>升降距离(m)</th> <th>走行时长(s)</th> <th>升降时长(s)</th> </tr> <tr> <th>堆垛机</th> <th>工作号</th> <th>状态</th> <th>源站</th> <th>目标站</th> <th>源库位</th> <th>目标库位</th> <th>走行速度(m/min)</th> <th>升降速度(m/min)</th> <th>叉牙速度(m/min)</th> <th>走行距离(m)</th> <th>升降距离(m)</th> <th>走行时长(s)</th> <th>升降时长(s)</th> </tr> </thead> <tbody> </tbody> @@ -205,12 +206,12 @@ <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="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="pause()">暂停</button>--> <!-- <button class="item" onclick="boot()">启动</button>--> <button class="item" onclick="clearCommand()">清除命令</button> <button class="item" onclick="handleReset()">复位</button> </div> src/main/webapp/views/index.html
@@ -1,43 +1,43 @@ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>自动仓库WCS系统</title> <link rel="stylesheet" href="../static/css/index.css"> <script src="../static/js/jquery/jquery-3.3.1.min.js"></script> </head> <body> <!-- 导航栏 --> <head> <meta charset="utf-8"> <title>自动仓库WCS系统</title> <link rel="stylesheet" href="../static/css/index.css"> <script src="../static/js/jquery/jquery-3.3.1.min.js"></script> </head> <body> <!-- 导航栏 --> <!-- <div class="nav">--> <!-- <li class="right">注销<a id="about" class="nav-unselect" onclick="logout()" href="#"></a></li>--> <!-- </div>--> <div class="sidebar"> <ul> <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">主控图</a></li> <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">输送设备</a></li> <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">堆垛机</a></li> </ul> </div> <!-- 主体内容 --> <iframe id="content" src="console.html"></iframe> <footer class="footer"> Copyright © 2015 All Rights Reserved. <a href="http://www.zoneyung.com" target="_blank">浙江中扬立库技术有限公司</a> 保留所有权利 </footer> </body> <script> // 导航栏 function nav(id) { $('.nav-select').attr("class", "nav-unselect"); $('#'+id).attr("class", "nav-select"); $('#content').attr("src", id+".html"); } <div class="sidebar"> <ul> <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">主控图</a></li> <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">输送设备</a></li> <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">堆垛机</a></li> </ul> </div> <!-- 主体内容 --> <iframe id="content" src="console.html"></iframe> <footer class="footer"> Copyright © 2015 All Rights Reserved. <a href="http://www.zoneyung.com" target="_blank">浙江中扬立库技术有限公司</a> 保留所有权利 </footer> </body> <script> // 导航栏 function nav(id) { $('.nav-select').attr("class", "nav-unselect"); $('#'+id).attr("class", "nav-select"); $('#content').attr("src", id+".html"); } function logout() { localStorage.removeItem("token"); window.location.href = baseUrl + "/login"; } function logout() { localStorage.removeItem("token"); window.location.href = baseUrl + "/login"; } // 系统运行状态 var systemRunning = true; </script> // 系统运行状态 var systemRunning = true; </script> </html> src/main/webapp/views/pipeline.html
@@ -18,16 +18,17 @@ </head> <body> <main> <div class="button-window"></div> <!-- plc异常日志监控版 --> <div id="plc-error" class="main-board" style="padding-left: 10px"> <!-- 头部 --> <div class="plc-log-header"> <!-- <div style="height: 40%">--> <!-- <span>东侧PLC执行指令</span>--> <!-- </div>--> <!-- <div style="height: 40%">--> <!-- <span>西侧PLC执行指令</span>--> <!-- </div>--> <!-- <div style="height: 40%">--> <!-- <span>东侧PLC执行指令</span>--> <!-- </div>--> <!-- <div style="height: 40%">--> <!-- <span>西侧PLC执行指令</span>--> <!-- </div>--> <div> <span style="color: #1E9FFF">PLC异常信息表:</span> </div> @@ -36,11 +37,11 @@ <div class="plc-log-body"> <table id="plc-error-table"> <thead> <tr> <th style="width: 200px">序号</th> <th style="width: 400px">PLC错误描述</th> <th style="width: 400px">异常</th> </tr> <tr> <th style="width: 200px">序号</th> <th style="width: 400px">PLC错误描述</th> <th style="width: 400px">异常</th> </tr> </thead> <tbody> @@ -55,17 +56,17 @@ <table id="site-table"> <!-- 表头 --> <thead> <tr> <th>站号</th> <th>工作号</th> <th>自动</th> <th>有物</th> <th>可入</th> <th>可出</th> <th>入库标记</th> <th>空板信号</th> <th>目标站</th> </tr> <tr> <th>站号</th> <th>工作号</th> <th>自动</th> <th>有物</th> <th>可入</th> <th>可出</th> <th>入库标记</th> <th>空板信号</th> <th>目标站</th> </tr> </thead> <!-- 表格内容 --> <tbody></tbody>