From 8b084ee0bff281619fa07dbaf2d1bd5ad2180791 Mon Sep 17 00:00:00 2001 From: 18516761980 <4761516tqsxp> Date: 星期三, 08 六月 2022 10:55:23 +0800 Subject: [PATCH] # --- version/BarcodeThread2.java | 60 ++++++++ src/main/java/com/zy/core/thread/BarcodeThread.java | 125 ++--------------- src/main/java/com/zy/core/thread/SiemensDevpThread.java | 30 +++ src/main/resources/application.yml | 4 src/main/java/com/zy/core/ServerBootstrap.java | 2 version/BarcodeThread1.java | 150 +++++++++++++++++++++ 6 files changed, 259 insertions(+), 112 deletions(-) diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java index a1bb5dd..cad143d 100644 --- a/src/main/java/com/zy/core/ServerBootstrap.java +++ b/src/main/java/com/zy/core/ServerBootstrap.java @@ -92,7 +92,7 @@ log.info("鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼..................................................."); for (Slave barcode : slaveProperties.getBarcode()) { BarcodeThread barcodeThread = new BarcodeThread(barcode); - new Thread(barcodeThread).start(); +// new Thread(barcodeThread).start(); SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread); } // 鍒濆鍖朙ED绾跨▼ diff --git a/src/main/java/com/zy/core/thread/BarcodeThread.java b/src/main/java/com/zy/core/thread/BarcodeThread.java index d82420a..00ffb2a 100644 --- a/src/main/java/com/zy/core/thread/BarcodeThread.java +++ b/src/main/java/com/zy/core/thread/BarcodeThread.java @@ -9,13 +9,6 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.SocketAddress; -import java.net.SocketTimeoutException; import java.util.Date; /** @@ -27,122 +20,44 @@ public class BarcodeThread implements Runnable, ThreadHandler { private Slave slave; - private String barcode; - private Socket socket; - private DataOutputStream dataOutputStream; - private DataInputStream dataInputStream; + private StringBuffer barcode = new StringBuffer(); public BarcodeThread(Slave slave) { this.slave = slave; } - @Override - @SuppressWarnings("InfiniteLoopStatement") - public void run() { - connect(); - while (true) { - try { - byte[] read = read(8, 100); - if (null != read) { - String s = new String(read); - if (!Cools.isEmpty(s)) { - barcode = new String(read); - log.info("{}鍙锋潯鐮佸櫒锛屾绱㈡暟鎹細{}", slave.getId(), this.barcode); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F)); - jsonObject.put("barcode", barcode); - if (OutputQueue.BARCODE.size() >= 32) { - OutputQueue.BARCODE.poll(); - } - OutputQueue.BARCODE.offer(jsonObject); - } - } - Thread.sleep(100); - } catch (SocketTimeoutException ignore) { - } catch (Exception e) { -// e.printStackTrace(); + public String getBarcode() { + return barcode.toString(); + } + + public void setBarcode(String barcode) { + this.barcode.delete(0, this.barcode.length()); + this.barcode.append(barcode); + if(!Cools.isEmpty(barcode)) { + log.info("{}鍙锋潯鐮佸櫒锛屾绱㈡暟鎹細{}", slave.getId(), this.barcode); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F)); + jsonObject.put("barcode", barcode); + if (OutputQueue.BARCODE.size() >= 32) { + OutputQueue.BARCODE.poll(); } + OutputQueue.BARCODE.offer(jsonObject); } } @Override public boolean connect() { - try { - close(); //1.涓诲姩閲婃斁杩炴帴 //2.鏌愪簺鏈嶅姟鍣ㄥ鎸囧畾ip鏈夐摼璺暟闄愬埗 - socket = new Socket(); - //socket.setKeepAlive(true); - SocketAddress socketAddress = new InetSocketAddress(slave.getIp(), slave.getPort()); - socket.connect(socketAddress, 1000); //鏌愪簺鏈嶅姟鍣╬ing寤惰繜楂樻椂瑕佸鍔�,鍚﹀垯浼氭姤閿檆onnect timeout - dataOutputStream = new DataOutputStream(socket.getOutputStream()); - dataInputStream = new DataInputStream(socket.getInputStream()); -// log.info("鏉$爜鎵弿浠繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); - } catch (Exception e) { - socket = null; - log.error("鏉$爜鎵弿浠繛鎺ュけ璐ワ紒锛侊紒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); - return false; - } - return true; + return false; } @Override public void close() { - try { - if (null != dataOutputStream) { - dataOutputStream.close(); - } - if (null != dataInputStream) { - dataInputStream.close(); - } -// if (null != socket && !socket.isClosed()) { -// socket.close(); -// } - if (null != socket){ - socket.close(); - } - socket = null; - } catch (IOException e) { - log.error("SocketClient close Exception:" + e.getMessage()); - } + } - public void write(byte[] msg, int len) throws IOException { - if (null != dataInputStream) - { - dataOutputStream.write(msg, 0, len); - dataOutputStream.flush(); - } - } + @Override + public void run() { - public byte[] read(int bufferSize, int timeOut) throws IOException { -// if (socket == null) { -// connect(); -// } - connect(); - socket.setSoTimeout(timeOut); - byte[] bytes = new byte[bufferSize]; - int len = dataInputStream.read(bytes); - byte[] tempBytes = null; - if (len > 0) { - tempBytes = new byte[len]; - System.arraycopy(bytes, 0, tempBytes, 0, len); - } - return tempBytes; - } - - public boolean valid() throws Exception { - if (null == socket || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown()) { - if (dataInputStream != null) { - dataInputStream.close(); - } - if (dataOutputStream != null) { - dataOutputStream.close(); - } - if (socket != null) { - socket.close(); - } - return false; - } - return true; } } diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index 777776e..f6387cb 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -5,19 +5,25 @@ import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.alibaba.fastjson.JSON; +import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SpringUtils; +import com.google.common.base.Utf8; +import com.sun.xml.internal.bind.v2.runtime.output.Encoded; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WrkMastService; import com.zy.core.DevpThread; +import com.zy.core.Slave; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; +import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.IoModeType; import com.zy.core.enums.SlaveType; import com.zy.core.model.DevpSlave; import com.zy.core.model.Task; import com.zy.core.model.protocol.StaProtocol; +import com.zy.core.properties.SlaveProperties; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -52,6 +58,7 @@ * 182绔欏爢鍨涙満鎵ц涓嚭搴撴暟閲� */ public int PRE_COUNT=0; + private SlaveProperties slaveProperties; public SiemensDevpThread(DevpSlave slave) { this.slave = slave; @@ -115,9 +122,10 @@ private void read() throws InterruptedException { // // 鏇存柊鍏ュ嚭搴撴ā寮� // updateIoMode(); - OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 144); + int staNoSize = staNos.size(); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNoSize*4)); if (result.IsSuccess) { - for (int i = 0; i < 36; i++) { + for (int i = 0; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { @@ -145,9 +153,9 @@ // } // } Thread.sleep(200); - OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB150.0", (short) 72); + OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB150.0", (short) (staNoSize*2)); if (result1.IsSuccess) { - for (int i = 0; i < 36; i++) { + for (int i = 0; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*2, 1); StaProtocol staProtocol = station.get(siteId); @@ -166,6 +174,20 @@ } } + Thread.sleep(200); + int barcodeSize = slaveProperties.getBarcode().size(); + OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.190",(short)(barcodeSize*8)); + if (result2.IsSuccess) { + for (int i = 0; i < barcodeSize; i++) { + String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8"); + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); + if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { + barcodeThread.setBarcode(barcode); + } + } + + } + // OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0"); // if (result2.IsSuccess) { // this.ioMode = IoModeType.get(result2.Content); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 239c8dc..eb77c87 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -128,11 +128,11 @@ slot: 0 # 鍏ュ簱鍙�1 inSta[0]: - staNo: 103 + staNo: 104 barcode: ${wcs-slave.barcode[0].id} # 绌烘澘鍏ュ簱鍙�1 emptyInSta[0]: - staNo: 103 + staNo: 104 # 鍑哄簱鍙�1 outSta[0]: staNo: 110 diff --git a/version/BarcodeThread1.java b/version/BarcodeThread1.java new file mode 100644 index 0000000..38ce936 --- /dev/null +++ b/version/BarcodeThread1.java @@ -0,0 +1,150 @@ +package com.zy.core.thread; + +import com.alibaba.fastjson.JSONObject; +import com.core.common.Cools; +import com.core.common.DateUtils; +import com.zy.core.Slave; +import com.zy.core.ThreadHandler; +import com.zy.core.cache.OutputQueue; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.SocketTimeoutException; +import java.util.Date; + +/** + * 鏉$爜鎵弿浠嚎绋� + * Created by vincent on 2020/8/4 + */ +@Data +@Slf4j +public class BarcodeThread implements Runnable, ThreadHandler { + + private Slave slave; + private String barcode; + private Socket socket; + private DataOutputStream dataOutputStream; + private DataInputStream dataInputStream; + + public BarcodeThread(Slave slave) { + this.slave = slave; + } + + @Override + @SuppressWarnings("InfiniteLoopStatement") + public void run() { + connect(); + while (true) { + try { + byte[] read = read(8, 200); + if (null != read) { + String s = new String(read); + if (!Cools.isEmpty(s)) { + barcode = new String(read); + log.info("{}鍙锋潯鐮佸櫒锛屾绱㈡暟鎹細{}", slave.getId(), this.barcode); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F)); + jsonObject.put("barcode", barcode); + if (OutputQueue.BARCODE.size() >= 32) { + OutputQueue.BARCODE.poll(); + } + OutputQueue.BARCODE.offer(jsonObject); + } + } + Thread.sleep(50); + } catch (SocketTimeoutException ignore) { + } catch (Exception e) { +// e.printStackTrace(); + } + } + } + + @Override + public boolean connect() { + try { + close(); //1.涓诲姩閲婃斁杩炴帴 //2.鏌愪簺鏈嶅姟鍣ㄥ鎸囧畾ip鏈夐摼璺暟闄愬埗 + socket = new Socket(); + //socket.setKeepAlive(true); + SocketAddress socketAddress = new InetSocketAddress(slave.getIp(), slave.getPort()); + socket.connect(socketAddress, 1000); //鏌愪簺鏈嶅姟鍣╬ing寤惰繜楂樻椂瑕佸鍔�,鍚﹀垯浼氭姤閿檆onnect timeout + dataOutputStream = new DataOutputStream(socket.getOutputStream()); + dataInputStream = new DataInputStream(socket.getInputStream()); +// log.info("鏉$爜鎵弿浠繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } catch (Exception e) { + socket = null; + log.error("鏉$爜鎵弿浠繛鎺ュけ璐ワ紒锛侊紒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + return false; + } + return true; + } + + @Override + public void close() { + try { + if (null != dataOutputStream) { + dataOutputStream.close(); + } + if (null != dataInputStream) { + dataInputStream.close(); + } +// if (null != socket && !socket.isClosed()) { +// socket.close(); +// } + if (null != socket){ + socket.close(); + } + socket = null; + } catch (IOException e) { + log.error("SocketClient close Exception:" + e.getMessage()); + } + } + + public void write(byte[] msg, int len) throws IOException { + if (null != dataInputStream) + { + dataOutputStream.write(msg, 0, len); + dataOutputStream.flush(); + } + } + + public byte[] read(int bufferSize, int timeOut) throws IOException { + if (socket == null || !socket.isConnected() || socket.isClosed()) { + connect(); + } +// connect(); + socket.setSoTimeout(timeOut); + byte[] bytes = new byte[bufferSize]; + int len = dataInputStream.read(bytes); + byte[] tempBytes = null; + if (len > 0) { + tempBytes = new byte[len]; + System.arraycopy(bytes, 0, tempBytes, 0, len); + } else { + connect(); + } + return tempBytes; + } + + public boolean valid() throws Exception { + if (null == socket || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown()) { + if (dataInputStream != null) { + dataInputStream.close(); + } + if (dataOutputStream != null) { + dataOutputStream.close(); + } + if (socket != null) { + socket.close(); + } + return false; + } + return true; + } + +} diff --git a/version/BarcodeThread2.java b/version/BarcodeThread2.java new file mode 100644 index 0000000..3f2fb52 --- /dev/null +++ b/version/BarcodeThread2.java @@ -0,0 +1,60 @@ +package com.zy.core.thread; + +import com.alibaba.fastjson.JSONObject; +import com.core.common.DateUtils; +import com.zy.core.Slave; +import com.zy.core.ThreadHandler; +import com.zy.core.cache.OutputQueue; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; + +/** + * 鏉$爜鎵弿浠嚎绋� + * Created by vincent on 2020/8/4 + */ +@Data +@Slf4j +public class BarcodeThread implements Runnable, ThreadHandler { + + private Slave slave; + private StringBuffer barcode = new StringBuffer(); + + public BarcodeThread(Slave slave) { + this.slave = slave; + } + + public String getBarcode() { + return barcode.toString(); + } + + public void setBarcode(String barcode) { + this.barcode.delete(0, this.barcode.length()); + this.barcode.append(barcode); + log.info("{}鍙锋潯鐮佸櫒锛屾绱㈡暟鎹細{}", slave.getId(), this.barcode); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F)); + jsonObject.put("barcode", barcode); + if (OutputQueue.BARCODE.size() >= 32) { + OutputQueue.BARCODE.poll(); + } + OutputQueue.BARCODE.offer(jsonObject); + } + + @Override + public boolean connect() { + return false; + } + + @Override + public void close() { + + } + + @Override + public void run() { + + } + +} -- Gitblit v1.9.1