huang
2025-03-18 67c9118cffb7d7407668bbbad4c64f9aaf21ba0d
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
75
76
77
78
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;
 
import java.util.List;
 
 
/**
 * @Author : yanzhixin
 * @Date: 2024/4/9 15:13
 * @Description:
 */
public class S7objectMarking extends Thread {
    public S7control plccontrol; // PLC通讯类实例
    private EPlcType plcType = EPlcType.S1500; // 西门子PLC类型
    private String ip = "10.36.164.40"; // plc ip地址
    private int port = 102; // plc 端口号
 
 
    public PlcParameterObject PlcMesObject;
    private static volatile S7objectMarking instance = null;
 
    private S7objectMarking() {
        if (plccontrol == null) {
            plccontrol = new S7control(plcType, ip, port, 0, 0);
            String PlcLoadGlass = System.getProperty("user.dir") + "/JsonFile/PlcMarking.json";
//            String PlcLoadGlass=S7object.class.getResource("/JsonFile/PlcCacheGlass.json").getPath();
            System.out.println("Load Glass File: " + PlcLoadGlass);
            PlcMesObject = InitUtil.initword(PlcLoadGlass);
        }
    }
 
    // 单例模式 获取类的唯一实例
    public static S7objectMarking getinstance() {
        if (instance == null) {
            synchronized (S7objectMarking.class) {
                if (instance == null) {
                    instance = new S7objectMarking();
                }
            }
        }
        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 beginAddress=PlcMesObject.getPlcAddressBegin().substring(0, PlcMesObject.getPlcAddressBegin().indexOf("."))+"."+begin;
                byte[] getplcvlues = plccontrol.readByte(beginAddress, length);
                System.arraycopy(getplcvlues,0,resultValues,begin,length);
            }
            if (resultValues != null) {
                PlcMesObject.setPlcParameterList(resultValues);
            }
//            byte[] getplcvlues = plccontrol.readByte(PlcMesObject.getPlcAddressBegin(), PlcMesObject.getPlcAddressLength());
//            if (getplcvlues != null) {
//                PlcMesObject.setPlcParameterList(getplcvlues);
//            }
        }
    }
}