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