pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DataAlarmVo.java
File was deleted pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DataStateVo.java
File was deleted pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Down.java
@@ -4,8 +4,7 @@ import com.dy.common.mw.protocol.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404; import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3_85Vo; import com.dy.common.util.ByteUtil; @AnnotationCodeDown(ifAny={ @@ -48,7 +47,7 @@ public byte[] doParse(ParseParamsForDownV202404 para) throws Exception { byte[] bytes = GlCreate.createStart2Cd(para.rtuAddr, para.commandCode); if(para.param != null){ DataCd85Vo cdData = (DataCd85Vo)para.param ; DataCd93_A3_85Vo cdData = (DataCd93_A3_85Vo)para.param ; byte[] bs = new byte[2] ; bs[0] = (byte)(Integer.parseInt(cdData.controllerType, 16)); bs[1] = cdData.projectNo.byteValue() ; pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java
@@ -4,7 +4,7 @@ import com.dy.common.mw.protocol.*; import com.dy.common.mw.protocol.p206V202404.*; import com.dy.common.mw.protocol.p206V202404.parse.global.GlParse; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3_85Vo; import com.dy.common.util.ByteUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -84,7 +84,7 @@ */ protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { DataV202404 dV1 = (DataV202404)data.getSubData() ; DataCd85Vo cdData = new DataCd85Vo() ; DataCd93_A3_85Vo cdData = new DataCd93_A3_85Vo(CodeV202404.getCodeName(dataCode)) ; dV1.subData = cdData ; GlParse.parseCd93A3And85(bs, cdData) ; pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java
@@ -4,7 +4,7 @@ import com.dy.common.mw.protocol.*; import com.dy.common.mw.protocol.p206V202404.*; import com.dy.common.mw.protocol.p206V202404.parse.global.GlParse; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3Vo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3_85Vo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -55,7 +55,7 @@ */ protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { DataV202404 dV1 = (DataV202404)data.getSubData() ; DataCd93_A3Vo cdData = new DataCd93_A3Vo() ; DataCd93_A3_85Vo cdData = new DataCd93_A3_85Vo(CodeV202404.getCodeName(dataCode)) ; dV1.subData = cdData ; GlParse.parseCd93A3And85(bs, cdData) ; pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
@@ -3,7 +3,7 @@ import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd80_5BVo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd81Vo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3Vo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3_85Vo; import com.dy.common.util.ByteUtil; import com.dy.common.util.ByteUtilUnsigned; import org.apache.logging.log4j.LogManager; @@ -112,7 +112,7 @@ * @param index * @return */ public static void parseAlarmAndState(byte[] bs, int index, DataCd93_A3Vo vo){ public static void parseAlarmAndState(byte[] bs, int index, DataCd93_A3_85Vo vo){ byte b = bs[index] ; vo.statePump = (byte)(b & 0x1) ; vo.alarmWaterRemain = (byte)(b & 0x2) ; @@ -285,7 +285,7 @@ * @param cdData * @throws Exception */ public static void parseCd93A3And85(byte[] bs, DataCd93_A3Vo cdData) throws Exception { public static void parseCd93A3And85(byte[] bs, DataCd93_A3_85Vo cdData) throws Exception { int index = ProtocolConstantV206V202404.dataIndex ; cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd80_5BVo.java
@@ -2,7 +2,7 @@ import lombok.Data; //设备终端工作上报 + 设备终端工作上报 //设备终端工作上报 + 查询设备终端实时值 @Data public class DataCd80_5BVo { pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd85Vo.java
File was deleted pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3_85Vo.java
File was renamed from pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java @@ -2,9 +2,9 @@ import lombok.Data; //平台/APP远程关闭水泵/阀门 //平台/APP远程关闭水泵/阀门 + 刷卡关泵/阀上报 @Data public class DataCd93_A3Vo { public class DataCd93_A3_85Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 @@ -41,6 +41,14 @@ public Byte alarmEleLowVolt ; //三相电欠压报警 (1:欠压报警 0:正常) public Byte stateIcEnable ; //IC卡使能 (1、IC有刷卡支持 0:不支持) public String comName ;//命令名称 public DataCd93_A3_85Vo(String comName){ this.comName = comName ; } public String toString(){ StringBuffer sb = new StringBuffer() ; sb.append(" 平台/APP远程关闭水泵/阀门 : \n") ; pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TkReceive.java
@@ -21,7 +21,7 @@ log.error("严重错误,RTU上行数据为空!" ); }else{ if(data instanceof Data){ //this.toNextTasks(data); this.toNextTasks(data); }else{ log.error("严重错误,该数据类型(" + data.getClass().getName() + "),接收数据任务还未实现!" ); } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
@@ -18,7 +18,7 @@ public void execute(Object data) { Data d = (Data)data ; if(d.getProtocol() != null && d.getProtocol().equals(ProtocolConstantV206V1_0_0.protocolName)){ this.toNextTasks(data); //this.toNextTasks(data); }else{ //不是本协议的数据 } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
@@ -32,13 +32,11 @@ PrController controller = sv.getControllersByRtuAddrAndIntakeNotNull(rtuAddr) ; PrControllerTramp controllerTramp = null ; if(controller == null){ //数据库中未查询(已经绑定且控制器地址相符)到控制器(RTU实体) //数据库中未查询到控制器(RTU实体)(已经绑定且控制器地址相符) //流浪者控制器 controllerTramp = sv.getPrControllerTrampByRtuAddr(rtuAddr); if(controllerTramp == null){ controllerTramp = new PrControllerTramp(null, rtuAddr, d.getProtocol(), new Date()) ; //this.taskResult = new Object[]{sv, null, rtuTramp} ; //this.toNextOneTask(data, TkDealControllerTramp.taskId); } } //不论是否为流浪控制器(RTU实体),都要进行下步工作,记录其上报的一些数据,当绑定控制器后,数据自动有了归属 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatus.java
New file @@ -0,0 +1,161 @@ package com.dy.rtuMw.server.rtuData.p206V202404; import com.dy.common.mw.protocol.Data; import com.dy.common.mw.protocol.p206V202404.DataV202404 ; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd80_5BVo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd81Vo; import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3_85Vo; import com.dy.common.util.DateTime; import com.dy.pipIrrGlobal.pojoPr.PrController; import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory; import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateLast; import com.dy.rtuMw.server.rtuData.TaskSurpport; import com.dy.rtuMw.server.rtuData.dbSv.DbSv; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * @Author liurunyu * @Date 2024/5/8 14:18 */ public class TkDealAlarmStatus extends TaskSurpport { private static final Logger log = LogManager.getLogger(TkDealAlarmStatus.class.getName()) ; //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkDealAlarmStatus" ; /** * 执行节点任务:报警及状态 * @param data 需要处理的数据 */ @Override public void execute(Object data) { Data d = (Data)data ; Object protocolData = d.getSubData() ; if(protocolData != null){ DataV202404 dV202404 = (DataV202404)protocolData ; if(dV202404 != null){ Object cdObj = dV202404.subData ; if(cdObj != null){ try{ Object[] objs = this.getTaskResults(TkPreGenObjs.taskId) ; DbSv sv = (DbSv)objs[0] ; PrController controller = (PrController)objs[1] ; if(cdObj instanceof DataCd80_5BVo){ //设备终端工作上报 + 查询设备终端实时值 DataCd80_5BVo cdData = (DataCd80_5BVo)(cdObj) ; this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, null, null) ; this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, null, null) ; }else if(cdObj instanceof DataCd93_A3_85Vo){ //平台/APP远程关闭水泵/阀门 + 刷卡关泵/阀上报 DataCd93_A3_85Vo cdData = (DataCd93_A3_85Vo)(cdObj) ; this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.endDt, null, cdData, null) ; this.saveHistory(sv, controller, d.getRtuAddr(), cdData.endDt, null, cdData, null) ; }else if(cdObj instanceof DataCd81Vo){ //设备终端随机自报 DataCd81Vo cdData = (DataCd81Vo)(cdObj) ; this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), null, null, null, cdData) ; this.saveHistory(sv, controller, d.getRtuAddr(), null, null, null, cdData) ; } }catch (Exception e){ log.error("保存控制器报警和状态数据时发生异常", e); } } } } } /** * 保存报警状态最新数据 * @param sv 服务 * @param controller 控制器对象 * @param rtuAddr 控制器地址 * @param rtuDt 控制器时钟 * @param vo80_5B * @param vo93_A3_85 * @param vo81 */ private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, String rtuDt, DataCd80_5BVo vo80_5B, DataCd93_A3_85Vo vo93_A3_85, DataCd81Vo vo81) throws Exception { // RmAlarmStateLast po = sv.getRmAlarmStateLast(rtuAddr) ; // if(po == null){ // po = new RmAlarmStateLast(null, controller==null?null:controller.getId(), controller==null?null:controller.getIntakeId(), // rtuAddr, // DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt), // DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(rtuDt), // alarmVo==null?null:alarmVo.batteryVolt, alarmVo==null?null:alarmVo.loss, alarmVo==null?null:alarmVo.meter, alarmVo==null?null:alarmVo.valve, // stateVo==null?null:stateVo.icCard, stateVo==null?null:stateVo.working, stateVo==null?null:stateVo.valve) ; // sv.saveRmAlarmStateLast(po) ; // }else{ // po = this.update(controller, po, rtuDt, dV1_0_1, alarmVo, stateVo) ; // sv.updateRmAlarmStateLast(po); // } } /** * 保存报警状态历史记录 * @param sv 服务 * @param controller 控制器对象 * @param rtuAddr 控制器地址 * @param rtuDt 控制器时钟 * @param vo80_5B * @param vo93_A3_85 * @param vo81 */ private void saveHistory(DbSv sv, PrController controller, String rtuAddr, String rtuDt, DataCd80_5BVo vo80_5B, DataCd93_A3_85Vo vo93_A3_85, DataCd81Vo vo81) throws Exception { // RmAlarmStateHistory po = new RmAlarmStateHistory(null, controller==null?null:controller.getId(), controller==null?null:controller.getIntakeId(), // rtuAddr, // DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt), // DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(rtuDt), // alarmVo==null?null:alarmVo.batteryVolt, alarmVo==null?null:alarmVo.loss, alarmVo==null?null:alarmVo.meter, alarmVo==null?null:alarmVo.valve, // stateVo==null?null:stateVo.icCard, stateVo==null?null:stateVo.working, stateVo==null?null:stateVo.valve) ; // sv.saveRmAlarmStateHistory(po) ; } private RmAlarmStateLast update(PrController controller, RmAlarmStateLast po, String rtuDt, DataCd80_5BVo vo80_5B, DataCd93_A3_85Vo vo93_A3_85, DataCd81Vo vo81) throws Exception { // po.controllerid = controller==null?null:controller.getId() ; // po.intakeid = controller==null?null:controller.getIntakeId() ; // // po.dt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt) ; // po.rtudt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(rtuDt) ; // if(alarmVo != null){ // po.bateryvolt = alarmVo.batteryVolt ; // po.loss = alarmVo.loss ; // po.meter = alarmVo.meter ; // po.valve = alarmVo.valve ; // }else{ // po.bateryvolt = null ; // po.loss = null ; // po.meter = null ; // po.valve = null ; // } // if(stateVo != null){ // po.iccard = stateVo.icCard ; // po.working = stateVo.working ; // po.valvestate = stateVo.valve ; // }else{ // po.iccard = null ; // po.working = null ; // po.valvestate = null ; // } // return po ; return null ; } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTramp.java
New file @@ -0,0 +1,28 @@ package com.dy.rtuMw.server.rtuData.p206V202404; import com.dy.rtuMw.server.rtuData.TaskSurpport; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * @Author liurunyu * @Date 2024/5/8 14:18 * 处理非流浪控制器,此任务无具体业务逻辑,只是在任务xml配置文件中,框住其子任务节点 */ public class TkDealControllerNoTramp extends TaskSurpport { private static final Logger log = LogManager.getLogger(TkDealControllerNoTramp.class.getName()) ; //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkDealControllerNoTramp" ; /** * 执行节点任务 * @param data 需要处理的数据 */ @Override public void execute(Object data) { //此任务无具体业务逻辑,只是在任务xml配置文件中,框住其子任务节点 this.toNextTasks(data); } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerTramp.java
New file @@ -0,0 +1,33 @@ package com.dy.rtuMw.server.rtuData.p206V202404; import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp; import com.dy.rtuMw.server.rtuData.TaskSurpport; import com.dy.rtuMw.server.rtuData.dbSv.DbSv; import com.dy.rtuMw.server.rtuData.p206V1_0_0.TkPreGenObjs; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * @Author liurunyu * @Date 2024/5/8 14:18 */ public class TkDealControllerTramp extends TaskSurpport { private static final Logger log = LogManager.getLogger(TkDealControllerTramp.class.getName()) ; //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkDealControllerTramp" ; /** * 执行节点任务 * @param data 需要处理的数据 */ @Override public void execute(Object data) { Object[] objs = this.getTaskResults(TkPreGenObjs.taskId) ; PrControllerTramp tramp = (PrControllerTramp)objs[2] ; if(tramp != null){ DbSv sv = (DbSv)objs[0] ; sv.savePrConctrollerTramp(tramp); } } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java
New file @@ -0,0 +1,29 @@ package com.dy.rtuMw.server.rtuData.p206V202404; import com.dy.common.mw.protocol.Data; import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404 ; import com.dy.rtuMw.server.rtuData.TaskSurpport; /** * @Author liurunyu * @Date 2024/5/8 14:18 */ public class TkFindP206V202404 extends TaskSurpport { //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkFindP206V202404" ; /** * 执行节点任务 * @param data 需要处理的数据 */ @Override public void execute(Object data) { Data d = (Data)data ; if(d.getProtocol() != null && d.getProtocol().equals(ProtocolConstantV206V202404.protocolName)){ this.toNextTasks(data); }else{ //不是本协议的数据 } } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindReport.java
New file @@ -0,0 +1,34 @@ package com.dy.rtuMw.server.rtuData.p206V202404; import com.dy.common.mw.protocol.Data; import com.dy.rtuMw.server.rtuData.TaskSurpport; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * @Author liurunyu * @Date 2024/5/8 14:18 */ /** * 识别非命令应答 */ public class TkFindReport extends TaskSurpport { private static final Logger log = LogManager.getLogger(TkFindReport.class.getName()) ; //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkFindReport" ; /** * 执行节点任务 * @param data 需要处理的数据 */ @Override public void execute(Object data) { Data d = (Data)data ; if(d.getCommandId() == null || d.getCommandId().trim().equals("")){ //无命令ID this.toNextTasks(data); } } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkPreGenObjs.java
New file @@ -0,0 +1,52 @@ package com.dy.rtuMw.server.rtuData.p206V202404; import com.dy.common.mw.protocol.Data; import com.dy.common.springUtil.SpringContextUtil; import com.dy.pipIrrGlobal.pojoPr.PrController; import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp; import com.dy.rtuMw.server.rtuData.TaskSurpport; import com.dy.rtuMw.server.rtuData.dbSv.DbSv; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.text.ParseException; import java.util.Date; /** * @Author liurunyu * @Date 2024/5/8 14:18 */ public class TkPreGenObjs extends TaskSurpport { private static final Logger log = LogManager.getLogger(TkPreGenObjs.class.getName()) ; //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkPreGenObjs" ; /** * 执行节点任务 * @param data 需要处理的数据 */ @Override public void execute(Object data) throws ParseException { Data d = (Data)data ; String rtuAddr = d.getRtuAddr() ;//TkRtuData里判断了rtuAddr为空 DbSv sv = (DbSv) SpringContextUtil.getBean(DbSv.class) ; if(sv != null){ PrController controller = sv.getControllersByRtuAddrAndIntakeNotNull(rtuAddr) ; PrControllerTramp controllerTramp = null ; if(controller == null){ //数据库中未查询到控制器(RTU实体)(已经绑定且控制器地址相符) //流浪者控制器 controllerTramp = sv.getPrControllerTrampByRtuAddr(rtuAddr); if(controllerTramp == null){ controllerTramp = new PrControllerTramp(null, rtuAddr, d.getProtocol(), new Date()) ; } } //不论是否为流浪控制器(RTU实体),都要进行下步工作,记录其上报的一些数据,当绑定控制器后,数据自动有了归属 this.taskResult = new Object[]{sv, controller, controllerTramp} ; this.toNextTasks(data); }else{ log.error("严重错误,未能得到DbSv对象"); } } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
@@ -13,8 +13,8 @@ <task id="TkDealControllerTramp" name="处理流浪控制器" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1_0_0.TkDealControllerTramp" /> <!-- 非流浪者RTU,必须放在TkDealControllerTramp后面 --> <task id="TkDealControllerNoTramp" name="非流浪者RTU" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1_0_0.TkDealControllerNoTramp"> <!-- 识别主动上报数据 --> <task id="TkFindReport" name="识别控制器上报数据" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1_0_0.TkFindReport"> <!-- 识别非命令应答上行数据 --> <task id="TkFindReport" name="识别非命令应答上行数据" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1_0_0.TkFindReport"> <task id="TkDealAlarmStatus" name="控制器报警与状态数据" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1_0_0.TkDealAlarmStatus" /> <task id="TkDealAutoReport" name="控制器自报数据(整点报)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1_0_0.TkDealAutoReport" /> <task id="TkDealWorkReport" name="控制器阀开工作上报" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1_0_0.TkDealWorkReport" /> @@ -30,6 +30,29 @@ </task> </task> </task> <task id="TkFindP206V202404" name="识别P206V202404数据" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkFindP206V202404"> <task id="TkPreGenObjs" name="预先准备各对象并识别流浪控制器" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkPreGenObjs"> <!-- 处理流浪控制器 --> <task id="TkDealControllerTramp" name="处理流浪控制器" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealControllerTramp" /> <!-- 非流浪者RTU,必须放在TkDealControllerTramp后面 --> <task id="TkDealControllerNoTramp" name="非流浪者RTU" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealControllerNoTramp"> <!-- 识别非命令应答上行数据 --> <task id="TkFindReport" name="识别非命令应答上行数据" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkFindReport"> <task id="TkDealAlarmStatus" name="控制器报警与状态数据" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealAlarmStatus" /> <task id="TkDealAutoReport" name="控制器自报数据(整点报)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealAutoReport" /> <task id="TkDealWorkReport" name="控制器阀开工作上报" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealWorkReport" /> <task id="TkDealOpenValveReport" name="控制器开阀上报" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealOpenValveReport" /> <task id="TkDealCloseValveReport" name="控制器关阀上报" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealCloseValveReport" /> <task id="TkDealLoss" name="控制器漏损统计(待新协议出来后修改实现)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealLoss" /> </task> <!-- 识别命令响应数据 --> <task id="TkFindComResponse" name="识别响应命令数据" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkFindComResponse"> <task id="TkRtuDealCommandResponse" name="RTU响应命令数据" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkRtuDealCommandResponse" > </task> </task> </task> </task> </task> </task> </task> </project>