src/main/java/com/zy/asrs/controller/ForkLiftController.java
@@ -59,7 +59,7 @@ for (DeviceConfig device : forkliftList) { // 表格行 JSONObject baseObj = new JSONObject(); baseObj.put("shuttleNo", device.getDeviceNo()); baseObj.put("liftNo", device.getDeviceNo()); list.add(baseObj); // 获取提升机信息 ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo()); @@ -112,7 +112,7 @@ StringBuilder str = new StringBuilder(); String s; int i = 0; while((s = OutputQueue.LIFT.poll()) != null && i <=10) { while((s = OutputQueue.FORKLIFT.poll()) != null && i <=10) { str.append("\n").append(s); i++; } @@ -286,9 +286,9 @@ Integer targetSta = param.getStaNo(); //获取提升机命令 List<ForkLiftCommand> liftCommand = forkLiftThread.getShuttleSwitchCommand(workNo, startSta, targetSta); ForkLiftCommand liftCommand = forkLiftThread.getShuttleSwitchCommand(workNo, startSta, targetSta); ArrayList<ForkLiftCommand> commands = new ArrayList<>(); commands.addAll(liftCommand); commands.add(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); @@ -308,9 +308,9 @@ Integer targetSta = param.getStaNo(); //获取提升机命令 List<ForkLiftCommand> liftCommand = forkLiftThread.getPickAndPutCommand(workNo, startSta, targetSta); ForkLiftCommand liftCommand = forkLiftThread.getPickAndPutCommand(workNo, startSta, targetSta); ArrayList<ForkLiftCommand> commands = new ArrayList<>(); commands.addAll(liftCommand); commands.add(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); @@ -330,9 +330,9 @@ Integer targetSta = param.getStaNo(); //获取提升机命令 List<ForkLiftCommand> liftCommand = forkLiftThread.getMoveCommand(workNo, startSta, targetSta); ForkLiftCommand liftCommand = forkLiftThread.getMoveCommand(workNo, startSta, targetSta); ArrayList<ForkLiftCommand> commands = new ArrayList<>(); commands.addAll(liftCommand); commands.add(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); src/main/java/com/zy/asrs/entity/BasLift.java
@@ -1,11 +1,14 @@ package com.zy.asrs.entity; import com.alibaba.fastjson.JSON; import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import com.baomidou.mybatisplus.annotations.TableField; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import com.zy.core.model.LiftStation; import org.springframework.format.annotation.DateTimeFormat; import com.core.common.SpringUtils; import com.zy.system.service.UserService; @@ -15,6 +18,7 @@ import lombok.Data; import com.baomidou.mybatisplus.annotations.TableName; import java.io.Serializable; import java.util.List; @Data @TableName("asr_bas_lift") @@ -86,6 +90,13 @@ @TableField("point") private String point; /** * 提升机站点 */ @ApiModelProperty(value= "提升机站点") @TableField("station_list") private String stationList; public BasLift() {} public BasLift(Integer liftNo, Integer status, Integer wrkNo, Date updateTime, Long updateBy, String memo, Boolean pakMk, String deviceStatus) { @@ -115,4 +126,15 @@ return null; } public List<LiftStation> getStationList$(){ List<LiftStation> list = new ArrayList<>(); if (Cools.isEmpty(this.stationList)){ return list; } List<LiftStation> liftStations = JSON.parseArray(stationList, LiftStation.class); list.addAll(liftStations); return list; } } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -762,9 +762,9 @@ } //获取提升机命令 List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev()); ForkLiftCommand liftCommand = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev()); ArrayList<ForkLiftCommand> commands = new ArrayList<>(); commands.addAll(liftCommands); commands.add(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); @@ -890,9 +890,9 @@ } //获取提升机命令 List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getLev(), wrkMast.getStaNo()); ForkLiftCommand liftCommand = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getLev(), wrkMast.getStaNo()); ArrayList<ForkLiftCommand> commands = new ArrayList<>(); commands.addAll(liftCommands); commands.add(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); @@ -924,6 +924,9 @@ for (DeviceConfig device : forkliftList) { //获取提升机信息 ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo()); if(forkLiftThread == null) { continue; } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { continue; @@ -1775,9 +1778,9 @@ } //获取提升机命令 List<ForkLiftCommand> liftCommands = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev()); ForkLiftCommand liftCommand = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev()); ArrayList<ForkLiftCommand> commands = new ArrayList<>(); commands.addAll(liftCommands); commands.add(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); @@ -1919,73 +1922,73 @@ //自动切换出入库模式 public void autoSwitchForkLiftIOMode() { List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() .eq("device_type", String.valueOf(SlaveType.ForkLift))); for (DeviceConfig device : forkliftList) { Integer liftNo = device.getDeviceNo(); ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); if (forkLiftThread == null) { continue; } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { continue; } List<Integer> liftAllStaNo = ForkLiftUtils.getLiftAllStaNo(liftNo); if (liftAllStaNo.isEmpty()) { continue; } List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo); if (conveyorBindLiftAllStaNo.isEmpty()) { continue; } //获取入库任务 List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() .in("sta_no", liftAllStaNo) .in("wrk_sts" , WrkStsType.NEW_INBOUND.sts , WrkStsType.INBOUND_DEVICE_RUN.sts , WrkStsType.INBOUND_LIFT_RUN.sts , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts , WrkStsType.INBOUND_SHUTTLE_RUN.sts , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts )); //获取出库任务 List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() .in("sta_no", conveyorBindLiftAllStaNo) .in("wrk_sts" , WrkStsType.NEW_OUTBOUND.sts , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts , WrkStsType.OUTBOUND_LIFT_RUN.sts , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts )); if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.NONE)) { //未知模式 if (!inWrkMasts.isEmpty()) { forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); } else if (!outWrkMasts.isEmpty()) { forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT); }else { forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); } } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) { //入库模式 if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) { forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT); } } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { //出库模式 if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) { forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); } } } // List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() // .eq("device_type", String.valueOf(SlaveType.ForkLift))); // for (DeviceConfig device : forkliftList) { // Integer liftNo = device.getDeviceNo(); // ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); // if (forkLiftThread == null) { // continue; // } // ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); // if (forkLiftProtocol == null) { // continue; // } // // List<Integer> liftAllStaNo = ForkLiftUtils.getLiftAllStaNo(liftNo); // if (liftAllStaNo.isEmpty()) { // continue; // } // // List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo); // if (conveyorBindLiftAllStaNo.isEmpty()) { // continue; // } // // //获取入库任务 // List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() // .in("sta_no", liftAllStaNo) // .in("wrk_sts" // , WrkStsType.NEW_INBOUND.sts // , WrkStsType.INBOUND_DEVICE_RUN.sts // , WrkStsType.INBOUND_LIFT_RUN.sts // , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts // , WrkStsType.INBOUND_SHUTTLE_RUN.sts // , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts // )); // // //获取出库任务 // List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() // .in("sta_no", conveyorBindLiftAllStaNo) // .in("wrk_sts" // , WrkStsType.NEW_OUTBOUND.sts // , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts // , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts // , WrkStsType.OUTBOUND_LIFT_RUN.sts // , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts // )); // // if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.NONE)) { // //未知模式 // if (!inWrkMasts.isEmpty()) { // forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); // } else if (!outWrkMasts.isEmpty()) { // forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT); // }else { // forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); // } // } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) { // //入库模式 // if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) { // forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT); // } // } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { // //出库模式 // if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) { // forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); // } // } // } } //出库任务预调度提升机 @@ -2056,9 +2059,9 @@ int workNo = commonService.getWorkNo(WrkIoType.FORKLIFT_MOVE.id);//获取任务号 //获取提升机命令 List<ForkLiftCommand> liftCommand = forkLiftThread.getMoveCommand(workNo, forkLiftProtocol.getLev(), Utils.getLev(wrkMast.getSourceLocNo())); ForkLiftCommand liftCommand = forkLiftThread.getMoveCommand(workNo, forkLiftProtocol.getLev(), Utils.getLev(wrkMast.getSourceLocNo())); ArrayList<ForkLiftCommand> commands = new ArrayList<>(); commands.addAll(liftCommand); commands.add(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); src/main/java/com/zy/common/utils/ForkLiftOperaUtils.java
File was deleted src/main/java/com/zy/core/ServerBootstrap.java
@@ -3,13 +3,16 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.exception.CoolException; import com.zy.asrs.entity.BasLift; import com.zy.asrs.entity.DeviceConfig; import com.zy.asrs.service.BasLiftService; import com.zy.asrs.service.DeviceConfigService; import com.zy.common.utils.RedisUtil; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.thread.impl.NyShuttleThread; import com.zy.core.thread.impl.ZyForkLiftThread; import com.zy.core.utils.DeviceMsgUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +39,8 @@ private DeviceConfigService deviceConfigService; @Autowired private DeviceMsgUtils deviceMsgUtils; @Autowired private BasLiftService basLiftService; @PostConstruct @Async @@ -70,44 +75,38 @@ List<DeviceConfig> allDevices = new ArrayList<>(); List<DeviceConfig> fakeDevices = new ArrayList<>(); // // 初始化货叉提升机 // List<DeviceConfig> forkLiftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() // .eq("device_type", String.valueOf(SlaveType.ForkLift))); // allDevices.addAll(forkLiftList); // for (DeviceConfig deviceConfig : forkLiftList) { // News.info("初始化货叉提升机........................................................"); // ThreadHandler thread = null; // if (deviceConfig.getThreadImpl().equals("ZyForkLiftThread")) { // thread = new ZyForkLiftThread(forkLiftSlave, redisUtil); // } else if (deviceConfig.getThreadImpl().equals("LfdZyForkLiftSlaveThread")) { // thread = new LfdZyForkLiftSlaveThread(forkLiftSlave, redisUtil, forkLiftSlave.getMasterId()); // } else { // throw new CoolException("未知的线程实现"); // } // // new Thread(thread).start(); // SlaveConnection.put(SlaveType.ForkLift, deviceConfig.getDeviceNo(), thread); // } // 初始化货叉提升机 News.info("初始化货叉提升机........................................................"); List<DeviceConfig> forkLiftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() .eq("device_type", String.valueOf(SlaveType.ForkLift))); for (DeviceConfig deviceConfig : forkLiftList) { BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>().eq("lift_no", deviceConfig.getDeviceNo())); if (basLift == null) { throw new CoolException("未配置货叉提升机数据"); } // // 初始化货叉提升机 // for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLiftMaster()) { // News.info("初始化货叉提升机Master........................................................"); // ThreadHandler thread = null; // if (forkLiftSlave.getThreadImpl().equals("LfdZyForkLiftMasterThread")) { // thread = new LfdZyForkLiftMasterThread(forkLiftSlave, redisUtil); // } else { // throw new CoolException("未知的线程实现"); // } // // new Thread(thread).start(); // SlaveConnection.put(SlaveType.ForkLiftMaster, forkLiftSlave.getId(), thread); // } ThreadHandler thread = null; if (deviceConfig.getThreadImpl().equals("ZyForkLiftThread")) { thread = new ZyForkLiftThread(deviceConfig, basLift.getStationList$(), redisUtil); } else { throw new CoolException("未知的线程实现"); } new Thread(thread).start(); SlaveConnection.put(SlaveType.ForkLift, deviceConfig.getDeviceNo(), thread); if (deviceConfig.getFake() == 1) { fakeDevices.add(deviceConfig); }else { allDevices.add(deviceConfig); } } // 初始化四向穿梭车 News.info("初始化四向穿梭车......................................................"); List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() .eq("device_type", String.valueOf(SlaveType.Shuttle))); for (DeviceConfig deviceConfig : shuttleList) { News.info("初始化四向穿梭车......................................................"); ThreadHandler thread = null; if (deviceConfig.getThreadImpl().equals("NyShuttleThread")) { thread = new NyShuttleThread(deviceConfig, redisUtil); src/main/java/com/zy/core/enums/ForkLiftTaskModeType.java
@@ -9,6 +9,10 @@ PICK_PUT(3, "取放货"), SHUTTLE_SWITCH(4, "小车换层"), MOVE(5, "提升机移动"), RESET(9996, "复位"), SWITCH_IN(9997, "切换入库模式"), SWITCH_OUt(9998, "切换出库模式"), READ_STATUS(9999, "读取状态"), ; public Integer id; src/main/java/com/zy/core/model/DeviceCommandMsgModel.java
@@ -9,6 +9,8 @@ private String deviceType; private String resultKey; private Object command; } src/main/java/com/zy/core/model/DeviceMsgModel.java
@@ -13,4 +13,6 @@ private String deviceOriginMsg; private String resultKey; } src/main/java/com/zy/core/model/command/ForkLiftCommand.java
@@ -17,27 +17,27 @@ /** * 任务号 */ private Short taskNo; private Integer taskNo; /** * 任务模式 */ private Short mode; private Integer mode; /** * 取货数据 */ private Short pick; private Integer pick; /** * 放货数据 */ private Short put; private Integer put; /** * 任务确认 */ private Short confirm; private Integer confirm; /** * 命令是否完成,默认false未完成 src/main/java/com/zy/core/thread/ForkLiftThread.java
@@ -26,6 +26,8 @@ CommandResponse move(ForkLiftCommand command);//小车换层 CommandResponse switchIOMode(ForkLiftCommand command);//切换出入库模式 CommandResponse reset();//复位 boolean isIdle();//是否空闲 @@ -38,16 +40,18 @@ boolean setSyncTaskNo(Integer taskNo);//设置工作号 boolean switchIOMode(ForkLiftIoModeType type);//切换出入库模式 int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type);//生成硬件设备工作号 //***************获取命令***************** List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put);//取放货指令 ForkLiftCommand getPickAndPutCommand(Integer taskNo, Integer pick, Integer put);//取放货指令 List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put);//小车换层 ForkLiftCommand getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put);//小车换层 List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put);//提升机移动 ForkLiftCommand getMoveCommand(Integer taskNo, Integer pick, Integer put);//提升机移动 ForkLiftCommand getSwitchIOCommand(Integer taskNo, ForkLiftIoModeType mode); ForkLiftCommand getResetCommand(Integer taskNo); } src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java
@@ -1,153 +1,153 @@ package com.zy.core.thread.impl; import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.core.common.DateUtils; import com.zy.common.utils.RedisUtil; import com.zy.core.News; import com.zy.core.ThreadHandler; import com.zy.core.cache.OutputQueue; import com.zy.core.model.ForkLiftSlave; import com.zy.core.model.protocol.ForkLiftProtocol; import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @Slf4j @SuppressWarnings("all") public class LfdZyForkLiftMasterThread implements ThreadHandler { private ForkLiftSlave slave; private ForkLiftProtocol forkLiftProtocol; private RedisUtil redisUtil; private SiemensS7Net siemensS7Net; private List<HashMap<String,Object>> slaveAddressList = null; private boolean connect = false; public LfdZyForkLiftMasterThread(ForkLiftSlave slave, RedisUtil redisUtil) { this.slave = slave; this.redisUtil = redisUtil; ArrayList<HashMap<String, Object>> addressList = new ArrayList<>(); HashMap<String, Object> lift1 = new HashMap<>(); lift1.put("status", new DbData("DB101.0", (short) 18));//提升机数据 lift1.put("staStatusTray", new DbData("DB102.0", (short) 14));//站点数据 lift1.put("staStatusCar", new DbData("DB102.50", (short) 14));//站点数据 lift1.put("write", new DbData("DB103.0", null));//写入数据 lift1.put("writeConfirm", new DbData("DB103.8", null));//写入确认数据 lift1.put("confirm", new DbData("DB103.10", null));//确认命令 lift1.put("switchIOMode", new DbData("DB103.12", null));//出入库模式 HashMap<String, Object> lift2 = new HashMap<>(); lift2.put("status", new DbData("DB104.0", (short) 18));//提升机数据 lift2.put("staStatusTray", new DbData("DB105.0", (short) 14));//站点数据 lift2.put("staStatusCar", new DbData("DB105.50", (short) 14));//站点数据 lift2.put("write", new DbData("DB106.0", null));//写入数据 lift2.put("writeConfirm", new DbData("DB106.8", null));//写入确认数据 lift2.put("confirm", new DbData("DB106.10", null));//确认命令 lift2.put("switchIOMode", new DbData("DB106.12", null));//出入库模式 addressList.add(lift1); addressList.add(lift2); this.slaveAddressList = addressList; } @Override public boolean connect() { boolean result = false; siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); siemensS7Net.setRack(slave.getRack().byteValue()); siemensS7Net.setSlot(slave.getSlot().byteValue()); OperateResult connect = siemensS7Net.ConnectServer(); if(connect.IsSuccess){ result = true; OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); News.info("货叉提升机连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } else { OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); News.error("货叉提升机连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } // siemensS7Net.ConnectClose(); this.connect = result; return result; } @Override public void close() { } @Override public void run() { News.info("{}号货叉提升机Master线程启动", slave.getId()); this.connect(); while (true) { try { if (!this.connect) { this.connect(); } Thread.sleep(500); }catch (Exception e){ e.printStackTrace(); } } } public SiemensS7Net getSiemensS7Net() { return siemensS7Net; } public synchronized OperateResultExOne<byte[]> read(Integer slaveId, String dbTag) { try { HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1); DbData dbData = (DbData) map.get(dbTag); OperateResultExOne<byte[]> result = siemensS7Net.Read(dbData.dbAddress, dbData.dbAddressLength); return result; } catch (Exception e) { OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); } return null; } public synchronized OperateResult write(Integer slaveId, String dbTag, short[] array) { try { HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1); DbData dbData = (DbData) map.get(dbTag); OperateResult result = siemensS7Net.Write(dbData.dbAddress, array); return result; } catch (Exception e) { OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】写入提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); } return null; } public synchronized OperateResult write(Integer slaveId, String dbTag, short val) { try { HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1); DbData dbData = (DbData) map.get(dbTag); OperateResult result = siemensS7Net.Write(dbData.dbAddress, val); return result; } catch (Exception e) { OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】写入提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); } return null; } private class DbData { private String dbAddress; private Short dbAddressLength; public DbData(String dbAddress, Short dbAddressLength) { this.dbAddress = dbAddress; this.dbAddressLength = dbAddressLength; } } } //package com.zy.core.thread.impl; // //import HslCommunication.Core.Types.OperateResult; //import HslCommunication.Core.Types.OperateResultExOne; //import HslCommunication.Profinet.Siemens.SiemensPLCS; //import HslCommunication.Profinet.Siemens.SiemensS7Net; //import com.core.common.DateUtils; //import com.zy.common.utils.RedisUtil; //import com.zy.core.News; //import com.zy.core.ThreadHandler; //import com.zy.core.cache.OutputQueue; //import com.zy.core.model.ForkLiftSlave; //import com.zy.core.model.protocol.ForkLiftProtocol; //import lombok.extern.slf4j.Slf4j; // //import java.text.MessageFormat; //import java.util.ArrayList; //import java.util.Date; //import java.util.HashMap; //import java.util.List; // //@Slf4j //@SuppressWarnings("all") //public class LfdZyForkLiftMasterThread implements ThreadHandler { // // private ForkLiftSlave slave; // private ForkLiftProtocol forkLiftProtocol; // private RedisUtil redisUtil; // private SiemensS7Net siemensS7Net; // private List<HashMap<String,Object>> slaveAddressList = null; // private boolean connect = false; // // public LfdZyForkLiftMasterThread(ForkLiftSlave slave, RedisUtil redisUtil) { // this.slave = slave; // this.redisUtil = redisUtil; // ArrayList<HashMap<String, Object>> addressList = new ArrayList<>(); // // HashMap<String, Object> lift1 = new HashMap<>(); // lift1.put("status", new DbData("DB101.0", (short) 18));//提升机数据 // lift1.put("staStatusTray", new DbData("DB102.0", (short) 14));//站点数据 // lift1.put("staStatusCar", new DbData("DB102.50", (short) 14));//站点数据 // lift1.put("write", new DbData("DB103.0", null));//写入数据 // lift1.put("writeConfirm", new DbData("DB103.8", null));//写入确认数据 // lift1.put("confirm", new DbData("DB103.10", null));//确认命令 // lift1.put("switchIOMode", new DbData("DB103.12", null));//出入库模式 // // HashMap<String, Object> lift2 = new HashMap<>(); // lift2.put("status", new DbData("DB104.0", (short) 18));//提升机数据 // lift2.put("staStatusTray", new DbData("DB105.0", (short) 14));//站点数据 // lift2.put("staStatusCar", new DbData("DB105.50", (short) 14));//站点数据 // lift2.put("write", new DbData("DB106.0", null));//写入数据 // lift2.put("writeConfirm", new DbData("DB106.8", null));//写入确认数据 // lift2.put("confirm", new DbData("DB106.10", null));//确认命令 // lift2.put("switchIOMode", new DbData("DB106.12", null));//出入库模式 // // addressList.add(lift1); // addressList.add(lift2); // this.slaveAddressList = addressList; // } // // @Override // public boolean connect() { // boolean result = false; // siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); // siemensS7Net.setRack(slave.getRack().byteValue()); // siemensS7Net.setSlot(slave.getSlot().byteValue()); // OperateResult connect = siemensS7Net.ConnectServer(); // if(connect.IsSuccess){ // result = true; // OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); // News.info("货叉提升机连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // } else { // OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); // News.error("货叉提升机连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // } // // siemensS7Net.ConnectClose(); // this.connect = result; // return result; // } // // @Override // public void close() { // // } // // @Override // public void run() { // News.info("{}号货叉提升机Master线程启动", slave.getId()); // this.connect(); // while (true) { // try { // if (!this.connect) { // this.connect(); // } // // Thread.sleep(500); // }catch (Exception e){ // e.printStackTrace(); // } // } // } // // public SiemensS7Net getSiemensS7Net() { // return siemensS7Net; // } // // public synchronized OperateResultExOne<byte[]> read(Integer slaveId, String dbTag) { // try { // HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1); // DbData dbData = (DbData) map.get(dbTag); // OperateResultExOne<byte[]> result = siemensS7Net.Read(dbData.dbAddress, dbData.dbAddressLength); // return result; // } catch (Exception e) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); // } // return null; // } // // public synchronized OperateResult write(Integer slaveId, String dbTag, short[] array) { // try { // HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1); // DbData dbData = (DbData) map.get(dbTag); // OperateResult result = siemensS7Net.Write(dbData.dbAddress, array); // return result; // } catch (Exception e) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】写入提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); // } // return null; // } // // public synchronized OperateResult write(Integer slaveId, String dbTag, short val) { // try { // HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1); // DbData dbData = (DbData) map.get(dbTag); // OperateResult result = siemensS7Net.Write(dbData.dbAddress, val); // return result; // } catch (Exception e) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】写入提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); // } // return null; // } // // private class DbData { // private String dbAddress; // private Short dbAddressLength; // // public DbData(String dbAddress, Short dbAddressLength) { // this.dbAddress = dbAddress; // this.dbAddressLength = dbAddressLength; // } // // } //} src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java
@@ -1,475 +1,475 @@ package com.zy.core.thread.impl; import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.zy.asrs.entity.BasLift; import com.zy.asrs.entity.DeviceDataLog; import com.zy.asrs.service.BasLiftService; import com.zy.asrs.service.DeviceDataLogService; import com.zy.asrs.utils.Utils; import com.zy.common.ExecuteSupport; import com.zy.common.utils.RedisUtil; import com.zy.core.News; import com.zy.core.action.ForkLiftAction; import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; import com.zy.core.model.CommandResponse; import com.zy.core.model.ForkLiftSlave; import com.zy.core.model.command.ForkLiftCommand; import com.zy.core.model.protocol.ForkLiftProtocol; import com.zy.core.model.protocol.ForkLiftStaProtocol; import com.zy.core.thread.ForkLiftThread; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; import java.util.*; @Slf4j @SuppressWarnings("all") public class LfdZyForkLiftSlaveThread implements ForkLiftThread { private Integer masterId; private ForkLiftSlave slave; private ForkLiftProtocol forkLiftProtocol; private RedisUtil redisUtil; private List<ForkLiftStaProtocol> forkLiftStaProtocols = new ArrayList<>(); private LfdZyForkLiftMasterThread masterThread; public LfdZyForkLiftSlaveThread(ForkLiftSlave slave, RedisUtil redisUtil, Integer masterId) { this.slave = slave; this.redisUtil = redisUtil; this.masterId = masterId; //初始化站点 for (ForkLiftSlave.Sta sta : this.slave.getSta()) { ForkLiftStaProtocol forkLiftStaProtocol = new ForkLiftStaProtocol(); forkLiftStaProtocol.setStaNo(sta.getStaNo());//站点号 forkLiftStaProtocol.setLev(sta.getLev());//站点楼层 String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev()); forkLiftStaProtocol.setLocNo(locNo);//站点库位号 forkLiftStaProtocol.setLiftNo(sta.getLiftNo());//提升机号 forkLiftStaProtocols.add(forkLiftStaProtocol); } } @Override public boolean connect() { boolean result = false; LfdZyForkLiftMasterThread masterThread = (LfdZyForkLiftMasterThread) SlaveConnection.get(SlaveType.ForkLiftMaster, masterId); if(masterThread != null) { result = true; this.masterThread = masterThread; } return result; } @Override public void close() { } @Override public void run() { News.info("{}号货叉提升机线程启动", slave.getId()); this.connect(); while (true) { try { if (this.masterThread == null) { this.connect(); continue; } read(); Thread.sleep(300); execute(); } catch (Exception e) { e.printStackTrace(); } } } private void execute() { ForkLiftAction forkLiftAction = null; try { forkLiftAction = SpringUtils.getBean(ForkLiftAction.class); }catch (Exception e){} if (forkLiftAction == null) { return; } Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId()); if (object == null) { return; } Integer taskNo = Integer.valueOf(String.valueOf(object)); if (taskNo != 0) { //存在任务需要执行 boolean result = forkLiftAction.executeWork(slave.getId(), taskNo); } } private void read() { try { readStatus(); //提升机处于运行状态,将标记置为true if (forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PICK_UP) || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PUT_DOWN) || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.WAITING)) { forkLiftProtocol.setPakMk(true); } } catch (Exception e) { OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); } } private void readStatus() { try { //获取提升机数据 OperateResultExOne<byte[]> result1 = this.masterThread.read(this.slave.getId(), "status"); SiemensS7Net siemensS7Net = this.masterThread.getSiemensS7Net(); if (result1.IsSuccess) { if (null == forkLiftProtocol) { forkLiftProtocol = new ForkLiftProtocol(); forkLiftProtocol.setLiftNo(slave.getId()); forkLiftProtocol.setProtocolStatus(ForkLiftProtocolStatusType.NONE); InnerForkLiftExtend innerForkLiftExtend = new InnerForkLiftExtend(); } //----------读取提升机状态----------- //模式 forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0)); //PLC任务号 forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 2)); //任务状态 forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4)); //任务模式 forkLiftProtocol.setTaskMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 6)); //取货数据 forkLiftProtocol.setPick((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8)); //放货数据 forkLiftProtocol.setPut((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 10)); //出入库模式 forkLiftProtocol.setIOMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 12)); //故障码 forkLiftProtocol.setErrorCode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 14)); //当前层 forkLiftProtocol.setLev((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 16)); //************补充扩展字段************* InnerForkLiftExtend forkLiftExtend = (InnerForkLiftExtend) forkLiftProtocol.getExtend(); forkLiftProtocol.setExtend(forkLiftExtend); }else { OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】{1}读取货叉提升机状态信息失败", DateUtils.convert(new Date()), slave.getId())); } OperateResultExOne<byte[]> result2 = this.masterThread.read(this.slave.getId(), "staStatusTray"); if (result2.IsSuccess) { for (int i = 0; i < this.slave.getSta().size(); i++) { ForkLiftSlave.Sta sta = this.slave.getSta().get(i); if (forkLiftStaProtocols.isEmpty()) { continue; } short val = siemensS7Net.getByteTransform().TransInt16(result2.Content, i * 2); ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i); forkLiftStaProtocol.setHasTray(val == 1); } } OperateResultExOne<byte[]> result3 = this.masterThread.read(this.slave.getId(), "staStatusCar"); if (result3.IsSuccess) { for (int i = 0; i < this.slave.getSta().size(); i++) { ForkLiftSlave.Sta sta = this.slave.getSta().get(i); if (forkLiftStaProtocols.isEmpty()) { continue; } short val = siemensS7Net.getByteTransform().TransInt16(result3.Content, i * 2); ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i); forkLiftStaProtocol.setHasCar(val == 1); } } if (System.currentTimeMillis() - forkLiftProtocol.getDeviceDataLog() > 1000 * 5) { //采集时间超过5s,保存一次数据记录 //保存数据记录 DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); DeviceDataLog deviceDataLog = new DeviceDataLog(); deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content)); deviceDataLog.setWcsData(JSON.toJSONString(forkLiftProtocol)); deviceDataLog.setType("forkLift"); deviceDataLog.setDeviceNo(forkLiftProtocol.getLiftNo()); deviceDataLog.setCreateTime(new Date()); deviceDataLogService.insert(deviceDataLog); //保存数据记录 DeviceDataLog deviceDataLog2 = new DeviceDataLog(); deviceDataLog2.setOriginData(Base64.getEncoder().encodeToString(result2.Content)); deviceDataLog2.setWcsData(JSON.toJSONString(forkLiftStaProtocols)); deviceDataLog2.setType("forkLiftStaProtocols"); deviceDataLog2.setDeviceNo(forkLiftProtocol.getLiftNo()); deviceDataLog2.setCreateTime(new Date()); deviceDataLogService.insert(deviceDataLog2); //更新采集时间 forkLiftProtocol.setDeviceDataLog(System.currentTimeMillis()); } //将提升机状态保存至数据库 BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class); BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>() .eq("lift_no", slave.getId())); if (basLift == null) { basLift = new BasLift(); //提升机号 basLift.setLiftNo(forkLiftProtocol.getLiftNo()); basLift.setStatus(1); basLiftService.insert(basLift); } //任务号 basLift.setWrkNo(forkLiftProtocol.getTaskNo()); //修改时间 basLift.setUpdateTime(new Date()); //设备状态 basLift.setDeviceStatus(JSON.toJSONString(forkLiftProtocol)); if (basLiftService.updateById(basLift)) { OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), forkLiftProtocol.getLiftNo())); } } catch (Exception e) { OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取货叉提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); } } @Override public ForkLiftProtocol getStatus(boolean clone) { if (this.forkLiftProtocol == null) { return null; } return clone ? this.forkLiftProtocol.clone() : this.forkLiftProtocol; } @Override public List<ForkLiftStaProtocol> getForkLiftStaProtocols() { return this.forkLiftStaProtocols; } @Override public ForkLiftProtocol getStatus() { return getStatus(true); } @Override public CommandResponse pickAndPut(ForkLiftCommand command) { CommandResponse response = new CommandResponse(false); short[] array = new short[4]; array[0] = command.getTaskNo();//任务号 array[1] = command.getMode();//任务模式 array[2] = command.getPick();//取货数据 array[3] = command.getPut();//放货数据 OperateResult result = this.masterThread.write(this.slave.getId(), "write", array); if (result.IsSuccess) { OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm()); if (result2.IsSuccess) { response.setResult(true); } } return response; } @Override public CommandResponse shuttleSwitch(ForkLiftCommand command) { CommandResponse response = new CommandResponse(false); short[] array = new short[4]; array[0] = command.getTaskNo();//任务号 array[1] = command.getMode();//任务模式 array[2] = command.getPick();//取货数据 array[3] = command.getPut();//放货数据 OperateResult result = this.masterThread.write(this.slave.getId(), "write", array); if (result.IsSuccess) { OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm()); if (result2.IsSuccess) { response.setResult(true); } } return response; } @Override public CommandResponse move(ForkLiftCommand command) { CommandResponse response = new CommandResponse(false); short[] array = new short[4]; array[0] = command.getTaskNo();//任务号 array[1] = command.getMode();//任务模式 array[2] = command.getPut();//放货数据 OperateResult result = this.masterThread.write(this.slave.getId(), "write", array); if (result.IsSuccess) { OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm()); if (result2.IsSuccess) { response.setResult(true); } } return response; } @Override public CommandResponse reset() { CommandResponse response = new CommandResponse(false); OperateResult result = this.masterThread.write(this.slave.getId(), "confirm", (short) 1); if (result.IsSuccess) { News.info("货叉提升机确认命令下发成功,提升机号={}", forkLiftProtocol.getLiftNo()); response.setResult(true); } return response; } @Override public boolean isIdle() { if (this.forkLiftProtocol.getTaskNo() == null || this.forkLiftProtocol.getProtocolStatus() == null || this.forkLiftProtocol.getModel() == null || this.forkLiftProtocol.getErrorCode() == null ) { return false; } boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id && this.forkLiftProtocol.getWrkNo() == 0 && this.forkLiftProtocol.getTaskNo() == 0 && this.forkLiftProtocol.getModel() == 2 && this.forkLiftProtocol.getErrorCode() == 0 ; return res; } @Override public boolean isDeviceIdle() { return isDeviceIdle(null); } @Override public boolean isDeviceIdle(ExecuteSupport support) { if (null != support) { Boolean judgement = support.judgement(); if (judgement != null && !judgement) { return true; } } if (this.forkLiftProtocol.getTaskNo() == null || this.forkLiftProtocol.getProtocolStatus() == null || this.forkLiftProtocol.getModel() == null || this.forkLiftProtocol.getErrorCode() == null ) { return false; } boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id && this.forkLiftProtocol.getWrkNo() == 0 && this.forkLiftProtocol.getModel() == 2 && this.forkLiftProtocol.getErrorCode() == 0 ; return res; } @Override public boolean setProtocolStatus(ForkLiftProtocolStatusType status) { return false; } @Override public boolean setSyncTaskNo(Integer taskNo) { this.forkLiftProtocol.setSyncTaskNo(taskNo); return true; } @Override public boolean switchIOMode(ForkLiftIoModeType type) { OperateResult result = this.masterThread.write(this.slave.getId(), "switchIOMode", type.id.shortValue()); if (result.IsSuccess) { return true; } return false; } @Override public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) { return taskNo; } @Override public List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) { Integer realPick = pick % 1000; Integer realPut = put % 1000; List<ForkLiftCommand> commands = new ArrayList<>(); ForkLiftCommand command = new ForkLiftCommand(); command.setLiftNo(slave.getId()); command.setTaskNo(taskNo.shortValue()); command.setMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); command.setPick(realPick.shortValue()); command.setPut(realPut.shortValue()); command.setConfirm((short) 1); commands.add(command); return commands; } @Override public List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put) { Integer realPick = pick % 1000; Integer realPut = put % 1000; List<ForkLiftCommand> commands = new ArrayList<>(); ForkLiftCommand command = new ForkLiftCommand(); command.setLiftNo(slave.getId()); command.setTaskNo(taskNo.shortValue()); command.setMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue()); command.setPick(realPick.shortValue()); command.setPut(realPut.shortValue()); command.setConfirm((short) 1); commands.add(command); return commands; } @Override public List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put) { Integer realPick = pick % 1000; Integer realPut = put % 1000; List<ForkLiftCommand> commands = new ArrayList<>(); ForkLiftCommand command = new ForkLiftCommand(); command.setLiftNo(slave.getId()); command.setTaskNo(taskNo.shortValue()); command.setMode(ForkLiftTaskModeType.MOVE.id.shortValue()); command.setPick(realPick.shortValue()); command.setPut(realPut.shortValue()); command.setConfirm((short) 1); commands.add(command); return commands; } /** * 扩展字段 */ @Data private class InnerForkLiftExtend { } } //package com.zy.core.thread.impl; // //import HslCommunication.Core.Types.OperateResult; //import HslCommunication.Core.Types.OperateResultExOne; //import HslCommunication.Profinet.Siemens.SiemensPLCS; //import HslCommunication.Profinet.Siemens.SiemensS7Net; //import com.alibaba.fastjson.JSON; //import com.baomidou.mybatisplus.mapper.EntityWrapper; //import com.core.common.DateUtils; //import com.core.common.SpringUtils; //import com.zy.asrs.entity.BasLift; //import com.zy.asrs.entity.DeviceDataLog; //import com.zy.asrs.service.BasLiftService; //import com.zy.asrs.service.DeviceDataLogService; //import com.zy.asrs.utils.Utils; //import com.zy.common.ExecuteSupport; //import com.zy.common.utils.RedisUtil; //import com.zy.core.News; //import com.zy.core.action.ForkLiftAction; //import com.zy.core.cache.OutputQueue; //import com.zy.core.cache.SlaveConnection; //import com.zy.core.enums.*; //import com.zy.core.model.CommandResponse; //import com.zy.core.model.ForkLiftSlave; //import com.zy.core.model.command.ForkLiftCommand; //import com.zy.core.model.protocol.ForkLiftProtocol; //import com.zy.core.model.protocol.ForkLiftStaProtocol; //import com.zy.core.thread.ForkLiftThread; //import lombok.Data; //import lombok.extern.slf4j.Slf4j; // //import java.text.MessageFormat; //import java.util.*; // //@Slf4j //@SuppressWarnings("all") //public class LfdZyForkLiftSlaveThread implements ForkLiftThread { // // private Integer masterId; // private ForkLiftSlave slave; // private ForkLiftProtocol forkLiftProtocol; // private RedisUtil redisUtil; // private List<ForkLiftStaProtocol> forkLiftStaProtocols = new ArrayList<>(); // private LfdZyForkLiftMasterThread masterThread; // // public LfdZyForkLiftSlaveThread(ForkLiftSlave slave, RedisUtil redisUtil, Integer masterId) { // this.slave = slave; // this.redisUtil = redisUtil; // this.masterId = masterId; // //初始化站点 // for (ForkLiftSlave.Sta sta : this.slave.getSta()) { // ForkLiftStaProtocol forkLiftStaProtocol = new ForkLiftStaProtocol(); // forkLiftStaProtocol.setStaNo(sta.getStaNo());//站点号 // forkLiftStaProtocol.setLev(sta.getLev());//站点楼层 // String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev()); // forkLiftStaProtocol.setLocNo(locNo);//站点库位号 // forkLiftStaProtocol.setLiftNo(sta.getLiftNo());//提升机号 // forkLiftStaProtocols.add(forkLiftStaProtocol); // } // } // // @Override // public boolean connect() { // boolean result = false; // LfdZyForkLiftMasterThread masterThread = (LfdZyForkLiftMasterThread) SlaveConnection.get(SlaveType.ForkLiftMaster, masterId); // if(masterThread != null) { // result = true; // this.masterThread = masterThread; // } // return result; // } // // @Override // public void close() { // // } // // @Override // public void run() { // News.info("{}号货叉提升机线程启动", slave.getId()); // this.connect(); // while (true) { // try { // if (this.masterThread == null) { // this.connect(); // continue; // } // // read(); // Thread.sleep(300); // execute(); // } catch (Exception e) { // e.printStackTrace(); // } // } // } // // private void execute() { // ForkLiftAction forkLiftAction = null; // try { // forkLiftAction = SpringUtils.getBean(ForkLiftAction.class); // }catch (Exception e){} // if (forkLiftAction == null) { // return; // } // // Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId()); // if (object == null) { // return; // } // // Integer taskNo = Integer.valueOf(String.valueOf(object)); // if (taskNo != 0) { // //存在任务需要执行 // boolean result = forkLiftAction.executeWork(slave.getId(), taskNo); // } // } // // private void read() { // try { // readStatus(); // // //提升机处于运行状态,将标记置为true // if (forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PICK_UP) // || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PUT_DOWN) // || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.WAITING)) { // forkLiftProtocol.setPakMk(true); // } // } catch (Exception e) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); // } // } // // private void readStatus() { // try { // //获取提升机数据 // OperateResultExOne<byte[]> result1 = this.masterThread.read(this.slave.getId(), "status"); // SiemensS7Net siemensS7Net = this.masterThread.getSiemensS7Net(); // if (result1.IsSuccess) { // if (null == forkLiftProtocol) { // forkLiftProtocol = new ForkLiftProtocol(); // forkLiftProtocol.setLiftNo(slave.getId()); // forkLiftProtocol.setProtocolStatus(ForkLiftProtocolStatusType.NONE); // // InnerForkLiftExtend innerForkLiftExtend = new InnerForkLiftExtend(); // } // // //----------读取提升机状态----------- // //模式 // forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0)); // //PLC任务号 // forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 2)); // //任务状态 // forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4)); // //任务模式 // forkLiftProtocol.setTaskMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 6)); // //取货数据 // forkLiftProtocol.setPick((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8)); // //放货数据 // forkLiftProtocol.setPut((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 10)); // //出入库模式 // forkLiftProtocol.setIOMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 12)); // //故障码 // forkLiftProtocol.setErrorCode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 14)); // //当前层 // forkLiftProtocol.setLev((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 16)); // // //************补充扩展字段************* // InnerForkLiftExtend forkLiftExtend = (InnerForkLiftExtend) forkLiftProtocol.getExtend(); // forkLiftProtocol.setExtend(forkLiftExtend); // // }else { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】{1}读取货叉提升机状态信息失败", DateUtils.convert(new Date()), slave.getId())); // } // // OperateResultExOne<byte[]> result2 = this.masterThread.read(this.slave.getId(), "staStatusTray"); // if (result2.IsSuccess) { // for (int i = 0; i < this.slave.getSta().size(); i++) { // ForkLiftSlave.Sta sta = this.slave.getSta().get(i); // if (forkLiftStaProtocols.isEmpty()) { // continue; // } // // short val = siemensS7Net.getByteTransform().TransInt16(result2.Content, i * 2); // ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i); // forkLiftStaProtocol.setHasTray(val == 1); // } // } // // OperateResultExOne<byte[]> result3 = this.masterThread.read(this.slave.getId(), "staStatusCar"); // if (result3.IsSuccess) { // for (int i = 0; i < this.slave.getSta().size(); i++) { // ForkLiftSlave.Sta sta = this.slave.getSta().get(i); // if (forkLiftStaProtocols.isEmpty()) { // continue; // } // // short val = siemensS7Net.getByteTransform().TransInt16(result3.Content, i * 2); // ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i); // forkLiftStaProtocol.setHasCar(val == 1); // } // } // // if (System.currentTimeMillis() - forkLiftProtocol.getDeviceDataLog() > 1000 * 5) { // //采集时间超过5s,保存一次数据记录 // //保存数据记录 // DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); // DeviceDataLog deviceDataLog = new DeviceDataLog(); // deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content)); // deviceDataLog.setWcsData(JSON.toJSONString(forkLiftProtocol)); // deviceDataLog.setType("forkLift"); // deviceDataLog.setDeviceNo(forkLiftProtocol.getLiftNo()); // deviceDataLog.setCreateTime(new Date()); // deviceDataLogService.insert(deviceDataLog); // // //保存数据记录 // DeviceDataLog deviceDataLog2 = new DeviceDataLog(); // deviceDataLog2.setOriginData(Base64.getEncoder().encodeToString(result2.Content)); // deviceDataLog2.setWcsData(JSON.toJSONString(forkLiftStaProtocols)); // deviceDataLog2.setType("forkLiftStaProtocols"); // deviceDataLog2.setDeviceNo(forkLiftProtocol.getLiftNo()); // deviceDataLog2.setCreateTime(new Date()); // deviceDataLogService.insert(deviceDataLog2); // // //更新采集时间 // forkLiftProtocol.setDeviceDataLog(System.currentTimeMillis()); // } // // //将提升机状态保存至数据库 // BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class); // BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>() // .eq("lift_no", slave.getId())); // if (basLift == null) { // basLift = new BasLift(); // //提升机号 // basLift.setLiftNo(forkLiftProtocol.getLiftNo()); // basLift.setStatus(1); // basLiftService.insert(basLift); // } // //任务号 // basLift.setWrkNo(forkLiftProtocol.getTaskNo()); // //修改时间 // basLift.setUpdateTime(new Date()); // //设备状态 // basLift.setDeviceStatus(JSON.toJSONString(forkLiftProtocol)); // if (basLiftService.updateById(basLift)) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), forkLiftProtocol.getLiftNo())); // } // // } catch (Exception e) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取货叉提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); // } // } // // @Override // public ForkLiftProtocol getStatus(boolean clone) { // if (this.forkLiftProtocol == null) { // return null; // } // return clone ? this.forkLiftProtocol.clone() : this.forkLiftProtocol; // } // // @Override // public List<ForkLiftStaProtocol> getForkLiftStaProtocols() { // return this.forkLiftStaProtocols; // } // // @Override // public ForkLiftProtocol getStatus() { // return getStatus(true); // } // // @Override // public CommandResponse pickAndPut(ForkLiftCommand command) { // CommandResponse response = new CommandResponse(false); // // short[] array = new short[4]; // array[0] = command.getTaskNo();//任务号 // array[1] = command.getMode();//任务模式 // array[2] = command.getPick();//取货数据 // array[3] = command.getPut();//放货数据 // OperateResult result = this.masterThread.write(this.slave.getId(), "write", array); // if (result.IsSuccess) { // OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm()); // if (result2.IsSuccess) { // response.setResult(true); // } // } // return response; // } // // @Override // public CommandResponse shuttleSwitch(ForkLiftCommand command) { // CommandResponse response = new CommandResponse(false); // // short[] array = new short[4]; // array[0] = command.getTaskNo();//任务号 // array[1] = command.getMode();//任务模式 // array[2] = command.getPick();//取货数据 // array[3] = command.getPut();//放货数据 // OperateResult result = this.masterThread.write(this.slave.getId(), "write", array); // if (result.IsSuccess) { // OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm()); // if (result2.IsSuccess) { // response.setResult(true); // } // } // return response; // } // // @Override // public CommandResponse move(ForkLiftCommand command) { // CommandResponse response = new CommandResponse(false); // // short[] array = new short[4]; // array[0] = command.getTaskNo();//任务号 // array[1] = command.getMode();//任务模式 // array[2] = command.getPut();//放货数据 // OperateResult result = this.masterThread.write(this.slave.getId(), "write", array); // if (result.IsSuccess) { // OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm()); // if (result2.IsSuccess) { // response.setResult(true); // } // } // return response; // } // // @Override // public CommandResponse reset() { // CommandResponse response = new CommandResponse(false); // OperateResult result = this.masterThread.write(this.slave.getId(), "confirm", (short) 1); // if (result.IsSuccess) { // News.info("货叉提升机确认命令下发成功,提升机号={}", forkLiftProtocol.getLiftNo()); // response.setResult(true); // } // return response; // } // // @Override // public boolean isIdle() { // if (this.forkLiftProtocol.getTaskNo() == null // || this.forkLiftProtocol.getProtocolStatus() == null // || this.forkLiftProtocol.getModel() == null // || this.forkLiftProtocol.getErrorCode() == null // ) { // return false; // } // // boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id // && this.forkLiftProtocol.getWrkNo() == 0 // && this.forkLiftProtocol.getTaskNo() == 0 // && this.forkLiftProtocol.getModel() == 2 // && this.forkLiftProtocol.getErrorCode() == 0 // ; // return res; // } // // @Override // public boolean isDeviceIdle() { // return isDeviceIdle(null); // } // // @Override // public boolean isDeviceIdle(ExecuteSupport support) { // if (null != support) { // Boolean judgement = support.judgement(); // if (judgement != null && !judgement) { // return true; // } // } // // if (this.forkLiftProtocol.getTaskNo() == null // || this.forkLiftProtocol.getProtocolStatus() == null // || this.forkLiftProtocol.getModel() == null // || this.forkLiftProtocol.getErrorCode() == null // ) { // return false; // } // // boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id // && this.forkLiftProtocol.getWrkNo() == 0 // && this.forkLiftProtocol.getModel() == 2 // && this.forkLiftProtocol.getErrorCode() == 0 // ; // return res; // } // // @Override // public boolean setProtocolStatus(ForkLiftProtocolStatusType status) { // return false; // } // // @Override // public boolean setSyncTaskNo(Integer taskNo) { // this.forkLiftProtocol.setSyncTaskNo(taskNo); // return true; // } // // @Override // public boolean switchIOMode(ForkLiftIoModeType type) { // OperateResult result = this.masterThread.write(this.slave.getId(), "switchIOMode", type.id.shortValue()); // if (result.IsSuccess) { // return true; // } // return false; // } // // @Override // public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) { // return taskNo; // } // // @Override // public List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) { // Integer realPick = pick % 1000; // Integer realPut = put % 1000; // // List<ForkLiftCommand> commands = new ArrayList<>(); // ForkLiftCommand command = new ForkLiftCommand(); // command.setLiftNo(slave.getId()); // command.setTaskNo(taskNo.shortValue()); // command.setMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); // command.setPick(realPick.shortValue()); // command.setPut(realPut.shortValue()); // command.setConfirm((short) 1); // // commands.add(command); // return commands; // } // // @Override // public List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put) { // Integer realPick = pick % 1000; // Integer realPut = put % 1000; // // List<ForkLiftCommand> commands = new ArrayList<>(); // ForkLiftCommand command = new ForkLiftCommand(); // command.setLiftNo(slave.getId()); // command.setTaskNo(taskNo.shortValue()); // command.setMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue()); // command.setPick(realPick.shortValue()); // command.setPut(realPut.shortValue()); // command.setConfirm((short) 1); // // commands.add(command); // return commands; // } // // @Override // public List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put) { // Integer realPick = pick % 1000; // Integer realPut = put % 1000; // // List<ForkLiftCommand> commands = new ArrayList<>(); // ForkLiftCommand command = new ForkLiftCommand(); // command.setLiftNo(slave.getId()); // command.setTaskNo(taskNo.shortValue()); // command.setMode(ForkLiftTaskModeType.MOVE.id.shortValue()); // command.setPick(realPick.shortValue()); // command.setPut(realPut.shortValue()); // command.setConfirm((short) 1); // // commands.add(command); // return commands; // } // // /** // * 扩展字段 // */ // @Data // private class InnerForkLiftExtend { // // } //} src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -56,7 +56,7 @@ private static final boolean DEBUG = false;//调试模式 private List<JSONObject> socketReadResults = new ArrayList<>(); private List<JSONObject> socketResults = new ArrayList<>(); private List<DeviceMsgModel> socketResults = new ArrayList<>(); //原始设备数据 private Object originDeviceData; @@ -188,54 +188,32 @@ data.put("originDeviceData", deviceMsg.getDeviceOriginMsg()); socketReadResults.add(data); } else { socketResults.add(data);//添加数据 socketResults.add(deviceMsg);//添加数据 } } catch (Exception e) { e.printStackTrace(); } } public JSONObject getRequestBody(String type, String taskId) { public JSONObject getRequestBody(String resultKey) { try { // 获取服务器响应 JSONObject result = null; if (type.equals("readState")) { type = "state"; } int idx = -1; for (int i = 0; i < socketResults.size(); i++) { JSONObject socketResult = socketResults.get(i); if (!socketResult.get("msgType").equals("responseMsg")) {//不是响应内容 continue; } JSONObject resultResponse = JSON.parseObject(socketResult.get("response").toString()); JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString()); String responseType = resultBody.get("responseType").toString(); if (DEBUG) { result = socketResult; DeviceMsgModel deviceMsgModel = socketResults.get(i); if(deviceMsgModel.getResultKey().equals(resultKey)){ idx = i; result = JSON.parseObject(JSON.toJSONString(deviceMsgModel.getDeviceMsg())); break; } if (!responseType.equals(type)) { continue;//响应类型与请求类型不一致,不在调试模式下 } if (taskId != null) { String responseTaskId = resultBody.get("taskId").toString(); if (!responseTaskId.equals(taskId)) { continue;//响应ID与请求ID不一致,不在调试模式下 } } result = socketResult; break; } if (result == null) { return null;//无响应结果 } socketResults.remove(idx); return filterBodyData(result);//返回Body结果集 } catch (Exception e) { return null; @@ -359,35 +337,38 @@ // 获取服务器响应 JSONObject result = null; int removeIdx = -1; JSONObject socketResult = null; for (int i = 0; i < socketResults.size(); i++) { JSONObject socketResult = socketResults.get(i); if (socketResult == null) { DeviceMsgModel deviceMsgModel = socketResults.get(i); if (!deviceMsgModel.getDeviceMsgType().equals("shuttleInit")) { continue; } if (!socketResult.get("msgType").equals("requestMsg")) {//不是请求内容 continue; } removeIdx = i; socketResult = JSON.parseObject(JSON.toJSONString(deviceMsgModel.getDeviceMsg())); break; } JSONObject resultResponse = JSON.parseObject(socketResult.get("request").toString()); JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString()); JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString()); String requestType = resultBody.getString("requestType"); Integer requestId = resultHeader.getInteger("requestId"); if (requestType.equals("init")) { removeIdx = i;//此数据已经处理,从结果集中剔除 socketResults.remove(removeIdx); if (socketResult == null) { return; } Integer code = resultBody.getInteger("code"); //小车复位请求 ShuttleCommand initCommand = getInitCommand(requestId, code); //发出请求 NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class); requestCommand(httpCommand); JSONObject resultResponse = JSON.parseObject(socketResult.get("request").toString()); JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString()); JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString()); String requestType = resultBody.getString("requestType"); Integer requestId = resultHeader.getInteger("requestId"); if (requestType.equals("init")) { socketResults.remove(removeIdx); log.info(MessageFormat.format("【{0}】四向车复位上报 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort())); OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向车复位上报 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort())); break; } Integer code = resultBody.getInteger("code"); //小车复位请求 ShuttleCommand initCommand = getInitCommand(requestId, code); //发出请求 NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class); requestCommand(httpCommand); log.info(MessageFormat.format("【{0}】四向车复位上报 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort())); OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向车复位上报 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort())); } } catch (Exception e) { e.printStackTrace(); @@ -479,9 +460,9 @@ try { //发出请求 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); JSONObject requestToken = requestCommand(httpCommand); String resultKey = requestCommand(httpCommand); //查询请求结果 JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId")); JSONObject result = queryCommandStatus(resultKey); if (result == null) { return response;//请求失败 } @@ -502,9 +483,9 @@ try { //发出请求 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); JSONObject requestToken = requestCommand(httpCommand); String resultKey = requestCommand(httpCommand); //查询请求结果 JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId")); JSONObject result = queryCommandStatus(resultKey); if (result == null) { return response;//请求失败 } @@ -524,9 +505,9 @@ try { //发出请求 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); JSONObject requestToken = requestCommand(httpCommand); String resultKey = requestCommand(httpCommand); //查询请求结果 JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId")); JSONObject result = queryCommandStatus(resultKey); if (result == null) { return response;//请求失败 } @@ -554,9 +535,9 @@ try { //发出请求 NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class); JSONObject requestToken = requestCommand(httpCommand); String resultKey = requestCommand(httpCommand); //查询请求结果 JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId")); JSONObject result = queryCommandStatus(resultKey); if (result == null) { return response;//请求失败 } @@ -1127,7 +1108,7 @@ } //发出请求 private JSONObject requestCommand(NyShuttleHttpCommand httpCommand) throws IOException { private String requestCommand(NyShuttleHttpCommand httpCommand) throws IOException { try { DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class); if (deviceMsgUtils == null) { @@ -1143,33 +1124,19 @@ commandMsgModel.setDeviceType(String.valueOf(SlaveType.Shuttle)); commandMsgModel.setCommand(data); String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, deviceConfig.getDeviceNo(), commandMsgModel); String requestType = null; String taskId = null; try { requestType = httpCommand.getRequest().getBody().get("requestType").toString(); taskId = httpCommand.getRequest().getBody().get("taskId").toString(); } catch (Exception e) { // return null; //taskId可能取空,不报错,正常情况 } JSONObject result = new JSONObject(); result.put("requestType", requestType); result.put("taskId", taskId); return result; return key; }catch (Exception e) { e.printStackTrace(); } return null; } private JSONObject queryCommandStatus(String requestType, String taskId) { private JSONObject queryCommandStatus(String resultKey) { // 获取服务器响应 // 尝试50次 JSONObject result = null; for (int i = 0; i < 50; i++) { result = getRequestBody(requestType, taskId); result = getRequestBody(resultKey); if (result == null) { try { Thread.sleep(500); src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java
File was deleted src/main/java/com/zy/core/thread/impl/ZyForkLiftThread2.java
New file @@ -0,0 +1,451 @@ //package com.zy.core.thread.impl; // //import HslCommunication.Core.Types.OperateResult; //import HslCommunication.Core.Types.OperateResultExOne; //import HslCommunication.Profinet.Siemens.SiemensPLCS; //import HslCommunication.Profinet.Siemens.SiemensS7Net; //import com.alibaba.fastjson.JSON; //import com.baomidou.mybatisplus.mapper.EntityWrapper; //import com.core.common.DateUtils; //import com.core.common.SpringUtils; //import com.zy.asrs.entity.BasLift; //import com.zy.asrs.entity.DeviceDataLog; //import com.zy.asrs.service.BasLiftService; //import com.zy.asrs.service.DeviceDataLogService; //import com.zy.asrs.utils.Utils; //import com.zy.common.ExecuteSupport; //import com.zy.common.utils.RedisUtil; //import com.zy.core.News; //import com.zy.core.action.ForkLiftAction; //import com.zy.core.cache.OutputQueue; //import com.zy.core.enums.ForkLiftIoModeType; //import com.zy.core.enums.ForkLiftProtocolStatusType; //import com.zy.core.enums.ForkLiftTaskModeType; //import com.zy.core.enums.RedisKeyType; //import com.zy.core.model.CommandResponse; //import com.zy.core.model.ForkLiftSlave; //import com.zy.core.model.command.ForkLiftCommand; //import com.zy.core.model.protocol.ForkLiftProtocol; //import com.zy.core.model.protocol.ForkLiftStaProtocol; //import com.zy.core.thread.ForkLiftThread; //import lombok.Data; //import lombok.extern.slf4j.Slf4j; // //import java.text.MessageFormat; //import java.util.*; // //@Slf4j //@SuppressWarnings("all") //public class ZyForkLiftThread2 implements ForkLiftThread { // // private ForkLiftSlave slave; // private ForkLiftProtocol forkLiftProtocol; // private RedisUtil redisUtil; // private SiemensS7Net siemensS7Net; // private List<ForkLiftStaProtocol> forkLiftStaProtocols = new ArrayList<>(); // // public ZyForkLiftThread2(ForkLiftSlave slave, RedisUtil redisUtil) { // this.slave = slave; // this.redisUtil = redisUtil; // //初始化站点 // for (ForkLiftSlave.Sta sta : this.slave.getSta()) { // ForkLiftStaProtocol forkLiftStaProtocol = new ForkLiftStaProtocol(); // forkLiftStaProtocol.setStaNo(sta.getStaNo());//站点号 // forkLiftStaProtocol.setLev(sta.getLev());//站点楼层 // String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev()); // forkLiftStaProtocol.setLocNo(locNo);//站点库位号 // forkLiftStaProtocol.setLiftNo(sta.getLiftNo());//提升机号 // forkLiftStaProtocols.add(forkLiftStaProtocol); // } // } // // @Override // public boolean connect() { // boolean result = false; // siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); // siemensS7Net.setRack(slave.getRack().byteValue()); // siemensS7Net.setSlot(slave.getSlot().byteValue()); // OperateResult connect = siemensS7Net.ConnectServer(); // if(connect.IsSuccess){ // result = true; // OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); // News.info("货叉提升机连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // } else { // OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); // News.error("货叉提升机连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // } // // siemensS7Net.ConnectClose(); // return result; // } // // @Override // public void close() { // // } // // @Override // public void run() { // News.info("{}号货叉提升机线程启动", slave.getId()); // this.connect(); // while (true) { // try { // read(); // Thread.sleep(200); // execute(); // } catch (Exception e) { // e.printStackTrace(); // } // } // } // // private void execute() { // ForkLiftAction forkLiftAction = SpringUtils.getBean(ForkLiftAction.class); // if (forkLiftAction == null) { // return; // } // // Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId()); // if (object == null) { // return; // } // // Integer taskNo = Integer.valueOf(String.valueOf(object)); // if (taskNo != 0) { // //存在任务需要执行 // boolean result = forkLiftAction.executeWork(slave.getId(), taskNo); // } // } // // private void read() { // try { // readStatus(); // // //提升机处于运行状态,将标记置为true // if (forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PICK_UP) // || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PUT_DOWN) // || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.WAITING)) { // forkLiftProtocol.setPakMk(true); // } // } catch (Exception e) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); // } // } // // private void readStatus() { // try { // //获取提升机数据 // OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB101.0", (short) 16); // if (result1.IsSuccess) { // if (null == forkLiftProtocol) { // forkLiftProtocol = new ForkLiftProtocol(); // forkLiftProtocol.setLiftNo(slave.getId()); // forkLiftProtocol.setProtocolStatus(ForkLiftProtocolStatusType.NONE); // // InnerForkLiftExtend innerForkLiftExtend = new InnerForkLiftExtend(); // } // // //----------读取提升机状态----------- // //模式 // forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0)); // //PLC任务号 // forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 2)); // //任务状态 // forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4)); // //任务模式 // forkLiftProtocol.setTaskMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 6)); // //取货数据 // forkLiftProtocol.setPick((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8)); // //放货数据 // forkLiftProtocol.setPut((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 10)); // //出入库模式 // forkLiftProtocol.setIOMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 12)); // //故障码 // forkLiftProtocol.setErrorCode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 14)); // // //************补充扩展字段************* // InnerForkLiftExtend forkLiftExtend = (InnerForkLiftExtend) forkLiftProtocol.getExtend(); // forkLiftProtocol.setExtend(forkLiftExtend); // // }else { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】{1}读取货叉提升机状态信息失败", DateUtils.convert(new Date()), slave.getId())); // } // // OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB102.0", (short) 8); // if (result2.IsSuccess) { // for (int i = 0; i < this.slave.getSta().size(); i++) { // ForkLiftSlave.Sta sta = this.slave.getSta().get(i); // if (forkLiftStaProtocols.isEmpty()) { // continue; // } // // ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i); // boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result2.Content, i * 2, 2); // forkLiftStaProtocol.setHasTray(status1[0]); // forkLiftStaProtocol.setHasCar(status1[1]); // } // } // // if (System.currentTimeMillis() - forkLiftProtocol.getDeviceDataLog() > 1000 * 5) { // //采集时间超过5s,保存一次数据记录 // //保存数据记录 // DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); // DeviceDataLog deviceDataLog = new DeviceDataLog(); // deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content)); // deviceDataLog.setWcsData(JSON.toJSONString(forkLiftProtocol)); // deviceDataLog.setType("forkLift"); // deviceDataLog.setDeviceNo(forkLiftProtocol.getLiftNo()); // deviceDataLog.setCreateTime(new Date()); // deviceDataLogService.insert(deviceDataLog); // // //更新采集时间 // forkLiftProtocol.setDeviceDataLog(System.currentTimeMillis()); // } // // //将提升机状态保存至数据库 // BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class); // BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>() // .eq("lift_no", slave.getId())); // if (basLift == null) { // basLift = new BasLift(); // //提升机号 // basLift.setLiftNo(forkLiftProtocol.getLiftNo()); // basLift.setStatus(1); // basLiftService.insert(basLift); // } // //任务号 // basLift.setWrkNo(forkLiftProtocol.getTaskNo()); // //修改时间 // basLift.setUpdateTime(new Date()); // //设备状态 // basLift.setDeviceStatus(JSON.toJSONString(forkLiftProtocol)); // if (basLiftService.updateById(basLift)) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), forkLiftProtocol.getLiftNo())); // } // // } catch (Exception e) { // OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取货叉提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); // } // } // // @Override // public ForkLiftProtocol getStatus(boolean clone) { // if (this.forkLiftProtocol == null) { // return null; // } // return clone ? this.forkLiftProtocol.clone() : this.forkLiftProtocol; // } // // @Override // public List<ForkLiftStaProtocol> getForkLiftStaProtocols() { // return this.forkLiftStaProtocols; // } // // @Override // public ForkLiftProtocol getStatus() { // return getStatus(true); // } // // @Override // public CommandResponse pickAndPut(ForkLiftCommand command) { // CommandResponse response = new CommandResponse(false); // // short[] array = new short[4]; // array[0] = command.getTaskNo();//任务号 // array[1] = command.getMode();//任务模式 // array[2] = command.getPick();//取货数据 // array[3] = command.getPut();//放货数据 // OperateResult result = siemensS7Net.Write("DB103.0", array); // if (result.IsSuccess) { // OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm()); // if (result2.IsSuccess) { // response.setResult(true); // } // } // return response; // } // // @Override // public CommandResponse shuttleSwitch(ForkLiftCommand command) { // CommandResponse response = new CommandResponse(false); // // short[] array = new short[4]; // array[0] = command.getTaskNo();//任务号 // array[1] = command.getMode();//任务模式 // array[2] = command.getPick();//取货数据 // array[3] = command.getPut();//放货数据 // OperateResult result = siemensS7Net.Write("DB103.0", array); // if (result.IsSuccess) { // OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm()); // if (result2.IsSuccess) { // response.setResult(true); // } // } // return response; // } // // @Override // public CommandResponse move(ForkLiftCommand command) { // CommandResponse response = new CommandResponse(false); // // short[] array = new short[4]; // array[0] = command.getTaskNo();//任务号 // array[1] = command.getMode();//任务模式 // array[2] = command.getPick();//取货数据 // array[3] = command.getPut();//放货数据 // OperateResult result = siemensS7Net.Write("DB103.0", array); // if (result.IsSuccess) { // OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm()); // if (result2.IsSuccess) { // response.setResult(true); // } // } // return response; // } // // @Override // public CommandResponse reset() { // CommandResponse response = new CommandResponse(false); // OperateResult result = siemensS7Net.Write("DB103.10", (short) 1); // if (result.IsSuccess) { // News.info("货叉提升机确认命令下发成功,提升机号={}", forkLiftProtocol.getLiftNo()); // response.setResult(true); // } // return response; // } // // @Override // public boolean isIdle() { // if (this.forkLiftProtocol.getTaskNo() == null // || this.forkLiftProtocol.getProtocolStatus() == null // || this.forkLiftProtocol.getModel() == null // || this.forkLiftProtocol.getErrorCode() == null // ) { // return false; // } // // boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id // && this.forkLiftProtocol.getWrkNo() == 0 // && this.forkLiftProtocol.getTaskNo() == 0 // && this.forkLiftProtocol.getModel() == 2 // && this.forkLiftProtocol.getErrorCode() == 0 // ; // return res; // } // // @Override // public boolean isDeviceIdle() { // return isDeviceIdle(null); // } // // @Override // public boolean isDeviceIdle(ExecuteSupport support) { // if (null != support) { // Boolean judgement = support.judgement(); // if (judgement != null && !judgement) { // return true; // } // } // // if (this.forkLiftProtocol.getTaskNo() == null // || this.forkLiftProtocol.getProtocolStatus() == null // || this.forkLiftProtocol.getModel() == null // || this.forkLiftProtocol.getErrorCode() == null // ) { // return false; // } // // boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id // && this.forkLiftProtocol.getWrkNo() == 0 // && this.forkLiftProtocol.getModel() == 2 // && this.forkLiftProtocol.getErrorCode() == 0 // ; // return res; // } // // @Override // public boolean setProtocolStatus(ForkLiftProtocolStatusType status) { // return false; // } // // @Override // public boolean setSyncTaskNo(Integer taskNo) { // this.forkLiftProtocol.setSyncTaskNo(taskNo); // return true; // } // // @Override // public boolean switchIOMode(ForkLiftIoModeType type) { // OperateResult result = siemensS7Net.Write("DB103.12", type.id.shortValue()); // if (result.IsSuccess) { // return true; // } // return false; // } // // @Override // public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) { // return taskNo; // } // // @Override // public List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) { // Integer realPick = pick % 1000; // Integer realPut = put % 1000; // // List<ForkLiftCommand> commands = new ArrayList<>(); // ForkLiftCommand command = new ForkLiftCommand(); // command.setLiftNo(slave.getId()); // command.setTaskNo(taskNo.shortValue()); // command.setMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); // command.setPick(realPick.shortValue()); // command.setPut(realPut.shortValue()); // command.setConfirm((short) 1); // // commands.add(command); // return commands; // } // // @Override // public List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put) { // Integer realPick = pick % 1000; // Integer realPut = put % 1000; // // List<ForkLiftCommand> commands = new ArrayList<>(); // ForkLiftCommand command = new ForkLiftCommand(); // command.setLiftNo(slave.getId()); // command.setTaskNo(taskNo.shortValue()); // command.setMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue()); // command.setPick(realPick.shortValue()); // command.setPut(realPut.shortValue()); // command.setConfirm((short) 1); // // commands.add(command); // return commands; // } // // @Override // public List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put) { // Integer realPick = pick % 1000; // Integer realPut = put % 1000; // // List<ForkLiftCommand> commands = new ArrayList<>(); // ForkLiftCommand command = new ForkLiftCommand(); // command.setLiftNo(slave.getId()); // command.setTaskNo(taskNo.shortValue()); // command.setMode(ForkLiftTaskModeType.MOVE.id.shortValue()); // command.setPick(realPick.shortValue()); // command.setPut(realPut.shortValue()); // command.setConfirm((short) 1); // // commands.add(command); // return commands; // } // // /** // * 扩展字段 // */ // @Data // private class InnerForkLiftExtend { // // } //} src/main/java/com/zy/core/utils/DeviceMsgUtils.java
@@ -84,6 +84,7 @@ public String sendDeviceCommand(SlaveType deviceType, Integer deviceId, DeviceCommandMsgModel command) { String key = parseDeviceCommandMsgKey(deviceType, deviceId) + System.currentTimeMillis(); command.setResultKey(key); redisUtil.set(key, command, 60 * 60 * 24); return key; } src/main/resources/application.yml
@@ -17,7 +17,7 @@ mvc: static-path-pattern: /** redis: host: 127.0.0.1 host: 192.168.4.77 port: 6379 database: 0 # password: 123456 @@ -46,16 +46,16 @@ # 读取数据后自动删除 destroyAfterReading: true # 下位机配置 wcs-slave: # 四向穿梭车1 shuttle[0]: id: 1 ip: 10.10.20.11 port: 8888 rack: 0 slot: 0 threadImpl: NyShuttleThread ## 下位机配置 #wcs-slave: # # 四向穿梭车1 # shuttle[0]: # id: 1 # ip: 10.10.20.11 # port: 8888 # rack: 0 # slot: 0 # threadImpl: NyShuttleThread # # 四向穿梭车2 # shuttle[1]: # id: 2 src/main/resources/mapper/BasLiftMapper.xml
@@ -11,21 +11,7 @@ <result column="memo" property="memo" /> <result column="pak_mk" property="pakMk" /> <result column="point" property="point" /> <result column="model" property="model" /> <result column="busy" property="busy" /> <result column="front_overrun" property="frontOverrun" /> <result column="back_overrun" property="backOverrun" /> <result column="left_overrun" property="leftOverrun" /> <result column="right_overrun" property="rightOverrun" /> <result column="over_height" property="overHeight" /> <result column="over_weight" property="overWeight" /> <result column="has_tray" property="hasTray" /> <result column="has_car" property="hasCar" /> <result column="device_error" property="deviceError" /> <result column="task_address" property="taskAddress" /> <result column="dist_address" property="distAddress" /> <result column="complete_task_no" property="completeTaskNo" /> <result column="lev" property="lev" /> <result column="station_list" property="stationList" /> </resultMap> src/main/webapp/static/js/basLift/basLift.js
@@ -25,31 +25,12 @@ ,{field: 'liftNo', align: 'center',title: '提升机号'} ,{field: 'status', align: 'center',title: '当前任务状态'} ,{field: 'wrkNo', align: 'center',title: '任务号'} ,{field: 'point', align: 'center',title: '提升机坐标'} ,{field: 'stationList', align: 'center',title: '站点列表'} // ,{field: 'updateTime$', align: 'center',title: '修改时间'} // ,{field: 'updateBy$', align: 'center',title: '修改人员'} ,{field: 'memo', align: 'center',title: '备注'} ,{field: 'pakMk$', align: 'center',title: '作业标记'} ,{field: 'liftLock$', align: 'center',title: '提升机锁定'} ,{field: 'positionArrivalFeedback', align: 'center',title: '位置到达反馈'} ,{field: 'ready$', align: 'center',title: '准备就绪'} ,{field: 'running', align: 'center',title: '运行中'} ,{field: 'mode$', align: 'center',title: '联机/单机'} // ,{field: 'lineFrontHasStock', align: 'center',title: '输送线前端光电有货'} // ,{field: 'forwardRotationFeedback', align: 'center',title: '输送线正转反馈'} // ,{field: 'reverseFeedback', align: 'center',title: '输送线反转反馈'} // ,{field: 'motorOverload', align: 'center',title: '输送线电机过载'} // ,{field: 'lineEndHasStock', align: 'center',title: '输送线末端光电有货'} // ,{field: 'inConveyLineCardTrayAlarm', align: 'center',title: '进输送线卡托盘报警'} // ,{field: 'outConveyLineCardTrayAlarm', align: 'center',title: '出输送线卡托盘报警'} // ,{field: 'platPositionDeviationAlarm', align: 'center',title: '平台位置偏差报警'} // ,{field: 'platTorqueDeviationAlarm', align: 'center',title: '平台扭矩偏差报警'} // ,{field: 'platShuttleCheck', align: 'center',title: '平台四向车检测'} ,{field: 'notReady$', align: 'center',title: '未就绪状态'} // ,{field: 'servoError1', align: 'center',title: '伺服1错误'} // ,{field: 'servoError2', align: 'center',title: '伺服2错误'} // ,{field: 'servoError3', align: 'center',title: '伺服3错误'} // ,{field: 'servoError4', align: 'center',title: '伺服4错误'} // ,{field: 'liftActualSpeed', align: 'center',title: '提升机实际速度反馈'} // ,{field: 'pakMk', align: 'center',title: '作业标记'} ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120} ]], src/main/webapp/views/admin/basLift/basLift.html
@@ -79,174 +79,23 @@ </div> </div> <div class="layui-form-item"> <label class="layui-form-label">当前任务状态: </label> <label class="layui-form-label">提升机坐标: </label> <div class="layui-input-block"> <input class="layui-input" name="status" placeholder="请输入当前任务状态"> <input class="layui-input" name="point" placeholder="请输入提升机坐标"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">任务号: </label> <label class="layui-form-label">站点列表: </label> <div class="layui-input-block"> <input class="layui-input" name="wrkNo" placeholder="请输入任务号"> <input class="layui-input" name="stationList" placeholder="请输入站点列表"> </div> </div> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">修改时间: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="updateTime" id="updateTime$" placeholder="请输入修改时间">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">修改人员: </label>--> <!-- <div class="layui-input-block cool-auto-complete">--> <!-- <input class="layui-input" name="updateBy" placeholder="请输入修改人员" style="display: none">--> <!-- <input id="updateBy$" name="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入修改人员" onfocus=this.blur()>--> <!-- <div class="cool-auto-complete-window">--> <!-- <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">--> <!-- <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">--> <!-- </select>--> <!-- </div>--> <!-- </div>--> <!-- </div>--> <div class="layui-form-item"> <label class="layui-form-label">备注: </label> <div class="layui-input-block"> <input class="layui-input" name="memo" placeholder="请输入备注"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">作业标记: </label> <div class="layui-input-block"> <input class="layui-input" name="pakMk" placeholder="请输入作业标记"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">提升机锁定: </label> <div class="layui-input-block"> <input class="layui-input" name="liftLock" placeholder="请输入提升机锁定"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">位置到达反馈: </label> <div class="layui-input-block"> <input class="layui-input" name="positionArrivalFeedback" placeholder="请输入位置到达反馈"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">准备就绪: </label> <div class="layui-input-block"> <input class="layui-input" name="ready" placeholder="请输入准备就绪"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">运行中: </label> <div class="layui-input-block"> <input class="layui-input" name="running" placeholder="请输入运行中"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">联机/单机: </label> <div class="layui-input-block"> <input class="layui-input" name="mode" placeholder="请输入联机/单机"> </div> </div> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">输送线前端光电有货: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="lineFrontHasStock" placeholder="请输入输送线前端光电有货">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">输送线正转反馈: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="forwardRotationFeedback" placeholder="请输入输送线正转反馈">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">输送线反转反馈: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="reverseFeedback" placeholder="请输入输送线反转反馈">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">输送线电机过载: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="motorOverload" placeholder="请输入输送线电机过载">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">输送线末端光电有货: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="lineEndHasStock" placeholder="请输入输送线末端光电有货">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">进输送线卡托盘报警: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="inConveyLineCardTrayAlarm" placeholder="请输入进输送线卡托盘报警">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">出输送线卡托盘报警: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="outConveyLineCardTrayAlarm" placeholder="请输入出输送线卡托盘报警">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">平台位置偏差报警: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="platPositionDeviationAlarm" placeholder="请输入平台位置偏差报警">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">平台扭矩偏差报警: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="platTorqueDeviationAlarm" placeholder="请输入平台扭矩偏差报警">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">平台四向车检测: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="platShuttleCheck" placeholder="请输入平台四向车检测">--> <!-- </div>--> <!-- </div>--> <div class="layui-form-item"> <label class="layui-form-label">未就绪状态: </label> <div class="layui-input-block"> <input class="layui-input" name="notReady" placeholder="请输入未就绪状态"> </div> </div> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">伺服1错误: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="servoError1" placeholder="请输入伺服1错误">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">伺服2错误: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="servoError2" placeholder="请输入伺服2错误">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">伺服3错误: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="servoError3" placeholder="请输入伺服3错误">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">伺服4错误: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="servoError4" placeholder="请输入伺服4错误">--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item">--> <!-- <label class="layui-form-label">提升机实际速度反馈: </label>--> <!-- <div class="layui-input-block">--> <!-- <input class="layui-input" name="liftActualSpeed" placeholder="请输入提升机实际速度反馈">--> <!-- </div>--> <!-- </div>--> </div> </div> <hr class="layui-bg-gray">