From e29b2f68e2062688c2d40209ba434e3e7932b92e Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期一, 02 十二月 2024 16:09:03 +0800 Subject: [PATCH] 修改升级数据中的CRC16验证算法,注意其是大端模块,与其他部分不一样 --- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java | 7 ++- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java | 21 +++++----- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java | 8 +++- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java | 39 +++++-------------- 4 files changed, 33 insertions(+), 42 deletions(-) diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java index f33e72c..2e4b312 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java @@ -93,9 +93,12 @@ } public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception { - short crc = new CRC16().CRC16_table(bsNoTail, 0, bsNoTail.length -1) ; + int crc = new CRC16().CRC16_table(bsNoTail, 0, bsNoTail.length -1) ; + byte[] crcBs = new byte[4] ; + ByteUtil.int2Bytes_BE(crcBs, crc, 0); byte[] bytes = new byte[ProtocolConstantV206V1.UG_lenTail] ; - ByteUtil.short2Bytes_LE(bytes, crc, 0); + bytes[0] = crcBs[3] ; + bytes[1] = crcBs[4] ; bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ; return bytes ; } diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java index 71b7883..eafe829 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java @@ -1,5 +1,6 @@ package com.dy.common.mw.protocol.p206V2.parse.global; +import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1; import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2; import com.dy.common.util.*; @@ -95,9 +96,12 @@ public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception { int crc = new CRC16().CRC16_table(bsNoTail, 0, bsNoTail.length -1) ; + byte[] crcBs = new byte[4] ; + ByteUtil.int2Bytes_BE(crcBs, crc, 0); byte[] bytes = new byte[ProtocolConstantV206V2.UG_lenTail] ; - ByteUtilUnsigned.short2Bytes_LE(bytes, crc, 0); - bytes[2] = ProtocolConstantV206V2.P_Tail_Byte ; + bytes[0] = crcBs[3] ; + bytes[1] = crcBs[4] ; + bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ; return bytes ; } } diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java index 7468ba0..2e8f20f 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java @@ -1,7 +1,5 @@ package com.dy.common.mw.protocol.p206V202404.parse.global; -import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1; -import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2; import com.dy.common.mw.protocol.p206V202404.CommonV202404; import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404; import com.dy.common.util.*; @@ -142,8 +140,8 @@ } public static void createLen(byte[] bsNoTail) throws Exception { - int len = bsNoTail.length - ProtocolConstantV206V1.lenHead2ctrl; - bsNoTail[ProtocolConstantV206V1.dataLenIndex] = (byte)len ; + int len = bsNoTail.length - ProtocolConstantV206V202404.lenHead2ctrl; + bsNoTail[ProtocolConstantV206V202404.dataLenIndex] = (byte)len ; } public static void createLen4PUg(byte[] bytes) throws Exception { @@ -159,18 +157,21 @@ } public static byte[] createCrcTail(byte[] bsNoTail) throws Exception { - int crc = new CRC8_for_2_0().CRC8(bsNoTail, ProtocolConstantV206V1.ctrlIndex, bsNoTail.length -1) ; - byte[] bytes = new byte[ProtocolConstantV206V1.lenTail] ; + int crc = new CRC8_for_2_0().CRC8(bsNoTail, ProtocolConstantV206V202404.ctrlIndex, bsNoTail.length -1) ; + byte[] bytes = new byte[ProtocolConstantV206V202404.lenTail] ; bytes[0] = (byte)crc ; - bytes[1] = ProtocolConstantV206V1.P_Tail_Byte ; + bytes[1] = ProtocolConstantV206V202404.P_Tail_Byte ; return bytes ; } public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception { int crc = new CRC16().CRC16_table(bsNoTail, 0, bsNoTail.length -1) ; - byte[] bytes = new byte[ProtocolConstantV206V2.UG_lenTail] ; - ByteUtilUnsigned.short2Bytes_LE(bytes, crc, 0); - bytes[2] = ProtocolConstantV206V2.P_Tail_Byte ; + byte[] crcBs = new byte[4] ; + ByteUtil.int2Bytes_BE(crcBs, crc, 0); + byte[] bytes = new byte[ProtocolConstantV206V202404.UG_lenTail] ; + bytes[0] = crcBs[3] ; + bytes[1] = crcBs[4] ; + bytes[2] = ProtocolConstantV206V202404.P_Tail_Byte ; return bytes ; } diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java index 3b66baf..307e1af 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java @@ -95,13 +95,13 @@ * @return CRC */ @SuppressWarnings("unused") - public short CRC16_table(byte[] bs, int startIndex, int endIndex) { - short x ; - short crc = (short)0xffff; + public int CRC16_table(byte[] bs, int startIndex, int endIndex) { + int x ; + int crc = 0xffff; if(bs != null && bs.length >= endIndex + 1){ for (int i = startIndex ; i <= endIndex; i++){ - x = (short)(crc ^ bs[i]) ; - crc = (short)((crc >> 8) ^ crc16_rev_table[x & 0x00FF]) ; + x = (crc ^ bs[i]) ; + crc = ((crc >> 8) ^ crc16_rev_table[x & 0x00FF]) ; } } return crc ; @@ -142,31 +142,14 @@ } public static void main(String[] args) throws Exception { - //String hex = "AA0024AA - // 16015301 - // 15059980 - // 00011000 - // 00014A00 - // 5D4D5D4D - // 00004000 - // AAC616" ; + int s = 62430 ; + //String hex = "AA0018AA16015301150599800001100000014A005D4D5D4D00004000AA7E16" ; String hex = "AA0018AA16015301150599800001100000014A005D4D5D4D00004000" ; byte[] bs = ByteUtil.hex2Bytes(hex) ; - for(int i = 0 ; i < bs.length - 2 ; i++){ - short crc = new CRC16().CRC16_table(bs, i , bs.length - 1) ; - byte[] bytes = new byte[ProtocolConstantV206V1.UG_lenTail] ; - ByteUtil.short2Bytes_LE(bytes, crc, 0); - bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ; - System.out.println(ByteUtil.bytes2Hex(bytes, true)) ; - } -// System.out.println("==============================") ; -// for(int i = 4 ; i < bs.length ; i++){ -// short crc = new CRC16().CRC16_table(bs, 0 , i) ; -// byte[] bytes = new byte[ProtocolConstantV206V1.UG_lenTail] ; -// ByteUtil.short2Bytes_LE(bytes, crc, 0); -// bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ; -// System.out.println(ByteUtil.bytes2Hex(bytes, true)) ; -// } + int crc = new CRC16().CRC16_table(bs, 0 , bs.length - 1) ; + byte[] crcBs = new byte[4] ; + ByteUtil.int2Bytes_BE(crcBs, crc, 0); + System.out.println(ByteUtil.bytes2Hex(crcBs, true)) ; } } -- Gitblit v1.8.0