#
18516761980
2022-07-30 9efa9a5bc1c36a7061a909ff9d315b9e616876ef
#
7个文件已修改
271 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/ServerBootstrap.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/netty/handle/PackageServerHandler.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/netty/handle/ProtocolDecoder.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/properties/SlaveProperties.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SocketThread.java 200 ●●●●● 补丁 | 查看 | 原始文档 | 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();
        }
    }
}