自动化立体仓库 - WCS系统
#
luxiaotao1123
2020-08-19 bc0a69ea4a4fb49dadc02bf548d8f3fd3f60d18a
src/main/java/com/zy/core/thread/DevpThread.java
@@ -14,7 +14,6 @@
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -32,12 +31,12 @@
    public DevpThread(Slave slave) {
        this.slave = slave;
        connect();
    }
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        connect();
        while (true) {
            try {
                int step = 1;
@@ -57,7 +56,10 @@
                    default:
                        break;
                }
                Thread.sleep(3000);
                // 心跳
                heartbeat();
                Thread.sleep(400);
            } catch (Exception e) {
                e.printStackTrace();
            }
@@ -76,14 +78,14 @@
            result = true;
            log.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        } else {
            log.info("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            log.error("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        }
        siemensS7Net.ConnectClose();
        return result;
    }
    /**
     * 读取状态
     * 读取状态 ====> 整块plc
     */
    private void read(){
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 40);
@@ -94,30 +96,31 @@
                staProtocol.setSiteId(i);
                station.put(i, staProtocol);
            }
            System.out.println("------");
            System.out.println("站点编号:" + i);
            System.out.println("工作号:" + siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2));
            System.out.println("目标站:" + siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2+20));
            staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2));
            staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2+20));
            staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2));     // 工作号
            staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2+20));   // 目标站
        }
        System.out.println("===> 状态");
        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.40", (short) 10);
        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.40", (short) 8);
        if (result1.IsSuccess) {
//            System.out.println("状态:"+Arrays.toString(result1.Content));
            System.out.println(Arrays.toString(siemensS7Net.getByteTransform().TransBool(result1.Content, 0, 1)));
            for (int i = 1; i <= 8; i++) {
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i-1, 1);
                StaProtocol staProtocol = station.get(i);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
                staProtocol.setOutEnable(status[3]);// 可出
                staProtocol.setEmptyMk(status[4]);  // 空板信号
            }
        }
    }
    /**
     * 写入
     * 写入 =====> 单站点写入
     */
    private void write(StaProtocol staProtocol){
        if (null == staProtocol) {
            return;
        }
        OperateResult write = siemensS7Net.Write("DB100." + (staProtocol.getSiteId() - 1) * 2, staProtocol.getWorkNo());    // 工作号
        System.out.println(((staProtocol.getSiteId() - 1) * 2) + 20);
        OperateResult write1 = siemensS7Net.Write("DB100." + ((staProtocol.getSiteId() - 1) * 2 + 20), staProtocol.getStaNo());    // 目标站
        boolean[] status = new boolean[8];
        status[0] = staProtocol.isAutoing();
@@ -131,47 +134,40 @@
        }
    }
    /**
     * 心跳
     */
    private void heartbeat(){
        OperateResult write = siemensS7Net.Write("DB100.50", (short) 1);
        if (!write.IsSuccess) {
            log.error("输送线plc编号={} 心跳失败", slave.getId());
        }
    }
    @Override
    public void close() {
        siemensS7Net.ConnectClose();
    }
    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.connect();
        devpThread.read();
        // 写
        StaProtocol staProtocol = devpThread.getStation().get(1);
        staProtocol.setWorkNo((short) 978);
        staProtocol.setStaNo((short) 150);
        staProtocol.setWorkNo((short) 232);
        staProtocol.setStaNo((short) 6);
        staProtocol.setAutoing(true);
        staProtocol.setEmptyMk(true);
        staProtocol.setInEnable(true);
        devpThread.write(staProtocol);
        System.out.println("----------------------------------------");
        // 读
        devpThread.read();
        System.out.println(JSON.toJSONString(devpThread.station));
        System.out.println("[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]");
        boolean[] status = new boolean[8];
        status[0] = true;
        status[1] = false;
        status[2] = true;
        status[3] = false;
        status[4] = true;
        OperateResult write2 = devpThread.siemensS7Net.Write("DB100.40", status);     //  状态
        if (write2.IsSuccess) {
            System.out.println("success");
        }
        OperateResultExOne<byte[]> result1 = devpThread.siemensS7Net.Read("DB100.40", (short) 10);
        if (result1.IsSuccess) {
//            System.out.println("状态:"+Arrays.toString(result1.Content));
            System.out.println(Arrays.toString(devpThread.siemensS7Net.getByteTransform().TransBool(result1.Content, 0, 1)));
        }
    }
}