| | |
| | | private SiemensS7Net siemensS7Net; |
| | | private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); |
| | | private short heartBeatVal = 1; |
| | | public Integer isCalled = 0; |
| | | public Integer isFinish = 0; |
| | | public ArrayList<Integer> weights = new ArrayList<>(); |
| | | public Integer weight = 0; |
| | | public ArrayList<Integer> halfs = new ArrayList<>(); |
| | | public Integer isHalf = 0; |
| | | |
| | | |
| | | public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ |
| | |
| | | } |
| | | |
| | | break; |
| | | // 写数据 ID+目标站 2106特供 |
| | | case 3: |
| | | switch (slave.getId()){ |
| | | case 2: |
| | | write2106((StaProtocol)task.getData());break; |
| | | } |
| | | |
| | | break; |
| | | case 4: |
| | | switch (slave.getId()){ |
| | | case 2: |
| | | writeIsCalled();break; |
| | | } |
| | | case 5: |
| | | switch (slave.getId()){ |
| | | case 2: |
| | | writeIsFinish();break; |
| | | } |
| | | |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | |
| | | staProtocol.setSiteId(siteId); |
| | | station.put(siteId, staProtocol); |
| | | } |
| | | staProtocol.setSiteId(siteId); |
| | | staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8)); // 工作号 |
| | | staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4 )); // 目标站 |
| | | } |
| | |
| | | //报警信息 |
| | | Thread.sleep(200); |
| | | OperateResultExOne<byte[]> result3 = null; |
| | | OperateResultExOne<byte[]> result37new = null; |
| | | result3 = siemensS7Net.Read("DB101.96.0", (short) (getErrorStaNo().size() * 4)); |
| | | result37new = siemensS7Net.Read("DB101.120", (short) 8); |
| | | if (result3.IsSuccess) { |
| | | for (int i = 0; i < getErrorStaNo().size(); i++) { |
| | | Integer siteId = getErrorStaNo().get(i); // 站点编号 |
| | |
| | | staProtocol.setBarcodeErr(status[6]); |
| | | } |
| | | |
| | | } |
| | | if (result37new.IsSuccess) { |
| | | StaProtocol staProtocol11 = station.get(3011); |
| | | StaProtocol staProtocol06 = station.get(3006); |
| | | short a11171 = siemensS7Net.getByteTransform().TransInt16(result37new.Content, 0); |
| | | short a11172 = siemensS7Net.getByteTransform().TransInt16(result37new.Content, 2); |
| | | |
| | | short a11173 = siemensS7Net.getByteTransform().TransInt16(result37new.Content, 4); |
| | | short a11174 = siemensS7Net.getByteTransform().TransInt16(result37new.Content, 6); |
| | | staProtocol11.setStaNoEnd(a11173); |
| | | staProtocol11.setBan(a11171==1); |
| | | staProtocol06.setStaNoEnd(a11174); |
| | | staProtocol06.setBan(a11172==1); |
| | | } |
| | | } |
| | | |
| | |
| | | private void read10() throws InterruptedException { |
| | | ArrayList<Integer> staNos = getStaNo(); |
| | | int staNoSize = staNos.size(); |
| | | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 10)); |
| | | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 12 + 78)); |
| | | if (result.IsSuccess) { |
| | | for (int i = 0; i < staNoSize; i++) { |
| | | Integer siteId = staNos.get(i); // 站点编号 |
| | |
| | | staProtocol.setSiteId(siteId); |
| | | station.put(siteId, staProtocol); |
| | | } |
| | | staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 10)); // 工作号 |
| | | staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*10 + 4 )); // 目标站 |
| | | staProtocol.setMatnr((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 10 + 6)); // 目标站 |
| | | staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 12)); // 工作号 |
| | | staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*12 + 4 )); // 目标站 |
| | | if (staProtocol.getSiteId() == 2106){ |
| | | staProtocol.setMatnr(siemensS7Net.getByteTransform().TransString(result.Content, 284,22,"UTF-8")); // 目标站 |
| | | } |
| | | // staProtocol.setMatnr(""); // 目标站 |
| | | |
| | | } |
| | | } |
| | | Thread.sleep(200); |
| | | OperateResultExOne<byte[]> result1 = null; |
| | | result1 = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 10)); |
| | | result1 = siemensS7Net.Read("DB101.10", (short) (getStaNo().size() * 12)); |
| | | if (result1.IsSuccess) { |
| | | for (int i = 0; i < staNoSize; i++) { |
| | | Integer siteId = staNos.get(i); // 站点编号 |
| | | boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*10+8, 2); |
| | | boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*12, 2); |
| | | StaProtocol staProtocol = station.get(siteId); |
| | | staProtocol.setAutoing(status[0]); // 自动 |
| | | staProtocol.setLoading(status[1]); // 有物 |
| | |
| | | } |
| | | } |
| | | |
| | | OperateResultExOne<byte[]> readBatch = siemensS7Net.Read("DB101.240", (short) 20); |
| | | if (readBatch.IsSuccess){ |
| | | String batch = siemensS7Net.getByteTransform().TransString(readBatch.Content, 0, 20, "UTF-8"); |
| | | for (int i = 0; i < 1; i++) { |
| | | StaProtocol staProtocol = station.get(2106); |
| | | staProtocol.setBatch(batch); |
| | | } |
| | | } |
| | | |
| | | // 空桶出库信号 |
| | | OperateResultExOne<byte[]> readCall = siemensS7Net.Read("DB102.0", (short) 8); |
| | | if (readCall.IsSuccess){ |
| | | int isNeed = siemensS7Net.getByteTransform().TransInt16(readCall.Content, 0); // IBC要桶信号 |
| | | int Finish = siemensS7Net.getByteTransform().TransInt16(readCall.Content, 2); // IBC灌装完成信号 |
| | | int weight1 = siemensS7Net.getByteTransform().TransInt16(readCall.Content, 4); // IBC灌装重里 |
| | | int isAHalf = siemensS7Net.getByteTransform().TransInt16(readCall.Content, 6); // IBC半桶标记 |
| | | isCalled = isNeed; |
| | | isFinish = Finish; |
| | | weight = weight1; |
| | | isHalf = isAHalf; |
| | | } |
| | | |
| | | // 完成罐装信号 |
| | | // OperateResultExOne<byte[]> finish = siemensS7Net.Read("DB105.240", (short) 4); |
| | | // if (finish.IsSuccess){ |
| | | // short amount = siemensS7Net.getByteTransform().TransInt16(finish.Content, 0); |
| | | //// isCalled = amount; |
| | | // } |
| | | |
| | | // if (isCalled == 1) { |
| | | // writeIsCalled(); |
| | | // } |
| | | |
| | | OperateResultExOne<byte[]> readWeight = siemensS7Net.Read("DB101.260", (short) 2); |
| | | if (readWeight.IsSuccess){ |
| | | Short weight = siemensS7Net.getByteTransform().TransInt16(readWeight.Content,0); |
| | | for (int i = 0; i < 1; i++) { |
| | | StaProtocol staProtocol = station.get(2102); |
| | | staProtocol.setWeight(weight); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // 条码扫描器 |
| | | if(slave.getId() == 2) { |
| | | Thread.sleep(200); |
| | | OperateResultExOne<byte[]> result2 = null; |
| | | result2 = siemensS7Net.Read("DB101.194.0", (short) (8)); |
| | | result2 = siemensS7Net.Read("DB101.232.0", (short) (8)); |
| | | if (result2.IsSuccess) { |
| | | for (int i = 0; i < 1; i++) { |
| | | String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); |
| | |
| | | staProtocol.setOutEnable(status[3]);// 可出 |
| | | staProtocol.setForce(status[4]); |
| | | staProtocol.setAmount(count); |
| | | staProtocol.setLow(true); |
| | | |
| | | |
| | | if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { |
| | |
| | | int staNoSize = staNos.size(); |
| | | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); |
| | | |
| | | result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*30)); |
| | | result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*82)); |
| | | if (result.IsSuccess) { |
| | | for (int i = 0; i < staNoSize; i++) { |
| | | Integer siteId = staNos.get(i); // 站点编号 |
| | | boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1); |
| | | short tongType = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2); |
| | | Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 4); |
| | | // String matnr = siemensS7Net.getByteTransform().TransString(result.Content, i * 4 + 4,20, "UTF-8"); |
| | | |
| | | short amount = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 8); |
| | | String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+10, 20, "UTF-8"); |
| | | short staEnd = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 30); |
| | | short ban = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 32); |
| | | Integer w1 = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 34); |
| | | String orderNo = siemensS7Net.getByteTransform().TransString(result.Content, i * 4 + 38,22, "UTF-8"); |
| | | String matnr = siemensS7Net.getByteTransform().TransString(result.Content, i * 4 + 60,22, "UTF-8"); |
| | | |
| | | |
| | | StaProtocol staProtocol = station.get(siteId); |
| | | if (null == staProtocol) { |
| | | staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(siteId); |
| | | station.put(siteId, staProtocol); |
| | | } |
| | | staProtocol.setSiteId(siteId); |
| | | staProtocol.setAutoing(status[0]); // 自动 |
| | | staProtocol.setLoading(status[1]); // 有物 |
| | | staProtocol.setInEnable(status[2]); // 可入 |
| | |
| | | staProtocol.setTongType(tongType); |
| | | staProtocol.setBatch(batch); |
| | | staProtocol.setAmount(amount); |
| | | staProtocol.setAnfme(Double.valueOf(amount)); |
| | | staProtocol.setAnfme2(Double.valueOf(amount)); |
| | | int i1 = w1 / 100; |
| | | staProtocol.setWeight1((double) i1); |
| | | // staProtocol.setWeight2(w2); |
| | | // staProtocol.setWeight3(w3); |
| | | // staProtocol.setWeight4(w4); |
| | | staProtocol.setStaNoEnd(staEnd); |
| | | staProtocol.setBan(ban == 1); |
| | | staProtocol.setLow(true); |
| | | |
| | | |
| | |
| | | int staNoSize = staNos.size(); |
| | | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); |
| | | |
| | | result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*28)); |
| | | result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*78)); |
| | | if (result.IsSuccess) { |
| | | for (int i = 0; i < staNoSize; i++) { |
| | | Integer siteId = staNos.get(i); // 站点编号 |
| | | boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1); |
| | | // short tongType = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2); |
| | | Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 2); |
| | | short amount = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 6); |
| | | String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+8, 20, "UTF-8"); |
| | | String batch = siemensS7Net.getByteTransform().TransString(result.Content,i * 4+ 8, 20, "UTF-8").trim(); |
| | | short ban = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 28); |
| | | Integer w1 = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 30); |
| | | String orderNo = siemensS7Net.getByteTransform().TransString(result.Content, i * 4 + 34,22, "UTF-8"); |
| | | String matnr = siemensS7Net.getByteTransform().TransString(result.Content, i * 4 + 56,22, "UTF-8").trim(); |
| | | |
| | | |
| | | StaProtocol staProtocol = station.get(siteId); |
| | | if (null == staProtocol) { |
| | | staProtocol = new StaProtocol(); |
| | | staProtocol.setSiteId(siteId); |
| | | station.put(siteId, staProtocol); |
| | | } |
| | | staProtocol.setSiteId(siteId); |
| | | staProtocol.setAutoing(status[0]); // 自动 |
| | | staProtocol.setLoading(status[1]); // 有物 |
| | | staProtocol.setInEnable(status[2]); // 可入 |
| | |
| | | staProtocol.setAmount(amount); |
| | | staProtocol.setBatch(batch); |
| | | staProtocol.setLow(true); |
| | | |
| | | int i1 = w1 / 100; |
| | | staProtocol.setWeight1((double) i1); |
| | | staProtocol.setBan(ban == 1); |
| | | |
| | | |
| | | if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { |
| | |
| | | } |
| | | ArrayList<Integer> staNos = getWriteStaNo(); |
| | | int index = staNos.indexOf(staProtocol.getSiteId()); |
| | | OperateResult write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo().intValue()); // 工作号 |
| | | Thread.sleep(500); |
| | | OperateResult write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo()); // 目标站 |
| | | OperateResult write = null; |
| | | OperateResult write1 = null; |
| | | //任务下发次数 |
| | | int writeCount = 0; |
| | | do { |
| | | write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo().intValue()); // 工作号 |
| | | Thread.sleep(200); |
| | | write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo().shortValue()); // 目标站 |
| | | if(write.IsSuccess && write1.IsSuccess){ |
| | | log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | break; |
| | | } |
| | | else { |
| | | writeCount++; |
| | | log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | } |
| | | }while (writeCount<5); |
| | | |
| | | if (!write.IsSuccess || !write1.IsSuccess) { |
| | | staProtocol = station.get(staProtocol.getSiteId()); |
| | |
| | | } |
| | | ArrayList<Integer> staNos = getWriteStaNo(); |
| | | int index = staNos.indexOf(staProtocol.getSiteId()); |
| | | OperateResult write = siemensS7Net.Write("DB100." + index*8, staProtocol.getWorkNo().intValue()); // 工作号 |
| | | OperateResult write1 = siemensS7Net.Write("DB100." + (index*8+4), staProtocol.getStaNo()); // 目标站 |
| | | OperateResult write2 = siemensS7Net.Write("DB100." + (index*8+6), staProtocol.getMatnr()); // 目标站 |
| | | |
| | | OperateResult write = null; |
| | | OperateResult write1 = null; |
| | | OperateResult write2 = null; |
| | | //任务下发次数 |
| | | int writeCount = 0; |
| | | do { |
| | | write = siemensS7Net.Write("DB100." + index*10, staProtocol.getWorkNo().intValue()); // 工作号 |
| | | Thread.sleep(100); |
| | | write1 = siemensS7Net.Write("DB100." + (index*10+4), staProtocol.getStaNo()); // 目标站 |
| | | Thread.sleep(100); |
| | | write2 = siemensS7Net.Write("DB100." + (index*10+6), staProtocol.getMatnr()); // 目标站 |
| | | |
| | | // write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo()); // 工作号 |
| | | |
| | | // write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo().shortValue()); // 目标站 |
| | | |
| | | // write2 = siemensS7Net.Write("DB100." + (index*10+6), staProtocol.getMatnr()); // 目标站 |
| | | if(write.IsSuccess && write1.IsSuccess && write2.IsSuccess){ |
| | | log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | break; |
| | | } |
| | | else { |
| | | writeCount++; |
| | | log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); |
| | | } |
| | | }while (writeCount<5); |
| | | |
| | | if (!write.IsSuccess || !write1.IsSuccess || !write2.IsSuccess) { |
| | | staProtocol = station.get(staProtocol.getSiteId()); |
| | |
| | | } |
| | | } |
| | | |
| | | private void writeIsCalled() throws InterruptedException { |
| | | OperateResult write = siemensS7Net.Write("DB102.0" , (short) 0); // 工作号 |
| | | } |
| | | |
| | | private void writeIsFinish() throws InterruptedException { |
| | | OperateResult finish = siemensS7Net.Write("DB102.2" , (short)0); // 工作号 |
| | | OperateResult half = siemensS7Net.Write("DB102.6" , (short)0); // 工作号 |
| | | } |
| | | |
| | | /** |
| | | * 写入 ID+目标站 =====> 单站点写入 |
| | | */ |
| | | private void write2106(StaProtocol staProtocol) throws InterruptedException { |
| | | |
| | | OperateResult write = siemensS7Net.Write("DB100.210", (short) 2); // 条码重复回退 |
| | | |
| | | if (!write.IsSuccess) { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); |
| | | log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); |
| | | } 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)); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 心跳 |
| | | */ |