| | |
| | | // private RgvProtocol rgvProtocol; |
| | | private TaskProtocolCache taskProtocolCache = new TaskProtocolCache(); |
| | | // # 轨道总长 |
| | | private Long trackEntireLength = 100L; |
| | | private Long trackEntireLength = 224000L; |
| | | //# 轨道基准点 |
| | | private Long trackBenchmark = 100L; |
| | | private Long trackBenchmark = 1L; |
| | | // # 避让距离 |
| | | private Long avoidDistance = 100L; |
| | | private Long avoidDistance = 5000L; |
| | | |
| | | /** |
| | | * 工位1复位信号 |
| | |
| | | */ |
| | | private boolean resetFlag2 = false; |
| | | |
| | | private boolean connectRgv = false; |
| | | |
| | | public RgvThread(RgvSlave slave) { |
| | | this.slave = slave; |
| | | } |
| | |
| | | @Override |
| | | @SuppressWarnings("InfiniteLoopStatement") |
| | | public void run() { |
| | | boolean connect = this.connect(); |
| | | if (connect) { |
| | | connectRgv = this.connect(); |
| | | while(!connectRgv){ |
| | | try { |
| | | connectRgv = this.connect(); |
| | | Thread.sleep(100); |
| | | } catch (Exception e){ |
| | | |
| | | // 启动读数据线程 |
| | | new Thread(this::readStatusRgv).start(); |
| | | } |
| | | } |
| | | |
| | | // 启动任务下发线程 |
| | | new Thread(this::taskIssued).start(); |
| | | // 启动读数据线程 |
| | | new Thread(this::rgvConnect).start(); |
| | | |
| | | // 启动漫游线程 |
| | | new Thread(this::taskWalkIssued).start(); |
| | | new Thread(this::taskWalkIssued2).start(); |
| | | new Thread(this::readStatusRgv).start(); |
| | | |
| | | // 启动任务完成线程 |
| | | new Thread(this::taskComplete).start(); |
| | | // 启动任务下发线程 |
| | | new Thread(this::taskIssued).start(); |
| | | |
| | | // 启动漫游线程 |
| | | new Thread(this::taskWalkIssued).start(); |
| | | new Thread(this::taskWalkIssued2).start(); |
| | | |
| | | // 启动任务完成线程 |
| | | new Thread(this::taskComplete).start(); |
| | | } |
| | | |
| | | private void rgvConnect() { |
| | | while (true) { |
| | | try { |
| | | if(!connectRgv){ |
| | | try { |
| | | connectRgv = this.connect(); |
| | | Thread.sleep(100); |
| | | } catch (Exception e){ |
| | | |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("RGV数据读取线程异常!!!" + e.getMessage()); |
| | | initRgv(); |
| | | // e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50 |
| | | && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){ |
| | | Thread.sleep(100); |
| | | // Thread.sleep(100); |
| | | TaskProtocol issued = new TaskProtocol(taskProtocol); |
| | | write(issued); |
| | | taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); |
| | |
| | | log.error("行走超出范围!!!任务异常 联系管理员!!!"); |
| | | return false; |
| | | } |
| | | long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); |
| | | if (avoidAbs<51){ |
| | | return true; |
| | | } |
| | | rgvTaskProtocolOther.setAvoid(1); |
| | | rgvTaskProtocolOther.setAvoidingTheDestination(avoid); |
| | | RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); |
| | |
| | | log.error("行走超出范围!!!任务异常 联系管理员!!!"); |
| | | return false; |
| | | } |
| | | long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); |
| | | if (avoidAbs<51){ |
| | | return true; |
| | | } |
| | | rgvTaskProtocolOther.setAvoid(1); |
| | | rgvTaskProtocolOther.setAvoidingTheDestination(avoid); |
| | | RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); |
| | |
| | | > avoidDistance) {//无需避让 |
| | | return true; |
| | | } else { |
| | | if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()) { |
| | | if (rgvProtocolOther.getRgvPosDestination() >= rgvProtocolOther.getRgvPos()-50) { |
| | | long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng(); |
| | | if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { |
| | | log.error("行走超出范围!!!任务异常 联系管理员!!!"); |
| | | return false; |
| | | } |
| | | long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); |
| | | if (avoidAbs<51){ |
| | | return false; |
| | | } |
| | | rgvTaskProtocol.setAvoid(1); |
| | |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | } else { |
| | | if ((rgvProtocolOther.getRgvPosDestinationOrPos(true) - rgvProtocolOther.getCarBodyJiaoMing()) |
| | | - (targetPosition + rgvProtocol.getCarBodyKunPeng()) |
| | | > avoidDistance) {//无需避让 |
| | | return true; |
| | | } |
| | | } |
| | | } else { |
| | |
| | | if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { |
| | | log.error("行走超出范围!!!任务异常 联系管理员!!!"); |
| | | return false; |
| | | } |
| | | long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); |
| | | if (avoidAbs<51){ |
| | | return true; |
| | | } |
| | | rgvTaskProtocolOther.setAvoid(1); |
| | | rgvTaskProtocolOther.setAvoidingTheDestination(avoid); |
| | |
| | | log.error("行走超出范围!!!任务异常 联系管理员!!!"); |
| | | return false; |
| | | } |
| | | long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); |
| | | if (avoidAbs<51){ |
| | | return true; |
| | | } |
| | | rgvTaskProtocolOther.setAvoid(1); |
| | | rgvTaskProtocolOther.setAvoidingTheDestination(avoid); |
| | | RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); |
| | |
| | | > avoidDistance) {//无需避让 |
| | | return true; |
| | | } else { |
| | | if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos()) { |
| | | if (rgvProtocolOther.getRgvPosDestination() <= rgvProtocolOther.getRgvPos() + 50) { |
| | | long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing(); |
| | | if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { |
| | | log.error("行走超出范围!!!任务异常 联系管理员!!!"); |
| | | return false; |
| | | } |
| | | long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); |
| | | if (avoidAbs<51){ |
| | | return false; |
| | | } |
| | | rgvTaskProtocol.setAvoid(1); |
| | |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | } else { |
| | | if ((rgvProtocolOther.getRgvPosDestinationOrPos(false) - rgvProtocolOther.getCarBodyJiaoMing()) |
| | | - (targetPosition + rgvProtocol.getCarBodyKunPeng()) |
| | | > avoidDistance) {//无需避让 |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | if (rgvProtocol == null) { |
| | | rgvProtocol = new RgvProtocol(); |
| | | rgvProtocol.setRgvNo(slave.getId()); |
| | | } |
| | | rgvProtocol.setRgvNo(slave.getId()); |
| | | rgvProtocol.setCarBodyJiaoMing(slave.getCarBodyJiaoMing()); |
| | | rgvProtocol.setCarBodyKunPeng(slave.getCarBodyKunPeng()); |
| | | |
| | | rgvProtocol.setRgvPos((long)siemensNet.getByteTransform().TransInt32(result.Content, 0)); |
| | | rgvProtocol.setRgvPosDestination((long)siemensNet.getByteTransform().TransInt32(result.Content, 4)); |
| | |
| | | |
| | | } else { |
| | | initRgv(); |
| | | connectRgv = false; |
| | | // OutputQueue.RGV.offer(MessageFormat.format("【{0}】读取RGV plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); |
| | | log.error("读取RGV plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); |
| | | } |