严智鑫
2024-12-03 def1eb8623e1444164ae4bce9179d011a89b8c5e
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.mes.service;
 
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.mes.device.PlcParameterInfo;
import com.mes.tools.HexConversion;
import com.mes.utils.HexUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.io.*;
import java.net.Socket;
import java.util.*;
 
/**
 * Plc协议:协议参数,协议配置,协议请求头,协议类型
 */
@Component
@Slf4j
public class PlcAgreement {
 
    //public Socket socket =null;//通讯
    /**
     * 协议参数
     */
    private List<String> parameterKeys=new ArrayList<>();
    private Map<String,PlcParameter> parameters=null;
    /**
     * 协议路径
     */
    private String jsonFilePath=null;
    /**
     * 读取起始地址
     */
    public String plcAddressBegin=null;
    /**
     * 读取长度
     */
    public int plcAddressLength=0;
    //类似序列号(4)+协议标志(4)+长度(4)+从站地址(2)+功能代码(2)+起始地址(4)+读取数量(4) "000100000006010300000032"
    public String requestHead=null;
    private PlcAgreement(){}
    PlcAgreement(String fileName){
        //jsonFilePath = "D:/mes/JsonFile/"+fileName+".json";
        jsonFilePath = System.getProperty("user.dir") + "/JsonFile/"+fileName+".json";
        boolean initSuccess=initword();
        //log.info("初始化PlcCacheGlass:"+initSuccess);
    }
    //初始化word
    public boolean initword() {
        try {
            parameters=new LinkedHashMap<String,PlcParameter>();
            FileReader fileReader = new FileReader(jsonFilePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
 
            StringBuilder content = new StringBuilder();
            String line;
 
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            bufferedReader.close();
            fileReader.close();
 
            JSONObject jsonFile = new JSONObject(content.toString());
            //log.info("读取内容:{}",jsonFile);
            JSONArray jsonArray = jsonFile.getJSONArray("parameterInfo");
            this.plcAddressBegin=jsonFile.getStr("plcAddressBegin");//设置起始位地址
            this.plcAddressLength=Integer.valueOf(jsonFile.getStr("plcAddressLength"));//设置地址长度
            this.requestHead=jsonFile.getStr("requestHead");//设置请求头部
 
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject parameterObj = jsonArray.getJSONObject(i);
                String code = parameterObj.getStr("codeId");
                PlcParameter plcParameter = new PlcParameter(
                        code,
                        Integer.valueOf(parameterObj.getStr("addressIndex")),
                        Integer.valueOf(parameterObj.getStr("addressLength")),
                        parameterObj.getStr("type")); //参数实例
                parameterKeys.add(code);
                parameters.put(code,plcParameter);
            }
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
    //获取此地址全部参数
    public Map<String,PlcParameter> getPlcParameters(){
        return parameters;
    }
    //通过参数名称获取
    public PlcParameter getPlcParameter(String name){
        return parameters.get(name);
    }
    //通过参数序号获取
    public PlcParameter getPlcParameter(int index){
        String key=parameterKeys.get(index);
        if(key!=null&& !key.isEmpty()){
            return this.getPlcParameter(key);
        }
        log.info("无效下标:{},下标范围:0-{}",index,parameterKeys.size());
        return null;
    }
    public int getValueInt(){
        return 0;
    }
    public double getValueDouble(){
        return 0;
    }
}