From fbc250276c78ca2afa45a55e8af8deddd65e4f8a Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期一, 16 十二月 2024 11:23:41 +0800
Subject: [PATCH] 临时任务功能,修改bug
---
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java | 96 ++++++++++++++++++++++++++++++++---------------
1 files changed, 65 insertions(+), 31 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 bedf45e..387bb42 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
@@ -2,6 +2,11 @@
import java.net.InetSocketAddress;
+import com.dy.common.mw.protocol.*;
+import com.dy.common.springUtil.SpringContextUtil;
+import com.dy.common.util.Callback;
+import com.dy.rtuMw.server.upgrade.UpgradeUnit;
+import com.dy.rtuMw.web.com.CommandCtrl;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.mina.core.session.IoSession;
@@ -9,12 +14,6 @@
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.channel.tcp.TcpUnit;
import com.dy.common.mw.core.CoreTask;
-import com.dy.common.mw.protocol.DriverParserDataCallback;
-import com.dy.common.mw.protocol.MidResult;
-import com.dy.common.mw.protocol.Driver;
-import com.dy.common.mw.protocol.OnLine;
-import com.dy.common.mw.protocol.OnLineHandle;
-import com.dy.common.mw.protocol.ProtocolCache;
import com.dy.rtuMw.server.ServerProperties;
import com.dy.rtuMw.server.forTcp.RtuLogDealer;
import com.dy.rtuMw.server.forTcp.RtuStatusDealer;
@@ -56,25 +55,27 @@
e.printStackTrace();
log.error("灏嗘暟鎹浆鎹负鍗佸叚杩涘埗鏃跺嚭閿欙紒" ) ;
}
- String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ;
- String protocolName = null ;
+ String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
+ String protocolName = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName) ;
+ Short protocolVersion = (Short)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion) ;
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 == 3){
//瑙f瀽涓婄嚎鏁版嵁鎴愬姛锛屽苟瑙f瀽鍑篟TU鍦板潃鍙婇�氫俊鍗忚鍚嶇О
- rtuAddr = rtuAddrProtocolName[0] ;
- protocolName = rtuAddrProtocolName[1] ;
-
- if(rtuAddr != null && protocolName != null){
+ rtuAddr = (String)rtuAddrProtocolNameVersion[0] ;
+ protocolName = (String)rtuAddrProtocolNameVersion[1] ;
+ protocolVersion = (Short)rtuAddrProtocolNameVersion[2] ;
+
+ if(rtuAddr != null && protocolName != null && protocolVersion != null){
//璁剧疆session鐨勫睘鎬D
- TcpUnit.getInstance().setIoSessionArrId(session, rtuAddr);
+ TcpUnit.getInstance().setIoSessionArrs(session, rtuAddr, protocolName, protocolVersion) ;
//缂撳瓨session
- TcpSessionCache.putNewTcpSession(rtuAddr, protocolName, session);
+ TcpSessionCache.putNewTcpSession(rtuAddr, session);
- log.info("RTU(鍦板潃锛�" + rtuAddr + "锛屽崗璁細" + protocolName + ")涓婄嚎浜嗐��") ;
+ log.info("RTU(鍦板潃锛�" + rtuAddr + "锛屽崗璁細" + protocolName + "锛岀増鏈彿锛�" + protocolVersion + ")涓婄嚎浜嗐��") ;
}
}
}
@@ -94,16 +95,20 @@
}
}
if(toDeal){
+ /*
if(protocolName == null){
- protocolName = TcpSessionCache.getTcpProtocolName(rtuAddr) ;
+ Object[] objs = TcpSessionCache.getTcpProtocolNameVersion(rtuAddr) ;
+ protocolName = (String)objs[0] ;
+ protocolVersion = (Short)objs[1] ;
}
+ */
//璁剧疆鏀跺埌鏁版嵁鏃跺埢
TcpSessionCache.cacheUpDataTime(rtuAddr);
if(protocolName != null){
//瀵逛笂琛屾暟鎹繘琛屽鐞�
- this.dealUpData(session, rtuAddr, protocolName, isOnLine, upBuf, upHex) ;
+ this.dealUpData(session, rtuAddr, protocolName, protocolVersion, isOnLine, upBuf, upHex) ;
}
}
}
@@ -114,9 +119,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 +139,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 +151,7 @@
} catch (Exception e) {
log.error("涓ラ噸閿欒锛屽垎鏋愪笂绾挎暟鎹椂浜х敓寮傚父 锛乗n" + e.getMessage() , e) ;
}
- return new String[]{rtuAddr, protocolName} ;
+ return new Object[]{rtuAddr, protocolName, protocolVersion} ;
}
@@ -153,24 +160,31 @@
* @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{
- Driver dri = ProtocolCache.getDriver(protocolName) ;
+ private void dealUpData(IoSession session,
+ String rtuAddrAtHead,
+ String protocolName,
+ Short protocolVersion,
+ boolean isOnLine,
+ byte[] upBuf,
+ String upHex) throws Exception{
+ Driver dri = ProtocolCache.getDriver(protocolName, protocolVersion) ;
if(dri == null){
log.error("涓ラ噸閿欒锛屾湭鑳藉緱鍒板崗璁�" + protocolName + "椹卞姩绫诲疄渚嬶紒");
}else{
MidResult[] midRs = dri.parseData(ServerProperties.isLowPower, rtuAddrAtHead, upBuf, upHex, new DriverParserDataCallback(){
@Override
- public void callback(String rtuAddrAtHead, String code, String upHex, Boolean reportOrResponse_trueOrFalse, boolean parseFail, String rtuAddrInData) {
+ public void callback(String rtuAddrAtHead, String code, String codeName, String upHex, Boolean reportOrResponse_trueOrFalse, boolean parseFail, String rtuAddrInData) {
//鏇存柊缁堢鐘舵��
if(rtuAddrInData != null && !rtuAddrInData.equals(rtuAddrAtHead)){
//鏁版嵁澶翠腑鐨凴TU鍦板潃涓庢暟鎹腑鐨凴TU鍦板潃涓嶄竴鑷达紝鏇存崲鎴愭暟鎹腑鐨凴TU鍦板潃
- TcpSessionCache.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, protocolName, session);
- session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey, rtuAddrInData) ;
+ TcpSessionCache.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, session);
+ session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr, rtuAddrInData) ;
}
String rtuAddr ;
@@ -183,20 +197,40 @@
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) ;
}
//璁板綍鏃ュ織
if(parseFail){
- RtuLogDealer.log(rtuAddr, (isOnLine?"涓婄嚎鏁版嵁 ":"涓婅鏁版嵁 ") + "" + code + "锛�" + upHex + "锛堣В鏋愬け璐ワ級");
+ RtuLogDealer.log(rtuAddr, (isOnLine?"涓婄嚎鏁版嵁 ":"涓婅鏁版嵁 ") + code + ("锛�" + codeName + "锛�") + "锛�" + upHex + "锛堣В鏋愬け璐ワ級");
}else{
- RtuLogDealer.log(rtuAddr, (isOnLine?"涓婄嚎鏁版嵁 ":"涓婅鏁版嵁 ") + "" + code + "锛�" + upHex);
+ RtuLogDealer.log(rtuAddr, (isOnLine?"涓婄嚎鏁版嵁 ":"涓婅鏁版嵁 ") + code + ("锛�" + codeName + "锛�") + "锛�" + upHex);
}
+
+ //瑙﹀彂杩滅▼RTU杞欢鍗囩骇
+ UpgradeUnit.getInstance().trigger(rtuAddr, code, protocolName, protocolVersion, new Callback() {
+ @Override
+ public void call(Object obj) {
+ if(obj != null){
+ Command com = (Command)obj ;
+ CommandCtrl comCtrl = SpringContextUtil.getBean(CommandCtrl.class) ;
+ if(comCtrl != null){
+ comCtrl.sendOutComFromLocal(com) ;
+ }
+ }
+ }
+ @Override
+ public void call(Object... objs) {
+ }
+ @Override
+ public void exception(Exception e) {
+ }
+ });
}
}) ;
if(midRs != null){
--
Gitblit v1.8.0