|  |  |  | 
|---|
|  |  |  | import com.zy.core.News; | 
|---|
|  |  |  | import com.zy.core.cache.MessageQueue; | 
|---|
|  |  |  | import com.zy.core.cache.OutputQueue; | 
|---|
|  |  |  | import com.zy.core.enums.IoModeType; | 
|---|
|  |  |  | import com.zy.core.enums.SlaveType; | 
|---|
|  |  |  | import com.zy.core.model.DevpSlave; | 
|---|
|  |  |  | import com.zy.core.model.Task; | 
|---|
|  |  |  | 
|---|
|  |  |  | private DevpSlave slave; | 
|---|
|  |  |  | private SiemensS7Net siemensS7Net; | 
|---|
|  |  |  | private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public IoModeType ioModeOf2_5 = IoModeType.PAKIN_MODE; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private short heartBeatVal = 1; | 
|---|
|  |  |  | private int barcodeSize = 10; | 
|---|
|  |  |  | 
|---|
|  |  |  | * 读取状态 ====> 整块plc | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void read() throws InterruptedException { | 
|---|
|  |  |  | // 更新入出库模式 | 
|---|
|  |  |  | updateIoMode(); | 
|---|
|  |  |  | int staNoSize = staNos2.size(); | 
|---|
|  |  |  | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB82.14", (short) (staNoSize * 26)); | 
|---|
|  |  |  | if (result.IsSuccess) { | 
|---|
|  |  |  | 
|---|
|  |  |  | staProtocol.setAutoing(status[0]);  // 自动 | 
|---|
|  |  |  | staProtocol.setIdle(status[1]); //空闲 | 
|---|
|  |  |  | staProtocol.setLoading(status[2]);  // 有物 | 
|---|
|  |  |  | staProtocol.setInEnable(status[3]); // 可入 | 
|---|
|  |  |  | staProtocol.setOutEnable(status[4]);// 可出 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setBackErr(status[5]); | 
|---|
|  |  |  | staProtocol.setLeftErr(status[6]); | 
|---|
|  |  |  | 
|---|
|  |  |  | staProtocol.setWeightErr(status[9]); | 
|---|
|  |  |  | staProtocol.setLow(status[10]); | 
|---|
|  |  |  | staProtocol.setHigh(status[11]); | 
|---|
|  |  |  | staProtocol.setInEnable(status[13]); // 可入 | 
|---|
|  |  |  | staProtocol.setOutEnable(status[14]);// 可出 | 
|---|
|  |  |  | //                staProtocol.setInEnable(status[13]); // 可入 | 
|---|
|  |  |  | //                staProtocol.setOutEnable(status[14]);// 可出 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 2));     // 工作号 | 
|---|
|  |  |  | 
|---|
|  |  |  | BasDevp sqlModel = staProtocol.toSqlModel(); | 
|---|
|  |  |  | stations.add(sqlModel); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //用于写入sql | 
|---|
|  |  |  | //暂时写入数据库 | 
|---|
|  |  |  | BasDevp basDevp = basConveyorStaService.selectById(sta); | 
|---|
|  |  |  | if (basDevp != null) { | 
|---|
|  |  |  | if (basDevp == null) { | 
|---|
|  |  |  | basConveyorStaService.insert(sqlModel); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | index += 1; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | short[] array = new short[2]; | 
|---|
|  |  |  | array[0] = staProtocol.getWorkNo(); | 
|---|
|  |  |  | array[1] = staProtocol.getStaNo(); | 
|---|
|  |  |  | array[0] = staProtocol.getStaNo(); | 
|---|
|  |  |  | array[1] = staProtocol.getWorkNo(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String staNoAddress = "DB83." + (index * 8 + 4); | 
|---|
|  |  |  | String workNoAddress = "DB83." + (index * 8 + 6); | 
|---|
|  |  |  | OperateResult write1 = null;    // 工作号 | 
|---|
|  |  |  | OperateResult write2 = null;     // 目标站 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //任务下发次数 | 
|---|
|  |  |  | int writeCount = 0; | 
|---|
|  |  |  | do { | 
|---|
|  |  |  | write1 = siemensS7Net.Write(workNoAddress, array[0]);    // 工作号 | 
|---|
|  |  |  | write2 = siemensS7Net.Write(staNoAddress, array[1]); | 
|---|
|  |  |  | if ((write1.IsSuccess && write2.IsSuccess)) { | 
|---|
|  |  |  | log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},{},写入次数={}", staProtocol.getSiteId(), JSON.toJSON(staProtocol.getWorkNo()), JSON.toJSON(staProtocol.getStaNo()), writeCount); | 
|---|
|  |  |  | //                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB82.14", (short) (staNos2.indexOf(siteId) * 26)); | 
|---|
|  |  |  | //                //OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8); | 
|---|
|  |  |  | //                if (readResult.IsSuccess) { | 
|---|
|  |  |  | //                    int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);     // 工作号 | 
|---|
|  |  |  | //                    int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);   // 目标站 | 
|---|
|  |  |  | //                    // int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); | 
|---|
|  |  |  | //                    //int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); | 
|---|
|  |  |  | //                    if (workNo == workNo2 && staNo == staNo2) { | 
|---|
|  |  |  | //                        //任务命令写入成功 | 
|---|
|  |  |  | //                        log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); | 
|---|
|  |  |  | //                        return true; | 
|---|
|  |  |  | //                    } else {//返回结果是成功了,但是真实值不相同 | 
|---|
|  |  |  | //                        writeCount++; | 
|---|
|  |  |  | //                        log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } else { | 
|---|
|  |  |  | //                    writeCount++; | 
|---|
|  |  |  | //                    log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | writeCount++; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } while (writeCount < 5); | 
|---|
|  |  |  | //        StaProtocol staProtocol = station.get(siteId); | 
|---|
|  |  |  | //        if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { | 
|---|
|  |  |  | //            staProtocol.setPakMk(true); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(array))); | 
|---|
|  |  |  | log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(array)); | 
|---|
|  |  |  | OperateResult write1 = siemensS7Net.Write(staNoAddress, array); | 
|---|
|  |  |  | if (!write1.IsSuccess) { | 
|---|
|  |  |  | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(array))); | 
|---|
|  |  |  | log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(array)); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据成功。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(array))); | 
|---|
|  |  |  | log.info("写入输送线站点数据成功。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(array)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新入出库模式 | 
|---|
|  |  |  | private void updateIoMode() throws InterruptedException { | 
|---|
|  |  |  | if (this.ioModeOf2_5 != null && (this.ioModeOf2_5.id == 0 || this.ioModeOf2_5.id == 1)) { | 
|---|
|  |  |  | if (!siemensS7Net.Write("DB83.80", this.ioModeOf2_5.id).IsSuccess) { | 
|---|
|  |  |  | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线2.5F入出库模式失败", this.ioModeOf2_5)); | 
|---|
|  |  |  | log.error("【{0}】写入输送线2.5F入出库模式失败。输送线plc编号={}", this.ioModeOf2_5); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (station.get(1031) != null) { | 
|---|
|  |  |  | station.get(1031).setOutInModel(this.ioModeOf2_5.id); | 
|---|
|  |  |  | station.get(1032).setOutInModel(this.ioModeOf2_5.id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|