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 parameterKeys=new ArrayList<>(); private Map 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(); 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 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; } }