1
zhangc
2025-04-10 50435a81915932eda06b7f1afd48f9ff1ae84f19
1
1 文件已重命名
6个文件已修改
385 ■■■■■ 已修改文件
zy-asrs-flow/src/app.jsx 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/ServerBootstrap.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/FyxcDevpThread.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/app.jsx
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -28,13 +28,17 @@
import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
import com.zy.asrs.wcs.rcs.service.DeviceService;
import com.zy.asrs.wcs.rcs.thread.*;
import com.zy.asrs.wcs.rcs.thread.DevpThread;
import com.zy.asrs.wcs.rcs.thread.LedThread;
import com.zy.asrs.wcs.rcs.thread.LiftThread;
import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import com.zy.asrs.wcs.system.entity.Dict;
import com.zy.asrs.wcs.system.service.DictService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
@@ -89,6 +93,71 @@
    @Autowired
    private ShuttleStandbyService shuttleStandbyService;
    private boolean isInEnable(DevpThread devpThread, Integer staNo) {
        if (staNo == null) {
            return false;
        }
        // 获取入库站信息
        switch (staNo) {
            case 1011:
            case 1012:
                devpThread.getStation().get(1012).isInEnable();
                break;
            case 1021:
            case 1022:
            case 1023:
                devpThread.getStation().get(1022).isInEnable();
                break;
            case 1031:
            case 1032:
                devpThread.getStation().get(1032).isInEnable();
                break;
            case 1025:
            case 1026:
                devpThread.getStation().get(1025).isInEnable();
                break;
            case 1013:
            case 1014:
            case 1015:
                devpThread.getStation().get(1014).isInEnable();
                break;
        }
        return false;
    }
    private boolean isOutEnable(DevpThread devpThread, Integer staNo) {
        if (staNo == null) {
            return false;
        }
        // 获取入库站信息
        switch (staNo) {
            case 1011:
            case 1012:
                devpThread.getStation().get(1012).isOutEnable();
                break;
            case 1021:
            case 1022:
            case 1023:
                devpThread.getStation().get(1022).isOutEnable();
                break;
            case 1031:
            case 1032:
                devpThread.getStation().get(1032).isOutEnable();
                break;
            case 1025:
            case 1026:
                devpThread.getStation().get(1025).isOutEnable();
                break;
            case 1013:
            case 1014:
            case 1015:
                devpThread.getStation().get(1014).isOutEnable();
                break;
        }
        return false;
    }
    /**
     * 组托
     * 入库站,根据条码扫描生成入库工作档,工作状态 2
@@ -104,7 +173,7 @@
                // 遍历入库口
                for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) {
                    BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
                    if(basConveyorSta == null) {
                    if (basConveyorSta == null) {
                        continue;
                    }
@@ -160,7 +229,7 @@
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing() && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && isInEnable(devpThread, inSta.getStaNo())
                            && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
                            && staProtocol.isPakMk()
                    ) {
@@ -197,7 +266,7 @@
                        if (task1 != null) {
                            News.error("工作档已存在,工作号={}", task1.getTaskNo());
                            if (staProtocol.getWorkNo().intValue() != Integer.parseInt(task1.getTaskNo())) {
                                devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getOriginSite()));
                                devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getDestSite()));
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                News.info("输送线入库命令下发,任务数据={}", JSON.toJSON(task1));
                            }
@@ -262,7 +331,7 @@
//                                }
                                redisUtil.set(DeviceRedisConstant.LIFT_PALLET_INBOUND + inSta.getStaNo(), "in", 10);
                            }else {
                            } else {
                                String msg = jsonObject.getString("msg");
                                HashMap<String, String> hashMap = new HashMap<>();
                                hashMap.put("msg", msg);
@@ -339,10 +408,10 @@
                        mapNode.setXBase(object.getInteger("refx"));
                        mapNode.setYBase(object.getInteger("refy"));
                        if(mapNode.getValue() == MapNodeType.CONVEYOR.id) {
                        if (mapNode.getValue() == MapNodeType.CONVEYOR.id) {
                            //输送线,判断小车是否可走
                            if (object.containsKey("conveyorHasGo")) {
                                if(object.getBoolean("conveyorHasGo")) {
                                if (object.getBoolean("conveyorHasGo")) {
                                    //小车可走
                                    mapNode.setValue(MapNodeType.CONVEYOR_CAR_GO.id);
                                }
@@ -436,7 +505,7 @@
                ArrayList<MapNode> headNodes = new ArrayList<>();
                ArrayList<MapNode> footerNodes = new ArrayList<>();
                for (int i = 0; i < row+2; i++) {
                for (int i = 0; i < row + 2; i++) {
                    headNodes.add(mapNode.clone());
                    footerNodes.add(mapNode.clone());
                }
@@ -473,7 +542,7 @@
                // 遍历入库口
                for (StaDto inSta : JSON.parseArray(basConveyor.getDeviceInSta(), StaDto.class)) {
                    BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
                    if(basConveyorSta == null) {
                    if (basConveyorSta == null) {
                        continue;
                    }
@@ -485,94 +554,93 @@
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    int workNo = staProtocol.getWorkNo().intValue();
                    int workNo = 0;
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing()
                            && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && (workNo >= 0)
//                            && staProtocol.isPakMk()
                    ) {
                    if ((staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1023 || staProtocol.getSiteId() == 1026 || staProtocol.getSiteId() == 1032) &&
                            staProtocol.isAutoing() && staProtocol.isLoading()) {
                        workNo = staProtocol.getFinishWorkNo().intValue();
                    } else if ((staProtocol.getSiteId() == 1012) && staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) {
                        workNo = staProtocol.getWorkNo().intValue();
                    } else {
                        continue;
                    }
                        Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
                                .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
                                .eq(Task::getTaskNo, workNo));
                        if (task != null) {
                            if (!Cools.isEmpty(task.getLiftNo())) {
                                if (task.getLiftNo() > 0) {
                                    task.setLiftNo(0);
                                    task.setUpdateTime(new Date());
                                    if (!taskService.updateById(task)) {
                                        News.info("{}任务更新释放提升机失败", task.getTaskNo());
                                    }
                                }
                            }
                            //获取距离目标位置最近的可换层提升机(可能不空闲)
                            LiftThread liftThread = liftDispatcher.searchLift(task.getDestLoc(), task.getHostId(), true);
                            if (liftThread == null) {
                                continue;
                            }
                            Device transferLiftDevice = liftThread.getDevice();
                            //获取小车待机库位 ==> 进提升机
                            ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>()
                                    .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId())
                                    .eq(ShuttleStandby::getDeviceLev, Utils.getLev(task.getDestLoc()))
                                    .eq(ShuttleStandby::getStatus, 1));
                            //穿梭车进提升机库位号
                            String liftLocNoTo = shuttleStandbyTo.getDeviceLoc();
                            //穿梭车进提升机待机位库位号  输送线位置
                            String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc();
                            //不走提升机
                            if (staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1026) {
                                standbyLocNoTo = staProtocol.getLocNo();
                            }
                            if (Cools.isEmpty(task.getShuttleNo())) {
                                //分配小车
                                //调度空闲车去取货待机位
                                Device shuttleDevice = shuttleDispatcher.dispatchShuttle(task, standbyLocNoTo);
                                if (shuttleDevice == null) {
                                    News.info("{}任务未找到空闲穿梭车", task.getTaskNo());
                                    continue;
                                }
                                task.setShuttleNo(Integer.valueOf(shuttleDevice.getDeviceNo()));//保存穿梭车号
                    Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
                            .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
                            .eq(Task::getTaskNo, workNo));
                    if (task != null) {
                        if (!Cools.isEmpty(task.getLiftNo())) {
                            if (task.getLiftNo() > 0) {
                                task.setLiftNo(0);
                                task.setUpdateTime(new Date());
                                if (!taskService.updateById(task)) {
                                    News.info("{}任务更新穿梭车号失败", task.getTaskNo());
                                    News.info("{}任务更新释放提升机失败", task.getTaskNo());
                                }
                                continue;
                            }
                            //判断小车是否到达取货待机位置
                            String shuttleLocNo = shuttleDispatcher.findShuttleLocNo(task.getShuttleNo(), task.getHostId());
                            if (shuttleLocNo == null) {
                                continue;
                            }
                            if (!standbyLocNoTo.equals(shuttleLocNo)) {
                                continue;
                            }
                            // generate motion list
                            List<Motion> motionList = analyzeService.generateMotion(task);
                            if (motionList.isEmpty()) {
                                continue;
                            }
                            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
                            // 更新工作主档
                            task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 工作状态
                            task.setUpdateTime(new Date());
                            if (!taskService.updateById(task)) {
                                News.error("更新工作档失败!!! [工作号:{}]", task.getTaskNo());
                            }
                            break;
                        }
                        //获取距离目标位置最近的可换层提升机(可能不空闲)
                        LiftThread liftThread = liftDispatcher.searchLift(task.getDestLoc(), task.getHostId(), true);
                        if (liftThread == null) {
                            continue;
                        }
                        Device transferLiftDevice = liftThread.getDevice();
                        //获取小车待机库位 ==> 进提升机
                        ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>()
                                .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId())
                                .eq(ShuttleStandby::getDeviceLev, Utils.getLev(task.getDestLoc()))
                                .eq(ShuttleStandby::getStatus, 1));
                        //穿梭车进提升机库位号
                        String liftLocNoTo = shuttleStandbyTo.getDeviceLoc();
                        //穿梭车进提升机待机位库位号  输送线位置
                        String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc();
                        //不走提升机
                        if (staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1026) {
                            standbyLocNoTo = staProtocol.getLocNo();
                        }
                        if (Cools.isEmpty(task.getShuttleNo())) {
                            //分配小车
                            //调度空闲车去取货待机位
                            Device shuttleDevice = shuttleDispatcher.dispatchShuttle(task, standbyLocNoTo);
                            if (shuttleDevice == null) {
                                News.info("{}任务未找到空闲穿梭车", task.getTaskNo());
                                continue;
                            }
                            task.setShuttleNo(Integer.valueOf(shuttleDevice.getDeviceNo()));//保存穿梭车号
                            task.setUpdateTime(new Date());
                            if (!taskService.updateById(task)) {
                                News.info("{}任务更新穿梭车号失败", task.getTaskNo());
                            }
                            continue;
                        }
                        //判断小车是否到达取货待机位置
                        String shuttleLocNo = shuttleDispatcher.findShuttleLocNo(task.getShuttleNo(), task.getHostId());
                        if (shuttleLocNo == null) {
                            continue;
                        }
                        if (!standbyLocNoTo.equals(shuttleLocNo)) {
                            continue;
                        }
                        // generate motion list
                        List<Motion> motionList = analyzeService.generateMotion(task);
                        if (motionList.isEmpty()) {
                            continue;
                        }
                        motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
                        // 更新工作主档
                        task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 工作状态
                        task.setUpdateTime(new Date());
                        if (!taskService.updateById(task)) {
                            News.error("更新工作档失败!!! [工作号:{}]", task.getTaskNo());
                        }
                        break;
                    }
                }
            }
@@ -678,7 +746,7 @@
            }
            BasConveyor basConveyor = basConveyorService.getById(destStaObj.getConveyorId());
            if(basConveyor == null) {
            if (basConveyor == null) {
                continue;
            }
@@ -1069,8 +1137,8 @@
                    staProtocol = staProtocol.clone();
                }
                String taskNo = "0";
                if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001 ){
                    if (0 != staProtocol.getWorkNo()){
                if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001) {
                    if (0 != staProtocol.getWorkNo()) {
                        Motion motion = motionService.getOne(new LambdaQueryWrapper<Motion>().eq(Motion::getMotionCtg, 9).eq(Motion::getTemp, staProtocol.getWorkNo()));
                        // 获取工作档数据
                        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo()));
@@ -1092,7 +1160,7 @@
                        HashMap<String, Object> param = new HashMap<>();
                        param.put("taskNo", taskNo);
                        param.put("sta",staNo);
                        param.put("sta", staNo);
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath("/rpc/led/getTask")
@@ -1174,7 +1242,9 @@
            for (Integer staNo : staArr) {
                // 获取叉车站点
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
                if (staProtocol == null) { continue; }
                if (staProtocol == null) {
                    continue;
                }
                if (staProtocol.getWorkNo() != 0) {
                    reset = false;
                    break;
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
@@ -74,7 +74,7 @@
            }
        }
        ProcessBuilder processBuilder = new ProcessBuilder("python", pythonScriptPath, maps, startStr, targetStr, mapDirection);
        ProcessBuilder processBuilder = new ProcessBuilder("python3", pythonScriptPath, maps, startStr, targetStr, mapDirection);
        processBuilder.redirectErrorStream(true);
        try {
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java
@@ -380,7 +380,7 @@
                second.add(new int[]{node.getX(), node.getY()});
            }
            ProcessBuilder processBuilder = new ProcessBuilder("python", pythonCalcSimilarity, JSON.toJSONString(first), JSON.toJSONString(second));
            ProcessBuilder processBuilder = new ProcessBuilder("python3", pythonCalcSimilarity, JSON.toJSONString(first), JSON.toJSONString(second));
            processBuilder.redirectErrorStream(true);
            Process process = processBuilder.start();
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/ServerBootstrap.java
@@ -88,6 +88,7 @@
                    Constructor<?> constructor = clazz.getConstructor(Device.class, RedisUtil.class);
                    Object instance = constructor.newInstance(device, redisUtil);
                    new Thread((Runnable) instance).start();
                    SlaveConnection.put(SlaveType.findInstance(type.getFlag()), device.getId().intValue(), (ThreadHandler) instance);
                } catch (Exception e) {
                    e.printStackTrace();
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/FyxcDevpThread.java
@@ -47,11 +47,31 @@
    public static ArrayList<BasConveyorSta> stationList = new ArrayList<>();
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(1012);add(1014);add(1015);add(1022);
        add(1023);add(1025);add(1026);add(1031);
        add(1012);
        add(1014);
        add(1015);
        add(1022);
        add(1023);
        add(1025);
        add(1026);
        add(1031);
        add(1032);
    }};
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(1011);
        add(1012);
        add(1013);
        add(1014);
        add(1015);
        add(1021);
        add(1022);
        add(1023);
        add(1024);
        add(1025);
        add(1026);
        add(1031);
        add(1032);
    }};
    /**
@@ -84,7 +104,7 @@
                BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>()
                        .eq(BasConveyor::getDeviceId, device.getId())
                        .eq(BasConveyor::getHostId, device.getHostId()));
                if(basConveyor != null) {
                if (basConveyor != null) {
                    List<BasConveyorSta> stations = basConveyorStaService.list(new LambdaQueryWrapper<BasConveyorSta>()
                            .eq(BasConveyorSta::getConveyorId, basConveyor.getId())
                            .eq(BasConveyorSta::getHostId, device.getHostId()));
@@ -128,14 +148,14 @@
                    if (siteId == 1015) {
                        staProtocol.setLocNo("1200301");
                    }else if (siteId == 1026) {
                    } else if (siteId == 1026) {
                        staProtocol.setLocNo("1200305");
                    }
                    station.put(siteId, staProtocol);
                }
                Thread.sleep(300);
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*26, 2);
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 26, 2);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setIdle(status[1]); //空闲
                staProtocol.setLoading(status[2]);  // 有物
@@ -151,15 +171,15 @@
                staProtocol.setOutEnable(status[14]);// 可出
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*26+2));     // 工作号
                staProtocol.setFinishWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*26+6)); //已完成工作号
                staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content,i*26+10,12, "UTF-8").trim()); //条码
                staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(result.Content, i*26+22)); //重量
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 2));     // 工作号
                staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 4));   // 目标站
                staProtocol.setFinishWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 6)); //已完成工作号
                staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content, i * 26 + 10, 12, "UTF-8").trim()); //条码
                staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 26 + 22)); //重量
//                staProtocol.setWorkMode((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 8));// 工作模式
                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 18 + 10));     // 工作号
                staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 18 + 12));   // 目标站
                //staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 18 + 10));     // 工作号
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                    staProtocol.setPakMk(true);
@@ -170,7 +190,7 @@
        OperateResultExOne<byte[]> resultBarcode = siemensS7Net.Read("DB100.166", (short) 9);
        if (resultBarcode.IsSuccess) {
            //条码数据
            String barcode = siemensS7Net.getByteTransform().TransString(resultBarcode.Content,0,9, "UTF-8");// 条码
            String barcode = siemensS7Net.getByteTransform().TransString(resultBarcode.Content, 0, 9, "UTF-8");// 条码
            BasConveyorStaService basConveyorStaService = SpringUtils.getBean(BasConveyorStaService.class);
            DeviceBarcodeService deviceBarcodeService = SpringUtils.getBean(DeviceBarcodeService.class);
            BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, 31002));
@@ -187,7 +207,7 @@
        if (!Cools.isEmpty(result) && result.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), device.getId()));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), device.getId()));
            // 根据实时信息更新数据库
            try {
@@ -224,12 +244,12 @@
        siemensS7Net.setRack(device.getRack().byteValue());
        siemensS7Net.setSlot(device.getSlot().byteValue());
        OperateResult connect = siemensS7Net.ConnectServer();
        if(connect.IsSuccess){
        if (connect.IsSuccess) {
            result = true;
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot()));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot()));
            News.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort());
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot()));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot()));
            News.error("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort());
        }
        // siemensS7Net.ConnectClose();
@@ -246,44 +266,45 @@
        int index = staNos1.indexOf(siteId);
        index += 1;
        OperateResult write = siemensS7Net.Write("DB83." + (index *8+6),(int) workNo);    // 工作号
        OperateResult write = siemensS7Net.Write("DB83." + (index * 8 + 6), (int) workNo);    // 工作号
        if (!write.IsSuccess) {
            StaProtocol staProtocol = station.get(siteId);
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
                staProtocol.setPakMk(true);
            }
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", device.getId(), JSON.toJSON(staProtocol)));
            log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", device.getId(), JSON.toJSON(staProtocol));
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), device.getId(), JSON.toJSON(workNo)));
            log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}",  device.getId(), JSON.toJSON(workNo));
            log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", device.getId(), JSON.toJSON(workNo));
            return true;
        }
        return false;
    }
    @Override
    public boolean writeStaNo(int siteId,short staNo) {
    public boolean writeStaNo(int siteId, short staNo) {
        int index = staNos1.indexOf(siteId);
        index += 1;
        OperateResult write = siemensS7Net.Write("DB101." + (index * 8 + 4),(int) staNo);    // 目标站
        OperateResult write = siemensS7Net.Write("DB101." + (index * 8 + 4), (int) staNo);    // 目标站
        if (!write.IsSuccess) {
            StaProtocol staProtocol = station.get(siteId);
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
                staProtocol.setPakMk(true);
            }
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", device.getId(), JSON.toJSON(staProtocol)));
            log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", device.getId(), JSON.toJSON(staProtocol));
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), device.getId(), JSON.toJSON(staNo)));
            log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}",  device.getId(), JSON.toJSON(staNo));
            log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", device.getId(), JSON.toJSON(staNo));
            return true;
        }
        return false;
    }
    @Override
    public boolean writeWorkSta(int siteId, short workNo, short staNo) {
@@ -294,37 +315,42 @@
        array[0] = workNo;
        array[1] = staNo;
        String workNoAddress = "DB83." + (index * 8 + 6);
        String staNoAddress = "DB83." + (index * 8 + 4);
        String workNoAddress = "DB83." + (index * 8 + 6);
        OperateResult write1 = null;    // 工作号
        OperateResult write2 = null;     // 目标站
        //任务下发次数
        int writeCount = 0;
        do {
            write1 = siemensS7Net.Write(workNoAddress,  workNo);    // 工作号
            write1 = siemensS7Net.Write(workNoAddress, workNo);    // 工作号
            write2 = siemensS7Net.Write(staNoAddress, staNo);
            if ((write1.IsSuccess && write2.IsSuccess)) {
                OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8);
                if (readResult.IsSuccess) {
                    int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
                    int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
                    if (workNo == workNo2 && staNo == staNo2) {
                        //任务命令写入成功
                        log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
                        return true;
                    } else {//返回结果是成功了,但是真实值不相同
                        writeCount++;
                        log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
                    }
                } else {
                    writeCount++;
                    log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
                }
            }else {
                log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
                return true;
//                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB82.14", (short) (staNos2.indexOf(siteId) * 26));
//                //OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8);
//                if (readResult.IsSuccess) {
//                    int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);     // 工作号
//                    int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);   // 目标站
//                    // int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
//                    //int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
//                    if (workNo == workNo2 && staNo == staNo2) {
//                        //任务命令写入成功
//                        log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
//                        return true;
//                    } else {//返回结果是成功了,但是真实值不相同
//                        writeCount++;
//                        log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
//                    }
//                } else {
//                    writeCount++;
//                    log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
//                }
            } else {
                writeCount++;
            }
        }while (writeCount < 5) ;
        } while (writeCount < 5);
//        StaProtocol staProtocol = station.get(siteId);
//        if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
//            staProtocol.setPakMk(true);
@@ -380,7 +406,7 @@
    @Override
    public boolean switchWorkMode(int siteId, int workMode) {
        WorkModeTypeDto workModeTypeDto = workModeTypes.get(siteId);
        if(workModeTypeDto == null) {
        if (workModeTypeDto == null) {
            return false;
        }
zy-asrs-wcs/src/main/resources/application.yml
@@ -20,7 +20,7 @@
#    password: zy@123
    url: jdbc:mysql://127.0.0.1:3306/fyxcasrs?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
    password: zhangchao
#    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://47.97.1.152:51433;databasename=jkasrs
#    username: sa
@@ -63,5 +63,5 @@
config:
  token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2
pythonCalcPath: D:\\path\\cpu.py
pythonCalcSimilarity: D:\\path\\similarity.py
pythonCalcPath: /Users/zhangc/workspace/zoneyang/cpu.py
pythonCalcSimilarity: /Users/zhangc/workspace/zoneyang/similarity.py