| | |
| | | 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.setWorkNo2(rgvProtocol.getTaskNo2()); // 工位2任务号 |
| | | vo.setStatus2(rgvProtocol.getStatusType2().desc); // 工位2状态 |
| | | vo.setLoading2(rgvProtocol.getLoaded2()==1?"有物":"无物"); // 工位2有物 |
| | | // vo.setWorkNo2(rgvProtocol.getTaskNo2()); // 工位2任务号 |
| | | // vo.setStatus2(rgvProtocol.getStatusType2().desc); // 工位2状态 |
| | | // vo.setLoading2(rgvProtocol.getLoaded2()==1?"有物":"无物"); // 工位2有物 |
| | | |
| | | vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm())); |
| | | if (rgvProtocol.getAlarm() > 0) { |
| | |
| | | |
| | | // 异常码描述 |
| | | private String alarm = "-"; |
| | | private Integer RgvPos1 = 0; |
| | | |
| | | } |
| | |
| | | |
| | | // 站点条件判断 |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | && staProtocol.isInEnable() |
| | | && staProtocol.isEmptyMk() |
| | | && (staProtocol.getWorkNo() > 9990 && staProtocol.getWorkNo() <= 9999) |
| | | && staProtocol.isPakMk()&& staProtocol.getStamp()>=2) { |
| | | && staProtocol.isPakMk() |
| | | ) { |
| | | News.warnNoLog(""+mark+" - 0"+" - 开始执行:空栈板初始化入库,叉车入库站放货"); |
| | | |
| | | try { |
| | |
| | | |
| | | // 更新站点信息 且 下发plc命令 |
| | | staProtocol.setWorkNo(dto.getWorkNo()); |
| | | staProtocol.setStaNo(dto.getStaNo().shortValue()); |
| | | staProtocol.setStaNo(staProtocol.getSiteId().shortValue()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | if (!result) { |
| | |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded1()==0 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && (rgvProtocol.getTaskNo1()==0 || rgvProtocol.getTaskNo1()==9999) |
| | | && (rgvProtocol.getTaskNo2()==0 || rgvProtocol.getTaskNo2()==9999) |
| | | |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | }else if (rgvProtocol.getTaskNo2()!=0){ |
| | | if (rgvProtocol.getTaskNo2()==9999){ |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | } |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | break; |
| | | } |
| | | WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().intValue()); |
| | | if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){ |
| | | log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | continue; |
| | | } |
| | | boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | if (!rgvComplete){ |
| | | log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | break; |
| | | } |
| | | wrkMastSta.setWrkSts(3); |
| | | wrkMastStaMapper.updateById(wrkMastSta); |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | }else { |
| | | } |
| | | // else if (rgvProtocol.getTaskNo2()!=0){ |
| | | // if (rgvProtocol.getTaskNo2()==9999){ |
| | | // boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | // if (!rgvComplete){ |
| | | // log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | // } |
| | | // BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | // basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | // rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | // break; |
| | | // } |
| | | // WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().intValue()); |
| | | // if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){ |
| | | // log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); |
| | | // continue; |
| | | // } |
| | | // boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); |
| | | // if (!rgvComplete){ |
| | | // log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); |
| | | // break; |
| | | // } |
| | | // wrkMastSta.setWrkSts(3); |
| | | // wrkMastStaMapper.updateById(wrkMastSta); |
| | | // BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | // basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); |
| | | // rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); |
| | | // } |
| | | else { |
| | | log.error("小车复位失败,小车号{},等待wcs确认但是没有工作号!",rgvProtocol.getRgvNo()); |
| | | } |
| | | } |
| | |
| | | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 |
| | | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); |
| | | for (WrkMastSta wrkMastSta : wrkMastStaList){ |
| | | if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:满版 3:取放 |
| | | if (wrkMastSta.getType()!=0 || wrkMastSta.getWrkType()!=3){//1:满版 3:取放 |
| | | continue; |
| | | } |
| | | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 |
| | |
| | | // 只有当RGV空闲、自动,工位二有物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded2()==1 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && rgvProtocol.getLoaded1()==1 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | |
| | | // 只有当RGV空闲、自动,工位二无物//rgv可用 |
| | | if (rgvProtocol.getStatusType() == RgvStatusType.IDLE |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | && rgvProtocol.getLoaded2()==0 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && rgvProtocol.getLoaded1()==0 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (basRgvMap == null) { |
| | |
| | | && rgvProtocol.getModeType() == RgvModeType.AUTO |
| | | // && rgvProtocol.getLoaded1()==0 //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 |
| | | && rgvProtocol.getTaskNo1()==0 |
| | | && rgvProtocol.getTaskNo2()==0 |
| | | // && rgvProtocol.getTaskNo2()==0 |
| | | ) { |
| | | BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); |
| | | if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){ |
| | |
| | | rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //工位1起点 |
| | | rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(4, rgvCommand))) { |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 工位1任务模式: 取货 |
| | | rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //工位1起点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(4, rgvCommand))) { |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | |
| | | rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 工位1任务模式: 放货 |
| | | rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //工位1目标站点 |
| | | rgvCommand.setCommand((short) 1); //工位1任务确认 |
| | | if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(4, rgvCommand))) { |
| | | if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { |
| | | //step=2,工位1、2写任务; step=4,工位1写任务; step=5,工位2写任务 |
| | | log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); |
| | | return false; |
| | |
| | | |
| | | //问题2 周俊杰 |
| | | public static final List<Integer> MERGE_STA_NO_One = new ArrayList<Integer>() {{ |
| | | // add(116);add(117); |
| | | add(113);add(119); |
| | | }}; |
| | | |
| | | public static final List<Integer> MERGE_STA_NO_TWO = new ArrayList<Integer>() {{ |
| | |
| | | } |
| | | |
| | | public LocTypeDto(StaProtocol staProtocol) { |
| | | if (staProtocol.isHigh() == staProtocol.isLow()) { |
| | | throw new CoolException("plc高低检测异常"); |
| | | } |
| | | if (staProtocol.isLow()) { |
| | | // if (staProtocol.isHigh() == staProtocol.isLow()) { |
| | | // throw new CoolException("plc高低检测异常"); |
| | | // } |
| | | // if (staProtocol.isLow()) { |
| | | this.locType1 = 1; // 低库位 |
| | | } else { |
| | | this.locType1 = 2; // 高库位 |
| | | } |
| | | // } else { |
| | | // this.locType1 = 2; // 高库位 |
| | | // } |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | // 演示 |
| | | // mainService.crnDemoOfLocMove1(); |
| | | mainService.crnDemoOfLocMove1(); |
| | | //刷新RGV地图 |
| | | mainService.refreshRgvMap(); |
| | | |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.annotation.PreDestroy; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | | /** |
| | | * Created by vincent on 2020/8/4 |
| | |
| | | private SlaveProperties slaveProperties; |
| | | @Autowired |
| | | private MainProcess mainProcess; |
| | | |
| | | public static final Map<CrnThread, Thread> map = new ConcurrentHashMap<>(); |
| | | |
| | | /** |
| | | * PostConstruct会在加载servlet的时候运行一次 |
| | |
| | | public void destroy() { |
| | | } |
| | | |
| | | @Component |
| | | class killThread { |
| | | |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | public void kill() { |
| | | int i = 0; |
| | | for (Map.Entry<CrnThread, Thread> entry : map.entrySet()) { |
| | | i++; |
| | | SiemensCrnThread key = (SiemensCrnThread) entry.getKey(); |
| | | // System.out.println("第"+i+"个堆垛机线程重启线程条件:"+(System.currentTimeMillis() - key.getSign())); |
| | | if (System.currentTimeMillis() - key.getSign() > 120000) { |
| | | System.out.println("第"+i+"个堆垛机线程被重启"); |
| | | |
| | | // 请求线程安全停止 |
| | | key.requestStop(); |
| | | |
| | | // 等待线程完成停止, 可以这样做也可以选择不这么做,取决于是否需要等待线程结束 |
| | | try { |
| | | entry.getValue().join(20000); // 等待最多20秒 |
| | | } catch (InterruptedException e) { |
| | | // // 可适当处理中断 |
| | | // Thread.currentThread().interrupt(); // 保留中断状态 |
| | | entry.getValue().stop(); |
| | | } |
| | | |
| | | // 重新启动线程 |
| | | Thread thread = new Thread((Runnable) key); // 假设CrnThread实现了Runnable |
| | | thread.start(); |
| | | |
| | | // 替换映射关系中的旧线程 |
| | | map.put(entry.getKey(), thread); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | // 台车mq交换机 |
| | | private static final Map<Integer, ConcurrentLinkedQueue<Task>> CAR_EXCHANGE = new ConcurrentHashMap<>(); |
| | | |
| | | private static final Map<Integer, LinkedBlockingQueue<Task>> RGV_EXCHANGE = new ConcurrentHashMap<>(); |
| | | |
| | | /** |
| | | * mq 交换机初始化 |
| | | */ |
| | |
| | | switch (type) { |
| | | case Crn: |
| | | CRN_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1)); |
| | | break; |
| | | case Rgv: |
| | | RGV_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1)); |
| | | break; |
| | | case Devp: |
| | | DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); |
| | |
| | | switch (type) { |
| | | case Crn: |
| | | return CRN_EXCHANGE.get(id).offer(task); |
| | | case Rgv: |
| | | return RGV_EXCHANGE.get(id).offer(task); |
| | | case Devp: |
| | | return DEVP_EXCHANGE.get(id).offer(task); |
| | | case Barcode: |
| | |
| | | switch (type) { |
| | | case Crn: |
| | | return CRN_EXCHANGE.get(id).poll(); |
| | | case Rgv: |
| | | return RGV_EXCHANGE.get(id).poll(); |
| | | case Devp: |
| | | return DEVP_EXCHANGE.get(id).poll(); |
| | | case Barcode: |
| | |
| | | switch (type) { |
| | | case Crn: |
| | | return CRN_EXCHANGE.get(id).peek(); |
| | | case Rgv: |
| | | return RGV_EXCHANGE.get(id).peek(); |
| | | case Devp: |
| | | return DEVP_EXCHANGE.get(id).peek(); |
| | | case Barcode: |
| | |
| | | public static void clear(SlaveType type, Integer id){ |
| | | switch (type) { |
| | | case Crn: |
| | | |
| | | CRN_EXCHANGE.get(id).clear(); |
| | | break; |
| | | case Rgv: |
| | | RGV_EXCHANGE.get(id).clear(); |
| | | break; |
| | | case Devp: |
| | | DEVP_EXCHANGE.get(id).clear(); |
| | | break; |
| | |
| | | ORIGIN_GO(7, "回原点"), |
| | | ORIGIN_BACK(8, "回反原点"), |
| | | MOVING(9, "走行中"), |
| | | WAITING(90, "任务完成等待WCS确认"), |
| | | WAITING(10, "任务完成等待WCS确认"), |
| | | PAUSE(11, "任务暂停"), |
| | | SOS(99, "报警"), |
| | | UNKNOW(100, "其他"), |
| | |
| | | public enum RgvModeType { |
| | | |
| | | NONE(-1, "离线"), |
| | | STOP(0, "维修"), |
| | | STOP(0, "关机"), |
| | | HAND(1, "手动"), |
| | | HALF_AUTO(2, "半自动"), |
| | | AUTO(3, "自动"), |
| | |
| | | return basCrnp; |
| | | } |
| | | |
| | | public void setxSpeed(Short xSpeed) { |
| | | this.xSpeed = Float.valueOf(xSpeed); |
| | | public void setxSpeed(float xSpeed) { |
| | | this.xSpeed = xSpeed; |
| | | } |
| | | |
| | | public void setySpeed(Short ySpeed) { |
| | | this.ySpeed = Float.valueOf(ySpeed); |
| | | public void setySpeed(float ySpeed) { |
| | | this.ySpeed = ySpeed; |
| | | } |
| | | |
| | | public void setzSpeed(Short zSpeed) { |
| | | this.zSpeed = Float.valueOf(zSpeed); |
| | | public void setzSpeed(float zSpeed) { |
| | | this.zSpeed = zSpeed; |
| | | } |
| | | |
| | | public void setxDistance(Short xDistance) { |
| | | this.xDistance = Float.valueOf(xDistance); |
| | | public void setxDistance(float xDistance) { |
| | | this.xDistance = xDistance; |
| | | } |
| | | |
| | | public void setyDistance(Short yDistance) { |
| | | this.yDistance = Float.valueOf(yDistance); |
| | | public void setyDistance(float yDistance) { |
| | | this.yDistance = yDistance; |
| | | } |
| | | |
| | | public void setxDuration(Short xDuration) { |
| | | this.xDuration = Float.valueOf(xDuration); |
| | | public void setxDuration(float xDuration) { |
| | | this.xDuration = xDuration; |
| | | } |
| | | |
| | | public void setyDuration(Short yDuration) { |
| | | this.yDuration = Float.valueOf(yDuration); |
| | | public void setyDuration(float yDuration) { |
| | | this.yDuration = yDuration; |
| | | } |
| | | |
| | | } |
| | |
| | | import com.zy.core.enums.RgvStatusType; |
| | | import lombok.Data; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * Created by vincent on 2020/8/7 |
| | | */ |
| | |
| | | public Short walkPos; |
| | | |
| | | ////////////////////// 工位2定义 ////////////////////////////////////////////////// |
| | | /** |
| | | * 工位2任务号 |
| | | */ |
| | | public Short taskNo2 = 0; |
| | | |
| | | /** |
| | | * RGV工位2当前状态 |
| | | * 0:空闲,无任务 |
| | | * 11:取货中 |
| | | * 12:放货中 |
| | | * 10:任务完成等待WCS确认 |
| | | */ |
| | | public Short status2; |
| | | |
| | | /** |
| | | * 状态枚举 |
| | | */ |
| | | public RgvStatusType statusType2; |
| | | |
| | | /** |
| | | * 工位2有物 |
| | | */ |
| | | public Short loaded2; |
| | | // /** |
| | | // * 工位2任务号 |
| | | // */ |
| | | // public Short taskNo2 = 0; |
| | | // |
| | | // /** |
| | | // * RGV工位2当前状态 |
| | | // * 0:空闲,无任务 |
| | | // * 11:取货中 |
| | | // * 12:放货中 |
| | | // * 10:任务完成等待WCS确认 |
| | | // */ |
| | | // public Short status2; |
| | | // |
| | | // /** |
| | | // * 状态枚举 |
| | | // */ |
| | | // public RgvStatusType statusType2; |
| | | // |
| | | // /** |
| | | // * 工位2有物 |
| | | // */ |
| | | // public Short loaded2; |
| | | /////////////////////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | |
| | | this.status1 = RgvStatusType.get(type1).id.shortValue(); |
| | | } |
| | | |
| | | public void setStatus2(Short status2){ |
| | | this.status2 = status2; |
| | | this.statusType2 = RgvStatusType.get(status2); |
| | | } |
| | | |
| | | public void setStatus2(RgvStatusType type2){ |
| | | this.statusType2 = type2; |
| | | this.status2 = RgvStatusType.get(type2).id.shortValue(); |
| | | } |
| | | // public void setStatus2(Short status2){ |
| | | // this.status2 = status2; |
| | | // this.statusType2 = RgvStatusType.get(status2); |
| | | // } |
| | | // |
| | | // public void setStatus2(RgvStatusType type2){ |
| | | // this.statusType2 = type2; |
| | | // this.status2 = RgvStatusType.get(type2).id.shortValue(); |
| | | // } |
| | | |
| | | /** |
| | | * 最近一次入出库类型 |
| | |
| | | basRgv.setRgvErr(alarm.longValue()); |
| | | } |
| | | basRgv.setWrkNo1(taskNo1.intValue()); |
| | | basRgv.setWrkNo2(taskNo2.intValue()); |
| | | // basRgv.setWrkNo2(taskNo2.intValue()); |
| | | return basRgv; |
| | | } |
| | | |
| | |
| | | |
| | | public Integer getRgvPosI(){ |
| | | //需要根据现场改造 根据读到的值获取对应站点位置 |
| | | Map<Short,Integer> map = new HashMap<>(); |
| | | map.put((short) 1,100);map.put((short) 2,101); |
| | | map.put((short) 3,106);map.put((short) 4,107); |
| | | map.put((short) 5,112);map.put((short) 6,113); |
| | | map.put((short) 7,119);map.put((short) 8,124); |
| | | map.put((short) 9,149);map.put((short) 10,153); |
| | | map.put((short) 11,157);map.put((short) 12,161); |
| | | if (RgvPos==null) return 0; |
| | | return RgvPos.intValue(); |
| | | |
| | | return map.get(RgvPos); |
| | | } |
| | | |
| | | } |
| | |
| | | rgvProtocol.setLoaded1((short)0); |
| | | rgvProtocol.setWalkPos((short)0); |
| | | rgvProtocol.setRgvPos((short)0); |
| | | rgvProtocol.setTaskNo2((short)0); |
| | | rgvProtocol.setStatus2((short)-1); |
| | | rgvProtocol.setLoaded2((short)0); |
| | | // rgvProtocol.setTaskNo2((short)0); |
| | | // rgvProtocol.setStatus2((short)-1); |
| | | // rgvProtocol.setLoaded2((short)0); |
| | | rgvProtocol.setAlarm((short)0); |
| | | rgvProtocol.setxSpeed((short) 0); |
| | | rgvProtocol.setxDistance((short) 0); |
| | |
| | | */ |
| | | private void readStatus(){ |
| | | try { |
| | | OperateResultExOne<byte[]> result = siemensNet.Read("DB1.0", (short) 34); |
| | | OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30); |
| | | if (result.IsSuccess) { |
| | | if (null == rgvProtocol) { |
| | | rgvProtocol = new RgvProtocol(); |
| | |
| | | rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransInt16(result.Content, 8)); |
| | | rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt16(result.Content, 10)); |
| | | rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12)); |
| | | // rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt16(result.Content, 14)); |
| | | rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 14)); |
| | | // rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 16)); |
| | | // rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 18)); |
| | | rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20)); |
| | | rgvProtocol.setHeart(siemensNet.getByteTransform().TransInt16(result.Content, 22)); |
| | | rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24)); |
| | | rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 18)); |
| | | // rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20)); |
| | | rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 22)); |
| | | // rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24)); |
| | | rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26)); |
| | | rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28)); |
| | | rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30)); |
| | | rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32)); |
| | | // rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28)); |
| | | // rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30)); |
| | | // rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32)); |
| | | // rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28)); |
| | | // rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40)); |
| | | // rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48)); |
| | |
| | | } |
| | | |
| | | // 工位2复位信号 |
| | | if (rgvProtocol.getStatusType2().equals(RgvStatusType.WAITING) |
| | | || rgvProtocol.getStatusType2().equals(RgvStatusType.FETCHWAITING)) { |
| | | if (resetFlag2) { |
| | | RgvCommand rgvCommand = new RgvCommand(); |
| | | rgvCommand.setAckFinish2((short)1); |
| | | if (write(rgvCommand)) { |
| | | resetFlag2 = false; |
| | | } |
| | | } |
| | | } |
| | | // if (rgvProtocol.getStatusType2().equals(RgvStatusType.WAITING) |
| | | // || rgvProtocol.getStatusType2().equals(RgvStatusType.FETCHWAITING)) { |
| | | // if (resetFlag2) { |
| | | // RgvCommand rgvCommand = new RgvCommand(); |
| | | // rgvCommand.setAckFinish2((short)1); |
| | | // if (write(rgvCommand)) { |
| | | // resetFlag2 = false; |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | try { |
| | | // 根据实时信息更新数据库 |
| | |
| | | array[10] = command.getCommand(); |
| | | OperateResult result = siemensNet.Write("DB100.0", array); |
| | | |
| | | if (command.getAckFinish1() == 0 && command.getAckFinish2() == 0) { |
| | | short commandFinish = 3; //工位1、2任务同时写入 |
| | | Thread.sleep(100L); |
| | | result = siemensNet.Write("DB100.20", commandFinish); |
| | | } |
| | | // if (command.getAckFinish1() == 0 && command.getAckFinish2() == 0) { |
| | | // short commandFinish = 3; //工位1、2任务同时写入 |
| | | // Thread.sleep(100L); |
| | | // result = siemensNet.Write("DB100.20", commandFinish); |
| | | // } |
| | | |
| | | try { |
| | | // 日志记录 |
| | |
| | | private CrnProtocol crnProtocol; |
| | | private boolean resetFlag = false; |
| | | |
| | | public boolean isRunning = true; |
| | | |
| | | public Long sign = System.currentTimeMillis(); |
| | | |
| | | /** |
| | | * 堆垛机是否在回原点运动中标记 |
| | | */ |
| | |
| | | @SuppressWarnings("InfiniteLoopStatement") |
| | | public void run() { |
| | | this.connect(); |
| | | while (true) { |
| | | while (isRunning) { |
| | | try { |
| | | int step = 1; |
| | | Task task = MessageQueue.poll(SlaveType.Crn, slave.getId()); |
| | |
| | | crnProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 22)); |
| | | crnProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 24)); |
| | | crnProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 26)); |
| | | crnProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28)); |
| | | crnProtocol.setySpeed(siemensNet.getByteTransform().TransInt16(result.Content, 32)); |
| | | crnProtocol.setzSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 36)); |
| | | crnProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40)); |
| | | crnProtocol.setyDistance(siemensNet.getByteTransform().TransInt16(result.Content, 44)); |
| | | crnProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48)); |
| | | crnProtocol.setyDuration(siemensNet.getByteTransform().TransInt16(result.Content, 52)); |
| | | crnProtocol.setxSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 28)); |
| | | crnProtocol.setySpeed(siemensNet.getByteTransform().TransSingle(result.Content, 32)); |
| | | crnProtocol.setzSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 36)); |
| | | crnProtocol.setxDistance(siemensNet.getByteTransform().TransSingle(result.Content, 40)); |
| | | crnProtocol.setyDistance(siemensNet.getByteTransform().TransSingle(result.Content, 44)); |
| | | crnProtocol.setxDuration(siemensNet.getByteTransform().TransSingle(result.Content, 48)); |
| | | crnProtocol.setyDuration(siemensNet.getByteTransform().TransSingle(result.Content, 52)); |
| | | |
| | | OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | public void requestStop() { |
| | | isRunning = false; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void close() { |
| | |
| | | # 堆垛机入库站点 |
| | | crnInStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 103 |
| | | row: 2 |
| | | staNo: 123 |
| | | row: 3 |
| | | bay: 1 |
| | | lev: 1 |
| | | # 堆垛机出库站点 |
| | | crnOutStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 104 |
| | | row: 3 |
| | | staNo: 118 |
| | | row: 2 |
| | | bay: 1 |
| | | lev: 1 |
| | | # 堆垛机2 |
| | |
| | | # 堆垛机入库站点 |
| | | crnInStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 203 |
| | | row: 12 |
| | | staNo: 128 |
| | | row: 6 |
| | | bay: 1 |
| | | lev: 1 |
| | | # 堆垛机出库站点 |
| | | crnOutStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 204 |
| | | row: 13 |
| | | staNo: 132 |
| | | row: 7 |
| | | bay: 1 |
| | | lev: 1 |
| | | # 堆垛机3 |
| | |
| | | # 堆垛机入库站点 |
| | | crnInStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 303 |
| | | row: 22 |
| | | staNo: 136 |
| | | row: 12 |
| | | bay: 1 |
| | | lev: 1 |
| | | # 堆垛机出库站点 |
| | | crnOutStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 304 |
| | | row: 23 |
| | | staNo: 140 |
| | | row: 11 |
| | | bay: 1 |
| | | lev: 1 |
| | | # 堆垛机4 |
| | |
| | | # 堆垛机入库站点 |
| | | crnInStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 303 |
| | | row: 22 |
| | | staNo: 144 |
| | | row: 14 |
| | | bay: 1 |
| | | lev: 1 |
| | | # 堆垛机出库站点 |
| | | crnOutStn[0]: |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staNo: 304 |
| | | row: 23 |
| | | staNo: 148 |
| | | row: 15 |
| | | bay: 1 |
| | | lev: 1 |
| | | |
| | |
| | | <thead> |
| | | <tr> |
| | | <th>RGV</th> |
| | | <th>模式</th> |
| | | <th>状态</th> |
| | | <th>任务号1</th> |
| | | <th>状态1</th> |
| | | <th>有物1</th> |
| | | <th>当前模式</th> |
| | | <th>当前状态</th> |
| | | <th>任务号</th> |
| | | <th>工作状态</th> |
| | | <th>有物</th> |
| | | <th>RGV位置</th> |
| | | <th>走行定位</th> |
| | | <th>任务号2</th> |
| | | <th>状态2</th> |
| | | <th>有物2</th> |
| | | <!-- <th>任务号2</th>--> |
| | | <!-- <th>状态2</th>--> |
| | | <!-- <th>有物2</th>--> |
| | | <th>故障代码</th> |
| | | <th>故障描述</th> |
| | | </tr> |
| | |
| | | setVal(tr.children("td").eq(3), table[i-1].workNo1); |
| | | setVal(tr.children("td").eq(4), table[i-1].status1); |
| | | setVal(tr.children("td").eq(5), table[i-1].loading1); |
| | | setVal(tr.children("td").eq(6), table[i-1].rgvPos); |
| | | setVal(tr.children("td").eq(6), table[i-1].rgvPos1); |
| | | setVal(tr.children("td").eq(7), table[i-1].walkPos); |
| | | setVal(tr.children("td").eq(8), table[i-1].workNo2); |
| | | setVal(tr.children("td").eq(9), table[i-1].status2); |
| | | setVal(tr.children("td").eq(10), table[i-1].loading2); |
| | | setVal(tr.children("td").eq(11), table[i-1].warnCode); |
| | | setVal(tr.children("td").eq(12), table[i-1].alarm); |
| | | // setVal(tr.children("td").eq(8), table[i-1].workNo2); |
| | | // setVal(tr.children("td").eq(9), table[i-1].status2); |
| | | // setVal(tr.children("td").eq(10), table[i-1].loading2); |
| | | setVal(tr.children("td").eq(8), table[i-1].warnCode); |
| | | setVal(tr.children("td").eq(9), table[i-1].alarm); |
| | | } |
| | | } else if (res.code === 403){ |
| | | window.location.href = baseUrl+"/login"; |