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