From bda423b1aae1d5322116511651ae03a54cdcd231 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期二, 26 十一月 2024 17:25:39 +0800 Subject: [PATCH] 1、几个测试模块系统的log4j.xml配置中的编码修改; 2、RTU升级模拟器增加命令行设置服务端IP和端口功能; 3、应王江海要求,井电双控协议中也实现远程升级功能,因井电双控协议、阀控器协议不同,而双方协议中的升级子协议相同,所以通信中间件做增量开发、适应性修改,以适应这种混合协议情况,同时也提高通信中间件运行效率。 --- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java | 131 ++++++++++++++++++++++++++++++++++++------- 1 files changed, 109 insertions(+), 22 deletions(-) diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java index a0d3c47..e13430e 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java @@ -1,30 +1,72 @@ package com.dy.common.mw.protocol.p206V2; +import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr; +import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1; import com.dy.common.util.ByteUtil; import com.dy.common.util.ByteUtilUnsigned; +import com.dy.common.util.CRC16; import com.dy.common.util.CRC8_for_2_0; +import org.apache.mina.core.session.IoSession; public class CommonV2 { + + /** + * 鍦↖o浼氳瘽涓缃崗璁悕绉板強鐗堟湰鍙� + * @param ioSession 浼氳瘽 + */ + public void setThisProtocolArr2IoSession(IoSession ioSession){ + ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolName) ; + ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolVer) ; + } /** * 妫�鏌ュご * @param bs 涓婅瀛楄妭鏁扮粍 * @return true鏄�,false鍚� * @throws Exception 寮傚父 */ - public Boolean isThisProtocolHead(byte[] bs) throws Exception{ + public Boolean[] isThisProtocolHead(byte[] bs) throws Exception{ if(bs == null){ return null ; }else if(bs.length >= (ProtocolConstantV206V2.ctrlIndex) && bs[ProtocolConstantV206V2.headFlag1Index] == ProtocolConstantV206V2.P_Head_Byte && bs[ProtocolConstantV206V2.headFlag2Index] == ProtocolConstantV206V2.P_Head_Byte){ Short vs = this.parseVersion(bs) ; - return vs.shortValue() == ProtocolConstantV206V2.protocolVer.shortValue() ; + if(vs.shortValue() == ProtocolConstantV206V2.protocolVer){ + return new Boolean[]{true, true}; + }else{ + return new Boolean[]{false, true}; + } + }else if(bs.length >= (ProtocolConstantV206V2.UG_codeIndex) + && bs[0] == ProtocolConstantV206V2.UG_P_Head_Byte + && bs[3] == ProtocolConstantV206V2.UG_P_Head_Byte){ + return new Boolean[]{true, false} ; }else{ - return false ; + return new Boolean[]{false, false} ; } } + /** + * 妫�鏌ュ崗璁被鍨� + * @param bs 涓婅瀛楄妭鏁扮粍 + * @return 鍗忚绫诲瀷 + * @throws Exception 寮傚父 + */ + public Boolean protocolType_p206TrueUgFalse(byte[] bs){ + if(bs == null){ + return null ; + }else if(bs.length >= (ProtocolConstantV206V2.ctrlIndex) + && bs[0] == ProtocolConstantV206V2.P_Head_Byte + && bs[2] == ProtocolConstantV206V2.P_Head_Byte){ + return true ; + }else if(bs.length >= (ProtocolConstantV206V2.UG_codeIndex) + && bs[0] == ProtocolConstantV206V2.UG_P_Head_Byte + && bs[3] == ProtocolConstantV206V2.UG_P_Head_Byte){ + return false ; + }else{ + return null ; + } + } /** * 鍒嗘瀽鐗堟湰鍙� * @param bs @@ -33,18 +75,7 @@ public Short parseVersion(byte[] bs)throws Exception{ return ByteUtil.byte2PlusInt(bs[ProtocolConstantV206V2.versionIndex]) ; } - - /** - * 妫�鏌ュご - * @param bs 涓婅瀛楄妭鏁扮粍 - * @throws Exception 寮傚父 - */ - public void checkHead(byte[] bs) throws Exception{ - if(bs.length < ProtocolConstantV206V2.onLineDataMinLength || bs[0] != ProtocolConstantV206V2.P_Head_Byte || bs[2] != ProtocolConstantV206V2.P_Head_Byte){ - throw new Exception("涓婅鏁版嵁甯уご涓嶆纭紒") ; - } - } - + /** * 妫�鏌ュ熬 * @param bs 涓婅瀛楄妭鏁扮粍 @@ -60,24 +91,40 @@ /** * 鍒嗘瀽甯ч暱搴� * @param bs 涓婅瀛楄妭鏁扮粍 + * @param p206TrueUgFalse 206鍗忚涓簍rue锛屽崌绾у崗璁负false * @return 鏁版嵁闀垮害 * @throws Exception 寮傚父 */ - public int parseFrameLen(byte[] bs)throws Exception{ - int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V2.dataLenIndex) ; - return len + ProtocolConstantV206V2.lenHead2ctrl + ProtocolConstantV206V2.lenTail ; + public int parseFrameLen(byte[] bs, boolean p206TrueUgFalse)throws Exception{ + if(p206TrueUgFalse) { + int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V2.dataLenIndex); + return len + ProtocolConstantV206V2.lenHead2ctrl + ProtocolConstantV206V2.lenTail; + }else{ + int len = ByteUtilUnsigned.bytes2Short_BE(bs, ProtocolConstantV206V2.UG_dataLenIndex_start); + return len + ProtocolConstantV206V2.UG_lenHead2Cmd + ProtocolConstantV206V2.UG_lenTail; + } } - /** - * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟 + * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟(榛樿鏄潪鍗囩骇鍗忚) * @param bs 涓婅瀛楄妭鏁扮粍 * @return 鏁版嵁闀垮害 * @throws Exception 寮傚父 */ - public int parseDataLen(byte[] bs)throws Exception{ + public int parseDataLen4P206(byte[] bs)throws Exception{ int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V2.dataLenIndex) ; - return len + ProtocolConstantV206V2.lenHead2ctrl + ProtocolConstantV206V2.lenTail ; + return len - ProtocolConstantV206V2.lenCtrl - ProtocolConstantV206V2.lenRtuAddr ; + } + + /** + * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟(鍗囩骇鍗忚) + * @param bs 涓婅瀛楄妭鏁扮粍 + * @return 鏁版嵁闀垮害 + * @throws Exception 寮傚父 + */ + public int parseDataLen4Ug(byte[] bs)throws Exception{ + int len = ByteUtilUnsigned.bytes2Short_LE(bs, ProtocolConstantV206V2.UG_dataLenIndex_start) ; + return len - ProtocolConstantV206V2.UG_lenCmd - ProtocolConstantV206V2.UG_lenRtuAddr ; } @@ -124,6 +171,19 @@ } /** + * 鍒嗘瀽鍔熻兘鐮� + * @param bs 涓婅瀛楄妭鏁扮粍 + * @return 鍔熻兘鐮� + */ + public String parseCode(byte[] bs, boolean p206TrueUgFalse){ + if(p206TrueUgFalse) { + return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.codeIndex, 1); + }else{ + return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.UG_codeIndex, 2); + } + } + + /** * 鏍¢獙鍜屾鏌� * @param bs 涓婅瀛楄妭鏁扮粍 * @return 閫氳繃null锛屾湭閫氳繃杩斿洖鍘熷洜 @@ -140,6 +200,33 @@ } + /** + * 鏍¢獙鍜屾鏌� + * @param bs 涓婅瀛楄妭鏁扮粍 + * @param p206TrueUgFalse 206鍗忚涓簍rue锛屽崌绾у崗璁负false + * @return 閫氳繃null锛屾湭閫氳繃杩斿洖鍘熷洜 + * @throws Exception 寮傚父 + */ + public String checkCrc_str(byte[] bs, boolean p206TrueUgFalse) throws Exception { + if(p206TrueUgFalse){ + byte crcCompute = (byte)new CRC8_for_2_0().CRC8(bs, ProtocolConstantV206V1.ctrlIndex, bs.length - 3) ; + byte crcInBs = bs[bs.length - 2] ; + if(crcCompute == crcInBs){ + return null ; + }else{ + return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ; + } + }else{ + short crcCompute = new CRC16().CRC(bs, 0, bs.length - 4) ; + short crcInBs = ByteUtil.bytes2Short_BE(bs,bs.length - 3) ; + //int crcInBs = ByteUtilUnsigned.bytes2Short_BE(bs, bs.length - 3) ; + if(crcCompute == crcInBs){ + return null ; + }else{ + return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ; + } + } + } /* 鏋勯�犳帶鍒跺煙 D7 D6 D5锝濪4 D3锝濪0 -- Gitblit v1.8.0