|  |  | 
 |  |  | package com.dy.common.mw.protocol.p206V202404; | 
 |  |  |  | 
 |  |  | import com.dy.common.mw.protocol.*; | 
 |  |  | import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0; | 
 |  |  | import com.dy.common.mw.protocol.p206V202404.parse.TransparentDown; | 
 |  |  | import com.dy.common.util.DateTime; | 
 |  |  |  | 
 |  |  | import java.net.URI; | 
 |  |  | import java.net.URL; | 
 |  |  |  | 
 |  |  | @AnnotationDriver(name= ProtocolConstantV206V202404.protocolName) | 
 |  |  | @AnnotationDriver(enable = true, | 
 |  |  |       name= ProtocolConstantV206V202404.protocolName, | 
 |  |  |       version= ProtocolConstantV206V202404.protocolVer) | 
 |  |  | public class DriverV202404 extends Driver { | 
 |  |  |     | 
 |  |  |    private static String scanRootPackage = "com.dy.common.mw.protocol.p206V202404" ; | 
 |  |  | 
 |  |  |    private ParseParamsForDownV202404 downCpParams ; | 
 |  |  |     | 
 |  |  |    private Boolean reportOrResponse_trueOrFalse = null ; | 
 |  |  |    private String rtuAddrInData = null ; | 
 |  |  |  | 
 |  |  |    public DriverV202404(){ | 
 |  |  |       upCpParams = new ParseParamsForUpV202404() ; | 
 |  |  |       downCpParams = new ParseParamsForDownV202404() ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 清空自己 | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public void clear() { | 
 |  |  |       if(this.upCpParams != null){ | 
 |  |  |          this.upCpParams.clear(); | 
 |  |  |       } | 
 |  |  |       if(this.downCpParams != null){ | 
 |  |  |          this.downCpParams.clear(); | 
 |  |  |       } | 
 |  |  |       this.reportOrResponse_trueOrFalse = null ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 扫描识别功能码注解类 | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public void scanAnnotationCode() throws Exception{ | 
 |  |  |       super.doScanAnnotationCode(this, ProtocolConstantV206V1_0_0.protocolName, scanRootPackage) ; | 
 |  |  |       super.doScanAnnotationCode(this, ProtocolConstantV206V202404.protocolName, scanRootPackage) ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public MidResult[] parseData(Boolean isLowPower, String rtuAddr, byte[] upBuffer, String upHex, DriverParserDataCallback callback, Object... params) { | 
 |  |  |       reportOrResponse_trueOrFalse = null ; | 
 |  |  |       this.clear(); | 
 |  |  |       boolean isFail = false ; | 
 |  |  |       String upCode = null ; | 
 |  |  |       Object[] codeDataGrp = {null}; | 
 |  |  |       try{ | 
 |  |  |          CommonV202404 cp = new CommonV202404() ; | 
 |  |  |          cp.checkHead(upBuffer) ; | 
 |  |  |          Boolean p202404TrueUgFalse = cp.protocolType_p206TrueUgFalse(upBuffer) ; | 
 |  |  |          cp.checkTail(upBuffer) ; | 
 |  |  |          String crcStr = cp.checkCrc_str(upBuffer) ; | 
 |  |  |          String crcStr = cp.checkCrc_str(upBuffer, p202404TrueUgFalse) ; | 
 |  |  |          if(crcStr != null){ | 
 |  |  |             return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, rtuAddr, "严重错误,上行数据CRC检查失败," + crcStr, null))} ; | 
 |  |  |          } | 
 |  |  |          rtuAddr = cp.parseRtuAddr(upBuffer) ; | 
 |  |  |          upCode = cp.parseCode(upBuffer) ; | 
 |  |  |          if(upCode == null){ | 
 |  |  |             return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, rtuAddr, "严重错误,未能从上行数据中解析出功能码!", null))} ; | 
 |  |  | 
 |  |  |          Data upData = new Data() ; | 
 |  |  |          upData.setRtuAddr(rtuAddr) ; | 
 |  |  |          upData.setProtocol(ProtocolConstantV206V202404.protocolName); | 
 |  |  |          upData.setProtocolVer(ProtocolConstantV206V202404.protocolVer); | 
 |  |  |          upData.setCode(upCode) ; | 
 |  |  |          upData.setHex(upHex) ; | 
 |  |  |           | 
 |  |  |           | 
 |  |  |          DataV202404 dV1_0_1 = new DataV202404() ; | 
 |  |  |          //dV1_0_1.version = cp.parseVersion(upBuffer) ; | 
 |  |  |          dV1_0_1.rtuAddr = rtuAddr ; | 
 |  |  |          dV1_0_1.dt = DateTime.yyyy_MM_dd_HH_mm_ss() ; | 
 |  |  |          DataV202404 dV201 = new DataV202404() ; | 
 |  |  |          //dV201.version = cp.parseVersion(upBuffer) ; | 
 |  |  |          dV201.rtuAddr = rtuAddr ; | 
 |  |  |          dV201.dt = DateTime.yyyy_MM_dd_HH_mm_ss() ; | 
 |  |  |           | 
 |  |  |          upData.setSubData(dV1_0_1) ; | 
 |  |  |          upData.setSubData(dV201) ; | 
 |  |  |           | 
 |  |  |          this.upCpParams.clear(); | 
 |  |  |          this.upCpParams.setValue(ProtocolConstantV206V202404.protocolName,  | 
 |  |  |          this.upCpParams.setValue(ProtocolConstantV206V202404.protocolName, | 
 |  |  |                ProtocolConstantV206V202404.protocolVer, | 
 |  |  |                rtuAddr,  | 
 |  |  |                upCode, | 
 |  |  |                upHex,  | 
 |  |  | 
 |  |  |          }else{ | 
 |  |  |             return codeParse.parse(isLowPower, this.upCpParams, new CodeParseCallback(){ | 
 |  |  |                @Override | 
 |  |  |                public void callback(Boolean flag) { | 
 |  |  |                public void callback(Boolean flag, Object codeData) { | 
 |  |  |                   reportOrResponse_trueOrFalse = flag ; | 
 |  |  |                   rtuAddrInData = dV1_0_1.getRtuAddr() ; | 
 |  |  |                   //rtuAddrInData = dV201.getRtuAddr() ; | 
 |  |  |                   codeDataGrp[0] = codeData ; | 
 |  |  |                } | 
 |  |  |                @Override | 
 |  |  |                public void notify(NotifyInfo ...infos) { | 
 |  |  |                   notify.notify(rtuAddr, ProtocolConstantV206V202404.protocolName, ProtocolConstantV206V202404.protocolVer, infos); | 
 |  |  |                } | 
 |  |  |             }); | 
 |  |  |          } | 
 |  |  | 
 |  |  |          isFail = true ; | 
 |  |  |          return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, rtuAddr, "严重错误,分析Rtu数据出错!数据为:" + upHex + (e.getMessage() == null?"":(",出错信息:" + e.getMessage())), e))} ; | 
 |  |  |       } finally{ | 
 |  |  |          callback.callback(rtuAddr, upCode, CodeV202404.getCodeName(upCode), upHex, reportOrResponse_trueOrFalse, isFail, rtuAddrInData); | 
 |  |  |          callback.callback(rtuAddr, upCode, CodeV202404.getCodeName(upCode), upHex, reportOrResponse_trueOrFalse, isFail, rtuAddr, codeDataGrp[0]); | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  |  | 
 |  |  | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public MidResult[] createCommand(Boolean isLowPower, Command command, Object... params) { | 
 |  |  |       this.clear(); | 
 |  |  |       String RtuResultSendWebUrl = command.getRtuResultSendWebUrl() ; | 
 |  |  |       if(RtuResultSendWebUrl == null || RtuResultSendWebUrl.trim().equals("")){ | 
 |  |  |          return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, null, "严重错误,命令中rtu返回命令结果发向目的地web URL为空,不能构建任何命令!", null))} ; | 
 |  |  | 
 |  |  |       try { | 
 |  |  |          String commandCode = command.getCode() ; | 
 |  |  |           | 
 |  |  |          this.downCpParams.clear(); | 
 |  |  |          this.downCpParams.setValue( | 
 |  |  |                RtuResultSendWebUrl, | 
 |  |  |                ProtocolConstantV206V202404.protocolName,  | 
 |  |  |                ProtocolConstantV206V202404.protocolName, | 
 |  |  |                command.protocolVersion==null?ProtocolConstantV206V202404.protocolVer:command.protocolVersion, | 
 |  |  |                rtuAddr,  | 
 |  |  |                command.getId(), | 
 |  |  |                commandCode,  | 
 |  |  | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 构造下行透传数据(命令) | 
 |  |  |     * @param isLowPower 是否在低功耗环境下运行 | 
 |  |  |     * @param command 命令 | 
 |  |  |     * @return MidResult[] | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public MidResult[] transparentCommand(Boolean isLowPower, Command command, Object... params){ | 
 |  |  |       this.clear(); | 
 |  |  |       String RtuResultSendWebUrl = command.getRtuResultSendWebUrl() ; | 
 |  |  |       if(RtuResultSendWebUrl == null || RtuResultSendWebUrl.trim().equals("")){ | 
 |  |  |          return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, null, "严重错误,命令中rtu返回命令结果发向目的地web URL为空,不能构建任何命令!", null))} ; | 
 |  |  |       } | 
 |  |  |       String rtuAddr = command.getRtuAddr() ; | 
 |  |  |       if(rtuAddr == null || rtuAddr.trim().equals("")){ | 
 |  |  |          return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, null, "严重错误,命令中Rtu地址为空,不能构建任何命令!", null))} ; | 
 |  |  |       } | 
 |  |  |       try { | 
 |  |  |          String commandCode = command.getCode() ; | 
 |  |  |  | 
 |  |  |          this.downCpParams.setValue( | 
 |  |  |                RtuResultSendWebUrl, | 
 |  |  |                ProtocolConstantV206V202404.protocolName, | 
 |  |  |                command.protocolVersion==null?ProtocolConstantV206V202404.protocolVer:command.protocolVersion, | 
 |  |  |                rtuAddr, | 
 |  |  |                command.getId(), | 
 |  |  |                commandCode, | 
 |  |  |                command.getParam(), | 
 |  |  |                command.getAttachment()); | 
 |  |  |  | 
 |  |  |          if(commandCode == null){ | 
 |  |  |             return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, rtuAddr,  "严重错误,命令中功能码为空,不能构建任何命令!", null))} ; | 
 |  |  |          }else{ | 
 |  |  |             return new TransparentDown().parse(isLowPower, this.downCpParams, null); | 
 |  |  |          } | 
 |  |  |       } catch (Exception e) { | 
 |  |  |          return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, rtuAddr,  "严重错误,构造下行数据出错!命令为:" + command.toString(), e))} ; | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  |  | 
 |  |  | } |