src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/ServerBootstrap.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/DevpSlave.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 | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -101,10 +101,27 @@ for (DevpSlave.Sta inSta : devp.getInSta()) { // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); if (barcodeThread == null) { continue; } String barcode = barcodeThread.getBarcode(); //101站有3个扫码器,当0扫码器没有数据时,获取9、10两个扫码器数据 if(inSta.getStaNo().equals(101) && !Cools.isEmpty(barcode)){ BarcodeThread barcodeThread1 = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode1()); if (barcodeThread1 != null) { barcode = barcodeThread1.getBarcode(); } if(!Cools.isEmpty(barcode)) { BarcodeThread barcodeThread2 = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode2()); if (barcodeThread2 != null) { barcode = barcodeThread2.getBarcode(); } } } if (!Cools.isEmpty(barcode)) { log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { 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/model/DevpSlave.java
@@ -34,6 +34,10 @@ private Integer barcode; private Integer barcode1; private Integer barcode2; } } src/main/java/com/zy/core/thread/BarcodeThread.java
@@ -9,6 +9,13 @@ 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; /** @@ -20,20 +27,26 @@ public class BarcodeThread implements Runnable, ThreadHandler { private Slave slave; private StringBuffer barcode = new StringBuffer(); private String barcode; private Socket socket; private DataOutputStream dataOutputStream; private DataInputStream dataInputStream; 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); if(!Cools.isEmpty(barcode)) { @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)); @@ -44,20 +57,94 @@ 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()); } } @Override public void run() { 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; } } src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -204,18 +204,18 @@ } //条码扫描器 Thread.sleep(200); OperateResultExOne<byte[]> result2 = null; result2 = siemensS7Net.Read("DB100.200",(short)(barcodeSize*16)); if (result2.IsSuccess) { for (int i = 0; i < barcodeSize; i++) { String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*16,8, "UTF-8"); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, slave.getId() == 1 ? i + 1 : i + 3); if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { barcodeThread.setBarcode(barcode); } } } //Thread.sleep(200); //OperateResultExOne<byte[]> result2 = null; //result2 = siemensS7Net.Read("DB100.200",(short)(barcodeSize*16)); //if (result2.IsSuccess) { // for (int i = 0; i < barcodeSize; i++) { // String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*16,8, "UTF-8"); // BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, slave.getId() == 1 ? i + 1 : i + 3); // if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { // barcodeThread.setBarcode(barcode); // } // } //} // //RGV小车 // Thread.sleep(200); src/main/resources/application.yml
@@ -188,6 +188,8 @@ inSta[0]: staNo: 101 barcode: ${wcs-slave.barcode[0].id} barcode1: ${wcs-slave.barcode[8].id} barcode2: ${wcs-slave.barcode[9].id} # 入库口2 inSta[1]: staNo: 111 @@ -345,6 +347,17 @@ id: 8 ip: 10.10.10.59 port: 51236 # 条码扫描仪9 barcode[8]: id: 8 ip: 10.10.10.59 port: 51236 # 条码扫描仪10 barcode[9]: id: 8 ip: 10.10.10.59 port: 51236 # LED1 led[0]: id: 1