|
@@ -9,221 +9,230 @@ import com.ydl.iec.iec104.enums.TypeIdentifierEnum;
|
|
import com.ydl.iec.util.ByteUtil;
|
|
import com.ydl.iec.util.ByteUtil;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
+import java.math.BigInteger;
|
|
|
|
+import java.text.DecimalFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
/**
|
|
- *
|
|
|
|
-* @ClassName: Decoder104
|
|
|
|
-* @Description: 104 协议转码工具
|
|
|
|
-* @author YDL
|
|
|
|
-* @date 2020年5月13日
|
|
|
|
|
|
+ * @author YDL
|
|
|
|
+ * @ClassName: Decoder104
|
|
|
|
+ * @Description: 104 协议转码工具
|
|
|
|
+ * @date 2020年5月13日
|
|
*/
|
|
*/
|
|
@Slf4j
|
|
@Slf4j
|
|
public class Decoder104 {
|
|
public class Decoder104 {
|
|
|
|
|
|
- /**
|
|
|
|
- * 将bytes 转换成指定的数据结构
|
|
|
|
- * @param bytes
|
|
|
|
- * @return
|
|
|
|
- */
|
|
|
|
- public static MessageDetail encoder(byte[] bytes) {
|
|
|
|
- log.info("解码器: " + ByteUtil.byteArrayToHexString(bytes));
|
|
|
|
- MessageDetail ruleDetail104 = new MessageDetail();
|
|
|
|
- int index = 0;
|
|
|
|
- ruleDetail104.setStart(bytes[index++]);
|
|
|
|
- ruleDetail104.setApuuLength(bytes[index++] & 0xFF);
|
|
|
|
- ruleDetail104.setControl(ByteUtil.getByte(bytes, index, 4));
|
|
|
|
- index += 4;
|
|
|
|
- if (ruleDetail104.getApuuLength() <= 4) {
|
|
|
|
- ruleDetail104.setMessages(new ArrayList<>());
|
|
|
|
- // 如果只有APCI 就此返回
|
|
|
|
- return ruleDetail104;
|
|
|
|
- }
|
|
|
|
- // 下面是返回ASDU的结构
|
|
|
|
- ruleDetail104.setTypeIdentifier(TypeIdentifierEnum.getTypeIdentifierEnum(bytes[index++]));
|
|
|
|
- // 添加可变结构限定词
|
|
|
|
- Iec104Util.setChanged(ruleDetail104, bytes[index++]);
|
|
|
|
- ruleDetail104.setTransferReason(ByteUtil.byteArrayToShort(ByteUtil.getByte(bytes, index, 2)));
|
|
|
|
- index += 2;
|
|
|
|
- //
|
|
|
|
- ruleDetail104.setTerminalAddress(Iec104Util.getTerminalAddressShort(ByteUtil.getByte(bytes, index, 2)));
|
|
|
|
- index += 2;
|
|
|
|
- Iec104Util.setMeaageAttribute(ruleDetail104);
|
|
|
|
- setMessage(ruleDetail104, bytes, index);
|
|
|
|
- return ruleDetail104;
|
|
|
|
- }
|
|
|
|
|
|
+ private static DecimalFormat decimalFormat = new DecimalFormat("##0.00");
|
|
|
|
+ /**
|
|
|
|
+ * 将bytes 转换成指定的数据结构
|
|
|
|
+ *
|
|
|
|
+ * @param bytes
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static MessageDetail encoder(byte[] bytes) {
|
|
|
|
+ log.info("解码器: " + ByteUtil.byteArrayToHexString(bytes));
|
|
|
|
+ log.info("解码器完善: " + ByteUtil.testStr(ByteUtil.byteArrayToHexString(bytes)));
|
|
|
|
+ MessageDetail ruleDetail104 = new MessageDetail();
|
|
|
|
+ int index = 0;
|
|
|
|
+ ruleDetail104.setStart(bytes[index++]);
|
|
|
|
+ ruleDetail104.setApuuLength(bytes[index++] & 0xFF);
|
|
|
|
+ ruleDetail104.setControl(ByteUtil.getByte(bytes, index, 4));
|
|
|
|
+ index += 4;
|
|
|
|
+ if (ruleDetail104.getApuuLength() <= 4) {
|
|
|
|
+ ruleDetail104.setMessages(new ArrayList<>());
|
|
|
|
+ // 如果只有APCI 就此返回
|
|
|
|
+ return ruleDetail104;
|
|
|
|
+ }
|
|
|
|
+ // 下面是返回ASDU的结构
|
|
|
|
+ ruleDetail104.setTypeIdentifier(TypeIdentifierEnum.getTypeIdentifierEnum(bytes[index++]));
|
|
|
|
+ // 添加可变结构限定词
|
|
|
|
+ Iec104Util.setChanged(ruleDetail104, bytes[index++]);
|
|
|
|
+ ruleDetail104.setTransferReason(ByteUtil.byteArrayToShort(ByteUtil.getByte(bytes, index, 2)));
|
|
|
|
+ index += 2;
|
|
|
|
+ //
|
|
|
|
+ ruleDetail104.setTerminalAddress(Iec104Util.getTerminalAddressShort(ByteUtil.getByte(bytes, index, 2)));
|
|
|
|
+ index += 2;
|
|
|
|
+ Iec104Util.setMeaageAttribute(ruleDetail104);
|
|
|
|
+ setMessage(ruleDetail104, bytes, index);
|
|
|
|
+ return ruleDetail104;
|
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
|
- *
|
|
|
|
- * @Title: setMessage
|
|
|
|
- * @Description: 对消息进行编码
|
|
|
|
- * @param @param ruleDetail104
|
|
|
|
- * @param @param bytes
|
|
|
|
- * @param @param index
|
|
|
|
- * @return void
|
|
|
|
- * @throws
|
|
|
|
- */
|
|
|
|
- public static void setMessage(MessageDetail ruleDetail104, byte[] bytes, int index) {
|
|
|
|
- int mesageIndex = index;
|
|
|
|
- if (ruleDetail104.isContinuous()) {
|
|
|
|
- setContinuoustMessage(ruleDetail104, bytes, mesageIndex);
|
|
|
|
- } else {
|
|
|
|
- setNoContinuoustMessage(ruleDetail104, bytes, mesageIndex);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ /**
|
|
|
|
+ * @param @param ruleDetail104
|
|
|
|
+ * @param @param bytes
|
|
|
|
+ * @param @param index
|
|
|
|
+ * @return void
|
|
|
|
+ * @throws
|
|
|
|
+ * @Title: setMessage
|
|
|
|
+ * @Description: 对消息进行编码
|
|
|
|
+ */
|
|
|
|
+ public static void setMessage(MessageDetail ruleDetail104, byte[] bytes, int index) {
|
|
|
|
+ int mesageIndex = index;
|
|
|
|
+ if (ruleDetail104.isContinuous()) {
|
|
|
|
+ setContinuoustMessage(ruleDetail104, bytes, mesageIndex);
|
|
|
|
+ } else {
|
|
|
|
+ setNoContinuoustMessage(ruleDetail104, bytes, mesageIndex);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
- /**
|
|
|
|
- *
|
|
|
|
- * @Title: setContinuoustMessage
|
|
|
|
- * @Description: 设置连续地址的消息
|
|
|
|
- * @param ruleDetail104
|
|
|
|
- * @param bytes
|
|
|
|
- * @param index
|
|
|
|
- * @return void
|
|
|
|
- * @throws
|
|
|
|
- */
|
|
|
|
- public static void setContinuoustMessage(MessageDetail ruleDetail104, byte[] bytes, int index) {
|
|
|
|
- List<MessageInfo> messages = new ArrayList<>();
|
|
|
|
- int mesageIndex = index;
|
|
|
|
- // 连续的 前三个字节是地址
|
|
|
|
- // 如果是地址联系的只需要设置一个初始地址就可以了
|
|
|
|
- // TODO 此处不处理地址
|
|
|
|
- int messageAddress = Iec104Util.messageAddressToInt(ByteUtil.getByte(bytes, mesageIndex, 3));
|
|
|
|
- ruleDetail104.setMessageAddress(messageAddress);
|
|
|
|
- mesageIndex += 3;
|
|
|
|
- if (ruleDetail104.isMessage()) {
|
|
|
|
- // 获取每个消息的长度
|
|
|
|
- int messageLength = getMessageLength(ruleDetail104);
|
|
|
|
- int messageSize = 0;
|
|
|
|
- while (messageSize < ruleDetail104.getMeasgLength()) {
|
|
|
|
- MessageInfo messageObj = new MessageInfo();
|
|
|
|
- messageObj.setMessageAddress(messageAddress);
|
|
|
|
- byte[] messageInfos = ByteUtil.getByte(bytes, mesageIndex, messageLength);
|
|
|
|
- mesageIndex += messageLength;
|
|
|
|
- messageObj.setMessageInfos(messageInfos);
|
|
|
|
- //对数据的值进行解析
|
|
|
|
- setMessageValue(ruleDetail104, messageObj);
|
|
|
|
|
|
+ /**
|
|
|
|
+ * @param ruleDetail104
|
|
|
|
+ * @param bytes
|
|
|
|
+ * @param index
|
|
|
|
+ * @return void
|
|
|
|
+ * @throws
|
|
|
|
+ * @Title: setContinuoustMessage
|
|
|
|
+ * @Description: 设置连续地址的消息
|
|
|
|
+ */
|
|
|
|
+ public static void setContinuoustMessage(MessageDetail ruleDetail104, byte[] bytes, int index) {
|
|
|
|
+ List<MessageInfo> messages = new ArrayList<>();
|
|
|
|
+ int mesageIndex = index;
|
|
|
|
+ // 连续的 前三个字节是地址
|
|
|
|
+ // 如果是地址联系的只需要设置一个初始地址就可以了
|
|
|
|
+ // TODO 此处不处理地址
|
|
|
|
+ int messageAddress = Iec104Util.messageAddressToInt(ByteUtil.getByte(bytes, mesageIndex, 3));
|
|
|
|
+ ruleDetail104.setMessageAddress(messageAddress);
|
|
|
|
+ mesageIndex += 3;
|
|
|
|
+ if (ruleDetail104.isMessage()) {
|
|
|
|
+ // 获取每个消息的长度
|
|
|
|
+ int messageLength = getMessageLength(ruleDetail104);
|
|
|
|
+ int messageSize = 0;
|
|
|
|
+ while (messageSize < ruleDetail104.getMeasgLength()) {
|
|
|
|
+ MessageInfo messageObj = new MessageInfo();
|
|
|
|
+ messageObj.setMessageAddress(messageAddress);
|
|
|
|
+ byte[] messageInfos = ByteUtil.getByte(bytes, mesageIndex, messageLength);
|
|
|
|
+ mesageIndex += messageLength;
|
|
|
|
+ messageObj.setMessageInfos(messageInfos);
|
|
|
|
+ messageObj.setByteHex(ByteUtil.byteArrayToHexString(messageInfos));
|
|
|
|
+ //对数据的值进行解析
|
|
|
|
+ setMessageValue(ruleDetail104, messageObj);
|
|
|
|
|
|
- if (ruleDetail104.isQualifiers() && TypeIdentifierEnum.isTelemetry(ruleDetail104.getTypeIdentifier())) {
|
|
|
|
- // 判断是否有限定词
|
|
|
|
- // 0(每个信息元素后缀1个字节)
|
|
|
|
- ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
|
|
|
|
- }
|
|
|
|
|
|
+ if (ruleDetail104.isQualifiers() && TypeIdentifierEnum.isTelemetry(ruleDetail104.getTypeIdentifier())) {
|
|
|
|
+ // 判断是否有限定词
|
|
|
|
+ // 0(每个信息元素后缀1个字节)
|
|
|
|
+ ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
|
|
|
|
+ }
|
|
|
|
|
|
- messageSize++;
|
|
|
|
- messageAddress++;
|
|
|
|
- messages.add(messageObj);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ messageSize++;
|
|
|
|
+ messageAddress++;
|
|
|
|
+ messages.add(messageObj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
- if (ruleDetail104.isQualifiers() && !TypeIdentifierEnum.isTelemetry(ruleDetail104.getTypeIdentifier())) {
|
|
|
|
- // 判断是否有限定词
|
|
|
|
- ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
|
|
|
|
- }
|
|
|
|
|
|
+ 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)));
|
|
|
|
- }
|
|
|
|
- ruleDetail104.setMessages(messages);
|
|
|
|
- }
|
|
|
|
|
|
+ if (ruleDetail104.isTimeScaleExit()) {
|
|
|
|
+ ruleDetail104.setTimeScale(ByteUtil.byte2Hdate(ByteUtil.getByte(bytes, mesageIndex, 7)));
|
|
|
|
+ }
|
|
|
|
+ ruleDetail104.setMessages(messages);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
- /**
|
|
|
|
- *
|
|
|
|
- * @Title: setNoContinuoustMessage
|
|
|
|
- * @Description: 设置不连续地址的消息
|
|
|
|
- * @param ruleDetail104
|
|
|
|
- * @param bytes
|
|
|
|
- * @param index
|
|
|
|
- * @return void
|
|
|
|
- * @throws
|
|
|
|
- */
|
|
|
|
- public static void setNoContinuoustMessage(MessageDetail ruleDetail104, byte[] bytes, int index) {
|
|
|
|
- List<MessageInfo> messages = new ArrayList<>();
|
|
|
|
- int mesageIndex = index;
|
|
|
|
- // 获取每个消息的长度
|
|
|
|
- int messageLength = getMessageLength(ruleDetail104);
|
|
|
|
- int messageSize = 0;
|
|
|
|
- while (messageSize < ruleDetail104.getMeasgLength()) {
|
|
|
|
- MessageInfo messageObj = new MessageInfo();
|
|
|
|
- // 消息地址
|
|
|
|
- messageObj.setMessageAddress(Iec104Util.messageAddressToInt(ByteUtil.getByte(bytes, mesageIndex, 3)));
|
|
|
|
- mesageIndex += 3;
|
|
|
|
|
|
+ /**
|
|
|
|
+ * @param ruleDetail104
|
|
|
|
+ * @param bytes
|
|
|
|
+ * @param index
|
|
|
|
+ * @return void
|
|
|
|
+ * @throws
|
|
|
|
+ * @Title: setNoContinuoustMessage
|
|
|
|
+ * @Description: 设置不连续地址的消息
|
|
|
|
+ */
|
|
|
|
+ public static void setNoContinuoustMessage(MessageDetail ruleDetail104, byte[] bytes, int index) {
|
|
|
|
+ List<MessageInfo> messages = new ArrayList<>();
|
|
|
|
+ int mesageIndex = index;
|
|
|
|
+ // 获取每个消息的长度
|
|
|
|
+ int messageLength = getMessageLength(ruleDetail104);
|
|
|
|
+ int messageSize = 0;
|
|
|
|
+ while (messageSize < ruleDetail104.getMeasgLength()) {
|
|
|
|
+ MessageInfo messageObj = new MessageInfo();
|
|
|
|
+ // 消息地址
|
|
|
|
+ messageObj.setMessageAddress(Iec104Util.messageAddressToInt(ByteUtil.getByte(bytes, mesageIndex, 3)));
|
|
|
|
+ mesageIndex += 3;
|
|
|
|
|
|
- if (ruleDetail104.isMessage()) {
|
|
|
|
- // 消息集合
|
|
|
|
- byte[] messageInfos = ByteUtil.getByte(bytes, mesageIndex, messageLength);
|
|
|
|
- mesageIndex += messageLength;
|
|
|
|
- messageObj.setMessageInfos(messageInfos);
|
|
|
|
- //对数据的值进行解析
|
|
|
|
- setMessageValue(ruleDetail104, messageObj);
|
|
|
|
- } else {
|
|
|
|
- messageObj.setMessageInfos(new byte[] {});
|
|
|
|
- }
|
|
|
|
|
|
+ if (ruleDetail104.isMessage()) {
|
|
|
|
+ // 消息集合
|
|
|
|
+ byte[] messageInfos = ByteUtil.getByte(bytes, mesageIndex, messageLength);
|
|
|
|
+ mesageIndex += messageLength;
|
|
|
|
+ messageObj.setMessageInfos(messageInfos);
|
|
|
|
+ messageObj.setByteHex(ByteUtil.byteArrayToHexString(messageInfos));
|
|
|
|
+ //对数据的值进行解析
|
|
|
|
+ setMessageValue(ruleDetail104, messageObj);
|
|
|
|
+ } else {
|
|
|
|
+ messageObj.setMessageInfos(new byte[]{});
|
|
|
|
+ }
|
|
|
|
|
|
- if (ruleDetail104.isQualifiers() && TypeIdentifierEnum.isTelemetry(ruleDetail104.getTypeIdentifier())) {
|
|
|
|
- // 判断是否有限定词
|
|
|
|
- // 0(每个信息元素后缀1个字节)
|
|
|
|
- ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
|
|
|
|
- }
|
|
|
|
|
|
+ if (ruleDetail104.isQualifiers() && TypeIdentifierEnum.isTelemetry(ruleDetail104.getTypeIdentifier())) {
|
|
|
|
+ // 判断是否有限定词
|
|
|
|
+ // 0(每个信息元素后缀1个字节)
|
|
|
|
+ ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
|
|
|
|
+ }
|
|
|
|
|
|
- messageSize++;
|
|
|
|
- messages.add(messageObj);
|
|
|
|
- }
|
|
|
|
|
|
+ messageSize++;
|
|
|
|
+ messages.add(messageObj);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
- if (ruleDetail104.isQualifiers() && !TypeIdentifierEnum.isTelemetry(ruleDetail104.getTypeIdentifier())) {
|
|
|
|
- // 判断是否有限定词
|
|
|
|
- ruleDetail104.setQualifiersType(QualifiersEnum.getQualifiersEnum(ruleDetail104.getTypeIdentifier(), bytes[mesageIndex++]));
|
|
|
|
- }
|
|
|
|
|
|
+ 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)));
|
|
|
|
- }
|
|
|
|
|
|
+ if (ruleDetail104.isTimeScaleExit()) {
|
|
|
|
+ ruleDetail104.setTimeScale(ByteUtil.byte2Hdate(ByteUtil.getByte(bytes, mesageIndex, 7)));
|
|
|
|
+ }
|
|
|
|
|
|
- ruleDetail104.setMessages(messages);
|
|
|
|
- }
|
|
|
|
|
|
+ ruleDetail104.setMessages(messages);
|
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
|
- * 根据类型对数据的值进行解析
|
|
|
|
- * */
|
|
|
|
- private static void setMessageValue(MessageDetail ruleDetail104, MessageInfo messageObj) {
|
|
|
|
- switch (ruleDetail104.getTypeIdentifier().getValue()) {
|
|
|
|
- case 0x09:
|
|
|
|
- // 遥测 测量值 归一化值 遥测
|
|
|
|
- break;
|
|
|
|
- case 0x0B:
|
|
|
|
- // 遥测 测量值 标度化值 遥测
|
|
|
|
- break;
|
|
|
|
- case 0x66:
|
|
|
|
- // 读单个参数
|
|
|
|
- break;
|
|
|
|
- case (byte) 0x84:
|
|
|
|
- // 读多个参数
|
|
|
|
- break;
|
|
|
|
- case 0x30:
|
|
|
|
- // 预置单个参数命令
|
|
|
|
- break;
|
|
|
|
- case (byte) 0x88:
|
|
|
|
- // 预置多个个参数
|
|
|
|
- break;
|
|
|
|
- default :
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 根据类型对数据的值进行解析
|
|
|
|
+ */
|
|
|
|
+ private static void setMessageValue(MessageDetail ruleDetail104, MessageInfo messageObj) {
|
|
|
|
+ switch (ruleDetail104.getTypeIdentifier().getValue()) {
|
|
|
|
+ case 0x09:
|
|
|
|
+ // 遥测 测量值 归一化值 遥测
|
|
|
|
+ case 0x0B:
|
|
|
|
+ // 遥测 测量值 标度化值 遥测
|
|
|
|
+ case 0x0D:
|
|
|
|
+ // 遥测 测量值 标度化值 遥测, 4个字节转换
|
|
|
|
+ messageObj.setValue(ByteUtil.byteToFloatValue(messageObj.getMessageInfos()));
|
|
|
|
+ break;
|
|
|
|
+ case 0x66:
|
|
|
|
+ // 读单个参数
|
|
|
|
+ break;
|
|
|
|
+ case (byte) 0x84:
|
|
|
|
+ // 读多个参数
|
|
|
|
+ break;
|
|
|
|
+ case 0x30:
|
|
|
|
+ // 预置单个参数命令
|
|
|
|
+ break;
|
|
|
|
+ case (byte) 0x88:
|
|
|
|
+ // 预置多个个参数
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
- /**
|
|
|
|
- * 根据类型标识返回消息长度
|
|
|
|
- */
|
|
|
|
- private static int getMessageLength(MessageDetail ruleDetail104) {
|
|
|
|
- //log.info("根据类型标识返回消息长度: " + JSON.toJSONString(ruleDetail104));
|
|
|
|
- log.info("返回消息长度: " + ruleDetail104.getTypeIdentifier().getMessageLength());
|
|
|
|
- return ruleDetail104.getTypeIdentifier().getMessageLength();
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 根据类型标识返回消息长度
|
|
|
|
+ */
|
|
|
|
+ private static int getMessageLength(MessageDetail ruleDetail104) {
|
|
|
|
+ //log.info("根据类型标识返回消息长度: " + JSON.toJSONString(ruleDetail104));
|
|
|
|
+ log.info("返回消息长度: " + ruleDetail104.getMeasgLength());
|
|
|
|
+ if (ruleDetail104.getMessages() != null) {
|
|
|
|
+ log.info("返回message size: " + ruleDetail104.getMessages().size());
|
|
|
|
+ }
|
|
|
|
+ log.info("返回消息byte长度: " + ruleDetail104.getTypeIdentifier().getMessageLength());
|
|
|
|
+ return ruleDetail104.getTypeIdentifier().getMessageLength();
|
|
// int messageLength = 0;
|
|
// int messageLength = 0;
|
|
// switch (ruleDetail104.getTypeIdentifier().getValue()) {
|
|
// switch (ruleDetail104.getTypeIdentifier().getValue()) {
|
|
// case 0x01:
|
|
// case 0x01:
|
|
@@ -270,5 +279,5 @@ public class Decoder104 {
|
|
// messageLength = 0;
|
|
// messageLength = 0;
|
|
// }
|
|
// }
|
|
// return messageLength;
|
|
// return messageLength;
|
|
- }
|
|
|
|
|
|
+ }
|
|
}
|
|
}
|