Junjie
2023-07-29 21eac69df8b18ef44ab267a4e2efe714f985d8d9
提升机穿梭车配置
7个文件已修改
468 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LiftController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/LiftThread.java 291 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/console.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/shuttle.css 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/shuttle.html 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LiftController.java
@@ -52,14 +52,13 @@
    @ManagerAuth(memo = "提升机信息表")
    public R liftStateTable(){
        List<LiftStateTableVo> list = new ArrayList<>();
        List<BasLift> lifts = basLiftService.selectList(new EntityWrapper<BasLift>().orderBy("lift_no"));
        for (BasLift basLift : lifts) {
        for (LiftSlave slave : slaveProperties.getLift()) {
            // 表格行
            LiftStateTableVo vo = new LiftStateTableVo();
            vo.setLiftNo(basLift.getLiftNo());   //提升机号
            vo.setLiftNo(slave.getId());   //提升机号
            list.add(vo);
            // 获取提升机信息
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basLift.getLiftNo());
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
            if (liftThread == null) {
                vo.setProtocolStatus(LiftProtocolStatusType.OFFLINE.id);//离线
                continue;
@@ -100,14 +99,13 @@
    @ManagerAuth(memo = "提升机数据表")
    public R liftMsgTable(){
        List<LiftMsgTableVo> list = new ArrayList<>();
        List<BasLift> lifts = basLiftService.selectList(new EntityWrapper<BasLift>().orderBy("lift_no"));
        for (BasLift basLift : lifts) {
        for (LiftSlave slave : slaveProperties.getLift()) {
            // 表格行
            LiftMsgTableVo vo = new LiftMsgTableVo();
            vo.setLiftNo(basLift.getLiftNo());   //  提升机号
            vo.setLiftNo(slave.getId());   //  提升机号
            list.add(vo);
            // 获取提升机信息
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basLift.getLiftNo());
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
            if (liftThread == null) {
                continue;
            }
src/main/java/com/zy/core/thread/LiftThread.java
@@ -4,9 +4,10 @@
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.ModBus.ModbusTcpNet;
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.core.common.DateUtils;
import com.core.common.RadixTools;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasLift;
@@ -45,7 +46,7 @@
@Slf4j
public class LiftThread implements  Runnable, ThreadHandler {
    private ModbusTcpNet modbusTcpNet;
    private SiemensS7Net siemensS7Net;
    private LiftSlave slave;
    private LiftProtocol liftProtocol;
    private RedisUtil redisUtil;
@@ -92,10 +93,8 @@
    public boolean connect() {
        boolean result = false;
        //-------------------------提升机连接方法------------------------//
        modbusTcpNet = new ModbusTcpNet(slave.getIp(), slave.getPort(), (byte) 0x02);
        // 当你需要指定格式的数据解析时,就需要设置下面的这个信息
        modbusTcpNet.setDataFormat(DataFormat.ABCD);
        OperateResult connect = modbusTcpNet.ConnectServer();
        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
        OperateResult connect = siemensS7Net.ConnectServer();
        if(connect.IsSuccess){
            result = true;
            OutputQueue.CRN.offer(MessageFormat.format( "【{0}】提升机plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
@@ -104,14 +103,14 @@
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】提升机plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
            log.error("提升机plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
        }
        modbusTcpNet.ConnectClose();
        siemensS7Net.ConnectClose();
        //-------------------------提升机连接方法------------------------//
        return result;
    }
    @Override
    public void close() {
        modbusTcpNet.ConnectClose();
        siemensS7Net.ConnectClose();
    }
    private void read() {
@@ -132,13 +131,12 @@
            }
        } catch (Exception e) {
            OutputQueue.LIFT.offer(MessageFormat.format("【{0}】提升机plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
            initLift();
        }
    }
    private void readStatus() {
        try {
            OperateResultExOne<byte[]> result = modbusTcpNet.Read("41117", (short) 50);
            OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.200", (short) 24);
            if (result.IsSuccess) {
                if (null == liftProtocol) {
                    liftProtocol = new LiftProtocol();
@@ -147,97 +145,97 @@
                //----------读取提升机状态-----------
                //获取数据
                byte[] content = result.Content;
                //提升机锁定
                liftProtocol.setLiftLock(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content, 0)));
                //位置到达反馈
                liftProtocol.setPositionArrivalFeedback(modbusTcpNet.getByteTransform().TransInt16(content,2));
                byte b1 = modbusTcpNet.getByteTransform().TransByte(content, 5);
                byte b2 = modbusTcpNet.getByteTransform().TransByte(content, 4);
                int[] datas1 = CommonUtils.byteToBits(b1);
                int[] datas2 = CommonUtils.byteToBits(b2);
                //准备就绪
                liftProtocol.setReady(CommonUtils.intToBoolean(datas1[0]));
                //运行中
                liftProtocol.setRunning(CommonUtils.intToBoolean(datas1[1]));
                //联机/单机
                liftProtocol.setMode(CommonUtils.intToBoolean(datas1[2]));
                //输送线前端光电有货
                liftProtocol.setLineFrontHasStock(CommonUtils.intToBoolean(datas1[3]));
                //输送线正转反馈
                liftProtocol.setForwardRotationFeedback(CommonUtils.intToBoolean(datas1[4]));
                //输送线反转反馈
                liftProtocol.setReverseFeedback(CommonUtils.intToBoolean(datas1[5]));
                //输送线电机过载
                liftProtocol.setMotorOverload(CommonUtils.intToBoolean(datas1[6]));
                //输送线末端光电有货
                liftProtocol.setLineEndHasStock(CommonUtils.intToBoolean(datas1[7]));
                //进输送线卡托盘报警
                liftProtocol.setInConveyLineCardTrayAlarm(CommonUtils.intToBoolean(datas2[0]));
                //出输送线卡托盘报警
                liftProtocol.setOutConveyLineCardTrayAlarm(CommonUtils.intToBoolean(datas2[1]));
                //平台位置偏差报警
                liftProtocol.setPlatPositionDeviationAlarm(CommonUtils.intToBoolean(datas2[2]));
                //平台扭矩偏差报警
                liftProtocol.setPlatTorqueDeviationAlarm(CommonUtils.intToBoolean(datas2[3]));
                //平台四向车检测
                liftProtocol.setPlatShuttleCheck(CommonUtils.intToBoolean(datas2[4]));
                //未就绪状态
                liftProtocol.setNotReady(modbusTcpNet.getByteTransform().TransInt16(content,6));
                //伺服1错误
                liftProtocol.setServoError1(modbusTcpNet.getByteTransform().TransInt16(content,8));
                //伺服2错误
                liftProtocol.setServoError2(modbusTcpNet.getByteTransform().TransInt16(content,10));
                //伺服3错误
                liftProtocol.setServoError3(modbusTcpNet.getByteTransform().TransInt16(content,12));
                //伺服4错误
                liftProtocol.setServoError4(modbusTcpNet.getByteTransform().TransInt16(content,14));
                //提升机实际速度反馈
                liftProtocol.setLiftActualSpeed(modbusTcpNet.getByteTransform().TransInt16(content,16));
                ///读取提升机状态-end
                //将提升机状态保存至数据库
                BasLiftService liftService = SpringUtils.getBean(BasLiftService.class);
                BasLift basLift = liftService.selectById(liftProtocol.getLiftNo());
                if (basLift == null) {
                    basLift = new BasLift();
                    //提升机号
                    basLift.setLiftNo(slave.getId());
                    liftService.insert(basLift);
                }
                basLift.setStatus(liftProtocol.getProtocolStatus());
                basLift.setWrkNo(liftProtocol.getTaskNo().intValue());
                basLift.setUpdateTime(new Date());
                basLift.setPakMk(liftProtocol.getPakMk());
                basLift.setLiftLock(liftProtocol.getLiftLock());
                basLift.setPositionArrivalFeedback(liftProtocol.getPositionArrivalFeedback().intValue());
                basLift.setReady(liftProtocol.getReady());
                basLift.setRunning(liftProtocol.getRunning());
                basLift.setMode(liftProtocol.getMode());
                basLift.setLineFrontHasStock(liftProtocol.getLineFrontHasStock());
                basLift.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback());
                basLift.setReverseFeedback(liftProtocol.getReverseFeedback());
                basLift.setMotorOverload(liftProtocol.getMotorOverload());
                basLift.setLineEndHasStock(liftProtocol.getLineEndHasStock());
                basLift.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm());
                basLift.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm());
                basLift.setPlatPositionDeviationAlarm(liftProtocol.getPlatPositionDeviationAlarm());
                basLift.setPlatTorqueDeviationAlarm(liftProtocol.getPlatTorqueDeviationAlarm());
                basLift.setPlatShuttleCheck(liftProtocol.getPlatShuttleCheck());
                basLift.setNotReady(liftProtocol.getNotReady().intValue());
                basLift.setServoError1(liftProtocol.getServoError1().intValue());
                basLift.setServoError2(liftProtocol.getServoError2().intValue());
                basLift.setServoError3(liftProtocol.getServoError3().intValue());
                basLift.setServoError4(liftProtocol.getServoError4().intValue());
                basLift.setLiftActualSpeed(liftProtocol.getLiftActualSpeed().intValue());
                if (liftService.updateById(basLift)) {
                    OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
//                    log.info(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
                }
//                byte[] content = result.Content;
//                //提升机锁定
//                liftProtocol.setLiftLock(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content, 0)));
//                //位置到达反馈
//                liftProtocol.setPositionArrivalFeedback(modbusTcpNet.getByteTransform().TransInt16(content,2));
//
//
//                byte b1 = modbusTcpNet.getByteTransform().TransByte(content, 5);
//                byte b2 = modbusTcpNet.getByteTransform().TransByte(content, 4);
//                int[] datas1 = CommonUtils.byteToBits(b1);
//                int[] datas2 = CommonUtils.byteToBits(b2);
//                //准备就绪
//                liftProtocol.setReady(CommonUtils.intToBoolean(datas1[0]));
//                //运行中
//                liftProtocol.setRunning(CommonUtils.intToBoolean(datas1[1]));
//                //联机/单机
//                liftProtocol.setMode(CommonUtils.intToBoolean(datas1[2]));
//                //输送线前端光电有货
//                liftProtocol.setLineFrontHasStock(CommonUtils.intToBoolean(datas1[3]));
//                //输送线正转反馈
//                liftProtocol.setForwardRotationFeedback(CommonUtils.intToBoolean(datas1[4]));
//                //输送线反转反馈
//                liftProtocol.setReverseFeedback(CommonUtils.intToBoolean(datas1[5]));
//                //输送线电机过载
//                liftProtocol.setMotorOverload(CommonUtils.intToBoolean(datas1[6]));
//                //输送线末端光电有货
//                liftProtocol.setLineEndHasStock(CommonUtils.intToBoolean(datas1[7]));
//                //进输送线卡托盘报警
//                liftProtocol.setInConveyLineCardTrayAlarm(CommonUtils.intToBoolean(datas2[0]));
//                //出输送线卡托盘报警
//                liftProtocol.setOutConveyLineCardTrayAlarm(CommonUtils.intToBoolean(datas2[1]));
//                //平台位置偏差报警
//                liftProtocol.setPlatPositionDeviationAlarm(CommonUtils.intToBoolean(datas2[2]));
//                //平台扭矩偏差报警
//                liftProtocol.setPlatTorqueDeviationAlarm(CommonUtils.intToBoolean(datas2[3]));
//                //平台四向车检测
//                liftProtocol.setPlatShuttleCheck(CommonUtils.intToBoolean(datas2[4]));
//
//                //未就绪状态
//                liftProtocol.setNotReady(modbusTcpNet.getByteTransform().TransInt16(content,6));
//                //伺服1错误
//                liftProtocol.setServoError1(modbusTcpNet.getByteTransform().TransInt16(content,8));
//                //伺服2错误
//                liftProtocol.setServoError2(modbusTcpNet.getByteTransform().TransInt16(content,10));
//                //伺服3错误
//                liftProtocol.setServoError3(modbusTcpNet.getByteTransform().TransInt16(content,12));
//                //伺服4错误
//                liftProtocol.setServoError4(modbusTcpNet.getByteTransform().TransInt16(content,14));
//                //提升机实际速度反馈
//                liftProtocol.setLiftActualSpeed(modbusTcpNet.getByteTransform().TransInt16(content,16));
//
//                ///读取提升机状态-end
//
//                //将提升机状态保存至数据库
//                BasLiftService liftService = SpringUtils.getBean(BasLiftService.class);
//                BasLift basLift = liftService.selectById(liftProtocol.getLiftNo());
//                if (basLift == null) {
//                    basLift = new BasLift();
//                    //提升机号
//                    basLift.setLiftNo(slave.getId());
//                    liftService.insert(basLift);
//                }
//                basLift.setStatus(liftProtocol.getProtocolStatus());
//                basLift.setWrkNo(liftProtocol.getTaskNo().intValue());
//                basLift.setUpdateTime(new Date());
//                basLift.setPakMk(liftProtocol.getPakMk());
//                basLift.setLiftLock(liftProtocol.getLiftLock());
//                basLift.setPositionArrivalFeedback(liftProtocol.getPositionArrivalFeedback().intValue());
//                basLift.setReady(liftProtocol.getReady());
//                basLift.setRunning(liftProtocol.getRunning());
//                basLift.setMode(liftProtocol.getMode());
//                basLift.setLineFrontHasStock(liftProtocol.getLineFrontHasStock());
//                basLift.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback());
//                basLift.setReverseFeedback(liftProtocol.getReverseFeedback());
//                basLift.setMotorOverload(liftProtocol.getMotorOverload());
//                basLift.setLineEndHasStock(liftProtocol.getLineEndHasStock());
//                basLift.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm());
//                basLift.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm());
//                basLift.setPlatPositionDeviationAlarm(liftProtocol.getPlatPositionDeviationAlarm());
//                basLift.setPlatTorqueDeviationAlarm(liftProtocol.getPlatTorqueDeviationAlarm());
//                basLift.setPlatShuttleCheck(liftProtocol.getPlatShuttleCheck());
//                basLift.setNotReady(liftProtocol.getNotReady().intValue());
//                basLift.setServoError1(liftProtocol.getServoError1().intValue());
//                basLift.setServoError2(liftProtocol.getServoError2().intValue());
//                basLift.setServoError3(liftProtocol.getServoError3().intValue());
//                basLift.setServoError4(liftProtocol.getServoError4().intValue());
//                basLift.setLiftActualSpeed(liftProtocol.getLiftActualSpeed().intValue());
//                if (liftService.updateById(basLift)) {
//                    OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
////                    log.info(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
//                }
            }else {
                OutputQueue.LIFT.offer(MessageFormat.format("【{0}】{1}提升机plc状态信息失败", DateUtils.convert(new Date()), slave.getId()));
@@ -245,7 +243,6 @@
            }
        } catch (Exception e) {
            OutputQueue.LIFT.offer(MessageFormat.format("【{0}】提升机plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
            initLift();
        }
    }
@@ -255,51 +252,53 @@
            return false;
        }
        command.setLiftNo(slave.getId().shortValue());
        short[] array = getCommandArr(command);//获取命令报文
//        command.setLiftNo(slave.getId().shortValue());
//        short[] array = getCommandArr(command);//获取命令报文
//
//        try {
//            Thread.sleep(500);//命令下发前休眠
//        } catch (InterruptedException e) {
//            throw new RuntimeException(e);
//        }
//
//        OperateResult result = modbusTcpNet.Write("41088", array);
//        if (result != null && result.IsSuccess) {
//            News.info("提升机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
//            OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
//
//            try {
//                Thread.sleep(500);//命令下发后休眠
//            } catch (InterruptedException e) {
//                throw new RuntimeException(e);
//            }
//
//            for (int i = 0; i < 5; i++) {
//                if (command.getRun().intValue() == 4 || command.getRun().intValue() == 5) {
//                    break;//系统复位和链条停止转动不需要重发
//                }
//                readStatus();//重新读取状态
//                if (liftProtocol.getRunning()) {
//                    break;
//                }
//
//                //判断是否运行中,如不运行,重新下发命令
//                result = modbusTcpNet.Write("41088", array);
//                News.info("提升机命令下发[id:{}] >>>>> {},次数:{}", slave.getId(), JSON.toJSON(command), i);
//                OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2},次数:{}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command), i));
//                try {
//                    Thread.sleep(300);//命令下发后休眠
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
//            }
//            return true;
//        } else {
//            OutputQueue.LIFT.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;
//        }
        try {
            Thread.sleep(500);//命令下发前休眠
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        OperateResult result = modbusTcpNet.Write("41088", array);
        if (result != null && result.IsSuccess) {
            News.info("提升机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
            OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
            try {
                Thread.sleep(500);//命令下发后休眠
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            for (int i = 0; i < 5; i++) {
                if (command.getRun().intValue() == 4 || command.getRun().intValue() == 5) {
                    break;//系统复位和链条停止转动不需要重发
                }
                readStatus();//重新读取状态
                if (liftProtocol.getRunning()) {
                    break;
                }
                //判断是否运行中,如不运行,重新下发命令
                result = modbusTcpNet.Write("41088", array);
                News.info("提升机命令下发[id:{}] >>>>> {},次数:{}", slave.getId(), JSON.toJSON(command), i);
                OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2},次数:{}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command), i));
                try {
                    Thread.sleep(300);//命令下发后休眠
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            return true;
        } else {
            OutputQueue.LIFT.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;
        }
        return true;
    }
    //获取命令报文
src/main/resources/application.yml
@@ -8,7 +8,7 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://192.168.4.15:1433;databasename=skasrs
    url: jdbc:sqlserver://192.168.4.15:1433;databasename=tzskasrs
    username: sa
#    password: Zoneyung@zy56$
    password: sa@123
@@ -175,10 +175,104 @@
    port: 502
    rack: 0
    slot: 0
  # 四向穿梭车3
  shuttle[2]:
    id: 3
    ip: 10.10.10.221
    port: 502
    rack: 0
    slot: 0
  # 四向穿梭车4
  shuttle[3]:
    id: 4
    ip: 10.10.10.221
    port: 502
    rack: 0
    slot: 0
  # 四向穿梭车5
  shuttle[4]:
    id: 5
    ip: 10.10.10.221
    port: 502
    rack: 0
    slot: 0
  # 四向穿梭车6
  shuttle[5]:
    id: 6
    ip: 10.10.10.221
    port: 502
    rack: 0
    slot: 0
  # 四向穿梭车7
  shuttle[6]:
    id: 7
    ip: 10.10.10.221
    port: 502
    rack: 0
    slot: 0
  # 四向穿梭车8
  shuttle[7]:
    id: 8
    ip: 10.10.10.221
    port: 502
    rack: 0
    slot: 0
  # 四向穿梭车9
  shuttle[8]:
    id: 9
    ip: 10.10.10.221
    port: 502
    rack: 0
    slot: 0
  # 四向穿梭车10
  shuttle[9]:
    id: 10
    ip: 10.10.10.221
    port: 502
    rack: 0
    slot: 0
  # 提升机1
  lift[0]:
    id: 1
    ip: 10.10.10.231
    ip: 192.168.4.250
    port: 502
    row: 18
    bay: 2
    sta[0]:
      staNo: 105
      lev: 1
    sta[1]:
      staNo: 106
      lev: 2
    sta[2]:
      staNo: 107
      lev: 3
    sta[3]:
      staNo: 108
      lev: 4
  # 提升机2
  lift[1]:
    id: 2
    ip: 127.0.0.1
    port: 502
    row: 18
    bay: 2
    sta[0]:
      staNo: 105
      lev: 1
    sta[1]:
      staNo: 106
      lev: 2
    sta[2]:
      staNo: 107
      lev: 3
    sta[3]:
      staNo: 108
      lev: 4
  # 提升机3
  lift[2]:
    id: 3
    ip: 127.0.0.1
    port: 502
    row: 18
    bay: 2
src/main/webapp/static/css/console.css
@@ -198,7 +198,7 @@
}
.states {
    background-image: url(../images/line.png);
    margin-bottom:54px;
    /*margin-bottom:54px;*/
}
.button {
    margin-left: 5%;
src/main/webapp/static/css/shuttle.css
@@ -15,7 +15,7 @@
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
    height: 25%;
    height: 28%;
}
/* 左 */
.command-log {
@@ -97,7 +97,7 @@
.shuttle-msg {
    /*overflow: auto;*/
    margin-top: 10px;
    height: 23%;
    height: 35%;
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
@@ -138,7 +138,7 @@
/* 任务设备选择框 */
.task-select {
    width: 13%;
    width: 26%;
    height: 100%;
    overflow: hidden;
    display: inline-block;
@@ -198,7 +198,7 @@
/* 任务作业选择框 */
.task-operator {
    width: 86%;
    width: 73%;
    height: 100%;
    overflow: hidden;
    padding: 5px 0 10px 20px;
@@ -259,7 +259,7 @@
/* -------------------- 第四模块 -------------------- */
.shuttle-output-board {
    margin-top: 10px;
    height: 20%;
    height: 10%;
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
src/main/webapp/views/console.html
@@ -66,7 +66,7 @@
        <!-- 四向穿梭车状态 -->
        <div class="line-status">
            <div class="body-head">穿梭车状态</div>
            <div id="shuttle-status-box">
            <div id="shuttle-status-box" style="height: 100px;overflow-y: scroll;overflow-x: hidden;">
            </div>
            <div class="button"><span>所有状态</span></div>
            <div class="button item-group">
@@ -82,7 +82,7 @@
        <!-- 提升机状态 -->
        <div class="line-status">
            <div class="body-head">提升机状态</div>
            <div id="lift-status-box">
            <div id="lift-status-box" style="height: 120px;overflow-y: scroll;overflow-x: hidden;">
            </div>
            <div class="button"><span>所有状态</span></div>
src/main/webapp/views/shuttle.html
@@ -20,15 +20,15 @@
        <div style="padding: 10px;height: 100%">
            <!-- 日志监控板 -->
            <div class="log-board">
                <div class="command-log" id="commandLogId" style="width: 5%;">
<!--                    <div data-shuttleNo="1" class="shuttle-command-item">-->
<!--                        <label>1#</label>-->
<!--                        <button class="demoBtn pos-btn">数据维护</button>-->
<!--                        <button id="mode-1" class="demoBtn mode-btn" >设备信息</button>-->
<!--                    </div>-->
                </div>
<!--                <div class="command-log" id="commandLogId" style="width: 5%;">-->
<!--&lt;!&ndash;                    <div data-shuttleNo="1" class="shuttle-command-item">&ndash;&gt;-->
<!--&lt;!&ndash;                        <label>1#</label>&ndash;&gt;-->
<!--&lt;!&ndash;                        <button class="demoBtn pos-btn">数据维护</button>&ndash;&gt;-->
<!--&lt;!&ndash;                        <button id="mode-1" class="demoBtn mode-btn" >设备信息</button>&ndash;&gt;-->
<!--&lt;!&ndash;                    </div>&ndash;&gt;-->
<!--                </div>-->
                <!-- 堆垛机状态位信息 -->
                <div class="shuttle-state" style="width: 95%;">
                <div class="shuttle-state" style="width: 100%;">
                    <table id="shuttle-state-table">
                        <thead>
                            <tr>
@@ -88,9 +88,9 @@
                <!-- 设备任务选择 -->
                <div class="task-select">
                    <!-- 选择 -->
                    <div id="shuttle-select" class="operator-item">
                    <div id="shuttle-select" class="operator-item" style="width: 100%;">
                        <span class="select-title">四向穿梭车号</span>
                        <div class="select-container" id="shuttleRadioBoxId">
                        <div class="select-container" id="shuttleRadioBoxId" style="display: flex;flex-wrap: wrap;justify-content: center;align-items: center;">
<!--                            <label><input type="radio" name="shuttleSelect" value="1" checked>&nbsp;1号穿梭车</label>-->
                        </div>
                    </div>
@@ -137,35 +137,6 @@
                                </div>
                            </div>
<!--                            <div style="width: 20%;">-->
<!--                                <div class="operator-item" style="height: auto;width: 100%;">-->
<!--                                    <span class="select-title">设置配置参数</span>-->
<!--                                    <div class="select-container" style="height: auto;padding: 30px 10px 10px 10px;">-->
<!--                                        <div class="select-container-item">-->
<!--                                            <span>运行速度</span>-->
<!--                                            <label><input id="runSpeed" type="text" name="runSpeed" /></label>-->
<!--                                        </div>-->
<!--                                        <div class="select-container-item">-->
<!--                                            <span>充电阈值</span>-->
<!--                                            <label><input id="chargeLine" type="text" name="runSpeed" /></label>-->
<!--                                        </div>-->
<!--                                        <div>-->
<!--                                            <button class="item" onclick="shuttleParamSave()">保存</button>-->
<!--                                        </div>-->
<!--                                    </div>-->
<!--                                </div>-->
<!--                            </div>-->
<!--                            <div style="width: 15%;">-->
<!--                                <div class="operator-item" style="height: auto;width: 100%;">-->
<!--                                    <span class="select-title">配置参数</span>-->
<!--                                    <div class="select-container" style="height: auto;padding: 30px 10px 10px 10px;">-->
<!--                                        <div>运行速度:<span id="runSpeedText"></span></div>-->
<!--                                        <div>充电阈值:<span id="chargeLineText"></span></div>-->
<!--                                    </div>-->
<!--                                </div>-->
<!--                            </div>-->
                        </div>
                    </fieldset>
                </div>