From db88628e7bb03f334fa65826bd655c27859a9973 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期日, 03 十一月 2024 16:52:04 +0800 Subject: [PATCH] 1、协议版本号增加到协议解析与命令构造中; 2、增加RTU状态记录功能,为RTU远程升级做准备。 --- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java | 45 +++++++++++++++++++++++++++++---------------- 1 files changed, 29 insertions(+), 16 deletions(-) diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java index dad7123..6981b18 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java @@ -58,23 +58,25 @@ } String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ; String protocolName = null ; + Short protocolVersion = null ; boolean isOnLine = false ; if(rtuAddr == null){ //璇存槑鍒氬缓绔嬬綉缁滆繛鎺ワ紝姝ゆ暟鎹簲璇ユ槸涓婄嚎鏁版嵁 isOnLine = true ; - String[] rtuAddrProtocolName = this.parseOnLine(session, upBuf) ; - if(rtuAddrProtocolName.length == 2){ + Object[] rtuAddrProtocolNameVersion = this.parseOnLine(session, upBuf) ; + if(rtuAddrProtocolNameVersion.length == 2){ //瑙f瀽涓婄嚎鏁版嵁鎴愬姛锛屽苟瑙f瀽鍑篟TU鍦板潃鍙婇�氫俊鍗忚鍚嶇О - rtuAddr = rtuAddrProtocolName[0] ; - protocolName = rtuAddrProtocolName[1] ; - + rtuAddr = (String)rtuAddrProtocolNameVersion[0] ; + protocolName = (String)rtuAddrProtocolNameVersion[1] ; + protocolVersion = (Short)rtuAddrProtocolNameVersion[2] ; + if(rtuAddr != null && protocolName != null){ //璁剧疆session鐨勫睘鎬D TcpUnit.getInstance().setIoSessionArrId(session, rtuAddr); //缂撳瓨session - TcpSessionCache.putNewTcpSession(rtuAddr, protocolName, session); + TcpSessionCache.putNewTcpSession(rtuAddr, protocolName, protocolVersion, session); - log.info("RTU(鍦板潃锛�" + rtuAddr + "锛屽崗璁細" + protocolName + ")涓婄嚎浜嗐��") ; + log.info("RTU(鍦板潃锛�" + rtuAddr + "锛屽崗璁細" + protocolName + "锛屽崗璁増鏈彿锛�" + protocolVersion + ")涓婄嚎浜嗐��") ; } } } @@ -95,7 +97,9 @@ } if(toDeal){ if(protocolName == null){ - protocolName = TcpSessionCache.getTcpProtocolName(rtuAddr) ; + Object[] objs = TcpSessionCache.getTcpProtocolNameVersion(rtuAddr) ; + protocolName = (String)objs[0] ; + protocolVersion = (Short)objs[1] ; } //璁剧疆鏀跺埌鏁版嵁鏃跺埢 @@ -103,7 +107,7 @@ if(protocolName != null){ //瀵逛笂琛屾暟鎹繘琛屽鐞� - this.dealUpData(session, rtuAddr, protocolName, isOnLine, upBuf, upHex) ; + this.dealUpData(session, rtuAddr, protocolName, protocolVersion, isOnLine, upBuf, upHex) ; } } } @@ -114,9 +118,10 @@ * @param session IO浼氳瘽 * @param upBuf 涓婅鏁版嵁 */ - private String[] parseOnLine(IoSession session, byte[] upBuf){ + private Object[] parseOnLine(IoSession session, byte[] upBuf){ String rtuAddr = null ; String protocolName = null ; + Short protocolVersion = null ; try { OnLine.OnLineResult rs = new OnLineHandle().parse(upBuf) ; if(rs == null @@ -133,6 +138,7 @@ log.error("涓ラ噸閿欒锛岃В鏋愪笂绾跨粨鏋滀腑鍗忚鍚嶇О涓虹┖ 锛�" ) ; }else{ protocolName = rs.protocolName ; + protocolVersion = rs.protocolVersion ; } }else if(rs.result == OnLine.OnLineAction_success_response){ if(rs.remoteData != null && rs.remoteData.length > 0){ @@ -144,7 +150,7 @@ } catch (Exception e) { log.error("涓ラ噸閿欒锛屽垎鏋愪笂绾挎暟鎹椂浜х敓寮傚父 锛乗n" + e.getMessage() , e) ; } - return new String[]{rtuAddr, protocolName} ; + return new Object[]{rtuAddr, protocolName, protocolVersion} ; } @@ -153,12 +159,19 @@ * @param session IO浼氳瘽 * @param rtuAddrAtHead 鎺у埗鍣ㄥ湴鍧�澶撮儴 * @param protocolName 鍗忚鍚嶇О + * @param protocolVersion 鍗忚鐗堟湰鍙� * @param isOnLine 鏄惁涓婄嚎鏁版嵁 * @param upBuf 涓婅鏁版嵁 * @param upHex 涓婅鏁版嵁 * @throws Exception 寮傚父 */ - private void dealUpData(IoSession session, String rtuAddrAtHead, String protocolName, boolean isOnLine, byte[] upBuf, String upHex) throws Exception{ + private void dealUpData(IoSession session, + String rtuAddrAtHead, + String protocolName, + Short protocolVersion, + boolean isOnLine, + byte[] upBuf, + String upHex) throws Exception{ Driver dri = ProtocolCache.getDriver(protocolName) ; if(dri == null){ log.error("涓ラ噸閿欒锛屾湭鑳藉緱鍒板崗璁�" + protocolName + "椹卞姩绫诲疄渚嬶紒"); @@ -169,7 +182,7 @@ //鏇存柊缁堢鐘舵�� if(rtuAddrInData != null && !rtuAddrInData.equals(rtuAddrAtHead)){ //鏁版嵁澶翠腑鐨凴TU鍦板潃涓庢暟鎹腑鐨凴TU鍦板潃涓嶄竴鑷达紝鏇存崲鎴愭暟鎹腑鐨凴TU鍦板潃 - TcpSessionCache.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, protocolName, session); + TcpSessionCache.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, protocolName, protocolVersion, session); session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey, rtuAddrInData) ; } @@ -183,12 +196,12 @@ InetSocketAddress sa = (InetSocketAddress)session.getRemoteAddress() ; if(isOnLine){ //涓婄嚎浜� - RtuStatusDealer.onLine(rtuAddr, sa.getAddress().getHostAddress(), sa.getPort()); + RtuStatusDealer.onLine(rtuAddr, sa.getAddress().getHostAddress(), sa.getPort(), protocolName, protocolVersion); } if(reportOrResponse_trueOrFalse != null && reportOrResponse_trueOrFalse){ - RtuStatusDealer.upReport(rtuAddr, upBuf.length) ; + RtuStatusDealer.upAutoReport(rtuAddr, code, codeName, upBuf.length) ; }else{ - RtuStatusDealer.upData(rtuAddr, upBuf.length) ; + RtuStatusDealer.upData(rtuAddr, code, codeName, upBuf.length) ; } //璁板綍鏃ュ織 -- Gitblit v1.8.0