liurunyu
2025-04-02 84864ae37ed1237da21bc36f01a641de4b01cfa8
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java
@@ -3,7 +3,9 @@
import com.dy.common.mw.protocol.*;
import com.dy.common.util.DateTime;
@AnnotationDriver(enable = true, name= ProtocolConstantV206V1.protocolName)
@AnnotationDriver(enable = true,
      name= ProtocolConstantV206V1.protocolName,
      version= ProtocolConstantV206V1.protocolVer)
public class DriverV1 extends Driver {
   
   private static String scanRootPackage = "com.dy.common.mw.protocol.p206V1" ;
@@ -57,20 +59,20 @@
      this.clear();
      boolean isFail = false ;
      String upCode = null ;
      Object[] codeDataGrp = {null};
      try{
         CommonV1 cp = new CommonV1() ;
         cp.checkHead(upBuffer) ;
         Boolean p206TrueUgFalse = cp.protocolType_p206TrueUgFalse(upBuffer) ;
         //到此处了,p206TrueUgFalse不可能为空了
         cp.checkTail(upBuffer) ;
         String crcStr = cp.checkCrc_str(upBuffer) ;
         String crcStr = cp.checkCrc_str(upBuffer, p206TrueUgFalse) ;
         if(crcStr != null){
            return new MidResult[]{(new MidResultError(ProtocolConstantV206V1.protocolName, rtuAddr, "严重错误,上行数据CRC检查失败," + crcStr, null))} ;
         }
         rtuAddr = cp.parseRtuAddr(upBuffer) ;
         upCode = cp.parseCode(upBuffer) ;
         upCode = cp.parseCode(upBuffer, p206TrueUgFalse) ;
         if(upCode == null){
            return new MidResult[]{(new MidResultError(ProtocolConstantV206V1.protocolName, rtuAddr, "严重错误,未能从上行数据中解析出功能码!", null))} ;
         }
         //Integer dataLen = cp.parseFrameLen(upBuffer) ;
         Data upData = new Data() ;
         upData.setRtuAddr(rtuAddr) ;
         upData.setProtocol(ProtocolConstantV206V1.protocolName);
@@ -99,21 +101,25 @@
         }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.getRtuAddr() ;
                  codeDataGrp[0] = codeData ;
               }
               @Override
               public void notify(NotifyInfo ...infos) {
                  notify.notify(rtuAddr, ProtocolConstantV206V1.protocolName, ProtocolConstantV206V1.protocolVer, infos);
               }
            });
         }
      } catch (Exception e) {
         isFail = true ;
         return new MidResult[]{(new MidResultError(ProtocolConstantV206V1.protocolName, rtuAddr, "严重错误,分析Rtu数据出错!数据为:" + upHex + (e.getMessage() == null?"":(",出错信息:" + e.getMessage())), e))} ;
      } finally{
         callback.callback(rtuAddr, upCode, CodeV1.getCodeName(upCode), upHex, reportOrResponse_trueOrFalse, isFail, rtuAddr);
         if(upCode != null){
            //CRC验证失败时,upCode为null,此时不进行回调
            callback.callback(rtuAddr, upCode, CodeV1.getCodeName(upCode), upHex, reportOrResponse_trueOrFalse, isFail, rtuAddr, codeDataGrp[0]);
         }
      }
   }