liurunyu
2025-04-30 959dcca95276888cd9c092d93d276ef9aa580aef
1、增加远程透传命令;
2、表阀一体机协议优化;
45个文件已修改
6个文件已添加
632 ■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/CommandType.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/TransparentDown.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/TransparentDown.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/TransparentDown.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/NumUtil.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/WebDownTransparentComTask.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransSv.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/CommandType.java
@@ -13,7 +13,13 @@
     * 只能是异步,命令结果通过相关的信息发布通道发布出去
     */
    public static final String outerCommand = "outerCommand" ;
    /**
     * 针对Rtu外部透传命令
     * 只能是异步,命令结果通过相关的信息发布通道发布出去
     */
    public static final String outerTransCommand = "outerTransCommand" ;
    /**
     * 本命令是一个别的命令的结果(结果以命令的方式表示)
     */
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java
@@ -173,5 +173,16 @@
     */
    public abstract MidResult[] createCommand(Boolean isLowPower, Command command, Object... params);
    
    /**
     * 构造下行透传数据(命令)
     * @param isLowPower 是否在低功耗环境下运行
     * @param command 命令
     * @return MidResult[]
     */
    public MidResult[] transparentCommand(Boolean isLowPower, Command command, Object... params){
        return null ;
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DriverV1.java
@@ -1,6 +1,7 @@
package com.dy.common.mw.protocol.p206V1;
import com.dy.common.mw.protocol.*;
import com.dy.common.mw.protocol.p206V1.parse.TransparentDown;
import com.dy.common.util.DateTime;
@AnnotationDriver(enable = true,
@@ -168,5 +169,44 @@
        }
    }
    /**
     * 构造下行透传数据(命令)
     * @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(ProtocolConstantV206V1.protocolName, null, "严重错误,命令中rtu返回命令结果发向目的地web URL为空,不能构建任何命令!", null))} ;
        }
        String rtuAddr = command.getRtuAddr() ;
        if(rtuAddr == null || rtuAddr.trim().equals("")){
            return new MidResult[]{(new MidResultError(ProtocolConstantV206V1.protocolName, null, "严重错误,命令中Rtu地址为空,不能构建任何命令!", null))} ;
        }
        try {
            String commandCode = command.getCode() ;
            this.downCpParams.setValue(
                    RtuResultSendWebUrl,
                    ProtocolConstantV206V1.protocolName,
                    command.protocolVersion==null?ProtocolConstantV206V1.protocolVer:command.protocolVersion,
                    rtuAddr,
                    command.getId(),
                    commandCode,
                    command.getParam(),
                    command.getAttachment());
            if(commandCode == null){
                return new MidResult[]{(new MidResultError(ProtocolConstantV206V1.protocolName, rtuAddr,  "严重错误,命令中功能码为空,不能构建任何命令!", null))} ;
            }else{
                return new TransparentDown().parse(isLowPower, this.downCpParams, null);
            }
        } catch (Exception e) {
            return new MidResult[]{(new MidResultError(ProtocolConstantV206V1.protocolName, rtuAddr,  "严重错误,构造下行数据出错!命令为:" + command.toString(), e))} ;
        }
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/TransparentDown.java
New file
@@ -0,0 +1,47 @@
package com.dy.common.mw.protocol.p206V1.parse;
import com.dy.common.mw.protocol.*;
import com.dy.common.mw.protocol.p206V1.CodeV1;
import com.dy.common.mw.protocol.p206V1.ParseParamsForDownV1;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.NumUtil;
/**
 * @Author: liurunyu
 * @Date: 2025/4/30 14:58
 * @Description 透传下行命令
 */
public class TransparentDown implements CodeParse {
    @Override
    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
        ParseParamsForDownV1 para = (ParseParamsForDownV1) params ;
        if(para.attachment == null || para.attachment.toString().length() == 0){
            throw new Exception("透传下行命令,数据项attachment不能为空") ;
        }
        if(!NumUtil.isHex(para.attachment.toString())){
            throw new Exception("透传下行命令,数据项attachment不是16进制") ;
        }
        byte[] bs = ByteUtil.hex2Bytes(para.attachment.toString()) ;
        MidResultToRtu midRs = new MidResultToRtu() ;
        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu返回命令结果 发向目的地web URL
        midRs.protocolName = para.protocolName ;//协议名称
        midRs.protocolVersion = para.protocolVersion; //协议版本号
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = para.attachment.toString() ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
        }
        return new MidResult[]{midRs} ;
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/DriverV2.java
@@ -1,7 +1,7 @@
package com.dy.common.mw.protocol.p206V2;
import com.dy.common.mw.protocol.*;
import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
import com.dy.common.mw.protocol.p206V2.parse.TransparentDown;
import com.dy.common.util.DateTime;
@AnnotationDriver(enable = true,
@@ -110,7 +110,7 @@
                    }
                    @Override
                    public void notify(NotifyInfo ...infos) {
                        notify.notify(rtuAddr, ProtocolConstantV206V1.protocolName, ProtocolConstantV206V1.protocolVer, infos);
                        notify.notify(rtuAddr, ProtocolConstantV206V2.protocolName, ProtocolConstantV206V2.protocolVer, infos);
                    }
                });
            }
@@ -168,5 +168,44 @@
        }
    }
    /**
     * 构造下行透传数据(命令)
     * @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))} ;
        }
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/TransparentDown.java
New file
@@ -0,0 +1,47 @@
package com.dy.common.mw.protocol.p206V2.parse;
import com.dy.common.mw.protocol.*;
import com.dy.common.mw.protocol.p206V2.CodeV2;
import com.dy.common.mw.protocol.p206V2.ParseParamsForDownV2;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.NumUtil;
/**
 * @Author: liurunyu
 * @Date: 2025/4/30 14:58
 * @Description 透传下行命令
 */
public class TransparentDown implements CodeParse {
    @Override
    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
        ParseParamsForDownV2 para = (ParseParamsForDownV2) params ;
        if(para.attachment == null || para.attachment.toString().length() == 0){
            throw new Exception("透传下行命令,数据项attachment不能为空") ;
        }
        if(!NumUtil.isHex(para.attachment.toString())){
            throw new Exception("透传下行命令,数据项attachment不是16进制") ;
        }
        byte[] bs = ByteUtil.hex2Bytes(para.attachment.toString()) ;
        MidResultToRtu midRs = new MidResultToRtu() ;
        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu返回命令结果 发向目的地web URL
        midRs.protocolName = para.protocolName ;//协议名称
        midRs.protocolVersion = para.protocolVersion; //协议版本号
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV2.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = para.attachment.toString() ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
        }
        return new MidResult[]{midRs} ;
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
@@ -1,8 +1,7 @@
package com.dy.common.mw.protocol.p206V202404;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.ByteUtilUnsigned;
import com.dy.common.util.CRC16;
@@ -17,8 +16,8 @@
     * @param ioSession 会话
     */
    public void setThisProtocolArr2IoSession(IoSession ioSession){
        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolName) ;
        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolVer) ;
        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V202404.protocolName) ;
        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V202404.protocolVer) ;
    }
    /**
     * 检查头
@@ -123,8 +122,8 @@
     * @throws Exception 异常
     */
    public int parseDataLen4Ug(byte[] bs)throws Exception{
        int len = ByteUtilUnsigned.bytes2Short_LE(bs, ProtocolConstantV206V2.UG_dataLenIndex_start) ;
        return len - ProtocolConstantV206V2.UG_lenCmd - ProtocolConstantV206V2.UG_lenRtuAddr ;
        int len = ByteUtilUnsigned.bytes2Short_LE(bs, ProtocolConstantV206V202404.UG_dataLenIndex_start) ;
        return len - ProtocolConstantV206V202404.UG_lenCmd - ProtocolConstantV206V202404.UG_lenRtuAddr ;
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java
@@ -1,8 +1,7 @@
package com.dy.common.mw.protocol.p206V202404;
import com.dy.common.mw.protocol.*;
import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
import com.dy.common.mw.protocol.p206V202404.parse.TransparentDown;
import com.dy.common.util.DateTime;
@AnnotationDriver(enable = true,
@@ -42,7 +41,7 @@
     */
    @Override
    public void scanAnnotationCode() throws Exception{
        super.doScanAnnotationCode(this, ProtocolConstantV206V1.protocolName, scanRootPackage) ;
        super.doScanAnnotationCode(this, ProtocolConstantV206V202404.protocolName, scanRootPackage) ;
    }
    /**
@@ -108,7 +107,7 @@
                    }
                    @Override
                    public void notify(NotifyInfo ...infos) {
                        notify.notify(rtuAddr, ProtocolConstantV206V1.protocolName, ProtocolConstantV206V1.protocolVer, infos);
                        notify.notify(rtuAddr, ProtocolConstantV206V202404.protocolName, ProtocolConstantV206V202404.protocolVer, infos);
                    }
                });
            }
@@ -167,4 +166,44 @@
    }
    /**
     * 构造下行透传数据(命令)
     * @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))} ;
        }
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java
@@ -2,7 +2,6 @@
import com.dy.common.mw.protocol.*;
import com.dy.common.mw.protocol.p206V1.DataV1;
import com.dy.common.mw.protocol.p206V202404.*;
import com.dy.common.mw.protocol.p206V202404.upVos.DataCd02Vo;
import com.dy.common.util.ByteUtil;
@@ -87,9 +86,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd02Vo cdData = new DataCd02Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        cdData.controllerType = ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V202404.dataIndex, 1) ;
        cdData.projectNo = 0 + bs[ProtocolConstantV206V202404.dataIndex + 1];
        cdData.status = ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V202404.dataIndex + 2, 1) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd10Vo cdData = new DataCd10Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_15_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_16_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_21_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_22_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_23_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_24_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_25_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_26_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_30_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_31_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_50_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd50Vo cdData = new DataCd50Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_55_Up.java
@@ -58,7 +58,7 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        int index = ProtocolConstantV206V202404.dataIndex ;
        String controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ;
@@ -78,7 +78,7 @@
                list.add(vo) ;
                vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ;
            }
            dV1.subData = list ;
            dV202404.subData = list ;
        }else{
            //无记录
        }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd56Vo cdData = new DataCd56Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_5B_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd80_5BVo cdData = new DataCd80_5BVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        GlParse.parseCd80And5B(bs, cdData);
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java
@@ -57,7 +57,7 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        int index = ProtocolConstantV206V202404.dataIndex ;
        String controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ;
@@ -77,7 +77,7 @@
                list.add(vo) ;
                vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ;
            }
            dV1.subData = list ;
            dV202404.subData = list ;
        }else{
            //无记录
        }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java
@@ -58,7 +58,7 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        int index = ProtocolConstantV206V202404.dataIndex ;
        String controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ;
@@ -78,7 +78,7 @@
                list.add(vo) ;
                vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ;
            }
            dV1.subData = list ;
            dV202404.subData = list ;
        }else{
            //无记录
        }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd68Vo cdData = new DataCd68Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_80_Up.java
@@ -92,9 +92,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd80_5BVo cdData = new DataCd80_5BVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        GlParse.parseCd80And5B(bs, cdData);
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java
@@ -95,9 +95,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd81Vo cdData = new DataCd81Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_83_Up.java
@@ -89,9 +89,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd83Vo cdData = new DataCd83Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_84_Up.java
@@ -91,9 +91,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd84Vo cdData = new DataCd84Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_85_Up.java
@@ -92,9 +92,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd85Vo cdData = new DataCd85Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        GlParse.parseCd85(bs, cdData) ;
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd86Vo cdData = new DataCd86Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_87_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd87Vo cdData = new DataCd87Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_88_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd88Vo cdData = new DataCd88Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_8A_Up.java
@@ -86,9 +86,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd8AVo cdData = new DataCd8AVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_92_A2_Up.java
@@ -62,9 +62,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd92_A2Vo cdData = new DataCd92_A2Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_93_A3_Up.java
@@ -62,9 +62,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd93_A3Vo cdData = new DataCd93_A3Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        GlParse.parseCd93A3(bs, cdData) ;
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_98_Up.java
@@ -54,9 +54,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_99_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_9A_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd9AVo cdData = new DataCd9AVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_9C_Up.java
@@ -53,9 +53,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/Cd_C2_Up.java
@@ -99,9 +99,9 @@
     * @throws Exception 异常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV1 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCdC2Vo cdData = new DataCdC2Vo(CodeV202404.getCodeName(dataCode)) ;
        dV1.subData = cdData ;
        dV202404.subData = cdData ;
        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/parse/TransparentDown.java
New file
@@ -0,0 +1,47 @@
package com.dy.common.mw.protocol.p206V202404.parse;
import com.dy.common.mw.protocol.*;
import com.dy.common.mw.protocol.p206V202404.CodeV202404;
import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.NumUtil;
/**
 * @Author: liurunyu
 * @Date: 2025/4/30 14:58
 * @Description 透传下行命令
 */
public class TransparentDown implements CodeParse {
    @Override
    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
        if(para.attachment == null || para.attachment.toString().length() == 0){
            throw new Exception("透传下行命令,数据项attachment不能为空") ;
        }
        if(!NumUtil.isHex(para.attachment.toString())){
            throw new Exception("透传下行命令,数据项attachment不是16进制") ;
        }
        byte[] bs = ByteUtil.hex2Bytes(para.attachment.toString()) ;
        MidResultToRtu midRs = new MidResultToRtu() ;
        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu返回命令结果 发向目的地web URL
        midRs.protocolName = para.protocolName ;//协议名称
        midRs.protocolVersion = para.protocolVersion; //协议版本号
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = para.attachment.toString() ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
        }
        return new MidResult[]{midRs} ;
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/NumUtil.java
@@ -43,13 +43,12 @@
        return true;
    }
    /**
     * 判断是否是整数
     * 判断是否为16进制
     * 
     * @param str String
     * @return boolean
     */
    public static boolean isHex(String str) {
        // 判断是否是数字
        if(str == null || str.trim().equals(""))
            return false ;
        if(str.length()%2 != 0)
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java
@@ -197,6 +197,19 @@
    }
    /**
     * 创建外部透传命令(发给控制器)
     * @param code 命令code
     * @return
     */
    protected Command createOuterTransparentCommand(String comId, String code) {
        Command com = new Command();
        com.id = comId;
        com.code = code ;
        com.type = CommandType.outerTransCommand;
        return com ;
    }
    /**
     * 创建内部
     * @param code 命令code
     * @return
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/WebDownTransparentComTask.java
New file
@@ -0,0 +1,69 @@
package com.dy.rtuMw.server.tasks;
import com.dy.common.mw.core.CoreTask;
import com.dy.common.mw.protocol.Command;
import com.dy.common.mw.protocol.Driver;
import com.dy.common.mw.protocol.MidResult;
import com.dy.common.mw.protocol.ProtocolCache;
import com.dy.rtuMw.server.ServerProperties;
import com.dy.rtuMw.server.forTcp.TcpSessionCache;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
 * 从web业务系统发向RTU的命令任务
 * @author Administrator
 *
 */
public class WebDownTransparentComTask extends CoreTask {
    private static Logger log = LogManager.getLogger(WebDownTransparentComTask.class.getName());
    @Override
    public Integer execute() {
        Command com = (Command)this.data ;
        try {
            log.info("下发远程透传命令" + com.getCode() + "的核心任务开始执行");
            this.deal(com);
        } catch (Exception e) {
            log.error("处理下行透传命令出错" + (e.getMessage()==null?"!":("," + e.getMessage())) ,e);
        }
        return null ;
    }
    /**
     * 处理命令
     * @param com 命令
     * @throws Exception
     */
    private void deal(Command com) throws Exception{
        String rtuAddr = com.getRtuAddr() ;
        //前面已经判断rtuAddr为空情况,至此其不为空
        Driver dri = null ;
        Object[] objs =  TcpSessionCache.getTcpProtocolNameVersion(rtuAddr) ;
        if(objs == null || objs.length == 0 || objs[0] == null){
            //RTU未曾上线
            int count = ProtocolCache.driverCount() ;
            if(count == 1){
                //只有一个协议
                dri = ProtocolCache.getFirstDriver() ;
            }
        }else{
            String protocolName = (String)objs[0];
            com.protocolVersion = (Short)objs[1];
            dri = ProtocolCache.getDriver(protocolName, com.protocolVersion) ;
        }
        if(dri == null){
            log.error("严重错误,未能得到RTU(" + rtuAddr + ")驱动类实例!");
        }else{
            MidResult[] actions = dri.transparentCommand(ServerProperties.isLowPower, com)  ;
            log.info("下发远程透传命令" + com.getCode() + "由协议驱动处理完成");
            if(actions != null){
                for(MidResult act : actions){
                    act.action();
                }
            }
        }
    }
}
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
@@ -14,6 +14,7 @@
import com.dy.common.mw.protocol.CommandType;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.rtuMw.server.tasks.WebDownTransparentComTask;
import com.dy.rtuMw.server.upgrade.UpgradeUnit;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
@@ -233,11 +234,18 @@
                return BaseResponseUtils.buildError(ReturnCommand.errored("处理内部命令出错" + (e.getMessage() == null?"":("," + e.getMessage())), com.getId(), com.getCode()) );
            }
        }else if(commandType.equals(CommandType.outerCommand)){
            //发向RTU的外部命令,异步处理,web端jroups成员同步得到命令处理结果,但构造命令及下发命令和命令结果接收要异步得到
            //发向RTU的外部命令
            try{
                return this.dealOuterCommand(com) ;
            }catch(Exception e){
                return BaseResponseUtils.buildError(ReturnCommand.errored("处理发向RTU的外部命令出错" + (e.getMessage() == null?"":("," + e.getMessage())), com.getId(), com.getCode()) );
            }
        }else if(commandType.equals(CommandType.outerTransCommand)){
            //发向RTU的外部透传命令
            try{
                return this.dealOutTransparentCommand(com) ;
            }catch(Exception e){
                return BaseResponseUtils.buildError(ReturnCommand.errored("处理发向RTU的外部透传命令出错" + (e.getMessage() == null?"":("," + e.getMessage())), com.getId(), com.getCode()) );
            }
        }else if(commandType.equals(CommandType.resultCommand)){
            return BaseResponseUtils.buildError(ReturnCommand.errored("出错,通信中间件不接结果类型的命令!", com.getId(), com.getCode()));
@@ -293,4 +301,39 @@
        return BaseResponseUtils.buildSuccess(ReturnCommand.successed("命令已接受,即将构造并下发命令。", command.getId(), command.getCode()));
    }
    /**
     * 处理发向RTU的外部命令
     * @return 结果
     */
    private BaseResponse<Command> dealOutTransparentCommand(Command command){
        String rtuAddr = command.getRtuAddr() ;
        if(rtuAddr == null || rtuAddr.trim().equals("")){
            return BaseResponseUtils.buildError(ReturnCommand.errored("出错,RTU地址为空!", command.getId(), command.getCode())) ;
        }
        rtuAddr = rtuAddr.trim() ;
        Boolean onLine = TcpSessionCache.isConnect(rtuAddr);
        if(onLine == null){
            return BaseResponseUtils.buildError(ReturnCommand.errored("出错,RTU(地址=" + rtuAddr + ")未上线!", command.getId(), command.getCode())) ;
        }else if(!onLine.booleanValue()){
            if(!ServerProperties.isLowPower){
                return BaseResponseUtils.buildError(ReturnCommand.errored("出错,RTU(地址=" + rtuAddr + ")离线!", command.getId(), command.getCode())) ;
            }
        }
        //生成异步任务
        WebDownTransparentComTask task = new WebDownTransparentComTask() ;
        task.data = command ;
        try{
            log.info("构造下发远程透传命令" + command.getCode() + "的核心任务,并放入任务队列中");
            CoreUnit.getInstance().pushCoreTask(task);
        }catch(Exception e){
            log.error(e.getMessage(), e);
            return BaseResponseUtils.buildError(ReturnCommand.successed("透传命令处理失败" + e.getMessage(), command.getId(), command.getCode())) ;
        }
        return BaseResponseUtils.buildSuccess(ReturnCommand.successed("透传命令已接受,即将构造并下发命令。", command.getId(), command.getCode()));
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java
New file
@@ -0,0 +1,25 @@
package com.dy.pipIrrRemote.monitor;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Author: liurunyu
 * @Date: 2025/4/30 16:08
 * @Description
 */
@Slf4j
@Tag(name = "远程透传命令", description = "远程透传命令")
@RestController
@RequestMapping(path = "command")
@RequiredArgsConstructor
public class ComTransCtrl {
    private final ComTransSv comSv;
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransSv.java
New file
@@ -0,0 +1,29 @@
package com.dy.pipIrrRemote.monitor;
import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
 * @Author: liurunyu
 * @Date: 2025/4/30 16:11
 * @Description
 */
@Slf4j
@Service
public class ComTransSv extends Web2RtuMw {
    @Autowired
    private PrIntakeMapper prIntakeMapper;
    @Autowired
    private Environment env;
    @Autowired
    private RestTemplate restTemplate;
}