自动化立体仓库 - WCS系统
#
luxiaotao1123
2020-08-13 97283d17c312d0e6aca7946bc060015c17349a57
src/main/java/com/zy/core/thread/DevpThread.java
@@ -1,14 +1,21 @@
package com.zy.core.thread;
import com.zy.common.HslCommunication.Core.Types.OperateResult;
import com.zy.common.HslCommunication.Profinet.Melsec.MelsecMcNet;
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.zy.core.Slave;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * 输送线线程
@@ -19,7 +26,8 @@
public class DevpThread implements Runnable, ThreadHandler {
    private Slave slave;
    private MelsecMcNet melsecMcNet;
    private SiemensS7Net siemensS7Net;
    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
    public DevpThread(Slave slave) {
        this.slave = slave;
@@ -31,9 +39,24 @@
    public void run() {
        while (true) {
            try {
                int step = 1;
                Task task = MessageQueue.poll(SlaveType.Devp, slave.getId());
                if (task != null) {
                    System.out.println("任务"+task.getId());
                    step = task.getStep();
                }
                switch (step) {
                    // 读数据
                    case 1:
                        read();   // 读取状态
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                    default:
                        break;
                }
                Thread.sleep(3000);
            } catch (Exception e) {
@@ -45,15 +68,74 @@
    @Override
    public boolean connect() {
        melsecMcNet = new MelsecMcNet(slave.getIp(), slave.getPort());
        OperateResult operateResult = melsecMcNet.ConnectServer();
        if (operateResult.IsSuccess) {
        boolean result = false;
        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
        siemensS7Net.setRack((byte) 0);
        siemensS7Net.setSlot((byte) 1);
        OperateResult connect = siemensS7Net.ConnectServer();
        if(connect.IsSuccess){
            result = true;
            log.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            return true;
        } else {
            log.info("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            return false;
        }
        siemensS7Net.ConnectClose();
        return result;
    }
    public static void main(String[] args) {
        Slave slave = new Slave();
        slave.setIp("192.168.2.125");
        DevpThread devpThread = new DevpThread(slave);
        boolean connect = devpThread.connect();
        System.out.println(connect);
        devpThread.read();
        // 写
        StaProtocol staProtocol = devpThread.getStation().get(1);
        staProtocol.setWorkNo((short) 666);
        devpThread.write(staProtocol);
        // 读
        devpThread.read();
        System.out.println(JSON.toJSONString(devpThread.station));
    }
    /**
     * 读取状态
     */
    private void read(){
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 40);
        for (int i = 1; i <= 7; i++) {
            StaProtocol staProtocol = station.get(i);
            if (null == staProtocol) {
                staProtocol = new StaProtocol();
                staProtocol.setSiteId(i);
                station.put(i, staProtocol);
            }
            System.out.println(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2));
            staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2));
            staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2+20));
//            staProtocol.setAutoing(siemensS7Net.getByteTransform().TransBool());
        }
        // todo
//        OperateResultExOne<Short> shortOperateResultExOne = siemensS7Net.ReadInt16("DB100.0");
//        System.out.println(shortOperateResultExOne.Content);
    }
    private void write(StaProtocol staProtocol){
        if (null == staProtocol) {
            return;
        }
        OperateResult write = siemensS7Net.Write("DB100." + (staProtocol.getSiteId() - 1) * 2, staProtocol.getWorkNo());
        if (write.IsSuccess) {
            System.out.println("写入成功");
        } else {
            System.out.println("写入失败");
        }
    }
    @Override