Bladeren bron

完善电度功能

hfxc226 2 jaren geleden
bovenliggende
commit
7da0b12eb9

+ 11 - 7
platform-iec/src/main/java/com/ydl/iec/iec104/core/Decoder104.java

@@ -55,6 +55,8 @@ public class Decoder104 {
         index += 2;
         Iec104Util.setMeaageAttribute(ruleDetail104);
         setMessage(ruleDetail104, bytes, index);
+        // log.info("解码器是否连续: " + ruleDetail104.isContinuous());
+        // log.info("解码器结果结果: " + JSON.toJSONString(ruleDetail104));
         return ruleDetail104;
     }
 
@@ -101,6 +103,9 @@ public class Decoder104 {
             int messageSize = 0;
             while (messageSize < ruleDetail104.getMeasgLength()) {
                 MessageInfo messageObj = new MessageInfo();
+                // 消息地址长度
+                messageObj.setMessageInfoLength(messageLength);
+                // 消息地址int+byte
                 messageObj.setMessageAddress(messageAddress);
                 byte[] messageInfos = ByteUtil.getByte(bytes, mesageIndex, messageLength);
                 mesageIndex += messageLength;
@@ -114,20 +119,17 @@ public class Decoder104 {
                     // 0(每个信息元素后缀1个字节)
                     ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
                 }
-
                 messageSize++;
                 messageAddress++;
                 messages.add(messageObj);
             }
         }
 
-
         if (ruleDetail104.isQualifiers() && !TypeIdentifierEnum.isTelemetry(ruleDetail104.getTypeIdentifier())) {
             // 判断是否有限定词
             ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
         }
 
-
         if (ruleDetail104.isTimeScaleExit()) {
             ruleDetail104.setTimeScale(ByteUtil.byte2Hdate(ByteUtil.getByte(bytes, mesageIndex, 7)));
         }
@@ -152,8 +154,12 @@ public class Decoder104 {
         int messageSize = 0;
         while (messageSize < ruleDetail104.getMeasgLength()) {
             MessageInfo messageObj = new MessageInfo();
-            // 消息地址
-            messageObj.setMessageAddress(Iec104Util.messageAddressToInt(ByteUtil.getByte(bytes, mesageIndex, 3)));
+            // 消息地址长度
+            messageObj.setMessageInfoLength(messageLength);
+            // 消息地址int+byte+hex
+            messageObj.setMessageAddressByte(ByteUtil.getByte(bytes, mesageIndex, 3));
+            messageObj.setMessageAddressByteHex(ByteUtil.byteArrayToHexString(messageObj.getMessageAddressByte()));
+            messageObj.setMessageAddress(Iec104Util.messageAddressToInt(messageObj.getMessageAddressByte()));
             mesageIndex += 3;
 
             if (ruleDetail104.isMessage()) {
@@ -178,13 +184,11 @@ public class Decoder104 {
             messages.add(messageObj);
         }
 
-
         if (ruleDetail104.isQualifiers() && !TypeIdentifierEnum.isTelemetry(ruleDetail104.getTypeIdentifier())) {
             // 判断是否有限定词
             ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
         }
 
-
         if (ruleDetail104.isTimeScaleExit()) {
             ruleDetail104.setTimeScale(ByteUtil.byte2Hdate(ByteUtil.getByte(bytes, mesageIndex, 7)));
         }

+ 1 - 1
platform-iec/src/main/java/com/ydl/iec/iec104/core/ScheduledTaskPool.java

@@ -181,7 +181,7 @@ public class ScheduledTaskPool {
                     while (sendTestStatus) {
                         try {
                             // ctx.channel().writeAndFlush(BasicInstruction104.getGeneralCallRuleDetail104());
-                            Thread.sleep(1000 * 60 * 5);// 2分钟判断一次是否发送一次电度总召唤
+                            Thread.sleep(1000 * 60 * 2);// 2分钟判断一次是否发送一次电度总召唤
                             // 判断是否需要发送电度
                             //if (isNeedSendDegree()) {
                                 if (sendTestNum > 1) {

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

@@ -76,7 +76,8 @@ public enum QualifiersEnum {
 		}
 		// 品质描述词和设置参数 限定词对应多个值 所以需要做特殊处理
 		QualifiersEnum qualifiersEnum = null;
-		if ((TypeIdentifierEnum.normalizedTelemetry.equals(typeIdentifier) 
+		if ((TypeIdentifierEnum.normalizedTelemetry.equals(typeIdentifier)
+				|| TypeIdentifierEnum.degreeNoTime.equals(typeIdentifier)
 				|| TypeIdentifierEnum.scaledTelemetry.equals(typeIdentifier)
 				|| TypeIdentifierEnum.shortFloatingPointTelemetry.equals(typeIdentifier)) 
 				&& qualityQualifiers.getValue() == value) {

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

@@ -78,7 +78,7 @@ public enum TypeIdentifierEnum {
 	 */
 	initEnd(0x46, 0),
 	/**
-	 * 召唤命令
+	 * 召唤命令
 	 */
 	generalCall(0x64, 0),
 	/**
@@ -112,9 +112,13 @@ public enum TypeIdentifierEnum {
 		return null;
 	}
 
-
+	/**
+	 * 是否遥测+电度
+	 * @param typeIdentifierEnum
+	 * @return
+	 */
 	public static boolean isTelemetry(TypeIdentifierEnum typeIdentifierEnum) {
 		return TypeIdentifierEnum.normalizedTelemetry == typeIdentifierEnum
-				|| scaledTelemetry.shortFloatingPointTelemetry == typeIdentifierEnum;
+				|| scaledTelemetry.shortFloatingPointTelemetry == typeIdentifierEnum|| scaledTelemetry.degreeNoTime == typeIdentifierEnum;
 	}
 }

+ 9 - 2
platform-iec/src/main/java/com/ydl/iec/iec104/message/MessageInfo.java

@@ -11,10 +11,17 @@ import java.util.Date;
 @Data
 public class MessageInfo {
 	/**
-	 * 消息地址 字节
+	 * 消息地址:一转换为int
 	 */
 	private int messageAddress;
-	
+	/**
+	 * 消息地址 字节
+	 */
+	private byte[] messageAddressByte;
+	/**
+	 * 消息地址 16进制
+	 */
+	private String messageAddressByteHex;
 	/**
 	 * 信息元素集合 1 2 4 个字节
 	 */

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

@@ -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() + "byteHex:" + messageInfo.getByteHex() + "数值:" + messageInfo.getValue());
+                //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());
             }