Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Excel_new.doc
Скачиваний:
97
Добавлен:
22.02.2015
Размер:
5.05 Mб
Скачать

' Модуль "Ввод исходных данных из таблицы Excel"

Public Sub vvod_data(NRB As String)

Dim ID1(15, 1)

Rem Application.Dialogs(xlDialogFunctionWizard).Show ' - можно и так

´ Поучительное оформление таблицы исходных данных

ID = Array("Tj", "PT", "PCda", "PCab", "PCpa", "PDda", "PDab", "PDpa", _

"Tk", "Tot", "Tmax", "h")

Range("a1").Value = "ИСХОДНЫЕ ДАННЫЕ"

For i = 1 To 12: ID1(i, 1) = ID(i): Next

Range("a2", "A13").FormulaArray = ID1

´ Результирующие данные -куда хочу, туда пишу

NRB = InputBox(prompt:=" Укажите начало результирующего блока", _

Title:="Выполните коррекцию данных", Default:="E2")

´ Считывание исходных данных

Tj = Range("B2").Value: PT = Range("B3").Value

PCda = Range("B4").Value: PCab = Range("B5").Value: PCpa = Range("B6").Value

PDda = Range("B7").Value: PDab = Range("B8").Value: PDpa = Range("B9").Value

Tk = Range("B10").Value: Tot = Range("B11").Value:

Tmax = Range("B12").Value: h = Range("B13").Value

End Sub

Самостоятельная работа

  • Внимательно прочитайте представленную программу. Попытайтесь найти новые для вас алгоритмические и программные решения.

  • Выполните отладку программы на примере данных, представленных в табл. 4.10. Выведите на диаграмму (рис. 4.8) результирующие временные функции.

  • Предусмотрите вывод в результирующую таблицу мощности генератора PG = PC Sin(δ) + PD s.

  • Выведите на экран функцию (s).

  • Выполните ряд экспериментов: изменением длительности КЗ получите ситуацию нарушения устойчивости; определите, как .влияют на устойчивость демпфирующий момент, послеаварийная максимальная синхронная мощность.

Таблица 4.43

Tj

7

PT

0,8

Pсda

1,4

Pcab

0,2

Pсpa

1

PDda

20

PDab

2

P

Рис. 4.78. Переходный процесс.

Dpa

20

Tk

0,01

Tot

0,2

Tmax

3

h

0,01

      1. Перенумерация узлов

Практически во всех задачах электроэнергетики, где задана топология сети и где предполагается использование матричных методов, нумерация узлов должна быть непрерывной, начиная от единицы до последнего номера, без пропусков. В то же время, пользователю не хотелось бы ставить себя в такие жесткие рамки - ему удобно нумеровать узлы совершенно произвольно. Решением проблемы является двойная нумерация - машинная для математики и исходная для пользователя. Одним из вариантов согласования нумераций может быть массив номеров узлов, где порядковый номер элемента массива является машинным номером, а величина элемента - исходным номером узла.

Ниже приводится программный блок формирования такого массива. Исходными данными являются число ветвей (w), массивы начальных (NB) и конечных (KB) номеров смежных узлов рассматриваемого множества ветвей. Результирующими являются число узлов и массив номеров узлов (MN).

В качестве отладочного предлагается модуль proba(), где формируются массивы смежных узлов. Модуль перенумерация() является, по существу, диспетчерским и содержит единственный цикл по ветвям. Проверка наличия рассматриваемого узла в массиве MN осуществляется в модуле Запись_номера().

Option Base 1

Private MN() As Integer 'Искомый массив

' Модуль отладки

Public Sub proba()

Dim i As Integer, w As Integer

Dim NB(10) As Integer, KB(10) As Integer, n As Integer

Dim vv As Object 'Пример переменной типа Object

Set vv = Range("A2:B6") ' В блоке A2:B6 начала и концы ветвей

w = vv.Rows.Count ' Число ветвей

For i = 1 To w ' формирование массивов начал (NB) и концов (KB) ветвей

NB(i) = vv.Cells(i, 1)

KB(i) = vv.Cells(i, 2)

Next i

перенумерация w, NB(), KB(), n, MN()

End Sub

' Основной модуль перенумерации узлов

Public Sub перенумерация (w As Integer, NB() As Integer, KB() As Integer, _

n As Integer, MN() As Integer)

Dim i As Integer

n = 1: ReDim Preserve MN(n): MN(1) = NB(1):

For i = 1 To w

Запись_номера n, NB(i)

Запись_номера n, KB(i)

Next i

End Sub

' Вспомогательный модуль. Динамическое расширение массиваPublic Sub Запись_номера (n As Integer, NoB As Integer)

Dim i As Integer, j As Integer, flag As Byte

flag = 0: For j = 1 To n ' Проверка наличия узла в массиве MN

If NoB = MN(j) Then flag = 1: Exit For

Next j

If flag = 0 Then n = n + 1: ReDim Preserve MN(n): MN(n) = NoB

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]