liurunyu
2025-01-21 95e2f4d9b37f4fd7e99d67976a811fba79427a3e
通信中间件,重新编写下发命令是否可执行的判断逻辑
2个文件已修改
19 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandObj.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java
@@ -25,7 +25,7 @@
    
    public boolean isSendFirst;//优先其他发送,例如各命令的应答
    public boolean isQuickSend;//速发命令,即不受下发数据时间间隔限制(通信中间件为低功耗时起作用)
    public boolean isFastCom;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制(如升级命令)
    public boolean isFastCom;//快速命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制(如升级命令)
    //public Object param ;//缓存一些数据,例如为兼容王工(江海)协议与靳总协议(虚拟IC卡编号长度不一致),把不兼容的虚拟IC卡编号的前半部分放入此处
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandObj.java
@@ -72,15 +72,22 @@
            return false ;
        }
        Long lastSendStamp = tcpSe.lastDownComTime ;
        Long lastDownComTime = tcpSe.lastDownComTime ;
        boolean nowSend = false ;
        if(this.result.isQuickSend || lastSendStamp == null || (this.result.isFastCom && now - lastSendStamp >= ServerProperties.fastCommandSendInterval)){
            //未收到命令结果,未达到最大发送次数,RTU在线,当前是速发命令,或者是快速命令超过命令下发间隔,以上满足发送命令条件,执行发送命令
        if(this.result.isQuickSend){
            //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,当前是速发命令,满足发送命令条件,执行发送命令
            nowSend = true ;
        }else if(this.result.isQuickSend || lastSendStamp == null || (now - lastSendStamp >= ServerProperties.commandSendInterval)) {
            //未收到命令结果,未达到最大发送次数,RTU在线,当前是速发命令,或者是命令超过命令下发间隔,以上满足发送命令条件,执行发送命令
        }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){
            tcpSe.ioSession.write(this.result.downBuffer) ;
            tcpSe.lastDownComTime = now ;