From 959dcca95276888cd9c092d93d276ef9aa580aef Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 30 四月 2025 16:26:19 +0800
Subject: [PATCH] 1、增加远程透传命令; 2、表阀一体机协议优化;

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java |  248 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 248 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java
new file mode 100644
index 0000000..d9dda58
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java
@@ -0,0 +1,248 @@
+package com.dy.rtuMw.server.upgrade;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.CommandType;
+import com.dy.common.mw.protocol.MidResult;
+import com.dy.common.mw.protocol.MidResultFromRtu;
+import com.dy.common.mw.protocol.p206V1.upVos.DataCd960XVo;
+import com.dy.common.softUpgrade.Com1601Vo;
+import com.dy.common.softUpgrade.state.UpgradeRtu;
+import com.dy.common.softUpgrade.state.UpgradeTaskVo;
+import com.dy.common.util.Callback;
+import com.dy.common.util.DateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/4 15:00
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+public class UpgradeRtuDev extends UpgradeRtu {
+
+    @JSONField(serialize = false)
+    private Integer failTryTimes ;//鍗囩骇澶辫触鍚庯紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛�0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
+
+    @JSONField(serialize = false)
+    public UpgradeTaskVo taskVo ;//鍗囩骇浠诲姟鍊煎璞�
+
+    private UpgradeRtuDev(){
+    }
+
+    public UpgradeRtuDev(UpgradeTaskVo taskVo, Integer failTryTimes , String rtuAddr, int totalPackage) {
+        super();
+        this.taskVo = taskVo ;
+        this.failTryTimes = failTryTimes ;
+        this.rtuAddr = rtuAddr ;
+        this.state = STATE_UNSTART ;
+        this.totalPackage = totalPackage ;
+        this.currentPackage = 0 ;
+        this.currentRamAddr = 0 ;
+        this.lastDownDt = "" ;
+        this.lastDownDtAt = 0L ;
+        this.reTryTimes = 0 ;
+        this.isOver = false ;
+    }
+
+    public UpgradeRtuDev(UpgradeTaskVo taskVo, Integer failTryTimes, String rtuAddr, int totalPackage, int state) {
+        super();
+        this.taskVo = taskVo ;
+        this.failTryTimes = failTryTimes ;
+        this.rtuAddr = rtuAddr ;
+        this.state = state ;
+        this.totalPackage = totalPackage ;
+        this.currentPackage = 0 ;
+        this.currentRamAddr = 0 ;
+        this.lastDownDt = "" ;
+        this.lastDownDtAt = 0L ;
+        this.reTryTimes = 0 ;
+        this.isOver = false ;
+    }
+
+    /**
+     * 瑙﹀彂鍗囩骇
+     * @param code
+     * @param softData
+     * @param callbackCom
+     * @param objects
+     */
+    @Override
+    public void trigger(String code, String protocolName, Short protocolVersion, byte[][] softData, Callback callbackCom, Object ...objects){
+        if(!this.isOver){
+            //鍗囩骇鏈畬鎴�
+            if(this.state == STATE_OFFLINE || this.state == STATE_UNSTART){
+                //褰撳墠鏈紑濮嬪崌绾ц繃绋嬶紝涓嬪彂鍗囩骇閰嶇疆鎸囦护
+                this.setStateAtSendCom1601Time();
+                callbackCom.call(createCommand1601(protocolName, protocolVersion));
+            }else if(this.state == STATE_RUNNING){
+                //褰撳墠鍗囩骇杩囩▼涓�
+                if(code.equals(UpgradeCode.cd_9601)){
+                    //涓嬪彂閰嶇疆杩斿洖
+                    this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+                    this.lastDownDtAt = System.currentTimeMillis() ;
+                    callbackCom.call(createCommand1602(protocolName, protocolVersion, currentPackage, currentRamAddr, softData));//涓嬪彂鏁版嵁鍖呮寚浠�
+                }else if(code.equals(UpgradeCode.cd_9602)){
+                    //涓嬪彂鏁版嵁鍖呰繑鍥�
+                    currentPackage++ ;
+                    currentRamAddr += RAMADDRADD ;
+                    if(currentPackage < totalPackage){
+                        this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+                        this.lastDownDtAt = System.currentTimeMillis() ;
+                        callbackCom.call(createCommand1602(protocolName, protocolVersion, currentPackage, currentRamAddr, softData));
+                    }else{
+                        this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+                        this.lastDownDtAt = System.currentTimeMillis() ;
+                        callbackCom.call(createCommand1603(protocolName, protocolVersion));//涓嬪彂鏍¢獙鎸囦护
+                    }
+                }else if(code.equals(UpgradeCode.cd_9603)){
+                    //涓嬪彂鏍¢獙杩斿洖
+                    this.setStateAtReceiveRes9603Time(objects) ;
+                    callbackCom.call(createCommand1600(protocolName, protocolVersion));//涓嬪彂澶嶄綅鎸囦护锛屾鎸囦护鏃犲簲绛�
+                }else{
+                    //褰撳墠鏄崌绾т腑鐘舵�侊紝骞朵笖鍗囩骇鏈畬鎴愶紝鏀跺埌浜嗛潪960X绯诲垪鍔熻兘鐮侊紝鍒欏崌绾уけ璐�
+                    if(currentPackage == 0 || currentPackage == 1){
+                        //1鍖呮锛屽崌绾уけ璐�
+                        this.state = STATE_FAILONE ;
+                    }else{
+                        //闈�1鍖呮锛屽崌绾уけ璐�
+                        this.state = STATE_FAIL ;
+                    }
+                }
+            }else if(this.state == STATE_FAILONE || this.state == STATE_FAIL){
+                //涓婃璁剧疆浜嗗け璐ョ姸鎬侊紝骞朵笖鍗囩骇鏈畬鎴愶紝鏀跺埌浜嗛潪960X绯诲垪鍔熻兘鐮侊紝鍒欏崌绾уけ璐�
+                if(this.reTryTimes < this.failTryTimes){
+                    //閲嶈瘯娆℃暟鏈揪鍒颁笂闄愶紝缁х画閲嶈瘯
+                    this.reTryTimes += 1 ;
+                    this.setStateAtSendCom1601Time();
+                    callbackCom.call(createCommand1601(protocolName, protocolVersion));//涓嬪彂閰嶇疆鎸囦护
+                }else{
+                    //鍗囩骇澶辫触锛屽苟涓旈噸璇曟鏁拌揪鍒颁笂闄愶紝寮哄埗璁剧疆鍗囩骇瀹屾垚
+                    this.isOver = true ;
+                }
+            }else if(this.state == STATE_SUCCESS){
+                //鍗囩骇鎴愬姛鎬侊紝涓嶄細鍑虹幇姝ゆ儏鍐碉紝鍥犱负璁剧疆涓烘垚鍔熸�佹椂锛屽崌绾х粨鏉熷睘鎬sOver璁剧疆涓簍rue浜�
+                //涓哄畨鍏ㄨ锛岃繖閲屽啀璁剧疆涓虹粨鏉熸��
+                this.isOver = true ;
+            }else if(this.state == STATE_FAILOFFLINE){
+                //宸茬粡琚叾浠栭�昏緫妯″潡寮哄埗璁剧疆鎴愮绾垮け璐ユ�佷簡锛屼笉浼氬嚭鐜版鎯呭喌锛屽洜涓鸿缃负绂荤嚎澶辫触鎬佹椂锛屽崌绾х粨鏉熷睘鎬sOver璁剧疆涓簍rue浜�
+                //杩欓噷涓嶅啀鏈変綔涓�
+                //涓哄畨鍏ㄨ锛岃繖閲屽啀璁剧疆涓虹粨鏉熸��
+                this.isOver = true ;
+            }else{
+                //鍏朵粬鐘舵�侊紙娌℃湁鍏朵粬鎬佷簡锛岄櫎闈炲啀璁捐寮�鍙戞椂澧炲姞浜嗙姸鎬侊級
+                //涓哄畨鍏ㄨ锛岃繖閲屽啀璁剧疆涓虹粨鏉熸��
+                this.isOver = true ;
+            }
+        }else{
+            //鍗囩骇瀹屾垚锛屾棤涓氬姟閫昏緫
+        }
+    }
+
+    /**
+     * 璁剧疆鍙戦�侀厤缃懡浠ゆ椂鍒荤殑鐘舵��
+     */
+    private void setStateAtSendCom1601Time(){
+        this.state = STATE_RUNNING;//鍗囩骇杩涜涓�
+        this.currentPackage = 0 ;
+        this.currentRamAddr = 0 ;
+        this.isOver = false ;
+        this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+        this.lastDownDtAt = System.currentTimeMillis() ;
+    }
+
+    /**
+     * 璁剧疆1603鎸囦护杩斿洖鏃跺埢鐨勭姸鎬�
+     */
+    private void setStateAtReceiveRes9603Time(Object ...objects){
+        this.isOver = true ;//鍗囩骇瀹屾垚
+        this.state = STATE_SUCCESS ;
+        if(objects != null && objects.length > 0){
+            if(objects[0] instanceof com.dy.common.mw.protocol.p206V1.upVos.DataCd960XVo){
+                com.dy.common.mw.protocol.p206V1.upVos.DataCd960XVo vo = (com.dy.common.mw.protocol.p206V1.upVos.DataCd960XVo)objects[0] ;
+                if(vo != null && !vo.success){
+                    this.state = STATE_FAILRTU ;
+                }
+            } else if(objects[0] instanceof com.dy.common.mw.protocol.p206V2.upVos.DataCd960XVo){
+                com.dy.common.mw.protocol.p206V2.upVos.DataCd960XVo vo = (com.dy.common.mw.protocol.p206V2.upVos.DataCd960XVo)objects[0] ;
+                if(vo != null && !vo.success){
+                    this.state = STATE_FAILRTU ;
+                }
+            } else if(objects[0] instanceof com.dy.common.mw.protocol.p206V202404.upVos.DataCd960XVo){
+                com.dy.common.mw.protocol.p206V202404.upVos.DataCd960XVo vo = (com.dy.common.mw.protocol.p206V202404.upVos.DataCd960XVo)objects[0] ;
+                if(vo != null && !vo.success){
+                    this.state = STATE_FAILRTU ;
+                }
+            }
+        }
+        this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
+        this.lastDownDtAt = System.currentTimeMillis() ;
+    }
+
+    @Override
+    public Command createCommand1601(String protocolName, Short protocolVersion){
+        Command com = new Command() ;
+        com.id = Command.defaultId ;
+        com.type = CommandType.outerCommand ;
+        com.rtuAddr = this.rtuAddr ;
+        com.code = UpgradeCode.cd_1601 ;
+        com.protocol = protocolName ;
+        com.protocolVersion = protocolVersion ;
+        com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ;
+
+        Com1601Vo vo = new Com1601Vo() ;
+        vo.softStoreAddr = this.taskVo.softStoreAddr ;
+        vo.softStartAddr = this.taskVo.softStartAddr ;
+        vo.totalByte =  this.taskVo.softBytesCalculate ;
+        vo.softCrc = this.taskVo.softByteSrc16;
+        com.param = vo ;
+        return com ;
+    }
+
+    @Override
+    public Command createCommand1602(String protocolName, Short protocolVersion, int currentPackage, Integer ramAddr, byte[][] softData){
+        Command com = new Command() ;
+        com.id = Command.defaultId ;
+        com.type = CommandType.outerCommand ;
+        com.rtuAddr = this.rtuAddr ;
+        com.code = UpgradeCode.cd_1602 ;
+        com.protocol = protocolName ;
+        com.protocolVersion = protocolVersion ;
+
+        com.param = ramAddr ;
+
+        if(currentPackage < softData.length){
+            com.attachment = softData[currentPackage] ;
+        }
+        com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ;
+        return com ;
+    }
+
+    @Override
+    public Command createCommand1603(String protocolName, Short protocolVersion){
+        Command com = new Command() ;
+        com.id = Command.defaultId ;
+        com.type = CommandType.outerCommand ;
+        com.rtuAddr = this.rtuAddr ;
+        com.code = UpgradeCode.cd_1603 ;
+        com.protocol = protocolName ;
+        com.protocolVersion = protocolVersion ;
+        com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ;
+        return com ;
+    }
+
+    @Override
+    public Command createCommand1600(String protocolName, Short protocolVersion){
+        Command com = new Command() ;
+        com.id = Command.defaultId ;
+        com.type = CommandType.outerCommand ;
+        com.rtuAddr = this.rtuAddr ;
+        com.code = UpgradeCode.cd_1600 ;
+        com.protocol = protocolName ;
+        com.protocolVersion = protocolVersion ;
+        com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ;
+        return com ;
+    }
+}

--
Gitblit v1.8.0