| | |
| | | package com.dy.common.mw.protocol.p206V2; |
| | | |
| | | import com.dy.common.mw.protocol.*; |
| | | import com.dy.common.mw.protocol.p206V2.parse.TransparentDown; |
| | | import com.dy.common.util.DateTime; |
| | | |
| | | @AnnotationDriver(enable = true, name= ProtocolConstantV206V2.protocolName) |
| | | @AnnotationDriver(enable = true, |
| | | name= ProtocolConstantV206V2.protocolName, |
| | | version= ProtocolConstantV206V2.protocolVer) |
| | | public class DriverV2 extends Driver { |
| | | |
| | | private static String scanRootPackage = "com.dy.common.mw.protocol.p206V2" ; |
| | |
| | | boolean isFail = false ; |
| | | String upCode = null ; |
| | | Short protocolVersion = null ; |
| | | Object[] codeDataGrp = {null}; |
| | | try{ |
| | | CommonV2 cp = new CommonV2() ; |
| | | 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(ProtocolConstantV206V2.protocolName, rtuAddr, "严重错误,上行数据CRC检查失败," + crcStr, null))} ; |
| | | } |
| | | protocolVersion = cp.parseVersion(upBuffer) ; |
| | | upCode = cp.parseCode(upBuffer) ; |
| | | upCode = cp.parseCode(upBuffer, p206TrueUgFalse) ; |
| | | if(upCode == null){ |
| | | return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, rtuAddr, "严重错误,未能从上行数据中解析出功能码!", null))} ; |
| | | } |
| | |
| | | }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 = dV2.getRtuAddr() ; |
| | | codeDataGrp[0] = codeData ; |
| | | } |
| | | @Override |
| | | public void notify(NotifyInfo ...infos) { |
| | | notify.notify(rtuAddr, ProtocolConstantV206V2.protocolName, ProtocolConstantV206V2.protocolVer, infos); |
| | | } |
| | | }); |
| | | } |
| | |
| | | isFail = true ; |
| | | return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, rtuAddr, "严重错误,分析Rtu数据出错!数据为:" + upHex + (e.getMessage() == null?"":(",出错信息:" + e.getMessage())), e))} ; |
| | | } finally{ |
| | | callback.callback(rtuAddr, upCode, CodeV2.getCodeName(upCode), upHex, reportOrResponse_trueOrFalse, isFail, rtuAddr); |
| | | callback.callback(rtuAddr, upCode, CodeV2.getCodeName(upCode), upHex, reportOrResponse_trueOrFalse, isFail, rtuAddr, codeDataGrp[0]); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 构造下行透传数据(命令) |
| | | * @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(ProtocolConstantV206V2.protocolName, null, "严重错误,命令中rtu返回命令结果发向目的地web URL为空,不能构建任何命令!", null))} ; |
| | | } |
| | | String rtuAddr = command.getRtuAddr() ; |
| | | if(rtuAddr == null || rtuAddr.trim().equals("")){ |
| | | return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, null, "严重错误,命令中Rtu地址为空,不能构建任何命令!", null))} ; |
| | | } |
| | | try { |
| | | String commandCode = command.getCode() ; |
| | | |
| | | this.downCpParams.setValue( |
| | | RtuResultSendWebUrl, |
| | | ProtocolConstantV206V2.protocolName, |
| | | command.protocolVersion==null?ProtocolConstantV206V2.protocolVer:command.protocolVersion, |
| | | rtuAddr, |
| | | command.getId(), |
| | | commandCode, |
| | | command.getParam(), |
| | | command.getAttachment()); |
| | | |
| | | if(commandCode == null){ |
| | | return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, rtuAddr, "严重错误,命令中功能码为空,不能构建任何命令!", null))} ; |
| | | }else{ |
| | | return new TransparentDown().parse(isLowPower, this.downCpParams, null); |
| | | } |
| | | } catch (Exception e) { |
| | | return new MidResult[]{(new MidResultError(ProtocolConstantV206V2.protocolName, rtuAddr, "严重错误,构造下行数据出错!命令为:" + command.toString(), e))} ; |
| | | } |
| | | } |
| | | |
| | | } |