| | |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.annotations.ManagerAuth; |
| | | import com.core.common.Cools; |
| | | import com.core.common.R; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.domain.enums.RgvStatusType; |
| | | import com.zy.asrs.domain.param.CrnDemoParam; |
| | | import com.zy.asrs.domain.param.CrnOperatorParam; |
| | | import com.zy.asrs.domain.param.RgvOperatorParam; |
| | | import com.zy.asrs.domain.vo.RgvMsgTableVo; |
| | |
| | | import com.zy.core.model.protocol.CrnProtocol; |
| | | import com.zy.core.model.protocol.RgvProtocol; |
| | | import com.zy.core.properties.SlaveProperties; |
| | | import com.zy.core.properties.SystemProperties; |
| | | import com.zy.core.thread.SiemensRgvThread; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * RGV接口 |
| | |
| | | private MainServiceImpl mainService; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | int wrkNo = 9990; |
| | | |
| | | |
| | | @ManagerAuth(memo = "演示命令下发") |
| | | @GetMapping("/rgvDemoTask") |
| | | public R rgvDemoTask(Integer rgvNo, Integer sta,Integer end){ |
| | | wrkNo++; |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(rgvNo); // RGV编号 |
| | | command.setAckFinish1(false); // 任务完成确认位 |
| | | command.setTaskNo1(wrkNo); // 工作号 |
| | | command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货 |
| | | command.setSourceStaNo1(sta.shortValue()); // 源站 |
| | | command.setDestinationStaNo1(end.shortValue()); // 目标站 |
| | | // command.setAckFinish2((short) 0); // 任务完成确认位 |
| | | // command.setTaskNo2((short) 0); // 工作号 |
| | | // command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货 |
| | | // command.setSourceStaNo2(param.getSourceStaNo2()); // 源站 |
| | | // command.setDestinationStaNo2(param.getStaNo2()); // 目标站 |
| | | command.setCommand((short) 0); |
| | | |
| | | return rgvControl(command)? R.ok(): R.error(); |
| | | } |
| | | |
| | | @ManagerAuth(memo = "解锁小车") |
| | | @PostMapping("/lock") |
| | | public R lock(RgvOperatorParam param ){ |
| | | SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, param.getRgvNo()); |
| | | rgvThread.setPakMk(true); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @GetMapping("/demo/status") |
| | | public R demoStatus(Integer rgvNo){ |
| | | Map<String,Object> map = new HashMap<>(); |
| | | if (Cools.isEmpty(rgvNo)){ |
| | | map.put("demo","X"); |
| | | map.put("rgvMode",0); |
| | | return R.ok().add(map); |
| | | } |
| | | String demo = "X"; |
| | | Integer rgvMode = 0; |
| | | // List<Map<String, Object>> res = new ArrayList<>(); |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvSlave.getId().equals(rgvNo)){ |
| | | demo = rgvSlave.getDemo()?"Y":"N"; |
| | | rgvSlave.setRgvMode(rgvProtocol.getMode().intValue()); |
| | | rgvMode = rgvProtocol.getMode().intValue(); |
| | | } |
| | | } |
| | | map.put("demo",demo); |
| | | map.put("rgvMode",rgvMode); |
| | | return R.ok().add(map); |
| | | } |
| | | |
| | | @GetMapping("/demo/status/true") |
| | | public R demoStatusTrue(Integer rgvNo){ |
| | | if (Cools.isEmpty(rgvNo)){ |
| | | return R.error("请选择rgv"); |
| | | } |
| | | // List<Map<String, Object>> res = new ArrayList<>(); |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | if (rgvSlave.getId().equals(rgvNo)){ |
| | | rgvSlave.setDemo(true); |
| | | } |
| | | } |
| | | return R.ok(); |
| | | } |
| | | @GetMapping("/demo/status/false") |
| | | public R demoStatusFalse(Integer rgvNo){ |
| | | if (Cools.isEmpty(rgvNo)){ |
| | | return R.error("请选择rgv"); |
| | | } |
| | | // List<Map<String, Object>> res = new ArrayList<>(); |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | if (rgvSlave.getId().equals(rgvNo)){ |
| | | rgvSlave.setDemo(false); |
| | | } |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @GetMapping("/demo/status/rgvStatus") |
| | | public R demoStatusTrue1(Integer rgvNo,Integer status){ |
| | | if (Cools.isEmpty(rgvNo)){ |
| | | return R.error("请选择rgv"); |
| | | } |
| | | if (Cools.isEmpty(status)){ |
| | | return R.error("选择按钮有误"); |
| | | } |
| | | // List<Map<String, Object>> res = new ArrayList<>(); |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | // 获取RGV信息 |
| | | SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); |
| | | if (rgvThread == null) { |
| | | throw new CoolException("RGV不在线"); |
| | | } |
| | | RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | if (rgvProtocol == null) { |
| | | throw new CoolException("RGV不在线"); |
| | | } |
| | | String DB = ""; |
| | | if (rgvSlave.getId().equals(rgvNo)){ |
| | | switch (status){ |
| | | case 5://强制启动 |
| | | DB="4.4"; |
| | | break; |
| | | // case 6://复位信号 |
| | | // DB="4.5"; |
| | | // break; |
| | | case 7://报警消音 |
| | | DB="4.6"; |
| | | break; |
| | | case 8://启动 |
| | | DB="4.7"; |
| | | break; |
| | | case 9://停止 |
| | | DB="5.0"; |
| | | break; |
| | | case 10://急停 |
| | | DB="5.1"; |
| | | break; |
| | | case 11://复位按钮 |
| | | DB="5.2"; |
| | | break; |
| | | case 12://手动 |
| | | DB="5.3"; |
| | | rgvSlave.setRgvMode(3); |
| | | break; |
| | | case 13://手动定位 |
| | | DB="5.4"; |
| | | break; |
| | | case 14://单机 |
| | | DB="5.5"; |
| | | rgvSlave.setRgvMode(2); |
| | | break; |
| | | case 15://联机 |
| | | DB="5.6"; |
| | | rgvSlave.setRgvMode(1); |
| | | break; |
| | | case 16://货叉定位回中 |
| | | DB="5.7"; |
| | | break; |
| | | case 17://恢复联机任务 |
| | | DB="6.0"; |
| | | break; |
| | | case 18://清楚联机任务 |
| | | DB="6.1"; |
| | | break; |
| | | default: |
| | | return R.error("按钮不存在????!!!"); |
| | | } |
| | | if (MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(10, DB))) { |
| | | return R.ok(); |
| | | } else { |
| | | return R.error("命令下发失败"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | @PostMapping("/demo/switch") |
| | | @ManagerAuth(memo = "RGV演示") |
| | | public R crnDemo(CrnDemoParam param) throws InterruptedException { |
| | | if (Cools.isEmpty(param.getCrnId())){ |
| | | return R.error(); |
| | | } |
| | | if (Cools.isEmpty(param.getPassword())){ |
| | | return R.error("请输入口令"); |
| | | } |
| | | if (!param.getPassword().equals(SystemProperties.WCS_PASSWORD)){ |
| | | return R.error("口令错误"); |
| | | } |
| | | Thread.sleep(200L); |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | if (rgvSlave.getId().equals(param.getCrnId())) { |
| | | rgvSlave.setDemo(param.getOpt()); |
| | | } |
| | | } |
| | | // mainService.crnDemoOfLocMove(param.getCrnId()); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @ManagerAuth(memo = "取放货") |
| | | @PostMapping("/operator/put") |
| | | public R rgvFetchPut(RgvOperatorParam param){ |
| | | wrkNo++; |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // RGV编号 |
| | | command.setAckFinish1(false); // 任务完成确认位 |
| | | command.setTaskNo1(wrkNo); // 工作号 |
| | | command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货 |
| | | command.setSourceStaNo1(param.getSourceRow().shortValue()); // 源站 |
| | | command.setDestinationStaNo1(param.getSourceBay().shortValue()); // 目标站 |
| | | // command.setAckFinish2((short) 0); // 任务完成确认位 |
| | | // command.setTaskNo2((short) 0); // 工作号 |
| | | // command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货 |
| | | // command.setSourceStaNo2(param.getSourceStaNo2()); // 源站 |
| | | // command.setDestinationStaNo2(param.getStaNo2()); // 目标站 |
| | | command.setCommand((short) 0); |
| | | |
| | | return rgvControl(command)? R.ok(): R.error(); |
| | | } |
| | | |
| | | |
| | | @ManagerAuth(memo = "取") |
| | | @PostMapping("/operator/single/step/one/put") |
| | | public R rgvFetchSingleStepOnePut(RgvOperatorParam param){ |
| | | return rgvFetchSingleStepPut(param,1)?R.ok():R.error(); |
| | | } |
| | | @ManagerAuth(memo = "放") |
| | | @PostMapping("/operator/single/step/two/put") |
| | | public R rgvFetchSingleStepTwoPut(RgvOperatorParam param){ |
| | | return rgvFetchSingleStepPut(param,2)?R.ok():R.error(); |
| | | } |
| | | @ManagerAuth(memo = "X运行") |
| | | @PostMapping("/operator/single/step/three/put") |
| | | public R rgvFetchSingleStepThreePut(RgvOperatorParam param){ |
| | | return rgvFetchSingleStepPut(param,3)?R.ok():R.error(); |
| | | } |
| | | |
| | | @ManagerAuth(memo = "取放") |
| | | @PostMapping("/operator/single/step/four/put") |
| | | public R rgvFetchSingleStepFourPut(RgvOperatorParam param){ |
| | | return rgvFetchSingleStepPut(param,4)?R.ok():R.error(); |
| | | } |
| | | |
| | | public boolean rgvFetchSingleStepPut(RgvOperatorParam param ,Integer type){ |
| | | wrkNo++; |
| | | RgvCommand command = new RgvCommand(); |
| | | RgvTaskModeType fetchPut = RgvTaskModeType.NONE; |
| | | switch (type){ |
| | | case 1: |
| | | fetchPut = RgvTaskModeType.FETCH; |
| | | param.setSourceBay(0); |
| | | break; |
| | | case 2: |
| | | fetchPut = RgvTaskModeType.PUT; |
| | | param.setSourceRow(0); |
| | | break; |
| | | case 3: |
| | | fetchPut = RgvTaskModeType.X_MOVE; |
| | | break; |
| | | case 4: |
| | | fetchPut = RgvTaskModeType.FETCH_PUT; |
| | | break; |
| | | default: |
| | | return false; |
| | | } |
| | | command.setRgvNo(param.getRgvNo()); // RGV编号 |
| | | command.setAckFinish1(false); // 任务完成确认位 |
| | | command.setTaskNo1(wrkNo); // 工作号 |
| | | command.setTaskMode1(fetchPut); // 任务模式: 取放货 |
| | | command.setSourceStaNo1(param.getSourceRow().shortValue()); // 源站 |
| | | command.setDestinationStaNo1(param.getSourceBay().shortValue()); // 目标站 |
| | | // command.setAckFinish2((short) 0); // 任务完成确认位 |
| | | // command.setTaskNo2((short) 0); // 工作号 |
| | | // command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货 |
| | | // command.setSourceStaNo2(param.getSourceStaNo2()); // 源站 |
| | | // command.setDestinationStaNo2(param.getStaNo2()); // 目标站 |
| | | command.setCommand((short) 0); |
| | | |
| | | return rgvControlD(command); |
| | | } |
| | | |
| | | |
| | | @ManagerAuth(memo = "复位") |
| | | @PostMapping("/operator/reset") |
| | | public R crnReset(RgvOperatorParam param){ |
| | | // 系统运行状态判断 |
| | | // if (SystemProperties.WCS_RUNNING_STATUS.get()) { |
| | | // return R.error("wcs系统状态为开启"); |
| | | // } |
| | | short[] array = new short[9]; |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // 堆垛机编号 |
| | | command.setReset(true); |
| | | return rgvControl2(command)?R.ok():R.error(); |
| | | } |
| | | @ManagerAuth(memo = "联机") |
| | | @PostMapping("/operator/auto") |
| | | public R crnAuto(RgvOperatorParam param){ |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // 堆垛机编号 |
| | | command.setAuto(true); |
| | | return rgvControl2(command)?R.ok():R.error(); |
| | | } |
| | | @ManagerAuth(memo = "恢复任务") |
| | | @PostMapping("/operator/restoreTask") |
| | | public R crnRestoreTask(RgvOperatorParam param){ |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // 堆垛机编号 |
| | | command.setRestoreTask(true); |
| | | return rgvControl2(command)?R.ok():R.error(); |
| | | } |
| | | @ManagerAuth(memo = "完成任务") |
| | | @PostMapping("/operator/compTask") |
| | | public R rgvCompTask(RgvOperatorParam param){ |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // 堆垛机编号 |
| | | command.setCompTask(true); |
| | | return rgvControl2(command)?R.ok():R.error(); |
| | | } |
| | | @ManagerAuth(memo = "急停") |
| | | @PostMapping("/operator/stop") |
| | | public R rgvStop(RgvOperatorParam param){ |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // 堆垛机编号 |
| | | command.setStop(true); |
| | | return rgvControl2(command)?R.ok():R.error(); |
| | | } |
| | | |
| | | @ManagerAuth(memo = "取消急停") |
| | | @PostMapping("/operator/noStop") |
| | | public R rgvNoStop(RgvOperatorParam param){ |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // 堆垛机编号 |
| | | command.setNoStop(true); |
| | | return rgvControl2(command)?R.ok():R.error(); |
| | | } |
| | | |
| | |
| | | continue; |
| | | } |
| | | vo.setStatusType(rgvProtocol.modeType.desc); // 模式状态 |
| | | vo.setStatus(rgvProtocol.getStatusType().desc); // 状态 |
| | | vo.setStatus(rgvProtocol.getStatusType1().desc); // 状态 |
| | | vo.setWorkNo1(rgvProtocol.getTaskNo1()); // 工位1任务号 |
| | | vo.setStatus1(rgvProtocol.getStatusType1().desc); // 工位1状态 |
| | | vo.setLoading1(rgvProtocol.getLoaded1()==1?"有物":"无物"); // 工位1有物 |
| | | vo.setRgvPos(rgvProtocol.getRgvPos()); |
| | | vo.setRgvPos1(rgvProtocol.getRgvPosI()); |
| | | vo.setWalkPos(rgvProtocol.getWalkPos()==1?"在定位":"不在定位"); |
| | | vo.setPakMk(rgvThread.isPakMk()?"无锁":"锁定"); |
| | | // vo.setWorkNo2(rgvProtocol.getTaskNo2()); // 工位2任务号 |
| | | // vo.setStatus2(rgvProtocol.getStatusType2().desc); // 工位2状态 |
| | | // vo.setLoading2(rgvProtocol.getLoaded2()==1?"有物":"无物"); // 工位2有物 |
| | | |
| | | vo.setWalkPos(rgvProtocol.getAlarm() == 0?"正常":"报警"); |
| | | vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm())); |
| | | // vo.setStaNo(rgvProtocol.getSouSta().intValue()); |
| | | // vo.setSourceStaNo(rgvProtocol.getEndSta().intValue()); |
| | | if (rgvProtocol.getAlarm() > 0) { |
| | | BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm()); |
| | | vo.setAlarm(rgvErr==null?"未知异常":rgvErr.getErrName()); |
| | |
| | | public R rgvTaskComplete(RgvOperatorParam param){ |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // RGV编号 |
| | | command.setAckFinish1((short) 1); // 任务完成确认位 |
| | | command.setTaskNo1((short) 0); // 工作号 |
| | | command.setAckFinish1(false); // 任务完成确认位 |
| | | command.setTaskNo1( 0); // 工作号 |
| | | command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式 |
| | | command.setSourceStaNo1((short) 0); // 源站 |
| | | command.setDestinationStaNo1((short) 0); // 目标站 |
| | |
| | | } |
| | | RgvCommand command = new RgvCommand(); |
| | | command.setRgvNo(param.getRgvNo()); // RGV编号 |
| | | command.setAckFinish1((short) 0); // 任务完成确认位 |
| | | command.setTaskNo1((short) 0); // 工作号 |
| | | command.setAckFinish1(false); // 任务完成确认位 |
| | | command.setTaskNo1(0); // 工作号 |
| | | command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式 |
| | | command.setSourceStaNo1((short) 0); // 源站 |
| | | command.setDestinationStaNo1((short) 0); // 目标站 |
| | |
| | | RgvCommand Command = new RgvCommand(); |
| | | Command.setRgvNo(rgv.getId()); // RGV编号 |
| | | Command.setTaskMode1(RgvTaskModeType.NONE); |
| | | Command.setAckFinish1((short) 0); // 任务完成确认位 |
| | | Command.setAckFinish1(false); // 任务完成确认位 |
| | | Command.setAckFinish2((short) 0); // 任务完成确认位 |
| | | Command.setCommand((short) 0); // 任务完成确认位 |
| | | // 延时发送 |
| | |
| | | return false; |
| | | } |
| | | |
| | | private boolean rgvControlD(RgvCommand command){ |
| | | if (command.getRgvNo() == null) { |
| | | throw new CoolException("请选择RGV"); |
| | | } |
| | | for (RgvSlave rgv : slaveProperties.getRgv()) { |
| | | // 获取RGV信息 |
| | | if (command.getRgvNo().equals(rgv.getId())) { |
| | | // SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); |
| | | // if (rgvThread == null) { |
| | | // throw new CoolException("RGV不在线"); |
| | | // } |
| | | // RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); |
| | | // if (rgvProtocol == null) { |
| | | // throw new CoolException("RGV不在线"); |
| | | // } |
| | | try{ |
| | | if (MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(11, command))) { |
| | | return true; |
| | | } else { |
| | | throw new CoolException("命令下发失败"); |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("单步任务下发失败,异常:"+e); |
| | | throw new CoolException("命令下发失败"); |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |