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