From 120448e8c6826b453d5b96e9076d61479a987677 Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期六, 02 十二月 2023 10:42:18 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlParse.java            |   56 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java                    |  172 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java                |   89 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java                |   89 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java            |    6 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpConnect.java              |   14 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/resources/RtuDataDealTree.xml                                     |   16 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TkReceive.java                   |   31 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/resources/Tree_.xml                                               |   95 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Down.java                |   82 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TreeConfig.java                  |    6 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/pom.xml                                                                    |  122 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/RmiRequestVo.java               |   96 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/dbSv/RtuSv.java                  |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/AdapterImp_RtuDataUnit.java              |   19 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/PipIrrMwAcceptApplication.java                  |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/console/Command.java                   |    3 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskPool.java                    |  116 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ProtocolConstantV206V1_0_0.java      |   53 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/test/TestConflict.java                                |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java               |  142 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/Task.java                        |   46 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskConfig.java                  |    9 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java                |   87 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java            |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java                    |  149 +++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java                 |   60 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java               |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/PrefixedDataAvailableV1_0_1.java     |  130 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java                      |   45 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java             |  118 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java           |   74 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml                                                                |   15 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TkRtuData.java                   |   29 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/dbSv/说明.txt                      |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataCache.java                |   70 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java     |    5 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java       |   26 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskSurpport.java                |  132 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnit.java                 |   47 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCdC0Vo.java                      |   56 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java                                     |  106 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java                    |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TreeParse.java                   |  173 +++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnitConfigVo.java         |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java                |   89 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java           |   38 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnitAdapter.java          |   10 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java |   27 
 49 files changed, 2,679 insertions(+), 103 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java
new file mode 100644
index 0000000..c1b8d7f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java
@@ -0,0 +1,172 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.common.util.CRC8_for_2_0;
+
+
+public class CommonV1_0_1 {
+	/**
+	 * 妫�鏌ュご
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return true鏄�,false鍚�
+	 * @throws Exception  寮傚父
+	 */
+	public Boolean isThisProtocolHead(byte[] bs) throws Exception{
+		if(bs == null){
+			return null ;
+		}else if(bs.length >= (ProtocolConstantV206V1_0_0.ctrlIndex - 1)
+				&& bs[0] == ProtocolConstantV206V1_0_0.P_Head_Byte
+				&& bs[2] == ProtocolConstantV206V1_0_0.P_Head_Byte){
+			//String vs = this.parseVersion(bs) ;
+			//return vs.equals(ProtocolConstantV206V1_0_0.version);
+			return true ;
+		}else{
+			return false ;
+		}
+	}
+	
+	/**
+	 * 妫�鏌ュご
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @throws Exception 寮傚父
+	 */
+	public void checkHead(byte[] bs) throws Exception{
+		if(bs.length < 13 || bs[0] != ProtocolConstantV206V1_0_0.P_Head_Byte || bs[2] != ProtocolConstantV206V1_0_0.P_Head_Byte){
+			throw new Exception("涓婅鏁版嵁甯уご涓嶆纭紒") ;
+		}
+	}
+	
+	/**
+	 * 妫�鏌ュ熬
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @throws Exception 寮傚父
+	 */
+	public void checkTail(byte[] bs) throws Exception{
+		if(bs.length < 1 || bs[bs.length - 1] != ProtocolConstantV206V1_0_0.P_Tail_Byte){
+			throw new Exception("涓婅鏁版嵁灏句笉姝g‘锛�") ;
+		}
+	}
+
+
+	/**
+	 * 鍒嗘瀽甯ч暱搴�
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return 鏁版嵁闀垮害
+	 * @throws Exception 寮傚父
+	 */
+	public int parseFrameLen(byte[] bs)throws Exception{
+		int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V1_0_0.dataLenIndex) ;
+		return len + ProtocolConstantV206V1_0_0.lenHead2ctrl + ProtocolConstantV206V1_0_0.lenTail ;
+	}
+
+
+	/**
+	 * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return 鏁版嵁闀垮害
+	 * @throws Exception 寮傚父
+	 */
+	public int parseDataLen(byte[] bs)throws Exception{
+		int len = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V1_0_0.dataLenIndex) ;
+		return len + ProtocolConstantV206V1_0_0.lenHead2ctrl + ProtocolConstantV206V1_0_0.lenTail ;
+	}
+
+
+	/**
+	 * 鍒嗘瀽Rtu鍦板潃
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return 鎺у埗鍣ㄥ湴鍧�
+	 * @throws Exception 寮傚父
+	 */
+	public String parseRtuAddr(byte[] bs)throws Exception{
+		String rtuAddrBCD = "" + ByteUtil.BCD2Long_BE(bs, ProtocolConstantV206V1_0_0.rtuAddr1Index_start, ProtocolConstantV206V1_0_0.rtuAddr1Index_end) ;
+		String rtuAddrStr = "" + ByteUtilUnsigned.bytes2Short_BE(bs, ProtocolConstantV206V1_0_0.rtuAddr2Index_start) ;
+		while(rtuAddrStr.length() < 4){
+			rtuAddrStr = "0" + rtuAddrStr ;
+		}
+		return rtuAddrBCD + rtuAddrStr ;
+	}
+
+	/**
+	 * 鍒嗘瀽鍔熻兘鐮�
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return 鍔熻兘鐮�
+	 */
+	public String parseCode(byte[] bs){
+		return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1_0_0.codeIndex, 1) ;
+	}
+
+	/**
+	 * 鏍¢獙鍜屾鏌�
+	 * @param bs  涓婅瀛楄妭鏁扮粍
+	 * @return 閫氳繃null锛屾湭閫氳繃杩斿洖鍘熷洜
+	 * @throws Exception 寮傚父
+	 */
+	public String checkCrc_str(byte[] bs) throws Exception {
+		byte crcCompute = (byte)new CRC8_for_2_0().CRC8(bs, ProtocolConstantV206V1_0_0.ctrlIndex, bs.length - 3) ;
+		byte crcInBs = bs[bs.length - 2] ;
+		if(crcCompute == crcInBs){
+			return null ;
+		}else{
+			return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ;
+		}
+	}
+
+
+	/*
+	鏋勯�犳帶鍒跺煙
+	D7                  D6                  D5锝濪4            D3锝濪0
+	浼犺緭鏂瑰悜浣� DIR        鎷嗗垎鏍囧織浣� DIV       甯ц鏁颁綅 FCB       鍔熻兘鐮�
+	*/
+	public byte createCtrl(byte dir, byte funcCode){
+		byte b = dir;//(byte)0x80//鎺у埗鍩燂細DIR=1锛岃〃绀烘甯ф姤鏂囨槸鐢辩粓绔彂鍑虹殑涓婅鎶ユ枃锛�
+		b = (byte)(b | funcCode) ;
+		//FCB == 3
+		b = (byte)(b | (byte)0x18) ;
+		//DIV = 0
+		//DIR = 0
+		return b ;
+	}
+
+	/**
+	 * 寰楀埌鍏冲紑闃�绫诲瀷鍚嶇О
+	 * @param type 瀛楄妭
+	 * @return 鍚嶇О
+	 */
+	public static String openCloseValveType(byte type){
+		return switch (type) {
+			case 1 -> "鍒峰崱寮�闃�";
+			case 2 -> "鍒峰崱鍏抽榾";
+			case 3 -> "涓績绔欏紑闃�";
+			case 4 -> "涓績绔欏叧闃�";
+			case 5 -> "娆犺垂鍏抽榾";
+			case 6 -> "娴侀噺璁℃晠闅滃叧闃�";
+			case 7 -> "绱ф�ュ叧闃�";
+			case 8 -> "鐢ㄦ埛杩滅▼寮�闃�";
+			case 9 -> "鐢ㄦ埛杩滅▼鍏抽榾";
+			default -> "鏈煡";
+		};
+	}
+	
+	/*
+	 * 鍒嗘瀽鐗堟湰鍙�
+	 * @param bs  涓婅瀛楄妭鏁扮粍
+	 * @return 鐗堟湰鍙�
+	 * @throws Exception 寮傚父
+	public String parseVersion(byte[] bs)throws Exception{
+		short ver = ByteUtilUnsigned.byte2Byte(bs, ProtocolConstantV206V1_0_0.versionIndex) ;
+		char[] cs = ("" + ver).toCharArray() ;
+		StringBuilder vs = new StringBuilder() ;
+		for(byte i = 0 ; i < cs.length; i++){
+			if(i == 0){
+				vs.append(cs[i]) ;
+			}else{
+				vs.append(".").append(cs[i]) ;
+			}
+		}
+		return vs.toString() ;
+	}
+	*/
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCdC0Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCdC0Vo.java
new file mode 100644
index 0000000..79a731d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCdC0Vo.java
@@ -0,0 +1,56 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import lombok.Data;
+
+@Data
+public class DataCdC0Vo {
+    public Double instantAmount; //鐬椂娴侀噺锛�5瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~9999999.999锛屽崟浣嶄负m3/h銆�
+    public Double totalAmount; //绱娴侀噺锛�5瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~9999999999锛屽崟浣嶄负m3銆�
+    public Double lossAmount; //鎹熷け娴侀噺锛�5瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~9999999999锛屽崟浣嶄负m3銆�
+    public Double waterPress; //姘村帇锛�4瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~999999.99锛屽崟浣嶄负KPa銆�
+    public Double batteryVolt;//钃勭數姹犵數鍘�:4瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~99.99锛屽崟浣嶄负V銆�
+    public Double sunVolt ;//澶槼鑳界數鍘�:4瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~99.99锛屽崟浣嶄负V銆�
+    public Integer signal; //淇″彿寮哄害锛�1瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~99銆�
+    public String rtuDt ;//鎺у埗鍣ㄦ椂閽�
+    public DataAlarmVo alarmVo ;//鎶ヨ
+    public DataStateVo stateVo ;//鐘舵��
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   缁堢鑷姤瀹炴椂鏁版嵁:\n");
+        sb.append("      鐬椂娴侀噺锛�");
+        sb.append(instantAmount==null?"":instantAmount);
+        sb.append("\n");
+        sb.append("      绱娴侀噺锛�");
+        sb.append(totalAmount==null?"":totalAmount);
+        sb.append("\n");
+        sb.append("      鎹熷け娴侀噺锛�");
+        sb.append(lossAmount==null?"":lossAmount);
+        sb.append("\n");
+        sb.append("      姘村帇锛�");
+        sb.append(waterPress==null?"":waterPress);
+        sb.append("\n");
+        sb.append("      钃勭數姹犵數鍘嬶細");
+        sb.append(batteryVolt==null?"":batteryVolt);
+        sb.append("\n");
+        sb.append("      澶槼鑳界數鍘嬶細");
+        sb.append(sunVolt==null?"":sunVolt);
+        sb.append("\n");
+        sb.append("      淇″彿寮哄害锛�");
+        sb.append(signal==null?"":signal);
+        sb.append("\n");
+        sb.append("      鎺у埗鍣ㄦ椂閽燂細");
+        sb.append(rtuDt==null?"":rtuDt);
+        sb.append("\n");
+        if(alarmVo != null){
+            sb.append(alarmVo.toString());
+            sb.append("\n");
+        }
+        if(stateVo != null){
+            sb.append(stateVo.toString());
+            sb.append("\n");
+        }
+
+        return sb.toString() ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java
new file mode 100644
index 0000000..c8c3116
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java
@@ -0,0 +1,45 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import lombok.Data;
+
+@Data
+public class DataV1_0_1 implements java.io.Serializable{
+	
+	private static final long serialVersionUID = 202211271110001L;
+	
+	public String rtuAddr ;//RtuAddr
+
+	public DataCd02Vo dataCd02Vo;//閾捐矾妫�娴�
+	public DataCdC0Vo dataCdC0Vo;//缁堢鑷姤瀹炴椂鏁版嵁
+	public DataCd83OpenVo dataCd83OpenVo;//寮�闃�鑷姤
+	public DataCd83CloseVo dataCd83CloseVo;//鍏抽榾鑷姤
+	public DataCd84Vo dataCd84Vo;//寮�闃�宸ヤ綔鎶�
+	public DataCd71Vo dataCd71Vo;//鏌ヨ闃�闂ㄧ姸鎬�
+
+	public String dt ;//閫氫俊涓棿浠朵骇鐢熷彂鎶ユ椂闂�(yyyy-MM-dd hh:mm:ss)
+
+	public String toString(){
+		StringBuffer sb = new StringBuffer() ;
+		sb.append("   鎺у埗鍣ㄥ湴鍧� : " + (rtuAddr==null?"":rtuAddr) + "\n") ;
+		sb.append("   缁堢鏁版嵁:\n") ;
+		if(dataCd02Vo != null){
+			sb.append(dataCd02Vo.toString()) ;
+		}
+		if(dataCdC0Vo != null){
+			sb.append(dataCdC0Vo.toString()) ;
+		}
+		if(dataCd83OpenVo != null){
+			sb.append(dataCd83OpenVo.toString()) ;
+		}
+		if(dataCd83CloseVo != null){
+			sb.append(dataCd83CloseVo.toString()) ;
+		}
+		if(dataCd84Vo != null){
+			sb.append(dataCd84Vo.toString()) ;
+		}
+		if(dataCd71Vo != null){
+			sb.append(dataCd71Vo.toString()) ;
+		}
+		return sb.toString() ;
+	}
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java
new file mode 100644
index 0000000..38aac6a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java
@@ -0,0 +1,149 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.util.DateTime;
+
+import java.net.URI;
+import java.net.URL;
+
+@AnnotationDriver(name= ProtocolConstantV206V1_0_0.protocolName)
+public class DriverV1_0_1 extends Driver {
+	
+	private static String scanRootPackage = "com.dy.common.mw.protocol.p206V1_0_0." ;
+	
+	//鍦―river涓槸鍗曚緥锛岄殢Driver鐨勫崟渚嬪璞″湪鍗曠嚎绋嬩腑杩愯
+	private ParseParamsForUpV1_0_1 upCpParams ;
+	private ParseParamsForDownV1_0_1 downCpParams ;
+	
+	private Boolean reportOrResponse_trueOrFalse = null ;
+	private String rtuAddrInData = null ;
+
+	public DriverV1_0_1(){
+		upCpParams = new ParseParamsForUpV1_0_1() ;
+		downCpParams = new ParseParamsForDownV1_0_1() ;
+	}
+
+
+	/**
+	 * 鎵弿璇嗗埆鍔熻兘鐮佹敞瑙g被
+	 */
+	@Override
+	public void scanAnnotationCode() throws Exception{
+		if(!scanRootPackage.endsWith(".")){
+			scanRootPackage += "." ;
+		}
+		URL url = this.getClass().getResource("/" + scanRootPackage.replace('.', '/'));
+		URI uri = new URI(url.toString());  
+		super.doScanAnnotationCode(this, ProtocolConstantV206V1_0_0.protocolName, uri, scanRootPackage) ;
+	}
+
+	/**
+	 * 瑙f瀽涓婅鏁版嵁
+	 * @param isLowPower 鏄惁鍦ㄤ綆鍔熻�楃幆澧冧笅杩愯
+	 * @param rtuAddr
+	 * @param upBuffer
+	 * @param callback
+	 * @param upHex
+	 * @return
+	 */
+	@Override
+	public MidResult[] parseData(Boolean isLowPower, String rtuAddr, byte[] upBuffer, String upHex, DriverParserDataCallback callback, Object... params) {
+		reportOrResponse_trueOrFalse = null ;
+		boolean isFail = false ;
+		String upCode = null ;
+		try{
+			CommonV1_0_1 cp = new CommonV1_0_1() ;
+			cp.checkHead(upBuffer) ;
+			cp.checkTail(upBuffer) ;
+			String crcStr = cp.checkCrc_str(upBuffer) ;
+			if(crcStr != null){
+				return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, rtuAddr, "涓ラ噸閿欒锛屼笂琛屾暟鎹瓹RC妫�鏌ュけ璐ワ紝" + crcStr, null))} ;
+			}
+			rtuAddr = cp.parseRtuAddr(upBuffer) ;
+			upCode = cp.parseCode(upBuffer) ;
+			if(upCode == null){
+				return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, rtuAddr, "涓ラ噸閿欒锛屾湭鑳戒粠涓婅鏁版嵁涓В鏋愬嚭鍔熻兘鐮侊紒", null))} ;
+			}
+			//Integer dataLen = cp.parseFrameLen(upBuffer) ;
+			Data upData = new Data() ;
+			upData.setRtuAddr(rtuAddr) ;
+			upData.setProtocol(ProtocolConstantV206V1_0_0.protocolName);
+			upData.setCode(upCode) ;
+			upData.setHex(upHex) ;
+			
+			
+			DataV1_0_1 dV1_0_1 = new DataV1_0_1() ;
+			//dV1_0_1.version = cp.parseVersion(upBuffer) ;
+			dV1_0_1.rtuAddr = rtuAddr ;
+			dV1_0_1.dt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+			
+			upData.setSubData(dV1_0_1) ;
+			
+			this.upCpParams.clear();
+			this.upCpParams.setValue(ProtocolConstantV206V1_0_0.protocolName, 
+					rtuAddr, 
+					upCode,
+					upHex, 
+					upBuffer, 
+					upData);
+			CodeParse codeParse = this.getUpCodeParser(upCode) ;
+			if(codeParse == null){
+				return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, rtuAddr, "涓ラ噸閿欒锛屾湭鑳藉緱鍒颁笂琛屾暟鎹姛鑳界爜" + upCode + "澶勭悊绫�!", null))} ;
+			}else{
+				return codeParse.parse(isLowPower, this.upCpParams, new CodeParseCallback(){
+					@Override
+					public void callback(Boolean flag) {
+						reportOrResponse_trueOrFalse = flag ;
+						rtuAddrInData = dV1_0_1.getRtuAddr() ;
+					}
+				});
+			}
+				
+		} catch (Exception e) {
+			isFail = true ;
+			return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, rtuAddr, "涓ラ噸閿欒锛屽垎鏋怰tu鏁版嵁鍑洪敊锛佹暟鎹负锛�" + upHex + (e.getMessage() == null?"":("锛屽嚭閿欎俊鎭細" + e.getMessage())), e))} ;
+		} finally{
+			callback.callback(rtuAddr, upCode, upHex, reportOrResponse_trueOrFalse, isFail, rtuAddrInData);
+		}
+	}
+	/**
+	 * 鏋勯�犱笅琛屾暟鎹紙鍛戒护锛�
+	 * @param isLowPower 鏄惁鍦ㄤ綆鍔熻�楃幆澧冧笅杩愯
+	 * @param command 鍛戒护
+	 * @return
+	 */
+	@Override
+	public MidResult[] createCommand(Boolean isLowPower, Command command, Object... params) {
+		String rtuAddr = command.getRtuAddr() ;
+		if(rtuAddr == null){
+			return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, null, "涓ラ噸閿欒锛屽懡浠や腑Rtu鍦板潃涓虹┖锛屼笉鑳芥瀯寤轰换浣曞懡浠わ紒", null))} ;
+		}
+		try {
+			String commandCode = command.getCode() ;
+			
+			this.downCpParams.clear();
+			this.downCpParams.setValue(
+					ProtocolConstantV206V1_0_0.protocolName, 
+					rtuAddr, 
+					command.getId(),
+					commandCode, 
+					command.getParam(), 
+					command.getAttachment());
+			
+			if(commandCode == null){
+				return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, rtuAddr,  "涓ラ噸閿欒锛屽懡浠や腑鍔熻兘鐮佷负绌猴紝涓嶈兘鏋勫缓浠讳綍鍛戒护锛�", null))} ;
+			}else{
+				CodeParse codeParse = this.getDownCodeParser(commandCode) ;
+				if(codeParse == null){
+					return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, rtuAddr,  "涓ラ噸閿欒锛屾湭鑳藉緱鍒颁笅琛屾暟鎹姛鑳界爜" + commandCode + "澶勭悊绫�!", null))} ;
+				}else{
+					return codeParse.parse(isLowPower, this.downCpParams, null);
+				}
+			}
+		} catch (Exception e) {
+			return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, rtuAddr,  "涓ラ噸閿欒锛屾瀯閫犱笅琛屾暟鎹嚭閿欙紒鍛戒护涓猴細" + command.toString(), e))} ;
+		}
+	}
+
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/PrefixedDataAvailableV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/PrefixedDataAvailableV1_0_1.java
new file mode 100644
index 0000000..b991de9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/PrefixedDataAvailableV1_0_1.java
@@ -0,0 +1,130 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import com.dy.common.mw.channel.tcp.PrefixedDataAvailableStatus;
+import com.dy.common.mw.protocol.AnnotationPrefixedDataAvailable;
+import com.dy.common.mw.protocol.PrefixedDataAvailable;
+import com.dy.common.util.ByteUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.mina.core.buffer.BufferDataException;
+import org.apache.mina.core.buffer.IoBuffer;
+
+
+@AnnotationPrefixedDataAvailable(
+		protocolName = ProtocolConstantV206V1_0_0.protocolName,
+		priority = ProtocolConstantV206V1_0_0.priority,
+		onLineDataMinLength = ProtocolConstantV206V1_0_0.onLineDataMinLength,
+		headMinLength = ProtocolConstantV206V1_0_0.headMinLength)
+@SuppressWarnings("unused")
+public class PrefixedDataAvailableV1_0_1 implements PrefixedDataAvailable {
+
+	private static final Logger log = LogManager.getLogger(PrefixedDataAvailableV1_0_1.class) ;
+	
+	private static final String protocolName = ProtocolConstantV206V1_0_0.protocolName ;
+
+
+	/**
+	 * 鍒嗘瀽涓婄嚎鏁版嵁(缃戠粶杩炴帴鍚庣涓�鍖呮暟鎹�)鏄惁鍙幏寰�
+	 * @param in IoBuffer
+	 * @param remain 涓�瀹氭椂澶т簬0鐨勬暟鎹�
+	 * @param minDataLength 鏈�灏忔暟鎹暱搴�
+	 * @param maxDataLength 鏈�澶ф暟鎹暱搴︼紝杈惧埌鎴栬秴杩囨闀垮害锛岃涓烘槸鍨冨溇鏁版嵁銆備緥濡傦細鏁版嵁澶撮儴鏄纭殑锛屼絾鍚堟硶鏁版嵁缁撳熬鎬讳笉鍑虹幇锛岃涓烘鏁版嵁鍨冨溇鏁版嵁
+	 * @return 涓嶆槸鏈崗璁暟鎹椂杩斿洖绌�
+	 * @throws Exception 寮傚父
+	 */
+	public PrefixedDataAvailableStatus forOnLine(IoBuffer in, 
+			int remain,
+			int minDataLength, //瀵瑰簲ProtocolConstantV2_0.onLineDataMinLength
+			int maxDataLength //瀵瑰簲ProtocolConstant.errorMaxLength
+			) throws Exception {
+		
+		int oldPosition = in.position() ;
+		byte[] preByte = new byte[remain];
+		in.get(preByte) ;
+		//in.position(0) ;//閿欒鐢ㄦ硶锛屽鏋滃彂鐢熺矘鍖呮暟鎹紝灏嗕細姝诲惊鐜�
+		in.position(oldPosition) ;
+
+		return this.doForData(preByte, minDataLength, maxDataLength) ;
+	}
+
+	/**
+	 * 鍒嗘瀽涓婄嚎鍚�(缃戠粶杩炴帴鍚庨潪绗竴鍖呮暟鎹�)鏄惁鍙幏寰�
+	 * @param in IoBuffer
+	 * @param remain  鍓╀綑
+	 * @param minDataLength 鏈�灏忔暟鎹暱搴�
+	 * @param maxDataLength 鏈�澶ф暟鎹暱搴�
+	 * @return PrefixedDataAvailableStatus
+	 * @throws Exception 寮傚父
+	 */
+	@Override
+	public PrefixedDataAvailableStatus forUpData(IoBuffer in, 
+			int remain,
+			int minDataLength,
+			int maxDataLength) throws Exception {
+		int oldPosition = in.position() ;
+		byte[] preByte = new byte[remain];
+		in.get(preByte) ;
+		//in.position(0) ;//閿欒鐢ㄦ硶锛屽鏋滃彂鐢熺矘鍖呮暟鎹紝灏嗕細姝诲惊鐜�
+		in.position(oldPosition) ;
+		
+		return this.doForData(preByte, minDataLength, maxDataLength) ;
+
+    }
+	/**
+	 * 杩涜鍒ゆ柇
+	 * @param preByte byte[]
+	 * @param minDataLength 鏈�灏忔暟鎹暱搴�
+	 * @param maxDataLength 鏈�澶ф暟鎹暱搴�
+	 * @return PrefixedDataAvailableStatus
+	 * @throws Exception 寮傚父
+	 */
+	private PrefixedDataAvailableStatus doForData(byte[] preByte, int minDataLength, int maxDataLength) throws Exception{
+		int remain = preByte.length ;
+    	
+        if (remain < minDataLength) {
+        	log.warn("鍩轰簬鍗忚锛�" + protocolName + "锛夊垽鏂暟鎹ご閮ㄥ彂鐢熸柇鍖呯幇璞°��") ;
+            return new PrefixedDataAvailableStatus().breaked() ;
+        }
+        
+        if(remain >= maxDataLength){
+			//瓒呭嚭浜嗘渶澶ч暱搴﹂檺鍒�,渚嬪锛氭暟鎹ご閮ㄦ槸姝g‘鐨勶紝浣嗗悎娉曟暟鎹粨灏炬�讳笉鍑虹幇锛岃涓烘鏁版嵁鍨冨溇鏁版嵁
+			return new PrefixedDataAvailableStatus().rubbish(remain) ;
+		}
+
+		
+        CommonV1_0_1 parseCommon = new CommonV1_0_1();
+		boolean isThisProtocolData = parseCommon.isThisProtocolHead(preByte) ;
+
+		if(!isThisProtocolData){
+			//涓嶆槸鏈崗璁暟鎹�
+			return null ;
+		}
+
+		Integer dataLen = parseCommon.parseFrameLen(preByte) ;
+
+		if(dataLen == null){
+			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
+			throw new BufferDataException("鏀跺埌鏁版嵁涔嬪抚鍓嶉儴锛�" + headHex + "锛屼絾涓ラ噸閿欒锛屽湪杩涜鏂寘涓庣矘鍖呮鏌ユ椂锛屾湭鑳藉緱鍒版暟鎹抚鐨勯暱搴︺��");
+		}
+		
+        if (dataLen <= 0 || dataLen > maxDataLength) {
+			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
+            throw new BufferDataException("鏀跺埌鏁版嵁涔嬪抚鍓嶉儴锛�" + headHex + "锛屼絾涓ラ噸閿欒锛屽湪杩涜鏂寘涓庣矘鍖呮鏌ユ椂锛屾暟鎹抚鐨勯暱搴�(" + dataLen + ")瓒呭嚭鍚堟硶鑼冨洿銆�");
+        }
+        
+        if(remain == dataLen){
+        	//涓嶆柇涓嶇矘
+            return new PrefixedDataAvailableStatus().completed(dataLen) ;
+        }else if(remain > dataLen){
+			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
+        	log.warn("鏀跺埌鏁版嵁涔嬪抚鍓嶉儴锛�" + headHex + "锛屼絾鍙戠敓绮樺寘鐜拌薄銆�") ;
+            return new PrefixedDataAvailableStatus().adjoined(dataLen) ;
+        }else{
+        	// remain < dataLen
+			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
+        	log.warn("鏀跺埌鏁版嵁涔嬪抚鍓嶉儴锛�" + headHex + "锛屼絾鍙戠敓鏂寘鐜拌薄銆�") ;
+            return new PrefixedDataAvailableStatus().breaked() ;
+        }
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ProtocolConstantV206V1_0_0.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ProtocolConstantV206V1_0_0.java
new file mode 100644
index 0000000..3ff2c20
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ProtocolConstantV206V1_0_0.java
@@ -0,0 +1,53 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+public class ProtocolConstantV206V1_0_0 {
+
+    public static final String version = "1.0.1" ;
+    public static final Byte versionByte = 101 ;
+
+    /**
+     * 娉ㄨВ鐩稿叧
+     */
+    public static final String protocolName = "p206V1_0_1" ;
+    public static final int priority = 1 ;//浼樺厛绾�
+    /**
+     * RTU涓婄嚎鏁版嵁锛堜笂绾垮悗绗竴鍖呮暟鎹級鏈�灏忛暱搴︼紝璁剧疆璇ュ睘鎬т互澶囪繘琛屽畬鏁存�ф鏌ワ紝
+     * 鍗虫柇鍖呮鏌ワ紝浣垮敖鍙兘鏀跺叏涓婄嚎鏁版嵁锛堝彇鍊艰寖鍥�1-100锛�
+     */
+    public static final int onLineDataMinLength = 13 ;//閲囩敤蹇冭烦涓婅鏁版嵁闀垮害
+
+    /**
+     * RTU涓婃姤鏁版嵁鐨勫ご閮ㄦ渶灏忛暱搴︼紝涓婃姤鏁版嵁涓紝鍙栬繖涓渶灏忛暱搴︾殑閮ㄥ垎鏁版嵁涓紝
+     * 瑕佷竴瀹氬寘鍚暟鎹抚闀垮害锛屼互澶囧彇鍑烘暟鎹抚闀垮害鏉ワ紝杩涜瀹屾暣鎬ф鏌ワ紝
+     * 鍗虫柇鍖呬笌绮樺寘妫�鏌�(鍙栧�艰寖鍥�0-100锛屽叾涓彇鍊间负0鏃讹紝琛ㄧずheadMinLength鏁版嵁鏃犱綔鐢紝鐢卞崗璁疄鐜版潵鎺у埗)
+     */
+    public static final int headMinLength = 3 ;
+
+
+    //甯ц捣濮�
+    public static final byte P_Head_Byte = (byte)0x68 ;
+    public static final byte P_Tail_Byte = (byte)0x16 ;
+
+    public static final byte P_Default_mode = (byte)0x0F ;//榛樿宸ヤ綔妯″紡
+
+    public static final String P_Head_Hex = "68" ;
+    public static final String P_Tail_Hex = "16" ;
+
+    public static final byte lenHead2ctrl = 3 ; //浠庡ご鍒版帶鍒跺煙锛堜笉鍖呮嫭锛夊瓧鑺傛暟缁勯暱搴�
+    public static final byte lenHead2Code = 10 ; //浠庡ご鍒板姛鑳界爜锛堝寘鎷級瀛楄妭鏁扮粍闀垮害
+    public static final byte lenTail = 2 ; //甯у熬閮ㄥ瓧鑺傛暟缁勯暱搴�
+    /**
+     * 鎵�鍦ㄥ瓧鑺傛暟缁勭殑浣嶇疆锛堜笅鏍囷級
+     */
+    public static final int dataLenIndex = 1 ;//甯ч暱搴︽墍鍦� 瀛楄妭鏁扮粍璧峰涓嬫爣
+    public static final int ctrlIndex = 3 ;//鎺у埗鍩熸墍鍦� 瀛楄妭鏁扮粍璧峰涓嬫爣
+    public static final int rtuAddr1Index_start = 4 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍寮�濮嬩笅鏍�
+    public static final int rtuAddr1Index_end = 6 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍寮�濮嬩笅鏍�
+    public static final int rtuAddr2Index_start = 7 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍鎴涓嬫爣
+    public static final int rtuAddr2Index_end = 8 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍鎴涓嬫爣
+    public static final int codeIndex = 9 ;//鍔熻兘鐮佸瓧鑺傛暟缁勪笅鏍�
+    public static final int dataIndex = 10 ;//鍏蜂綋鏁版嵁瀛楄妭鏁扮粍涓嬫爣
+
+
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Down.java
new file mode 100644
index 0000000..a045719
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Down.java
@@ -0,0 +1,82 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.*;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_02
+})
+public class Cd_02_Down  implements CodeParse {
+
+    //private static Logger log = LogManager.getLogger(Cd_02_Down.class);
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = 1 ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = true ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        byte[] bs = new byte[7] ;
+        bs[0] = (byte)0xF2 ;//鏁版嵁鍩燂細 1 涓瓧鑺傦紝F0 鐧诲綍锛� F1 閫�鍑虹櫥褰曪紝F2 鍦ㄧ嚎淇濇寔銆�
+        GlCreate.createTp(bs, 1);
+
+        bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java
new file mode 100644
index 0000000..4b269b6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java
@@ -0,0 +1,87 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_71
+})
+public class Cd_71_Down implements CodeParse {
+
+    //private static Logger log = LogManager.getLogger(Cd_71_Down.class);
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        byte[] bs = new byte[0] ;
+        //纭甯х殑鏁版嵁鍩熺敤浜庨仴娴嬬粓绔伐浣滄ā寮忕殑纭鎴栬浆鎹€�傛暟鎹负 1 涓瓧鑺� HEX锛�00H 鏃堕仴娴嬬粓
+        //绔湪鍏煎宸ヤ綔鐘舵�侊紱 01H 鏃堕仴娴嬬粓绔湪鑷姤宸ヤ綔鐘舵�侊紱 02H 鏃堕仴娴嬬粓绔湪鏌ヨ/搴旂瓟宸ヤ綔
+        //鐘舵�侊紱 03H 鏃堕仴娴嬬粓绔湪璋冭瘯/缁翠慨鐘舵�併��
+        bs[0] = (byte)0xF1;//鏁版嵁鍩�
+
+        bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
new file mode 100644
index 0000000..57be9e7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
@@ -0,0 +1,89 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_83
+})
+public class Cd_83_Down implements CodeParse {
+
+    //private static Logger log = LogManager.getLogger(Cd_C0_Down.class);
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = 1 ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = true ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        byte[] bs = new byte[7] ;
+        //纭甯х殑鏁版嵁鍩熺敤浜庨仴娴嬬粓绔伐浣滄ā寮忕殑纭鎴栬浆鎹€�傛暟鎹负 1 涓瓧鑺� HEX锛�00H 鏃堕仴娴嬬粓
+        //绔湪鍏煎宸ヤ綔鐘舵�侊紱 01H 鏃堕仴娴嬬粓绔湪鑷姤宸ヤ綔鐘舵�侊紱 02H 鏃堕仴娴嬬粓绔湪鏌ヨ/搴旂瓟宸ヤ綔
+        //鐘舵�侊紱 03H 鏃堕仴娴嬬粓绔湪璋冭瘯/缁翠慨鐘舵�併��
+        bs[0] = ProtocolConstantV206V1_0_0.P_Default_mode;//鏁版嵁鍩�
+        GlCreate.createTp(bs, 1);
+
+        bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
new file mode 100644
index 0000000..394c7e7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
@@ -0,0 +1,89 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_84
+})
+public class Cd_84_Down implements CodeParse {
+
+    //private static Logger log = LogManager.getLogger(Cd_C0_Down.class);
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = 1 ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = true ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        byte[] bs = new byte[7] ;
+        //纭甯х殑鏁版嵁鍩熺敤浜庨仴娴嬬粓绔伐浣滄ā寮忕殑纭鎴栬浆鎹€�傛暟鎹负 1 涓瓧鑺� HEX锛�00H 鏃堕仴娴嬬粓
+        //绔湪鍏煎宸ヤ綔鐘舵�侊紱 01H 鏃堕仴娴嬬粓绔湪鑷姤宸ヤ綔鐘舵�侊紱 02H 鏃堕仴娴嬬粓绔湪鏌ヨ/搴旂瓟宸ヤ綔
+        //鐘舵�侊紱 03H 鏃堕仴娴嬬粓绔湪璋冭瘯/缁翠慨鐘舵�併��
+        bs[0] = ProtocolConstantV206V1_0_0.P_Default_mode;//鏁版嵁鍩�
+        GlCreate.createTp(bs, 1);
+
+        bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
new file mode 100644
index 0000000..f324ea9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
@@ -0,0 +1,89 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_C0
+})
+public class Cd_C0_Down  implements CodeParse {
+
+    //private static Logger log = LogManager.getLogger(Cd_C0_Down.class);
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = 1 ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = true ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        byte[] bs = new byte[7] ;
+        //纭甯х殑鏁版嵁鍩熺敤浜庨仴娴嬬粓绔伐浣滄ā寮忕殑纭鎴栬浆鎹€�傛暟鎹负 1 涓瓧鑺� HEX锛�00H 鏃堕仴娴嬬粓
+        //绔湪鍏煎宸ヤ綔鐘舵�侊紱 01H 鏃堕仴娴嬬粓绔湪鑷姤宸ヤ綔鐘舵�侊紱 02H 鏃堕仴娴嬬粓绔湪鏌ヨ/搴旂瓟宸ヤ綔
+        //鐘舵�侊紱 03H 鏃堕仴娴嬬粓绔湪璋冭瘯/缁翠慨鐘舵�併��
+        bs[0] = ProtocolConstantV206V1_0_0.P_Default_mode;//鏁版嵁鍩�
+        GlCreate.createTp(bs, 1);
+
+        bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java
new file mode 100644
index 0000000..2567d99
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java
@@ -0,0 +1,38 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse.global;
+
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.common.util.CRC8_for_2_0;
+import com.dy.common.util.DateTime;
+
+public class GlCreate {
+
+    public static void createRtuAddr(String rtuAddr, byte[] bs, int index) throws Exception {
+        String rtuAddr1 = rtuAddr.substring(0, 6) ;
+        String rtuAddr2 = rtuAddr.substring(6) ;
+
+        ByteUtil.string2BCD_BE(bs, rtuAddr1, index) ;
+        index += 3 ;
+
+        Integer rtuAddr2Int = Integer.parseInt(rtuAddr2) ;
+        ByteUtilUnsigned.short2Bytes_BE(bs, rtuAddr2Int.shortValue(), index);
+    }
+
+    public static void createTp(byte[] bs, int index) throws Exception {
+        ByteUtil.string2BCD_LE(bs, DateTime.yyMMddhhmmss(), index) ;
+    }
+
+    public static void createLen(byte[] bsNoTail) throws Exception {
+        int len = bsNoTail.length - ProtocolConstantV206V1_0_0.lenHead2ctrl;
+        bsNoTail[ProtocolConstantV206V1_0_0.dataLenIndex] = (byte)len ;
+    }
+
+    public static byte[] createCrcTail(byte[] bsNoTail) throws Exception {
+        int crc = new CRC8_for_2_0().CRC8(bsNoTail, ProtocolConstantV206V1_0_0.ctrlIndex, bsNoTail.length -1) ;
+        byte[] bytes = new byte[ProtocolConstantV206V1_0_0.lenTail] ;
+        bytes[0] = (byte)crc ;
+        bytes[1] = ProtocolConstantV206V1_0_0.P_Tail_Byte ;
+        return bytes ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlParse.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlParse.java
new file mode 100644
index 0000000..a41e004
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlParse.java
@@ -0,0 +1,56 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse.global;
+
+import com.dy.common.mw.protocol.p206V1_0_0.DataAlarmVo;
+import com.dy.common.mw.protocol.p206V1_0_0.DataStateVo;
+import com.dy.common.util.ByteUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class GlParse {
+
+    private static final Logger log = LogManager.getLogger(GlParse.class);
+
+    public static DataAlarmVo parseAlarm(byte[] bs, short index){
+        DataAlarmVo avo = new DataAlarmVo() ;
+        byte b = bs[index] ;
+        index++ ;
+        avo.batteryVolt = (byte)(b & 0x2) ;
+        avo.loss = (byte)(b & 0x8) ;
+        avo.meter = (byte)(b & 0x20) ;
+
+        b = bs[index] ;
+        avo.valve = (byte)(b & 0x20) ;
+        return avo ;
+    }
+
+    public static DataStateVo parseState(byte[] bs, short index){
+        DataStateVo avo = new DataStateVo() ;
+        byte b = bs[index] ;
+        index++ ;
+        avo.idCard = (byte)(b & 0x4) ;
+        avo.work = (byte)(b & 0x8) ;
+        avo.valve = (byte)(b & 0x20) ;
+        return avo ;
+    }
+
+    public static String parseTp(byte[] bs, short index){
+        String dt = "" ;
+        try{
+            dt = dt + ByteUtil.BCD2String_BE(bs, index, index) ;//绉�
+            index++ ;
+            dt = ByteUtil.BCD2String_BE(bs, index, index) + ":" + dt ;//鍒�
+            index++ ;
+            dt = ByteUtil.BCD2String_BE(bs, index, index) + ":" + dt ;//鏃�
+            index++ ;
+            dt = ByteUtil.BCD2String_BE(bs, index, index) + " " + dt ;//鏃�
+            index++ ;
+            bs[index] = (byte)(bs[index] & 0x10);
+            dt = ByteUtil.BCD2String_BE(bs, index, index) + "-" + dt ;//鏈�
+            index++ ;
+            dt = "20" + ByteUtil.BCD2String_BE(bs, index, index) + "-" + dt ;//骞�
+        }catch (Exception e){
+            log.error("瑙f瀽鎺у埗鍣ㄦ椂閽熸椂寮傚父锛�" + e.getMessage(), e);
+        }
+        return dt ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/test/TestConflict.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/test/TestConflict.java
index 60c8148..c672194 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/test/TestConflict.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/test/TestConflict.java
@@ -7,4 +7,11 @@
     public void test2(){
         System.out.println("test2");
     }
+    public void test3(){
+        System.out.println("test31");
+        System.out.println("test32");
+        System.out.println("test33");
+        System.out.println("test34");
+        System.out.println("test33");
+    }
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/pom.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/pom.xml
index 7200183..acf0fa5 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/pom.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/pom.xml
@@ -132,4 +132,124 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
-</project>
\ No newline at end of file
+
+    <build>
+        <plugins>
+            <!-- 鐢熸垚涓嶅寘鍚緷璧杍ar鐨勫彲鎵цjar鍖�
+            <plugin>
+                !- spring boot鎻愪緵鐨刴aven鎵撳寘鎻掍欢 -
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        !-
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                        -
+                        <configuration>
+                            !- 涓嶅姞鐨勮瘽鏈�缁堝寘鍚嶄负: ${artifactId}-${version}.jar, 鍔犱簡鐨勮瘽鏈�缁堝寘鍚�: ${artifactId}-${version}-${classifier}.jar  -
+                            <classifier>execute</classifier>
+                            !- 涓嶆寚瀹氱敓鎴愯矾寰勭殑璇�, 榛樿淇濆瓨鍦� ${build.directory} 涓� -
+                            <outputDirectory>${project.build.directory}/execute</outputDirectory>
+                            <finalName>${artifactId}-${version}</finalName>
+                            <layout>ZIP</layout>
+                            <mainClass>com.dy.pipIrrBase.PipIrrBaseApplication</mainClass>
+                            <includes>
+                                <include>
+                                    <groupId>com.dy</groupId>
+                                    <artifactId>pipIrr-common</artifactId>
+                                </include>
+                                <include>
+                                    <groupId>com.dy</groupId>
+                                    <artifactId>pipIrr-global</artifactId>
+                                </include>
+                            </includes>
+                            <excludes>
+                                <exclude>
+                                    <groupId>org.projectlombok</groupId>
+                                    <artifactId>lombok</artifactId>
+                                </exclude>
+                            </excludes>
+                        </configuration>
+                    </execution>
+                </executions>
+
+            </plugin>
+            -->
+            <!-- 鎷疯礉渚濊禆鐨刯ar鍖呭埌lib鐩綍-->
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <configuration>
+                            <!-- 涓嶅姞鐨勮瘽鏈�缁堝寘鍚嶄负: ${artifactId}-${version}.jar, 鍔犱簡鐨勮瘽鏈�缁堝寘鍚�: ${artifactId}-${version}-${classifier}.jar
+                            <classifier>execute</classifier>
+                            -->
+                            <!-- ${project.build.directory}鏄痬aven鍙橀噺锛屽唴缃殑锛岃〃绀簍arget鐩綍,濡傛灉涓嶅啓锛屽皢鍦ㄦ牴鐩綍涓嬪垱寤�/lib -->
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <!-- excludeTransitive:鏄惁涓嶅寘鍚棿鎺ヤ緷璧栧寘锛屾瘮濡傛垜浠緷璧朅锛屼絾鏄疉鍙堜緷璧栦簡B锛屾垜浠槸鍚︿篃瑕佹妸B鎵撹繘鍘� 榛樿涓嶆墦-->
+                            <excludeTransitive>false</excludeTransitive>
+                            <!-- 澶嶅埗鐨刯ar鏂囦欢鍘绘帀鐗堟湰淇℃伅 -->
+                            <stripVersion>false</stripVersion>
+                            <finalName>${project.artifactId}-${project.version}</finalName>
+                            <layout>ZIP</layout>
+                            <mainClass>com.dy.aceMw.PipIrrMwAcceptApplication</mainClass>
+                            <includes>
+                                <include>
+                                    <groupId>com.dy</groupId>
+                                    <artifactId>pipIrr-common</artifactId>
+                                </include>
+                                <include>
+                                    <groupId>com.dy</groupId>
+                                    <artifactId>pipIrr-global</artifactId>
+                                </include>
+                            </includes>
+                            <excludes>
+                                <exclude>
+                                    <groupId>org.projectlombok</groupId>
+                                    <artifactId>lombok</artifactId>
+                                </exclude>
+                            </excludes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <!-- 璁剧疆java缂栬瘧鐗堟湰锛岃繍琛岀幆澧冪増鏈� -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <!-- source锛� 婧愪唬鐮佺紪璇戠増鏈紱target锛� 鐩爣骞冲彴缂栬瘧鐗堟湰锛沞ncoding锛� 瀛楃闆嗙紪鐮併�� -->
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${encoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- 瑙e喅璧勬簮鏂囦欢鐨勭紪鐮侀棶棰� -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <configuration>
+                    <encoding>${encoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- maven閲屾墽琛屾祴璇曠敤渚嬬殑鎻掍欢 -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- 涓嬮潰瑙e喅锛氬綋杩涜Maven Lifecycle package鏃舵姤閿欙細Could not find artifact org.apache.mina:mina-core:bundle:2.2.1 in maven (https://repo1.maven.org/maven2/)-->
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/PipIrrMwAcceptApplication.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/PipIrrMwAcceptApplication.java
index a93ac94..e0b836f 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/PipIrrMwAcceptApplication.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/PipIrrMwAcceptApplication.java
@@ -14,7 +14,7 @@
 @EnableAspectJAutoProxy
 @EnableMultiDataSource
 @ComponentScan(basePackages = {"com.dy.common", "com.dy.pipIrrGlobal", "com.dy.aceMw"})
-@MapperScan(basePackages={"com.dy.pipIrrGlobal.daoBa"})
+@MapperScan(basePackages={"com.dy.pipIrrGlobal.daoRm"})
 public class PipIrrMwAcceptApplication implements CommandLineRunner {
 
     public static void main(String[] args) {
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java
index fab544b..a368845 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java
@@ -3,6 +3,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import com.dy.aceMw.server.*;
+import com.dy.aceMw.server.rtuData.RtuDataUnit;
+import com.dy.aceMw.server.rtuData.RtuDataUnitConfigVo;
+import com.dy.aceMw.server.tasks.FromRtuConstantTask;
 import com.dy.common.mw.UnitInterface;
 import com.dy.common.mw.UnitStartedCallbackInterface;
 import com.dy.common.mw.channel.rmi.RmiConfigVo;
@@ -15,16 +19,9 @@
 import com.dy.common.mw.protocol.ProtocolUnit;
 import com.dy.common.mw.support.SupportUnit;
 import com.dy.common.mw.support.SupportUnitConfigVo;
-import com.dy.aceMw.server.AdapterImp_CoreUnit;
-import com.dy.aceMw.server.AdapterImp_ProtocolUnit;
-import com.dy.aceMw.server.AdapterImp_RmiUnit;
-import com.dy.aceMw.server.AdapterImp_TcpUnit;
-import com.dy.aceMw.server.ServerProperties;
 import com.dy.aceMw.server.tasks.ToRtuConstantTask;
-import com.dy.aceMw.server.AdapterImp_SupportUnit;
 import com.dy.aceMw.resource.ResourceUnit;
 import com.dy.aceMw.resource.ResourceUnitConfigVo;
-import com.dy.aceMw.server.AdapterImp_ResourceUnit;
 import com.dy.common.springUtil.SpringContextUtil;
 import com.dy.common.util.ConfigXml;
 import com.dy.common.util.IDLongGenerator;
@@ -146,8 +143,15 @@
 			//TCP涓婅鏁版嵁鏃跺埢缂撳瓨鏃堕暱锛屽綋杈惧埌鏃堕暱鏃讹紝TCP涓婅鏁版嵁鏃跺埢琚竻绌猴紝閲囩敤TCP涓婅鏁版嵁鏃跺埢鐩殑鏄紝闃绘涓婃暟鎹悓鏃朵笅鍙戞暟鎹紝鍥犱负RTU澶勭悊涓嶈繃鏉�
 			ServerProperties.lastUpDataTimeLive = conf.getSetAttrPlusInt(doc, "config.base", "lastUpDataTimeLive", null, 0, 5, null) * 1000L ;
 			//鏁版嵁搴撴暟鎹甶d鐢熸垚鍣ㄧ殑id鍚庣紑锛�0鏄粯璁ょ殑鍚庣紑锛屼竴鑸瑆eb绯荤粺搴旂敤锛屾暟鎹腑闂翠欢id鍚庣紑澶т簬绛変簬1
-			ServerProperties.dbDataIdSuffix = conf.getSetAttrInt(doc, "config.base", "dbDataIdSuffix", null, 1, 9, null);
-			
+			ServerProperties.dbDataIdSuffix = conf.getSetAttrInt(doc, "config.base", "dbDataIdSuffix", null, 0, 99, null);
+			//涓婁笅琛屾暟鎹紦瀛橀槦鍒椾腑缂撳瓨鏁版嵁涓暟鐨勬姤璀﹂噺锛岃繖涓笌鐜板疄椤圭洰鎵�鎺ユ按琛ㄦ暟鐩稿叧
+			ServerProperties.cacheUpDownDataWarnCount = conf.getSetAttrPlusInt(doc, "config.base", "cacheUpDownDataWarnCount", null, 1, null, null) ;
+			//涓婁笅琛屾暟鎹紦瀛橀槦鍒椾腑缂撳瓨鏁版嵁涓暟鐨勬渶澶у�硷紝杩欎釜涓庣幇瀹為」鐩墍鎺ユ按琛ㄦ暟鐩稿叧
+			ServerProperties.cacheUpDownDataMaxCount = conf.getSetAttrPlusInt(doc, "config.base", "cacheUpDownDataMaxCount", null, 1, null, null) ;
+			if(ServerProperties.cacheUpDownDataMaxCount <= ServerProperties.cacheUpDownDataWarnCount){
+				throw new Exception("cacheUpDownDataMaxCount蹇呴』澶т簬cacheUpDownDataWarnCount") ;
+			}
+
 			//璁剧疆ID鐢熸垚鍣ㄧ殑鍚庣紑
 			IDLongGenerator.setSuffix(ServerProperties.dbDataIdSuffix.intValue());
 
@@ -164,10 +168,7 @@
 			protoAdap.setConfig(protoVo);
 			ProtocolUnit protoUnit = ProtocolUnit.getInstance();
 			protoUnit.setAdapter(protoAdap);
-			protoUnit.start(new UnitStartedCallbackInterface(){
-				@Override
-				public void call(Object obj) {
-				}
+			protoUnit.start(obj -> {
 			});
 			units.add(protoUnit) ;
 			
@@ -175,39 +176,49 @@
 			//鏀寔妯″潡锛� springHibernate鍜� 绾跨▼姹�
 			SupportUnitConfigVo supVo = new SupportUnitConfigVo() ;
 			//鐭伐浣滄椂闀跨嚎绋嬫睜锛岀嚎绋嬭礋璐g敤鏃惰緝鐭殑宸ヤ綔浠诲姟
-			supVo.short_maxThread = conf.getSetAttrPlusInt(doc, "config.support", "short_maxThread", null, 1, 1000, null) ;//姹犱腑鏈�澶х嚎绋嬫暟涓烘墍鏈塁PU鏍告暟+1
-			supVo.short_minThread = conf.getSetAttrPlusInt(doc, "config.support", "short_minThread", null, 1, 5, null) ;//姹犱腑鏈�灏忕嚎绋嬫暟 
+			supVo.short_maxThread = conf.getSetAttrPlusInt(doc, "config.support", "short_maxThread", null, -1, 1000, null) ;//姹犱腑鏈�澶х嚎绋嬫暟涓烘墍鏈塁PU鏍告暟+1
+			if(supVo.short_maxThread < 0){
+				supVo.short_maxThread = -1 ;
+			}
+			supVo.short_minThread = conf.getSetAttrPlusInt(doc, "config.support", "short_minThread", null, -1, 100, null) ;//姹犱腑鏈�灏忕嚎绋嬫暟
+			if(supVo.short_minThread < 0){
+				supVo.short_minThread = -1 ;
+			}
 			supVo.short_freeTimeout = conf.getSetAttrPlusInt(doc, "config.support", "short_freeTimeout", null, 1, 90, null) * 1000 ;//绾跨▼鏁扮┖闂叉椂闀匡紝鑻ユ睜涓嚎绋嬫暟閲忓ぇ浜巑inThread锛屼笖鏈夌殑绾跨▼绌洪棽鏃堕暱瓒呰繃freeTimeout锛屽垯娓呴櫎璇ョ嚎绋嬶紝涓轰簡涓嶆竻闄わ紝鎶妋inThread涓巑axThread璁剧疆鐩哥瓑
 			supVo.short_busyTimeout = conf.getSetAttrPlusInt(doc, "config.support", "short_busyTimeout", null, 1, 10, null) * 1000 ;//绾跨▼涓嶉棿鏂伐浣滄椂闀匡紙鍗曚綅涓虹)瓒呮椂闄愶紝璁や负绾跨▼宸茬粡浜嗗穿婧冿紝灏嗗己鍒舵竻闄わ紝鐭伐浣滄椂闀胯缃负5绉�
+			if(supVo.short_maxThread == 0 || supVo.short_minThread == 0){
+				supVo.enableShortThreadPool = false ;
+			}else{
+				supVo.enableShortThreadPool = true ;
+			}
+
 			//闀垮伐浣滄椂闀跨嚎绋嬫睜锛岀嚎绋嬭礋璐g敤鏃惰緝闀跨殑宸ヤ綔浠诲姟
 			supVo.long_maxThread = conf.getSetAttrInt(doc, "config.support", "long_maxThread", null, -1, 1000, null)  ;//姹犱腑鏈�澶х嚎绋嬫暟,鑻ヤ负-1锛屼笉鍙楅檺鍒�
 			if(supVo.long_maxThread < 0){
 				supVo.long_maxThread = -1 ;
 			}
-			supVo.long_minThread = conf.getSetAttrPlusInt(doc, "config.support", "long_minThread", null, 0, 5, null) ;//姹犱腑鏈�灏忕嚎绋嬫暟 
+			supVo.long_minThread = conf.getSetAttrPlusInt(doc, "config.support", "long_minThread", null, -1, 100, null) ;//姹犱腑鏈�灏忕嚎绋嬫暟
+			if(supVo.long_minThread < 0){
+				supVo.long_minThread = -1 ;
+			}
 			supVo.long_freeTimeout = conf.getSetAttrPlusInt(doc, "config.support", "long_freeTimeout", null, 1, 90, null) * 1000 ;//绾跨▼鏁扮┖闂叉椂闀匡紝鑻ユ睜涓嚎绋嬫暟閲忓ぇ浜巑inThread锛屼笖鏈夌殑绾跨▼绌洪棽鏃堕暱瓒呰繃freeTimeout锛屽垯娓呴櫎璇ョ嚎绋�
 			supVo.long_busyTimeout = conf.getSetAttrInt(doc, "config.support", "long_busyTimeout", null, -1, 10, null) ;//绾跨▼涓嶉棿鏂伐浣滄椂闀匡紙鍗曚綅涓虹)瓒呮椂闄愶紝鑻ヤ负-1锛屼笉鍙楅檺鍒�
 			if(supVo.long_busyTimeout < 0){
 				supVo.long_busyTimeout = -1 ;
 			}
-			
-			supVo.enableThreadPool = conf.getSetAttrBoolean(doc, "config.support", "enableThreadPool", null, null) ;
-			
-//			supVo.enableSpringHibernate = conf.getSetAttrBoolean(doc, "config.support", "enableSpringHibernate", null, null) ;
-//			if(supVo.enableSpringHibernate){
-//				supVo.springXmlFile = conf.getSetAttrTxt(doc, "config.support", "springXmlFile", null, false, null) ;
-//			}
-			
+			if(supVo.long_maxThread == 0 || supVo.long_minThread == 0){
+				supVo.enableLongThreadPool = false ;
+			}else{
+				supVo.enableLongThreadPool = true ;
+			}
+
 			supVo.showStartInfo = showStartInfo ;
 			
 			AdapterImp_SupportUnit supAdap = new AdapterImp_SupportUnit() ;
 			supAdap.setConfig(supVo);
 			SupportUnit supUnit = SupportUnit.getInstance() ;
 			supUnit.setAdapter(supAdap);
-			supUnit.start(new UnitStartedCallbackInterface(){
-				@Override
-				public void call(Object obj) {
-				}
+			supUnit.start(obj -> {
 			});
 			units.add(supUnit) ;
 			
@@ -236,10 +247,7 @@
 			//褰撳墠鏀寔spring + hibernate
 			resUnit.setSpringContext(SpringContextUtil.getApplicationContext());
 
-			resUnit.start(new UnitStartedCallbackInterface(){
-				@Override
-				public void call(Object obj) {
-				}
+			resUnit.start(obj -> {
 			});
 			units.add(resUnit) ;
 
@@ -256,32 +264,41 @@
 				rmiAdap.setConfig(rmiVo);
 				RmiUnit rmiUnit = RmiUnit.getInstance();
 				rmiUnit.setAdapter(rmiAdap);
-				rmiUnit.start(new UnitStartedCallbackInterface(){
-					@Override
-					public void call(Object obj) {
-					}
+				rmiUnit.start(obj -> {
 				});
 				RmiSvUrl = "[ip]:" + rmiVo.port + "/" + rmiVo.context ;
 				units.add(rmiUnit) ;
 			}
+
+
+			/////////////////
+			//RTU涓婅鏁版嵁澶勭悊妯″潡
+			RtuDataUnitConfigVo rducVo = new RtuDataUnitConfigVo();
+			AdapterImp_RtuDataUnit rducAdap = new AdapterImp_RtuDataUnit();
+			rducAdap.setConfig(rducVo);
+			RtuDataUnit rducUnit = RtuDataUnit.getInstance();
+			rducUnit.setAdapter(rducAdap);
+			rducUnit.start(obj -> {
+			});
+			units.add(rducUnit) ;
+
+
 
 			// ///////////////
 			// 鏍稿績
 			CoreUnitConfigVo coreConfVo = new CoreUnitConfigVo();
 			coreConfVo.sleepBigBusy = conf.getSetAttrPlusInt(doc, "config.core", "sleepBigBusy", null, 1, 200, null).longValue() ;
 			coreConfVo.sleepSmallBusy = conf.getSetAttrPlusInt(doc, "config.core", "sleepSmallBusy", null, 2, 1000, null).longValue();
-			coreConfVo.queueWarnSize = conf.getSetAttrPlusInt(doc, "config.core", "queueWarnSize", null, 500, 1000000, null) ;
-			coreConfVo.queueMaxSize = conf.getSetAttrPlusInt(doc, "config.core", "queueMaxSize", null, 5000, 3000000, null)  ;
+			coreConfVo.queueWarnSize = ServerProperties.cacheUpDownDataWarnCount ;
+			coreConfVo.queueMaxSize = ServerProperties.cacheUpDownDataMaxCount ;
 			coreConfVo.showStartInfo = showStartInfo ;
 			AdapterImp_CoreUnit coreAdap = new AdapterImp_CoreUnit();
 			coreAdap.setConfig(coreConfVo);
 			CoreUnit coreUnit = CoreUnit.getInstance();
 			coreUnit.setAdapter(coreAdap);
 			CoreUnit.addConstantTask(new ToRtuConstantTask());
-			coreUnit.start(new UnitStartedCallbackInterface(){
-				@Override
-				public void call(Object obj) {
-				}
+			CoreUnit.addConstantTask(new FromRtuConstantTask());
+			coreUnit.start(obj -> {
 			});
 			units.add(coreUnit) ;
 
@@ -299,10 +316,7 @@
 				tcpAdap.setConfig(tcpVo);
 				TcpUnit tcpUnit = TcpUnit.getInstance();
 				tcpUnit.setAdapter(tcpAdap);
-				tcpUnit.start(new UnitStartedCallbackInterface(){
-					@Override
-					public void call(Object obj) {
-					}
+				tcpUnit.start(obj -> {
 				});
 				TcpSvUrl = "[ip]:" + tcpVo.port ;
 				units.add(tcpUnit) ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/AdapterImp_RtuDataUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/AdapterImp_RtuDataUnit.java
new file mode 100644
index 0000000..ec4fe82
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/AdapterImp_RtuDataUnit.java
@@ -0,0 +1,19 @@
+package com.dy.aceMw.server;
+
+
+import com.dy.aceMw.server.rtuData.RtuDataUnitAdapter;
+import com.dy.aceMw.server.rtuData.RtuDataUnitConfigVo;
+
+public class AdapterImp_RtuDataUnit implements RtuDataUnitAdapter {
+	
+	private RtuDataUnitConfigVo configVo ;
+
+	public RtuDataUnitConfigVo getConfig() {
+		return configVo;
+	}
+	
+	public void setConfig(RtuDataUnitConfigVo configVo){
+		this.configVo = configVo ;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java
index 896f2d8..40747c2 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java
@@ -1,5 +1,7 @@
 package com.dy.aceMw.server.forTcp;
 
+import com.dy.aceMw.server.rtuData.RtuDataNode;
+import com.dy.aceMw.server.rtuData.RtuDataCache;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -23,33 +25,33 @@
 				//姝ゅ瀹炵幇锛屼笌浠ュ墠涓嶄竴鏍凤紝
 				//浠ュ墠瀹炵幇锛氬尮閰嶅懡浠ゆ槸浠庡悗鍚戝墠鍖归厤锛�
 				//褰撳墠瀹炵幇锛屽尮閰嶅懡浠ゆ槸浠庡墠鍚戝悗鍖归厤锛屽師鍥狅細涓句緥锛屽綋鎵归噺涓嬪彂琛ュ彫鍛戒护锛屽鏋滀粠鍚庡尮閰嶏紝鍒欏墠闈㈠懡浠や細涓嬪彂澶氭锛屽嵆涓�涓笂鎶ユ鏁版嵁浼氳ˉ鍙娆�
-				MidResultToRtu resToRtu = TcpDownCommandCach.matchFromHead(resFromRtu) ;
+				MidResultToRtu resToRtu = TcpDownCommandCache.matchFromHead(resFromRtu) ;
 				if(resToRtu != null){
 					//鍖归厤鍒颁笅鍙戠殑鍛戒护
 					resFromRtu.setCommandId(resToRtu.commandId) ;
-					this.sendResult(false, resFromRtu);
+					this.nextDeal(false, resFromRtu);
 				}else{
-					this.sendResult(false, resFromRtu);
+					this.nextDeal(false, resFromRtu);
 					//鏈尮閰嶅埌涓嬪彂鐨勫懡浠わ紝鍛戒护鍦ㄧ紦瀛樺洜瓒呮椂琚竻闄や簡
 					RtuStatusDealer.commandFail2Success(resFromRtu.rtuAddr) ;
 				}
 			}else{
 				//涓诲姩涓婃姤鏁版嵁
-				this.sendResult(true, resFromRtu);
+				this.nextDeal(true, resFromRtu);
 			}
 		}
 	}
-	private void sendResult(boolean reportOrResponse_trueOrFalse, MidResultFromRtu resFromRtu){
+
+	/**
+	 * 杩涘叆澶氱嚎绋嬬幆澧冧腑杩愯
+	 * @param reportOrResponse_trueOrFalse
+	 * @param resFromRtu
+	 */
+	private void nextDeal(boolean reportOrResponse_trueOrFalse, MidResultFromRtu resFromRtu){
 		try{
-			String json = resFromRtu.data.toJson() ;
-//			if(reportOrResponse_trueOrFalse){
-//				ToMqMessageCach.cachObj(MessageType.RtuAutoReport, json);
-//			}else{
-//				ToMqMessageCach.cachObj(MessageType.RtuCmdResponse, json);
-//			}
+			RtuDataCache.cacheRtuUpData(reportOrResponse_trueOrFalse, new RtuDataNode(resFromRtu.data));
 		}catch(Exception e){
 			log.error(e.getMessage(), e);
 		}
-		
 	}
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataCache.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataCache.java
new file mode 100644
index 0000000..a6de4e1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataCache.java
@@ -0,0 +1,70 @@
+package com.dy.aceMw.server.rtuData;
+
+import com.dy.aceMw.server.ServerProperties;
+import com.dy.common.queue.Node;
+import com.dy.common.queue.Queue;
+
+public class RtuDataCache {
+
+    //TCP涓嬭鍛戒护缂撳瓨闃熷垪
+    private static Queue cacheQueue = new Queue("tcpUpDataQueue") ;
+
+    private static RtuDataCache instance = new RtuDataCache() ;
+
+    private RtuDataCache(){
+        cacheQueue.setLimit(ServerProperties.cacheUpDownDataWarnCount, ServerProperties.cacheUpDownDataMaxCount);
+    }
+
+    public static RtuDataCache getInstance(){
+        return instance ;
+    }
+
+    /**
+     * 缂撳瓨鑺傜偣
+     * @param reportOrResponse_trueOrFalse reportOrResponse_trueOrFalse
+     * @param node node
+     * @throws Exception 寮傚父
+     */
+    public static void cacheRtuUpData(boolean reportOrResponse_trueOrFalse, RtuDataNode node) throws Exception{
+        if(node != null && node.obj != null){
+            if(reportOrResponse_trueOrFalse){
+                cacheQueue.pushHead(node);
+            }else{
+                cacheQueue.pushTail(node);
+            }
+        }
+    }
+
+    /**
+     * 寰楀埌绗竴涓妭鐐�
+     * @return Node
+     */
+    public static Node getFirstQueueNode(){
+        return cacheQueue.getFirstNode() ;
+    }
+
+    /**
+     * 寰楀埌鏈�鍚庝竴涓妭鐐�
+     * @return Node
+     */
+    public static Node getLastQueueNode(){
+        return cacheQueue.getLastNode() ;
+    }
+
+    /**
+     * 绉婚櫎鑺傜偣
+     * @param node
+     */
+    public static void removeNode(Node node){
+        cacheQueue.remove(node);
+    }
+
+    /**
+     * 缂撳瓨鐨勮妭鐐规暟
+     * @Return 缂撳瓨鑺傜偣鏁�
+     */
+    public static Integer size(){
+        return cacheQueue.size() ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java
new file mode 100644
index 0000000..d007230
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java
@@ -0,0 +1,60 @@
+package com.dy.aceMw.server.rtuData;
+
+import com.dy.common.queue.NodeObj;
+import com.dy.common.threadPool.ThreadPool;
+import com.dy.common.threadPool.TreadPoolFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class RtuDataNode implements NodeObj {
+
+    private static final Logger log = LogManager.getLogger(RtuDataNode.class.getName());
+
+    public Object obj ;//鏁版嵁
+
+    public RtuDataNode(Object obj){
+        this.obj = obj ;
+    }
+    /**
+     * 鑷繁澶勭悊鑷繁
+     * @return
+     */
+    public boolean dealSelf(){
+        try {
+            ThreadPool.Pool pool = TreadPoolFactory.getThreadPoolLong() ;
+            pool.putJob(new ThreadPool.Job() {
+                public void execute() {
+                    if(obj != null){
+                        TaskSurpport t = null ;
+                        try{
+                            t = TaskPool.popTask() ;
+                            if(t != null){
+                                t.execute(obj);
+                            }else{
+                                log.error("鏈緱鍒癛TU涓诲姩涓婃姤鏁版嵁澶勭悊浠诲姟锛�");
+                            }
+                        }catch(Exception e){
+                            if(t != null){
+                                //褰撴湁寮傚父鏃讹紝try catch涓殑浠g爜鍙病鏈夋墽琛宖reeAndCleanTask
+                                TaskPool.freeAndCleanTask(t);
+                            }
+                        }
+                    }
+                }
+                @Override
+                public void destroy(){
+                }
+                @Override
+                public boolean isDestroy(){
+                    return false ;
+                }
+
+            });
+        } catch (Exception e) {
+            log.error("鍦≧tuDataNode鍐呭彂鐢熷紓甯�", e);
+        }
+        return true ;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnit.java
new file mode 100644
index 0000000..269b85c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnit.java
@@ -0,0 +1,47 @@
+package com.dy.aceMw.server.rtuData;
+
+import com.dy.common.mw.UnitAdapterInterface;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.mw.UnitStartedCallbackInterface;
+
+public class RtuDataUnit  implements UnitInterface {
+
+	private static RtuDataUnit instance = new RtuDataUnit() ;
+	
+	public static RtuDataUnitAdapter adapter ;
+	public static RtuDataUnitConfigVo confVo ;
+
+	private RtuDataUnit(){} ;
+	
+	public static RtuDataUnit getInstance(){
+		return instance ;
+	}
+	
+	@Override
+	public void setAdapter(UnitAdapterInterface adapter) throws Exception {
+		if(adapter == null){
+			throw new Exception("RTU鏁版嵁澶勭悊妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ;
+		}
+		RtuDataUnit.adapter = (RtuDataUnitAdapter)adapter ; 
+		RtuDataUnit.confVo = RtuDataUnit.adapter.getConfig() ;
+		if(RtuDataUnit.confVo == null){
+			throw new Exception("RTU鏁版嵁澶勭悊妯″潡閰嶇疆瀵硅薄涓嶈兘涓虹┖锛�") ;
+		}
+	}
+
+	/**
+	 * 鍒濆鍖栦笂琛屾暟鎹鐞嗕换鍔℃睜
+	 */
+	@Override
+	public void start(UnitStartedCallbackInterface callback) throws Exception {
+		TaskPool.setTaskTreeCofig(new TreeParse().parseConfig());
+		callback.call(null) ;
+		System.out.println("RTU鏁版嵁澶勭悊妯″潡鎴愬姛鍚姩");
+	}
+
+	@Override
+	public void stop(UnitStartedCallbackInterface callback) throws Exception {
+	}
+
+}
+
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnitAdapter.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnitAdapter.java
new file mode 100644
index 0000000..a9b756f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnitAdapter.java
@@ -0,0 +1,10 @@
+package com.dy.aceMw.server.rtuData;
+
+
+import com.dy.common.mw.UnitAdapterInterface;
+
+public interface RtuDataUnitAdapter extends UnitAdapterInterface {
+
+	public RtuDataUnitConfigVo getConfig() ;
+	
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnitConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnitConfigVo.java
new file mode 100644
index 0000000..89b0ddd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataUnitConfigVo.java
@@ -0,0 +1,5 @@
+package com.dy.aceMw.server.rtuData;
+
+public class RtuDataUnitConfigVo {
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/Task.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/Task.java
new file mode 100644
index 0000000..66f221b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/Task.java
@@ -0,0 +1,46 @@
+package com.dy.aceMw.server.rtuData;
+
+public interface Task {
+	
+	
+	/**
+	 * 浠诲姟閲囩敤瀵硅薄姹狅紝浠ヤ究閲嶇敤浠诲姟瀵硅薄锛�
+	 * 閲嶇敤鍓嶈杩涜瀵硅薄鍒濆鍖栵紝娓呴櫎涓婃鎵ц浠诲姟鏃堕仐鐣欑殑瀵硅薄灞炴�ф暟鎹�
+	 * 鍒濆鍖栨湰浠诲姟鍙婃墍鏈夊瓙浠诲姟
+	 */
+	public void cleanMeAndSubs() ;
+	
+	/**
+	 * 鎵ц鑺傜偣浠诲姟
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 */
+	public void execute(Object data) ;
+	
+	/**
+	 * 寰楀埌鏈换鍔¤妭鐐瑰鐞嗕骇鐢熺殑涓棿缁撴灉锛屼互渚涙湰鑺傜偣鎵�鍦ㄦ爲鏋濈殑涓嬬骇浠诲姟鑺傜偣鍙婃湰鏍戞灊鐨勫乏渚э紙鏍瑰湪涓婏級鎵�鏈夋爲鏋濈殑鑺傜偣搴旂敤鏈粨鏋�
+	 * @return
+	 */
+	public Object[] getMyResults() ;
+	
+	/**
+	 * 寰楀埌鎸囧畾浠诲姟鑺傜偣澶勭悊浜х敓鐨勪腑闂寸粨鏋滐紝浠ヤ緵鏈妭鐐规墍鍦ㄦ爲鏋濈殑涓嬬骇浠诲姟鑺傜偣鍙婃湰鏍戞灊鐨勫乏渚э紙鏍瑰湪涓婏級鎵�鏈夋爲鏋濈殑鑺傜偣搴旂敤鏈粨鏋�
+	 * @param id 鎸囧畾浠诲姟ID
+	 * @return
+	 */
+	public Object[] getTaskResults(String id);
+	
+	/**
+	 * 杞笅绾т换鍔¤妭鐐瑰鐞嗭紝棣栧厛瑕佸疄浣撳寲鎵�鏈夊瓙鑺傜偣銆�
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 */
+	public void toNextTasks(Object data) ;
+
+
+	/**
+	 * 杞笅绾ф煇涓换鍔¤妭鐐瑰鐞� 
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 * @param id 鎸囧畾浠诲姟ID
+	 */
+	public void toNextOneTask(Object data, String id);
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskConfig.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskConfig.java
new file mode 100644
index 0000000..b80df4f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskConfig.java
@@ -0,0 +1,9 @@
+package com.dy.aceMw.server.rtuData;
+
+
+public class TaskConfig {
+	public String id ;
+	public String name ;
+	public Boolean enable ;//鏄惁鎵ц鑺傜偣鐨勬暟鎹鐞嗕换鍔′换鍔�
+	public String clazz ;
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskPool.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskPool.java
new file mode 100644
index 0000000..78ec7a6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskPool.java
@@ -0,0 +1,116 @@
+package com.dy.aceMw.server.rtuData;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+
+public class TaskPool {
+
+	private static Logger log = LogManager.getLogger(TaskPool.class.getName()) ;
+	
+	private static List<TaskSurpport> tasks = new ArrayList<TaskSurpport>() ;
+	
+	private static TreeConfig taskTreeConf ;
+	
+	
+	public static void setTaskTreeCofig(TreeConfig conf){
+		taskTreeConf = conf ;
+	}
+	
+	
+	/**
+	 * 寰楀埌浠诲姟
+	 * 澶氱嚎绋嬬幆澧冧笅杩愯
+	 * @return
+	 */
+	public static synchronized TaskSurpport popTask(){
+		TaskSurpport t = (tasks.size() > 0)?tasks.get(0):null ;
+		if(t != null){
+			tasks.remove(0) ;
+		}else{
+			try {
+				t = newTaskTree() ;
+			} catch (Exception e) {
+				log.error(e.getMessage() == null?"瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞℃爲澶辫触锛�" : e.getMessage(), e);
+			} finally {
+				if(t == null){
+					log.error("瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞″け璐ワ紒" );
+				}
+			}
+		}
+		
+		return t ;
+	}
+	
+	/**
+	 * 鏀惧洖浠诲姟
+	 * 澶氱嚎绋嬬幆澧冧笅杩愯
+	 * 杩欓噷闇�瑕佸悓姝ラ攣锛屽洜涓轰笂闈㈡柟娉曚腑鎵ц瀹宼asks.get(0)涓旀湭鎵цtasks.remove(0)鏈熼棿锛屾湰鏂规硶鎵ц骞朵笖鎵ц瀹岋紝閭d箞鍚庢湡灏变細鍑轰贡瀛�
+	 * @param t
+	 */
+	public static synchronized void freeAndCleanTask(TaskSurpport t){
+		if(t != null){
+			boolean find = false ;
+			for(TaskSurpport tin : tasks){
+				if(tin == t){
+					find = true ;
+					break ;
+				}
+			}
+			if(!find){
+				t.cleanMeAndSubs();
+				tasks.add(0, t) ;
+			}
+		}
+	}
+	
+	/**
+	 * 瀹炰緥鍖栦换鍔″璞℃爲
+	 * @return
+	 * @throws Exception
+	 */
+	private static TaskSurpport newTaskTree() throws Exception{
+		TaskSurpport t = null ;
+		if(taskTreeConf != null){
+			t = newTask(null, taskTreeConf.taskConf, taskTreeConf.subTreeConfs) ;
+		}
+		return t ;
+	}
+	
+	private static TaskSurpport newTask(TaskSurpport root, TaskConfig taskConf, TreeConfig[] subTreeConfs) throws Exception{
+		TaskSurpport t = null ;
+		if(taskConf != null){
+			t = instanceTask(taskConf.clazz) ;
+			if(t != null){
+				t.conf = taskConf ;
+				t.root = root ;
+				if(root == null){
+					root = t ;
+				}
+				newSubTask(root, t, subTreeConfs);
+			}
+		}
+		return t ;
+	}
+	private static void newSubTask(TaskSurpport root, TaskSurpport parent, TreeConfig[] treeConfs)throws Exception{
+		if(parent != null && treeConfs != null && treeConfs.length > 0){
+			parent.subTasks = new TaskSurpport[treeConfs.length] ;
+			for(int i = 0 ; i < treeConfs.length; i++){
+				parent.subTasks[i] = newTask(root, treeConfs[i].taskConf, treeConfs[i].subTreeConfs) ;
+			}
+		}
+	}
+	private static TaskSurpport instanceTask(String clazz)throws Exception{
+		Class<?> c = Class.forName(clazz);
+		if (c == null) {
+			throw new Exception("瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞℃爲澶辫触锛佷换鍔$被涓�" + clazz + "锛�");
+		}else{
+			return (TaskSurpport)c.getDeclaredConstructor().newInstance();
+			//return (TaskSurpport)c.newInstance();
+		}
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskSurpport.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskSurpport.java
new file mode 100644
index 0000000..f1e5b28
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TaskSurpport.java
@@ -0,0 +1,132 @@
+package com.dy.aceMw.server.rtuData;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * 閮ㄥ垎瀹炵幇Task
+ */
+public abstract class TaskSurpport implements Task {
+
+	private static final Logger log = LogManager.getLogger(TaskSurpport.class.getName()) ;
+	
+	//褰撳墠鎵�澶勭悊鐨勪笂琛屾暟鎹墍灞濺TU鐨勫湴鍧�
+	public String rtuAddr_inRootTk ;//鍙湪鏍箁oot浠诲姟瀵硅薄涓婁細浠樻鍊�
+	//鏈妭鐐归厤缃�
+	protected TaskConfig conf ;
+	//鏍逛换鍔�
+	protected TaskSurpport root ;
+	//鏈换鍔$殑瀛愪换鍔�
+	protected TaskSurpport[] subTasks ;
+	//鏈换鍔$殑澶勭悊缁撴灉
+	protected Object[] taskResult ;
+
+	/**
+	 * 鎵ц鑺傜偣浠诲姟
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 */
+	@Override
+	public abstract void execute(Object data) ;
+	
+	/**
+	 * 浠诲姟閲囩敤瀵硅薄姹狅紝浠ヤ究閲嶇敤浠诲姟瀵硅薄锛�
+	 * 閲嶇敤鍓嶈杩涜瀵硅薄鍒濆鍖栵紝娓呴櫎涓婃鎵ц浠诲姟鏃堕仐鐣欑殑瀵硅薄灞炴�ф暟鎹�
+	 * 鍒濆鍖栨湰浠诲姟鍙婃墍鏈夊瓙浠诲姟
+	 */
+	@Override
+	public void cleanMeAndSubs() {
+		rtuAddr_inRootTk = null ;
+		taskResult = null ;
+		if(this.subTasks != null && this.subTasks.length > 0){
+			for(int i = 0 ; i < this.subTasks.length; i++){
+				this.subTasks[i].cleanMeAndSubs() ;
+			}
+		}
+	}
+	
+	/**
+	 * 寰楀埌鏈换鍔¤妭鐐瑰鐞嗕骇鐢熺殑涓棿缁撴灉锛屼互渚涙湰鑺傜偣鎵�鍦ㄦ爲鏋濈殑涓嬬骇浠诲姟鑺傜偣鍙婃湰鏍戞灊鐨勫乏渚э紙鏍瑰湪涓婏級鎵�鏈夋爲鏋濈殑鑺傜偣搴旂敤鏈粨鏋�
+	 * @return
+	 */
+	@Override
+	public Object[] getMyResults(){
+		return taskResult ;
+	}
+	
+	/**
+	 * 寰楀埌鎸囧畾浠诲姟鑺傜偣澶勭悊浜х敓鐨勪腑闂寸粨鏋滐紝浠ヤ緵鏈妭鐐规墍鍦ㄦ爲鏋濈殑涓嬬骇浠诲姟鑺傜偣鍙婃湰鏍戞灊鐨勫乏渚э紙鏍瑰湪涓婏級鎵�鏈夋爲鏋濈殑鑺傜偣搴旂敤鏈粨鏋�
+	 * @param id 鎸囧畾浠诲姟ID
+	 * @return
+	 */
+	public Object[] getTaskResults(String id){
+		if(root != null){
+			return this.getTaskResults(root, id) ;
+		}
+		return null ;
+	}
+	private Object[] getTaskResults(TaskSurpport task, String id){ 
+		if(task != null && task.conf != null && task.conf.id != null && task.conf.id.equals(id)){
+			return task.getMyResults() ;
+		}else{
+			if(task.subTasks != null && task.subTasks.length > 0){
+				Object[] rs = null ;
+				for(int i = 0 ; i < task.subTasks.length; i++){
+					rs = getTaskResults(task.subTasks[i], id) ;
+					if(rs != null){
+						return rs ;
+					}
+				}
+			}
+		}
+		return null ;
+	}
+
+	/**
+	 * 杞笅绾т换鍔¤妭鐐瑰鐞嗭紝棣栧厛瑕佸疄浣撳寲鎵�鏈夊瓙鑺傜偣銆�
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 */
+	@Override
+	public void toNextTasks(Object data) {
+		try {
+			if(subTasks != null && subTasks.length > 0){
+				for(int i = 0 ; i < subTasks.length ; i++){
+					if(subTasks[i].conf.enable){
+						subTasks[i].execute(data) ;
+					}else{
+						//鏈妭鐐逛笉璧蜂綔鐢紝鐩存帴杩涘叆鏈妭鐨勫瓙鑺傜偣
+						subTasks[i].toNextTasks(data) ;
+					}
+				}
+			}
+		} catch (Exception e) {
+			log.error("鍚戜笅绾т换鍔′紶閫掑伐浣滄椂鍑洪敊锛�" , e);
+		}finally{
+		}
+	}
+
+	/**
+	 * 杞笅绾ф煇涓换鍔¤妭鐐瑰鐞� 
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 * @param id 鎸囧畾浠诲姟ID
+	 */
+	public void toNextOneTask(Object data, String id){
+		try {
+			if(subTasks != null && subTasks.length > 0){
+				for(int i = 0 ; i < subTasks.length ; i++){
+					if(subTasks[i].conf.id.equals(id)){
+						if(subTasks[i].conf.enable){
+							subTasks[i].execute(data) ;
+						}else{
+							//鏈妭鐐逛笉璧蜂綔鐢紝鐩存帴杩涘叆鏈妭鐨勫瓙鑺傜偣
+							subTasks[i].toNextTasks(data) ;
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			log.error("鍚戞寚瀹氬瓙浠诲姟锛�" + id + "锛変紶閫掍换鍔℃椂鍑洪敊锛�" , e);
+		}finally{
+		}
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TkReceive.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TkReceive.java
new file mode 100644
index 0000000..80604c5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TkReceive.java
@@ -0,0 +1,31 @@
+package com.dy.aceMw.server.rtuData;
+
+import com.dy.common.mw.protocol.Data;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class TkReceive extends TaskSurpport {
+	
+	private static final Logger log = LogManager.getLogger(TkReceive.class.getName()) ;
+
+	//绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+	public static final String taskId = "TkReceive" ;
+
+	/**
+	 * 鎵ц鑺傜偣浠诲姟
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 */
+	@Override
+	public void execute(Object data) {
+		if(data == null){
+			log.error("涓ラ噸閿欒锛孯TU涓婅鏁版嵁涓虹┖锛�" );
+		}else{
+			if(data instanceof Data){
+				this.toNextTasks(data);
+			}else{
+				log.error("涓ラ噸閿欒锛岃鏁版嵁绫诲瀷锛�" + data.getClass().getName() + "锛夛紝鎺ユ敹鏁版嵁浠诲姟杩樻湭瀹炵幇锛�" );
+			}
+		}
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TkRtuData.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TkRtuData.java
new file mode 100644
index 0000000..23f334c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TkRtuData.java
@@ -0,0 +1,29 @@
+package com.dy.aceMw.server.rtuData;
+
+import com.dy.common.mw.protocol.Data;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class TkRtuData extends TaskSurpport {
+	
+	private static Logger log = LogManager.getLogger(TkRtuData.class.getName()) ;
+
+	//绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+	public static final String taskId = "TkRtuData" ;
+
+	/**
+	 * 鎵ц鑺傜偣浠诲姟
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 */
+	@Override
+	public void execute(Object data) {
+		Data d = (Data)data ;
+		String rtuAddr = d.getRtuAddr() ;
+		if(rtuAddr == null){
+			log.error("涓ラ噸閿欒锛孯TU涓婅鏁版嵁涓棤RTU鍦板潃锛�" );
+		}else{
+			this.toNextTasks(data);
+		}
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TreeConfig.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TreeConfig.java
new file mode 100644
index 0000000..06bc2cc
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TreeConfig.java
@@ -0,0 +1,6 @@
+package com.dy.aceMw.server.rtuData;
+
+public class TreeConfig {
+	public TaskConfig taskConf ;
+	public TreeConfig[] subTreeConfs ;//鎵�鏈夊瓙鑺傜偣
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TreeParse.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TreeParse.java
new file mode 100644
index 0000000..c9182f1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/TreeParse.java
@@ -0,0 +1,173 @@
+package com.dy.aceMw.server.rtuData;
+
+
+import java.net.URL;
+import java.util.*;
+
+import org.jdom2.Document;
+import org.jdom2.Element;
+import org.jdom2.input.SAXBuilder;
+
+
+public class TreeParse {
+	public List<String> ids ;
+	public List<String> classes ;
+	
+//	public static void main(String args[]) {
+//		TreeParse o = new TreeParse();
+//		TreeConfig conf = o.parseConfig();
+//	}
+
+	public TreeParse(){
+		ids = new ArrayList<String>() ;
+		classes = new ArrayList<String>() ;
+	}
+	
+	/**
+	 * 瑙f瀽澶勭悊鍣ㄩ厤缃�
+	 * @return
+	 */
+	protected TreeConfig parseConfig() {
+		try {
+			ClassLoader classLoader = ClassLoader.getSystemClassLoader();
+			URL configFileURL = classLoader.getResource("RtuDataDealTree.xml");
+			return this.parse(this.createDom(configFileURL)) ;
+		} catch (Exception e) {
+			System.out.println("绯荤粺鍚姩鏃讹紝鍒濆涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鍑洪敊 !");
+			System.out.println(e.getMessage());
+			e.printStackTrace();
+			return null;
+		}
+	}
+	
+	/**
+	 * 
+	 * @return
+	 */
+	private Document createDom(URL configFileURL) throws Exception {
+		if (configFileURL == null) {
+			throw new Exception("鏈緱鍒颁笂琛屾暟鎹鐞嗕换鍔¢厤缃枃浠�!", null);
+		}
+		Document doc = null;
+		try {
+			SAXBuilder sb = new SAXBuilder();
+			doc = sb.build(configFileURL);
+			if (doc == null) {
+				throw new Exception("鏈敓鎴愪笂琛屾暟鎹鐞嗕换鍔¢厤缃枃浠剁殑DOM瀵硅薄!", null);
+			}
+		} catch (Exception e) {
+			throw new Exception("鐢熸垚涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢鐨凞OM瀵硅薄澶辫触!", e);
+		}
+		return doc;
+	}
+
+	/**
+	 * 鍒嗘瀽 
+	 * @return ArrayList<String>
+	 * @throws Exception
+	 */
+	private TreeConfig parse(Document doc) throws Exception {
+		Element root = doc.getRootElement();
+		if (root == null) {
+			throw new Exception("鏈緱鍒颁笂琛屾暟鎹鐞嗕换鍔¢厤缃枃浠舵牴鍏冪礌project!");
+		}
+
+		List<Element> rootTasks = root.getChildren("task") ;
+		if(rootTasks == null || rootTasks.size() == 0){
+			throw new Exception("鏈緱鍒颁笂琛屾暟鎹鐞嗕换鍔¢厤缃枃浠舵牴浠诲姟task!");
+		}
+		if(rootTasks.size() > 1){
+			throw new Exception("鏈緱鍒颁笂琛屾暟鎹鐞嗕换鍔¢厤缃枃浠舵牴浠诲姟task蹇呴』鍙湁涓�涓�!");
+		}
+		
+		TreeConfig tree = new TreeConfig() ;
+		tree.taskConf = new TaskConfig() ;
+		
+		this.parseNode(rootTasks.get(0), tree, tree.taskConf) ;
+		return tree ;
+	}
+	
+	private void parseNode(Element taskEle, TreeConfig me, TaskConfig taskConf)throws Exception {
+//		<task id="task2.1" name="鏋勯�犳暟鎹�" enable="true" class="" /> 
+		if(taskEle == null){
+			throw new Exception("鍒嗘瀽涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢鍑洪敊锛�");
+		}
+		
+		String id = taskEle.getAttributeValue("id") ;
+		if(id == null || id.trim().equals("")){
+			throw new Exception("涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢涓璱d蹇呴』閰嶇疆锛�");
+		}
+		id = id.trim() ;
+		if(ids.contains(id)){
+			throw new Exception("涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢涓璱d=" + id + "閲嶅閰嶇疆锛�");
+		}
+		taskConf.id = id ;
+		ids.add(id) ;
+		
+		String name = taskEle.getAttributeValue("name") ;
+		if(name == null || name.trim().equals("")){
+			throw new Exception("涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢涓璶ame蹇呴』閰嶇疆锛�");
+		}
+		name = name.trim() ;
+		taskConf.name = name ;
+		
+		String enable = taskEle.getAttributeValue("enable") ;
+		if(enable == null || !(enable.trim().equals("true") || enable.trim().equals("false"))){
+			throw new Exception("涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢涓璭nable蹇呴』閰嶇疆锛屽苟涓斿�煎彧鑳戒负true鎴杅alse锛�");
+		}
+		if(enable.trim().equals("true")){
+			taskConf.enable = true ;
+		}
+		if(enable.trim().equals("false")){
+			taskConf.enable = false ;
+		}
+		
+		String clazz = taskEle.getAttributeValue("class") ;
+		if(clazz == null || clazz.trim().equals("")){
+			throw new Exception("涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢涓璫lass蹇呴』閰嶇疆锛�");
+		}
+		clazz = clazz.trim() ;
+		if(classes.contains(clazz)){
+			throw new Exception("涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢涓璫lass=" + clazz + "閲嶅閰嶇疆锛�");
+		}
+		taskConf.clazz = clazz ;
+		classes.add(clazz) ;
+		this.checkClass(taskConf.clazz) ;
+		
+		this.parseSubNode(taskEle, me) ;
+		
+	}
+	
+	private void parseSubNode(Element ele, TreeConfig parent)throws Exception {
+		List<?> list = ele.getChildren("task") ;
+		if(list != null && list.size() > 0){
+			parent.subTreeConfs = new TreeConfig[list.size()] ;
+			Iterator<?> it = list.iterator();
+			Element e = null;
+			int count = 0 ;
+			TreeConfig me ;
+			while(it.hasNext()){
+				e = (Element) it.next();
+				me = new TreeConfig() ;
+				me.taskConf = new TaskConfig() ;
+				parent.subTreeConfs[count++] = me ;
+				parseNode(e, me, me.taskConf) ;
+			}
+		}
+	}
+	
+	private void checkClass(String clazz)throws Exception {
+		Class<?> c = Class.forName(clazz);
+		if (c == null) {
+			throw new Exception("涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢涓笉鑳藉疄渚嬪寲class=" + clazz + "锛�");
+		}else{
+			Object o = c.newInstance();
+			if(o instanceof Task){
+			}else{
+				throw new Exception("涓婅鏁版嵁澶勭悊浠诲姟閰嶇疆鏂囦欢涓璫lass=" + clazz + "蹇呴』瀹炵幇Task鎺ュ彛锛�");
+			}
+		}
+	}
+}
+
+
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/dbSv/RtuSv.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/dbSv/RtuSv.java
new file mode 100644
index 0000000..271001a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/dbSv/RtuSv.java
@@ -0,0 +1,7 @@
+package com.dy.aceMw.server.rtuData.dbSv;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class RtuSv {
+}
diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/dbSv/\350\257\264\346\230\216.txt" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/dbSv/\350\257\264\346\230\216.txt"
new file mode 100644
index 0000000..9429677
--- /dev/null
+++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/dbSv/\350\257\264\346\230\216.txt"
@@ -0,0 +1 @@
+springboot瀹瑰櫒涓殑Server bean
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
new file mode 100644
index 0000000..91fda1b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
@@ -0,0 +1,27 @@
+package com.dy.aceMw.server.rtuData.p206V1_0_0;
+
+
+import com.dy.aceMw.server.rtuData.TaskSurpport;
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+
+public class TkFindP206V1_0_0 extends TaskSurpport {
+	
+	//绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+	public static final String taskId = "TkFindP206V1_0_0" ;
+
+	/**
+	 * 鎵ц鑺傜偣浠诲姟
+	 * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+	 */
+	@Override
+	public void execute(Object data) {
+		Data d = (Data)data ;
+		if(d.getProtocol() != null && d.getProtocol().equals(ProtocolConstantV206V1_0_0.protocolName)){
+			this.toNextTasks(data);
+		}else{
+			//涓嶆槸鏈崗璁殑鏁版嵁
+		}
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/busi/deal/p206V1_0_0/TkPreGenObjs.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
similarity index 93%
rename from pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/busi/deal/p206V1_0_0/TkPreGenObjs.java
rename to pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
index 8ef9515..4e13d52 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/busi/deal/p206V1_0_0/TkPreGenObjs.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
@@ -1,6 +1,6 @@
-package com.dy.aceMw.server.busi.deal.p206V1_0_0;
+package com.dy.aceMw.server.rtuData.p206V1_0_0;
 
-import com.dy.aceMw.server.busi.deal.TaskSurpport;
+import com.dy.aceMw.server.rtuData.TaskSurpport;
 import com.dy.common.mw.protocol.Data;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -20,6 +20,7 @@
 	public void execute(Object data) {
 		Data d = (Data)data ;
 		String rtuAddr = d.getRtuAddr() ;
+		log.info("RTU" + rtuAddr + "鏁版嵁鍒版锛岃繕鏈疄鐜板鐞�:" + data.toString());
 		//寰楀埌鏈湴RTU 鏁版嵁锛屼互澶囧悗闈㈣妭鐐瑰簲鐢�
 		/*
 		BuziInterface baseBusi = BuziGeter.getBaseBusi() ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
new file mode 100644
index 0000000..266d88f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
@@ -0,0 +1,74 @@
+package com.dy.aceMw.server.tasks;
+
+import com.dy.aceMw.server.rtuData.RtuDataNode;
+import com.dy.aceMw.server.rtuData.RtuDataCache;
+import com.dy.common.mw.core.CoreTask;
+import com.dy.common.queue.Node;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * 瀵筊TU涓婅鏁版嵁杩涜涓氬姟澶勭悊
+ */
+public class FromRtuConstantTask extends CoreTask {
+    private static final Logger log = LogManager.getLogger(FromRtuConstantTask.class.getName());
+
+    /**
+     * 鍦ㄥ崟绾跨▼鐜涓繍琛�
+     */
+    @Override
+    public Integer excute() {
+        try{
+            return dealRtuUpData() ;
+        }catch(Exception e){
+            log.error(e);
+        }
+        return null ;
+    }
+
+    /**
+     * 澶勭悊涓婅鏁版嵁
+     */
+    public Integer dealRtuUpData() {
+        Node first = RtuDataCache.getFirstQueueNode() ;
+        if(first != null){
+            Integer count = RtuDataCache.size() ;
+            Node last = RtuDataCache.getLastQueueNode() ;
+            this.doDealRtuUpData(first, last);
+            return count ;
+        }
+        return null ;
+    }
+
+    /**
+     * 澶勭悊缂撳瓨鐨勪笂琛屾暟鎹妭鐐�
+     * @param first 绗竴涓妭鐐�
+     * @param last 鏈�鍚庝竴涓妭鐐�
+     */
+    private void doDealRtuUpData(Node first, Node last){
+        if(last != null){
+            //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
+            Node pre = last.pre ;
+            dealNode(last) ;
+            if(first != null && first != last){
+                doDealRtuUpData(first, pre) ;
+            }else if(first != null && first == last){
+                //鍋滄
+            }else if(first == null){
+                //杩欑鎯呭喌涓嶄細瀛樺湪
+                doDealRtuUpData(null, pre) ;
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊涓�涓妭鐐�
+     * @param node 鑺傜偣
+     */
+    private void dealNode(Node node){
+        RtuDataNode obj = (RtuDataNode)node.obj ;
+        obj.dealSelf() ;
+        RtuDataCache.removeNode(node);
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/resources/RtuDataDealTree.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/resources/RtuDataDealTree.xml
new file mode 100644
index 0000000..8a89412
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/resources/RtuDataDealTree.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE project>
+<project>
+	<!--
+	id:涓庡搴旂被涓殑闈欐�佹垚鍛樺彉閲弔askId涓�鑷�
+	enable:鏍囪瘑鏈妭鐐规槸鍚︽墽琛岋紝鑻ユ湰鑺傜偣涓嶆墽琛岋紝鍒欑洿鎺ヨ繘鍏ュ叾瀛愯妭鐐�
+	-->
+	<task id="TkReceive" name="鎺ユ敹鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.TkReceive">
+		<task id="TkRtuData" name="鎺ユ敹RTU鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.TkRtuData">
+			<task id="TkFindP206V1_0_0" name="璇嗗埆P206V1_0_0鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.TkFindP206V1_0_0">
+				<task id="TkPreGenObjs" name="棰勫厛鍑嗗鍚勫璞�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.TkPreGenObjs">
+				</task>
+			</task>
+		</task>
+	</task>
+</project>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/resources/Tree_.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/resources/Tree_.xml
new file mode 100644
index 0000000..8931838
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/resources/Tree_.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE project>
+<project>
+<!--
+id:涓庡搴旂被涓殑闈欐�佹垚鍛樺彉閲弔askId涓�鑷�
+enable:鏍囪瘑鏈妭鐐规槸鍚︽墽琛岋紝鑻ユ湰鑺傜偣涓嶆墽琛岋紝鍒欑洿鎺ヨ繘鍏ュ叾瀛愯妭鐐�
+-->
+<task id="TkReceive" name="鎺ユ敹鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.TkReceive">
+	<task id="TkRtuData" name="鎺ユ敹RTU鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.TkRtuData">
+		<task id="TkFindP206V1_0_0" name="璇嗗埆P206V1_0_0鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.TkFindP206V1_0_0">
+			<task id="TkPreGenObjs" name="棰勫厛鍑嗗鍚勫璞�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.TkPreGenObjs">
+				<!-- 璇嗗埆娴佹氮鑰匯TU锛屾暟鎹簱涓病鏈夋垨鏁版嵁搴撳瓨鍦ㄤ絾鏈垎閰嶇疆渚涙按鏈烘瀯 -->
+				<task id="TkDealRtuTramp" name="璇嗗埆娴佹氮鑰匯TU" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.TkDealRtuTramp" />
+				<!-- 闈炴祦娴�匯TU锛屽繀椤绘斁鍦═kDealRtuTramp鍚庨潰 -->
+				<task id="TkDealNoRtuTramp" name="闈炴祦娴�匯TU" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.TkDealNoRtuTramp">
+					<!-- 璇嗗埆涓诲姩涓婃姤鏁版嵁 -->
+					<task id="TkFindAutoReport" name="璇嗗埆涓诲姩涓婃姤鍙婅Е鍙戜笂鎶ユ暟鎹�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.TkFindAutoReport">
+						<!-- 妫�鏌ユ椂闂寸瓑涓嶆纭殑涓婃姤鏁版嵁 -->
+						<task id="TkCheckAutoReport" name="妫�鏌ユ椂闂寸瓑涓嶆纭殑涓婃姤鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkCheckAutoReport">
+							<!-- 妫�鏌ラ噸澶嶄笂鎶ユ暟鎹� -->
+							<task id="TkCheckRepeatReport" name="妫�鏌ラ噸澶嶄笂鎶ユ暟鎹�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkCheckRepeatReport">
+								<!-- Mn杩愮淮绯荤粺 -->
+								<task id="TkMnRtuDealAutoReportLastAlarm" name="杩愮淮RTU涓婃姤鏈�鏂版姤璀�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkMnRtuDealAutoReportLastAlarm" />
+								<!-- RTU涓诲姩涓婃姤鏁版嵁蹇呴』鍦≧TU涓诲姩涓婃姤鎶ヨ浠诲姟鐨勪笅闈紝浠ュ涓诲姩涓婃姤鏁版嵁涓褰曟槸鍚︽湁鎶ヨ-->
+								<task id="TkMnRtuDealAutoReportLastData" name="杩愮淮RTU涓诲姩涓婃姤鏈�鏂版暟鎹�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkMnRtuDealAutoReportLastData" />
+								<!-- RTU瀹炴椂锛堣Е鍙戯級涓婃姤鏁版嵁蹇呴』鍦≧TU涓诲姩涓婃姤鎶ヨ浠诲姟鐨勪笅闈紝浠ュ涓诲姩涓婃姤鏁版嵁涓褰曟槸鍚︽湁鎶ヨ-->
+								<task id="TkMnRtuDealRealReportLastData" name="杩愮淮RTU瀹炴椂锛堣Е鍙戯級涓婃姤鏈�鏂版暟鎹�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkMnRtuDealRealReportLastData" />
+								<!-- Org渚涙按鏈烘瀯绯荤粺 -->
+								<task id="TkOrgRtuDealAutoReportLastAlarm" name="渚涙按鏈烘瀯RTU涓诲姩涓婃姤鏈�鏂版姤璀�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealAutoReportLastAlarm">
+									<task id="TkOrgRtuDealAutoReportAlarm" name="渚涙按鏈烘瀯RTU涓诲姩涓婃姤鎶ヨ" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealAutoReportAlarm" />
+									<task id="TkOrgRtuDealReportValveOpResult" name="渚涙按鏈烘瀯RTU涓诲姩涓婃姤寮�鍏抽榾缁撴灉" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealReportValveOpResult" />
+								</task>
+								<!-- RTU涓诲姩涓婃姤鏁版嵁蹇呴』鍦≧TU涓诲姩涓婃姤鎶ヨ浠诲姟鐨勪笅闈紝浠ュ涓诲姩涓婃姤鏁版嵁涓褰曟槸鍚︽湁鎶ヨ-->
+								<task id="TkOrgRtuDealDayAmountAlarm" name="渚涙按鏈烘瀯RTU鏃ョ粨绱娴侀噺鎶ヨ" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealDayAmountAlarm" >
+									<task id="TkOrgRtuDeal48HourNoAmount" name="渚涙按鏈烘瀯RTU48灏忔椂鏈敤姘�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDeal48HourNoAmount" >
+										<task id="TkOrgRtuDealAutoReportLastData" name="渚涙按鏈烘瀯RTU涓诲姩涓婃姤鏈�鏂版暟鎹�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealAutoReportLastData">
+											<task id="TkOrgRtuDealAutoReportData" name="渚涙按鏈烘瀯RTU涓诲姩涓婃姤鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealAutoReportData" />
+											<task id="TkOrgRtuDealCycleData" name="渚涙按鏈烘瀯RTU涓诲姩涓婃姤鍛ㄦ湡閲囬泦鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealCycleData">
+												<task id="TkOrgRtuDealCycleLongSmallAmountAlarm" name="渚涙按鏈烘瀯RTU涓诲姩涓婃姤鍛ㄦ湡閲囬泦鏁版嵁闀挎祦姘村垎鏋�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealCycleLongSmallAmountAlarm" />
+											</task>
+											<task id="TkOrgRtuDealAmountCost" name="渚涙按鏈烘瀯RTU涓诲姩涓婃姤璁$畻鏃ユ按閲忋�佹湀姘撮噺銆佸強姘磋垂" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealAmountCost" >
+												<task id="TkOrgRtuDealPayCost" name="渚涙按鏈烘瀯鐢ㄦ按鎴锋按琛ㄧ數瀛愰挶鍖呮敮浠樻按璐�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealPayCost" />
+											</task>
+										</task>
+									</task>
+								</task>
+								<!-- RTU瀹炴椂锛堣Е鍙戯級涓婃姤鏁版嵁蹇呴』鍦≧TU涓诲姩涓婃姤鎶ヨ浠诲姟鐨勪笅闈紝浠ュ涓诲姩涓婃姤鏁版嵁涓褰曟槸鍚︽湁鎶ヨ-->
+								<task id="TkOrgRtuDealRealReportLastData" name="渚涙按鏈烘瀯RTU瀹炴椂锛堣Е鍙戯級涓婃姤鏈�鏂版暟鎹�" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealRealReportLastData">
+									<task id="TkOrgRtuDealRealReportData" name="渚涙按鏈烘瀯RTU瀹炴椂锛堣Е鍙戯級涓婃姤鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.autoReport.TkOrgRtuDealRealReportData" />
+								</task>
+							</task>
+						</task>
+					</task>
+					<!-- 璇嗗埆鍛戒护鍝嶅簲鏁版嵁 -->
+					<task id="TkFindComResponse" name="璇嗗埆鍝嶅簲鍛戒护鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.TkFindComResponse">
+						<task id="TkRtuDealCommandResponse" name="RTU鍝嶅簲鍛戒护鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.comResponse.TkRtuDealCommandResponse" >
+							<task id="TkRtuDealSetParamComResponse" name="RTU鍝嶅簲璁剧疆鍙傛暟鍛戒护鏁版嵁" enable="true" class="com.dy.aceMw.server.rtuData.p206V1_0_0.comResponse.TkRtuDealSetParamComResponse" />
+						</task>
+					</task>
+				</task>
+			</task>
+		</task>
+		<task id="TkFindHAC_NBhV2_5" name="璇嗗埆HAC_NBhV2_5鏁版嵁" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.TkFindHAC_NBhV2_5">
+			<task id="TkPipPreGenObjs" name="棰勫厛鍑嗗鍚勫璞�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.TkPipPreGenObjs">
+				<!-- 璇嗗埆娴佹氮鑰呯缃戞按琛紝鏁版嵁搴撲腑娌℃湁鎴栨暟鎹簱瀛樺湪浣嗘湭鍒嗛厤缃緵姘存満鏋� -->
+				<task id="TkPipDealRtuTramp" name="璇嗗埆娴佹氮鑰呯缃戞按琛�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.TkPipDealRtuTramp" />
+				<!-- 闈炴祦娴�呯缃戞按琛紝蹇呴』鏀惧湪TkDealRtuTramp鍚庨潰 -->
+				<task id="TkPipDealNoRtuTramp" name="闈炴祦娴�呯缃戞按琛�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.TkPipDealNoRtuTramp">
+					<!-- 璇嗗埆涓诲姩涓婃姤鏁版嵁 -->
+					<task id="TkPipFindAutoReport" name="璇嗗埆涓诲姩涓婃姤鍙婅Е鍙戜笂鎶ユ暟鎹�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.TkPipFindAutoReport">
+						<!-- 妫�鏌ユ椂闂寸瓑涓嶆纭殑涓婃姤鏁版嵁 -->
+						<task id="TkPipCheckAutoReport" name="妫�鏌ユ椂闂寸瓑涓嶆纭殑涓婃姤鏁版嵁" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipCheckAutoReport">
+							<task id="TkPipCheckRepeatAutoReport" name="妫�鏌ラ噸澶嶄笂鎶ユ暟鎹�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipCheckRepeatAutoReport">
+								<!-- Mn杩愮淮绯荤粺 -->
+								<task id="TkPipMnRtuDealAutoReportLastAlarm" name="杩愮淮绠$綉姘磋〃涓婃姤鏈�鏂版姤璀�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipMnRtuDealAutoReportLastAlarm" />
+								<!-- RTU涓诲姩涓婃姤鏁版嵁蹇呴』鍦≧TU涓诲姩涓婃姤鎶ヨ浠诲姟鐨勪笅闈紝浠ュ涓诲姩涓婃姤鏁版嵁涓褰曟槸鍚︽湁鎶ヨ-->
+								<task id="TkPipMnRtuDealAutoReportLastData" name="杩愮淮绠$綉姘磋〃涓诲姩涓婃姤鏈�鏂版暟鎹�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipMnRtuDealAutoReportLastData" />
+								<!-- Org渚涙按鏈烘瀯绯荤粺 -->
+								<task id="TkPipOrgRtuDealAutoReportLastAlarm" name="渚涙按鏈烘瀯绠$綉姘磋〃涓诲姩涓婃姤鏈�鏂版姤璀�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipOrgRtuDealAutoReportLastAlarm">
+									<task id="TkPipOrgRtuDealAutoReportAlarm" name="渚涙按鏈烘瀯绠$綉姘磋〃涓诲姩涓婃姤鎶ヨ" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipOrgRtuDealAutoReportAlarm" />
+								</task>
+								<!-- RTU涓诲姩涓婃姤鏁版嵁蹇呴』鍦≧TU涓诲姩涓婃姤鎶ヨ浠诲姟鐨勪笅闈紝浠ュ涓诲姩涓婃姤鏁版嵁涓褰曟槸鍚︽湁鎶ヨ-->
+								<task id="TkPipOrgRtuDealAutoReportLastData" name="渚涙按鏈烘瀯绠$綉姘磋〃涓诲姩涓婃姤鏈�鏂版暟鎹�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipOrgRtuDealAutoReportLastData">
+									<task id="TkPipOrgRtuDealAutoReportData" name="渚涙按鏈烘瀯绠$綉姘磋〃涓诲姩涓婃姤鏁版嵁" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipOrgRtuDealAutoReportData" />
+									<task id="TkPipOrgRtuDealAmount" name="渚涙按鏈烘瀯绠$綉姘磋〃鏈堟祦閲忕粺璁�" enable="true" class="com.dy.busi.server.rtuData.HAC_NBhV2_5.autoReport.TkPipOrgRtuDealAmount" />
+								</task>
+							</task>
+						</task>
+					</task>
+				</task>
+			</task>
+		</task>
+	</task>
+</task>
+</project>
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml
index 6e14d6b..9a3404c 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml
@@ -37,6 +37,21 @@
     </dependencies>
 
     <build>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                    <include>**/*.yml</include>
+                </includes>
+            </resource>
+        </resources>
         <plugins>
             <plugin>
                 <!-- 璇ユ彃浠朵笉浼氬皢椤圭洰涓紩鍏ョ殑渚濊禆鎵撹繘鏈�缁堢殑 Jar 鏂囦欢 -->
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java
index 008ed2a..c8d961c 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java
@@ -101,7 +101,7 @@
 			rqVo.id = id ;
 			rqVo.token = token ;
 			rqVo.code = Code.cd5 ;
-			rqVo.count = count ;
+			rqVo.overCount = count ;
 			String json = rqVo.toJson() ;
 			frmWork.syncRequest(json) ;
 		} catch (Exception e) {
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java
index c21c432..99d80ae 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java
@@ -9,9 +9,11 @@
 	public String token ;
 	
 	public String code ;
-	
+
 	public Integer count;//aepTest涓婃姤鏁版嵁鏁伴噺
-	
+
+	public Integer overCount;//aepTest缁撴潫涓婃姤鏁版嵁鏁伴噺
+
 	public Boolean over ;//aepTest涓婃姤鏁版嵁缁撴潫
 	
 	public Long seconds ;//aepTest涓婃姤鏁版嵁鐢ㄦ椂(绉�)
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java
index 16ea1df..610257f 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java
@@ -1,5 +1,8 @@
 package com.dy.testClient.tcpClient;
 
+import com.dy.common.util.ByteUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
@@ -8,6 +11,8 @@
 import java.io.IOException;
 
 public class LocalDecoder extends CumulativeProtocolDecoder {
+
+    private static final Logger log = LogManager.getLogger(LocalDecoder.class) ;
 
     private static final String DECODER_STATE_KEY = LocalDecoder.class.getName() + ".STATE";
 
@@ -23,6 +28,7 @@
             byte[] preByte = new byte[remain];
             in.get(preByte) ;
             in.position(0) ;
+            log.info("鏀跺埌涓績搴旂瓟鏁版嵁锛�" + ByteUtil.bytes2Hex(preByte, true));
         }
         return true;
     }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
index 0a07ff7..e50537f 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
@@ -6,16 +6,20 @@
 import com.dy.common.threadPool.ThreadPool;
 import com.dy.common.util.ByteUtil;
 import com.dy.testClient.ServerProperties;
-import org.apache.mina.core.future.CloseFuture;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.mina.core.session.IoSession;
 
 public class MyThreadJob  implements ThreadPool.Job {
+
+    private static final Logger log = LogManager.getLogger(MyThreadJob.class) ;
 
     public String rtuAddr;
     public String serverIp;
     public Integer serverPort;
 
     public IoSession session ;
+    public boolean exceptionOnConnect = false ;
 
     public static final int connectTimeout = 3000 ;
 
@@ -34,12 +38,9 @@
 
     @Override
     public void execute() throws Exception {
-        if(session == null){
-            IoSession se = new TcpConnect().createSession(this.rtuAddr, this, this.serverIp, this.serverPort, connectTimeout, new TcpHandler()) ;
-            if(se != null){
-                this.session = se ;
-            }
-        }else{
+        log.info("RTU" + rtuAddr + "寮�濮嬩换鍔�");
+        if(session != null){
+            log.info("RTU" + rtuAddr + "灏嗚鎵ц" + ServerProperties.sendTimes + "杞浠诲姟锛屽綋鍓嶈疆娆℃槸" + sendTimes);
             if(sendTimes <= ServerProperties.sendTimes){
                 sendDataOfP206V1_0_0() ;
             }else{
@@ -53,9 +54,11 @@
             if(heartbeatTimes >= ServerProperties.heartbeatTimes){
                 heartbeatTimes = 0 ;
                 this.sendReportData() ;
+                TcpClUnit.clientSendData();
                 sendTimes++ ;
             }else{
                 this.sendHeartbeat() ;
+                TcpClUnit.clientSendData();
                 heartbeatTimes++ ;
             }
         }catch(Exception e){
@@ -66,23 +69,30 @@
         try{
             byte[] bs = this.createHeartbeat() ;
             this.session.write(bs) ;
+            log.info("RTU" + rtuAddr + "鍙戦�佷簡蹇冭烦鏁版嵁锛�" + ByteUtil.bytes2Hex(bs, false));
         }catch (Exception e){
             e.printStackTrace();
         }
     }
 
     private void sendReportData(){
-        TcpClUnit.clientSendData();
+        try{
+            byte[] bs = this.createReport() ;
+            this.session.write(bs) ;
+            log.info("RTU" + rtuAddr + "鍙戦�佷簡涓婃姤鏁版嵁锛�" + ByteUtil.bytes2Hex(bs, false));
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
 
     private void jobOver(){
-        CloseFuture closeFuture = session.closeOnFlush() ;
+        session.closeOnFlush() ;
         this.isOver = true ;
         TcpClUnit.clientOver() ;
     }
 
     /**
-     * 鏋勯�犱笅琛屾暟鎹�
+     * 鏋勯�犲績璺虫暟鎹�
      * @return 瀛楄妭鏁扮粍
      * @throws Exception 寮傚父
      */
@@ -100,7 +110,7 @@
         bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
 
         index++ ;
-        bsHead[index] = commonV1_0_1.createCtrl((byte)0) ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0x80, (byte)0) ;//鎺у埗鍩熷姛鑳界爜锛氱‘璁� 璁ゅ彲
 
         index++ ;
         GlCreate.createRtuAddr(this.rtuAddr, bsHead, index);
@@ -115,7 +125,91 @@
 
         GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
 
-        bytes = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+    /**
+     * 鏋勯�犱笂鎶ユ暟鎹�
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] createReport( ) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0x80, (byte)3) ;//鎺у埗鍩熷姛鑳界爜3锛氳嚜鎶ュ抚锛屾祦閲忥紙姘撮噺锛夊弬鏁�
+
+        index++ ;
+        GlCreate.createRtuAddr(this.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes("C0", bsHead, index) ;
+
+        byte[] bs = new byte[2] ;
+        bs[0] = (byte)0x04 ;//鏈夋祦閲忔暟鎹�
+        bs[1] = (byte)0xE0 ;//鏈夋按鍘嬨�佺數姹犵數鍘嬨�佷俊鍙峰己搴�
+
+        bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+        bs = new byte[5] ;//鐬椂娴侀噺
+        bs[0] = ByteUtil.int2BCD_LE (21)[0] ;
+        bs[1] = ByteUtil.int2BCD_LE (43)[0] ;
+        bs[2] = ByteUtil.int2BCD_LE (65)[0] ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[5] ;//绱娴侀噺
+        bs[0] = ByteUtil.int2BCD_LE (21)[0] ;
+        bs[1] = ByteUtil.int2BCD_LE (43)[0] ;
+        bs[2] = ByteUtil.int2BCD_LE (65)[0] ;
+        bs[3] = ByteUtil.int2BCD_LE (87)[0] ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[5] ;//鎹熷け娴侀噺
+        bs[0] = ByteUtil.int2BCD_LE (10)[0] ;
+        bs[1] = ByteUtil.int2BCD_LE (32)[0] ;
+        bs[2] = ByteUtil.int2BCD_LE (54)[0] ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;//姘村帇
+        bs[0] = ByteUtil.int2BCD_LE (10)[0] ;
+        bs[1] = ByteUtil.int2BCD_LE (32)[0] ;
+        bs[2] = ByteUtil.int2BCD_LE (4)[0] ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;//鐢垫睜鐢靛帇
+        bs[0] = ByteUtil.int2BCD_LE (10)[0] ;
+        bs[1] = ByteUtil.int2BCD_LE (32)[0] ;
+        bs[2] = ByteUtil.int2BCD_LE (10)[0] ;
+        bs[3] = ByteUtil.int2BCD_LE (32)[0] ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[1] ;//淇″彿寮哄害
+        bs[0] = ByteUtil.int2BCD_LE (21)[0] ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[6] ;//鏃堕挓
+        GlCreate.createTp(bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
 
         return bytes ;
     }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java
index 167adde..78a8b90 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java
@@ -5,10 +5,12 @@
 import com.dy.common.mw.UnitStartedCallbackInterface;
 import com.dy.common.threadPool.ThreadPool;
 import com.dy.common.threadPool.TreadPoolFactory;
+import com.dy.common.util.Callback;
 import com.dy.testClient.ServerProperties;
 import com.dy.testClient.rmiClient.RmiClUnit;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.apache.mina.core.session.IoSession;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -26,7 +28,7 @@
     private static ThreadPool.Pool pool ;
     private static Map<String, MyThreadJob> jobMap = new HashMap<>() ;
 
-    private static Integer totalRunedClientCount = 0;
+    private static Integer totalRtuClientCount = 0;
     private static Integer totalSendDataCount = 0;
     private static Integer totalOverClientCount = 0;
 
@@ -72,23 +74,46 @@
                         if(!ServerProperties.startWork){
                             Thread.sleep(100L);
                         }else{
-                            startTime = System.currentTimeMillis() ;
-                            for(Long addr = ServerProperties.rtuAddrStart; addr <= ServerProperties.rtuAddrEnd; addr++){
-                                totalRunedClientCount++ ;
-                                createImitate(addr) ;
-                            }
-                            startJob() ;
-                            while(true){
-                                if(totalOverClientCount.longValue() >= totalRunedClientCount.longValue()){
-                                    Long seconds = (System.currentTimeMillis() - startTime)/1000 ;
-                                    RmiClUnit.getInstance().allOver(seconds) ;
-                                    System.out.println("鍏辩敤鏃�" + seconds + "绉�");
-                                    break ;
-                                }else{
-                                    Thread.sleep(100L);
+                            try{
+                                startTime = System.currentTimeMillis() ;
+                                for(Long addr = ServerProperties.rtuAddrStart; addr <= ServerProperties.rtuAddrEnd; addr++){
+                                    totalRtuClientCount++ ;
+                                    createImitate(addr) ;
                                 }
+                                log.info("鍏辨ā鎷熶簡" + totalRtuClientCount + "鍙癛TU");
+
+                                Collection<MyThreadJob> collection = jobMap.values() ;
+                                for(MyThreadJob job : collection){
+                                    connectServer(job) ;
+                                }
+                                log.info("鍚姩鎵�鏈塕TU杩炴帴閫氫俊涓棿浠�");
+
+                                while (true){
+                                    int noConnectedCount = checkConnected() ;
+                                    if(noConnectedCount > 0){
+                                        log.info("绛夊緟" + noConnectedCount + "鍙癛TU杩炴帴缃戠粶");
+                                        Thread.sleep(100L);
+                                    }else{
+                                        break ;
+                                    }
+                                }
+
+                                startJob() ;
+                                while(true){
+                                    if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){
+                                        Long seconds = (System.currentTimeMillis() - startTime)/1000 ;
+                                        RmiClUnit.getInstance().allOver(seconds) ;
+                                        log.info("鍏辩敤鏃�" + seconds + "绉�");
+                                        break ;
+                                    }else{
+                                        Thread.sleep(100L);
+                                    }
+                                }
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }finally {
+                                break ;
                             }
-                            break;
                         }
                     }
                 } catch (Exception e) {
@@ -106,18 +131,71 @@
         jobMap.put("" + rtuAddr, new MyThreadJob("" + rtuAddr, ServerProperties.tcpServerIp, ServerProperties.tcpServerPort)) ;
     }
 
+
+    private void connectServer(MyThreadJob job){
+        if(job.session == null){
+            try{
+                new TcpConnect().createSession(job.rtuAddr,
+                        job,
+                        job.serverIp,
+                        job.serverPort,
+                        job.connectTimeout,
+                        new TcpHandler(),
+                        new Callback() {
+                            @Override
+                            public void call(Object obj) {
+                                if(obj == null){
+                                    log.error("鍒涘缓缃戠粶浼氳瘽杩斿洖涓簄ull");
+                                }else{
+                                    job.session = (IoSession)obj ;
+                                }
+                            }
+                            @Override
+                            public void call(Object... objs) {
+                            }
+                            @Override
+                            public void exception(Exception e) {
+                            }
+                        }) ;
+            }catch (Exception e){
+                job.exceptionOnConnect = true ;
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private int checkConnected(){
+        int noConnectedCount = 0 ;
+        Collection<MyThreadJob> collection = jobMap.values() ;
+        for(MyThreadJob job : collection){
+            if(job.session == null && !job.exceptionOnConnect){
+                noConnectedCount++ ;
+            }
+        }
+        return noConnectedCount;
+    }
+
     private void startJob(){
         new Thread(new Runnable(){
             @Override
             public void run() {
                 try {
-                    Thread.sleep(1000L);
+                    int notOverCount;
                     while(true){
+                        notOverCount = 0 ;
                         Collection<MyThreadJob> collection = jobMap.values() ;
                         for(MyThreadJob job : collection){
-                            pool.putJob(job);
+                            if(!job.isOver){
+                                notOverCount++ ;
+                                pool.putJob(job);
+                            }
                         }
-                        Thread.sleep(ServerProperties.sendInterval * 1000);
+                        if(notOverCount > 0){
+                            log.info("褰撳墠杩樻湁" + notOverCount + "鍙癛TU鏈畬鎴愪换鍔�");
+                            Thread.sleep(ServerProperties.sendInterval * 1000);
+                        }else{
+                            break ;
+                        }
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
@@ -129,17 +207,37 @@
 
     public static synchronized void clientSendData(){
         totalSendDataCount++;
-        if(totalSendDataCount % 100 == 0){
+        if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){
             RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount);
             System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹�");
+        }else{
+            if(totalRtuClientCount > 100){
+                if(totalSendDataCount % 100 == 0){
+                    RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount);
+                    System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹�");
+                }
+            }else{
+                RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount);
+                System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹�");
+            }
         }
     }
 
     public static synchronized void clientOver(){
         totalOverClientCount++;
-        if(totalOverClientCount % 100 == 0){
+        if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){
             RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount);
-            System.out.println("宸叉湁" + totalOverClientCount + "瀹屾垚浜嗕换鍔�");
+            System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�");
+        }else{
+            if(totalRtuClientCount > 100) {
+                if (totalOverClientCount % 100 == 0) {
+                    RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount);
+                    System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�");
+                }
+            }else{
+                RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount);
+                System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�");
+            }
         }
     }
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpConnect.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpConnect.java
index cdf2c8e..a4dae41 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpConnect.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpConnect.java
@@ -1,5 +1,6 @@
 package com.dy.testClient.tcpClient;
 
+import com.dy.common.util.Callback;
 import org.apache.mina.core.future.ConnectFuture;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
@@ -28,9 +29,18 @@
      * @param job rtu宸ヤ綔绫�
      * @param host 鏈嶅姟鍣║RI
      * @param port 鏈嶅姟鍣ㄧ鍙�
+     * @param connectTimeout 杩炴帴瓒呮椂鏃堕暱
+     * @param handler 鏁版嵁澶勭悊鑰�
+     * @param callback 鍥炶皟
      * @return 缃戠粶浼氳瘽
      */
-    public IoSession createSession(String rtuAddr, MyThreadJob job, String host , int port , int connectTimeout , TcpHandler handler) throws Exception{
+    public void createSession(String rtuAddr,
+                                   MyThreadJob job,
+                                   String host ,
+                                   int port ,
+                                   int connectTimeout ,
+                                   TcpHandler handler,
+                                   Callback callback) throws Exception{
         SocketConnector connector = new NioSocketConnector();
         connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new LocalCodecFactory()));
         connector.setHandler(handler);
@@ -39,7 +49,7 @@
         IoSession se = connectFuture.getSession();
         se.setAttribute(rtuAddrKey, rtuAddr) ;
         se.setAttribute(threadJobKey, job) ;
-        return se ;
+        callback.call(se) ;
     }
 
 
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/console/Command.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/console/Command.java
index e002217..263786c 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/console/Command.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/console/Command.java
@@ -108,6 +108,9 @@
 					if(sta.count != null){
 						prtWrt.println("    宸茬粡涓婃姤鏁版嵁锛�" + sta.count + "鏉�");
 					}
+					if(sta.overCount != null){
+						prtWrt.println("    宸茬粡瀹屾垚涓婃姤鏁版嵁锛�" + sta.overCount + "鍙癛TU");
+					}
 					if(sta.over != null && sta.over){
 						prtWrt.println("    涓婃姤鏁版嵁宸茬粡瀹屾垚锛屽叡鐢ㄦ椂锛�" + sta.seconds + "绉�");
 					}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java
index ca88a20..cf45570 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java
@@ -161,10 +161,10 @@
 		MwTestClientStatus sta = token2ClientMap.get("" + token);
 		if(sta == null){
 			sta = new MwTestClientStatus() ;
-			sta.overCount = rqVo.count ;
+			sta.overCount = rqVo.overCount ;
 			token2ClientMap.put("" + token, sta);
 		}else{
-			sta.count = rqVo.count ;
+			sta.overCount = rqVo.overCount ;
 		}
 	}
 
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/RmiRequestVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/RmiRequestVo.java
new file mode 100644
index 0000000..b7e3ba5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/RmiRequestVo.java
@@ -0,0 +1,96 @@
+package com.dy.testServer.forRmi;
+
+import com.alibaba.fastjson2.JSON;
+
+public class RmiRequestVo {
+	
+	public String id ;//瀹㈡埛绔疘D
+	
+	public String token ;//鏈嶅姟绔垎閰嶇殑token
+	
+	public String code ;
+	
+	public Integer count;//mwTest涓婃姤鏁版嵁鏁伴噺
+
+	public Integer overCount;//aepTest缁撴潫涓婃姤鏁版嵁鏁伴噺
+
+	public Boolean over ;//mwTest涓婃姤鏁版嵁缁撴潫
+	
+	public Long seconds ;//mwTest涓婃姤鏁版嵁鐢ㄦ椂(绉�)
+	
+	/**
+	 * 瀵硅薄杞垚json
+	 * @return json
+	 * @throws Exception 寮傚父
+	 */
+	public String toJson()throws Exception{
+		try{
+			return JSON.toJSONString(this) ;
+			//return new JSONSerializer().exclude(new String[]{"class", "*.class"}).deepSerialize(this);
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+	/**
+	 * json杞垚瀵硅薄
+	 * @param json 鍙傛暟
+	 * @return 瀵硅薄
+	 * @throws Exception 寮傚父
+	 */
+	public static RmiRequestVo jsonToObject(String json)throws Exception{
+		try{
+			return JSON.parseObject(json, RmiRequestVo.class) ;
+			//JSONDeserializer<RmiRequestVo> jsonD = new JSONDeserializer<>() ;
+			//RmiRequestVo rqVo = jsonD.deserialize(json, RmiRequestVo.class) ;
+			//return rqVo ;
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+
+	public String getId() {
+		return id;
+	}
+	public void setId(String id) {
+		this.id = id;
+	}
+	public String getToken() {
+		return token;
+	}
+	public void setToken(String id) {
+		this.token = id;
+	}
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+	public Integer getCount() {
+		return count;
+	}
+	public void setCount(Integer count) {
+		this.count = count;
+	}
+	public Boolean getOver() {
+		return over;
+	}
+	public void setOver(Boolean over) {
+		this.over = over;
+	}
+	public Long getSeconds() {
+		return seconds;
+	}
+	public void setSeconds(Long seconds) {
+		this.seconds = seconds;
+	}
+
+	public Integer getOverCount() {
+		return overCount;
+	}
+
+	public void setOverCount(Integer overCount) {
+		this.overCount = overCount;
+	}
+}

--
Gitblit v1.8.0