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