|  |  |  | 
|---|
|  |  |  | import com.core.common.DateUtils; | 
|---|
|  |  |  | import com.core.common.SpringUtils; | 
|---|
|  |  |  | import com.zy.asrs.entity.BasRgv; | 
|---|
|  |  |  | import com.zy.asrs.entity.BasRgvErrLog; | 
|---|
|  |  |  | import com.zy.asrs.entity.BasRgvOpt; | 
|---|
|  |  |  | import com.zy.asrs.service.BasRgvErrLogService; | 
|---|
|  |  |  | import com.zy.asrs.service.BasRgvOptService; | 
|---|
|  |  |  | import com.zy.asrs.service.BasRgvService; | 
|---|
|  |  |  | import com.zy.asrs.utils.NumUtils; | 
|---|
|  |  |  | import com.zy.asrs.utils.RouteUtils; | 
|---|
|  |  |  | import com.zy.core.ThreadHandler; | 
|---|
|  |  |  | import com.zy.core.cache.MessageQueue; | 
|---|
|  |  |  | import com.zy.core.cache.OutputQueue; | 
|---|
|  |  |  | import com.zy.core.enums.RgvStatusType; | 
|---|
|  |  |  | import com.zy.core.enums.RgvModeType; | 
|---|
|  |  |  | import com.zy.core.enums.RgvTaskModeType; | 
|---|
|  |  |  | import com.zy.core.enums.SlaveType; | 
|---|
|  |  |  | import com.zy.core.model.RgvSlave; | 
|---|
|  |  |  | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.text.MessageFormat; | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.HashSet; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * RGV线程 | 
|---|
|  |  |  | 
|---|
|  |  |  | * 工位2复位信号 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private boolean resetFlag2 = false; | 
|---|
|  |  |  | private boolean connectRgv = false; | 
|---|
|  |  |  | private boolean alarmChangeSign = false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public RgvThread(RgvSlave slave) { | 
|---|
|  |  |  | this.slave = slave; | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @SuppressWarnings("InfiniteLoopStatement") | 
|---|
|  |  |  | public void run() { | 
|---|
|  |  |  | this.connect(); | 
|---|
|  |  |  | connectRgv = this.connect(); | 
|---|
|  |  |  | while(!connectRgv){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | connectRgv = this.connect(); | 
|---|
|  |  |  | Thread.sleep(100); | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 启动线程自动重连 | 
|---|
|  |  |  | new Thread(this::rgvConnect).start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 启动读数据线程 | 
|---|
|  |  |  | new Thread(this::readStatusRgv).start(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 启动任务下发线程 | 
|---|
|  |  |  | new Thread(this::taskIssued).start(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 任务下发 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void taskIssued() { | 
|---|
|  |  |  | while (true) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if(!connectRgv){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Thread.sleep(1000L); | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int step = 1; | 
|---|
|  |  |  | Task task = MessageQueue.poll(SlaveType.Rgv, slave.getId()); | 
|---|
|  |  |  | if (task != null) { | 
|---|
|  |  |  | step = task.getStep(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (step) { | 
|---|
|  |  |  | // 读数据 | 
|---|
|  |  |  | //漫游任务完成信号 | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | readStatus(); | 
|---|
|  |  |  | //                        readStatus(); | 
|---|
|  |  |  | taskComplete(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | //工位1写入数据 | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | write((RgvCommand) task.getData()); | 
|---|
|  |  |  | RgvCommand command2 = (RgvCommand) task.getData(); | 
|---|
|  |  |  | rgvOpt(command2); | 
|---|
|  |  |  | write(command2); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | // 复位 | 
|---|
|  |  |  | case 3: | 
|---|
|  |  |  | 
|---|
|  |  |  | command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式 | 
|---|
|  |  |  | command.setSourceStaNo1((short)0);     // 源站 | 
|---|
|  |  |  | command.setDestinationStaNo1((short)0);     // 目标站 | 
|---|
|  |  |  | rgvOpt(command); | 
|---|
|  |  |  | write3(command); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | //工位1写入取消数据 | 
|---|
|  |  |  | case 4: | 
|---|
|  |  |  | RgvCommand command4 = (RgvCommand) task.getData(); | 
|---|
|  |  |  | rgvOpt(command4); | 
|---|
|  |  |  | write4(command4); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | // 漫游 | 
|---|
|  |  |  | case 5: | 
|---|
|  |  |  | Long aLong = (Long) task.getData(); | 
|---|
|  |  |  | rgvOpt(aLong); | 
|---|
|  |  |  | write5(aLong); | 
|---|
|  |  |  | //工位1写入取消数据 | 
|---|
|  |  |  | case 6: | 
|---|
|  |  |  | rgvOpt(); | 
|---|
|  |  |  | write6(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Thread.sleep(500); | 
|---|
|  |  |  | Thread.sleep(50); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("RGV写线程异常"+e.getMessage()); | 
|---|
|  |  |  | //                e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void rgvConnect() { | 
|---|
|  |  |  | while (true) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Thread.sleep(1000); | 
|---|
|  |  |  | if(!connectRgv){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | connectRgv = this.connect(); | 
|---|
|  |  |  | Thread.sleep(100); | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | log.error("rgv连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
|---|
|  |  |  | initRgv(); | 
|---|
|  |  |  | //                e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void readStatusRgv() { | 
|---|
|  |  |  | while (true) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if(!connectRgv){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Thread.sleep(1000L); | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | initRgv(); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Thread.sleep(40); | 
|---|
|  |  |  | readStatus(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("RGV读线程异常"+e.getMessage()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
|---|
|  |  |  | initRgv(); | 
|---|
|  |  |  | //                e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | rgvProtocol.setxSpeed((short) 0); | 
|---|
|  |  |  | rgvProtocol.setxDistance((short) 0); | 
|---|
|  |  |  | rgvProtocol.setxDuration((short) 0); | 
|---|
|  |  |  | log.error("连接中断:RGV号:"+slave.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 初始化RGV状态 | 
|---|
|  |  |  | //     */ | 
|---|
|  |  |  | //    private void initRgv() { | 
|---|
|  |  |  | //        if (null == rgvProtocol) { | 
|---|
|  |  |  | //            rgvProtocol = new RgvProtocol(); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        rgvProtocol.setRgvNo(slave.getId()); | 
|---|
|  |  |  | //        rgvProtocol.setMode((short) 3); | 
|---|
|  |  |  | //        rgvProtocol.setStatus((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setTaskNo1((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setStatus1((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setLoaded1((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setWalkPos((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setRgvPos(slave.getId()*100000L); | 
|---|
|  |  |  | //        rgvProtocol.setTaskNo2((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setStatus2((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setLoaded2((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setAlarm((short)0); | 
|---|
|  |  |  | //        rgvProtocol.setxSpeed((short) 0); | 
|---|
|  |  |  | //        rgvProtocol.setxDistance((short) 0); | 
|---|
|  |  |  | //        rgvProtocol.setxDuration((short) 0); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public boolean connect() { | 
|---|
|  |  |  | 
|---|
|  |  |  | OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) 20); | 
|---|
|  |  |  | OperateResultExOne<byte[]> resultV = siemensNet.Read("DB20.16", (short) 2); | 
|---|
|  |  |  | OperateResultExOne<byte[]> resultE = siemensNet.Read("DB20.26", (short) 2); | 
|---|
|  |  |  | if (result.IsSuccess) { | 
|---|
|  |  |  | OperateResultExOne<byte[]> resultError = siemensNet.Read("DB13.0", (short) 13); | 
|---|
|  |  |  | if (result.IsSuccess && resultV.IsSuccess && resultE.IsSuccess) { | 
|---|
|  |  |  | if (null == rgvProtocol) { | 
|---|
|  |  |  | rgvProtocol = new RgvProtocol(); | 
|---|
|  |  |  | rgvProtocol.setRgvNo(slave.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 10)); | 
|---|
|  |  |  | rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 12)); | 
|---|
|  |  |  | rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 14)); | 
|---|
|  |  |  | rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 16)); | 
|---|
|  |  |  | int poi = siemensNet.getByteTransform().TransInt32(result.Content, 16); | 
|---|
|  |  |  | if (poi>0){ | 
|---|
|  |  |  | rgvProtocol.setRgvPos((long)poi); | 
|---|
|  |  |  | rgvProtocol.setRgvPosInt(poi); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.info(rgvProtocol.getRgvNo()+"号小车读取定位值:"+poi); | 
|---|
|  |  |  | rgvProtocol.setInstantaneousSpeed(Double.valueOf(siemensNet.getByteTransform().TransInt16(resultV.Content, 0))); | 
|---|
|  |  |  | rgvProtocol.setEndStaM(siemensNet.getByteTransform().TransInt16(resultE.Content, 0)); | 
|---|
|  |  |  | boolean[] statusAlarmList = siemensNet.getByteTransform().TransBool(resultError.Content, 0, 13); | 
|---|
|  |  |  | int alarmCount = 0; | 
|---|
|  |  |  | List<Integer> alarmList = new ArrayList<>(); | 
|---|
|  |  |  | for (boolean alarmSign : statusAlarmList){ | 
|---|
|  |  |  | alarmCount++; | 
|---|
|  |  |  | if (alarmSign){ | 
|---|
|  |  |  | alarmList.add(alarmCount); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | alarmChangeSign = new HashSet<>(alarmList).equals(new HashSet<>(rgvProtocol.getAlarmList())); | 
|---|
|  |  |  | rgvProtocol.setAlarmList(alarmList); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                rgvProtocol.setRgvPos((long)NumUtils.GetRandomIntInRange(1737000)); | 
|---|
|  |  |  | OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 根据实时信息更新数据库 | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){ | 
|---|
|  |  |  | log.error("RGV plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | if (!alarmChangeSign && !alarmList.isEmpty()){ | 
|---|
|  |  |  | BasRgvErrLogService basRgvErrLogService = SpringUtils.getBean(BasRgvErrLogService.class); | 
|---|
|  |  |  | BasRgvErrLog basRgvErrLog = new BasRgvErrLog(rgvProtocol.getAlarmList(), rgvProtocol.getTaskNo1(), rgvProtocol.getRgvNo()); | 
|---|
|  |  |  | basRgvErrLogService.insert(basRgvErrLog); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  | log.error("RGV异常信息保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception ignore) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 工位1写入数据 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void rgvOpt(RgvCommand command) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class); | 
|---|
|  |  |  | BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol.getTaskNo1().intValue(), rgvProtocol.getRgvNo(), rgvProtocol.getRgvPosInt(), command); | 
|---|
|  |  |  | log.info(rgvProtocol.getRgvNo()+"号小车写入命令定位值:"+rgvProtocol.getRgvPosInt()); | 
|---|
|  |  |  | basRgvOptService.insert(basRgvOpt); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("RGV写入命令保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private void rgvOpt(Long command) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class); | 
|---|
|  |  |  | BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol.getTaskNo1().intValue(), rgvProtocol.getRgvNo(), rgvProtocol.getRgvPosI(), command); | 
|---|
|  |  |  | basRgvOptService.insert(basRgvOpt); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("RGV写入命令保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private void rgvOpt() { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class); | 
|---|
|  |  |  | BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol.getTaskNo1().intValue(), rgvProtocol.getRgvNo(), rgvProtocol.getRgvPosI()); | 
|---|
|  |  |  | basRgvOptService.insert(basRgvOpt); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("RGV写入命令保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private boolean write(RgvCommand command) throws InterruptedException { | 
|---|
|  |  |  | if (null == command) { | 
|---|
|  |  |  | log.error("RGV写入命令为空"); | 
|---|
|  |  |  | 
|---|
|  |  |  | array[3] = command.getTaskMode1();//任务模式 | 
|---|
|  |  |  | array[4] = command.getTaskNo1(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | OperateResult result = siemensNet.Write("DB24.0", array); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (command.getAckFinish1().equals((short)0)) { | 
|---|
|  |  |  | Thread.sleep(100L); | 
|---|
|  |  |  | //            Thread.sleep(100L); | 
|---|
|  |  |  | siemensNet.Write("DB24.10.7", command.getRgvSome() == 1); | 
|---|
|  |  |  | Thread.sleep(20L); | 
|---|
|  |  |  | result = siemensNet.Write("DB24.10.0", true); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | siemensNet.Write("DB24.10.1", true); | 
|---|
|  |  |  | 
|---|
|  |  |  | } catch (Exception ignore) {} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (result != null && result.IsSuccess) { | 
|---|
|  |  |  | Thread.sleep(200); | 
|---|
|  |  |  | this.readStatus(); | 
|---|
|  |  |  | //            Thread.sleep(200); | 
|---|
|  |  |  | //            this.readStatus(); | 
|---|
|  |  |  | log.info("RGV 工位1命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSONString(command)); | 
|---|
|  |  |  | OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 工位1命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(command))); | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private boolean write4(RgvCommand command) throws InterruptedException { | 
|---|
|  |  |  | if (null == command) { | 
|---|
|  |  |  | log.error("RGV写入命令为空"); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        siemensNet.Write("DB24.10.0", false); | 
|---|
|  |  |  | //        siemensNet.Write("DB24.10.1", false); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | command.setRgvNo(slave.getId()); | 
|---|
|  |  |  | short[] array = new short[5]; | 
|---|
|  |  |  | array[0] = command.getRgvNo().shortValue(); | 
|---|
|  |  |  | array[1] = command.getSourceStaNo1(); | 
|---|
|  |  |  | array[2] = command.getDestinationStaNo1(); | 
|---|
|  |  |  | array[3] = command.getTaskMode1();//任务模式 | 
|---|
|  |  |  | array[4] = command.getTaskNo1(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | OperateResult result = siemensNet.Write("DB24.0", array); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //        if (command.getAckFinish1().equals((short)0)) { | 
|---|
|  |  |  | ////            Thread.sleep(100L); | 
|---|
|  |  |  | ////            siemensNet.Write("DB24.10.7", command.getRgvSome() == 1); | 
|---|
|  |  |  | ////            Thread.sleep(20L); | 
|---|
|  |  |  | ////            result = siemensNet.Write("DB24.10.0", true); | 
|---|
|  |  |  | //        } else { | 
|---|
|  |  |  | //            siemensNet.Write("DB24.10.1", true); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 日志记录 | 
|---|
|  |  |  | BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); | 
|---|
|  |  |  | BasRgvOpt basRgvOpt = new BasRgvOpt( | 
|---|
|  |  |  | command.getTaskNo1().intValue(), | 
|---|
|  |  |  | command.getTaskNo2().intValue(), | 
|---|
|  |  |  | command.getRgvNo(), | 
|---|
|  |  |  | new Date(), | 
|---|
|  |  |  | command.getTaskModeType1().toString(), | 
|---|
|  |  |  | command.getSourceStaNo1().intValue(), | 
|---|
|  |  |  | command.getDestinationStaNo1().intValue(), | 
|---|
|  |  |  | command.getSourceStaNo2().intValue(), | 
|---|
|  |  |  | command.getDestinationStaNo2().intValue(), | 
|---|
|  |  |  | null, | 
|---|
|  |  |  | new Date(), | 
|---|
|  |  |  | null | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | bean.insert(basRgvOpt); | 
|---|
|  |  |  | } catch (Exception ignore) {} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (result != null && result.IsSuccess) { | 
|---|
|  |  |  | //            Thread.sleep(200); | 
|---|
|  |  |  | //            this.readStatus(); | 
|---|
|  |  |  | log.info("RGV 工位1取消命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSONString(command)); | 
|---|
|  |  |  | OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 工位1命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(command))); | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | OutputQueue.RGV.offer(MessageFormat.format("【{0}】写入RGV plc工位1数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); | 
|---|
|  |  |  | log.error("写入RGV plc工位1取消数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 完成 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void taskComplete() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | OperateResultExOne<byte[]> result = siemensNet.Read("DB24.11", (short) 1); | 
|---|
|  |  |  | boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 0, 1); | 
|---|
|  |  |  | if (status[0]){ | 
|---|
|  |  |  | OperateResult result4 = siemensNet.Write("DB24.11.0", false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("RGV数据任务下发复位线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void write5(Long devperimeter){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | siemensNet.Write("DB24.12", devperimeter.intValue()); | 
|---|
|  |  |  | Thread.sleep(10L); | 
|---|
|  |  |  | siemensNet.Write("DB24.11.0", true); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception ignore) { | 
|---|
|  |  |  | log.error("写入RGV plc工位1漫游数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void write6(){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | siemensNet.Write("DB24.11.1", true); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception ignore) { | 
|---|
|  |  |  | log.error("写入RGV plc工位1漫游数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private boolean write3(RgvCommand command) throws InterruptedException { | 
|---|
|  |  |  | if (null == command) { | 
|---|
|  |  |  | log.error("RGV写入命令为空"); | 
|---|
|  |  |  | 
|---|
|  |  |  | //        OperateResult result = siemensNet.Write("DB24.0", array); | 
|---|
|  |  |  | OperateResult result = null; | 
|---|
|  |  |  | if (command.getAckFinish1().equals((short)0)) { | 
|---|
|  |  |  | Thread.sleep(100L); | 
|---|
|  |  |  | Thread.sleep(20L); | 
|---|
|  |  |  | result = siemensNet.Write("DB24.10.0", true); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | siemensNet.Write("DB24.10.1", true); | 
|---|
|  |  |  | 
|---|
|  |  |  | } catch (Exception ignore) {} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (result != null && result.IsSuccess) { | 
|---|
|  |  |  | Thread.sleep(200); | 
|---|
|  |  |  | this.readStatus(); | 
|---|
|  |  |  | //            Thread.sleep(200); | 
|---|
|  |  |  | //            this.readStatus(); | 
|---|
|  |  |  | log.info("RGV 工位1命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSONString(command)); | 
|---|
|  |  |  | OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 工位1命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(command))); | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | 
|---|
|  |  |  | /******************************************************************************************/ | 
|---|
|  |  |  | /**************************************** 测试专用 *****************************************/ | 
|---|
|  |  |  | /*****************************************************************************************/ | 
|---|
|  |  |  | public static void main(String[] args) throws InterruptedException { | 
|---|
|  |  |  | RgvSlave slave = new RgvSlave(); | 
|---|
|  |  |  | slave.setId(1); | 
|---|
|  |  |  | slave.setIp("192.168.6.9"); | 
|---|
|  |  |  | slave.setRack(0); | 
|---|
|  |  |  | slave.setSlot(0); | 
|---|
|  |  |  | RgvThread rgvThread = new RgvThread(slave); | 
|---|
|  |  |  | rgvThread.connect(); | 
|---|
|  |  |  | rgvThread.readStatus(); | 
|---|
|  |  |  | System.out.println(JSON.toJSONString(rgvThread.rgvProtocol)); | 
|---|
|  |  |  | Thread.sleep(3000L); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //    public static void main(String[] args) throws InterruptedException { | 
|---|
|  |  |  | //        RgvSlave slave = new RgvSlave(); | 
|---|
|  |  |  | //        slave.setId(1); | 
|---|
|  |  |  | //        slave.setIp("192.168.6.9"); | 
|---|
|  |  |  | //        slave.setRack(0); | 
|---|
|  |  |  | //        slave.setSlot(0); | 
|---|
|  |  |  | //        RgvThread rgvThread = new RgvThread(slave); | 
|---|
|  |  |  | //        rgvThread.connect(); | 
|---|
|  |  |  | //        rgvThread.readStatus(); | 
|---|
|  |  |  | //        System.out.println(JSON.toJSONString(rgvThread.rgvProtocol)); | 
|---|
|  |  |  | //        Thread.sleep(3000L); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|