| src/main/java/com/zy/asrs/controller/CrnController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/controller/RgvController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/domain/param/EnergyGatheringRingParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/domain/param/RgvCircularShuttleParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/domain/param/RgvWrkMastParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/domain/param/RingThroughParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/domain/vo/CrnListVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -10,12 +10,10 @@ import com.zy.asrs.domain.param.CrnDemoParam; import com.zy.asrs.domain.param.CrnOperatorParam; import com.zy.asrs.domain.vo.CommandLogVo; import com.zy.asrs.domain.vo.CrnListVo; import com.zy.asrs.domain.vo.CrnMsgTableVo; import com.zy.asrs.domain.vo.CrnStateTableVo; import com.zy.asrs.entity.BasCrnError; import com.zy.asrs.entity.BasCrnp; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.BasCrnErrorMapper; import com.zy.asrs.service.BasCrnpService; import com.zy.asrs.service.LocMastService; @@ -524,5 +522,85 @@ return false; } @GetMapping("/crn/list/auth") @ManagerAuth(memo = "堆垛机数据表") public R crnList(){ List<CrnListVo> list = new ArrayList<>(); List<BasCrnp> crnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().orderBy("crn_no")); for (BasCrnp basCrnp : crnps) { // 表格行 CrnListVo vo = new CrnListVo(); vo.setCrnNo(basCrnp.getCrnNo()); // 堆垛机号 list.add(vo); // 获取堆垛机信息 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo()); if (crnThread == null) { continue; } CrnProtocol crnProtocol = crnThread.getCrnProtocol(); if (crnProtocol == null) { continue; } vo.setWorkNo(crnProtocol.getTaskNo()); // 任务号 if (crnProtocol.getTaskNo()>0) { WrkMast wrkMast = wrkMastService.selectByWrkNo(crnProtocol.getTaskNo().intValue()); // WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); if (wrkMast != null) { vo.setDeviceStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc()); // 模式状态 vo.setSourceStaNo(wrkMast.getLocNo()); // 源站 vo.setStaNo(wrkMast.getStaNo().toString()); // 目标站 // vo.setSourceLocNo(taskWrk.getTargetPoint()); // 源库位 // vo.setLocNo(taskWrk.getLocNo()); // 目标库位 } } else { if (Cools.isEmpty(crnProtocol.modeType)){ vo.setDeviceStatus(CrnStatusType.MACHINE_UN_AUTO.getDesc()); // 模式状态 } else { vo.setDeviceStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc()); // 模式状态 } } vo.setLaneNo(crnProtocol.getCrnNo()); // vo.setErrorCrn("-"); // vo.setXspeed(crnProtocol.getXSpeed()); // 走行速度(m/min) vo.setYspeed(crnProtocol.getYSpeed()); // 升降速度(m/min) vo.setZspeed(crnProtocol.getZSpeed()); // 叉牙速度(m/min) vo.setXdistance(crnProtocol.getXDistance()); // 走行距离(Km) vo.setYdistance(crnProtocol.getYDistance()); // 升降距离(Km) vo.setXduration(crnProtocol.getXDuration()); // 走行时长(H) vo.setYduration(crnProtocol.getYDuration()); // 升降时长(H) if (Cools.isEmpty(crnProtocol.modeType)){ vo.setStatusType(CrnStatusType.MACHINE_UN_AUTO.getDesc()); // 模式状态 } else { vo.setStatusType(crnProtocol.modeType.desc); // 模式状态 } vo.setWrkStatus(crnProtocol.getStatusType().id); // 任务状态 vo.setLoading((crnProtocol.getLoaded() != null && crnProtocol.getLoaded() == 1) ? "有物" : "无物"); // 有物 vo.setBay(crnProtocol.getBay()); // 列 vo.setLev(crnProtocol.getLevel()); // 层 vo.setForkOffset(crnProtocol.getForkPosType().desc); // 货叉位置 vo.setLiftPos(crnProtocol.getLiftPosType().desc); vo.setWalkPos(crnProtocol.getWalkPos()==1?"不在定位":"在定位"); vo.setWarnCode(String.valueOf(crnProtocol.getAlarm())); if (crnProtocol.getAlarm() > 0) { BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm()); vo.setAlarm(crnError==null?"未知异常":crnError.getErrName()); } vo.setInEnable(basCrnp.getInEnable()); vo.setOutEnable(basCrnp.getOutEnable()); vo.setHpMk(basCrnp.getHpMk()); // vo.setTaskComplete(crnThread.getResetFlag()? "任务完成下发等待":"-"); vo.setTaskComplete("-"); vo.setDemo(SystemProperties.WCS_RUNNING_STATUS_DEMO.get()? "开启":"关闭"); vo.setDemoValue(SystemProperties.WCS_RUNNING_STATUS_DEMO_VALUE); if (vo.getHpMk().equals("N")){ vo.setDemo("未开启"); vo.setDemoValue(0); } } return R.ok().add(list); } } src/main/java/com/zy/asrs/controller/RgvController.java
@@ -4,24 +4,31 @@ import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.domain.param.EnergyGatheringRingParam; import com.zy.asrs.domain.param.RgvCircularShuttleParam; import com.zy.asrs.domain.param.RgvWrkMastParam; import com.zy.asrs.domain.param.RingThroughParam; import com.zy.asrs.entity.BasDevpPosition; import com.zy.asrs.service.BasDevpPositionService; import com.zy.core.cache.RgvErrCache; import com.zy.core.cache.RgvStatusCache; import com.zy.core.cache.SlaveConnection; import com.zy.core.cache.TaskProtocolCache; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.BasRgvErrMapper; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.MainServiceImpl; import com.zy.asrs.utils.Utils; import com.zy.core.cache.*; import com.zy.core.enums.RgvModeType; import com.zy.core.enums.SlaveType; import com.zy.core.model.DevpSlave; import com.zy.core.model.RgvSlave; import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.model.protocol.RgvTaskProtocol; import com.zy.core.model.protocol.TaskProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.RgvThread; import com.zy.core.thread.SiemensDevpThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** @@ -35,6 +42,24 @@ @Autowired private BasDevpPositionService basDevpPositionService; @Autowired private SlaveProperties slaveProperties; @Autowired private WrkMastService wrkMastService; @Autowired private BasRgvErrMapper basRgvErrMapper; @Autowired private BasRgvOptService basRgvOptService; @Autowired private BasRgvService basRgvService; @Autowired private BasDevpService basDevpService; @Autowired private MainServiceImpl mainService; @Value("${constant-parameters.trackEntireLength}") private Long trackEntireLength; @GetMapping("/status/all") // @ManagerAuth(memo = "全部信息") public R allStatus(){ @@ -342,28 +367,37 @@ return R.ok("任务生成成功"); } @PostMapping("/ring/through/rgv/position/data") // @ManagerAuth(memo = "小车位置信息") // @ManagerAuth(memo = "环穿位置信息") public R ringThroughRgv(){ List<RingThroughParam> result = new ArrayList<>(); ConcurrentHashMap<Integer, RgvProtocol> allRgvStatus = RgvStatusCache.getAllRgvStatus(); for (RgvProtocol rgvProtocol : allRgvStatus.values()){ for (RgvSlave rgv : slaveProperties.getRgv()) { // for (int i = 1;i<2;i++) { // // 获取RGV信息 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); if (rgvThread == null) { continue; } RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgv.getId()); RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(rgv.getId()); if (rgvTaskProtocol == null) { continue; } RingThroughParam ringThroughParam = new RingThroughParam(); ringThroughParam.setIndex(rgvProtocol.getRgvNo()); ringThroughParam.setIndex(rgv.getId()); // ringThroughParam.setIndex(i); // double[] doubles = Utils.RingThroughXY2(perimeter, NumUtils.GetRandomIntInRange(183)); // double[] doubles = Utils.RingThroughXYRgv(perimeter, perimeter-rgvProtocol.RgvPos.doubleValue()); // double[] doubles = Utils.getRgvPosNew(perimeter, rgvProtocol.RgvPos.doubleValue()); // double[] doubles = Utils.RingThroughXY2(183.0, 100*i ); double[] doubles = Utils.getRgvPosNew(trackEntireLength, rgvProtocol.RgvPos.doubleValue()); ringThroughParam.setValueX(rgvProtocol.getRgvNo()*100*1D); ringThroughParam.setValueY(rgvProtocol.getRgvNo()*100*2D); ringThroughParam.setValueX(doubles[0]); ringThroughParam.setValueY(doubles[1]); ringThroughParam.setModeColor(rgvProtocol.modeType.color); ringThroughParam.setStatusColor(rgvProtocol.statusType.color); if (rgvProtocol.getModeType() == RgvModeType.AUTO){ ringThroughParam.setAnimation(2); } result.add(ringThroughParam); } return R.ok().add(result); @@ -374,40 +408,44 @@ // 站点位置信息 public R ringThroughDev(){ List<RingThroughParam> result = new ArrayList<>(); ArrayList<Integer> arrayList = new ArrayList<Integer>() {{ add(1001); add(1002); add(1003); add(1004); add(1005); add(1006); add(1007); add(1008); add(1009); add(1010); add(1011); add(1012); add(1013); add(1014); add(1015); add(1016); add(1017); add(1018); add(1019); add(1020); add(1021); add(1022); add(1023); }}; for (Integer staNo : arrayList){ List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<>()); for (BasDevpPosition basDevpPosition : basDevpPositions){ // if (basDevpPosition.getDevRegion() == 0){ // continue; // } RingThroughParam ringThroughParam = new RingThroughParam(); ringThroughParam.setIndex(staNo); ringThroughParam.setModeColor("#FFFFFF"); ringThroughParam.setStatusColor("#FFFFFF"); try{ BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no",basDevpPosition.getDevNo())); if (basDevp.getAutoing().equals("Y")){ if (basDevp.getLoading().equals("Y")){ ringThroughParam.setModeColor("#ab1839"); ringThroughParam.setStatusColor("#ab1839"); } if (basDevp.getLoading().equals("N")){ ringThroughParam.setModeColor("#27AE60"); ringThroughParam.setStatusColor("#27AE60"); } } else { ringThroughParam.setModeColor("#C0392B"); ringThroughParam.setStatusColor("#C0392B"); } } catch (Exception e){ System.out.println(e.getMessage()); ringThroughParam.setModeColor("#000000"); ringThroughParam.setStatusColor("#000000"); } ringThroughParam.setIndex(basDevpPosition.getDevNo()); // double[] doubles = Utils.RingThroughXYSta(perimeter, perimeter-basDevpPosition.getPlcPosition()); // ringThroughParam.setValueX(doubles[0]>50? doubles[0]+6:doubles[0]-1); // ringThroughParam.setValueY(doubles[1]>50? doubles[1]+6:doubles[1]-1); // double[] doubles = Utils.getRgvPosNew(basDevpPosition.getDevNo(),perimeter, basDevpPosition.getPlcPosition()); ringThroughParam.setValueX(staNo*100*1D); ringThroughParam.setValueY(staNo*100*2D); double[] doubles = Utils.getRgvPosNew(basDevpPosition.getDevNo(),trackEntireLength, basDevpPosition.getPlcPosition()); ringThroughParam.setValueX(doubles[0]); ringThroughParam.setValueY(doubles[1]); result.add(ringThroughParam); } return R.ok().add(result); @@ -416,30 +454,178 @@ @PostMapping("/ring/through/track/position/data") // @ManagerAuth(memo = "轨道PLC状态信息") public R wnergyGatheringRingParamTrack(){ return R.ok(); List<EnergyGatheringRingParam> result = new ArrayList<>(); try{ for (DevpSlave devp : slaveProperties.getDevp()) { if (devp.getId()!=1){ break; } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); if (devpThread.isResult()){ if (true){ EnergyGatheringRingParam energyGatheringRingParam = new EnergyGatheringRingParam(); energyGatheringRingParam.setTrackColor("rgba(0, 230, 118, 0.5)"); energyGatheringRingParam.setRadiationColor("rgba(0, 230, 118, 0.5)"); result.add(energyGatheringRingParam); } else { EnergyGatheringRingParam energyGatheringRingParam = new EnergyGatheringRingParam(); energyGatheringRingParam.setTrackColor("rgba(0, 230, 118, 0.5)"); energyGatheringRingParam.setRadiationColor("rgba(0, 230, 118, 0.5)"); result.add(energyGatheringRingParam); } } } if (result.isEmpty()){ EnergyGatheringRingParam energyGatheringRingParam = new EnergyGatheringRingParam(); energyGatheringRingParam.setTrackColor("rgba(0, 0, 0, 81)"); energyGatheringRingParam.setRadiationColor("rgba(0, 0, 0, 81)"); result.add(energyGatheringRingParam); } } catch (Exception e){ EnergyGatheringRingParam energyGatheringRingParam = new EnergyGatheringRingParam(); energyGatheringRingParam.setTrackColor("rgba(0, 0, 0, 81)"); energyGatheringRingParam.setRadiationColor("rgba(0, 0, 0, 81)"); result.add(energyGatheringRingParam); } return R.ok().add(result); } @PostMapping("/ring/through/task/wrk/mast/position/data") // @ManagerAuth(memo = "作业信息") public R ringThroughTaskWrkMast(){ return R.ok(); List<RgvWrkMastParam> result = new ArrayList<>(); List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<>()); for (WrkMast wrkMast : wrkMasts){ RgvWrkMastParam rgvWrkMastParam = new RgvWrkMastParam(wrkMast); if (Cools.isEmpty(rgvWrkMastParam.getRgvNo())){ rgvWrkMastParam.setRgvSts("未绑定"); } else { RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvWrkMastParam.getRgvNo()); if (rgvThread == null) { rgvWrkMastParam.setRgvSts("未知"); } else { RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvWrkMastParam.getRgvNo()); RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(rgvWrkMastParam.getRgvNo()); if (rgvTaskProtocol == null) { rgvWrkMastParam.setRgvSts("未知"); } else { rgvWrkMastParam.setRgvSts(rgvProtocol.statusType.desc); } } } result.add(rgvWrkMastParam); } return R.ok().add(result); } @PostMapping("/ring/through/task/wrk/mast/position/data/v1") // @ManagerAuth(memo = "作业信息") public R ringThroughTaskWrkMastV1(){ return R.ok(); List<BasRgvOpt> result = new ArrayList<>(); for (int i = 1 ; i<11; i ++){ BasRgvOpt basRgvOpt = basRgvOptService.selectOne(new EntityWrapper<BasRgvOpt>().eq("rgv_no", i).orderBy("id", false)); if (basRgvOpt!=null){ result.add(basRgvOpt); } } return R.ok().add(result); } @PostMapping("/task/rgv/circular/shuttle/mast/position/data") // @ManagerAuth(memo = "作业信息") public R rgvCircularShuttle(){ return R.ok(); List<RgvCircularShuttleParam> result = new ArrayList<>(); // List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<>()); // for (BasCircularShuttle basCircularShuttle : basCircularShuttleList){ // RgvCircularShuttleParam rgvCircularShuttleParam = new RgvCircularShuttleParam(basCircularShuttle); // if (!Cools.isEmpty(rgvCircularShuttleParam.getRgvNo())){ // RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvCircularShuttleParam.getRgvNo()); // if (rgvThread != null) { // RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); // if (rgvProtocol != null) { // rgvCircularShuttleParam.setPosition(rgvProtocol.getRgvPos()); // if (rgvCircularShuttleParam.getStatus()==0){ // rgvCircularShuttleParam.setStatus$(rgvProtocol.statusType.desc); // } // if (rgvProtocol.getAlarmList().isEmpty()){ // rgvCircularShuttleParam.setError(0); // rgvCircularShuttleParam.setError$("-"); // } else { // StringBuilder alarmList = new StringBuilder(); // for (Integer alarm : rgvProtocol.getAlarmList()){ // BasRgvErr rgvErr = basRgvErrMapper.selectById(alarm); // alarmList.append((rgvErr==null || rgvErr.getErrName()==null)? "未知异常:"+alarm:rgvErr.getErrName()); // if (alarm.equals(rgvProtocol.getAlarmList().get(rgvProtocol.getAlarmList().size() - 1))){ // break; // } // alarmList.append("---"); // } // rgvCircularShuttleParam.setError$(alarmList.toString()); // } // } // } // } // result.add(rgvCircularShuttleParam); // } return R.ok().add(result); } @PostMapping("/task/rgv/circular/shuttle/mast/position/data/v1") // @ManagerAuth(memo = "作业信息") public R rgvCircularShuttleV1(){ // List<BasRgvErrLog> result = new ArrayList<>(); // for (int i = 1 ; i<11; i ++){ // BasRgvErrLog basRgvErrLog = basRgvErrLogService.selectOne(new EntityWrapper<BasRgvErrLog>().eq("rgv_no", i).orderBy("id", false)); // if (basRgvErrLog!=null){ // result.add(basRgvErrLog); // } // } return R.ok(); } @PostMapping("/disable/rgv/status") // @ManagerAuth(memo = "修改RGV状态") public R rgvDisableStatus(@RequestParam Integer rgvNo, @RequestParam Integer status){ // log.info("/disable/rgv/status===》修改RGV状态!!!rgvNo:{},status:{},data:{}",rgvNo,status,new Date()); // BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_no", rgvNo)); // if (basCircularShuttle == null){ // return R.error().add("未找到此RGV,异常!!!"); // } // basCircularShuttle.setStatus(status); // basCircularShuttleService.updateById(basCircularShuttle); return R.ok(); } @PostMapping("/disable/task/delete") // @ManagerAuth(memo = "删除任务") public R taskDisabledelete(@RequestParam Long wrkNo){ // log.info("/disable/task/delete===》删除任务!!!wrkNo:{},data:{}",wrkNo,new Date()); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo)); if (Cools.isEmpty(wrkMast)){ return R.error().add("未找到此任务,异常!!!"); } wrkMastService.deleteById(wrkMast); return R.ok(); } @PostMapping("/disable/task/delete1") // @ManagerAuth(memo = "初始化任务") public R taskDisabledelete1(@RequestParam Long wrkNo){ Date now = new Date(); // log.info("/disable/task/delete1===》初始化任务!!!wrkNo:{},data:{}",wrkNo,new Date()); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo)); if (Cools.isEmpty(wrkMast)){ return R.error().add("未找到此任务,异常!!!"); } wrkMast.setWrkSts(1L); // wrkMast.setRgvNo(0); wrkMast.setAppeTime(now); wrkMast.setLogErrTime(now); if (wrkMastService.updateById(wrkMast)){ return R.ok(); } return R.error("初始化失败!!!"); } } src/main/java/com/zy/asrs/domain/param/EnergyGatheringRingParam.java
New file @@ -0,0 +1,11 @@ package com.zy.asrs.domain.param; import lombok.Data; @Data public class EnergyGatheringRingParam { private String trackColor; private String radiationColor; } src/main/java/com/zy/asrs/domain/param/RgvCircularShuttleParam.java
New file @@ -0,0 +1,38 @@ package com.zy.asrs.domain.param; //import com.zy.asrs.entity.BasCircularShuttle; import lombok.Data; /** * Created by vincent on 2020-06-02 */ @Data public class RgvCircularShuttleParam { private Long id; private Integer rgvId; private Integer rgvNo; /** * 0:正常,1:禁用 */ private Integer status; private Integer error; private String status$ = "未知"; private String error$ = "-"; private Long position = 0L; public RgvCircularShuttleParam(){}; // public RgvCircularShuttleParam(BasCircularShuttle basCircularShuttle){ // this.rgvNo = basCircularShuttle.getRgvNo(); // this.rgvId = basCircularShuttle.getRgvId(); // this.status = basCircularShuttle.getStatus(); // this.status$ = basCircularShuttle.getStatus()==0? "正常":"禁用"; // this.id = basCircularShuttle.getId(); // } } src/main/java/com/zy/asrs/domain/param/RgvWrkMastParam.java
New file @@ -0,0 +1,46 @@ package com.zy.asrs.domain.param; import com.zy.asrs.entity.WrkMast; import lombok.Data; /** * Created by vincent on 2020-06-02 */ @Data public class RgvWrkMastParam { // RGV号 private Integer rgvNo; // 工作号 private Long wrkNo; // 工作状态 private Long wrkSts; private String wrkSts$; // 工位1目标站 private Integer staNo; // 工位1源站 private Integer sourceStaNo; //下发时间 private String modiTime; //更新时间 private String appeTime; private String crnStrTime; private String crnEndTime; private String rgvSts; public RgvWrkMastParam(){}; public RgvWrkMastParam(WrkMast wrkMast){ this.wrkNo = wrkMast.getWrkNo().longValue(); // this.rgvNo = wrkMast.getRgvNo(); this.sourceStaNo = wrkMast.getSourceStaNo(); this.staNo = wrkMast.getStaNo(); this.wrkSts = wrkMast.getWrkSts(); this.wrkSts$ = wrkMast.getWrkSts$(); this.modiTime = wrkMast.getModiTime$(); this.appeTime = wrkMast.getAppeTime$(); this.crnStrTime = wrkMast.getCrnStrTime$(); this.crnEndTime = wrkMast.getCrnEndTime$(); } } src/main/java/com/zy/asrs/domain/param/RingThroughParam.java
@@ -14,4 +14,6 @@ private String modeColor; private String statusColor; private int animation = 0;//光效 } src/main/java/com/zy/asrs/domain/vo/CrnListVo.java
New file @@ -0,0 +1,170 @@ package com.zy.asrs.domain.vo; import com.zy.asrs.utils.Utils; import com.zy.core.enums.CrnStatusType; import lombok.Data; @Data public class CrnListVo { // 堆垛机号 private Integer crnNo; private Integer laneNo; // 模式 private String statusType = "-"; // 有物 private String loading = "-"; // 列 private Short bay; // 层 private Short lev; // 走行原点 private String xOrigin = "-"; // 升降原点 private String yOrigin = "-"; // 货叉位置 private String forkOffset = "-"; // 载货台位置 private String liftPos = "-"; // 走行定位 private String walkPos = "-"; // 急停 private String stop = "-"; // 列坐标 private String bayCoor = "-"; // 层坐标 private String levCoor = "-"; // 完成 private String complete = "-"; // 任务号 private Short workNo = 0; // 任务状态 private Integer wrkStatus; // 异常码 private String warnCode = "-"; // 垂直故障码 private String alarm = "-"; // 源站 private String sourceStaNo = "-"; // 目标站 private String staNo = "-"; // 源库位 private String sourceLocNo = "-"; // 目标库位 private String locNo = "-"; // 异常 private String error = ""; // 原点 private String origin = ""; // 命令 private String command = ""; // 走行速度(m/min) private Float xspeed = 0.0F; // 升降速度(m/min) private Float yspeed = 0.0F; // 叉牙速度(m/min) private Float zspeed = 0.0F; // 走行距离(Km) private Float xdistance = 0.0F; // 升降距离(Km) private Float ydistance = 0.0F; // 走行时长(H) private Float xduration = 0.0F; // 升降时长(H) private Float yduration = 0.0F; // 设备状态 private String deviceStatus = "-"; // 可入 private String inEnable; // 可出 private String outEnable; private String hpMk = "N"; private String taskComplete = "无"; private String errorCrn; private String demo = "-"; private Integer demoValue = 0; public void setXspeed(Float xspeed) { this.xspeed = Utils.scale(xspeed); } public void setYspeed(Float yspeed) { this.yspeed = Utils.scale(yspeed); } public void setZspeed(Float zspeed) { this.zspeed = Utils.scale(zspeed); } public void setXdistance(Float xdistance) { this.xdistance = Utils.scale(xdistance); } public void setYdistance(Float ydistance) { this.ydistance = Utils.scale(ydistance); } public void setXduration(Float xduration) { this.xduration = Utils.scale(xduration); } public void setYduration(Float yduration) { this.yduration = Utils.scale(yduration); } public String getWrkStatus$() { if (this.wrkStatus == null) { return "-"; } return CrnStatusType.get(this.wrkStatus.shortValue()).desc; } public String getDemoValue$() { switch (this.demoValue) { case 0: return "停止"; case 1: return "运行启动中"; case 2: return "运行中"; case 3: return "停止中"; default: return "未知状态"; } } } src/main/java/com/zy/asrs/utils/Utils.java
@@ -161,6 +161,150 @@ } public static double[] getRgvPosNew(Integer devNo,double a, double b) { double[] rgvPosNew = getRgvPosNew(a, b); switch (devNo){ case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109: case 110: case 111: rgvPosNew[0] = rgvPosNew[0] - 70; break; case 112: case 113: case 114: case 115: rgvPosNew[0] = rgvPosNew[0] + 50; break; case 116: case 117: case 118: case 119: case 120: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129: case 130: case 131: case 132: case 133: rgvPosNew[1] = rgvPosNew[1] + 50; break; case 134: rgvPosNew[1] = rgvPosNew[1] - 70; break; } return rgvPosNew; } public static double[] getRgvPosNew(double a, double b) { Object[][] intervals = { // // 弧线区间(拐点116-115),控制点假设为(1125, 882) // {680103, 731550, 1115, 882, 1215, 775, 1125, 882}, // 直线区间(0-134400) // {起点, 终点, 类型, x1, y1, x2, y2, {0.0, 120000.0, 0, 390.0, 750.0, 60.0, 750.0}, // 圆弧区间(拐点116-115)新参数:圆心(1115,775) {120000.0, 127500.0, 2, 60.0, 750.0, 10.0, 800.0, 60.0, 800.0}, // 修正终点坐标 {127500.0, 134900.0, 2, 10.0, 800.0, 60.0, 850.0, 60.0, 800.0}, {134900.0, 680103.0,0, 60.0, 850.0, 1100.0, 850.0}, {680103.0, 731550.0, 2, 1100.0, 850.0, 1200.0, 750.0, 1100.0, 750.0}, {731550.0, 972950.0,0, 1200.0, 750.0, 1200.0, 100.0}, {972950.0, 1016193.0, 2, 1200.0, 100.0, 1150.0, 50.0, 1150.0, 100.0}, {1016193.0, 1063563.0, 2, 1150.0, 50.0, 1100.0, 100.0, 1150.0, 100.0}, {1063563.0, 1315250.0,0, 1100.0, 100.0, 1100.0, 700.0}, {1315250.0, 1322829.0, 2, 1100.0, 700.0, 1050.0, 750.0, 1050.0, 700.0}, {1322829.0, 1737000.0,0, 1050.0, 750.0, 390.0, 750.0}, }; for (Object[] interval : intervals) { double start = (Double) interval[0]; double end = (Double) interval[1]; int type = (Integer) interval[2]; if (b >= start && b <= end) { double t = (b - start) / (end - start); // 根据不同类型计算坐标 switch (type) { case 0: // 直线 return linearInterpolation(interval, t); case 1: // 贝塞尔曲线 return bezierInterpolation(interval, t); case 2: // 圆弧 return circularInterpolation(interval, t); } } } return new double[]{0, 0}; } // 直线插值 private static double[] linearInterpolation(Object[] interval, double t) { double x1 = (Double) interval[3]; double y1 = (Double) interval[4]; double x2 = (Double) interval[5]; double y2 = (Double) interval[6]; return new double[]{ x1 + t * (x2 - x1), y1 + t * (y2 - y1) }; } // 贝塞尔曲线插值 private static double[] bezierInterpolation(Object[] interval, double t) { double x0 = (Double) interval[3]; double y0 = (Double) interval[4]; double x2 = (Double) interval[5]; double y2 = (Double) interval[6]; double cx = (Double) interval[7]; double cy = (Double) interval[8]; return new double[]{ Math.pow(1-t, 2)*x0 + 2*(1-t)*t*cx + t*t*x2, Math.pow(1-t, 2)*y0 + 2*(1-t)*t*cy + t*t*y2 }; } // 圆弧插值(新增) private static double[] circularInterpolation(Object[] interval, double t) { // 参数解析 double startX = (Double) interval[3]; double startY = (Double) interval[4]; double endX = (Double) interval[5]; double endY = (Double) interval[6]; double centerX = (Double) interval[7]; double centerY = (Double) interval[8]; // 计算起始角度和终止角度 double startAngle = Math.atan2(startY - centerY, startX - centerX); double endAngle = Math.atan2(endY - centerY, endX - centerX); // 角度插值 double currentAngle = startAngle + t * (endAngle - startAngle); double radius = Math.hypot(startX - centerX, startY - centerY); return new double[]{ centerX + radius * Math.cos(currentAngle), centerY + radius * Math.sin(currentAngle) }; } public static void main(String[] args) { SlaveProperties slaveProperties = new SlaveProperties(); slaveProperties.setDoubleDeep(true); src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -43,6 +43,7 @@ private SiemensS7Net siemensS7Net; private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); private short heartBeatVal = 1; private boolean result = false; public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ add(101);add(102);add(103);add(104);add(105);add(106);add(107);add(108);add(109);add(110); add(111);add(112);add(113);add(114);add(115);add(116);add(117);add(118);add(119);add(120);