| | |
| | | add(1000); add(1001); add(1002); add(1003); add(1004); add(1005); add(1006); add(1007); add(1008); add(1009); add(1010); |
| | | add(1011); add(1012); add(1013); add(1014); add(1015); add(1016); add(1017); add(1018); add(1019); add(1020); add(1021); |
| | | add(1022); add(1023); add(1024); add(1025); add(1026); add(1027); add(1028); add(1029); add(1030); |
| | | add(2000); add(2001); add(2002); add(2003); add(2004);add(2005); add(2006); add(2007); |
| | | // add(200);add(201);add(202); |
| | | }}; |
| | | public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ |
| | | add(1400); |
| | | add(1040);add(1041);add(1042);add(1043);add(1044);add(1045);add(1046);add(1047); |
| | | add(2010);add(2011);add(2012);add(2013);add(2014);add(2015);add(2016);add(2017); |
| | | add(3010);add(3011);add(3012);add(3013);add(3014);add(3015);add(3016);add(3017); |
| | | |
| | | // add(200);add(201);add(202); |
| | | }}; |
| | |
| | | // 写数据 ID+目标站 |
| | | case 2: |
| | | writeD((StaProtocol)task.getData(),1); |
| | | log.error("输送线下发命令:"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo()); |
| | | // log.error("输送线下发命令:"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo()); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | } |
| | | |
| | | private void writeD(StaProtocol staProtocol,Integer count)throws InterruptedException{ |
| | | |
| | | boolean reset = true; |
| | | if (null == staProtocol) { |
| | | return; |
| | | } |
| | | staProtocol = staProtocol.clone(); |
| | | Integer oriWrkNo = staProtocol.getWorkNo(); |
| | | short oriStaNo = staProtocol.getStaNo(); |
| | | ArrayList<Integer> staNos = getStaNo(); |
| | | int index = staNos.indexOf(staProtocol.getSiteId()); |
| | | |
| | | |
| | | if(writeWrk(staProtocol,1)){ |
| | | |
| | | int whileCount = 0; |
| | | OperateResult write3 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1); |
| | | if (write3.IsSuccess){ |
| | | News.info("输送线命令下发[id:"+slave.getId()+"] >>>>>"+"["+1+"]"); |
| | | Thread.sleep(100); |
| | | do { |
| | | OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100."+(index*66 +6), (short) 2); |
| | | short mk = siemensS7Net.getByteTransform().TransInt16(result2.Content, 0); |
| | | if (mk == 2){ |
| | | OperateResult write5 = siemensS7Net.Write("DB100." + index*66, 0); // 工作号 |
| | | Thread.sleep(100); |
| | | OperateResult write6 = siemensS7Net.Write("DB100." + (index*66+4), (short) 0); // 目标站 |
| | | Thread.sleep(100); |
| | | OperateResult write4 = siemensS7Net.Write("DB100." + (index*66+6), (short) 0); |
| | | reset = false; |
| | | if (write4.IsSuccess && write5.IsSuccess && write6.IsSuccess){ |
| | | News.info("输送线命令下发[id:"+slave.getId()+"] >>>>>"+"["+"0,0,0"+"]"); |
| | | OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100."+(index*66), (short) 8); |
| | | Integer wrkNo1 = siemensS7Net.getByteTransform().TransInt32(result1.Content, 0); |
| | | short staNo1 = siemensS7Net.getByteTransform().TransInt16(result1.Content, 4); |
| | | short mk1 = siemensS7Net.getByteTransform().TransInt16(result1.Content, 6); |
| | | if (wrkNo1 != 0 || staNo1 !=0 || mk1 !=0){ |
| | | whileCount++; |
| | | News.info("复位失败,输送线命令下发[id:"+slave.getId()+"] >>>>>"+"["+"0,0,0"+"]"); |
| | | }else { |
| | | News.info("输送线复位完成"); |
| | | break; |
| | | } |
| | | |
| | | } |
| | | }else if (reset && mk == 0 ){ |
| | | OperateResult write7 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1); |
| | | News.info("回读1失败,输送线命令下发[id:"+slave.getId()+"] >>>>>"+"["+"1"+"]"); |
| | | Thread.sleep(100); |
| | | whileCount++; |
| | | }else { |
| | | whileCount++; |
| | | } |
| | | }while (whileCount <10); |
| | | } |
| | | }else { |
| | | log.error("输送命令下发失败"+JSON.toJSONString(staProtocol)); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | private boolean writeWrk(StaProtocol staProtocol,Integer count)throws InterruptedException { |
| | | |
| | | if (null == staProtocol) { |
| | | return false; |
| | | } |
| | | Integer oriWrkNo = staProtocol.getWorkNo(); |
| | | short oriStaNo = staProtocol.getStaNo(); |
| | | |
| | | ArrayList<Integer> staNos = getStaNo(); |
| | | int index = staNos.indexOf(staProtocol.getSiteId()); |
| | | |
| | | do { |
| | | log.info("输送递归次数:" + count); |
| | | OperateResult write1 = siemensS7Net.Write("DB100." + index*66, staProtocol.getWorkNo()); // 工作号 |
| | | Thread.sleep(100); |
| | | OperateResult write2 = siemensS7Net.Write("DB100." + (index*66+4), staProtocol.getStaNo()); // 目标站 |
| | | if(write1.IsSuccess && write2.IsSuccess){ |
| | | News.info("输送线命令下发[id:" + slave.getId() + "] >>>>>" + "[" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "]"); |
| | | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100."+(index*66), (short) 6); |
| | | Integer wrkNo = siemensS7Net.getByteTransform().TransInt32(result.Content, 0); |
| | | short staNo = siemensS7Net.getByteTransform().TransInt16(result.Content, 4); |
| | | if (!oriWrkNo.equals(wrkNo) || oriStaNo != staNo){ |
| | | if (count >= 5){ |
| | | log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), count); |
| | | return; |
| | | return false; |
| | | } |
| | | count++; |
| | | writeD(staProtocol,count); |
| | | } |
| | | int whileCount = 0; |
| | | OperateResult write3 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1); |
| | | if (write3.IsSuccess){ |
| | | Thread.sleep(200); |
| | | do { |
| | | OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100."+(index*66 +6), (short) 2); |
| | | short mk = siemensS7Net.getByteTransform().TransInt16(result2.Content, 0); |
| | | if (mk == 2){ |
| | | OperateResult write5 = siemensS7Net.Write("DB100." + index*66, 0); // 工作号 |
| | | OperateResult write6 = siemensS7Net.Write("DB100." + (index*66+4), (short) 0); // 目标站 |
| | | OperateResult write4 = siemensS7Net.Write("DB100." + (index*66+6), (short) 0); |
| | | if (write4.IsSuccess){ |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); |
| | | News.info("SiemensDevp"+" - 5"+" - 输送线命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol)); |
| | | break; |
| | | } |
| | | }else { |
| | | whileCount++; |
| | | } |
| | | }while (whileCount <5); |
| | | return true; |
| | | } |
| | | } |
| | | }while (count <=5); |
| | | |
| | | |
| | | |
| | | return true; |
| | | } |
| | | |
| | | // 更新入出库模式 |