zhubaomin
2025-04-17 7df8ed14d605bcc731341ff12349bc117714b69e
pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java
New file
@@ -0,0 +1,79 @@
package com.dy.simRtu.tcpClient.downData;
import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.CreateRandom;
import com.dy.simRtu.ServerProperties;
import com.dy.simRtu.tcpClient.upData.*;
/**
 * @Author: liurunyu
 * @Date: 2024/11/18 10:57
 * @Description 中间件的下行数据
 */
public class DownData {
    private static int count9602 = 0;
    public void parseData(byte[] bs){
        if(bs != null && bs.length > 0){
            if(bs.length >= (ProtocolConstantV206V1.ctrlIndex)
                    && bs[0] == ProtocolConstantV206V1.P_Head_Byte
                    && bs[2] == ProtocolConstantV206V1.P_Head_Byte){
                this.dealP206V1(bs);
            }else if(bs.length >= (ProtocolConstantV206V1.UG_codeIndex)
                    && bs[0] == ProtocolConstantV206V1.UG_P_Head_Byte
                    && bs[3] == ProtocolConstantV206V1.UG_P_Head_Byte){
                this.dealUpgrade(bs);
            }
        }
    }
    private void dealP206V1(byte[] bs){
        //应该是链路检测数据
    }
    private void dealUpgrade(byte[] bs){
        String cdPre = ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.UG_codeIndex, 1);
        if(cdPre.equals("16")){
            //升级功能码
            UpHeartBeat.upHeartBeat = false ;//禁止上行心跳
            if(bs.length >= ProtocolConstantV206V1.UG_lenHead2Cmd + 1){
                String cdSuf = ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V1.UG_codeIndex + 1, 1);
                String cd = cdPre + cdSuf;
                if(cd.equals("1601")){
                    //升级配置
                    UpCd9601.upData() ;
                }else if(cd.equals("1602")){
                    //升级数据
                    count9602 ++ ;
                    if(ServerProperties.argOneDie){
                        UpHeartBeat.upHeartBeat = true ;//使能上行心跳
                    }else{
                        if(ServerProperties.argMultiDie){
                            if(count9602 > 10){
                                int random =  CreateRandom.create_between(10, 100) ;
                                if(random > 90){
                                    UpHeartBeat.upHeartBeat = true ;//使能上行心跳
                                }else{
                                    UpCd9602.upData() ;
                                }
                            }else{
                                UpCd9602.upData() ;
                            }
                        }else{
                            UpCd9602.upData() ;
                        }
                    }
                }else if(cd.equals("1603")){
                    //升级校验
                    UpCd9603.upData() ;
                }else if(cd.equals("1600")){
                    //升级复位
                    UpCd9600.upData() ;
                    UpHeartBeat.upHeartBeat = true ;//不上行心跳
                }
            }
        }
    }
}