自动化立体仓库 - WCS系统
#
lsh
2024-06-25 f30358a20ae9a74ee7f6c604a8d102c1b9b24659
src/main/java/com/zy/core/thread/SteThread.java
@@ -143,57 +143,36 @@
                steProtocol.setRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 14));
                steProtocol.setBay(siemensS7Net.getByteTransform().TransInt16(result.Content, 16));
                steProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(result.Content, 18));
//                steProtocol.setReady(siemensS7Net.getByteTransform().TransInt16(result.Content, 20));
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, 20, 1);
                steProtocol.setReady(status[0]?(short)1:(short)0);
                steProtocol.setLoca(siemensS7Net.getByteTransform().TransInt16(result.Content, 20));
                steProtocol.setLocaStart(siemensS7Net.getByteTransform().TransInt16(result.Content, 22));
                steProtocol.setLocaEnd(siemensS7Net.getByteTransform().TransInt16(result.Content, 24));
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, 26, 1);
//                steProtocol.setReady(status[0]?(short)1:(short)0);
//                steProtocol.setReady(status[1]?(short)1:(short)0);
//                steProtocol.setReady(status[2]?(short)1:(short)0);
//                steProtocol.setLoad(status[3]?(short)1:(short)0);
//                steProtocol.setReady(status[4]?(short)1:(short)0);
                steProtocol.setChargeStatus(status[5]?(short)1:(short)0);
                steProtocol.setTrack(status[6]?(short)1:(short)0);
                steProtocol.setReady(status[3]?(short)1:(short)0);
//                steProtocol.setReady(status[3]?(short)1:(short)0);
//                steProtocol.setTrack(status[6]?(short)1:(short)0);
                SteLocaType locaType = SteLocaType.NONE;
                boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result.Content, 21, 1);
                if (steProtocol.getRow().intValue() >= 6) {
                    if (status[7]){//A点
                        locaType = SteLocaType.A;
                    }
                    if (status2[1]){//A待机点
                        if (locaType.equals(SteLocaType.NONE)) {
                            locaType = SteLocaType.A_WAITING;
                        }
                    }
                }else {
                    if (status2[0]){//B点
                        if (locaType.equals(SteLocaType.NONE)) {
                            locaType = SteLocaType.B;
                        }
                    }
                    if (status2[2]){//B待机点
                        if (locaType.equals(SteLocaType.NONE)) {
                            locaType = SteLocaType.B_WAITING;
                        }
                    }
                }
                boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result.Content, 27, 1);
                steProtocol.setLoca(locaType.id.shortValue());
                steProtocol.setReady(status2[3]?(short)1:(short)0);
                steProtocol.setLoad(status2[4]?(short)1:(short)0);
                steProtocol.setChargeStatus(status[0]?(short)1:(short)0);
                steProtocol.setTrack(status[1]?(short)1:(short)0);
//                steProtocol.setLoad(status2[6]?(short)1:(short)0);
                steProtocol.setLoad(status2[7]?(short)1:(short)0);
                OutputQueue.STE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
                // 复位信号
                if (steProtocol.getWaiting()) {
                    if (resetFlag) {
                        SteCommand steCommand = new SteCommand();
                        steCommand.setComplete(true);
                        if (write(steCommand) && confirmPos()) {
                            resetFlag = false;
                        }
                    }
                }
//                // 复位信号
//                if (steProtocol.getWaiting()) {
//                    if (resetFlag) {
//                        SteCommand steCommand = new SteCommand();
//                        steCommand.setComplete(true);
//                        if (write(steCommand) && confirmPos()) {
//                            resetFlag = false;
//                        }
//                    }
//                }
                // 根据实时信息更新数据库
                BasSteService service = SpringUtils.getBean(BasSteService.class);
@@ -244,8 +223,10 @@
            //组织任务前,先清空写任务确认位,以及任务完成确认位
            siemensS7Net.Write("DB100.0", (short) 0);//设备号
            siemensS7Net.Write("DB100.2", (short) 0);//任务号
            siemensS7Net.Write("DB100.12.0", false);//任务开始确认位
            siemensS7Net.Write("DB100.12.1", false);//任务完成确认
            siemensS7Net.Write("DB100.12", (short) 0);//起始点位
            siemensS7Net.Write("DB100.14", (short) 0);//目的点位
            siemensS7Net.Write("DB100.16.0", false);//任务开始确认位
            siemensS7Net.Write("DB100.16.1", false);//任务完成确认
            // 1.任务号
            OperateResult result0 = siemensS7Net.Write("DB100.2", command.getTaskNo().shortValue());
            try {
@@ -257,9 +238,11 @@
            if (command.getTaskMode() != 0) {
                // 2.作业
                OperateResult result1 = siemensS7Net.Write("DB100.4", command.getTaskMode());
                OperateResult result2 = siemensS7Net.Write("DB100.12", (short) command.getStartLoad().shortValue());//起始点位
                OperateResult result3 = siemensS7Net.Write("DB100.14", (short) command.getEndLoad().shortValue());//目的点位
                // 3.确认开始任务
                if (result0.IsSuccess && result1.IsSuccess) {
                    result = siemensS7Net.Write("DB100.12.0", true);
                if (result0.IsSuccess && result1.IsSuccess && result2.IsSuccess && result3.IsSuccess) {
                    result = siemensS7Net.Write("DB100.16.0", true);
                    try {
                        Thread.sleep(300);
@@ -270,11 +253,11 @@
            }
            // 任务完成
        } else {
            siemensS7Net.Write("DB100.2", (short) 0);//任务号
            siemensS7Net.Write("DB100.4.0", (short) 0);//任务类型
            siemensS7Net.Write("DB100.12.0", false);//任务开始确认位
//            siemensS7Net.Write("DB100.2", (short) 0);//任务号
//            siemensS7Net.Write("DB100.4.0", (short) 0);//任务类型
            siemensS7Net.Write("DB100.16.0", false);//任务开始确认位
            result = siemensS7Net.Write("DB100.12.1", true);//任务完成确认
            result = siemensS7Net.Write("DB100.16.1", true);//任务完成确认
        }
        try {
@@ -307,13 +290,6 @@
        } catch (Exception ignore) {}
        if (result != null && result.IsSuccess) {
            // 维护数据库排列层
            if (!steProtocol.getWaiting()) {
                if (!Cools.isEmpty(command.getRow(), command.getBay(), command.getLev())) {
                    this.modifyPos(command.getRow().intValue(), command.getBay().intValue(), command.getLev().intValue());
                }
            }
            News.info("穿梭车命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
            OutputQueue.STE.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
            return true;
@@ -321,13 +297,6 @@
            OutputQueue.STE.offer(MessageFormat.format("【{0}】写入穿梭车plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
            News.error("写入穿梭车plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            return false;
        }
    }
    public void modifyPos(Integer row, Integer bay, Integer lev) {
        BasSteService service = SpringUtils.getBean(BasSteService.class);
        if (!service.updatePos(this.slave.getId(), row, bay, lev)) {
            News.error("更新{}号穿梭车定位失败 ===>> 排:【{}】, 列:【{}】,层:【{}】", this.slave.getId(), row, bay, lev);
        }
    }
@@ -388,21 +357,21 @@
    /******************************************************************************************/
    /**************************************** 测试专用 *****************************************/
    /*****************************************************************************************/
    public static void main(String[] args) throws InterruptedException {
        SteSlave slave = new SteSlave();
        slave.setId(1);
        slave.setIp("192.168.2.1");
        slave.setPort(502);
        SteThread thread = new SteThread(slave);
        thread.connect();
        thread.readStatus();
        System.out.println(JSON.toJSONString(thread.steProtocol));
        // 穿梭车运行禁止
        SteCommand command = new SteCommand();
        command.setRun((short)0);
        thread.write(command);
    }
//    public static void main(String[] args) throws InterruptedException {
//        SteSlave slave = new SteSlave();
//        slave.setId(1);
//        slave.setIp("192.168.2.1");
//        slave.setPort(502);
//        SteThread thread = new SteThread(slave);
//        thread.connect();
//        thread.readStatus();
//        System.out.println(JSON.toJSONString(thread.steProtocol));
//
//        // 穿梭车运行禁止
//        SteCommand command = new SteCommand();
////        command.setRun((short)0);
//        thread.write(command);
//
//    }
}