Exemple #1
0
        /// <summary>
        /// A verbose string representation of the instance of the <see cref="SeriesBranchBase"/> class.
        /// </summary>
        /// <returns>A verbose string representation of the instance of the <see cref="SeriesBranchBase"/> class.</returns>
        public new string ToVerboseString()
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine();
            stringBuilder.AppendFormat("----- Transformer --------------------------------------------------------------");
            stringBuilder.AppendLine();
            stringBuilder.AppendFormat("                 Internal ID: " + InternalID.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("                      Number: " + Number.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("                        Name: " + Name + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("                 Description: " + Description + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("                   From Node: " + FromNode.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("                     To Node: " + ToNode.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("           Parent Substation: " + m_parentSubstation.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("           From Node Current: " + m_fromNodeCurrent.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("             To Node Current: " + m_toNodeCurrent.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("   From Node Connection Type: " + m_fromNodeConnectionType.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("     To Node Connection Type: " + m_toNodeConnectionType.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("      Tap Position Input Key: " + m_tapPositionInputKey + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("    Tap Position Measurement: " + m_tapPositionMeasurement + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("     Tap Position Output Key: " + m_tapPositionOutputKey + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("        Assumed Tap Position: " + AssumedTapPosition.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("          Fixed Tap Position: " + m_fixedTapPosition.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("             ULTC Is Enabled: " + m_ultcIsEnabled.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("           Phase Shift (deg): " + ComputePhaseShift().ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("Off Nominal Tap Ratio (p.u.): " + ComputeOffNominalTapRatio().ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat("Effective Complex Multiplier: " + EffectiveComplexMultiplier.ToString() + "{0}", Environment.NewLine);
            stringBuilder.AppendFormat(m_tapConfiguration.ToVerboseString());
            stringBuilder.AppendFormat(RawImpedanceParameters.ToVerboseString());
            stringBuilder.AppendLine();
            return(stringBuilder.ToString());
        }
Exemple #2
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;
                }
            }
        }
Exemple #3
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;
                }
            }
        }