Применение языка С# для расчета установившихся режимов электрических сетей.




Одной из важнейших задач эксплуатации и проектирования электрических сетей является расчет установившихся режимов. Как правило расчёт сводится к решению нелинейных контурных или узловых уравнений, описывающих электрическую сеть.

В 1990-2000 г. основными проблемами расчёта являлись экономия памяти ЭВМ, повышение быстродействия алгоритмов, улучшения сходимости решения, учет слабой заполненности матриц, хранение представления электрической схемы как направленного графа, округление результатов при решении системы уравнений методом Гаусса. Известные программы [1, с 163] писались на языках Фортран и ассемблер с использованием методов структурного программирования. Ранее не рассматривалась возможность написания программ методами объектно-ориентированного программирования, и тем более с использованием языка C#.

В 2008 вышла новая версия библиотеки Microsoft Net FrameWork версии 3.5. Впервые эта библиотека включила в себя язык интегрированных запросов LINQ. Это средство позволяет производить гибкую обработку больших массивов информации методами баз данных с использованием расширяющих методов и лямбда-выражений. В этой версии объектная модель C# была существенно дополнена и переработана. В 2010 г. Была выпущена версия 4.0 этой библиотеки, где введен тип данных для работы с комплексными типами данных. Богатая объектная модель языка С# и наличие LINQ позволяет по-новому подойти к разработке и реализации алгоритмов расчёта. Ранее для расчетаустановившихся режимов электрических сетей использовались поцедурно-ориентированные языки фортран и ассемблер. Использование объектной модели позволяет упростить реализацию многих алгоритмов, но это приводит к увеличению размера использованной памяти ЭВМ. Однако в современных ЭВМ вопрос экономии памяти не стоит актуально, а использование многоядерных процессоров существенно повышает быстродействие. В NetFrameWork 3.5 есть возможность асинхронного вызова методов, что позволяет реализовать многопоточность и параллельные вычисления при умножении матриц и нахождении обратной матрицы. При решении системы линейных уравнений прямым методом с помощью обратной матрицы для каждого элемента обратной матрицы деление выполняется только один раз, что повышает точность расчетов, но снижает быстродействие. Для расчета с числами с плавающей запятыми в C# применяется тип double, где устранены многие ошибки округления. Например: 1/3.0+2/3.0=1, а не 0.999999999999 как было ранее.

Рассмотрим схему электрических сетей как объект с точки зрения языка С#. В 80% случаев выполняется расчёт сети одного напряжения произвольной конфигурации с одним базисным узлом. Рассмотрим этот случай. При расчете схемы методом узловых напряжений матрица узловых проводимостей задана однозначно. При расчёте методом контурных токов, матрица контурных сопротивлений задана неоднозначна, т.к. без дополнительных предположений нельзя однозначно описать как ветви соединяются в независимые контура. Одним из методов расчета установившихся режимов электрических сетей является решение нелинейных узловых уравнений методом простой итерации, когда на каждом шаге система уравнений считается линейной Для расчета нужно сформировать матрицу узловых проводимостей Y, вектор задающих токов нагрузки J на каждом шаге итерации,

вектор задающих токов базисного узла ,

где: - напряжение базисного узла,

- проводимость i-той ветви, которая начинается с базисного узла.

В результате расчетов находится вектор узловых напряжений U по следующей формуле

U= ,

где -матрица узловых проводимостей без базисного узла, которая получается из матрицы Y путем исключения n-ой строки и столбца, где n-номер базисного узла.

В схеме должен быть обязательно хотя бы один базисный узел из которого выполняется покрытие перетоков и потерь мощности, т.к. матрица узловых напряжений является вырожденной.

Далее выполняется перерасчет узловых токов в узлах, где нагрузка задана мощностью,и расчет выполняется до тех пор пока значения модулей напряжений на смежных шагах итерации не будут отличаться в пределах заданной погрешности. Токи в ветвях находятся на основании закона Ома для участка цепи. Далее можно определить перетоки и потери мощности.

Теперь рассмотрим схему как объект с точки зрения программирования на языке C#.

Схема состоит из совокупности двух разнородных объектов узлов Node и ветвей Branch. Для хранения их в схеме можно использовать типизированные коллекции типа LIST<T>. Объект схема должен включать следующие методы:

1.Вставки узлов.

2. Вставки ветвей.

3. Удаление узлов

4.Удаление ветвей.

5.Расчета схемы.

6. Вывода результатов решения.

Для реализации объекта схемы нужно рассмотреть объекты ветвь и узел.

Объект узел Node отображает реальный узел схемы. Он должен содержать следующие свойства:

1. Является ли узел базисным IsBase.

2. Напряжение узла в виде комплексного числа U.

3. Ток узла виде комплексного числа I.

4. Как задана нагрузка узла током или мощностью, если IsCurrent=true, то током.

5. Мощность нагрузки виде комплексного числа S.

6. Коллекция ветвей, которые входят в узел List<Branches>

7. Номер узла Number.

8. Проводимость узла для учета емкостных проводимостей линий, компенсирующих устройств, холостого хода трансформаторов, потерь на корону и т.д.

9. Потери мощности в узле.

 

Объект узел должен содержать следующие методы:

1. Конструктор объекта. Для базисного и обычного узлов он разный.

1.1.Для базисного узла достаточно задать модуль напряжения. При создании ему присваивается номер=0.

1.2.Для обычного узла необходимо задать узловую проводимость, как задана нагрузка током или мощностью, и в зависимости от этого ток или мощность.

2. Расчет мощности узла, если нагрузка задана током.

3. Расчет тока узла, если нагрузка задана мощностью.

4. Расчет потерь мощности в узле.

5. Добавление ветви в коллекцию ветвей при добавлении ветви в схему.

6. Удаление ветви из коллекции, если ветвь удаляется из схемы.

7. Отображение узла в виде текстового описания с основными параметрами.

Объект ветвь должен содержать следующие свойства:

1. Комплексное сопротивление ветви Z.

2. Начальный узел ветви BegNode.

3. Конечный узел ветви EndNode.

4. Номер ветви.

5. Ток ветви.

6. Потери мощности в ветви.

7. Переток мощности в ветви.

 

Объект ветвь должен содержать следующие методы:

1.Конструктор объекта.

2. Редактирования параметров ветви.

Имея объекты классов ветвей и узлов можно однозначно построить матрицу соединений первого рода, т.е. определить, как ветви соединяются в узлы. В [2] показано как из матрицы соединений первого рода получить матрицу соединений второго рода.

Общеизвестно, что имея обе матрицы соединений можно рассчитать электрическую сеть произвольной конфигурации.

В тоже время в [2] показано, что из матрицы соединений первого рода можно получить матрицу узловых проводимостей. Вектор задающих токов однозначно определён для схемы. Задав базисный узел (как правило это наиболее мощная электростанция, которая осуществляет покрытие мощности в случае увеличения нагрузки) можно однозначно определить напряжения в узлах схемы. Если не выбран базисный узел и не задано в нём напряжение, то в [1] показано, что в этом случае матрица узловых проводимостей становится вырожденной. Если известны напряжения в узлах схемах, то можно по закону Кирхгофа для участка цепи определить токи в ветвях, а следовательно перетоки мощностей и потери электроэнергии в линии. Порядок нумерации ветвей и узлов не будет влиять на результаты расчета, а отразится на заполненности матрицы узловых напряжений. В [1] рекомендуется использовать слабую заполненность матриц для оптимизации расчётов режимов систем большой сложности. Для этого матрица проводимостей приводится к ленточной форме. Для этого нужно отсортировать коллекцию узлов схемы по количеству присоединённых ветвей к узлу по возрастанию. Это несложно сделать при помощью библиотеки LINQ, наример:

Nodes[] x=Schema.Nodes.OrderDesc(r=>r.Brunches.Count).ToArray();

Где

Schema- объект схема,

Nodes- коллекция узлов,

r- параметр лямбда-выражения, в данном случае – узел схемы,

Brunches- коллекция ветвей присоединённых к данному узлу,

Count –количество ветвей, присоединённых к данному узлу,

OrderDesc-метод сортировки по убыванию

ToArray()-метод преобразования объекта, поддерживающего интерфейс IENUMERABLE<T> в массив.

Реализация данной концепции может быть выполнена путем написания WPF приложения на языке C#.

В минимальном варианте данное приложение должно включать следующие функциональные блоки:

1. Экранную среду для ввода и корректировки электрической схемы.

2. Расчет параметров схемы, построение матрицы узловых проводимостей,

Расчет параметров установившегося режима.

3. Вывод результатов.

Примерная реализация и экранные формы приведены ниже.

 

Рис 1. Общий вид экранной среды для ввода параметров схемы.

Рис 2. Форма для ввода базисного узла

Рис 3. Вид среды после ввода базисного узла.

Рис 4. Форма для ввода данных обычного узла нагрузки.

Рис. 5. Вид формы после ввода обычного узла.

Рис 6. Диалог Вставки ветви.

Для того, чтобы вставить ветвь нужно выделить два узла, После чего появится окно диалога вставки ветви.

Рис7. Диалог для ввода параметров ветви.

Рис. 8. Вид формы после ввода схемы.

 

Рис 9. Вывод результатов.

 

Литература.

1. Идельчик В.И. Расчеты и оптимизация режимов электрических сетей и систем. Москва: Энергоатомиздат, 1988.

2. Веников В.А., Литкенс И.В.,Маркович И.М., Мельников Н.А., Солдаткина Л.А. Электрические системы т.1., Математические задачи электроэнергетики. Москва: Высшая школа,1981.

3. Троелсен А. Язык программирования С#2010 и платформа.NET4. Москва: Вильямс,2011.

4. Фримен А., Раттц Дж. Язык интегрированных запросов в C#2010 для профессионалов. Москва: Вильямс, 2011.

5. Петцольд Ч. Microsoft Windows Presentation Foundation. Базовый курс. Санкт-Петербург: Питер, 2008 г.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-07-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: