严智鑫
2025-09-22 fa095d4c1a440cf28a9ac82aaf9fe26984010670
JiuMuMesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java
@@ -1,20 +1,24 @@
package com.mes.device;
import com.github.s7connector.impl.serializer.converter.StringConverter;
import com.github.xingshuangs.iot.utils.IntegerUtil;
import com.github.xingshuangs.iot.utils.ShortUtil;
import com.mes.service.PlcAgreement;
import com.mes.service.PlcParameter;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Array;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.*;
@Slf4j
public class PlcParameterObject {
    // 该模块数据类型,数据起始位置
    private String plcAddressBegin;
    // 数据地址长度:第一参数到最后一个参数的长度
    private int plcAddressLength;
    //private ArrayList<PlcParameterInfo> plcParameterList;
    private LinkedHashMap<String,PlcParameterInfo> plcParameterMap;
@@ -61,7 +65,7 @@
     */
    public PlcParameterInfo getPlcParameter(String codeid) {
        if (plcParameterMap != null) {
                    return plcParameterMap.get(codeid);
            return plcParameterMap.get(codeid);
        } else {
            return null;
        }
@@ -151,52 +155,34 @@
     * @param plcValueArray PLC读取回来的byte类型数据集合
     */
    public void setPlcParameterList(byte[] plcValueArray) {
        if (plcParameterMap != null) {
            Collection<PlcParameterInfo> values=  plcParameterMap.values();
            for (PlcParameterInfo plcParameterInfo :values) {
                byte[] valueList = new byte[plcParameterInfo.getAddressLength()];
        if (plcValueArray==null||!(plcValueArray.length>0)){
            log.info("plcValueArray is null or empty");
            return ;
        }
        if (plcParameterMap==null){
            log.info("plcParameterMap is null or empty");
            return ;
        }
        Collection<PlcParameterInfo> values=  plcParameterMap.values();
        for (PlcParameterInfo plcParameterInfo :values) {
            byte[] valueList = new byte[plcParameterInfo.getAddressLength()];
//                System.out.println(plcParameterInfo.getAddressLength());
                for (int i = 0; i < plcParameterInfo.getAddressLength(); i++) {
                    Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]);
                }
                if (plcParameterInfo.getAddressLength() == 2) {
                    plcParameterInfo.setValue(String.valueOf(ShortUtil.toUInt16(valueList)));
                } else if (plcParameterInfo.getAddressLength() == 4) {
                    plcParameterInfo.setValue(String.valueOf(IntegerUtil.toUInt32(valueList)));
                }
                else if (plcParameterInfo.getAddressLength() >10) {
                    plcParameterInfo.setValue((byteToHexString(valueList)));
                } else {
                    plcParameterInfo.setValue((byteToHexString(valueList)));
                }
            for (int i = 0; i < plcParameterInfo.getAddressLength(); i++) {
                Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]);
            }
            if (plcParameterInfo.getAddressLength() == 2) {
                plcParameterInfo.setValue(String.valueOf(ShortUtil.toUInt16(valueList)));
            } else if (plcParameterInfo.getAddressLength() == 4) {
                plcParameterInfo.setValue(String.valueOf(IntegerUtil.toUInt32(valueList)));
            }else if(plcParameterInfo.getAddressLength()==256){
                StringConverter converter = new StringConverter();
                String s="";
                String extract1 = converter.extract(s.getClass(),valueList, 0, 0);
                plcParameterInfo.setValue(extract1);
            }else {
                plcParameterInfo.setValue((byteToHexString(valueList)));
            }
        }
/*        if (plcParameterList != null) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                byte[] valueList = new byte[plcParameterInfo.getAddressLength()];
//                System.out.println(plcParameterInfo.getAddressLength());
                for (int i = 0; i < plcParameterInfo.getAddressLength(); i++) {
                    Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]);
                }
                if (plcParameterInfo.getAddressLength() == 2) {
                    plcParameterInfo.setValue(String.valueOf(byte2short(valueList)));
                } else if (plcParameterInfo.getAddressLength() == 4) {
                    plcParameterInfo.setValue(String.valueOf(byte2int(valueList)));
                }
                else if (plcParameterInfo.getAddressLength() >10) {
                    plcParameterInfo.setValue((byteToHexString(valueList)));
                } else {
                    String valuestr = new String(valueList);
                    plcParameterInfo.setValue(valuestr);
                }
            }
        }*/
    }
    /**
     * 把写入值转化为byte[]