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;
|
}
|
}
|