pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
@@ -161,6 +161,12 @@ if(ServerProperties.cacheUpDownDataMaxCount <= ServerProperties.cacheUpDownDataWarnCount){ throw new Exception("cacheUpDownDataMaxCount必须大于cacheUpDownDataWarnCount") ; } //没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2_100 ServerProperties.disconnectedByNoUpDataMinutes = 0L + conf.getSetAttrPlusInt(doc, "config.base", "disconnectedByNoUpDataMinutes", null, 1, 100, null) ; if(ServerProperties.disconnectedByNoUpDataMinutes < 1 || ServerProperties.disconnectedByNoUpDataMinutes > 100){ throw new Exception("disconnectedByNoUpDataMinutes取值必须是1~100") ; } ServerProperties.disconnectedByNoUpDataMinutes = ServerProperties.disconnectedByNoUpDataMinutes * 60 * 1000 ; //设置ID生成器的后缀 IDLongGenerator.setSuffix(ServerProperties.dbDataIdSuffix.intValue()); pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java
@@ -33,4 +33,7 @@ //上下行数据缓存队列中缓存数据个数的最大值,这个与实体项目所接水表数相关 public static Integer cacheUpDownDataMaxCount = 1100000 ; //没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2000_100000 public static Long disconnectedByNoUpDataMinutes = 3000L ; } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSession.java
@@ -9,4 +9,5 @@ public String protocolName ;//通信协议名称 public Long lastDownComTime ;//上次下发命令时刻(毫秒时刻 System.currentTimeMillis()) public Long lastUpDataTime ;//上次收到上行数据时刻(毫秒时刻 System.currentTimeMillis()) public Long lastUpDataTimeForOnlineCtrl ;//上次收到上行数据时刻(毫秒时刻 System.currentTimeMillis()),用于上线情况控制 } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
@@ -2,12 +2,10 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.*; import java.util.Map.Entry; import com.dy.common.util.DateTime; import org.apache.mina.core.session.IoSession; import com.dy.rtuMw.server.ServerProperties; @@ -189,27 +187,54 @@ TcpSession tcpSe = sessionTable.get(rtuAddr) ; if(tcpSe != null){ tcpSe.lastUpDataTime = System.currentTimeMillis() ; tcpSe.lastUpDataTimeForOnlineCtrl = System.currentTimeMillis() ; } } /** * 更新上行数据时刻 * 当上行数据时刻已经过去一定时长,上行数据时刻清空 * 当一定时间内没有上行数据,则认为RTU离线 */ public static void updateUpDataTime(Long now){ public static void updateRtuStatus(Long now){ synchronized (sessionTable){ Iterator<TcpSession> it = sessionTable.values().iterator() ; Set<Map.Entry<String, TcpSession>> entrySet = sessionTable.entrySet() ; Iterator<Map.Entry<String, TcpSession>> it = entrySet.iterator() ; Map.Entry<String, TcpSession> entry ; TcpSession tcpSe ; while(it.hasNext()){ tcpSe = it.next() ; entry = it.next() ; tcpSe = entry.getValue(); if(tcpSe.lastUpDataTime != null){ if(now - tcpSe.lastUpDataTime > ServerProperties.lastUpDataTimeLive){ tcpSe.lastUpDataTime = null ; } } if(tcpSe.lastUpDataTimeForOnlineCtrl != null){ if(tcpSe.ioSession != null && tcpSe.ioSession.isConnected()){ if(now - tcpSe.lastUpDataTimeForOnlineCtrl > ServerProperties.disconnectedByNoUpDataMinutes){ tcpSe.ioSession.closeNow() ; } } } } } } // public static void updateRtuStatus(Long now){ // synchronized (sessionTable){ // Iterator<TcpSession> it = sessionTable.values().iterator() ; // TcpSession tcpSe ; // while(it.hasNext()){ // tcpSe = it.next() ; // if(tcpSe.lastUpDataTime != null){ // if(now - tcpSe.lastUpDataTime > ServerProperties.lastUpDataTimeLive){ // tcpSe.lastUpDataTime = null ; // } // } // } // } // } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealLoss.java
@@ -36,7 +36,7 @@ Object subD = d.getSubData(); if (subD != null) { DataV1_0_1 dV1_0_1 = (DataV1_0_1) subD; if (dV1_0_1 != null && dV1_0_1.subData != null) { if (dV1_0_1 != null && dV1_0_1.subData != null && dV1_0_1.subData instanceof DataCdC0Vo) { Object[] objs = this.getTaskResults(TkPreGenObjs.taskId); DbSv sv = (DbSv) objs[0]; PrController controller = (PrController) objs[1]; pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/ToRtuConstantTask.java
@@ -37,7 +37,7 @@ * 处理TCP缓存中的各个TCP Session的上行数据时刻 */ private void dealTcpSession(){ TcpSessionCache.updateUpDataTime(System.currentTimeMillis() ) ; TcpSessionCache.updateRtuStatus(System.currentTimeMillis() ) ; } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
@@ -16,6 +16,7 @@ dbDataIdSuffix:数据库数据id生成器的id后缀,0是默认的后缀,一般web系统应用,数据中间件id后缀大于等于1 cacheUpDownDataWarnCount:上下行数据缓存队列中缓存数据个数的报警量,这个与现实项目所接水表数相关 cacheUpDownDataMaxCount:上下行数据缓存队列中缓存数据个数的最大值,这个与现实项目所接水表数相关 disconnectedByNoUpDataMinutes:没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2_100 --> <base isLowPower="false" @@ -28,6 +29,7 @@ dbDataIdSuffix="0" cacheUpDownDataWarnCount="100000" cacheUpDownDataMaxCount="110000" disconnectedByNoUpDataMinutes="3" /> <!--