From e2c28bc98587c6edd6a38f06b972ff51d998028f Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期三, 27 十一月 2024 08:52:05 +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/AnnotationScan.java                            |   62 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableHandle.java            |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java                                |   15 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java                |    3 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/Server.java                             |   14 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1602_Down.java            |   90 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java                |   50 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLine.java                          |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailableVo.java         |    7 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Up.java                |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/PipIrrMwSimulateRtuApplication.java     |   77 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java                   |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9603_Up.java              |   73 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml                                                |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1601_Down.java            |  108 +++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml                                       |   16 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java                           |   54 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java             |    3 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrIdIsRtuAddr.java            |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/log4j2.xml                                         |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java             |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailable.java           |   11 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java                           |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailableHandleImp.java            |  176 +++-
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java             |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/TestController.java          |   22 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java         |   24 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java                           |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLineVo.java                        |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java                |   51 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java                 |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java            |   38 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java                |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(test测试).xml                                        |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java               |   12 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java             |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java                   |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/WebDownComTask.java                  |   24 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailablePool.java                 |   11 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java                 |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnit.java                              |   10 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailable.java                     |   19 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java                 |   12 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Up.java                |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java           |    8 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java                   |   17 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSession.java                     |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.xml                                         |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java                           |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java                           |   10 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9601_Up.java              |   73 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java                |   24 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java                           |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(ym元谋).xml                                          |    8 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Up.java                |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml                                         |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/ProtocolConstantV206V202404.java   |   25 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/OnLineV202404.java                 |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java              |   16 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java            |   35 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd960XVo.java            |   23 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java                 |   87 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1600_Down.java            |   79 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Up.java                |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(sp沙盘).xml                                          |    8 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/log4j2.xml                                           |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java                 |   30 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java                |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java                       |   22 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/resources/log4j2.xml                                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationDriver.java                          |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolCache.java                             |   40 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9602_Up.java              |   73 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java                |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java                   |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/MqttClientConnectorPool.java |    6 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/ServerProperties.java                   |    3 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java                 |    8 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableStatus.java            |   10 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java                |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1603_Down.java            |   80 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/DataDecoder.java                            |   13 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Up.java                |    3 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnitAdapter.java                       |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/PrefixedDataAvailableV202404.java  |   32 
 109 files changed, 1,493 insertions(+), 373 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/DataDecoder.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/DataDecoder.java
index 981d847..3508fcd 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/DataDecoder.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/DataDecoder.java
@@ -27,8 +27,9 @@
 	 * 	org.apache.mina.core.buffer.IoBuffer, 
 	 * 	org.apache.mina.filter.codec.ProtocolDecoderOutput)
 	 */
+	@Override
 	protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) {
-		String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ;
+		String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
 		if(rtuAddr == null){
 			//浼氳瘽鏈绠$悊
 			//浼氳瘽绠$悊鍣ㄤ腑涓嶅瓨鍦ㄦ浼氳瘽锛岃鏄庡垰寤虹珛缃戠粶杩炴帴锛�
@@ -52,7 +53,13 @@
 		//鏈変竴浜涘崗璁紝璐熻矗鍙戜笂绾挎暟鎹紝浣嗕笂绾�(鎴栧績璺�)鏁版嵁涓棤 Rtu鍦板潃锛屾墍浠ヨ繖鏍风殑鏁版嵁鍙兘鏀捐锛岃�屼笖涓嶈兘浜х敓鏈夎韩浠�(Rtu鍦板潃)鐨勭綉缁滀細璇濓紝鍗充笉鑳芥妸session鏀惧叆浼氳瘽缂撳瓨涓�
 		//鏈変竴浜涘崗璁紝Rtu璐熻矗鍙戜笂绾挎暟鎹紝涓婄嚎鏁版嵁涓湁 Rtu鍦板潃锛屾墍浠ヨ繖鏍风殑鏁版嵁鏀捐鍚庯紝鑳戒骇鐢熸湁韬唤(Rtu鍦板潃)鐨勭綉缁滀細璇濓紝鍗宠兘鎶妔ession鏀惧叆浼氳瘽缂撳瓨涓�
 		//涓嶈浣曠鎯呭舰锛屼笂绾挎暟鎹殑鏁版嵁閲忎笉浼氬緢澶э紝涓�鑸笉浼氫骇鐢熸柇鍖咃紝鎵�浠ヨ繖閲屽彧杩涜绠�鍗曟柇鍖呮鏌ャ��
-		PrefixedDataAvailableStatus dataStatus = this.pdaHandle.forOnLine(in) ;
+		PrefixedDataAvailableStatus dataStatus = this.pdaHandle.forOnLine(session, in) ;
+
+		if(dataStatus.protocolName != null && dataStatus.protocolVersion != null){
+			session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, dataStatus.protocolName) ;
+			session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion, dataStatus.protocolVersion) ;
+		}
+
 		if(dataStatus.isCompleted() || dataStatus.isAdjoined()){
 			//姝eソ鎴栫矘鍖�
 			this.nextDeal(in, dataStatus.getDataLen(), out) ;
@@ -79,7 +86,7 @@
 	@SuppressWarnings("unused")
 	private boolean doDecode_data(IoSession session, IoBuffer in, ProtocolDecoderOutput out, String rtuAddr) {
 		//闈炰笂绾挎暟鎹紝鍙兘浼氬嚭鐜版柇鍖呮垨绮樺寘鐜拌薄
-		PrefixedDataAvailableStatus dataStatus = this.pdaHandle.forUpData(in) ;
+		PrefixedDataAvailableStatus dataStatus = this.pdaHandle.forUpData(session, in) ;
 		if(dataStatus == null){
 			//涓嶅彲鑳藉彂鐢�
 			log.error("涓ラ噸閿欒锛孯tu (RTU" + rtuAddr + ")涓婅鏁版嵁瀹屾暣鎬ф鏌ユ椂锛岃繑鍥炵殑瀵硅薄涓虹┖銆�") ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableHandle.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableHandle.java
index 7fd12f8..5344904 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableHandle.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableHandle.java
@@ -1,6 +1,7 @@
 package com.dy.common.mw.channel.tcp;
 
 import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
 
 public interface PrefixedDataAvailableHandle {
 
@@ -9,13 +10,13 @@
 	 * @param in IoBuffer
 	 * @return 鐘舵��
 	 */
-	PrefixedDataAvailableStatus forOnLine(IoBuffer in) ;
+	PrefixedDataAvailableStatus forOnLine(IoSession ioSession,  IoBuffer in) ;
 	
 	/**
 	 * 棰勫鐞嗕笂琛屾暟鎹�
 	 * @param in IoBuffer
 	 * @return 鐘舵��
 	 */
-	PrefixedDataAvailableStatus forUpData(IoBuffer in) ;
+	PrefixedDataAvailableStatus forUpData(IoSession ioSession, IoBuffer in) ;
 	
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableStatus.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableStatus.java
index 2045a91..3fe03b0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableStatus.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/PrefixedDataAvailableStatus.java
@@ -9,6 +9,8 @@
 	
 	private Integer status ;
 	private Integer dataLen ;
+	public String protocolName;
+	public Short protocolVersion;
 	
 	public PrefixedDataAvailableStatus(){
 		status = null ;
@@ -44,9 +46,11 @@
 	 * @return 鐘舵��
 	 */
 	@SuppressWarnings("unused")
-	public PrefixedDataAvailableStatus adjoined(Integer dataLen){
+	public PrefixedDataAvailableStatus adjoined(Integer dataLen, String protocolName, Short protocolVersion){
 		this.status = status_adjoin ;
 		this.dataLen = dataLen ;
+		this.protocolName = protocolName ;
+		this.protocolVersion = protocolVersion ;
 		return this ;
 	}
 	
@@ -56,9 +60,11 @@
 	 * @return 鐘舵��
 	 */
 	@SuppressWarnings("unused")
-	public PrefixedDataAvailableStatus completed(Integer dataLen){
+	public PrefixedDataAvailableStatus completed(Integer dataLen, String protocolName, Short protocolVersion){
 		this.status = status_complete ;
 		this.dataLen = dataLen ;
+		this.protocolName = protocolName ;
+		this.protocolVersion = protocolVersion ;
 		return this ;
 	}
 	
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrIdIsRtuAddr.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrIdIsRtuAddr.java
index 0d3eb64..93c0ecd 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrIdIsRtuAddr.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrIdIsRtuAddr.java
@@ -7,5 +7,7 @@
  */
 public class TcpIoSessionAttrIdIsRtuAddr {
 
-	public static final String sessionArrIdKey = "key_rtuAddr" ; //杩欎釜key瀛樺偍鐨勬槸Rtu鍦板潃
+	public static final String sessionArrRtuAddr = "key_rtuAddr" ; //杩欎釜key瀛樺偍鐨勬槸Rtu鍦板潃
+	public static final String sessionArrProtocolName = "key_pName" ; //杩欎釜key瀛樺偍鐨勬槸Rtu鍗忚鍚嶇О
+	public static final String sessionArrProtocolVersion = "key_pVerson" ; //杩欎釜key瀛樺偍鐨勬槸Rtu鍗忚鐗堟湰鍙�
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java
index 422b87e..7528501 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java
@@ -30,16 +30,21 @@
 	public static TcpUnit getInstance(){
 		return instance ;
 	}
-	
+
 	/**
-	 * 鎶奍oSession浼氳瘽鐨処D灞炴�ц缃埌IoSession灞炴�т腑
+	 * 鎶奍oSession浼氳瘽鐨処D灞炴�у強鍗忚鍚嶇О鐗堟湰鍙疯缃埌IoSession灞炴�т腑
+	 * @param session
+	 * @param rtuAddr
+	 * @param protocolName
+	 * @param protocolVersion
 	 * @throws Exception
 	 */
-	public void setIoSessionArrId(IoSession session, String id) throws Exception {
-		session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey, id) ;
+	public void setIoSessionArrs(IoSession session, String rtuAddr, String protocolName, Short protocolVersion) throws Exception {
+		session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr, rtuAddr) ;
+		session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, protocolName) ;
+		session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion, protocolVersion) ;
 	}
 
-	
 	@Override
 	public void setAdapter(UnitAdapterInterface adapter) throws Exception {
 		if(adapter == null){
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationDriver.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationDriver.java
index b9c299b..42334be 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationDriver.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationDriver.java
@@ -10,5 +10,10 @@
      */
     String name() default "" ;
 
+    /**
+     * 鍗忚鐗堟湰鍙�
+     */
+    short version() default -1 ;
+
     boolean enable() default true ;
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLine.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLine.java
index 410c230..3d1b655 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLine.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLine.java
@@ -13,7 +13,10 @@
      * 鎵�灞炲崗璁悕绉�
      */
 	String protocolName() default "" ;
-
+    /**
+     * 鎵�灞炲崗璁増鏈彿
+     */
+	short protocolVersion() default -1 ;
     /**
      * 閰嶇疆鏄惁鍚姩
      * @return
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLineVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLineVo.java
index 188a92f..d2bc2c0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLineVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationOnLineVo.java
@@ -10,6 +10,10 @@
      * 鎵�灞炲崗璁悕绉�
      */
 	public String protocolName ; 
+	/**
+     * 鎵�灞炲崗璁悕绉�
+     */
+	public short protocolVersion ;
     /**
      * 涓轰紭鍏堢骇(浠�1寮�濮嬶紝鏈�灏忎负1锛屽悇鍗忚闂翠紭鍏堢骇鐩稿樊1)锛屾暟瀛楄秺灏忕骇鍒秺楂樸��
      * 鑻ユ湁澶氫釜鍗忚锛屽悇涓崗璁殑涓婄嚎澶勭悊绫讳互浼樺厛绾ц繘琛屾帓搴忥紝浼樺厛绾ч珮鐨勫厛澶勭悊涓婄嚎鏁版嵁銆�
@@ -21,11 +25,13 @@
 	 * 鏋勯�犳柟娉�
 	 * @param clazz 绫�
 	 * @param protocolName 鍗忚鍚嶇О
+	 * @param protocolVersion 鍗忚鐗堟湰鍙�
 	 * @param priority 浼樺厛绾�
 	 */
-	public AnnotationOnLineVo(Class<?> clazz, String protocolName, int priority){
+	public AnnotationOnLineVo(Class<?> clazz, String protocolName, short protocolVersion, int priority){
 		this.clazz = clazz ;
 		this.protocolName = protocolName ;
+		this.protocolVersion = protocolVersion ;
 		this.priority = priority ;
 	}
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailable.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailable.java
index e86b049..288ba08 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailable.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailable.java
@@ -9,11 +9,14 @@
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface AnnotationPrefixedDataAvailable {
-    /**
-     * 鎵�灞炲崗璁悕绉� 
-     */
+	/**
+	 * 鎵�灞炲崗璁悕绉�
+	 */
 	String protocolName() default "" ;
-
+	/**
+	 * 鎵�灞炲崗璁増鏈彿
+	 */
+	short protocolVersion() default -1 ;
 	/**
 	 * 閰嶇疆鏄惁鍚姩
 	 * @return
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailableVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailableVo.java
index 3600cb3..3edacbb 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailableVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationPrefixedDataAvailableVo.java
@@ -9,6 +9,10 @@
      * 鎵�灞炲崗璁悕绉�
      */
 	public String protocolName ; 
+	/**
+     * 鎵�灞炲崗璁増鏈彿
+     */
+	public short protocolVersion ;
     /**
      * 涓轰紭鍏堢骇(浠�1寮�濮嬶紝鏈�灏忎负1锛屽悇鍗忚闂翠紭鍏堢骇鐩稿樊1)锛屾暟瀛楄秺灏忕骇鍒秺楂樸��
      * 鑻ユ湁澶氫釜鍗忚锛屽悇涓崗璁殑涓婄嚎澶勭悊绫讳互浼樺厛绾ц繘琛屾帓搴忥紝浼樺厛绾ч珮鐨勫厛澶勭悊涓婄嚎鏁版嵁銆�
@@ -33,9 +37,10 @@
 	 */
 	public int errorMaxLength ;
 	
-	public AnnotationPrefixedDataAvailableVo(Class<?> clazz, String protocolName, int priority, int onLineDataMinLength, int headMinLength, int errorMaxLength){
+	public AnnotationPrefixedDataAvailableVo(Class<?> clazz, String protocolName, short protocolVersion, int priority, int onLineDataMinLength, int headMinLength, int errorMaxLength){
 		this.clazz = clazz ;
 		this.protocolName = protocolName ;
+		this.protocolVersion = protocolVersion ;
 		this.priority = priority ;
 		this.onLineDataMinLength = onLineDataMinLength ;
 		this.headMinLength = headMinLength ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationScan.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationScan.java
index 3cd4e32..f8cfc6e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationScan.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/AnnotationScan.java
@@ -53,6 +53,8 @@
 		Set<Class<?>> driverClasses = reflections.getTypesAnnotatedWith(AnnotationDriver.class);
 		if (driverClasses != null && driverClasses.size() > 0) {
 			String protocolName;
+			short protocolVersion;
+			String key ;
 			int priority;
 			int onLineDataMinLength;
 			int headMinLength;
@@ -66,14 +68,18 @@
 				if (ann != null) {
 					if (ann.enable()) {
 						protocolName = ann.name();
-						if (!(protocolName.trim().equals(""))) {
-							if (driverMap.containsKey(protocolName)) {
-								throw new Exception("涓ラ噸閿欒锛屽崗璁┍鍔�(鍚嶇О)" + protocolName + "鍑虹幇浜嗛噸澶嶆敞瑙o紒");
-							}
-							driverMap.put(protocolName, new AnnotationDriverVo(clazz));
-						} else {
+						protocolVersion = ann.version() ;
+						if(protocolName == null || protocolName.trim().equals("")){
 							throw new Exception("涓ラ噸閿欒锛屽崗璁┍鍔ㄥ悕绉版敞瑙e�间负绌哄瓧绗︿覆");
 						}
+						if(protocolVersion == -1){
+							throw new Exception("涓ラ噸閿欒锛屽崗璁┍鍔ㄧ増鏈彿鏈厤缃�");
+						}
+						key = protocolName + protocolVersion ;
+						if (driverMap.containsKey(key)) {
+							throw new Exception("涓ラ噸閿欒锛屽崗璁┍鍔�(鍚嶇О+鐗堟湰鍙�)" + key + "鍑虹幇浜嗛噸澶嶆敞瑙o紒");
+						}
+						driverMap.put(key, new AnnotationDriverVo(clazz));
 					}
 				}
 			}
@@ -92,6 +98,11 @@
 							throw new Exception("涓ラ噸閿欒锛屼笂琛屾暟鎹畬鏁存�ф鏌ユ墍閰嶅崗璁┍鍔ㄦ敞瑙e�间负绌哄瓧绗︿覆");
 						}
 
+						protocolVersion = ann.protocolVersion();
+						if (protocolVersion == -1) {
+							throw new Exception("涓ラ噸閿欒锛� 涓婅鏁版嵁瀹屾暣鎬ф鏌ユ墍閰嶅崗璁増鏈彿鏈厤缃�");
+						}
+
 						priority = ann.priority();
 						if (priority == 0) {
 							throw new Exception("涓ラ噸閿欒锛� 涓婅鏁版嵁瀹屾暣鎬ф鏌ユ墍閰嶄紭鍏堢骇娉ㄨВ涓嶈兘涓�0");
@@ -101,18 +112,19 @@
 						}
 
 						onLineDataMinLength = ann.onLineDataMinLength();
-									/*姘旇薄鍗忚涓�0
-									if(onLineDataMinLength == 0){
-										throw new Exception("涓ラ噸閿欒锛� 涓婅鏁版嵁瀹屾暣鎬ф鏌ユ墍閰嶄笂绾挎暟鎹渶灏忛暱搴︽敞瑙d笉鑳戒负0") ;
-									}
-									*/
+						/*姘旇薄鍗忚涓�0
+						if(onLineDataMinLength == 0){
+							throw new Exception("涓ラ噸閿欒锛� 涓婅鏁版嵁瀹屾暣鎬ф鏌ユ墍閰嶄笂绾挎暟鎹渶灏忛暱搴︽敞瑙d笉鑳戒负0") ;
+						}
+						*/
 						headMinLength = ann.headMinLength();
-									/*姘旇薄鍗忚涓�0
-									if(headMinLength == 0){
-										throw new Exception("涓ラ噸閿欒锛� 涓婅鏁版嵁瀹屾暣鎬ф鏌ユ墍閰嶄笂鎶ユ暟鎹殑澶撮儴鏈�灏忛暱搴︽敞瑙d笉鑳戒负0") ;
-									}
-									*/
-						prefixedDataAvailableMap.put(protocolName, new AnnotationPrefixedDataAvailableVo(clazz, protocolName, priority, onLineDataMinLength, headMinLength, ProtocolConstant.errorMaxLength));
+						/*姘旇薄鍗忚涓�0
+						if(headMinLength == 0){
+							throw new Exception("涓ラ噸閿欒锛� 涓婅鏁版嵁瀹屾暣鎬ф鏌ユ墍閰嶄笂鎶ユ暟鎹殑澶撮儴鏈�灏忛暱搴︽敞瑙d笉鑳戒负0") ;
+						}
+						*/
+						key = protocolName + protocolVersion ;
+						prefixedDataAvailableMap.put(key, new AnnotationPrefixedDataAvailableVo(clazz, protocolName, protocolVersion, priority, onLineDataMinLength, headMinLength, ProtocolConstant.errorMaxLength));
 					}
 				}
 			}
@@ -131,6 +143,11 @@
 							throw new Exception("涓ラ噸閿欒锛屼笂绾挎暟鎹垎鏋愭墍閰嶅崗璁┍鍔ㄦ敞瑙e�间负绌哄瓧绗︿覆");
 						}
 
+						protocolVersion = ann.protocolVersion();
+						if (protocolVersion == -1) {
+							throw new Exception("涓ラ噸閿欒锛� 涓婄嚎鏁版嵁鍒嗘瀽鎵�閰嶅崗璁増鏈彿鏈厤缃�");
+						}
+
 						priority = ann.priority();
 						if (priority == 0) {
 							throw new Exception("涓ラ噸閿欒锛� 涓婄嚎鏁版嵁鍒嗘瀽鎵�閰嶄紭鍏堢骇娉ㄨВ涓嶈兘涓�0");
@@ -139,7 +156,8 @@
 							throw new Exception("涓ラ噸閿欒锛� 涓婄嚎鏁版嵁鍒嗘瀽鎵�閰嶄紭鍏堢骇娉ㄨВ(priority)鏁板��" + priority + "閲嶅");
 						}
 
-						onLineMap.put(protocolName, new AnnotationOnLineVo(clazz, protocolName, priority));
+						key = protocolName + protocolVersion ;
+						onLineMap.put(key, new AnnotationOnLineVo(clazz, protocolName, protocolVersion, priority));
 					}
 				}
 			}
@@ -204,8 +222,8 @@
 												   HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap){
 		Collection<AnnotationPrefixedDataAvailableVo> col = prefixedDataAvailableMap.values();
 		for(AnnotationPrefixedDataAvailableVo vo : col){
-			if(!driverMap.containsKey(vo.protocolName)){
-				return "涓ラ噸閿欒锛屼笂琛屾暟鎹畬鏁存�ф鏌ユ墍閰嶉┍鍔ㄥ悕绉�(" + vo.protocolName + ")鍦ㄥ崗璁┍鍔ㄤ腑鏈厤缃�" ;
+			if(!driverMap.containsKey(vo.protocolName + vo.protocolVersion)){
+				return "涓ラ噸閿欒锛屼笂琛屾暟鎹畬鏁存�ф鏌ユ墍閰嶉┍鍔ㄥ悕绉�(" + (vo.protocolName + vo.protocolVersion) + ")鍦ㄥ崗璁┍鍔ㄤ腑鏈厤缃�" ;
 			}
 		}
 
@@ -240,8 +258,8 @@
 									HashMap<String, AnnotationOnLineVo> onLineMap){
 		Collection<AnnotationOnLineVo> col = onLineMap.values();
 		for(AnnotationOnLineVo vo : col){
-			if(!driverMap.containsKey(vo.protocolName)){
-				return "涓ラ噸閿欒锛屼笂绾挎暟鎹垎鏋愭墍閰嶉┍鍔ㄥ悕绉�(" + vo.protocolName + ")鍦ㄥ崗璁┍鍔ㄤ腑鏈厤缃�" ;
+			if(!driverMap.containsKey(vo.protocolName + vo.protocolVersion)){
+				return "涓ラ噸閿欒锛屼笂绾挎暟鎹垎鏋愭墍閰嶉┍鍔ㄥ悕绉�(" + (vo.protocolName + vo.protocolVersion) + ")鍦ㄥ崗璁┍鍔ㄤ腑鏈厤缃�" ;
 			}
 		}
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailable.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailable.java
index f55f9ae..1058dc3 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailable.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailable.java
@@ -3,6 +3,7 @@
 import org.apache.mina.core.buffer.IoBuffer;
 
 import com.dy.common.mw.channel.tcp.PrefixedDataAvailableStatus;
+import org.apache.mina.core.session.IoSession;
 
 public interface PrefixedDataAvailable {
 
@@ -15,10 +16,11 @@
 	 * @return 涓嶆椂鏈崗璁暟鎹椂杩斿洖绌�
 	 * @throws Exception 寮傚父
 	 */
-	PrefixedDataAvailableStatus forOnLine(IoBuffer in,
-			int remain,
-			int minDataLength,
-			int maxDataLength) throws Exception ;
+	PrefixedDataAvailableStatus forOnLine(IoSession ioSession,
+										  IoBuffer in,
+										  int remain,
+										  int minDataLength,
+										  int maxDataLength) throws Exception ;
 
 	/**
 	 * 鍒嗘瀽涓婄嚎鍚�(缃戠粶杩炴帴鍚庨潪绗竴鍖呮暟鎹�)鏄惁鍙幏寰�
@@ -29,9 +31,10 @@
 	 * @return PrefixedDataAvailableStatus
 	 * @throws Exception 寮傚父
 	 */
-	PrefixedDataAvailableStatus forUpData(IoBuffer in,
-			int remain,
-			int minDataLength,
-			int maxDataLength) throws Exception;
+	PrefixedDataAvailableStatus forUpData(IoSession ioSession,
+										  IoBuffer in,
+										  int remain,
+										  int minDataLength,
+										  int maxDataLength) throws Exception;
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailableHandleImp.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailableHandleImp.java
index 30864ee..3b99830 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailableHandleImp.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailableHandleImp.java
@@ -3,6 +3,7 @@
 import java.util.Collection;
 import java.util.HashMap;
 
+import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.mina.core.buffer.IoBuffer;
@@ -10,6 +11,7 @@
 import com.dy.common.util.ByteUtil;
 import com.dy.common.mw.channel.tcp.PrefixedDataAvailableHandle;
 import com.dy.common.mw.channel.tcp.PrefixedDataAvailableStatus;
+import org.apache.mina.core.session.IoSession;
 
 public class PrefixedDataAvailableHandleImp implements PrefixedDataAvailableHandle {
 	
@@ -22,43 +24,63 @@
 	 * @param in IoBuffer
 	 * @return PrefixedDataAvailableStatus
 	 */
-	public PrefixedDataAvailableStatus forOnLine(IoBuffer in){
+	public PrefixedDataAvailableStatus forOnLine(IoSession ioSession, IoBuffer in){
     	int remain = in.remaining() ;
     	if(remain == 0){
     		return new PrefixedDataAvailableStatus().breaked() ;
     	}else{
     		try{
-    			PrefixedDataAvailableStatus pds = null ;
-    			
-    			HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = ProtocolCache.getPrefixedDataAvailableMap() ;
-    			Collection<AnnotationPrefixedDataAvailableVo> set = prefixedDataAvailableMap.values() ;
-    			if(set.size() == 0){
-    				throw new Exception("涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ユ椂锛屽緱鍒扮殑鍗忚瀹屾暣鎬ф鏌ョ被闆嗗悎涓虹┖銆�") ;
-    			}
-    			int priority = ProtocolConstant.firstPriority ;
+				PrefixedDataAvailableStatus pds = null ;
+				PrefixedDataAvailable pda = null ;
 
-	    		while(true){
-	    			Object[] objs = this.getClassObjAndAnnotationVo(priority, set) ;
-	    			PrefixedDataAvailable pda = (PrefixedDataAvailable)objs[0] ;
-	    			if(pda == null && priority == ProtocolConstant.firstPriority){
-	    				throw new Exception("涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ユ椂锛屾湭寰楀埌浼樺厛绾т负" + priority + "涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ョ被锛�") ;
-	    			}else if(pda == null){
-	    				//璇存槑涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ョ被闆嗗悎宸茬粡閬嶅巻瀹屼簡銆�
-	    				break ;
-	    			}
-	    			//澶勭悊瀹屾暣鎬ф鏌�
-	    			pds = pda.forOnLine(in, remain, ((AnnotationPrefixedDataAvailableVo)objs[1]).onLineDataMinLength, ((AnnotationPrefixedDataAvailableVo)objs[1]).errorMaxLength) ;
-	    			//鐢ㄥ畬瀵硅薄鍚庯紝鏀惧洖姹犱腑
-	    			PrefixedDataAvailablePool.freeInstance(((AnnotationPrefixedDataAvailableVo)objs[1]).clazz, pda);
-	    			if(pds == null){
-						//璇存槑涓嶆槸瀵瑰簲鐨勫崗璁暟鎹紝闇�瑕佸彟澶栫殑鍗忚鏉ュ鐞嗕笂绾�
-						//寰幆缁х画
-						priority++ ;
-					}else{
-						//鍋滄寰幆锛岃繑鍥炵粨鏋�
-						break ;
+				//浠庝細璇濈紦瀛樺緱鍒颁笂娆′笂琛屾暟鎹‘瀹氱殑鍗忚
+				String protocolName = (String) ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName) ;
+    			Short protocolVersion = (Short) ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion) ;
+    			//鐢变細璇濅腑鐨勫崗璁緱鍒板鐞嗙被
+				//鍒╃敤缂撳瓨鐨勫崗璁紝杩涜�屽涓嶇鍚堝崗璁殑涓婅鏁版嵁涔熻兘鐢ㄨ鍗忚澶勭悊浜嗭紝渚嬪RTU閲囩敤涓嶅悓鏁版嵁鍗忚鐨勫祵鍏ュ紡杞欢鍗囩骇鍗忚
+				//鍗砇TU绗竴鍖呮暟鎹‘瀹氫笅鏉ュ崗璁紝鍚庨潰鏁版嵁閮界敤杩欎釜鍗忚澶勭悊锛岄偅涔堟暟鎹彲浠ュ彉鍖栦簡锛屽彲浠ヤ笉绗﹀悎绗竴鍖呮暟鎹伒瀹堢殑鍗忚浜�
+				Object[] objs =  this.getClassObjAndAnnotationVo(protocolName, protocolVersion) ;
+				if(objs != null && objs[0] != null && objs[1] != null){
+					pda = (PrefixedDataAvailable)objs[0] ;
+					//澶勭悊瀹屾暣鎬ф鏌�
+					pds = pda.forOnLine(ioSession, in, remain, ((AnnotationPrefixedDataAvailableVo)objs[1]).onLineDataMinLength, ((AnnotationPrefixedDataAvailableVo)objs[1]).errorMaxLength) ;
+					//鐢ㄥ畬瀵硅薄鍚庯紝鏀惧洖姹犱腑
+					PrefixedDataAvailablePool.freeInstance(objs[0].getClass(), pda);
+				}
+				if(pds == null){
+					//濡傛灉浼氳瘽涓紦瀛樼殑鍗忚鏈兘姝g‘澶勭悊
+					HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = ProtocolCache.getPrefixedDataAvailableMap() ;
+					Collection<AnnotationPrefixedDataAvailableVo> set = prefixedDataAvailableMap.values() ;
+					if(set.size() == 0){
+						throw new Exception("涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ユ椂锛屽緱鍒扮殑鍗忚瀹屾暣鎬ф鏌ョ被闆嗗悎涓虹┖銆�") ;
 					}
-	    		}
+					int priority = ProtocolConstant.firstPriority ;
+
+					while(true){
+						objs = this.getClassObjAndAnnotationVo(priority, set) ;
+						pda = (PrefixedDataAvailable)objs[0] ;
+						if(pda == null && priority == ProtocolConstant.firstPriority){
+							throw new Exception("涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ユ椂锛屾湭寰楀埌浼樺厛绾т负" + priority + "涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ョ被锛�") ;
+						}else if(pda == null){
+							//璇存槑涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ョ被闆嗗悎宸茬粡閬嶅巻瀹屼簡銆�
+							break ;
+						}
+						//澶勭悊瀹屾暣鎬ф鏌�
+						pds = pda.forOnLine(ioSession, in, remain, ((AnnotationPrefixedDataAvailableVo)objs[1]).onLineDataMinLength, ((AnnotationPrefixedDataAvailableVo)objs[1]).errorMaxLength) ;
+						//鐢ㄥ畬瀵硅薄鍚庯紝鏀惧洖姹犱腑
+						//2024-11-25涓嬮潰涓�琛岃繘琛屼簡淇敼
+						//PrefixedDataAvailablePool.freeInstance(((AnnotationPrefixedDataAvailableVo)objs[1]).clazz, pda);
+						PrefixedDataAvailablePool.freeInstance(objs[0].getClass(), pda);
+						if(pds == null){
+							//璇存槑涓嶆槸瀵瑰簲鐨勫崗璁暟鎹紝闇�瑕佸彟澶栫殑鍗忚鏉ュ鐞嗕笂绾�
+							//寰幆缁х画
+							priority++ ;
+						}else{
+							//鍋滄寰幆锛岃繑鍥炵粨鏋�
+							break ;
+						}
+					}
+				}
 	    		if(pds == null){
 	    			//璇存槑鏁版嵁涓嶅睘浜庝换浣曞崗璁紝涓�鑸负Rtu鏁版嵁鍑洪敊锛屾垨缃戠粶鏀诲嚮鏁版嵁
 	    			byte[] preByte = new byte[remain];
@@ -82,43 +104,59 @@
 	 * @param in IoBuffer
 	 * @return PrefixedDataAvailableStatus
 	 */
-	public PrefixedDataAvailableStatus forUpData(IoBuffer in){
+	public PrefixedDataAvailableStatus forUpData(IoSession ioSession, IoBuffer in){
 		int remain = in.remaining() ;
     	if(remain == 0){
     		return new PrefixedDataAvailableStatus().breaked() ;
     	}else{
     		try{
-   			PrefixedDataAvailableStatus pds = null ;
-    			
-    			HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = ProtocolCache.getPrefixedDataAvailableMap() ;
-    			Collection<AnnotationPrefixedDataAvailableVo> set = prefixedDataAvailableMap.values() ;
-    			if(set.size() == 0){
-    				throw new Exception("涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ユ椂锛屽緱鍒扮殑鍗忚闆嗗悎涓虹┖銆�") ;
-    			}
-    			int prority = ProtocolConstant.firstPriority ;
+				PrefixedDataAvailableStatus pds = null ;
+				PrefixedDataAvailable pda = null ;
 
-	    		while(true){
-	    			Object[] objs = this.getClassObjAndAnnotationVo(prority, set) ;
-	    			PrefixedDataAvailable pda = (PrefixedDataAvailable)objs[0] ;
-	    			if(pda == null && prority == ProtocolConstant.firstPriority){
-	    				throw new Exception("涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ユ椂锛屾湭寰楀埌浼樺厛绾т负" + prority + "涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ョ被锛�") ;
-	    			}else if(pda == null){
-	    				//璇存槑涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ョ被闆嗗悎宸茬粡閬嶅巻瀹屼簡銆�
-	    				break ;
-	    			}
-	    			//澶勭悊瀹屾暣鎬ф鏌�
-        			pds = pda.forUpData(in, remain, ((AnnotationPrefixedDataAvailableVo)objs[1]).headMinLength, ((AnnotationPrefixedDataAvailableVo)objs[1]).errorMaxLength) ;
-        			//鐢ㄥ畬瀵硅薄鍚庯紝鏀惧洖姹犱腑
-        			PrefixedDataAvailablePool.freeInstance(objs[0].getClass(), pda);
-        			if(pds == null){
-    					//璇存槑涓嶆槸瀵瑰簲鐨勫崗璁暟鎹紝闇�瑕佸彟澶栫殑鍗忚鏉ュ鐞嗕笂绾�
-    					//寰幆缁х画
-    					prority++ ;
-    				}else{
-    					//鍋滄寰幆锛岃繑鍥炵粨鏋�
-    					break ;
-    				}
-        		}
+				//浠庝細璇濈紦瀛樺緱鍒颁笂娆′笂琛屾暟鎹‘瀹氱殑鍗忚
+				String protocolName = (String) ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName) ;
+				Short protocolVersion = (Short) ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion) ;
+				//鐢变細璇濅腑鐨勫崗璁緱鍒板鐞嗙被
+				Object[] objs =  this.getClassObjAndAnnotationVo(protocolName, protocolVersion) ;
+				if(objs != null && objs[0] != null && objs[1] != null){
+					pda = (PrefixedDataAvailable)objs[0] ;
+					//澶勭悊瀹屾暣鎬ф鏌�
+					pds = pda.forOnLine(ioSession, in, remain, ((AnnotationPrefixedDataAvailableVo)objs[1]).onLineDataMinLength, ((AnnotationPrefixedDataAvailableVo)objs[1]).errorMaxLength) ;
+					//鐢ㄥ畬瀵硅薄鍚庯紝鏀惧洖姹犱腑
+					PrefixedDataAvailablePool.freeInstance(objs[0].getClass(), pda);
+				}
+				if(pds == null) {
+					//濡傛灉浼氳瘽涓紦瀛樼殑鍗忚鏈兘姝g‘澶勭悊
+					HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = ProtocolCache.getPrefixedDataAvailableMap() ;
+					Collection<AnnotationPrefixedDataAvailableVo> set = prefixedDataAvailableMap.values() ;
+					if(set.size() == 0){
+						throw new Exception("涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ユ椂锛屽緱鍒扮殑鍗忚闆嗗悎涓虹┖銆�") ;
+					}
+					int priority = ProtocolConstant.firstPriority ;
+
+					while(true){
+						objs = this.getClassObjAndAnnotationVo(priority, set) ;
+						pda = (PrefixedDataAvailable)objs[0] ;
+						if(pda == null && priority == ProtocolConstant.firstPriority){
+							throw new Exception("涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ユ椂锛屾湭寰楀埌浼樺厛绾т负" + priority + "涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ョ被锛�") ;
+						}else if(pda == null){
+							//璇存槑涓婄嚎鏁版嵁瀹屾暣鎬ф鏌ョ被闆嗗悎宸茬粡閬嶅巻瀹屼簡銆�
+							break ;
+						}
+						//澶勭悊瀹屾暣鎬ф鏌�
+						pds = pda.forUpData(ioSession, in, remain, ((AnnotationPrefixedDataAvailableVo)objs[1]).headMinLength, ((AnnotationPrefixedDataAvailableVo)objs[1]).errorMaxLength) ;
+						//鐢ㄥ畬瀵硅薄鍚庯紝鏀惧洖姹犱腑
+						PrefixedDataAvailablePool.freeInstance(objs[0].getClass(), pda);
+						if(pds == null){
+							//璇存槑涓嶆槸瀵瑰簲鐨勫崗璁暟鎹紝闇�瑕佸彟澶栫殑鍗忚鏉ュ鐞嗕笂绾�
+							//寰幆缁х画
+							priority++ ;
+						}else{
+							//鍋滄寰幆锛岃繑鍥炵粨鏋�
+							break ;
+						}
+					}
+				}
         		if(pds == null){
         			//璇存槑鏁版嵁涓嶅睘浜庝换浣曞崗璁紝涓�鑸负Rtu鏁版嵁鍑洪敊锛屾垨缃戠粶鏀诲嚮鏁版嵁
         			byte[] preByte = new byte[remain];
@@ -157,5 +195,21 @@
 		}
 		return new Object[]{obj, rVo} ;
 	}
+	/**
+	 * 寰楀埌澶勭悊绫诲璞�
+	 * @param protocolName 閫氫俊鍗忚鍚嶇О
+	 * @param protocolVersion 閫氫俊鍗忚鐗堟湰鍙�
+	 * @return Object[]
+	 * @throws Exception 寮傚父
+	 */
+	private Object[] getClassObjAndAnnotationVo(String protocolName, Short protocolVersion) throws Exception{
+		PrefixedDataAvailable obj = null ;
+		AnnotationPrefixedDataAvailableVo rVo = null ;
+		if(protocolName != null && !protocolName.trim().equals("") && protocolVersion != null){
+			rVo =  ProtocolCache.getAnnotationPrefixedDataAvailable(protocolName, protocolVersion) ;
+			obj = PrefixedDataAvailablePool.getInstance(rVo.clazz) ;
+		}
+		return new Object[]{obj, rVo} ;
+	}
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailablePool.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailablePool.java
index bb9761b..ba5b121 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailablePool.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailablePool.java
@@ -24,22 +24,21 @@
 		List<PrefixedDataAvailable> list = pool.get(className) ;
 		if(list == null){
 			list = new ArrayList<>() ;
-		}else{
+			pool.put(className, list) ;
+		}else if(list.size() > 0){
 			obj = list.get(0) ;
+			list.remove(0) ;
 		}
 		
-		if(obj != null){
-			list.remove(0) ;
-			return obj ;
-		}else{
+		if(obj == null){
 			try {
 				obj = (PrefixedDataAvailable)clazz.getDeclaredConstructor().newInstance() ;
 				//obj = (PrefixedDataAvailable)clazz.newInstance();
 			} catch (Exception e) {
 				throw new Exception( "鐢�" + className + "鐢熸垚瀹炰緥澶辫触锛�");
 			}
-			return obj ;
 		}
+		return obj ;
 	}
 	
 	/**
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolCache.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolCache.java
index c076537..81bc5b7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolCache.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolCache.java
@@ -19,17 +19,35 @@
 	 * 鍦ㄥ崟绾跨▼鐜涓繍琛�
 	 * 閫氳繃鍗忚椹卞姩鐨勭被鍚嶏紝寰楀埌绫诲崟渚�
 	 * @param protocolName 鍗忚鍚嶇О
+	 * @param protocolVersion 鍗忚鐗堟湰鍙�
 	 * @return 椹卞姩
 	 * @throws Exception 寮傚父
 	 */
-	public static Driver getDriver(String protocolName) throws Exception{
-		Driver dri = drivers.get(protocolName);
+	public static Driver getDriver(String protocolName, short protocolVersion) throws Exception{
+		Driver dri = drivers.get(protocolName + protocolVersion) ;
 		if(dri == null){
-			AnnotationDriverVo vo = driverMap.get(protocolName) ;
+			AnnotationDriverVo vo = driverMap.get(protocolName + protocolVersion) ;
 			if(vo != null && vo.clazz != null){
 				dri = (Driver)vo.clazz.getDeclaredConstructor().newInstance();
-				//dri = (Driver)vo.clazz.newInstance() ;
-				drivers.put(protocolName, dri) ;
+				drivers.put(protocolName + protocolVersion, dri) ;
+			}
+		}
+		return dri ;
+	}
+	/**
+	 * 鍦ㄥ崟绾跨▼鐜涓繍琛�
+	 * 閫氳繃鍗忚椹卞姩鐨勭被鍚嶏紝寰楀埌绫诲崟渚�
+	 * @param protocolNameVersion 鍗忚鍚嶇О鍜岀増鏈彿
+	 * @return 椹卞姩
+	 * @throws Exception 寮傚父
+	 */
+	public static Driver getDriver(String protocolNameVersion) throws Exception{
+		Driver dri = drivers.get(protocolNameVersion) ;
+		if(dri == null){
+			AnnotationDriverVo vo = driverMap.get(protocolNameVersion) ;
+			if(vo != null && vo.clazz != null){
+				dri = (Driver)vo.clazz.getDeclaredConstructor().newInstance();
+				drivers.put(protocolNameVersion, dri) ;
 			}
 		}
 		return dri ;
@@ -79,6 +97,18 @@
 		return onLineMap;
 	}
 
+	protected AnnotationDriverVo getAnnotationDriver(String protocolName, Short protocolVersion){
+		return driverMap.get(protocolName + "" + protocolVersion) ;
+	}
+
+	protected static AnnotationPrefixedDataAvailableVo getAnnotationPrefixedDataAvailable(String protocolName, Short protocolVersion){
+		return prefixedDataAvailableMap.get(protocolName + "" + protocolVersion) ;
+	}
+
+	protected static AnnotationOnLineVo getAnnotationOnLine(String protocolName, Short protocolVersion){
+		return onLineMap.get(protocolName + "" + protocolVersion) ;
+	}
+
     /*
     public static void main(String[] args){
         HashMap<String, Integer> mp = new HashMap<>() ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnit.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnit.java
index 7a3c529..1e26b29 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnit.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnit.java
@@ -45,17 +45,17 @@
 		
 		//鍚勪釜鍗忚椹卞姩绫绘壂鎻忚嚜宸辩殑鍔熻兘鐮佹敞瑙�
 		HashMap<String, AnnotationDriverVo> drivers =  ProtocolCache.getDriverMap() ;
-		Collection<String> colDrivers = drivers.keySet() ;
+		Collection<String> keys = drivers.keySet() ;
 		StringBuilder totalProtocols = new StringBuilder() ;
-		for(String protocolName : colDrivers){
+		for(String protocolNameVersion : keys){
 			if(!totalProtocols.isEmpty()){
 				totalProtocols.append("锛�") ;
 			}
-			totalProtocols.append(protocolName) ;
-			Driver dri = ProtocolCache.getDriver(protocolName) ;
+			totalProtocols.append(protocolNameVersion) ;
+			Driver dri = ProtocolCache.getDriver(protocolNameVersion) ;
 			if(dri != null){
 				dri.scanAnnotationCode();
-				dri.setNotify(adapter.getSingleRtuInfoNotify(protocolName));
+				dri.setNotify(adapter.getSingleRtuInfoNotify(protocolNameVersion));
 			}
 		}
 		if(adapter.getConfig().showStartInfo){
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnitAdapter.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnitAdapter.java
index 767852b..c5e0114 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnitAdapter.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnitAdapter.java
@@ -12,10 +12,10 @@
 
 	/**
 	 * 鍗曠嚎绋嬬幆澧冧腑杩愯锛屽緱鍒板崟涓猂TU淇℃伅閫氱煡鍣�
-	 * @param protocolName 鍗忚鍚嶇О
+	 * @param protocolNameVersion 鍗忚鍚嶇О鍜岀増鏈彿
 	 * @return MidResultAction
 	 */
-	Notify getSingleRtuInfoNotify(String protocolName) ;
+	Notify getSingleRtuInfoNotify(String protocolNameVersion) ;
 	/**
 	 * 鍗曠嚎绋嬬幆澧冧腑杩愯锛屽緱鍒板崟涓鐞哛TU涓嬭鏁版嵁鐨刟ction鎵ц瀵硅薄
 	 * @param protocolName 鍗忚鍚嶇О
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java
index 9c147bf..f624369 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java
@@ -1,12 +1,16 @@
 package com.dy.common.mw.protocol.p206V1;
 
+import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
 import com.dy.common.util.ByteUtil;
 import com.dy.common.util.ByteUtilUnsigned;
 import com.dy.common.util.CRC16;
 import com.dy.common.util.CRC8_for_2_0;
+import org.apache.mina.core.session.IoSession;
 
 
 public class CommonV1 {
+
+
 	/**
 	 * 妫�鏌ュご
 	 * @param bs 涓婅瀛楄妭鏁扮粍
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java
index 2d4b816..789ee94 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java
@@ -3,7 +3,9 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.util.DateTime;
 
-@AnnotationDriver(enable = true, name= ProtocolConstantV206V1.protocolName)
+@AnnotationDriver(enable = true,
+		name= ProtocolConstantV206V1.protocolName,
+		version= ProtocolConstantV206V1.protocolVer)
 public class DriverV1 extends Driver {
 	
 	private static String scanRootPackage = "com.dy.common.mw.protocol.p206V1" ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java
index 0b02041..eb8c50a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/OnLineV1.java
@@ -6,6 +6,7 @@
 @AnnotationOnLine(
 		enable = true,
 		protocolName = ProtocolConstantV206V1.protocolName,
+		protocolVersion = ProtocolConstantV206V1.protocolVer,
 		priority = ProtocolConstantV206V1.priority)
 @SuppressWarnings("unused")
 public class OnLineV1 implements OnLine{
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java
index d51dba2..eece0d6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/PrefixedDataAvailableV1.java
@@ -8,11 +8,13 @@
 import org.apache.logging.log4j.Logger;
 import org.apache.mina.core.buffer.BufferDataException;
 import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
 
 
 @AnnotationPrefixedDataAvailable(
 		enable = true,
 		protocolName = ProtocolConstantV206V1.protocolName,
+		protocolVersion = ProtocolConstantV206V1.protocolVer,
 		priority = ProtocolConstantV206V1.priority,
 		onLineDataMinLength = ProtocolConstantV206V1.onLineDataMinLength,
 		headMinLength = ProtocolConstantV206V1.headMinLength)
@@ -22,7 +24,7 @@
 	private static final Logger log = LogManager.getLogger(PrefixedDataAvailableV1.class) ;
 	
 	private static final String protocolName = ProtocolConstantV206V1.protocolName ;
-
+	private static final short protocolVersion = ProtocolConstantV206V1.protocolVer ;
 
 	/**
 	 * 鍒嗘瀽涓婄嚎鏁版嵁(缃戠粶杩炴帴鍚庣涓�鍖呮暟鎹�)鏄惁鍙幏寰�
@@ -33,11 +35,12 @@
 	 * @return 涓嶆槸鏈崗璁暟鎹椂杩斿洖绌�
 	 * @throws Exception 寮傚父
 	 */
-	public PrefixedDataAvailableStatus forOnLine(IoBuffer in, 
-			int remain,
-			int minDataLength,
-			int maxDataLength
-			) throws Exception {
+	public PrefixedDataAvailableStatus forOnLine(IoSession ioSession,
+												 IoBuffer in,
+												 int remain,
+												 int minDataLength,
+												 int maxDataLength
+												 ) throws Exception {
 		
 		int oldPosition = in.position() ;
 		byte[] preByte = new byte[remain];
@@ -45,7 +48,7 @@
 		//in.position(0) ;//閿欒鐢ㄦ硶锛屽鏋滃彂鐢熺矘鍖呮暟鎹紝灏嗕細姝诲惊鐜�
 		in.position(oldPosition) ;
 
-		return this.doForData(preByte, minDataLength, maxDataLength) ;
+		return this.doForData(ioSession, preByte, minDataLength, maxDataLength) ;
 	}
 
 	/**
@@ -58,28 +61,30 @@
 	 * @throws Exception 寮傚父
 	 */
 	@Override
-	public PrefixedDataAvailableStatus forUpData(IoBuffer in, 
-			int remain,
-			int minDataLength,
-			int maxDataLength) throws Exception {
+	public PrefixedDataAvailableStatus forUpData(IoSession ioSession,
+												 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) ;
+		return this.doForData(ioSession, preByte, minDataLength, maxDataLength) ;
 
     }
 	/**
 	 * 杩涜鍒ゆ柇
+	 * @param ioSession ioSession
 	 * @param preByte byte[]
 	 * @param minDataLength 鏈�灏忔暟鎹暱搴�
 	 * @param maxDataLength 鏈�澶ф暟鎹暱搴�
 	 * @return PrefixedDataAvailableStatus
 	 * @throws Exception 寮傚父
 	 */
-	private PrefixedDataAvailableStatus doForData(byte[] preByte, int minDataLength, int maxDataLength) throws Exception{
+	private PrefixedDataAvailableStatus doForData(IoSession ioSession, byte[] preByte, int minDataLength, int maxDataLength) throws Exception{
 		int remain = preByte.length ;
     	
         if (remain < minDataLength) {
@@ -114,11 +119,11 @@
         
         if(remain == dataLen){
         	//涓嶆柇涓嶇矘
-            return new PrefixedDataAvailableStatus().completed(dataLen) ;
+            return new PrefixedDataAvailableStatus().completed(dataLen, protocolName, protocolVersion) ;
         }else if(remain > dataLen){
 			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
         	log.warn("鏀跺埌鏁版嵁涔嬪抚鍓嶉儴锛�" + headHex + "锛屼絾鍙戠敓绮樺寘鐜拌薄銆�") ;
-            return new PrefixedDataAvailableStatus().adjoined(dataLen) ;
+            return new PrefixedDataAvailableStatus().adjoined(dataLen, protocolName, protocolVersion) ;
         }else{
         	// remain < dataLen
 			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java
index e91539a..a1ed7b8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/ProtocolConstantV206V1.java
@@ -5,7 +5,7 @@
      * 娉ㄨВ鐩稿叧
      */
     public static final String protocolName = "p206V1" ;
-    public static final Short protocolVer = 1 ;
+    public static final short protocolVer = 1 ;
     public static final int priority = 2 ;//浼樺厛绾�
     /**
      * RTU涓婄嚎鏁版嵁锛堜笂绾垮悗绗竴鍖呮暟鎹級鏈�灏忛暱搴︼紝璁剧疆璇ュ睘鎬т互澶囪繘琛屽畬鏁存�ф鏌ワ紝
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java
index ebcaacf..e13430e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java
@@ -1,12 +1,24 @@
 package com.dy.common.mw.protocol.p206V2;
 
+import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
 import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
 import com.dy.common.util.ByteUtil;
 import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.common.util.CRC16;
 import com.dy.common.util.CRC8_for_2_0;
+import org.apache.mina.core.session.IoSession;
 
 
 public class CommonV2 {
+
+	/**
+	 * 鍦↖o浼氳瘽涓缃崗璁悕绉板強鐗堟湰鍙�
+	 * @param ioSession 浼氳瘽
+	 */
+	public void setThisProtocolArr2IoSession(IoSession ioSession){
+		ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolName) ;
+		ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolVer) ;
+	}
 	/**
 	 * 妫�鏌ュご
 	 * @param bs 涓婅瀛楄妭鏁扮粍
@@ -20,7 +32,7 @@
 				&& bs[ProtocolConstantV206V2.headFlag1Index] == ProtocolConstantV206V2.P_Head_Byte
 				&& bs[ProtocolConstantV206V2.headFlag2Index] == ProtocolConstantV206V2.P_Head_Byte){
 			Short vs = this.parseVersion(bs) ;
-			if(vs.shortValue() == ProtocolConstantV206V2.protocolVer.shortValue()){
+			if(vs.shortValue() == ProtocolConstantV206V2.protocolVer){
 				return new Boolean[]{true, true};
 			}else{
 				return new Boolean[]{false, true};
@@ -159,6 +171,19 @@
 	}
 
 	/**
+	 * 鍒嗘瀽鍔熻兘鐮�
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @return 鍔熻兘鐮�
+	 */
+	public String parseCode(byte[] bs, boolean p206TrueUgFalse){
+		if(p206TrueUgFalse) {
+			return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.codeIndex, 1);
+		}else{
+			return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.UG_codeIndex, 2);
+		}
+	}
+
+	/**
 	 * 鏍¢獙鍜屾鏌�
 	 * @param bs  涓婅瀛楄妭鏁扮粍
 	 * @return 閫氳繃null锛屾湭閫氳繃杩斿洖鍘熷洜
@@ -175,6 +200,33 @@
 	}
 
 
+	/**
+	 * 鏍¢獙鍜屾鏌�
+	 * @param bs  涓婅瀛楄妭鏁扮粍
+	 * @param p206TrueUgFalse 206鍗忚涓簍rue锛屽崌绾у崗璁负false
+	 * @return 閫氳繃null锛屾湭閫氳繃杩斿洖鍘熷洜
+	 * @throws Exception 寮傚父
+	 */
+	public String checkCrc_str(byte[] bs, boolean p206TrueUgFalse) throws Exception {
+		if(p206TrueUgFalse){
+			byte crcCompute = (byte)new CRC8_for_2_0().CRC8(bs, ProtocolConstantV206V1.ctrlIndex, bs.length - 3) ;
+			byte crcInBs = bs[bs.length - 2] ;
+			if(crcCompute == crcInBs){
+				return null ;
+			}else{
+				return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ;
+			}
+		}else{
+			short crcCompute = new CRC16().CRC(bs, 0, bs.length - 4) ;
+			short crcInBs = ByteUtil.bytes2Short_BE(bs,bs.length - 3) ;
+			//int crcInBs = ByteUtilUnsigned.bytes2Short_BE(bs, bs.length - 3) ;
+			if(crcCompute == crcInBs){
+				return null ;
+			}else{
+				return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ;
+			}
+		}
+	}
 	/*
 	鏋勯�犳帶鍒跺煙
 	D7                  D6                  D5锝濪4            D3锝濪0
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java
index 9a7f080..5dba5f7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java
@@ -3,7 +3,9 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.util.DateTime;
 
-@AnnotationDriver(enable = true, name= ProtocolConstantV206V2.protocolName)
+@AnnotationDriver(enable = true,
+		name= ProtocolConstantV206V2.protocolName,
+		version= ProtocolConstantV206V2.protocolVer)
 public class DriverV2 extends Driver {
 	
 	private static String scanRootPackage = "com.dy.common.mw.protocol.p206V2" ;
@@ -60,13 +62,15 @@
 		Short protocolVersion = null ;
 		try{
 			CommonV2 cp = new CommonV2() ;
+			Boolean p206TrueUgFalse = cp.protocolType_p206TrueUgFalse(upBuffer) ;
+			//鍒版澶勪簡锛宲206TrueUgFalse涓嶅彲鑳戒负绌轰簡
 			cp.checkTail(upBuffer) ;
-			String crcStr = cp.checkCrc_str(upBuffer) ;
+			String crcStr = cp.checkCrc_str(upBuffer, p206TrueUgFalse) ;
 			if(crcStr != null){
 				return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, rtuAddr, "涓ラ噸閿欒锛屼笂琛屾暟鎹瓹RC妫�鏌ュけ璐ワ紝" + crcStr, null))} ;
 			}
 			protocolVersion = cp.parseVersion(upBuffer) ;
-			upCode = cp.parseCode(upBuffer) ;
+			upCode = cp.parseCode(upBuffer, p206TrueUgFalse) ;
 			if(upCode == null){
 				return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, rtuAddr, "涓ラ噸閿欒锛屾湭鑳戒粠涓婅鏁版嵁涓В鏋愬嚭鍔熻兘鐮侊紒", null))} ;
 			}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java
index 078625e..9fd8559 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/OnLineV2.java
@@ -2,11 +2,11 @@
 
 import com.dy.common.mw.protocol.AnnotationOnLine;
 import com.dy.common.mw.protocol.OnLine;
-import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
 
 @AnnotationOnLine(
 		enable = true,
 		protocolName = ProtocolConstantV206V2.protocolName,
+		protocolVersion = ProtocolConstantV206V2.protocolVer,
 		priority = ProtocolConstantV206V2.priority)
 @SuppressWarnings("unused")
 public class OnLineV2 implements OnLine{
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java
index 43fa369..74ba6f7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/PrefixedDataAvailableV2.java
@@ -8,11 +8,13 @@
 import org.apache.logging.log4j.Logger;
 import org.apache.mina.core.buffer.BufferDataException;
 import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
 
 
 @AnnotationPrefixedDataAvailable(
 		enable = true,
 		protocolName = ProtocolConstantV206V2.protocolName,
+		protocolVersion = ProtocolConstantV206V2.protocolVer,
 		priority = ProtocolConstantV206V2.priority,
 		onLineDataMinLength = ProtocolConstantV206V2.onLineDataMinLength,
 		headMinLength = ProtocolConstantV206V2.headMinLength)
@@ -22,7 +24,7 @@
 	private static final Logger log = LogManager.getLogger(PrefixedDataAvailableV2.class) ;
 	
 	private static final String protocolName = ProtocolConstantV206V2.protocolName ;
-
+	private static final short protocolVersion = ProtocolConstantV206V2.protocolVer ;
 
 	/**
 	 * 鍒嗘瀽涓婄嚎鏁版嵁(缃戠粶杩炴帴鍚庣涓�鍖呮暟鎹�)鏄惁鍙幏寰�
@@ -33,11 +35,12 @@
 	 * @return 涓嶆槸鏈崗璁暟鎹椂杩斿洖绌�
 	 * @throws Exception 寮傚父
 	 */
-	public PrefixedDataAvailableStatus forOnLine(IoBuffer in, 
-			int remain,
-			int minDataLength, //瀵瑰簲ProtocolConstantV2_0.onLineDataMinLength
-			int maxDataLength //瀵瑰簲ProtocolConstant.errorMaxLength
-			) throws Exception {
+	public PrefixedDataAvailableStatus forOnLine(IoSession ioSession,
+												 IoBuffer in,
+												 int remain,
+												 int minDataLength, //瀵瑰簲ProtocolConstantV2_0.onLineDataMinLength
+												 int maxDataLength //瀵瑰簲ProtocolConstant.errorMaxLength
+												 ) throws Exception {
 		
 		int oldPosition = in.position() ;
 		byte[] preByte = new byte[remain];
@@ -45,7 +48,7 @@
 		//in.position(0) ;//閿欒鐢ㄦ硶锛屽鏋滃彂鐢熺矘鍖呮暟鎹紝灏嗕細姝诲惊鐜�
 		in.position(oldPosition) ;
 
-		return this.doForData(preByte, minDataLength, maxDataLength) ;
+		return this.doForData(ioSession, preByte, minDataLength, maxDataLength) ;
 	}
 
 	/**
@@ -58,32 +61,34 @@
 	 * @throws Exception 寮傚父
 	 */
 	@Override
-	public PrefixedDataAvailableStatus forUpData(IoBuffer in, 
-			int remain,
-			int minDataLength,
-			int maxDataLength) throws Exception {
+	public PrefixedDataAvailableStatus forUpData(IoSession ioSession,
+												 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) ;
+		return this.doForData(ioSession, preByte, minDataLength, maxDataLength) ;
 
     }
 	/**
 	 * 杩涜鍒ゆ柇
+	 * @param ioSession ioSession
 	 * @param preByte byte[]
 	 * @param minDataLength 鏈�灏忔暟鎹暱搴�
 	 * @param maxDataLength 鏈�澶ф暟鎹暱搴�
 	 * @return PrefixedDataAvailableStatus
 	 * @throws Exception 寮傚父
 	 */
-	private PrefixedDataAvailableStatus doForData(byte[] preByte, int minDataLength, int maxDataLength) throws Exception{
+	private PrefixedDataAvailableStatus doForData(IoSession ioSession, byte[] preByte, int minDataLength, int maxDataLength) throws Exception{
 		int remain = preByte.length ;
     	
         if (remain < minDataLength) {
-        	log.warn("鍩轰簬鍗忚锛�" + protocolName + "锛夊垽鏂暟鎹ご閮ㄥ彂鐢熸柇鍖呯幇璞°��") ;
+        	log.warn("鍩轰簬鍗忚锛�" + (protocolName + protocolVersion) + "锛夊垽鏂暟鎹ご閮ㄥ彂鐢熸柇鍖呯幇璞°��") ;
             return new PrefixedDataAvailableStatus().breaked() ;
         }
         
@@ -92,7 +97,6 @@
 			return new PrefixedDataAvailableStatus().rubbish(remain) ;
 		}
 
-		
         CommonV2 parseCommon = new CommonV2();
 		Boolean[] isThisProtocolData = parseCommon.isThisProtocolHead(preByte) ;
 		if(isThisProtocolData == null || isThisProtocolData.length != 2 || !isThisProtocolData[0].booleanValue()){
@@ -114,11 +118,11 @@
         
         if(remain == dataLen){
         	//涓嶆柇涓嶇矘
-            return new PrefixedDataAvailableStatus().completed(dataLen) ;
+            return new PrefixedDataAvailableStatus().completed(dataLen, protocolName, protocolVersion) ;
         }else if(remain > dataLen){
 			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
         	log.warn("鏀跺埌鏁版嵁涔嬪抚鍓嶉儴锛�" + headHex + "锛屼絾鍙戠敓绮樺寘鐜拌薄銆�") ;
-            return new PrefixedDataAvailableStatus().adjoined(dataLen) ;
+            return new PrefixedDataAvailableStatus().adjoined(dataLen, protocolName, protocolVersion) ;
         }else{
         	// remain < dataLen
 			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java
index aa97a77..d1217bc 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/ProtocolConstantV206V2.java
@@ -5,7 +5,7 @@
      * 娉ㄨВ鐩稿叧
      */
     public static final String protocolName = "p206V2" ;
-    public static final Short protocolVer = 2 ;
+    public static final short protocolVer = 2 ;
     public static final int priority = 3 ;//浼樺厛绾�
     /**
      * RTU涓婄嚎鏁版嵁锛堜笂绾垮悗绗竴鍖呮暟鎹級鏈�灏忛暱搴︼紝璁剧疆璇ュ睘鎬т互澶囪繘琛屽畬鏁存�ф鏌ワ紝
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java
index 83a27a2..13d6504 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java
@@ -1,6 +1,7 @@
 package com.dy.common.mw.protocol.p206V2.parse;
 
 import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
 import com.dy.common.mw.protocol.p206V2.CodeV2;
 import com.dy.common.mw.protocol.p206V2.ParseParamsForDownV2;
 import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java
index 6d38fa7..6b701e3 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java
@@ -5,6 +5,7 @@
 import com.dy.common.mw.protocol.p206V2.ParseParamsForDownV2;
 import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
 import com.dy.common.mw.protocol.p206V2.parse.global.GlCreate;
+import com.dy.common.softUpgrade.Com1601Vo;
 import com.dy.common.util.ByteUtil;
 
 /**
@@ -32,7 +33,7 @@
         midRs.downCodeName = CodeV2.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
         midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
         midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
-        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
         midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
         midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
 
@@ -71,7 +72,32 @@
         index += 2 ;
         GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
 
-        byte[] bytes = ByteUtil.bytesMerge(preBytes, (byte[])para.attachment) ;
+        if(para.param == null){
+            throw new Exception("鍙傛暟涓虹┖") ;
+        }
+        if(!(para.param instanceof Com1601Vo)){
+            throw new Exception("鍙傛暟绫诲瀷闈濩om1601Vo") ;
+        }
+        Com1601Vo vo = (Com1601Vo) para.param ;
+        byte[] bs = new byte[4] ;
+        ByteUtil.hex2Bytes(vo.softStoreAddr, bs, 0) ;
+        byte[] bytes = ByteUtil.bytesMerge(preBytes, bs) ;
+
+        bs = new byte[4] ;
+        ByteUtil.int2Bytes_BE(bs, vo.totalByte, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[2] ;
+        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[2] ;
+        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;
+        ByteUtil.hex2Bytes(vo.softStartAddr, bs, 0) ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
 
         byte[] bsTail = GlCreate.createCrcTail4Ug(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java
index 153f46b..941a836 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java
@@ -32,7 +32,7 @@
         midRs.downCodeName = CodeV2.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
         midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
         midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
-        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
         midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
         midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
 
@@ -70,8 +70,16 @@
 
         index += 2 ;
         GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+        if(para.param == null){
+            throw new Exception("鍙傛暟涓虹┖") ;
+        }
+        Integer ramAddr = (Integer)para.param ;
 
-        byte[] bytes = ByteUtil.bytesMerge(preBytes, (byte[])para.attachment) ;
+        byte[] bs = new byte[4] ;
+        ByteUtil.int2Bytes_BE(bs, ramAddr, 0);
+        byte[] bytes = ByteUtil.bytesMerge(preBytes, bs) ;
+
+        bytes = ByteUtil.bytesMerge(bytes, (byte[])para.attachment) ;
 
         byte[] bsTail = GlCreate.createCrcTail4Ug(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java
index 6832c5b..f9ad376 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java
@@ -32,7 +32,7 @@
         midRs.downCodeName = CodeV2.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
         midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
         midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
-        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
         midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
         midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java
index c7bba8a..29fda88 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9601_Up.java
@@ -43,7 +43,7 @@
         midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
         midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
 
-        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+        midRs.reportOrResponse_trueOrFalse = true ;//鍗囩骇鐨勶紝涓嶈涓烘槸鍛戒护搴旂瓟
 
         callback.callback(midRs.reportOrResponse_trueOrFalse);
         if(para.data != null && para.data.getSubData() != null){
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java
index 83b99d8..4a12426 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9602_Up.java
@@ -43,7 +43,7 @@
         midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
         midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
 
-        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+        midRs.reportOrResponse_trueOrFalse = true ;//鍗囩骇鐨勶紝涓嶈涓烘槸鍛戒护搴旂瓟
 
         callback.callback(midRs.reportOrResponse_trueOrFalse);
         if(para.data != null && para.data.getSubData() != null){
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java
index 6f111e1..00a47a7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_9603_Up.java
@@ -43,7 +43,7 @@
         midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
         midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
 
-        midRs.reportOrResponse_trueOrFalse = false ;//涓诲姩涓婃姤
+        midRs.reportOrResponse_trueOrFalse = true ;//鍗囩骇鐨勶紝涓嶈涓烘槸鍛戒护搴旂瓟
 
         callback.callback(midRs.reportOrResponse_trueOrFalse);
         if(para.data != null && para.data.getSubData() != null){
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
index cbfccd6..323e0b1 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
@@ -42,6 +42,14 @@
 	public static final String cd_9C = "9C" ; //榛戝悕鍗曡繙绋嬪己鍒跺叧闂按娉�/闃�闂�
 	public static final String cd_C2 = "C2" ; //寮�鍏虫按娉�/闃�闂ㄦ垚鍔�/澶辫触涓婃姤
 
+	public static final String cd_1600 = "1600" ;//鍗囩骇澶嶄綅
+	public static final String cd_1601 = "1601" ;//鍗囩骇閰嶇疆
+	public static final String cd_1602 = "1602" ;//鍗囩骇鏁版嵁
+	public static final String cd_1603 = "1603" ;//鍗囩骇鏍¢獙
+	public static final String cd_9601 = "9601" ;//鍗囩骇閰嶇疆
+	public static final String cd_9602 = "9602" ;//鍗囩骇鏁版嵁
+	public static final String cd_9603 = "9603" ;//鍗囩骇鏍¢獙
+
 	public static String getCodeName(String code) {
 		String name = (code.equals(cd_02) ? "閾捐矾妫�娴�" :
 			(code.equals(cd_10) ? "璁剧疆璁惧缁堢鍦板潃" :
@@ -82,7 +90,14 @@
 			(code.equals(cd_9B) ? "娓呴櫎璁惧缁堢娉ㄥ唽鍙�" :
 			(code.equals(cd_9C) ? "榛戝悕鍗曡繙绋嬪己鍒跺叧闂按娉�/闃�闂�" :
 			(code.equals(cd_C2) ? "寮�鍏虫按娉�/闃�闂ㄧ粨鏋滀笂鎶�" :
-			""))))))))))))))))))))))))))))))))))))))) ;
+			(code.equals(cd_1600) ? "鍗囩骇澶嶄綅" :
+			(code.equals(cd_1601) ? "鍗囩骇閰嶇疆" :
+			(code.equals(cd_1602) ? "鍗囩骇鏁版嵁" :
+			(code.equals(cd_1603) ? "鍗囩骇鏍¢獙" :
+			(code.equals(cd_9601) ? "鍗囩骇閰嶇疆" :
+			(code.equals(cd_9602) ? "鍗囩骇鏁版嵁" :
+			(code.equals(cd_9603) ? "鍗囩骇鏍¢獙" :
+			"")))))))))))))))))))))))))))))))))))))))))))))) ;
 		if(name == null || name.equals("")){
 			name = code ;
 		}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
index e5a19ef..dd0eedd 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
@@ -1,11 +1,25 @@
 package com.dy.common.mw.protocol.p206V202404;
 
+import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
 import com.dy.common.util.ByteUtil;
 import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.common.util.CRC16;
 import com.dy.common.util.CRC8_for_2_0;
+import org.apache.mina.core.session.IoSession;
 
 
 public class CommonV202404 {
+
+    /**
+     * 鍦↖o浼氳瘽涓缃崗璁悕绉板強鐗堟湰鍙�
+     * @param ioSession 浼氳瘽
+     */
+    public void setThisProtocolArr2IoSession(IoSession ioSession){
+        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolName) ;
+        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolVer) ;
+    }
     /**
      * 妫�鏌ュご
      * @param bs 涓婅瀛楄妭鏁扮粍
@@ -39,6 +53,27 @@
         }
     }
 
+    /**
+     * 妫�鏌ュ崗璁被鍨�
+     * @param bs 涓婅瀛楄妭鏁扮粍
+     * @return 鍗忚绫诲瀷
+     * @throws Exception 寮傚父
+     */
+    public Boolean protocolType_p206TrueUgFalse(byte[] bs){
+        if(bs == null){
+            return null ;
+        }else if(bs.length >= (ProtocolConstantV206V202404.ctrlIndex)
+                && bs[0] == ProtocolConstantV206V202404.P_Head_Byte
+                && bs[2] == ProtocolConstantV206V202404.P_Head_Byte){
+            return true ;
+        }else if(bs.length >= (ProtocolConstantV206V202404.UG_codeIndex)
+                && bs[0] == ProtocolConstantV206V202404.UG_P_Head_Byte
+                && bs[3] == ProtocolConstantV206V202404.UG_P_Head_Byte){
+            return false ;
+        }else{
+            return null ;
+        }
+    }
 
     /**
      * 妫�鏌ュ熬
@@ -77,8 +112,19 @@
      * @return 鏁版嵁闀垮害
      * @throws Exception 寮傚父
      */
-    public int parseDataLen(byte[] bs)throws Exception{
+    public int parseDataLen4P202404(byte[] bs)throws Exception{
         return parseFrameLen(bs) ;
+    }
+
+    /**
+     * 鍒嗘瀽鐢ㄦ埛鏁版嵁鍩熷瓧鑺傛暟(鍗囩骇鍗忚)
+     * @param bs 涓婅瀛楄妭鏁扮粍
+     * @return 鏁版嵁闀垮害
+     * @throws Exception 寮傚父
+     */
+    public int parseDataLen4Ug(byte[] bs)throws Exception{
+        int len = ByteUtilUnsigned.bytes2Short_LE(bs, ProtocolConstantV206V2.UG_dataLenIndex_start) ;
+        return len - ProtocolConstantV206V2.UG_lenCmd - ProtocolConstantV206V2.UG_lenRtuAddr ;
     }
 
 
@@ -125,6 +171,18 @@
     }
 
     /**
+     * 鍒嗘瀽鍔熻兘鐮�
+     * @param bs 涓婅瀛楄妭鏁扮粍
+     * @return 鍔熻兘鐮�
+     */
+    public String parseCode(byte[] bs, boolean p202404TrueUgFalse){
+        if(p202404TrueUgFalse) {
+            return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V202404.codeIndex, 1);
+        }else{
+            return ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V202404.UG_codeIndex, 2);
+        }
+    }
+    /**
      * 鏍¢獙鍜屾鏌�
      * @param bs  涓婅瀛楄妭鏁扮粍
      * @return 閫氳繃null锛屾湭閫氳繃杩斿洖鍘熷洜
@@ -140,6 +198,33 @@
         }
     }
 
+    /**
+     * 鏍¢獙鍜屾鏌�
+     * @param bs  涓婅瀛楄妭鏁扮粍
+     * @param p202404TrueUgFalse 202404鍗忚涓簍rue锛屽崌绾у崗璁负false
+     * @return 閫氳繃null锛屾湭閫氳繃杩斿洖鍘熷洜
+     * @throws Exception 寮傚父
+     */
+    public String checkCrc_str(byte[] bs, boolean p202404TrueUgFalse) throws Exception {
+        if(p202404TrueUgFalse){
+            byte crcCompute = (byte)new CRC8_for_2_0().CRC8(bs, ProtocolConstantV206V202404.ctrlIndex, bs.length - 3) ;
+            byte crcInBs = bs[bs.length - 2] ;
+            if(crcCompute == crcInBs){
+                return null ;
+            }else{
+                return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ;
+            }
+        }else{
+            short crcCompute = new CRC16().CRC(bs, 0, bs.length - 4) ;
+            short crcInBs = ByteUtil.bytes2Short_BE(bs,bs.length - 3) ;
+            //int crcInBs = ByteUtilUnsigned.bytes2Short_BE(bs, bs.length - 3) ;
+            if(crcCompute == crcInBs){
+                return null ;
+            }else{
+                return "璁$畻CRC鏄�:" + crcCompute + "锛屼笂浼燙RC鏄�" + crcInBs ;
+            }
+        }
+    }
 
     /*
     鏋勯�犳帶鍒跺煙
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java
index 3e77762..0c2e775 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java
@@ -2,9 +2,12 @@
 
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
 import com.dy.common.util.DateTime;
 
-@AnnotationDriver(name= ProtocolConstantV206V202404.protocolName)
+@AnnotationDriver(enable = true,
+		name= ProtocolConstantV206V202404.protocolName,
+		version= ProtocolConstantV206V202404.protocolVer)
 public class DriverV202404 extends Driver {
 	
 	private static String scanRootPackage = "com.dy.common.mw.protocol.p206V202404" ;
@@ -58,8 +61,9 @@
 		String upCode = null ;
 		try{
 			CommonV202404 cp = new CommonV202404() ;
+			Boolean p202404TrueUgFalse = cp.protocolType_p206TrueUgFalse(upBuffer) ;
 			cp.checkTail(upBuffer) ;
-			String crcStr = cp.checkCrc_str(upBuffer) ;
+			String crcStr = cp.checkCrc_str(upBuffer, p202404TrueUgFalse) ;
 			if(crcStr != null){
 				return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, rtuAddr, "涓ラ噸閿欒锛屼笂琛屾暟鎹瓹RC妫�鏌ュけ璐ワ紝" + crcStr, null))} ;
 			}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/OnLineV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/OnLineV202404.java
index dfea28c..70571ed 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/OnLineV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/OnLineV202404.java
@@ -4,7 +4,9 @@
 import com.dy.common.mw.protocol.OnLine;
 
 @AnnotationOnLine(
+		enable = true,
 		protocolName = ProtocolConstantV206V202404.protocolName,
+		protocolVersion = ProtocolConstantV206V202404.protocolVer,
 		priority = ProtocolConstantV206V202404.priority)
 @SuppressWarnings("unused")
 public class OnLineV202404 implements OnLine{
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/PrefixedDataAvailableV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/PrefixedDataAvailableV202404.java
index de21587..c2a258c 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/PrefixedDataAvailableV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/PrefixedDataAvailableV202404.java
@@ -8,10 +8,12 @@
 import org.apache.logging.log4j.Logger;
 import org.apache.mina.core.buffer.BufferDataException;
 import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
 
 
 @AnnotationPrefixedDataAvailable(
 		protocolName = ProtocolConstantV206V202404.protocolName,
+		protocolVersion = ProtocolConstantV206V202404.protocolVer,
 		priority = ProtocolConstantV206V202404.priority,
 		onLineDataMinLength = ProtocolConstantV206V202404.onLineDataMinLength,
 		headMinLength = ProtocolConstantV206V202404.headMinLength)
@@ -21,6 +23,7 @@
 	private static final Logger log = LogManager.getLogger(PrefixedDataAvailableV202404.class) ;
 	
 	private static final String protocolName = ProtocolConstantV206V202404.protocolName ;
+	private static final short protocolVersion = ProtocolConstantV206V202404.protocolVer ;
 
 
 	/**
@@ -32,10 +35,11 @@
 	 * @return 涓嶆槸鏈崗璁暟鎹椂杩斿洖绌�
 	 * @throws Exception 寮傚父
 	 */
-	public PrefixedDataAvailableStatus forOnLine(IoBuffer in, 
-			int remain,
-			int minDataLength, //瀵瑰簲ProtocolConstantV2_0.onLineDataMinLength
-			int maxDataLength //瀵瑰簲ProtocolConstant.errorMaxLength
+	public PrefixedDataAvailableStatus forOnLine(IoSession ioSession,
+												 IoBuffer in,
+												 int remain,
+												 int minDataLength, //瀵瑰簲ProtocolConstantV2_0.onLineDataMinLength
+												 int maxDataLength //瀵瑰簲ProtocolConstant.errorMaxLength
 			) throws Exception {
 		
 		int oldPosition = in.position() ;
@@ -44,7 +48,7 @@
 		//in.position(0) ;//閿欒鐢ㄦ硶锛屽鏋滃彂鐢熺矘鍖呮暟鎹紝灏嗕細姝诲惊鐜�
 		in.position(oldPosition) ;
 
-		return this.doForData(preByte, minDataLength, maxDataLength) ;
+		return this.doForData(ioSession, preByte, minDataLength, maxDataLength) ;
 	}
 
 	/**
@@ -57,28 +61,30 @@
 	 * @throws Exception 寮傚父
 	 */
 	@Override
-	public PrefixedDataAvailableStatus forUpData(IoBuffer in, 
-			int remain,
-			int minDataLength,
-			int maxDataLength) throws Exception {
+	public PrefixedDataAvailableStatus forUpData(IoSession ioSession,
+												 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) ;
+		return this.doForData(ioSession, preByte, minDataLength, maxDataLength) ;
 
     }
 	/**
 	 * 杩涜鍒ゆ柇
+	 * @param ioSession ioSession
 	 * @param preByte byte[]
 	 * @param minDataLength 鏈�灏忔暟鎹暱搴�
 	 * @param maxDataLength 鏈�澶ф暟鎹暱搴�
 	 * @return PrefixedDataAvailableStatus
 	 * @throws Exception 寮傚父
 	 */
-	private PrefixedDataAvailableStatus doForData(byte[] preByte, int minDataLength, int maxDataLength) throws Exception{
+	private PrefixedDataAvailableStatus doForData(IoSession ioSession, byte[] preByte, int minDataLength, int maxDataLength) throws Exception{
 		int remain = preByte.length ;
     	
         if (remain < minDataLength) {
@@ -114,11 +120,11 @@
         
         if(remain == frameLen){
         	//涓嶆柇涓嶇矘
-            return new PrefixedDataAvailableStatus().completed(frameLen) ;
+            return new PrefixedDataAvailableStatus().completed(frameLen, protocolName, protocolVersion) ;
         }else if(remain > frameLen){
 			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
         	log.warn("鏀跺埌鏁版嵁涔嬪抚鍓嶉儴锛�" + headHex + "锛屼絾鍙戠敓绮樺寘鐜拌薄銆�") ;
-            return new PrefixedDataAvailableStatus().adjoined(frameLen) ;
+            return new PrefixedDataAvailableStatus().adjoined(frameLen, protocolName, protocolVersion) ;
         }else{
         	// remain < dataLen
 			String headHex = ByteUtil.bytes2Hex(preByte, true) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/ProtocolConstantV206V202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/ProtocolConstantV206V202404.java
index da464ff..a3a22fa 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/ProtocolConstantV206V202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/ProtocolConstantV206V202404.java
@@ -8,7 +8,7 @@
      * 娉ㄨВ鐩稿叧
      */
     public static final String protocolName = "p206V202404" ;
-    public static final Short protocolVer = 201 ;
+    public static final short protocolVer = 201 ;
     public static final int priority = 1 ;//浼樺厛绾�
     /**
      * RTU涓婄嚎鏁版嵁锛堜笂绾垮悗绗竴鍖呮暟鎹級鏈�灏忛暱搴︼紝璁剧疆璇ュ睘鎬т互澶囪繘琛屽畬鏁存�ф鏌ワ紝
@@ -48,4 +48,27 @@
     public static final int codeIndex = 12 ;//鍔熻兘鐮佸瓧鑺傛暟缁勪笅鏍�
     public static final int dataIndex = 13 ;//鍏蜂綋鏁版嵁瀛楄妭鏁扮粍涓嬫爣
 
+    ////////////////////////////////////////////////
+    //
+    //杩滅▼鍗囩骇鐩稿叧
+    //
+    ////////////////////////////////////////////////
+    public static final byte UG_P_Head_Byte = (byte)0xAA ;
+    public static final byte UG_P_Tail_Byte = (byte)0x16 ;
+    public static final int UG_codeIndex = 4 ;//鍔熻兘鐮佸瓧鑺傛暟缁勪笅鏍�
+    public static final int UG_dataIndex = 12 ;//鍏蜂綋鏁版嵁瀛楄妭鏁扮粍涓嬫爣
+
+    public static final int UG_dataLenIndex_start = 1 ;//甯ч暱搴﹀紑濮嬫墍鍦� 瀛楄妭鏁扮粍璧峰涓嬫爣
+    public static final int UG_dataLenIndex_end = 2 ;//甯ч暱搴︾粨鏉熸墍鍦� 瀛楄妭鏁扮粍璧峰涓嬫爣
+
+    public static final int UG_rtuAddrIndex_start = 6 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍寮�濮嬩笅鏍�
+    public static final int UG_rtuAddrIndex_end = 11 ;//鎺у埗鍣ㄥ湴鍧� 瀛楄妭鏁扮粍寮�濮嬩笅鏍�
+
+    public static final byte UG_lenCmd = 2 ; //鍔熻兘鐮佸瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenRtuAddr = 6 ; //鍔熻兘鐮佸瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenHead2Cmd = 4 ; //浠庡ご鍒板姛鑳界爜锛堜笉鍖呮嫭锛夊瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenTail = 3 ; //甯у熬閮ㄥ瓧鑺傛暟缁勯暱搴�
+    public static final byte UG_lenHead2RtuAddr = 12 ; //浠庡ご鍒癛TU鍦板潃锛堝寘鎷級瀛楄妭鏁扮粍闀垮害
+
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java
index 33b3d8c..1d8a3a6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java
index d5e085c..10b91c8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Up.java
index c8fb493..f39d009 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1600_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1600_Down.java
new file mode 100644
index 0000000..c73a6d2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1600_Down.java
@@ -0,0 +1,79 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_1600
+})
+public class Cd_1600_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV202404 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V202404.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V202404.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V202404.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(preBytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(preBytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1601_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1601_Down.java
new file mode 100644
index 0000000..31d9552
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1601_Down.java
@@ -0,0 +1,108 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.softUpgrade.Com1601Vo;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_1601
+})
+public class Cd_1601_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV202404 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V202404.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V202404.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V202404.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        if(para.param == null){
+            throw new Exception("鍙傛暟涓虹┖") ;
+        }
+        if(!(para.param instanceof Com1601Vo)){
+            throw new Exception("鍙傛暟绫诲瀷闈濩om1601Vo") ;
+        }
+        Com1601Vo vo = (Com1601Vo) para.param ;
+        byte[] bs = new byte[4] ;
+        ByteUtil.hex2Bytes(vo.softStoreAddr, bs, 0) ;
+        byte[] bytes = ByteUtil.bytesMerge(preBytes, bs) ;
+
+        bs = new byte[4] ;
+        ByteUtil.int2Bytes_BE(bs, vo.totalByte, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[2] ;
+        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[2] ;
+        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;
+        ByteUtil.hex2Bytes(vo.softStartAddr, bs, 0) ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(bytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1602_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1602_Down.java
new file mode 100644
index 0000000..5281b89
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1602_Down.java
@@ -0,0 +1,90 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_1602
+})
+public class Cd_1602_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV202404 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V202404.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V202404.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V202404.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+        if(para.param == null){
+            throw new Exception("鍙傛暟涓虹┖") ;
+        }
+        Integer ramAddr = (Integer)para.param ;
+
+        byte[] bs = new byte[4] ;
+        ByteUtil.int2Bytes_BE(bs, ramAddr, 0);
+        byte[] bytes = ByteUtil.bytesMerge(preBytes, bs) ;
+
+        bytes = ByteUtil.bytesMerge(bytes, (byte[])para.attachment) ;
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(bytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1603_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1603_Down.java
new file mode 100644
index 0000000..b708300
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1603_Down.java
@@ -0,0 +1,80 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/06/12 9:30
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_1603
+})
+public class Cd_1603_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        byte[] bs = this.doParse(midRs, para) ;
+
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = false ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param midRs 鍙傛暟
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(MidResultToRtu midRs, ParseParamsForDownV202404 para) throws Exception {
+        byte[] preBytes = new byte[ProtocolConstantV206V202404.UG_lenHead2RtuAddr] ;
+        byte index = 0 ;
+        preBytes[index] = ProtocolConstantV206V202404.UG_P_Head_Byte ;
+
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+        index++ ;
+        preBytes[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        preBytes[index] = ProtocolConstantV206V202404.UG_P_Head_Byte ;
+
+        index++ ;
+        ByteUtil.hex2Bytes(para.commandCode, preBytes, index) ;
+
+        index += 2 ;
+        GlCreate.createRtuAddr4PUg(para.rtuAddr, preBytes, index);
+
+        byte[] bsTail = GlCreate.createCrcTail4Ug(preBytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return ByteUtil.bytesMerge(preBytes, bsTail) ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Up.java
index 6139a1a..9dec008 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Up.java
index 2086c11..4b6edb0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Up.java
index 700672b..10df5d1 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Up.java
index 6d7578c..994bc16 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Up.java
index 81a2128..1c65543 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Up.java
index ce89f4a..e277dcb 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Up.java
index c566ec3..59178ff 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Up.java
index a50403c..58757dc 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Up.java
index 7b0f8e7..3a5ecf7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Up.java
index 892a961..d8b73c7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Up.java
index 1549a37..2387664 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java
index bc7fc93..0cb3a10 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Up.java
index 6e5aced..372f3aa 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java
index 0e97971..c9a2574 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java
@@ -25,7 +25,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java
index e3d9320..cab10de 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java
@@ -26,7 +26,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java
index aea14e7..201f0ca 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Up.java
index a3d3203..c7a2ff2 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Up.java
@@ -2,7 +2,6 @@
 
 
 import com.dy.common.mw.protocol.*;
-import com.dy.common.mw.protocol.p206V1.CommonV1;
 import com.dy.common.mw.protocol.p206V202404.*;
 import com.dy.common.mw.protocol.p206V202404.parse.global.GlParse;
 import com.dy.common.mw.protocol.p206V202404.upVos.DataCd80_5BVo;
@@ -25,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java
index d29b1ec..5dcdd32 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java
@@ -24,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java
index 7248381..bd18237 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java
@@ -4,7 +4,6 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V202404.*;
 import com.dy.common.mw.protocol.p206V202404.upVos.DataCd83Vo;
-import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import com.dy.common.util.ByteUtil;
 import com.dy.common.util.DateTime;
 import org.apache.logging.log4j.LogManager;
@@ -24,7 +23,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java
index b328650..9d72e78 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java
@@ -24,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java
index 16f2010..4578f72 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java
@@ -24,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java
index 02e5bc6..7a2d259 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java
index 7afd97e..5759e11 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Up.java
index 24e182b..ec5c5b5 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java
index a96b095..2b187ae 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java
index acb78d3..652bbea 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java
@@ -25,7 +25,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java
index b2fa8c0..b5434ee 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java
@@ -2,7 +2,6 @@
 
 
 import com.dy.common.mw.protocol.*;
-import com.dy.common.mw.protocol.p206V2.upVos.DataCd93Vo;
 import com.dy.common.mw.protocol.p206V202404.*;
 import com.dy.common.mw.protocol.p206V202404.parse.global.GlParse;
 import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3Vo;
@@ -25,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9601_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9601_Up.java
new file mode 100644
index 0000000..2f80106
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9601_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.*;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV202404.cd_9601
+})
+public class Cd_9601_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9601_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
+        int bsLen = new CommonV202404().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV202404.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = true ;//鍗囩骇鐨勶紝涓嶈涓烘槸鍛戒护搴旂瓟
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV202404)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV202404 dV2 = (DataV202404)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV2.subData = cdData ;
+        if(bs[ProtocolConstantV206V202404.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9602_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9602_Up.java
new file mode 100644
index 0000000..517d44e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9602_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.*;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV202404.cd_9602
+})
+public class Cd_9602_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9602_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
+        int bsLen = new CommonV202404().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV202404.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = true ;//鍗囩骇鐨勶紝涓嶈涓烘槸鍛戒护搴旂瓟
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV202404)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV202404 dV2 = (DataV202404)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV2.subData = cdData ;
+        if(bs[ProtocolConstantV206V202404.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9603_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9603_Up.java
new file mode 100644
index 0000000..8dd7280
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9603_Up.java
@@ -0,0 +1,73 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.*;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd960XVo;
+import com.dy.common.mw.protocol.rtuState.UpgradeStateInfo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 10:58
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV202404.cd_9603
+})
+public class Cd_9603_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_9603_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
+        int bsLen = new CommonV202404().parseDataLen4Ug(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV202404.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion; //鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = true ;//鍗囩骇鐨勶紝涓嶈涓烘槸鍛戒护搴旂瓟
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd960XVo subData = (DataCd960XVo)((DataV202404)para.data.getSubData()).subData ;
+            callback.notify(new UpgradeStateInfo(subData.success));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV202404 dV2 = (DataV202404)data.getSubData() ;
+        DataCd960XVo cdData = new DataCd960XVo() ;
+        dV2.subData = cdData ;
+        if(bs[ProtocolConstantV206V202404.UG_dataIndex] == (byte)0x00){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java
index cb40710..e3cd079 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Up.java
index 1a9bc50..dba8ec1 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Up.java
@@ -22,7 +22,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Up.java
index 7ae5965..124c85a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java
index 4f0149c..1ca5e77 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Up.java
index 9f3a2fd..f5ede77 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Up.java
@@ -21,7 +21,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java
index 2408a64..7558ba0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java
@@ -2,8 +2,6 @@
 
 
 import com.dy.common.mw.protocol.*;
-import com.dy.common.mw.protocol.p206V2.upVos.DataCd83CloseVo;
-import com.dy.common.mw.protocol.p206V2.upVos.DataCd83OpenVo;
 import com.dy.common.mw.protocol.p206V202404.*;
 import com.dy.common.mw.protocol.p206V202404.parse.global.GlParse;
 import com.dy.common.mw.protocol.p206V202404.upVos.DataCdC2Vo;
@@ -26,7 +24,7 @@
     @Override
     public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
         ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
-        int bsLen = new CommonV202404().parseDataLen(para.upBuffer) ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
         if(bsLen > 0){
             this.doParse(para.upBuffer,
                     bsLen,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java
index e473475..432a0bf 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java
@@ -1,12 +1,10 @@
 package com.dy.common.mw.protocol.p206V202404.parse.global;
 
 import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
 import com.dy.common.mw.protocol.p206V202404.CommonV202404;
 import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
-import com.dy.common.util.ByteUtil;
-import com.dy.common.util.ByteUtilUnsigned;
-import com.dy.common.util.CRC8_for_2_0;
-import com.dy.common.util.DateTime;
+import com.dy.common.util.*;
 
 public class GlCreate {
     /**
@@ -55,6 +53,16 @@
 
         Integer rtuAddr2Int = Integer.parseInt(rtuAddr2) ;
         ByteUtilUnsigned.short2Bytes_LE(bs, rtuAddr2Int.shortValue(), index);
+    }
+    /**
+     * 涓哄崌绾у崗璁�
+     * @param rtuAddr
+     * @param bs
+     * @param index
+     * @throws Exception
+     */
+    public static void createRtuAddr4PUg(String rtuAddr, byte[] bs, int index) throws Exception {
+        ByteUtil.string2BCD_BE(bs, rtuAddr, index) ;
     }
 
     /**
@@ -146,6 +154,14 @@
         return bytes ;
     }
 
+    public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception {
+        int crc = new CRC16().CRC(bsNoTail, 0, bsNoTail.length -1) ;
+        byte[] bytes = new byte[ProtocolConstantV206V2.UG_lenTail] ;
+        ByteUtilUnsigned.short2Bytes_BE(bytes, crc, 0);
+        bytes[2] = ProtocolConstantV206V2.P_Tail_Byte ;
+        return bytes ;
+    }
+
     public static void main(String[] args)throws Exception{
         byte[] bs = new byte[6] ;
         createTp(bs, 0) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd960XVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd960XVo.java
new file mode 100644
index 0000000..623cbae
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd960XVo.java
@@ -0,0 +1,23 @@
+package com.dy.common.mw.protocol.p206V202404.upVos;
+
+import com.dy.common.mw.protocol.UpDataVo;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 11:14
+ * @Description
+ */
+public class DataCd960XVo implements UpDataVo {
+    public boolean success;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   鍗囩骇搴旂瓟:\n");
+        sb.append("      缁撴灉锛�");
+        sb.append(success?"姝g‘":"閿欒");
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
index 2cdd204..bb25f7a 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
@@ -269,6 +269,14 @@
     <where>
       AND ord.deleted = 0
 
+      <if test = "dispatcherId != null">
+        AND ord.dispatcher_id = #{dispatcherId}
+      </if>
+
+      <if test = "inspectorId != null">
+        AND ord.inspector_id = #{inspectorId}
+      </if>
+
       <if test = "dispatcher != null and dispatcher !=''">
         AND us1.name like CONCAT('%',#{dispatcher},'%')
       </if>
@@ -317,6 +325,14 @@
     <where>
       AND ord.deleted = 0
 
+      <if test = "dispatcherId != null">
+        AND ord.dispatcher_id = #{dispatcherId}
+      </if>
+
+      <if test = "inspectorId != null">
+        AND ord.inspector_id = #{inspectorId}
+      </if>
+
       <if test = "dispatcher != null and dispatcher !=''">
         AND us1.name like CONCAT('%',#{dispatcher},'%')
       </if>
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java
index 3755628..7bccddf 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java
@@ -19,7 +19,7 @@
 	public void sessionOpened(IoSession session) throws Exception {
     	log.info("缃戠粶杩炴帴寤虹珛锛岀粓绔綉鍧�鏄細" + session.getRemoteAddress().toString()) ;
 		if(session != null) {
-			String rtuAddr = (String) session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey);
+			String rtuAddr = (String) session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr);
 			if(rtuAddr != null && !rtuAddr.trim().equals("")){
 				RtuLogDealer.log(rtuAddr, "缃戠粶鎺ュ叆");
 			}
@@ -32,7 +32,7 @@
 	@Override
 	public void sessionClosed(IoSession session) throws Exception {
 		if(session != null){
-	     	String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ;
+	     	String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
 
 	     	if(rtuAddr != null && !rtuAddr.trim().equals("")){
 	     		//璁板綍鐘舵��
@@ -49,7 +49,7 @@
      */
     public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
     	if(session != null && cause != null){
-    		String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ;
+    		String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
     		log.error("缃戠粶浼氳瘽鍙戠敓寮傚父锛�"
     				+ (rtuAddr==null?"":("缁堢鍦板潃鏄細" + rtuAddr))
     				+ (session==null?"":(session.getRemoteAddress() != null?("锛岀粓绔綉鍧�鏄細" + session.getRemoteAddress().toString()):""))
@@ -61,7 +61,7 @@
      * TCP閫氶亾鍙戦�佸畬鏁版嵁鍚庯紝鍥炶皟鐨勬柟娉曪紝杩涜鍚庣画鏁版嵁澶勭悊
      */
     public void messageSended(IoSession session, Object message) throws Exception  {
-      	String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ;
+      	String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
     	log.info("缃戠粶鍙戦�佷簡鏁版嵁锛�"
     			+ (rtuAddr==null?"":("缁堢鍦板潃鏄細" + rtuAddr))
     			+ (session==null?"":(session.getRemoteAddress() != null?("锛岀粓绔綉鍧�鏄細" + session.getRemoteAddress().toString()):"")) );
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSession.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSession.java
index 083db87..72d1eca 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSession.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSession.java
@@ -6,8 +6,8 @@
 public class TcpSession {
 	
 	public IoSession ioSession ;//IoSession瀵硅薄
-	public String protocolName ;//閫氫俊鍗忚鍚嶇О
-	public Short protocolVersion ;//閫氫俊鍗忚鐗堟湰鍙�
+//	public String protocolName ;//閫氫俊鍗忚鍚嶇О
+//	public Short protocolVersion ;//閫氫俊鍗忚鐗堟湰鍙�
 	public Long lastDownComTime ;//涓婃涓嬪彂鍛戒护鏃跺埢(姣鏃跺埢 System.currentTimeMillis())
 	public Long lastUpDataTime ;//涓婃鏀跺埌涓婅鏁版嵁鏃跺埢(姣鏃跺埢 System.currentTimeMillis())
 	public Long lastUpDataTimeForOnlineCtrl ;//涓婃鏀跺埌涓婅鏁版嵁鏃跺埢(姣鏃跺埢 System.currentTimeMillis())锛岀敤浜庝笂绾挎儏鍐垫帶鍒�
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
index ca59202..cc82cf0 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
@@ -3,6 +3,7 @@
 import java.util.*;
 import java.util.Map.Entry;
 
+import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
 import org.apache.mina.core.session.IoSession;
 
 import com.dy.rtuMw.server.ServerProperties;
@@ -60,16 +61,16 @@
 	/**
 	 * 鍔犲叆鏂扮殑IoSession
 	 * @param rtuAddr
-	 * @param protocolName
 	 * @param ioSession
 	 */
-	public static void putNewTcpSession(String rtuAddr, String protocolName, Short protocolVersion, IoSession ioSession){
+	//public static void putNewTcpSession(String rtuAddr, String protocolName, Short protocolVersion, IoSession ioSession){
+	public static void putNewTcpSession(String rtuAddr, IoSession ioSession){
 		synchronized (map){
 			TcpSession tcpSe = map.get(rtuAddr) ;
 			if(tcpSe == null){
 				tcpSe = new TcpSession() ;
-				tcpSe.protocolName = protocolName ;
-				tcpSe.protocolVersion = protocolVersion ;
+				//tcpSe.protocolName = protocolName ;
+				//tcpSe.protocolVersion = protocolVersion ;
 				tcpSe.ioSession = ioSession ;
 				map.put(rtuAddr, tcpSe) ;
 			}else{
@@ -82,16 +83,15 @@
 	 * 鏇存柊IoSession瀵瑰簲鐨剅tuAddr
 	 * @param oldRtuAddr
 	 * @param newRtuAddr
-	 * @param protocolName
-	 * @param protocolVersion
 	 * @param ioSession
 	 */
-	public static void changeRtuAddr(String oldRtuAddr, String newRtuAddr, String protocolName, Short protocolVersion, IoSession ioSession){
+	//public static void changeRtuAddr(String oldRtuAddr, String newRtuAddr, String protocolName, Short protocolVersion, IoSession ioSession){
+	public static void changeRtuAddr(String oldRtuAddr, String newRtuAddr, IoSession ioSession){
 		if(oldRtuAddr != null && newRtuAddr != null && !oldRtuAddr.equals(newRtuAddr)){
 			synchronized (map){
 				TcpSession tcpSe = map.get(oldRtuAddr) ;
 				if(tcpSe == null){
-					putNewTcpSession(newRtuAddr, protocolName, protocolVersion, ioSession) ;
+					putNewTcpSession(newRtuAddr, ioSession) ;
 				}else{
 					map.remove(oldRtuAddr) ;
 					map.put(newRtuAddr, tcpSe) ;
@@ -113,7 +113,6 @@
 	 * 寰楀埌Tcp閫氫俊鍗忚鍚嶇О
 	 * @param rtuAddr
 	 * @return
-
 	public static String getTcpProtocolName(String rtuAddr){
 		TcpSession tcpSe = sessionTable.get(rtuAddr) ;
 		if(tcpSe != null){
@@ -127,16 +126,19 @@
 	 * 寰楀埌Tcp閫氫俊鍗忚鍚嶇О
 	 * @param rtuAddr
 	 * @return
-	 */
+	 * */
 	public static Object[] getTcpProtocolNameVersion(String rtuAddr){
 		TcpSession tcpSe = map.get(rtuAddr) ;
 		if(tcpSe != null){
-			return new Object[]{tcpSe.protocolName, tcpSe.protocolVersion};
+			return new Object[]{
+					tcpSe.ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName),
+					tcpSe.ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion)};
 		}else{
 			return null ;
 		}
 	}
 
+
 	/**
 	 * 寰楀埌鎵�鏈夊湪绾夸笌绂荤嚎鏁伴噺缁熻
 	 * @return [0]=鍦ㄧ嚎鏁伴噺锛孾2]涓婄嚎杩囷紝浣嗗綋鍓嶇绾跨殑鏁伴噺
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java
index 946e7c4..be8798f 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java
@@ -32,7 +32,6 @@
 		TcpSession tcpSe = sessionTable.get(rtuAddr) ;
 		if(tcpSe == null){
 			tcpSe = new TcpSession() ;
-			tcpSe.protocolName = protocolName ;
 			tcpSe.ioSession = ioSession ;
 			sessionTable.put(rtuAddr, tcpSe) ;
 		}else{
@@ -68,20 +67,7 @@
 		return sessionTable.get(rtuAddr) ;
 	}
 	
-	/**
-	 * 寰楀埌Tcp閫氫俊鍗忚鍚嶇О
-	 * @param rtuAddr
-	 * @return
-	 */
-	public static String getTcpProtocolName(String rtuAddr){
-		TcpSession tcpSe = sessionTable.get(rtuAddr) ;
-		if(tcpSe != null){
-			return tcpSe.protocolName ;
-		}else{
-			return null ;
-		}
-	}
-	
+
 	/**
 	 * 寰楀埌鎵�鏈夊湪绾挎儏鍐�
 	 * @return
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
index fe6e49c..387bb42 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
@@ -55,9 +55,9 @@
 			e.printStackTrace();
 			log.error("灏嗘暟鎹浆鎹负鍗佸叚杩涘埗鏃跺嚭閿欙紒" ) ;
 		}
-		String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ;
-		String protocolName = null ;
-		Short protocolVersion = null ;
+		String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
+		String protocolName = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName) ;
+		Short protocolVersion = (Short)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion) ;
 		boolean isOnLine = false ;
 		if(rtuAddr == null){
 			//璇存槑鍒氬缓绔嬬綉缁滆繛鎺ワ紝姝ゆ暟鎹簲璇ユ槸涓婄嚎鏁版嵁
@@ -69,13 +69,13 @@
 				protocolName = (String)rtuAddrProtocolNameVersion[1] ;
 				protocolVersion = (Short)rtuAddrProtocolNameVersion[2] ;
 
-				if(rtuAddr != null && protocolName != null){
+				if(rtuAddr != null && protocolName != null && protocolVersion != null){
 					//璁剧疆session鐨勫睘鎬D
-					TcpUnit.getInstance().setIoSessionArrId(session, rtuAddr);
+					TcpUnit.getInstance().setIoSessionArrs(session, rtuAddr, protocolName, protocolVersion) ;
 					//缂撳瓨session
-					TcpSessionCache.putNewTcpSession(rtuAddr, protocolName, protocolVersion, session);
+					TcpSessionCache.putNewTcpSession(rtuAddr, session);
 					
-					log.info("RTU(鍦板潃锛�" + rtuAddr + "锛屽崗璁細" + protocolName + "锛屽崗璁増鏈彿锛�" + protocolVersion + ")涓婄嚎浜嗐��") ;
+					log.info("RTU(鍦板潃锛�" + rtuAddr + "锛屽崗璁細" + protocolName + "锛岀増鏈彿锛�" + protocolVersion + ")涓婄嚎浜嗐��") ;
 				}
 			}
 		}
@@ -95,11 +95,13 @@
 				}
 			}
 			if(toDeal){
+				/*
 				if(protocolName == null){
 					Object[] objs = TcpSessionCache.getTcpProtocolNameVersion(rtuAddr) ;
 					protocolName = (String)objs[0] ;
 					protocolVersion = (Short)objs[1] ;
 				}
+				*/
 
 				//璁剧疆鏀跺埌鏁版嵁鏃跺埢
 				TcpSessionCache.cacheUpDataTime(rtuAddr);
@@ -171,7 +173,7 @@
 							boolean isOnLine,
 							byte[] upBuf,
 							String upHex) throws Exception{
-		Driver dri = ProtocolCache.getDriver(protocolName) ;
+		Driver dri = ProtocolCache.getDriver(protocolName, protocolVersion) ;
 		if(dri == null){
 			log.error("涓ラ噸閿欒锛屾湭鑳藉緱鍒板崗璁�" + protocolName + "椹卞姩绫诲疄渚嬶紒");
 		}else{
@@ -181,8 +183,8 @@
 					//鏇存柊缁堢鐘舵��
 					if(rtuAddrInData != null && !rtuAddrInData.equals(rtuAddrAtHead)){
 						//鏁版嵁澶翠腑鐨凴TU鍦板潃涓庢暟鎹腑鐨凴TU鍦板潃涓嶄竴鑷达紝鏇存崲鎴愭暟鎹腑鐨凴TU鍦板潃
-						TcpSessionCache.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, protocolName, protocolVersion, session);
-						session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey, rtuAddrInData) ;
+						TcpSessionCache.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, session);
+						session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr, rtuAddrInData) ;
 					}
 
 					String rtuAddr ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/WebDownComTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/WebDownComTask.java
index 73777fd..9d49d97 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/WebDownComTask.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/WebDownComTask.java
@@ -44,29 +44,27 @@
 		Object[] objs =  TcpSessionCache.getTcpProtocolNameVersion(rtuAddr) ;
 		if(objs == null || objs.length == 0 || objs[0] == null){
 			//RTU鏈浘涓婄嚎
-			/* 2024-11-02 澧炲姞浜嗗崗璁増鏈彿锛屼笖涓�涓崗璁彲浠ユ湁澶氫釜鐗堟湰鍙凤紝鎵�浠ヤ笅闈㈠緱鍒板敮涓�鍗忚椹卞姩瀹炵幇鏂瑰紡涓嶅彲鐢ㄤ簡锛屽洜涓虹‘瀹氫笉浜嗙増鏈彿
 			int count = ProtocolCache.driverCount() ;
 			if(count == 1){
 				//鍙湁涓�涓崗璁�
 				dri = ProtocolCache.getFirstDriver() ;
 			}
-			*/
 		}else{
 			String protocolName = (String)objs[0];
 			com.protocolVersion = (Short)objs[1];
-			dri = ProtocolCache.getDriver(protocolName) ;
-			if(dri == null){
-				log.error("涓ラ噸閿欒锛屾湭鑳藉緱鍒板崗璁�" + protocolName + "椹卞姩绫诲疄渚嬶紒");
-			}else{
-				MidResult[] actions = dri.createCommand(ServerProperties.isLowPower, com)  ;
-				log.info("涓嬪彂杩滅▼鍛戒护" + com.getCode() + "鐢卞崗璁┍鍔ㄦ瀯閫犲畬鎴�");
-				if(actions != null){
-					for(MidResult act : actions){
-						act.action();
-					}
+			dri = ProtocolCache.getDriver(protocolName, com.protocolVersion) ;
+		}
+		if(dri == null){
+			log.error("涓ラ噸閿欒锛屾湭鑳藉緱鍒癛TU(" + rtuAddr + ")椹卞姩绫诲疄渚嬶紒");
+		}else{
+			MidResult[] actions = dri.createCommand(ServerProperties.isLowPower, com)  ;
+			log.info("涓嬪彂杩滅▼鍛戒护" + com.getCode() + "鐢卞崗璁┍鍔ㄦ瀯閫犲畬鎴�");
+			if(actions != null){
+				for(MidResult act : actions){
+					act.action();
 				}
 			}
-		}	
+		}
 	}
 
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
index 678d2f2..cf4d386 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
@@ -64,11 +64,11 @@
                 this.task = new UpgradeTask();
                 this.task.initOption(this.failTryTimes, this.ugMaxRtuSameTime);
                 this.task.setTask(vo);
-                log.error("==================================================") ;
-                log.error("=                                                =") ;
-                log.error("=褰撳墠璁剧疆浜嗗崌绾т换鍔★紝鍏朵腑RTU鏈�" + vo.rtuAddrList.size() + "涓�                    =") ;
-                log.error("=                                                =") ;
-                log.error("==================================================") ;
+                log.info("======================================================") ;
+                log.info("=                                                    =") ;
+                log.info("=璁剧疆浜嗗崌绾т换鍔★紝娑夊強RTU" + vo.rtuAddrList.size() + "鍙�                            =") ;
+                log.info("=                                                    =") ;
+                log.info("======================================================") ;
             }catch (Exception e){
                 ex = e ;
             }finally {
@@ -191,13 +191,13 @@
                 int temp = this.task.countNoOneRtuUpgradeInDuration() ;
                 if(temp == -1){
                     //褰撳墠娌℃湁RTU杩涜杩囧崌绾э紝鑰屼笖瓒呮椂浜嗭紝璁や负浠诲姟宸茬粡瀹屾垚
-                    log.error("==================================================") ;
-                    log.error("=                                                =") ;
-                    log.error("=褰撳墠娌℃湁RTU杩涜杩囧崌绾э紝鑰屼笖瓒呮椂浜嗭紝璁や负浠诲姟宸茬粡瀹屾垚      =") ;
-                    log.error("=                                                =") ;
-                    log.error("==================================================") ;
                     this.task.taskIsOver = true ;
                     this.stop();
+                    log.info("===========================================================") ;
+                    log.info("=                                                         =") ;
+                    log.info("=鏃燫TU鍗囩骇瓒呮椂锛屽洜鏃犱竴鍙癛TU杩涜鍗囩骇锛屽苟涓旂瓑寰呰秴鏃讹紝寮哄埗璁剧疆鍗囩骇瀹屾垚  =") ;
+                    log.info("=                                                         =") ;
+                    log.info("===========================================================") ;
                 }else if(temp == 1){
                     //褰撳墠鏈塕TU杩涜杩囧崌绾�
                     //宸ヤ綔2锛氱粺璁″綋鍓嶆鍦ㄥ崌绾х殑RTU鏁伴噺锛屼负鍚屾椂鍗囩骇鏁伴噺闄愬埗鍋氬噯澶�
@@ -207,28 +207,28 @@
                     int tmp = this.task.countOffRtuAndSetIfOver() ;
                     if(tmp >= 1){
                         //瓒呮椂锛屽己鍒惰缃竴浜汻TU鍗囩骇澶辫触骞朵笖鍗囩骇瀹屾垚锛�
-                        log.error("==================================================") ;
-                        log.error("=                                                =") ;
-                        log.error("=瓒呮椂锛屽己鍒惰缃�" + tmp + "涓猂TU鍗囩骇澶辫触骞朵笖鍗囩骇瀹屾垚     =") ;
-                        log.error("=                                                =") ;
-                        log.error("==================================================") ;
+                        log.info("======================================================") ;
+                        log.info("=                                                    =") ;
+                        log.info("=鍥犵绾胯秴鏃讹紝寮哄埗璁剧疆" + tmp + "鍙癛TU鍗囩骇澶辫触骞朵笖鍗囩骇瀹屾垚            =") ;
+                        log.info("=                                                    =") ;
+                        log.info("======================================================") ;
                     }else if(tmp == 0){
-                        log.error("==================================================") ;
-                        log.error("=                                                =") ;
-                        log.error("=瓒呮椂锛屽己鍒惰缃�0涓猂TU鍗囩骇澶辫触骞朵笖鍗囩骇瀹屾垚               =") ;
-                        log.error("=                                                =") ;
-                        log.error("==================================================") ;
+                        log.info("======================================================") ;
+                        log.info("=                                                    =") ;
+                        log.info("=绂荤嚎瓒呮椂锛屼絾鏃犱竴鍙癛TU鍥犵绾胯�岃璁剧疆鎴愬崌绾уけ璐ュ苟涓斿崌绾у畬鎴�     =") ;
+                        log.info("=                                                    =") ;
+                        log.info("======================================================") ;
                     }else{//tmp = -1
                         //鏃犱换鍔¢�昏緫
                     }
                     //宸ヤ綔4锛氱粺璁℃槸鍚﹀叏閮ㄥ崌绾у畬鎴�
                     this.task.taskIsOver = this.task.countIsAllOver() ;
                     if(this.task.taskIsOver){
-                        log.error("==================================================") ;
-                        log.error("=                                                =") ;
-                        log.error("=鍗囩骇鍏ㄩ儴缁撴潫锛岃缃崌绾т换鍔″畬鎴�                       =") ;
-                        log.error("=                                                =") ;
-                        log.error("==================================================") ;
+                        log.info("==================================================") ;
+                        log.info("=                                                =") ;
+                        log.info("= 鍗囩骇鍏ㄩ儴缁撴潫锛岃缃崌绾т换鍔″畬鎴愶紝娑夊強RTU" + this.task.taskVo.rtuAddrList.size() + "鍙�          =") ;
+                        log.info("=                                                =") ;
+                        log.info("==================================================") ;
                     }
                 }else if(temp == 0){
                     //褰撳墠娌℃湁涓�涓猂TU杩涜杩囧崌绾э紝涔熸病鏈夎秴鏃讹紝涓嶄綔涓�
diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml"
index 27724cf..63e7bc1 100644
--- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml"
+++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml"
@@ -63,10 +63,10 @@
 	notifyStateInterval: 鍗囩骇鐘舵�侀�氱煡闂撮殧锛堢锛�
 	-->
 	<upgrade enable="true"
-			 noOneRtuUpgradeMaxDuration="600"
-			 failTryTimes="1"
-			 ugMaxRtuAtOnce="1000"
-			 rtuOffLineWaitDuration="1200"
+			 noOneRtuUpgradeMaxDuration="1200"
+			 failTryTimes="2"
+			 ugMaxRtuAtOnce="5000"
+			 rtuOffLineWaitDuration="1800"
 			 notifyStateInterval="2"
 	/>
 
diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml"
index 2ba0296..79b9715 100644
--- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml"
+++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml"
@@ -63,10 +63,10 @@
 	notifyStateInterval: 鍗囩骇鐘舵�侀�氱煡闂撮殧锛堢锛�
 	-->
 	<upgrade enable="true"
-			 noOneRtuUpgradeMaxDuration="600"
-			 failTryTimes="1"
-			 ugMaxRtuAtOnce="1000"
-			 rtuOffLineWaitDuration="1200"
+			 noOneRtuUpgradeMaxDuration="1200"
+			 failTryTimes="2"
+			 ugMaxRtuAtOnce="5000"
+			 rtuOffLineWaitDuration="1800"
 			 notifyStateInterval="2"
 	/>
 
diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml"
index eabdf5c..263c8f3 100644
--- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml"
+++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml"
@@ -63,10 +63,10 @@
 	notifyStateInterval: 鍗囩骇鐘舵�侀�氱煡闂撮殧锛堢锛�
 	-->
 	<upgrade enable="true"
-			 noOneRtuUpgradeMaxDuration="600"
-			 failTryTimes="1"
-			 ugMaxRtuAtOnce="1000"
-			 rtuOffLineWaitDuration="1200"
+			 noOneRtuUpgradeMaxDuration="1200"
+			 failTryTimes="2"
+			 ugMaxRtuAtOnce="5000"
+			 rtuOffLineWaitDuration="1800"
 			 notifyStateInterval="2"
 	/>
 
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
index 114cafe..263c8f3 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
@@ -64,8 +64,8 @@
 	-->
 	<upgrade enable="true"
 			 noOneRtuUpgradeMaxDuration="1200"
-			 failTryTimes="1"
-			 ugMaxRtuAtOnce="1000"
+			 failTryTimes="2"
+			 ugMaxRtuAtOnce="5000"
 			 rtuOffLineWaitDuration="1800"
 			 notifyStateInterval="2"
 	/>
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/PipIrrMwSimulateRtuApplication.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/PipIrrMwSimulateRtuApplication.java
index 720cfa1..3005508 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/PipIrrMwSimulateRtuApplication.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/PipIrrMwSimulateRtuApplication.java
@@ -35,30 +35,71 @@
 
     public static void main(String[] args) {
         if(args != null && args.length > 0){
-            if(args.length == 3){
-                if(args[0] instanceof String){
-                    if(args[0] != null && !args[0].trim().equals("")){
-                        String rtuAddr = (String)args[0] ;//鏈ā鎷熷櫒妯℃嫙RTU鍦板潃
-                        ServerProperties.argRtuAddr = rtuAddr ;
-                    }
-                    if(args[1] != null && !args[1].trim().equals("")){
-                        Integer oneDie = Integer.parseInt(args[1]) ;//涓�鍖呮锛�1鏄紝0鍚�
-                        ServerProperties.argOneDie = oneDie == 1?true:false ;
-                    }
-                    if(args[2] != null && !args[2].trim().equals("")){
-                        Integer multiDie = Integer.parseInt(args[2]) ;//澶氬寘姝伙細1鏄紝0鍚�
-                        ServerProperties.argMultiDie = multiDie == 1?true:false ;
-                    }
-                    if(ServerProperties.argOneDie && ServerProperties.argMultiDie){
-                        ServerProperties.argOneDie = false ;
-                    }
-                }
+            if(args.length == 1){
+                getArg0(args) ;
+            }else if(args.length == 2){
+                getArg0(args) ;
+                getArg1(args) ;
+            }else if(args.length == 3){
+                getArg0(args) ;
+                getArg1(args) ;
+                getArg2(args) ;
+            }else if(args.length == 4){
+                getArg0(args) ;
+                getArg1(args) ;
+                getArg2(args) ;
+                getArg3(args) ;
+            }else if(args.length == 5){
+                getArg0(args) ;
+                getArg1(args) ;
+                getArg2(args) ;
+                getArg3(args) ;
+                getArg4(args) ;
+            }
+
+            if(ServerProperties.argOneDie && ServerProperties.argMultiDie){
+                ServerProperties.argOneDie = false ;
             }
         }
         new SpringApplicationBuilder(PipIrrMwSimulateRtuApplication.class)
                 .web(WebApplicationType.NONE)//涓嶅惎鍔╳eb鏈嶅姟
                 .run(args);
     }
+    private static void getArg0(String[] args){
+        if(args[0] instanceof String){
+            if(args[0] != null && !args[0].trim().equals("")){
+                String rtuAddr = (String)args[0] ;//鏈ā鎷熷櫒妯℃嫙RTU鍦板潃
+                ServerProperties.argRtuAddr = rtuAddr ;
+            }
+        }
+    }
+    private static void getArg1(String[] args){
+        if(args[1] != null && !args[1].trim().equals("")){
+            Integer oneDie = Integer.parseInt(args[1]) ;//涓�鍖呮锛�1鏄紝0鍚�
+            ServerProperties.argOneDie = oneDie == 1?true:false ;
+        }
+    }
+    private static void getArg2(String[] args){
+        if(args[2] != null && !args[2].trim().equals("")){
+            Integer multiDie = Integer.parseInt(args[2]) ;//澶氬寘姝伙細1鏄紝0鍚�
+            ServerProperties.argMultiDie = multiDie == 1?true:false ;
+        }
+    }
+    private static void getArg3(String[] args){
+        if(args[3] instanceof String){
+            if(args[3] != null && !args[3].trim().equals("")){
+                String serverIp = (String)args[3] ;//鏈嶅姟绔疘P
+                ServerProperties.serverIp = serverIp ;
+            }
+        }
+    }
+    private static void getArg4(String[] args){
+        if(args[4] != null && !args[4].trim().equals("")){
+            Integer serverPort = Integer.parseInt(args[4]) ;//鏈嶅姟绔痯ort
+            ServerProperties.serverPort = serverPort ;
+        }
+    }
+
 
     /**
      * Spring瀹瑰櫒鍚姩瀹屾垚鍚庯紝鎵ц涓嬮潰鏂规硶
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/Server.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/Server.java
index b651a13..789a053 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/Server.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/Server.java
@@ -54,6 +54,8 @@
             System.out.println("鍚姩涓�鍖呮锛�" + (ServerProperties.argOneDie==null?"鍚�":(ServerProperties.argOneDie?"鏄�":"鍚�"))) ;
             System.out.println("鍚姩澶氬寘姝伙細" + (ServerProperties.argMultiDie==null?"鍚�":(ServerProperties.argMultiDie?"鏄�":"鍚�"))) ;
 
+
+
             String svName ;
             try{
                 svName = this.conf.getSetAttrTxt(this.doc, "config.server", "name", null, false, null) ;
@@ -103,8 +105,16 @@
             // ///////////////
             // TCP 妯″潡
             TcpClUnitConfigVo tcpVo = new TcpClUnitConfigVo();
-            tcpVo.mwServerIp = conf.getSetAttrTxt(doc, "config.tcpCl", "mwServerIp", null, false, null);
-            tcpVo.mwServerPort = conf.getSetAttrPlusInt(doc, "config.tcpCl", "mwServerPort", null, 100, 65535, null);
+            if(ServerProperties.serverIp != null && !ServerProperties.serverIp.trim().equals("")){
+                tcpVo.mwServerIp = ServerProperties.serverIp ;
+            }else{
+                tcpVo.mwServerIp = conf.getSetAttrTxt(doc, "config.tcpCl", "mwServerIp", null, false, null);
+            }
+            if(ServerProperties.serverPort != null){
+                tcpVo.mwServerPort = ServerProperties.serverPort ;
+            }else{
+                tcpVo.mwServerPort = conf.getSetAttrPlusInt(doc, "config.tcpCl", "mwServerPort", null, 100, 65535, null);
+            }
             tcpVo.connectTimeout = conf.getSetAttrPlusInt(doc, "config.tcpCl", "connectTimeout", null, 1000, 10000, null);
             this.mwServerUrl = tcpVo.mwServerIp + ":" + tcpVo.mwServerPort ;
             AdapterImp_TcpClUnit tcpAdap = new AdapterImp_TcpClUnit();
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/ServerProperties.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/ServerProperties.java
index e69fead..edb849f 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/ServerProperties.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/ServerProperties.java
@@ -15,4 +15,7 @@
     public static Boolean argOneDie = false ;
     public static Boolean argMultiDie = false ;
 
+    public static String serverIp ;
+    public static Integer serverPort ;
+
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/resources/log4j2.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/resources/log4j2.xml
index 95237df..022771c 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/resources/log4j2.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/resources/log4j2.xml
@@ -2,7 +2,7 @@
 <Configuration status="OFF">
   <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
-      <PatternLayout charset="GBK" pattern="%d %-5p [%t] (%F:%L) - %m%n%throwable"/>
+      <PatternLayout charset="UTF-8" pattern="%d %-5p [%t] (%F:%L) - %m%n%throwable"/>
     </Console>
     <RollingFile name="File" fileName="logs/simRtu.log" filePattern="logs/simRtu-%d{yyyyMMdd}-%i.log">
       <PatternLayout charset="UTF-8" pattern="%d %-5p [%t] (%class.%method:%L) - %m%n%throwable"/>
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.xml
index c75e1cd..7fea6d9 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.xml
@@ -2,7 +2,7 @@
 <Configuration status="OFF">
   <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
-      <PatternLayout charset="GBK" pattern="%d %-5p [%t] (%F:%L) - %m%n%throwable"/>
+      <PatternLayout charset="UTF-8" pattern="%d %-5p [%t] (%F:%L) - %m%n%throwable"/>
     </Console>
     <!-- 
     	fileName="${sys:user.home}/logs/aepTest.log" filePattern="${sys:user.home}/logs/aepTest-%d{yyyy-MM}-%i.log.gz"
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/log4j2.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/log4j2.xml
index b83fd9a..b226203 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/log4j2.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/log4j2.xml
@@ -2,7 +2,7 @@
 <Configuration status="OFF">
   <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
-      <PatternLayout charset="GBK" pattern="%d %-5p [%t] (%F:%L) - %m%n%throwable"/>
+      <PatternLayout charset="UTF-8" pattern="%d %-5p [%t] (%F:%L) - %m%n%throwable"/>
     </Console>
     <!-- 
     	fileName="${sys:user.home}/logs/aepTest.log" filePattern="${sys:user.home}/logs/aepTest-%d{yyyy-MM}-%i.log.gz"
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/log4j2.xml b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/log4j2.xml
index 8c46b0b..bc6dec6 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/log4j2.xml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/log4j2.xml
@@ -2,7 +2,7 @@
 <Configuration status="OFF">
   <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
-      <PatternLayout charset="GBK" pattern="%d %-5p [%t] (%F:%L) - %m%n%throwable"/>
+      <PatternLayout charset="UTF-8" pattern="%d %-5p [%t] (%F:%L) - %m%n%throwable"/>
     </Console>
     <!-- 
     	fileName="${sys:user.home}/logs/aepTest.log" filePattern="${sys:user.home}/logs/aepTest-%d{yyyy-MM}-%i.log.gz"
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
index 1711a73..a746c19 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
@@ -1,12 +1,15 @@
 package com.dy.pipIrrApp.workOrder;
 
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrApp.workOrder.dto.DtoDeleteProResult;
 import com.dy.pipIrrApp.workOrder.dto.DtoDeleteWorkOrder;
+import com.dy.pipIrrApp.workOrder.mqtt.MqttClientConnectorPool;
+import com.dy.pipIrrApp.workOrder.mqtt.MqttMsgSender;
 import com.dy.pipIrrApp.workOrder.qo.QoWorkOrder;
 import com.dy.pipIrrGlobal.pojoOp.OpeApproveResult;
 import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult;
@@ -16,6 +19,8 @@
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
@@ -37,6 +42,21 @@
 @RequiredArgsConstructor
 public class WorkOrderCtrl {
     private final WorkOrderSv workOrderSv;
+
+    @Value("${mqtt.broker}")
+    private String broker;
+
+    @Value("${mqtt.username}")
+    private String username;
+
+    @Value("${mqtt.password}")
+    private String password;
+
+    @Value("${mqtt.topic}")
+    private String topic;
+
+    @Value("${mqtt.qos}")
+    private Integer qos;
 
     /**
      * 鍒涘缓宸ュ崟
@@ -66,14 +86,39 @@
             return BaseResponseUtils.buildErrorMsg("鑾峰彇宸ュ崟澶辫触");
         }
 
-        //if(!sendWorkOrder(voWorkOrder, workOrderId)) {
-        //    return BaseResponseUtils.buildErrorMsg("宸ュ崟鎺ㄩ�佸け璐�");
-        //}
+        if(!sendWorkOrder(voWorkOrder, workOrderId)) {
+            return BaseResponseUtils.buildErrorMsg("宸ュ崟鎺ㄩ�佸け璐�");
+        }
 
         return BaseResponseUtils.buildSuccess();
     }
 
     /**
+     * 閫氳繃mosquitto鍙戦�佸贰妫�鍛業D鍙婂伐鍗旾D
+     * @param voWorkOrder 宸ュ崟瀵硅薄
+     * @param workOrderId 宸ュ崟ID
+     * @return
+     */
+    public Boolean sendWorkOrder(VoWorkOrder voWorkOrder, Long workOrderId) {
+        //String message = JSON.toJSONString(voWorkOrder);
+
+        JSONObject message_job = new JSONObject();
+        message_job.put("inspectorId", voWorkOrder.getInspectorId().toString());
+        message_job.put("workOrderId", workOrderId.toString());
+        String message = JSON.toJSONString(message_job);
+
+        MqttClient mqttClient = MqttClientConnectorPool.connectMQTT(broker, username, password);
+        MqttMsgSender sender = new MqttMsgSender();
+        if (null != mqttClient){
+            sender.sendMessage(mqttClient, topic, message, qos);
+        } else {
+            log.info("MqttClient涓虹┖锛屾棤娉曞彂閫侊紒");
+            return false;
+        }
+        return true;
+    }
+
+    /**
      * 閫昏緫鍒犻櫎鎸囧畾娲惧崟浜虹殑鎸囧畾鏈垹闄ゅ伐鍗�
      * 鍏堝垽鏂寚瀹氭淳鍗曚汉銆佹湭鍒犻櫎鐨勬寚瀹氬伐鍗曟槸鍚﹀瓨鍦�
      * @param deleteWorkOrder 鍒犻櫎宸ュ崟浼犺緭绫�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/MqttClientConnectorPool.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/MqttClientConnectorPool.java
index 56545be..91a47e2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/MqttClientConnectorPool.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/MqttClientConnectorPool.java
@@ -21,17 +21,13 @@
      * 杩炴帴MQTT瀹㈡埛绔�
      * @return 鑾峰彇MQTT杩為槦瀵硅薄
      */
-    public static MqttClient connectMQTT() {
+    public static MqttClient connectMQTT(String broker, String username, String password) {
         if (mqttClient != null){
             log.info("宸插瓨鍦紒");
             return mqttClient;
         }
 
         try {
-            // broker鍙婅繛鎺ヤ俊鎭�
-            String broker = "tcp://127.0.0.1:1883";
-            String username = "mqtt_u";
-            String password = "yjy";
             String clientId = System.currentTimeMillis() + "";
 
             //鍒涘缓MQTT瀹㈡埛绔紙鎸囧畾broker銆佸鎴风id銆佹秷鎭寔涔呯瓥鐣ワ級
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/TestController.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/TestController.java
index 0fb914a..0a6a028 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/TestController.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/mqtt/TestController.java
@@ -2,6 +2,7 @@
 
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -18,17 +19,30 @@
 @RestController
 @RequestMapping(path = "mqtt")
 public class TestController {
+
+    @Value("${mqtt.broker}")
+    private String broker;
+
+    @Value("${mqtt.username}")
+    private String username;
+
+    @Value("${mqtt.password}")
+    private String password;
+
+    @Value("${mqtt.topic}")
+    private String topic;
+
+    @Value("${mqtt.qos}")
+    private Integer qos;
+
     @GetMapping("/mqtt/{msg}")
     public String testSendMqttMsg(@PathVariable("msg") String msg){
         log.info("娑堟伅鍐呭锛歿}.", msg);
 
-        MqttClient mqttClient = MqttClientConnectorPool.connectMQTT();
+        MqttClient mqttClient = MqttClientConnectorPool.connectMQTT(broker, username, password);
         MqttMsgSender sender = new MqttMsgSender();
 
         String content = "{" + " \"message\": \"" + msg + "\"," + " \"val\": 100.00" + "}";
-
-        String topic = "workOrder";
-        int qos = 1;
 
         if (null != mqttClient){
             sender.sendMessage(mqttClient, topic, content, qos);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java
index 984fa56..138e9f5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java
@@ -3,8 +3,6 @@
 import com.dy.common.webUtil.QueryConditionVo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.mapstruct.Mapper;
-import org.mapstruct.ReportingPolicy;
 
 /**
  * @author ZhuBaoMin
@@ -22,11 +20,21 @@
     private String dispatcher;
 
     /**
+     * 娲惧崟浜篒D
+     */
+    private Long dispatcherId;
+
+    /**
      * 宸℃鍛樺鍚�
      */
     private String inspector;
 
     /**
+     * 宸℃鍛業D
+     */
+    private Long inspectorId;
+
+    /**
      * 鏌ヨ寮�濮嬫椂闂�
      */
     private String timeStart;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml
index 806e330..de2c315 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml
@@ -17,7 +17,7 @@
 #MQTT
 mqtt:
     broker: tcp://127.0.0.1:1883
-    username: mqtt_u
+    username: mqtt_yjy
     password: yjy
     topic: workOrder
     qos: 2

--
Gitblit v1.8.0