src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/ServerBootstrap.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/netty/handle/PackageServerHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/netty/handle/ProtocolDecoder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/properties/SlaveProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SocketThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1500,7 +1500,7 @@ } } // 获取led线程 LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId()); LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); // led显示默认内容 if (reset && !ledThread.isLedMk()) { ledThread.setLedMk(true); src/main/java/com/zy/core/MainProcess.java
@@ -5,11 +5,9 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PreDestroy; import java.util.ArrayList; /** * WCS主流程 @@ -63,9 +61,9 @@ // 入库 ===>> 空栈板初始化入库,叉车入库站放货 mainService.storeEmptyPlt(); // 出库 ===>> 工作档信息写入led显示器 mainService.ledExecute(); // mainService.ledExecute(); // 其他 ===>> LED显示器复位,显示默认信息 mainService.ledReset(); // mainService.ledReset(); mainService.outOfDevp(); src/main/java/com/zy/core/ServerBootstrap.java
@@ -5,9 +5,12 @@ import com.zy.core.enums.SlaveType; import com.zy.core.model.CrnSlave; import com.zy.core.model.DevpSlave; import com.zy.core.model.LedSlave; import com.zy.core.model.SocketSlave; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.*; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.SiemensCrnThread; import com.zy.core.thread.SiemensDevpThread; import com.zy.core.thread.SocketThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -71,6 +74,10 @@ for (Slave car : slaveProperties.getCar()) { MessageQueue.init(SlaveType.Car, car); } // 初始化socket mq for (Slave socket : slaveProperties.getSocket()) { MessageQueue.init(SlaveType.Socket, socket); } } private void initThread(){ @@ -92,16 +99,24 @@ 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线程 log.info("初始化LED线程..................................................."); for (LedSlave led : slaveProperties.getLed()) { LedThread ledThread = new LedThread(led); new Thread(ledThread).start(); SlaveConnection.put(SlaveType.Led, led.getId(), ledThread); // 初始化条码扫描仪线程 log.info("初始化Socket线程..................................................."); for (SocketSlave socket : slaveProperties.getSocket()) { SocketThread socketThread = new SocketThread(socket); new Thread(socketThread).start(); SlaveConnection.put(SlaveType.Socket, socket.getId(), socketThread); } // // 初始化LED线程 // log.info("初始化LED线程..................................................."); // for (LedSlave led : slaveProperties.getLed()) { // LedThread ledThread = new LedThread(led); // new Thread(ledThread).start(); // SlaveConnection.put(SlaveType.Led, led.getId(), ledThread); // } // 初始化磅秤线程 // log.info("初始化磅秤线程..................................................."); // for (Slave scale : slaveProperties.getScale()) { src/main/java/com/zy/core/netty/handle/PackageServerHandler.java
@@ -1,15 +1,10 @@ package com.zy.core.netty.handle; import com.core.common.Cools; import com.zy.core.Slave; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.netty.AbstractInboundHandler; import com.zy.core.netty.cache.ChannelCache; import com.zy.core.netty.domain.ChPackage; import com.zy.core.netty.properties.TcpProperties; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; @@ -33,6 +28,9 @@ @Override protected boolean channelRead0(ChannelHandlerContext ctx, ChPackage pac) { byte[] bytes = pac.getBytes(); System.out.println("客户端断开===>>" + new String(bytes, 0, bytes.length)); // log.info("读码器【IP:{}】 上行数据 ===>> {}", pac.getIp(), pac.getAscii()); // //扫码上传数据格式必须2个#开头,如:##12345678 // String msg = pac.getAscii().replaceAll("#", ""); src/main/java/com/zy/core/netty/handle/ProtocolDecoder.java
@@ -23,18 +23,12 @@ this.snowflakeIdWorker = snowflakeIdWorker; } @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> list) throws Exception { int startMark = indexOfStartMark(in); if (startMark == -1){ return; } // 去除无用前缀报文 if (startMark != 0){ in.readerIndex(startMark); in.discardReadBytes(); } byte[] bytes = new byte[in.readableBytes()]; in.readBytes(bytes); // 生成和初始化消息包装类 String ip = ((InetSocketAddress) ctx.channel().remoteAddress()).getAddress().getHostAddress(); @@ -42,8 +36,12 @@ pac.setSourceBuff(in); pac.setBytes(bytes); list.add(pac); // 解析 list.add(analyzeProtocol(pac)); // list.add(analyzeProtocol(pac)); } public ChPackage analyzeProtocol(ChPackage pac){ src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -4,6 +4,7 @@ import com.zy.core.model.CrnSlave; import com.zy.core.model.DevpSlave; import com.zy.core.model.LedSlave; import com.zy.core.model.SocketSlave; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @@ -42,4 +43,5 @@ private List<Slave> car = new ArrayList<>(); private List<SocketSlave> socket = new ArrayList<>(); } src/main/java/com/zy/core/thread/SocketThread.java
@@ -1,43 +1,31 @@ package com.zy.core.thread; import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.alibaba.fastjson.JSON; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; import com.zy.core.enums.SlaveType; import com.zy.core.model.SocketSlave; import com.zy.core.model.Task; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; import java.util.Date; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /** * shuttle 穿梭车线程 * Created by vincent on 2020/8/4 * 不能有 槽号 和 机架号 * 消防socket线程 * Created on 2022/7/30 */ @Data @Slf4j public class SocketThread implements Runnable, ThreadHandler { private SiemensS7Net siemensS7Net; private SocketSlave slave; private SteProtocol steProtocol; private short heartBeatVal = 1; private boolean resetFlag = false; // private String barcode; // private Socket socket; // private DataOutputStream dataOutputStream; // private DataInputStream dataInputStream; private Integer lastRow; private Integer lastBay; private Integer lastLev; private byte[] byteData = new byte[1024]; public SocketThread(SocketSlave slave) { this.slave = slave; @@ -46,75 +34,147 @@ @Override @SuppressWarnings("InfiniteLoopStatement") public void run() { this.connect(); // this.connect(); while (true) { try { int step = 1; Task task = MessageQueue.poll(SlaveType.Socket, slave.getId()); if (task != null) { step = task.getStep(); } switch (step) { // 读数据 case 1: // readStatus(); break; // 写入数据 case 2: // write((StaProtocol)task.getData()); break; default: break; } // 心跳 // heartbeat(); Thread.sleep(500); // 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(); // e.printStackTrace(); } } } public byte[] getByteData() { return byteData; } public void setByteData(byte[] byteData) { this.byteData = byteData; } @Override public boolean connect() { boolean result = false; return result; } /** * 读取状态 */ private void readStatus(){ } /** * 写入数据 */ private boolean write(){ 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()); // } } /** * 心跳 */ private void heartbeat(){ // 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; // } /******************************************************************************************/ /**************************************** 测试专用 *****************************************/ /*****************************************************************************************/ public static void main(String[] args) throws InterruptedException { try{ ServerSocket socket = new ServerSocket(8802); System.out.println("套接字创建成功,等待连接..."); while (true){ final Socket con = socket.accept(); InetAddress addr = con.getInetAddress(); System.out.println("客户端接入===>>" + addr.getHostAddress() + ":" + con.getPort()); new Thread((new Runnable() { @Override public void run() { InputStream in; while (true){ try{ in = con.getInputStream(); int len = 0; byte[] data = new byte[128]; len = in.read(data); if(len>0) { System.out.println("读到消息===>>" + new String(data, 0, len)); } else { // System.out.println("客户端断开===>>"); } }catch (IOException e){ e.printStackTrace(); } } } })).start(); } }catch (IOException e){ e.printStackTrace(); } } }