DevShivmohan / Learning-everything

Learning for developer only
0 stars 1 forks source link

Shiv important docs link #28

Open DevShivmohan opened 1 year ago

DevShivmohan commented 1 year ago

Shivmohan important drive link -

Six semester doc - Link

Updated resume link - Shiv_resume

DSA learning and interview questions docs - Link

Irctc-tickets - Shiv personal docs

DevShivmohan commented 1 year ago

/*
 * ============================================================================
 * Copyright (c) 2019 Lattice Innovation.
 * Created  : 9/7/19 12:23 PM
 * Modified : 9/7/19 12:23 PM
 * Author   : Anuj Pathak
 * ============================================================================
 */

package com.lattice.spectrum.ModeLibrary.Managers.ElementryManagers;

import com.lattice.spectrum.ComLibrary.ComLib;
import com.lattice.spectrum.ComLibrary.MsgHandler.RxListener;
import com.lattice.spectrum.ComLibrary.utility.sLog;
import com.lattice.spectrum.ComLibrary.utility.ufx;
import com.lattice.spectrum.ModeLibrary.Managers.run.ModeEvent;
import com.lattice.spectrum.ModeLibrary.Managers.run.ModeListener;
import com.lattice.spectrum.ModeLibrary.ModeProp.AuxProp;
import com.lattice.spectrum.ModeLibrary.ModeProp.ModeProp;
import com.lattice.spectrum.ModeLibrary.ModeProp.type.OperationMode;
import com.lattice.spectrum.ModeLibrary.ModeProp.type.TotalizerMode;
import org.lattice.spectrum_backend_final.dao.constants.AlarmConstants;
import org.lattice.spectrum_backend_final.dao.constants.ApiConstant;
import org.lattice.spectrum_backend_final.dao.manager.livedata.LiveDataManager;

import static com.lattice.spectrum.ComLibrary.StaticDefinitions.ScaleID.FEED_SCALE;
import static com.lattice.spectrum.ComLibrary.StaticDefinitions.ScaleID.PERMEATE_SCALE;

/**
 * used in D and CFC mode to maintain feed wt
 * detect feed to empty
 */
public class FeedWtManger {
    /**
     *
     */
    private static FeedWtManger feedWtManger;
    private double auxPumpFlowRate;
    private boolean startFlag;
    private long auxPumpInitCounter;
    private boolean isAuxInitStarted;

    public static FeedWtManger get() {
        if (feedWtManger == null) {
            feedWtManger = new FeedWtManger();
        }
        return feedWtManger;
    }

    /**
     *
     */
    private int auxId;
    private AuxProp auxProp;
    private double feedStartWt;
    private ModeListener superCallback;

    private ModeProp modeProp;

    public void start(AuxProp prop, ModeListener superCallback, double feedStartWt, int auxID, TotalizerMode totalizerMode,ModeProp... modeProps) {
        this.auxProp = prop;
        this.superCallback = superCallback;
        this.feedStartWt = feedStartWt;
        this.auxId = auxID;
        if(modeProps.length>0)
            this.modeProp=modeProps[0];
        else if(modeProp!=null)
            modeProp.setStageId(9);
        auxPumpInitCounter=0;
        isAuxInitStarted=true;
        if(totalizerMode == TotalizerMode.ENDPOINT){
            feedWtKonduitListener.startRxListening();
        }else {
            feedWtListener.startRxListening();
        }
        sLog.d(this, "Improved log Start Endpoint type " + totalizerMode);
        startFlag =false;
    }

    public void stop() {
        feedWtListener.stopRxListening();
        feedWtKonduitListener.stopRxListening();
        ComLib.get().getAuxPump().setAuxPumpRPM(auxId, auxProp.getTypeID(), 0);
        this.auxPumpInitCounter=0;
        isAuxInitStarted=false;
        sLog.d(this, " Stop" );
    }

    private final RxListener feedWtListener = new RxListener(ComLib.get().getScaleInfo()) {

        private final double kp = 0.25;
        private final double kd = 0.25;
        private final double ki = 0.0125;
        private double errConstant, lastErr;
        private int feedEmptyCounter;
        private double lastTotalScaleWt;
        private boolean isFeedEmptyDetected;

        @Override
        public void reset() {
            isFeedEmptyDetected=false;
            errConstant = 0;
            lastErr = 0;
            feedEmptyCounter = 0;
            lastTotalScaleWt = ComLib.get().getScaleInfo().scaleReading_gm(FEED_SCALE) + ComLib.get().getScaleInfo().scaleReading_gm(PERMEATE_SCALE);
        }

        @Override
        public void OnReceive() {
            double fw = ComLib.get().getScaleInfo().scaleReading_gm(FEED_SCALE);
            if(fw<feedStartWt){
                startFlag=true;
            }
            if(startFlag) {
                double feedErr = (feedStartWt - fw);
                double errRate = feedErr - lastErr;
                lastErr = feedErr;
                errConstant += feedErr;
                if (fw >= feedStartWt)
                    errConstant = 0;
                auxPumpFlowRate = (kp * feedErr + kd * errRate + ki * errConstant) * 60;
                int auxPumpRPM = (int) ufx.boundInRange(auxPumpFlowRate * 100 / auxProp.getTubeFlowConversion(), 0, auxProp.getMaxRPM());
                ComLib.get().getAuxPump().setAuxPumpRPM(auxId, auxProp.getTypeID(), auxPumpRPM);
                if(isAuxInitStarted)
                    auxPumpInitCounter++;
                if(auxPumpInitCounter>10){
                    isAuxInitStarted=false;
                    if(ComLib.get().getAuxPump().curAuxRPM(auxId)==0 && auxPumpRPM>0){
                        ComLib.get().getAuxPump().setAuxPumpRPM(auxId, auxProp.getTypeID(), 0);
                        isAuxInitStarted=true;
                        auxPumpInitCounter=0;
                    }
                }
                sLog.d(this, " feed Wt - " + feedStartWt+" ,aux RPM actual ="+ComLib.get().getAuxPump().curAuxRPM(auxId)+" , auxPumpRPM="+auxPumpRPM+" , isAuxInitStarted="+isAuxInitStarted+" ,auxPumpInitCounter="+auxPumpInitCounter+", auxConnected="+ComLib.get().getAuxPump().isAuxConnected(auxId)+", actualFeedScale="+ComLib.get().getScaleInfo().scaleReading_gm(FEED_SCALE));
                sLog.d(this,"feedWeightOverrideOrNot="+LiveDataManager.getInstance().getFeedWeightOverrideOrNot());
                double totalScaleWt = LiveDataManager.getInstance().getChangeAbleFeedWeight() + ComLib.get().getScaleInfo().scaleReading_gm(PERMEATE_SCALE);
                sLog.d(FeedWtManger.this, auxPumpRPM + ">"+(0.5 * auxProp.getMaxRPM())
                        + " & " + totalScaleWt + ">" + 1.12 * LiveDataManager.getInstance().getFeedWeightOverrideOrNot()
                        + " & " + (totalScaleWt - lastTotalScaleWt) + "<" + (auxPumpRPM * auxProp.getTubeFlowConversion() / (400 * 60)));
                if (LiveDataManager.getInstance().isVisited() && (auxPumpRPM > 0.5 * auxProp.getMaxRPM())
                        && ((totalScaleWt) > 1.12 * LiveDataManager.getInstance().getFeedWeightOverrideOrNot())
                        && ((totalScaleWt - lastTotalScaleWt) < auxPumpRPM * auxProp.getTubeFlowConversion() / (400 * 60))) {
                    feedEmptyCounter++;
                    sLog.d(FeedWtManger.this, "Feed to empty counter-"+feedEmptyCounter);
                    if (feedEmptyCounter > 9) {
                        sLog.d(FeedWtManger.this, "Feed to empty detected");
                        // in CFC mode stop
                        if(modeProp!=null && modeProp.getSubRunModeProp(0).getMode()==OperationMode.CF_MODE && modeProp.getStageId()==0){
                            stop();
                            superCallback.callback(ModeEvent.FEED_TO_EMPTY_DETECTED);
                        }else {
                            // except CFC mode
                            isFeedEmptyDetected = true;
                            ComLib.get().getPumpAlarmIndicatorHandler().send(2, AlarmConstants.FEED_TO_EMPTY_DETECTED);
                            superCallback.callback(ModeEvent.FEED_TO_EMPTY_DETECTED);
                        }
                    }
                } else {
                    feedEmptyCounter = 0;
                    if (isFeedEmptyDetected) {
                        isFeedEmptyDetected = false;
                        ComLib.get().getPumpAlarmIndicatorHandler().send(1, ApiConstant.BLANK_QUOTE);
                    }
                }
                lastTotalScaleWt = totalScaleWt;
            }
        }
    };

    private final RxListener feedWtKonduitListener = new RxListener(ComLib.get().getKonduitInfo()) {

        private final double kp = 0.25;
        private final double kd = 0.25;
        private final double ki = 0.0125;
        private double errConstant, lastErr;
        private int feedEmptyCounter;
        private double lastTotalScaleWt;
        private boolean isFeedEmptyDetected;

        @Override
        public void reset() {
            isFeedEmptyDetected=false;
            errConstant = 0;
            lastErr = 0;
            feedEmptyCounter = 0;
            lastTotalScaleWt = ComLib.get().getScaleInfo().scaleReading_gm(FEED_SCALE) +FlowMeterManager.get().getVolume(0);
        }

        @Override
        public void OnReceive() {
            double fw = ComLib.get().getScaleInfo().scaleReading_gm(FEED_SCALE);
            if(fw<feedStartWt){
                startFlag=true;
            }
            if(startFlag) {
                double feedErr = (feedStartWt - fw);
                double errRate = feedErr - lastErr;
                lastErr = feedErr;
                errConstant += feedErr;
                if (fw >= feedStartWt)
                    errConstant = 0;
                auxPumpFlowRate = (kp * feedErr + kd * errRate + ki * errConstant) * 60;
                int auxPumpRPM = (int) ufx.boundInRange(auxPumpFlowRate * 100 / auxProp.getTubeFlowConversion(), 0, auxProp.getMaxRPM());
                ComLib.get().getAuxPump().setAuxPumpRPM(auxId, auxProp.getTypeID(), auxPumpRPM);
                if(isAuxInitStarted)
                    auxPumpInitCounter++;
                if(auxPumpInitCounter>10){
                    isAuxInitStarted=false;
                    if(ComLib.get().getAuxPump().curAuxRPM(auxId)==0 && auxPumpRPM>0){
                        ComLib.get().getAuxPump().setAuxPumpRPM(auxId, auxProp.getTypeID(), 0);
                        isAuxInitStarted=true;
                        auxPumpInitCounter=0;
                    }
                }
                sLog.d(this, " feed Wt - " + feedStartWt+" ,aux RPM actual ="+ComLib.get().getAuxPump().curAuxRPM(auxId)+" , auxPumpRPM="+auxPumpRPM+" , isAuxInitStarted="+isAuxInitStarted+" ,auxPumpInitCounter="+auxPumpInitCounter+", actualFeedScale="+ComLib.get().getScaleInfo().scaleReading_gm(FEED_SCALE));
                sLog.d(this,"feedWeightOverrideOrNot="+LiveDataManager.getInstance().getFeedWeightOverrideOrNot());
                double totalScaleWt = LiveDataManager.getInstance().getChangeAbleFeedWeight() + FlowMeterManager.get().getVolume(0);
                sLog.d(FeedWtManger.this, auxPumpRPM + ">"+(0.5 * auxProp.getMaxRPM())
                        + " & " + totalScaleWt + ">" + 1.12 * LiveDataManager.getInstance().getFeedWeightOverrideOrNot()
                        + " & " + (totalScaleWt - lastTotalScaleWt) + "<" + (auxPumpRPM * auxProp.getTubeFlowConversion() / (400 * 60)));
                if (LiveDataManager.getInstance().isVisited() && (auxPumpRPM > 0.5 * auxProp.getMaxRPM())
                        && ((totalScaleWt) > 1.12 * LiveDataManager.getInstance().getFeedWeightOverrideOrNot())
                        && ((totalScaleWt - lastTotalScaleWt) < auxPumpRPM * auxProp.getTubeFlowConversion() / (400 * 60))) {
                    feedEmptyCounter++;
                    if (feedEmptyCounter > 9) {
                        sLog.d(FeedWtManger.this, "Feed to empty detected");
                        // in CFC and CFCDC mode stop
                        if(modeProp!=null && modeProp.getSubRunModeProp(0).getMode()==OperationMode.CF_MODE && modeProp.getStageId()==0){
                            stop();
                            superCallback.callback(ModeEvent.FEED_TO_EMPTY_DETECTED);
                        }else {
                            // except CFC mode
                            isFeedEmptyDetected = true;
                            ComLib.get().getPumpAlarmIndicatorHandler().send(2, AlarmConstants.FEED_TO_EMPTY_DETECTED);
                            superCallback.callback(ModeEvent.FEED_TO_EMPTY_DETECTED);
                        }
                    }
                } else {
                    feedEmptyCounter = 0;
                    if (isFeedEmptyDetected) {
                        isFeedEmptyDetected = false;
                        ComLib.get().getPumpAlarmIndicatorHandler().send(1, ApiConstant.BLANK_QUOTE);
                    }
                }
                lastTotalScaleWt = totalScaleWt;
            }
        }
    };

    public double getAuxPumpFlowRate() {
        return auxPumpFlowRate;
    }
}
DevShivmohan commented 1 year ago
public static String checkPalindrome(String string){
        StringBuilder stringBuilder=new StringBuilder();
        for(char ch:string.toCharArray())
            if(Character.isAlphabetic(ch))
                stringBuilder.append(ch);
        return stringBuilder.toString().equalsIgnoreCase(stringBuilder.reverse().toString()) ? "Palindrome":"Not Palindrome";
    }