src/main/java/com/zy/core/ServerBootstrap.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/BarcodeThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
version/BarcodeThread1.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
version/BarcodeThread2.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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); } // 初始化LED线程 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); //某些服务器ping延迟高时要增加,否则会报错connect 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; } } 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); 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 version/BarcodeThread1.java
New file @@ -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); //某些服务器ping延迟高时要增加,否则会报错connect 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; } } version/BarcodeThread2.java
New file @@ -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() { } }