自动化立体仓库 - WCS系统
#
lsh
2023-03-07 204e15023a4443ac2849f732763ee41ee2918f06
#
6个文件已修改
265 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MonitorController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MatDto.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/LedThread.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MonitorController.java
@@ -62,7 +62,17 @@
     * 获取其他信息
     */
    @GetMapping("/other")
    public R monitorOther(@RequestParam("crnId") Integer crnId, @RequestParam("ledId") Integer ledId) {
    public R monitorOther(@RequestParam("crnId") Integer crnId, @RequestParam("ledId") Integer sta) {
        Integer ledId = 0;
        for (LedSlave led : slaveProperties.getLed()) {
            for (Integer staNo : led.getStaArr()) {
                if (staNo.equals(sta)) {
                    ledId = led.getId();
                    break;
                }
            }
        }
        Double xSpeed = 0.0D;
        Double ySpeed = 0.0D;
        Double zSpeed = 0.0D;
@@ -105,7 +115,15 @@
        // 获取输送线plc线程
        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, ledId);
        String ledContent = ledThread==null?"":ledThread.getWorkNos().toString();
//        ledContent = "ask的模块萨满大算了萨满大了\n 是窘境到埃及嗲家嗲\n 萨达姆打开萨满大凯撒麦当劳萨满大老师";
        if (!(xSpeed<127)){
            xSpeed=0.0;
        }
        if (!(ySpeed<127)){
            ySpeed=0.0;
        }
        if (!(zSpeed<127)){
            zSpeed=0.0;
        }
        return R.ok(
                Cools.add("xSpeed", Arith.multiplys(1, Math.abs(xSpeed), 1)) // 行走速度
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -120,39 +120,37 @@
                        && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
                        && staProtocol.isPakMk()) {
                    // 尺寸检测异常
                    boolean back = false;
                    String errMsg = "";
                    String errMsg = "异常:";
                    if (staProtocol.isFrontErr()) {
                        errMsg = "前超限";
                        errMsg = errMsg+"前超限;";
                        back = true;
                    }
                    if (!back && staProtocol.isBackErr()) {
                        errMsg = "后超限";
                    if (staProtocol.isBackErr()) {
                        errMsg = errMsg+"后超限";
                        back = true;
                    }
                    if (!back && staProtocol.isHighErr()) {
                        errMsg = "高超限";
                    if (staProtocol.isHighErr()) {
                        errMsg = errMsg+"高超限";
                        back = true;
                    }
                    if (!back && staProtocol.isLeftErr()) {
                        errMsg = "左超限";
                    if (staProtocol.isLeftErr()) {
                        errMsg = errMsg+"左超限";
                        back = true;
                    }
                    if (!back && staProtocol.isRightErr()) {
                        errMsg = "右超限";
                    if (staProtocol.isRightErr()) {
                        errMsg = errMsg+"右超限";
                        back = true;
                    }
                    if (!back && staProtocol.isWeightErr()) {
                        errMsg = "超重";
                    if (staProtocol.isWeightErr()) {
                        errMsg = errMsg+"超重";
                        back = true;
                    }
                    if (!back && staProtocol.isBarcodeErr()) {
                        errMsg = "扫码失败";
                    if (staProtocol.isBarcodeErr()) {
                        errMsg = errMsg+"扫码失败";
                        back = true;
                    }
                    // 退回
                    if (back) {
                        News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg);
@@ -177,7 +175,7 @@
                    String barcode = barcodeThread.getBarcode();
                    if(!Cools.isEmpty(barcode)) {
//                        News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                        if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
                        if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)|| "00000000".equals(barcode)) {
                            staProtocol.setWorkNo((short) 32002);
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -2388,18 +2386,11 @@
                        break;
                }
                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                ledCommand.setLocNo(wrkMast.getLocNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
                if (wrkMast.getIoType() != 110) {
                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                    try {
                        WrkDetl wrkDetl = wrkDetls.get(0);
                        if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                            OrderDetl orderDetl = orderDetlMapper.selectItemNoneOfBatch(wrkDetl.getOrderNo(), wrkDetl.getMatnr());
                            ledCommand.getMatDtos().add(new MatDto(orderDetl));
                        }
                    } catch (Exception e) {
                        News.error("led execute fail", e);
                    }
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(),wrkDetl.getSpecs())));
                }
                commands.add(ledCommand);
            }
@@ -2412,9 +2403,20 @@
            }
            // 命令下发 -------------------------------------------------------------------------------
            if (!commands.isEmpty()) {
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
                    News.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    continue;
                if (led.getId()>3){
                    if (!MessageQueue.offer(SlaveType.Led, led.getId()-3, new Task(1, commands))) {
                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId()-3, led.getIp(), led.getPort());
                        continue;
                    }else {
                        ledThread.setLedMk(false);
                    }
                }else {
                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                        continue;
                    }else {
                        ledThread.setLedMk(false);
                    }
                }
            }
@@ -2444,6 +2446,35 @@
     */
    public void ledReset() {
        for (LedSlave led : slaveProperties.getLed()) {
            // 获取输送线plc线程
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
            // 命令集合
            boolean reset = true;
            for (Integer staNo : led.getStaArr()) {
                // 获取叉车站点
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
                if (staProtocol == null) {
                    continue;
                }
                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
                    reset = false;
                    break;
                }
            }
            // 获取led线程
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // led显示默认内容
            if (reset && !ledThread.isLedMk()) {
                ledThread.setLedMk(true);
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
                    News.error(" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                } else {
                }
            }
        }
        for (LedSlave led : slaveProperties.getLed()) {
            // 获取输送线plc线程
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
            // 命令集合
src/main/java/com/zy/common/model/MatDto.java
@@ -13,6 +13,18 @@
    private String matnr;
    // 物料名称
    private String maknx;
    // 库位规格
    private String specs;
    // 物料数量
    private Double count;
    // 库位数量
    private Double total;
    // 物料名称
    private String model;
    // 条码
@@ -20,12 +32,6 @@
    // 订单编号
    private String orderNo;
    // 已出
    private Double count;
    // 总数量
    private Double total;
    public MatDto() {
    }
@@ -38,4 +44,22 @@
        this.count = orderDetl.getQty();
        this.total = orderDetl.getAnfme();
    }
    public MatDto(String matNo, String maknx, Double count) {
        this.matnr = matNo;
        this.maknx = maknx;
        this.count = count;
    }
    public MatDto(String matNo, String maknx, Double count,String specs) {
        this.specs = specs;
        this.matnr = matNo;
        this.maknx = maknx;
        this.count = count;
    }
    public MatDto(String matNo, String maknx, Double count,Double total,String specs) {
        this.specs = specs;
        this.matnr = matNo;
        this.maknx = maknx;
        this.count = count;
        this.total = total;
    }
}
src/main/java/com/zy/core/thread/LedThread.java
@@ -9,6 +9,10 @@
import com.zy.core.model.command.LedCommand;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import onbon.bx05.Bx5GScreenClient;
import onbon.bx05.area.TextCaptionBxArea;
import onbon.bx05.file.ProgramBxFile;
import onbon.bx05.utils.DisplayStyleFactory;
import java.util.HashSet;
import java.util.List;
@@ -23,6 +27,12 @@
    private Slave slave;
    private Set<Integer> workNos = new HashSet<>();
    private Bx5GScreenClient screen;
    ProgramBxFile pf;
    TextCaptionBxArea area;
    DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
    private boolean ledMk = false;
    private boolean resetStatus = false;    // 复位状态
    // 显示器
    private StringBuffer stringBuffer = new StringBuffer();
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -181,34 +181,49 @@
            charge1 = status[0];
        }
//        // 外形检测 - 102
//        Thread.sleep(50);
//        OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB102.129", (short)1);
//        if (result4.IsSuccess) {
//            boolean[] status = siemensS7Net.getByteTransform().TransBool(result4.Content, 0, 1);
//            StaProtocol staProtocol = station.get(102);
//            staProtocol.setFrontErr(status[0]);
//            staProtocol.setBackErr(status[1]);
//            staProtocol.setHighErr(status[2]);
//            staProtocol.setLeftErr(status[3]);
//            staProtocol.setRightErr(status[4]);
//            staProtocol.setWeightErr(status[5]);
//            staProtocol.setBarcodeErr(status[6]);
//        }
//        // 外形检测 - 203
//        Thread.sleep(50);
//        OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB102.130", (short)1);
//        if (result5.IsSuccess) {
//            boolean[] status = siemensS7Net.getByteTransform().TransBool(result5.Content, 0, 1);
//            StaProtocol staProtocol = station.get(202);
//            staProtocol.setFrontErr(status[0]);
//            staProtocol.setBackErr(status[1]);
//            staProtocol.setHighErr(status[2]);
//            staProtocol.setLeftErr(status[3]);
//            staProtocol.setRightErr(status[4]);
//            staProtocol.setWeightErr(status[5]);
//            staProtocol.setBarcodeErr(status[6]);
//        }
        // 外形检测 - 102
        Thread.sleep(50);
        OperateResultExOne<byte[]> result102 = siemensS7Net.Read("DB102.110", (short)1);
        if (result102.IsSuccess) {
            boolean[] status = siemensS7Net.getByteTransform().TransBool(result102.Content, 0, 1);
            StaProtocol staProtocol = station.get(102);
            staProtocol.setFrontErr(status[0]);// 前超限
            staProtocol.setBackErr(status[1]);// 后超限
            staProtocol.setHighErr(status[2]);// 高超限
            staProtocol.setLeftErr(status[3]);// 左超限
            staProtocol.setRightErr(status[4]);// 右超限
            staProtocol.setWeightErr(status[5]); // 超重
            staProtocol.setBarcodeErr(status[6]);// 扫码失败
        }
        // 外形检测 - 201
        Thread.sleep(50);
        OperateResultExOne<byte[]> result201 = siemensS7Net.Read("DB102.112", (short)1);
        if (result201.IsSuccess) {
            boolean[] status = siemensS7Net.getByteTransform().TransBool(result201.Content, 0, 1);
            StaProtocol staProtocol = station.get(201);
            staProtocol.setFrontErr(status[0]);
            staProtocol.setBackErr(status[1]);
            staProtocol.setHighErr(status[2]);
            staProtocol.setLeftErr(status[3]);
            staProtocol.setRightErr(status[4]);
            staProtocol.setWeightErr(status[5]);
            staProtocol.setBarcodeErr(status[6]);
        }
        // 外形检测 - 301
        Thread.sleep(50);
        OperateResultExOne<byte[]> result301 = siemensS7Net.Read("DB102.114", (short)1);
        if (result301.IsSuccess) {
            boolean[] status = siemensS7Net.getByteTransform().TransBool(result301.Content, 0, 1);
            StaProtocol staProtocol = station.get(301);
            staProtocol.setFrontErr(status[0]);
            staProtocol.setBackErr(status[1]);
            staProtocol.setHighErr(status[2]);
            staProtocol.setLeftErr(status[3]);
            staProtocol.setRightErr(status[4]);
            staProtocol.setWeightErr(status[5]);
            staProtocol.setBarcodeErr(status[6]);
        }
        if (result.IsSuccess && result1.IsSuccess) {
src/main/resources/application.yml
@@ -183,21 +183,42 @@
   # LED1
  led[0]:
    id: 1
    ip: 10.10.10.231
    ip: 10.10.10.241
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 102
  # LED1
  # LED2
  led[1]:
    id: 2
    ip: 10.10.10.232
    ip: 10.10.10.242
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 202
  # LED1
    staArr: 201
  # LED3
  led[2]:
    id: 3
    ip: 10.10.10.233
    ip: 10.10.10.243
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 302
    staArr: 301
  # LED1
  led[3]:
    id: 4
    ip: 10.10.10.241
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 100
  # LED2
  led[4]:
    id: 5
    ip: 10.10.10.242
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 200
  # LED3
  led[5]:
    id: 6
    ip: 10.10.10.243
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 300