#
luxiaotao1123
2020-08-13 2b463baf45d9602aae1569dd9a93a17a00ec308b
src/main/java/com/zy/core/thread/DevpThread.java
@@ -1,9 +1,10 @@
package com.zy.core.thread;
import com.zy.common.HslCommunication.Core.Types.OperateResult;
import com.zy.common.HslCommunication.Core.Types.OperateResultExOne;
import com.zy.common.HslCommunication.Profinet.Siemens.SiemensPLCS;
import com.zy.common.HslCommunication.Profinet.Siemens.SiemensS7Net;
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;
@@ -46,16 +47,11 @@
                switch (step) {
                    // 读数据
                    case 1:
                        readWorkNo();   // 读取工作号
                        readStaDest();  // 读取目标站
                        readStatus();   // 读取状态
                        readError();    // 读取异常信息
                        read();
                        break;
                    // 写数据
                    case 2:
                        break;
                    case 3:
                        break;
                    case 4:
                        write((StaProtocol)task.getData());
                        break;
                    default:
                        break;
@@ -72,6 +68,8 @@
    public boolean connect() {
        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;
@@ -84,62 +82,76 @@
    }
    /**
     * 读取工作号
     */
    private void readWorkNo(){
        OperateResultExOne<int[]> read = siemensS7Net.ReadInt32("DB100", (short) 8);
        if (read.IsSuccess) {
            int staNo1 = read.Content[0];
            int staNo2 = read.Content[1];
            int staNo3 = read.Content[2];
            int staNo4 = read.Content[3];
            int staNo5 = read.Content[4];
            int staNo6 = read.Content[5];
            int staNo7 = read.Content[6];
            int staNo8 = read.Content[7];
        }
    }
    /**
     * 读取目标站
     */
    private void readStaDest(){
        OperateResultExOne<byte[]> read = siemensS7Net.Read("DB101", (short) 8);
        if (read.IsSuccess) {
            int staNo1 = siemensS7Net.getByteTransform().TransInt32(read.Content, 0);
            int staNo2 = siemensS7Net.getByteTransform().TransInt32(read.Content, 4);
            int staNo3 = siemensS7Net.getByteTransform().TransInt32(read.Content, 8);
            int staNo4 = siemensS7Net.getByteTransform().TransInt32(read.Content, 12);
            int staNo5 = siemensS7Net.getByteTransform().TransInt32(read.Content, 16);
            int staNo6 = siemensS7Net.getByteTransform().TransInt32(read.Content, 20);
            int staNo7 = siemensS7Net.getByteTransform().TransInt32(read.Content, 24);
            int staNo8 = siemensS7Net.getByteTransform().TransInt32(read.Content, 28);
        }
    }
    /**
     * 读取状态
     */
    private void readStatus(){
    private void read(){
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 40);
        for (int i = 1; i <= 8; 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));
            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));
        }
        System.out.println("===> 状态");
        OperateResultExOne<boolean[]> result1 = siemensS7Net.ReadBool("DB100.40", (short) 10);
//        for (int i = 1; i <= 8; i++) {
//            System.out.println(result1.Content.length);
//            System.out.println(siemensS7Net.getByteTransform().TransByte(result.Content, (i-1)));
//        }
    }
    /**
     * 读取异常信息
     * 写入
     */
    private void readError(){
    }
    private void writeWorkNo(){
    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();
        status[1] = staProtocol.isLoading();
        status[2] = staProtocol.isInEnable();
        status[3] = staProtocol.isOutEnable();
        status[4] = staProtocol.isEmptyMk();
        OperateResult write2 = siemensS7Net.Write("DB100." + ((staProtocol.getSiteId() - 1) * 2 + 40), status);     //  状态
        if (!write.IsSuccess || !write1.IsSuccess || !write2.IsSuccess) {
            log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        }
    }
    @Override
    public void close() {
    }
    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(2);
        staProtocol.setWorkNo((short) 978);
        staProtocol.setStaNo((short) 15);
        staProtocol.setAutoing(true);
        staProtocol.setEmptyMk(true);
        devpThread.write(staProtocol);
        System.out.println("----------------------------------------");
        // 读
        devpThread.read();
        System.out.println(JSON.toJSONString(devpThread.station));
    }
}