upb-lea / ElectricGrid.jl

A time domain electrical energy grid modeling and simulation tool with a focus on the control of power electronics converters
https://upb-lea.github.io/ElectricGrid.jl/
MIT License
33 stars 4 forks source link

Power Flow (Cable Ratings) #24

Closed SeptimusBoshoff closed 1 year ago

SeptimusBoshoff commented 2 years ago

The problem can be stated as follows. Given a power system, a system with sources, loads and cables, what is the power flow through the cables in steady state, and is the power limit for the cable exceeded?

The cable limit is defined by its Surge Impedance Loading (SIL) and the operating voltage (Line to Line). Typically the maximum operating voltage is taken as 1.05 p.u. A related quantity which has to be computed as an intermediary step to the SIL is the characteristic impedance, which is a function of the cable capacitance and inductance. Therefore, the problem becomes; if a network topology is given, that is, the connectivity matrix, the number of sources, and the number of loads, (including the power ratings) what should the capacitance and inductance of the cable be? This is a different formulation of the problem, when compared to how a utility would design its system, but for our goals so be it.

The first thing to do would be to randomly generate the CM (with sources, loads, and cables). The next step would be to solve the power flow equations for the randomly generated network. This would employ an iterative algorithm (e.g. Newton-Rhapson, Gaus-Seidel, Decoupled, etc.). The solution would tell us what the power flows are through the cables. All the cables, for which the SIL is exceeded should be identified. Now it we have a choice, either replace all of the exceeded cables with better cables, or only replace, say the first 2 maximally exceeded cables. In either case, the power flow algorithm should be run again, and the steps repeated until there are no more violations.

  1. Generate random power system (if not specified by user)
  2. Calculate characteristic impedance for cables
  3. Calculate SIL for cables
  4. Solve power flow
  5. Replace cables
  6. Go to 4. until no more violations
Webbah commented 2 years ago
Webbah commented 2 years ago

Update

Problem: With power flow equations we would have too many unknowns and too less equations.

Idea: Use 'compressed Sensing' to consider the design of the cables as kind of optimization problem (Compare e.g. Data-Driven Science and Engineering chapter 3.2).

Maybe that can be extended to optimize the power it at all, too, in case of where to place a cable (could be used to construct the CM matrix if not defined)

Webbah commented 1 year ago

Back to powerflow

Since we would have somehow to solve the power flow equations (PFE) to figure out - depending on the power demand - which source would deliver what power and where is it flowing, let's try to solve the PFE with a lot of unknows and see where it goes.

Always fixed:

Sometimes fixed:

Variable:

Notes:

Solutions:

Webbah commented 1 year ago

List to be defined in the parameter-dict in thenodeconstructorbefore cable rating funtion is called:

-parameters["load"]

To be defined by the cable rating funtion and set in the nc:

Webbah commented 1 year ago

Nearly done

Added power flow equation(pfe) to Power_System_theory script Left todos:

Used PFE in NC and overwrite ALL cable parameters if one is not defined to ensure that it fits pfe (to be changed and keep defined cable parameters??) - https://github.com/upb-lea/dare/blob/b501c1914959f9e4b1722cbbe1685d5011e8c5fc/src/nodeconstructor.jl#L638

SeptimusBoshoff commented 1 year ago

The limits for the cable were calculated using the equations in the text book Power System Analysis and Design (Glover and Sarma), particularly equation number 5.5.3.

Webbah commented 1 year ago

todo: put this result to be included into the environment

(I1 -> limit_array[idx_I1])

Webbah commented 1 year ago

Final implementation notes

layout_cabels(CM, num_source, num_load, parameters) function in Power_System_Theory.jl which gets called in the nodeconstructor to fill up the parameter dict with missing cable entries.