Newer
Older
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindStressPRM
{
/// <summary>
/// powerstation/pole point class
/// класс для трансформаторных подстанций/столбов/понижающих(конечных) подстанций
/// </summary>
public class PowerStation
{
/// <summary>
/// unique id
/// уникальный идентификатор подстанции/столба
/// </summary>
public int Identifier { get; set; }
/// <summary>
/// Coordinates
/// </summary>
public Coordinate Coordinate { get; set; }
/// <summary>
/// station name field
/// название подстанции
/// </summary>
public string Name { get; set; }
/// <summary>

Debolskiy Andrey
committed
/// напряжение, кВ
public int Voltage { get; set; }
/// <summary>
/// type of point - trans/pole/endpoint
/// тип станции - трансформаторная подстанция/столб/понижающая(конечная)подстанция
///столбы не идут в аутпут, и обрабатываються алгоритмом, так что если есть на куске графа, саязанного только столбами есть сломанный сегмент
/// весь кусок графа обесточен
/// </summary>
public enum StationType
{
Pole, Trans, Endstat
};
/// <summary>
/// тип подстанции: pole/trans/endstat: является ли станция столбом, распределительной подстанцией, или станцией в вершине графа питания
/// тип столб - в картографической дишифровке ЛЭП могут ветвиться на столбах, при этом, очевидно, столбы не распределяют питание в отличии от подстанций.
/// распределительная подстанция - станция на которой граф ветвиться и известно что это не столб.
/// станция в вершине графа
/// </summary>
public StationType Stationtype { get; set; }
/// <summary>
/// is point a source?
/// является ли подстаниция источником питания (в случае ТЭЦ или питания от внешних для рассматриваемой цепи ЛЭП)
/// </summary>
public bool IsSource { get; set; }
/// <summary>
/// power on switch
/// поступает (true) или нет (false) на подстанцию питание
/// </summary>
public bool IsON { get; set; }
/// <summary>

Debolskiy Andrey
committed
/// parameter to control that on this station feeding line has higher power/voltage then leeching lines
/// параметр для контроля в алгоритме, чтобы линии питались от линий такого же или более высокого класса напряжения
/// </summary>
public int CurrentVolt { get; private set; }
/// <summary>
/// asigned powerlines list
/// список оканчивающихся/начинающихся на подстанции ЛЭП
/// </summary>
public IList<Powerline> LineList { get; set; }
public PowerStation()
{
//default constructor
}
/// <summary>
/// designated constructor
/// </summary>
/// <param name="coords"> Coordinates/координаты станции </param>
/// <param name="id">Station ID/ ИД станции </param>
/// <param name="name">Station Name/Название станции</param>
/// <param name="voltage"> voltage, класс напряжения кВ</param>
/// <param name="stationtype">Тип станции: столб/Подстанция/Конечная станция</param>
/// <param name="issource"> является ли станция генерирующей</param>
public PowerStation(Coordinate coords, int id, string name, int voltage, StationType stationtype, bool issource)
this.Coordinate = coords;
this.Name = name;
this.Voltage = voltage;
this.Stationtype = stationtype;
this.IsSource = issource;
this.IsON = false;
}
public bool CheckValue()
{
bool checker = Identifier >= 0;
if (!checker) { throw new System.ArgumentOutOfRangeException("Identifier", Identifier, "Identifer expected to be more than 0"); }
checker = checker && Voltage > 0 && Voltage < 1500;
if (!checker) { throw new System.ArgumentOutOfRangeException("Voltage", Voltage, "Voltage expected to be in range (0,1500)"); }

Debolskiy Andrey
committed
/// <summary>
/// Gets attached lines list
/// </summary>
/// <param name="linenet"></param>
public void GetAttachedLines( List<Powerline> linenet)
{
this.LineList= new List<Powerline>();
foreach(Powerline line in linenet)
{
if ( line.PointFromID == this.Identifier || line.PointToID == this.Identifier)
{
this.LineList.Add(line);
}
}
//if (this.LineList.Count == 0) {
// throw new System.Exception("Station has no corresponding/attached lines");
//}

Debolskiy Andrey
committed
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
}
/// <summary>
/// initializes CurrentVolt parameter
/// </summary>
public void InitCurrentVolt()
{
int maxVolt =-1;
int minVolt =10000;
foreach (Powerline line in this.LineList)
{
if (line.Voltage > maxVolt) { maxVolt = line.Voltage; }
if (line.Voltage < minVolt) { minVolt = line.Voltage; }
}
if (this.IsSource)
{
// initial sourcepoints need to get highest attached voltage assigned to be able to power all attached lines
this.CurrentVolt = maxVolt;
}
else
{
// every other point gets the minimum
this.CurrentVolt = minVolt;
}
//the code above would work when the power network will be consistent
//for we have to use this
this.CurrentVolt = maxVolt;
return;
}
/// <summary>
/// Sets CurrentVolt parameter based on the highest voltage of lines powering it
/// Задает текущее значение питающего напряжения станции

Debolskiy Andrey
committed
/// </summary>
public void SetCurrentVolt()
{
foreach (Powerline line in this.LineList)
{
if (line.IsON && line.Voltage > this.CurrentVolt) { this.CurrentVolt = line.Voltage; }
}
return;
}
/// <summary>
/// Выключить питание на соединенных со станцией линиях
/// </summary>

Debolskiy Andrey
committed
public void TurnOffAttachedLines()
{
foreach(Powerline line in this.LineList) { line.IsON = false; }
return;
}