| | |
| | | // 出入库模式 |
| | | case 3: |
| | | write3((StaProtocol)task.getData()); |
| | | read(); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | if (Cools.isEmpty(staProtocol)) { |
| | | return; |
| | | } |
| | | OperateResult writeResult = null; |
| | | //任务下发次数 |
| | | int writeCount = 0; |
| | | //任务下发成功标识 |
| | | boolean writeFlag = false; |
| | | |
| | | Short outAndIn = staProtocol.getOutInModel(); |
| | | Integer siteId = staProtocol.getSiteId(); |
| | | Short run = 0;//停止转动 |
| | | String address = ""; |
| | | if (staProtocol.getRotationDire() != null) { |
| | | run = staProtocol.getRotationDire().shortValue();//转动方向 |
| | | } |
| | | switch (siteId) { |
| | | case 102: |
| | | siemensS7Net.Write("DB100.300", run); |
| | | address = "DB100.300"; |
| | | break; |
| | | case 105: |
| | | siemensS7Net.Write("DB100.302", run); |
| | | address = "DB100.302"; |
| | | break; |
| | | case 106: |
| | | siemensS7Net.Write("DB100.304", run); |
| | | address = "DB100.304"; |
| | | break; |
| | | case 107: |
| | | siemensS7Net.Write("DB100.306", run); |
| | | address = "DB100.306"; |
| | | break; |
| | | case 108: |
| | | siemensS7Net.Write("DB100.308", run); |
| | | address = "DB100.308"; |
| | | break; |
| | | } |
| | | |
| | | if (staProtocol.getStaNo() != null && staProtocol.getWorkNo() != null) { |
| | | write(staProtocol);//写入工作号和目标站 |
| | | while(writeCount < 5){ |
| | | writeResult = siemensS7Net.Write(address, run); |
| | | if (writeResult == null) { |
| | | log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | continue; |
| | | } |
| | | |
| | | if(writeResult.IsSuccess){ |
| | | Thread.sleep(200); |
| | | OperateResultExOne<byte[]> readResult = siemensS7Net.Read(address, (short) 2); |
| | | if(readResult.IsSuccess){ |
| | | short run2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); |
| | | if(run.equals(run2)){ |
| | | //任务命令写入成功 |
| | | writeFlag = true; |
| | | if (staProtocol.getStaNo() != null && staProtocol.getWorkNo() != null) { |
| | | write(staProtocol);//写入工作号和目标站 |
| | | } |
| | | log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | break; |
| | | } else {//返回结果是成功了,但是真实值不相同 |
| | | writeCount++; |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={1},站点数据={2},写入次数={3}", |
| | | slave.getId(), JSON.toJSON(staProtocol),writeCount)); |
| | | log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | } |
| | | } else { |
| | | writeCount++; |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后读取失败。输送线plc编号={1},站点数据={2},写入次数={3}", |
| | | slave.getId(), JSON.toJSON(staProtocol), writeCount)); |
| | | log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | } |
| | | } else { |
| | | writeCount++; |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令失败。输送线plc编号={1},站点数据={2},写入次数={3}", |
| | | slave.getId(), JSON.toJSON(staProtocol),writeCount)); |
| | | log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | } |
| | | Thread.sleep(200); |
| | | } |
| | | |
| | | //写命令尝试了5次还是失败了 |
| | | if(!writeFlag){ |
| | | staProtocol = station.get(staProtocol.getSiteId()); |
| | | if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { |
| | | staProtocol.setPakMk(true); |
| | | } |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令尝试5次失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); |
| | | log.error("写入输送线命令尝试5次失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); |
| | | |
| | | //重新添加数据到任务队列 |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(3, staProtocol)); |
| | | read();//读取1次设备状态 |
| | | return; |
| | | } else { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发成功 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); |
| | | log.info("输送线命令下发 [id:{}] >>>>> 命令下发成功: {}", slave.getId(), JSON.toJSON(staProtocol)); |
| | | |
| | | staProtocol = station.get(siteId); |
| | | if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { |
| | | staProtocol.setPakMk(true); |
| | | } |
| | | } |
| | | |
| | | } |