liurunyu
2025-01-22 ec67f42b0c95e1967def5ce9c86f9ca10df53505
通信中间件,下行命令增加一倒计次属性,以实现延迟发送命令。
7个文件已修改
45 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1601_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandObj.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java
@@ -27,6 +27,8 @@
    public boolean isQuickSend;//速发命令,即不受下发数据时间间隔限制(通信中间件为低功耗时起作用)
    public boolean isFastCom;//快速命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制(如升级命令)
    public int countdown4Send;////倒计时,当此值为小于等于0时才会下发,否则逐次减1,目的是延迟下发命令,使其他命令可以提前发送
    //public Object param ;//缓存一些数据,例如为兼容王工(江海)协议与靳总协议(虚拟IC卡编号长度不一致),把不兼容的虚拟IC卡编号的前半部分放入此处
    public MidResultToRtu(){
@@ -35,6 +37,7 @@
        isSendFirst = false ;
        isQuickSend = false ;
        isFastCom = false ;
        countdown4Send = 0 ;
    }
    @Override
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/Cd_1601_Down.java
@@ -38,6 +38,7 @@
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        midRs.countdown4Send = 10 ;//倒计时,当此值为小于等于0时才会下发,否则逐次减1,目的是延迟下发命令,使其他命令可以提前发送
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1600_Down.java
@@ -36,6 +36,8 @@
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java
@@ -37,6 +37,9 @@
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        midRs.countdown4Send = 1 ;//倒计时,当此值为小于等于0时才会下发,否则逐次减1
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1602_Down.java
@@ -36,6 +36,8 @@
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1603_Down.java
@@ -36,6 +36,8 @@
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandObj.java
@@ -72,21 +72,25 @@
            return false ;
        }
        Long lastDownComTime = tcpSe.lastDownComTime ;
        boolean nowSend = false ;
        if(this.result.isQuickSend){
            //在命令构建时,只有在低功耗情况下,才会把isQuickSend付值为true
            //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,当前是速发命令,满足发送命令条件,执行发送命令
            nowSend = true ;
        }else if(lastDownComTime == null){
            //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,当前RTU上线以来未曾下发过命令,满足发送命令条件,执行发送命令
            nowSend = true ;
        }else if(this.result.isFastCom && (now - lastDownComTime) >= ServerProperties.fastCommandSendInterval){
            //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,RTU上线以来曾下发过命令,当前命令是快速命令且超过命令下发间隔,满足发送命令条件,执行发送命令
            nowSend = true ;
        }else if(!this.result.isFastCom && (now - lastDownComTime) >= ServerProperties.commandSendInterval){
            //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,RTU上线以来曾下发过命令,当前命令非快速命令,RTU下发命令间隔超过命令下发间隔,满足发送命令条件,执行发送命令
            nowSend = true ;
        if(this.result.countdown4Send > 0){
            this.result.countdown4Send -= 1 ;
        }else{
            Long lastDownComTime = tcpSe.lastDownComTime ;
            if(this.result.isQuickSend){
                //在命令构建时,只有在低功耗情况下,才会把isQuickSend付值为true
                //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,当前是速发命令,满足发送命令条件,执行发送命令
                nowSend = true ;
            }else if(lastDownComTime == null){
                //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,当前RTU上线以来未曾下发过命令,满足发送命令条件,执行发送命令
                nowSend = true ;
            }else if(this.result.isFastCom && (now - lastDownComTime) >= ServerProperties.fastCommandSendInterval){
                //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,RTU上线以来曾下发过命令,当前命令是快速命令且超过命令下发间隔,满足发送命令条件,执行发送命令
                nowSend = true ;
            }else if(!this.result.isFastCom && (now - lastDownComTime) >= ServerProperties.commandSendInterval){
                //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,RTU上线以来曾下发过命令,当前命令非快速命令,RTU下发命令间隔超过命令下发间隔,满足发送命令条件,执行发送命令
                nowSend = true ;
            }
        }
        if(nowSend){