/// <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()); }
/// <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; } } }
/// <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; } } }