huang
2025-04-17 3a0087aa5e3eed5d9d7a793a17dc01fd1d6df80c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.mes.common;
 
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
import com.mes.device.PlcParameterObject;
import com.mes.tools.InitUtil;
import com.mes.tools.S7control;
 
 
/**
 * @Author : yanzhixin
 * @Date: 2024/4/9 15:13
 * @Description:
 */
public class S7objectCleaning extends Thread {
    public S7control plccontrol; // PLC通讯类实例
    private EPlcType plcType = EPlcType.S200_SMART; // 西门子PLC类型
    private String ip = "200.200.200.193"; // plc ip地址
    private int port = 102; // plc 端口号
 
 
    public PlcParameterObject PlcMesObject;
    private static volatile S7objectCleaning instance = null;
 
    private S7objectCleaning() {
        if (plccontrol == null) {
            plccontrol = new S7control(plcType, ip, port, 0, 0);
            String PlcLoadGlass = System.getProperty("user.dir") + "/JsonFile/PlcCleaning.json";
//            String PlcLoadGlass=S7object.class.getResource("/JsonFile/PlcCacheGlass.json").getPath();
            System.out.println("Load Glass File: " + PlcLoadGlass);
            PlcMesObject = InitUtil.initword(PlcLoadGlass);
        }
    }
 
    // 单例模式 获取类的唯一实例
    public static S7objectCleaning getinstance() {
        if (instance == null) {
            synchronized (S7objectCleaning.class) {
                if (instance == null) {
                    instance = new S7objectCleaning();
                }
            }
        }
        return instance;
    }
 
    @Override
    public void run() {
        while (this != null) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            byte[] resultValues=new byte[PlcMesObject.getPlcAddressLength()];
            int maxRead=1092;
            int size=PlcMesObject.getPlcAddressLength()%maxRead==0?
                    (PlcMesObject.getPlcAddressLength()/maxRead):
                    (PlcMesObject.getPlcAddressLength()/maxRead+1);
            for (int i = 0; i <size ; i++) {
                int begin=i*maxRead;
                int length=(i==size-1?PlcMesObject.getPlcAddressLength()-begin:maxRead);
                //String s=PlcMesObject.getPlcAddressBegin().substring(PlcMesObject.getPlcAddressBegin().indexOf(".")+1);
                int defaultStart=Integer.valueOf(PlcMesObject.getPlcAddressBegin().substring(PlcMesObject.getPlcAddressBegin().indexOf(".")+1));
 
                String beginAddress=PlcMesObject.getPlcAddressBegin().substring(0, PlcMesObject.getPlcAddressBegin().indexOf("."))+"."+(begin+defaultStart);
                byte[] getplcvlues = plccontrol.readByte(beginAddress, length);
                System.arraycopy(getplcvlues,0,resultValues,begin,length);
            }
            if (resultValues != null) {
                PlcMesObject.setPlcParameterList(resultValues);
            }
        }
    }
}