예제 #1
0
        /// <summary>
        /// Computes an estimated value of three phase current flow through the transformer based on estimated values of the high side and low side node voltages.
        /// </summary>
        public void ComputeThreePhaseEstimatedCurrentFlow()
        {
            if (m_parentSubstation.ParentDivision.ParentCompany.ParentModel.CurrentFlowPostProcessingSetting == CurrentFlowPostProcessingSetting.ProcessOnlyMeasuredBranches)
            {
                if ((FromNodeCurrent.IncludeInEstimator || ToNodeCurrent.IncludeInEstimator) && FromNode.IsObserved && ToNode.IsObserved)
                {
                    DenseMatrix Vi = DenseMatrix.OfArray(new Complex[3, 1]);
                    DenseMatrix Vj = DenseMatrix.OfArray(new Complex[3, 1]);

                    Vi[0, 0] = FromNode.Voltage.PhaseA.Estimate.PerUnitComplexPhasor;
                    Vi[1, 0] = FromNode.Voltage.PhaseB.Estimate.PerUnitComplexPhasor;
                    Vi[2, 0] = FromNode.Voltage.PhaseC.Estimate.PerUnitComplexPhasor;

                    Vj[0, 0] = ToNode.Voltage.PhaseA.Estimate.PerUnitComplexPhasor;
                    Vj[1, 0] = ToNode.Voltage.PhaseB.Estimate.PerUnitComplexPhasor;
                    Vj[2, 0] = ToNode.Voltage.PhaseC.Estimate.PerUnitComplexPhasor;

                    DenseMatrix Iij = (ThreePhaseSeriesAdmittance * (1 / (EffectiveComplexMultiplier.Magnitude * EffectiveComplexMultiplier.Magnitude))) * Vi - ThreePhaseSeriesAdmittance * (1 / EffectiveComplexMultiplier.Conjugate()) * Vj;
                    DenseMatrix Iji = -(ThreePhaseSeriesAdmittance * (1 / EffectiveComplexMultiplier)) * Vi + ThreePhaseSeriesAdmittance * Vj;

                    FromNodeCurrent.PhaseA.Estimate.PerUnitComplexPhasor = Iij[0, 0];
                    FromNodeCurrent.PhaseB.Estimate.PerUnitComplexPhasor = Iij[1, 0];
                    FromNodeCurrent.PhaseC.Estimate.PerUnitComplexPhasor = Iij[2, 0];

                    ToNodeCurrent.PhaseA.Estimate.PerUnitComplexPhasor = Iji[0, 0];
                    ToNodeCurrent.PhaseB.Estimate.PerUnitComplexPhasor = Iji[1, 0];
                    ToNodeCurrent.PhaseC.Estimate.PerUnitComplexPhasor = Iji[2, 0];
                }
                else
                {
                    FromNodeCurrent.PhaseA.Estimate.Magnitude      = 0;
                    FromNodeCurrent.PhaseA.Estimate.AngleInDegrees = 0;
                    ToNodeCurrent.PhaseA.Estimate.Magnitude        = 0;
                    ToNodeCurrent.PhaseA.Estimate.AngleInDegrees   = 0;

                    FromNodeCurrent.PhaseB.Estimate.Magnitude      = 0;
                    FromNodeCurrent.PhaseB.Estimate.AngleInDegrees = 0;
                    ToNodeCurrent.PhaseB.Estimate.Magnitude        = 0;
                    ToNodeCurrent.PhaseB.Estimate.AngleInDegrees   = 0;

                    FromNodeCurrent.PhaseC.Estimate.Magnitude      = 0;
                    FromNodeCurrent.PhaseC.Estimate.AngleInDegrees = 0;
                    ToNodeCurrent.PhaseC.Estimate.Magnitude        = 0;
                    ToNodeCurrent.PhaseC.Estimate.AngleInDegrees   = 0;
                }
            }
            else if (m_parentSubstation.ParentDivision.ParentCompany.ParentModel.CurrentFlowPostProcessingSetting == CurrentFlowPostProcessingSetting.ProcessBranchesByNodeObservability)
            {
                if (FromNode.IsObserved && ToNode.IsObserved)
                {
                    DenseMatrix Vi = DenseMatrix.OfArray(new Complex[3, 1]);
                    DenseMatrix Vj = DenseMatrix.OfArray(new Complex[3, 1]);

                    Vi[0, 0] = FromNode.Voltage.PhaseA.Estimate.PerUnitComplexPhasor;
                    Vi[1, 0] = FromNode.Voltage.PhaseB.Estimate.PerUnitComplexPhasor;
                    Vi[2, 0] = FromNode.Voltage.PhaseC.Estimate.PerUnitComplexPhasor;

                    Vj[0, 0] = ToNode.Voltage.PhaseA.Estimate.PerUnitComplexPhasor;
                    Vj[1, 0] = ToNode.Voltage.PhaseB.Estimate.PerUnitComplexPhasor;
                    Vj[2, 0] = ToNode.Voltage.PhaseC.Estimate.PerUnitComplexPhasor;

                    DenseMatrix Iij = (ThreePhaseSeriesAdmittance * (1 / (EffectiveComplexMultiplier.Magnitude * EffectiveComplexMultiplier.Magnitude))) * Vi - ThreePhaseSeriesAdmittance * (1 / EffectiveComplexMultiplier.Conjugate()) * Vj;
                    DenseMatrix Iji = -(ThreePhaseSeriesAdmittance * (1 / EffectiveComplexMultiplier)) * Vi + ThreePhaseSeriesAdmittance * Vj;

                    FromNodeCurrent.PhaseA.Estimate.PerUnitComplexPhasor = Iij[0, 0];
                    FromNodeCurrent.PhaseB.Estimate.PerUnitComplexPhasor = Iij[1, 0];
                    FromNodeCurrent.PhaseC.Estimate.PerUnitComplexPhasor = Iij[2, 0];

                    ToNodeCurrent.PhaseA.Estimate.PerUnitComplexPhasor = Iji[0, 0];
                    ToNodeCurrent.PhaseB.Estimate.PerUnitComplexPhasor = Iji[1, 0];
                    ToNodeCurrent.PhaseC.Estimate.PerUnitComplexPhasor = Iji[2, 0];
                }
                else
                {
                    FromNodeCurrent.PhaseA.Estimate.Magnitude      = 0;
                    FromNodeCurrent.PhaseA.Estimate.AngleInDegrees = 0;
                    ToNodeCurrent.PhaseA.Estimate.Magnitude        = 0;
                    ToNodeCurrent.PhaseA.Estimate.AngleInDegrees   = 0;

                    FromNodeCurrent.PhaseB.Estimate.Magnitude      = 0;
                    FromNodeCurrent.PhaseB.Estimate.AngleInDegrees = 0;
                    ToNodeCurrent.PhaseB.Estimate.Magnitude        = 0;
                    ToNodeCurrent.PhaseB.Estimate.AngleInDegrees   = 0;

                    FromNodeCurrent.PhaseC.Estimate.Magnitude      = 0;
                    FromNodeCurrent.PhaseC.Estimate.AngleInDegrees = 0;
                    ToNodeCurrent.PhaseC.Estimate.Magnitude        = 0;
                    ToNodeCurrent.PhaseC.Estimate.AngleInDegrees   = 0;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Computes an estimated value of positive sequence current flow through the transformer based on estimated values of the high side and low side node voltages.
        /// </summary>
        public void ComputePositiveSequenceEstimatedCurrentFlow()
        {
            if (m_parentSubstation.ParentDivision.ParentCompany.ParentModel.CurrentFlowPostProcessingSetting == CurrentFlowPostProcessingSetting.ProcessOnlyMeasuredBranches)
            {
                if ((FromNodeCurrent.IncludeInPositiveSequenceEstimator || ToNodeCurrent.IncludeInPositiveSequenceEstimator) && FromNode.IsObserved && ToNode.IsObserved)
                {
                    Complex Vi = FromNode.Voltage.PositiveSequence.Estimate.PerUnitComplexPhasor;
                    Complex Vj = ToNode.Voltage.PositiveSequence.Estimate.PerUnitComplexPhasor;

                    Complex Iij = (PositiveSequenceSeriesAdmittance / (EffectiveComplexMultiplier.Magnitude * EffectiveComplexMultiplier.Magnitude)) * Vi - PositiveSequenceSeriesAdmittance / EffectiveComplexMultiplier.Conjugate() * Vj;
                    Complex Iji = -(PositiveSequenceSeriesAdmittance / EffectiveComplexMultiplier) * Vi + PositiveSequenceSeriesAdmittance * Vj;

                    FromNodeCurrent.PositiveSequence.Estimate.PerUnitComplexPhasor = Iij;
                    ToNodeCurrent.PositiveSequence.Estimate.PerUnitComplexPhasor   = Iji;
                }
                else
                {
                    FromNodeCurrent.PositiveSequence.Estimate.Magnitude      = 0;
                    FromNodeCurrent.PositiveSequence.Estimate.AngleInDegrees = 0;
                    ToNodeCurrent.PositiveSequence.Estimate.Magnitude        = 0;
                    ToNodeCurrent.PositiveSequence.Estimate.AngleInDegrees   = 0;
                }
            }
            else if (m_parentSubstation.ParentDivision.ParentCompany.ParentModel.CurrentFlowPostProcessingSetting == CurrentFlowPostProcessingSetting.ProcessBranchesByNodeObservability)
            {
                if (FromNode.IsObserved && ToNode.IsObserved)
                {
                    Complex Vi = FromNode.Voltage.PositiveSequence.Estimate.PerUnitComplexPhasor;
                    Complex Vj = ToNode.Voltage.PositiveSequence.Estimate.PerUnitComplexPhasor;

                    Complex Iij = (PositiveSequenceSeriesAdmittance / (EffectiveComplexMultiplier.Magnitude * EffectiveComplexMultiplier.Magnitude)) * Vi - PositiveSequenceSeriesAdmittance / EffectiveComplexMultiplier.Conjugate() * Vj;
                    Complex Iji = -(PositiveSequenceSeriesAdmittance / EffectiveComplexMultiplier) * Vi + PositiveSequenceSeriesAdmittance * Vj;

                    FromNodeCurrent.PositiveSequence.Estimate.PerUnitComplexPhasor = Iij;
                    ToNodeCurrent.PositiveSequence.Estimate.PerUnitComplexPhasor   = Iji;
                }
                else
                {
                    FromNodeCurrent.PositiveSequence.Estimate.Magnitude      = 0;
                    FromNodeCurrent.PositiveSequence.Estimate.AngleInDegrees = 0;
                    ToNodeCurrent.PositiveSequence.Estimate.Magnitude        = 0;
                    ToNodeCurrent.PositiveSequence.Estimate.AngleInDegrees   = 0;
                }
            }
        }