diff --git a/beneficiation/src/main/java/com/ccsens/beneficiation/service/ParameterService.java b/beneficiation/src/main/java/com/ccsens/beneficiation/service/ParameterService.java index 0ca4e4ea..834ea1c5 100644 --- a/beneficiation/src/main/java/com/ccsens/beneficiation/service/ParameterService.java +++ b/beneficiation/src/main/java/com/ccsens/beneficiation/service/ParameterService.java @@ -3,8 +3,12 @@ package com.ccsens.beneficiation.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.ccsens.beneficiation.bean.dto.ParameterDto; +import com.ccsens.beneficiation.bean.po.EquipmentType; +import com.ccsens.beneficiation.bean.po.EquipmentTypeExample; import com.ccsens.beneficiation.bean.vo.ParameterVo; import com.ccsens.beneficiation.persist.dao.RecordDao; +import com.ccsens.beneficiation.persist.mapper.EquipmentTypeMapper; +import com.ccsens.util.CRCUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -24,6 +28,8 @@ import java.util.List; public class ParameterService implements IParameterService{ @Resource private RecordDao recordDao; + @Resource + private EquipmentTypeMapper equipmentTypeMapper; @Override public ParameterVo.QueryParameter queryParameter(Object param) { @@ -84,83 +90,76 @@ public class ParameterService implements IParameterService{ } parameterInfo.setParameter(parameters); + return parameterInfo; + } + @Override + public void updateParameter(ParameterDto.ParameterInfo param) { + if(ObjectUtil.isNull(param)){ + return; + } + byte[] header = new byte[]{(byte)0xff,(byte)0xfe,(byte)0x00}; + + //电磁阀1 + ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); + if(ObjectUtil.isNotNull(solenoidValue1)){ + if(ObjectUtil.isNotNull(solenoidValue1.getSettingValue())){ + //根据id和数据类型 查找该设备的addr 设置值是1 + EquipmentTypeExample equipmentTypeExample = new EquipmentTypeExample(); + equipmentTypeExample.createCriteria().andEquipmentIdEqualTo(solenoidValue1.getId()).andTypeEqualTo((byte) 1); + List equipmentTypes = equipmentTypeMapper.selectByExample(equipmentTypeExample); + if(CollectionUtil.isNotEmpty(equipmentTypes)){ + EquipmentType equipmentType = equipmentTypes.get(0); + //计算value的高低值 + byte uc1 = (byte) (solenoidValue1.getSettingValue().intValue() >> 8); + byte uc2 = (byte) (solenoidValue1.getSettingValue().intValue() & 0xff); + //计算addr的高低值 + byte addr1 = (byte) (equipmentType.getAddr() >> 8); + byte addr2 = (byte) (equipmentType.getAddr() & 0xff); + //TODO 长度未处理 传感器地址未处理 + byte[] center = new byte[]{(byte)0x00,(byte)0x06,addr1,addr2,uc1,uc2}; + byte[] crc = new byte[2]; + CRCUtil.crc16(crc,center,0,center.length); + + byte[] all = new byte[header.length + center.length + crc.length]; + System.arraycopy(header,0,all,0,header.length); + System.arraycopy(center,0,all,header.length,center.length); + System.arraycopy(crc,0,all,header.length + center.length,crc.length); + + all[2] = (byte) (all.length - 3); + + + + } + } + } +// //电磁阀1 +// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); +// if(ObjectUtil.isNotNull(solenoidValue1)){ // -// List transducerValues = new ArrayList<>(); -// ParameterVo.TransducerValue transducer1 = new ParameterVo.TransducerValue(6L,"transducer1","实时/设置1", BigDecimal.valueOf(45)); -// ParameterVo.TransducerValue transducer2 = new ParameterVo.TransducerValue(7L,"transducer2","实时/设置2", BigDecimal.valueOf(8)); -// ParameterVo.TransducerValue transducer3 = new ParameterVo.TransducerValue(8L,"transducer3","实时/设置3", BigDecimal.valueOf(67)); -// ParameterVo.TransducerValue transducer4 = new ParameterVo.TransducerValue(10L,"transducer4","实时/设置4", BigDecimal.valueOf(75)); -// transducerValues.add(transducer1); -// transducerValues.add(transducer2); -// transducerValues.add(transducer3); -// transducerValues.add(transducer4); -// -// List transducers = new ArrayList<>(); -// ParameterVo.Transducer transducer = new ParameterVo.Transducer(); -// transducer.setTitle("变频器"); -// transducer.setValues(transducerValues); -// transducers.add(transducer); -// -// List transducerValues1 = new ArrayList<>(); -// ParameterVo.TransducerValue transducer11 = new ParameterVo.TransducerValue(6L,"solenoidValue1","实时/设置1", BigDecimal.valueOf(45)); -// ParameterVo.TransducerValue transducer21 = new ParameterVo.TransducerValue(7L,"solenoidValue2","实时/设置2", BigDecimal.valueOf(8)); -// transducerValues1.add(transducer11); -// transducerValues1.add(transducer21); -// -// ParameterVo.Transducer transducer12 = new ParameterVo.Transducer(); -// transducer12.setTitle("电磁阀"); -// transducer12.setValues(transducerValues1); -// transducers.add(transducer12); -// -// parameterInfo.setTransducers(transducers); -// -// -// List beltWeighers1 = new ArrayList<>(); -// ParameterVo.BeltWeigher beltWeigher1 = new ParameterVo.BeltWeigher(); -// beltWeigher1.setTitle("皮带秤"); -// List beltWeigherValueList1 = new ArrayList<>(); -// ParameterVo.BeltWeigherValue beltWeigher01 = new ParameterVo.BeltWeigherValue(1L,"实时/累计", BigDecimal.valueOf(12),BigDecimal.valueOf(1212)); -// beltWeigherValueList1.add(beltWeigher01); -// beltWeigher1.setValues(beltWeigherValueList1); -// beltWeighers1.add(beltWeigher1); -// +// } +// //电磁阀1 +// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); +// if(ObjectUtil.isNotNull(solenoidValue1)){ // -// ParameterVo.BeltWeigher beltWeigher2 = new ParameterVo.BeltWeigher(); -// beltWeigher2.setTitle("流量计"); -// List beltWeigherValueList2 = new ArrayList<>(); -// ParameterVo.BeltWeigherValue beltWeigher02 = new ParameterVo.BeltWeigherValue(2L,"实时/累计", BigDecimal.valueOf(16),BigDecimal.valueOf(1524)); -// ParameterVo.BeltWeigherValue beltWeigher03 = new ParameterVo.BeltWeigherValue(3L,"实时/累计", BigDecimal.valueOf(5),BigDecimal.valueOf(232)); -// beltWeigherValueList2.add(beltWeigher02); -// beltWeigherValueList2.add(beltWeigher03); -// beltWeigher2.setValues(beltWeigherValueList2); -// beltWeighers1.add(beltWeigher2); -// parameterInfo.setBeltWeigher(beltWeighers1); +// } +// //电磁阀1 +// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); +// if(ObjectUtil.isNotNull(solenoidValue1)){ // -// List parameters = new ArrayList<>(); -// ParameterVo.Parameter parameter = new ParameterVo.Parameter(); -// parameter.setTitle("电耳"); -// List parameterThresholds = new ArrayList<>(); +// } +// //电磁阀1 +// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); +// if(ObjectUtil.isNotNull(solenoidValue1)){ // -// ParameterVo.ParameterThreshold parameterThreshold1 = new ParameterVo.ParameterThreshold(11L,"electricEar1","实时",BigDecimal.valueOf(60), -// new ParameterVo.ThresholdValue(1L,"thresholdValue1","阀值1",BigDecimal.valueOf(20),BigDecimal.valueOf(60)), -// new ParameterVo.ThresholdValue(2L,"thresholdValue2","阀值2",BigDecimal.valueOf(30),BigDecimal.valueOf(70)), -// new ParameterVo.ThresholdValue(3L,"thresholdValue3","阀值3",BigDecimal.valueOf(40),BigDecimal.valueOf(80))); +// } +// //电磁阀1 +// ParameterDto.Parameter solenoidValue1 = param.getSolenoidValue1(); +// if(ObjectUtil.isNotNull(solenoidValue1)){ // -// ParameterVo.ParameterThreshold parameterThreshold2 = new ParameterVo.ParameterThreshold(12L,"electricEar1","实时",BigDecimal.valueOf(65), -// new ParameterVo.ThresholdValue(4L,"thresholdValue1","阀值1",BigDecimal.valueOf(30),BigDecimal.valueOf(70)), -// new ParameterVo.ThresholdValue(5L,"thresholdValue2","阀值2",BigDecimal.valueOf(40),BigDecimal.valueOf(80)), -// new ParameterVo.ThresholdValue(6L,"thresholdValue3","阀值3",BigDecimal.valueOf(50),BigDecimal.valueOf(90))); -// parameterThresholds.add(parameterThreshold1); -// parameterThresholds.add(parameterThreshold2); -// parameter.setValues(parameterThresholds); -// parameters.add(parameter); -// parameterInfo.setParameter(parameters); - return parameterInfo; - } +// } + //生成数组 - @Override - public void updateParameter(ParameterDto.ParameterInfo param) { } } diff --git a/util/src/main/java/com/ccsens/util/CRCUtil.java b/util/src/main/java/com/ccsens/util/CRCUtil.java new file mode 100644 index 00000000..f4dea530 --- /dev/null +++ b/util/src/main/java/com/ccsens/util/CRCUtil.java @@ -0,0 +1,46 @@ +package com.ccsens.util; + +public class CRCUtil { + public static void crc16(byte crc[], byte data[], int index, int len) { + // 预置16位crc寄存器,初值全部为1 + int wcrc = 0xFFFF; + // 定义中间变量 + int temp; + // 定义计数 + int i = 0, j = 0, k = index; + // 循环计算每个数据 + for (i = 0; i < len; i++) + { + // 将八位数据与crc寄存器亦或 + temp = (data[k] & 0xFF); + // 指针地址增加,指向下个数据 + k++; + // 将数据存入crc寄存器 + wcrc ^= temp; + // 循环计算数据的 + for (j = 0; j < 8; j++) + { + // 判断右移出的是不是1,如果是1则与多项式进行异或。 + if ((wcrc & 0x0001) == 1) + { + // 先将数据右移一位 + wcrc >>= 1; + // 与上面的多项式进行异或 + wcrc ^= 0XA001; + } else// 如果不是1,则直接移出 + { + // 直接移出 + wcrc >>= 1; + } + } + } + // crc的值 + temp = wcrc; + // crc的低八位 + crc[0] = (byte)(wcrc & 0xFF); + // crc的高八位 + crc[1] = (byte)((wcrc >> 8) & 0xFF); + } + + +} diff --git a/util/src/test/java/com/ccsens/util/OtherTest.java b/util/src/test/java/com/ccsens/util/OtherTest.java index db53fbda..b5ce07f6 100644 --- a/util/src/test/java/com/ccsens/util/OtherTest.java +++ b/util/src/test/java/com/ccsens/util/OtherTest.java @@ -105,5 +105,18 @@ public class OtherTest { System.out.print(aa.b); }); + } + @Test + public void test7() { + int a = 0x0A; + int b = 0x08; + System.out.println(a << 8 | b); + + int c = 2568; + int uc1 = c >> 8; + int uc2 = c & 0xff; + System.out.println(Integer.toHexString(uc1)); + System.out.println(Integer.toHexString(uc2)); + } }