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