From 7f3cae29516a35e85e4b6fc02ec655882d4c2538 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期四, 08 五月 2025 11:55:24 +0800
Subject: [PATCH] 1、测控一体阀协议功能码50补充实现; 2、RTU模拟器模拟实现50、91、92功能码上报; 3、remote模块:完善透传命令实现,完善接收通信中间件返回命令结果实现。

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd50.java     |   55 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java  |   19 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_50_Up.java              |   69 +++++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java |    8 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/upVos/DataCd50Vo.java            |   39 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/upVos/DataCd50Vo.java            |   39 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_50_Down.java            |   81 ++++++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd66.java     |   60 +++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_50_Down.java            |   88 +++++++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd91.java     |   49 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java      |  122 +++++++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_50_Up.java              |   66 +++++
 12 files changed, 676 insertions(+), 19 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_50_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_50_Down.java
new file mode 100644
index 0000000..2fa803e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_50_Down.java
@@ -0,0 +1,88 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.CodeV1;
+import com.dy.common.mw.protocol.p206V1.CommonV1;
+import com.dy.common.mw.protocol.p206V1.ParseParamsForDownV1;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2025/5/8 10:36
+ * @LastEditTime 2025/5/8 10:36
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1.cd_50
+})
+public class Cd_50_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1 para = (ParseParamsForDownV1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        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 = CodeV1.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1 para) throws Exception {
+        CommonV1 commonV_1 = new CommonV1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        bytes = bsHead ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_50_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_50_Up.java
new file mode 100644
index 0000000..788d395
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_50_Up.java
@@ -0,0 +1,66 @@
+package com.dy.common.mw.protocol.p206V1.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1.*;
+import com.dy.common.mw.protocol.p206V1.upVos.DataCd50Vo;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author liurunyu
+ * @Date 2025/5/8 10:37
+ * @LastEditTime 2025/5/8 10:37
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1.cd_50
+})
+public class Cd_50_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_50_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1 para = (ParseParamsForUpV1)params ;
+        int bsLen = new CommonV1().parseDataLen4P206(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV1.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 = false ;//鍛戒护搴旂瓟
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse, para.data.subData==null?null:((DataV1)(para.data.subData)).subData);
+        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 {
+        DataV1 dV1 = (DataV1)data.getSubData() ;
+        DataCd50Vo cdData = new DataCd50Vo() ;
+        dV1.subData = cdData ;
+        cdData.rtuAddr = new CommonV1().parseRtuAddr(bs, ProtocolConstantV206V1.dataIndex, true) ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/upVos/DataCd50Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/upVos/DataCd50Vo.java
new file mode 100644
index 0000000..64fdb50
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/upVos/DataCd50Vo.java
@@ -0,0 +1,39 @@
+package com.dy.common.mw.protocol.p206V1.upVos;
+
+import com.dy.common.mw.protocol.UpComResVo;
+import lombok.Data;
+
+/**
+ * @Author liurunyu
+ * @Date 2025/5/8 10:37
+ * @LastEditTime 2025/5/8 10:37
+ * @Description
+ */
+@Data
+public class DataCd50Vo implements UpComResVo {
+    public String rtuAddr ;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   鏌ヨRTU鍦板潃搴旂瓟:\n");
+        sb.append("      鏂板湴鍧�锛�");
+        sb.append(rtuAddr);
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+
+    public String comLog(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("鏌ヨRTU鍦板潃鍛戒护鍥炲:\n");
+        sb.append("   鍦板潃锛�");
+        sb.append(rtuAddr);
+        sb.append("\n");
+        return sb.toString() ;
+    }
+
+    @Override
+    public String comLog(String code) {
+        return null;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_50_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_50_Down.java
new file mode 100644
index 0000000..3764b22
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_50_Down.java
@@ -0,0 +1,81 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.CodeV2;
+import com.dy.common.mw.protocol.p206V2.CommonV2;
+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.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2025/5/8 10:36
+ * @LastEditTime 2025/5/8 10:36
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV2.cd_50
+})
+public class Cd_50_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV2 para = (ParseParamsForDownV2) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        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 = CodeV2.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV2 para) throws Exception {
+        CommonV2 commonV_1 = new CommonV2() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V2.lenHead2Code] ;
+        byte index = GlCreate.createHead(para.protocolVersion, bsHead);
+
+        index++ ;
+        bsHead[index] = commonV_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr4P206(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        bytes = bsHead ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_50_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_50_Up.java
new file mode 100644
index 0000000..3be2069
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_50_Up.java
@@ -0,0 +1,69 @@
+package com.dy.common.mw.protocol.p206V2.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V2.*;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd10Vo;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd50Vo;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd51Vo;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlParse;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author liurunyu
+ * @Date 2025/5/8 10:37
+ * @LastEditTime 2025/5/8 10:37
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV2.cd_50
+})
+public class Cd_50_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_50_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV2 para = (ParseParamsForUpV2)params ;
+        int bsLen = new CommonV2().parseDataLen4P206(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV2.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 = false ;//鍛戒护搴旂瓟
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse, para.data.subData==null?null:((DataV2)(para.data.subData)).subData);
+        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 {
+        DataV2 dV2 = (DataV2)data.getSubData() ;
+        DataCd50Vo cdData = new DataCd50Vo() ;
+        dV2.subData = cdData ;
+        cdData.rtuAddr = new CommonV2().parseRtuAddr(bs, ProtocolConstantV206V2.dataIndex) ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/upVos/DataCd50Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/upVos/DataCd50Vo.java
new file mode 100644
index 0000000..273265b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/upVos/DataCd50Vo.java
@@ -0,0 +1,39 @@
+package com.dy.common.mw.protocol.p206V2.upVos;
+
+import com.dy.common.mw.protocol.UpComResVo;
+import lombok.Data;
+
+/**
+ * @Author liurunyu
+ * @Date 2025/5/8 10:37
+ * @LastEditTime 2025/5/8 10:37
+ * @Description
+ */
+@Data
+public class DataCd50Vo implements UpComResVo {
+    public String rtuAddr ;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   鏌ヨRTU鍦板潃搴旂瓟:\n");
+        sb.append("      鏂板湴鍧�锛�");
+        sb.append(rtuAddr);
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+
+    public String comLog(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("鏌ヨRTU鍦板潃鍛戒护鍥炲:\n");
+        sb.append("   鍦板潃锛�");
+        sb.append(rtuAddr);
+        sb.append("\n");
+        return sb.toString() ;
+    }
+
+    @Override
+    public String comLog(String code) {
+        return null;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java
index cebd5e2..7f64bf3 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java
@@ -31,7 +31,13 @@
     }
     private void dealP206V1(byte[] bs){
         String cdPre = ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.codeIndex, 1);
-        if(cdPre.equals("92")){
+        if(cdPre.equals("50")){
+            UpCd50.upData() ;
+        }else if(cdPre.equals("66")){
+            UpCd66.upData() ;
+        }else if(cdPre.equals("91")){
+            UpCd91.upData() ;
+        }else if(cdPre.equals("92")){
             UpCd92.upData() ;
         }
     }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd50.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd50.java
new file mode 100644
index 0000000..f381f6c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd50.java
@@ -0,0 +1,55 @@
+package com.dy.simRtu.tcpClient.upData;
+
+import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.simRtu.ServerProperties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/8 11:14
+ * @Description
+ */
+public class UpCd50 extends UpData {
+
+    private static final Logger log = LogManager.getLogger(UpCd66.class);
+
+    public static void upData() {
+        try {
+            if (UpData.session != null && UpData.session.isConnected()) {
+                byte[] bs = createData(ServerProperties.rtuAddr);
+                UpData.upSend(bs);
+            } else {
+                log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�");
+            }
+        } catch (Exception e) {
+            log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e);
+        }
+    }
+
+
+    /**
+     * 鏋勯�犳暟鎹�
+     *
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    private static byte[] createData(String rtuAddr) throws Exception {
+        byte[] bytes = creatHead(rtuAddr, "50",(byte)0xB0);
+
+        byte[] bs = new byte[6];
+        GlCreate.createRtuAddr4P206(rtuAddr, bs, 0);
+
+        bytes = ByteUtil.bytesMerge(bytes, bs);
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail);
+
+        return bytes;
+    }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd66.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd66.java
new file mode 100644
index 0000000..b606176
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd66.java
@@ -0,0 +1,60 @@
+package com.dy.simRtu.tcpClient.upData;
+
+import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.simRtu.ServerProperties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/8 8:29
+ * @Description
+ */
+public class UpCd66 extends UpData {
+
+    private static final Logger log = LogManager.getLogger(UpCd66.class);
+
+    public static void upData() {
+        try {
+            if (UpData.session != null && UpData.session.isConnected()) {
+                byte[] bs = createData(ServerProperties.rtuAddr);
+                UpData.upSend(bs);
+            } else {
+                log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�");
+            }
+        } catch (Exception e) {
+            log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e);
+        }
+    }
+
+
+    /**
+     * 鏋勯�犳暟鎹�
+     *
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    private static byte[] createData(String rtuAddr) throws Exception {
+        byte[] bytes = creatHead(rtuAddr, "66",(byte)0xB0);
+
+        byte[] bs = new byte[6];
+        bs[0] = (byte) 100;
+        bs[1] = (byte) 101;
+        bs[2] = (byte) 102;
+        bs[3] = (byte) 103;
+
+        ByteUtilUnsigned.short2Bytes_BE(bs,1234, 4);
+
+        bytes = ByteUtil.bytesMerge(bytes, bs);
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail);
+
+        return bytes;
+    }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd91.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd91.java
new file mode 100644
index 0000000..ab8164a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/upData/UpCd91.java
@@ -0,0 +1,49 @@
+package com.dy.simRtu.tcpClient.upData;
+
+import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.simRtu.ServerProperties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/8 10:58
+ * @Description
+ */
+public class UpCd91 extends UpData {
+
+    private static final Logger log = LogManager.getLogger(UpCd91.class);
+
+    public static void upData() {
+        try {
+            if (UpData.session != null && UpData.session.isConnected()) {
+                byte[] bs = createData(ServerProperties.rtuAddr);
+                UpData.upSend(bs);
+            } else {
+                log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�");
+            }
+        } catch (Exception e) {
+            log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e);
+        }
+    }
+
+
+    /**
+     * 鏋勯�犳暟鎹�
+     *
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    private static byte[] createData(String rtuAddr) throws Exception {
+        byte[] bytes = creatHead(rtuAddr, "91",(byte)0xB0);
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail4P206(bytes);//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail);
+
+        return bytes;
+    }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
index 9f1bb1c..0fa14ab 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
@@ -27,20 +27,19 @@
 public class CommandResultCtrl extends ComSupport {
     @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE)
     public void receive(@RequestBody Data data) {
-        JSONObject job_data = (JSONObject) JSON.toJSON(data);
-        //String job_dataS = job_data.toJSONString();
-        JSONObject job_subData = job_data.getJSONObject("subData").getJSONObject("subData");
+        JSONObject protocolData = data == null ? null : (JSONObject)data.subData ; //鍗忚鏁版嵁
+        JSONObject codeData = protocolData == null ? null : (protocolData.getJSONObject("subData")) ; //鍗忚鍔熻兘鐮佹暟鎹�
 
         JSONObject job_response = new JSONObject();
-        job_response.put("data", job_subData);
-        job_response.put("commandCode", job_data.getString("code"));
-        job_response.put("commandId", job_data.getString("commandId"));
+        job_response.put("data", codeData==null?protocolData:codeData);
+        job_response.put("commandCode", data.code);
+        job_response.put("commandId", data.commandId);
 
-        CompletableFuture<JSONObject> feature = (CompletableFuture<JSONObject>) ComResultWait.get(job_data.getLong("commandId"));
+        CompletableFuture<JSONObject> feature = (CompletableFuture<JSONObject>) ComResultWait.get(Long.parseLong(data.commandId));
         if(feature != null) {
             feature.complete(job_response);
-        }//else{
-        //   feature.complete(new JSONObject());
-        //}
+        }else{
+            //瓒呮椂锛宖eature琚竻闄や簡
+        }
     }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java
index 2c87d06..96d3d20 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java
@@ -33,13 +33,14 @@
  * @Date: 2025/4/30 16:08
  * @Description
  */
-
 @Slf4j
 @Tag(name = "杩滅▼閫忎紶鍛戒护", description = "杩滅▼閫忎紶鍛戒护")
 @RestController
 @RequestMapping(path = "comTrans")
 @RequiredArgsConstructor
 public class ComTransCtrl {
+
+    private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛";
 
     @Autowired
     private Environment env ;
@@ -112,14 +113,9 @@
                 try{
                     //绛夊緟閫氫俊涓棿浠堕�氱煡鎺у埗鍣ㄦ墽琛屽懡浠や笂琛屾暟鎹紙鍛戒护缁撴灉锛�
                     JSONObject resultData = feature.get(waitMwRtnResultTimeout, TimeUnit.SECONDS);
-                    Long commandId = resultData.getLong("commandId");
-                    if (commandId.equals(comId)) {
-                        return BaseResponseUtils.buildSuccess(resultData);
-                    } else {
-                        return BaseResponseUtils.buildSuccess("鎺у埗鍣ㄦ墽琛屽懡浠ゆ垚鍔�");
-                    }
+                    return BaseResponseUtils.buildSuccess(this.createRtnMsg(dto.comCode, resultData));
                 }catch (Exception e){
-                    return BaseResponseUtils.buildFail("绛夊緟閫氫俊涓棿浠堕�氱煡鍛戒护缁撴灉瓒呮椂鎴栧紓甯�");
+                    return BaseResponseUtils.buildFail("绛夊緟閫氫俊涓棿浠堕�氱煡鍛戒护缁撴灉瓒呮椂");
                 }
             }
         }catch (Exception e){
@@ -153,4 +149,114 @@
         return null ;
     }
 
+    private String createRtnMsg(String code, JSONObject resultData){
+        String msg;
+        if(resultData != null){
+            JSONObject codeData = resultData.getJSONObject("data") ;
+            switch (code){
+                case "3C": msg = createCd3CRtnMsg(codeData); break;
+                case "10": msg = createCd10RtnMsg(codeData); break;
+                case "21": msg = createCd21RtnMsg(codeData); break;
+                case "37": msg = createCd37RtnMsg(codeData); break;
+                case "50": msg = createCd50RtnMsg(codeData); break;
+                case "65": msg = createCd65RtnMsg(codeData); break;
+                case "66": msg = createCd66RtnMsg(codeData); break;
+                case "67": msg = createCd67RtnMsg(codeData); break;
+                case "91": msg = createCd91RtnMsg(codeData); break;
+                case "92": msg = createCd92RtnMsg(codeData); break;
+                case "93": msg = createCd93RtnMsg(codeData); break;
+                default: msg = RtuSuccessMsg; break;
+            }
+        }else{
+            msg = RtuSuccessMsg ;
+        }
+        return msg;
+    }
+    private String createCd3CRtnMsg(JSONObject codeData){
+        if(codeData == null){
+           return RtuSuccessMsg ;
+        }else{
+            Integer minute = codeData.getInteger("minute");
+            return "璁剧疆鎴愬姛锛岃嚜鎶ュ懆鏈燂細" + minute + "鍒嗛挓" ;
+        }
+    }
+    private String createCd10RtnMsg(JSONObject codeData){
+        if(codeData == null){
+            return RtuSuccessMsg ;
+        }else {
+            String newRtuAddr = codeData.getString("newRtuAddr");
+            return "璁剧疆鎴愬姛锛屾帶鍒跺櫒鍦板潃锛�" + newRtuAddr;
+        }
+    }
+    private String createCd21RtnMsg(JSONObject codeData){
+        if(codeData == null){
+            return RtuSuccessMsg ;
+        }else {
+            String ip = codeData.getString("ip");
+            Integer port = codeData.getInteger("port");
+            return "璁剧疆鎴愬姛锛孖P鍦板潃锛�" + ip + "锛岀鍙e彿锛�" + port;
+        }
+    }
+    private String createCd37RtnMsg(JSONObject codeData){
+        if(codeData == null){
+            return RtuSuccessMsg ;
+        }else {
+            Integer second = codeData.getInteger("second");
+            return "璁剧疆鎴愬姛锛屾祦閲忛噰闆嗗懆鏈燂細" + second + "绉�";
+        }
+    }
+   private String createCd50RtnMsg(JSONObject codeData){
+       if(codeData == null){
+           return RtuSuccessMsg ;
+       }else {
+           String rtuAddr = codeData.getString("rtuAddr");
+           return "鏌ヨ鎴愬姛锛屾帶鍒跺櫒鍦板潃锛�" + rtuAddr;
+       }
+    }
+    private String createCd65RtnMsg(JSONObject codeData){
+        if(codeData == null){
+            return RtuSuccessMsg ;
+        }else {
+            Integer minute = codeData.getInteger("minute");
+            return "鏌ヨ鎴愬姛锛岃嚜鎶ュ懆鏈燂細" + minute + "鍒嗛挓";
+        }
+    }
+    private String createCd66RtnMsg(JSONObject codeData){
+        if(codeData == null){
+            return RtuSuccessMsg ;
+        }else {
+            String ip = codeData.getString("ip");
+            Integer port = codeData.getInteger("port");
+            return "鏌ヨ鎴愬姛锛孖P鍦板潃锛�" + ip + "锛岀鍙e彿锛�" + port;
+        }
+    }
+    private String createCd67RtnMsg(JSONObject codeData){
+        if(codeData == null){
+            return RtuSuccessMsg ;
+        }else {
+            Integer second = codeData.getInteger("second");
+            return "鏌ヨ鎴愬姛锛屾祦閲忛噰闆嗗懆鏈燂細" + second + "绉�";
+        }
+    }
+    private String createCd91RtnMsg(JSONObject codeData){
+        //姝ゅ懡浠ょ殑codeData鏄痭ull
+        return "鎺у埗鍣ㄦ竻绌哄巻鍙茶褰曟垚鍔�" ;
+    }
+    private String createCd92RtnMsg(JSONObject codeData){
+        if(codeData == null){
+            return RtuSuccessMsg ;
+        }else {
+            Boolean success = codeData.getBoolean("success");
+            return success ? "鎺у埗鍣ㄥ凡鎵ц閬ユ帶寮�闃�鍛戒护" : "鎺у埗鍣ㄦ嫆缁濇墽琛岄仴鎺у紑闃�鍛戒护";
+        }
+    }
+    private String createCd93RtnMsg(JSONObject codeData){
+        if(codeData == null){
+            return RtuSuccessMsg ;
+        }else {
+            Boolean success = codeData.getBoolean("success");
+            return success ? "鎺у埗鍣ㄥ凡鎵ц閬ユ帶鍏抽榾鍛戒护" : "鎺у埗鍣ㄦ嫆缁濇墽琛岄仴鎺у叧闃�鍛戒护";
+        }
+    }
+
 }

--
Gitblit v1.8.0