Browse Source

完善遥测功能:4个字节

hfxc226 2 years ago
parent
commit
be02ae18ea

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/vo/export/sb/ExportSbInfoVO.java

@@ -87,7 +87,7 @@ public class ExportSbInfoVO implements Serializable {
      * 使用施工组名称
      */
     @Excel(name = "使用人")
-    private String saveUserName;
+    private String saveUser;
     /**
      * 购置日期
      */

+ 1 - 5
platform-dao/src/main/resources/mapper/sb/SbInfoMapper.xml

@@ -172,8 +172,7 @@ sb.apply_time,
                                      sb.remark,
                                      sb.apply_comment,
 sb.scrap_user_id,
-sb.scrap_user_name,
-user.real_name as saveUserName,sb.repair_dept_id
+sb.scrap_user_name,sb.repair_dept_id
     </sql>
 
     <sql id="deptSql">
@@ -189,7 +188,6 @@ user.real_name as saveUserName,sb.repair_dept_id
         from t_sb_info sb
         left join t_sb_type sbType on sb.type_id = sbType.id
         left join t_sb_position position on sb.position_id = position.id
-        left join t_sys_user user on sb.save_user = user.user_id
         left join t_sys_user user2 on sb.repair_user = user2.user_id
         left join t_sys_user user3 on sb.repair_user_second = user3.user_id
         left join t_sys_dept sdDept on sb.save_dept = sdDept.dept_id
@@ -624,7 +622,6 @@ user.real_name as saveUserName,sb.repair_dept_id
         from t_sb_info sb
         left join t_sb_type sbType on sb.type_id = sbType.id
         left join t_sb_position position on sb.position_id = position.id
-        left join t_sys_user user on sb.save_user = user.user_id
         where sb.id = #{value}
     </select>
     <select id="getByNo" parameterType="java.lang.Object" resultType="com.platform.dao.vo.sb.SbInfoVO">
@@ -633,7 +630,6 @@ user.real_name as saveUserName,sb.repair_dept_id
         from t_sb_info sb
         left join t_sb_type sbType on sb.type_id = sbType.id
         left join t_sb_position position on sb.position_id = position.id
-        left join t_sys_user user on sb.save_user = user.user_id
         where sb.no = #{value}
     </select>
 

+ 6 - 6
platform-iec/src/main/java/com/platform/iec/master/MasterSysDataHandler.java

@@ -35,7 +35,7 @@ public class MasterSysDataHandler implements DataHandler {
 
 	@Override
 	public void channelRead(ChannelHandler ctx, MessageDetail ruleDetail104) throws Exception {
-		log.info("接收数据:");
+		/*log.info("接收数据:");
 
 		log.info("启动字符:" + ruleDetail104.getStart());
 		log.info("字节长度:" + ruleDetail104.getApuuLength());
@@ -53,14 +53,14 @@ public class MasterSysDataHandler implements DataHandler {
 		log.info("判断是否有限定词:" + ruleDetail104.getQualifiersType());
 		log.info("判断是否有时标:" + ruleDetail104.isTimeScaleExit());
 		log.info("判断消息是否连续:" + ruleDetail104.isContinuous());
-		log.info(JSON.toJSONString(ruleDetail104));
 		log.info("时标:" + ruleDetail104.getTimeScale());
-		log.info("限定词:" + ruleDetail104.getHexString());
+		log.info("限定词:" + ruleDetail104.getHexString());*/
 		if(ruleDetail104.getQualifiersType() != null){
 			log.info("限定词:" + ruleDetail104.getQualifiersType().getValue());
-			if(ruleDetail104.getQualifiersType().getValue() == QualifiersEnum.generalCallGroupingQualifiersDegree.getValue()){
-				log.info(JSON.toJSONString(ruleDetail104));
-			}
+			log.info(JSON.toJSONString(ruleDetail104));
+			//if(ruleDetail104.getQualifiersType().getValue() == QualifiersEnum.generalCallGroupingQualifiersDegree.getValue()){
+				//log.info(JSON.toJSONString(ruleDetail104));
+			//}
 		}else{
 			log.info("限定词: 无");
 		}

+ 4 - 0
platform-iec/src/main/java/com/ydl/iec/iec104/core/Decoder104.java

@@ -205,6 +205,10 @@ public class Decoder104 {
                 // 遥测 测量值  标度化值 遥测, 4个字节转换
                 messageObj.setValue(ByteUtil.byteToFloatValue(messageObj.getMessageInfos()));
                 break;
+            case 0x0F:
+                // degreeNoTime不带时标的电能量,每个电能量占4个字节(实际5个,后面有一个字节是品质,只有4个是)
+                messageObj.setValue( ""+ ByteUtil.byteArrayToInt(ByteUtil.changeHighAndLow(messageObj.getMessageInfos())));
+                break;
             case 0x66:
                 // 读单个参数
                 break;

+ 2 - 2
platform-iec/src/main/java/com/ydl/iec/iec104/enums/TypeIdentifierEnum.java

@@ -10,9 +10,9 @@ import lombok.Getter;
  */
 public enum TypeIdentifierEnum {
 	/**
-	 * 不带时标的电能量,每个电能量占5个字节
+	 * 不带时标的电能量,每个电能量占5个字节(实际数值占4个字节,后面有一个字节是品质,只有4个是)
 	 */
-	degreeNoTime(0x0f, 5),
+	degreeNoTime(0x0f, 4),
 	/**
 	 * 带3个字节短时标的电能量,每个电能量占8个字节
 	 */

+ 26 - 12
platform-iec/src/main/java/com/ydl/iec/util/ByteUtil.java

@@ -48,6 +48,9 @@ public class ByteUtil {
     }
 
     /**
+     * 该方法没做高低位的转换,传进来的已经转换的才行
+     * * * *
+     *
      * @param @param  bytes
      * @param @return
      * @return int
@@ -266,29 +269,40 @@ public class ByteUtil {
      * 1:将低位高位互换
      * 2:转为float
      * 3:设置精度
+     *
      * @return
      */
-    public static String byteToFloatValue(byte[] old){
-        byte[] realByteArray = new byte[]{old[3],old[2],old[1],old[0]};
-        String hexString = ByteUtil.byteArrayToHexString(realByteArray);
+    public static String byteToFloatValue(byte[] old) {
+        String hexString = ByteUtil.byteArrayToHexString(changeHighAndLow(old));
         BigInteger b = new BigInteger(hexString, 16);
         float value = Float.intBitsToFloat(b.intValue());
         DecimalFormat fnum = new DecimalFormat("##0.00");
         return fnum.format(value);
     }
 
+    /**
+     * 高低位转换
+     *
+     * @param old
+     * @return
+     */
+    public static byte[] changeHighAndLow(byte[] old) {
+        if (old == null || old.length == 0) {
+            return old;
+        }
+        byte[] real = new byte[old.length];
+        for (int i = 0; i < old.length; i++) {
+            real[i] = old[old.length - i - 1];
+        }
+        return real;
+    }
+
     public static void main(String[] agrwu) {
-        byte[] test = new byte[]{0x00, 0x00,(byte)0xBA, 0x41};
-        byte[] realByteArray = new byte[]{test[3],test[2],test[1],test[0]};
+        byte[] test = new byte[]{(byte) 0xC0, 0x7C, 0x1F, 0x09};
+        byte[] realByteArray = changeHighAndLow(test);
         String hexString = ByteUtil.byteArrayToHexString(realByteArray);
         System.out.println("遥测16进制:" + hexString);
-
-        BigInteger b = new BigInteger(hexString, 16);
-        float value = Float.intBitsToFloat(b.intValue());
-        DecimalFormat fnum = new DecimalFormat("##0.00");
-        String dd = fnum.format(value);
-        System.out.println(value);
-        System.out.println(dd);
+        System.out.println(byteArrayToInt(realByteArray));
     }
 
     public static String testStr(String str) {

+ 1 - 4
platform-iec/src/main/java/com/ydl/iec/util/Iec104Util.java

@@ -174,10 +174,7 @@ public class Iec104Util {
 				|| TypeIdentifierEnum.onePointTeleindication.equals(ruleDetail104.getTypeIdentifier()) //单点摇信
 				|| TypeIdentifierEnum.twoPointTeleindication.equals(ruleDetail104.getTypeIdentifier()) // 双点摇信
 				|| TypeIdentifierEnum.onePointTelecontrol.equals(ruleDetail104.getTypeIdentifier()) // 单命令遥控
-				|| TypeIdentifierEnum.twoPointTelecontrol.equals(ruleDetail104.getTypeIdentifier()))// 双命令遥控
-				|| TypeIdentifierEnum.degreeNoTime.equals(ruleDetail104.getTypeIdentifier())//不带时标的电能量,每个电能量占5个字节
-				|| TypeIdentifierEnum.degreeThreeShortTime.equals(ruleDetail104.getTypeIdentifier())//电度带时标 3个字节短时标
-				|| TypeIdentifierEnum.degreeSevenShortTime.equals(ruleDetail104.getTypeIdentifier()); //电度带时标 7个字节短时标
+				|| TypeIdentifierEnum.twoPointTelecontrol.equals(ruleDetail104.getTypeIdentifier()));// 双命令遥控
 		ruleDetail104.setQualifiers(isQualifiers);
 		boolean isTimeScale = TypeIdentifierEnum.timeSynchronization.equals(ruleDetail104.getTypeIdentifier())  // 时钟同步
 				|| TypeIdentifierEnum.onePointTimeTeleindication.equals(ruleDetail104.getTypeIdentifier()) // 摇信带时标 单点

+ 5 - 5
platform-iec/src/main/java/com/ydl/iec/util/MySqlUtil.java

@@ -70,7 +70,7 @@ public class MySqlUtil {
      * @param ruleDetail104
      */
     public static void dealMessage(MessageDetail ruleDetail104) {
-        // log.info("处理数据中……………………");
+        log.info("处理数据中……………………");
         LocalDateTime time = LocalDateTime.now();
         int year = time.getYear();
         int month = time.getMonthValue();
@@ -82,11 +82,11 @@ public class MySqlUtil {
         for (int i = 0; i < ruleDetail104.getMeasgLength(); i++) {
             MessageInfo messageInfo = ruleDetail104.getMessages().get(i);
             if (messageInfo.getMessageAddress() >= remote_config_degree_min && messageInfo.getMessageAddress() <= remote_config_degree_max) {
-                // log.info("电度点位:" + messageInfo.getMessageAddress() + "数值:" + messageInfo.getValue());
-                // addMessage.add(messageInfo);
+                log.info("电度点位:" + messageInfo.getMessageAddress() + "byteHex:" + messageInfo.getByteHex() + "数值:" + messageInfo.getValue());
+                addMessage.add(messageInfo);
             } else if (messageInfo.getMessageAddress() >= remote_config_measure_min && messageInfo.getMessageAddress() <= remote_config_measure_max) {
-                log.info("遥测点位:" + messageInfo.getMessageAddress() + "byteHex:" + messageInfo.getByteHex() + "数值:" + messageInfo.getValue());
-                updateMessage.add(messageInfo);
+                // log.info("遥测点位:" + messageInfo.getMessageAddress() + "byteHex:" + messageInfo.getByteHex() + "数值:" + messageInfo.getValue());
+                // updateMessage.add(messageInfo);
             } else {
                 // log.info("数据点位不在采集范围内,不处理" + messageInfo.getMessageAddress());
             }

+ 6 - 6
platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java

@@ -728,7 +728,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                             throw new BusinessException("找不到生产商,请先添加:" + vo.getProducerName());
                         }
                     }*/
-                    if (StringUtils.isNotBlank(vo.getSaveUserName())) { // 使用人员
+                    /*if (StringUtils.isNotBlank(vo.getSaveUserName())) { // 使用人员
                         boolean findSaveUser = false;
                         for (SysUser user : users) {
                             if (user.getRealName().equalsIgnoreCase(vo.getSaveUserName().trim())) {
@@ -740,7 +740,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                         if (!findSaveUser) {
                             throw new BusinessException("找不到使用人员,请先添加, 名称" + vo.getSaveUserName());
                         }
-                    }
+                    }*/
                     /*if(StringUtils.isNotBlank(vo.getParentSbName())){ // 父设备
                         SbInfo queryInfo = new SbInfo();
                         queryInfo.setName(vo.getParentSbName().trim());
@@ -2233,7 +2233,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                             throw new BusinessException("找不到生产商,请先添加:" + vo.getProducerName());
                         }
                     }*/
-                    if (StringUtils.isNotBlank(vo.getSaveUserName())) { // 使用人员
+                    /*if (StringUtils.isNotBlank(vo.getSaveUserName())) { // 使用人员
                         boolean findSaveUser = false;
                         for (SysUser user : users) {
                             if (user.getRealName().equalsIgnoreCase(vo.getSaveUserName().trim())) {
@@ -2245,7 +2245,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                         if (!findSaveUser) {
                             throw new BusinessException("找不到使用人员,请先添加, 名称" + vo.getSaveUserName());
                         }
-                    }
+                    }*/
                     // 如果计量设备 且是需要检定
                     if (vo.getUseType() == SbUseType.BGCL.getValue() && vo.getIsMeasure() == YesNoEnum.YES.getValue()) {
                         if (vo.getCheckDate() == null && vo.getNextCheckDate() == null) {
@@ -2432,7 +2432,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                             throw new BusinessException("找不到生产商,请先添加:" + vo.getProducerName());
                         }
                     }*/
-                    if (StringUtils.isNotBlank(vo.getSaveUserName())) { // 使用人员
+                    /*if (StringUtils.isNotBlank(vo.getSaveUserName())) { // 使用人员
                         boolean findSaveUser = false;
                         for (SysUser user : users) {
                             if (user.getRealName().equalsIgnoreCase(vo.getSaveUserName().trim())) {
@@ -2444,7 +2444,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                         if (!findSaveUser) {
                             throw new BusinessException("找不到使用人员,请先添加, 名称" + vo.getSaveUserName());
                         }
-                    }
+                    }*/
                     // 如果计量设备 且是需要检定
                     if (vo.getUseType() == SbUseType.BGCL.getValue() && vo.getIsMeasure() == YesNoEnum.YES.getValue()) {
                         if (vo.getCheckDate() == null && vo.getNextCheckDate() == null) {