Программа модульной структуры для расчета переходного процесса в заданной электрической цепи

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

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 10.10.2011
Размер файла 740,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки Республики Казахстан

Карагандинский государственный технический университет

Кафедра автоматизации производственных процессов им. В.Ф. Бырьки

ОТЧЕТ

по вычислительной практике

Руководитель

Калинин А.А

Студент: АиУ 09-3(группа)

Колосков И. Г

2011г.

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

Постановка задачи

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

Изучить процедурные особенности заданного метода численного интегрирования обыкновенных дифференциальных уравнений;

Разработать алгоритм, спроектировать диалоговую программу модульной структуры для расчета переходного процесса в заданной электрической цепи и написать исходные тексты программных модулей на изучаемом языке программирования;

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

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

Вариант 9

Исходные данные приведены на рисунке 1

Рисунок 1 - Исходные данные

Метод: Рунге-Кутта с переменным шагом

Краткое описание метода численного интегрирования Рунге-Кутта с переменным шагом:

Для запуска вычислительной схемы необходимы следующие исходные данные: начальное значение шага интегрирования h, интервал определения независимого переменного [to,tk], начальное значение искомой функции f(to)=yo, заданная точность вычисления искомой функции Е на каждом шаге интегрирования.

Вычислительная схема метода определяется следующими действиями:

1. Отыскиваются:

1.1. Приближенное решение W в точке ti+h с шагом h по формулам:

W=yi-1+(K1+2K2+2K3+K4)/6 (1)

K1=hf(ti-1, yi-1) (2)

K2=hf(ti-1+h/2, yi-1+K1/2) (3)

K3=hf(ti-1+h/2, yi-1+K2/2) (4)

K4=hf(ti-1+h, yi-1+K3) (5)

1.2 Приблеженное решение Х в точке ti-1+h/2 c шагом h/2 по формуле.

X=yi-1+(K1+2K2+2K3+K4)/6 (10)

1.3 Уточняется приближенное решение X1 в точке ti-1+h c шагом h/2 по значению решения X в точке ti-1+h/2.

X1=X + (K1+2K2+2K3+K4)/6, (11)

Параметры K1-K4 вычисляется в (10) и (11) по формулам (9), по с шагом h/2.

2. Проверяется выполнение одного из неравенств:

|W - X1| ? E, при |W| ? 1

|W - X1| ? E|W|, при |W| > 1

Если не выполняются ни одно из неравенств, то исходный шаг делится пополам, т.е. h=h/2 и выполняется возврат к действию 1. В противном случае вычисляется уточненное решение в точке ti-1+h

Yi=X1 - (W - X1) / 15 (12)

3. Определяется шаг h, с которым будет вычисляться решение в следующей точке. Если 32 x |W - X1| > E, то шаг остается таким, каким он получен на предыдущей точке. Иначе шаг удваивается, т.е.h=2h.

4. Проверяется условие ti>tk. Если оно выполняется, то искомая функция определена на заданном интервале независимого переменного [to,tk].

Процесс разработки приложения

Для приложения используем стиль приложения интерфейса MDI (multiple document interface) т.е. интерфейс с многими документами. Родительская форма содержит строку функционального меню приложения и на нем размещаются четыре дочерних формы (для ввода исходных данных, для интегрирования потокосцепления и расчета процессов, для вывода процессов в таблицу, для вывода трех графиков процессов).

Интерфейс MDI обеспечивает создание приложений, которые содержат несколько форм в одной Родительской форме-контейнере. Это позволяет пользователю приложения отображать несколько документов одновременно так, что каждый документ отображается в своей дочерней форме и соответствует реализации некоторой функциональной команды. Проектируемое приложение должно обладать функциональностью, которая может раскрываться через следующий набор функциональных команд: Ввод, Интегрирование, Таблица, Графики, Окно.

Для создания нашего MDI-приложения необходимо:

1. В меню File запустить команду New Project.

2. В меню Project запустить команду Add MDI Form. Теперь проект будет содержать форму-контейнер MDIForm1 и стандартную форму Form1.

3. В меню Tools запустить команду Menu Editor (Редактор меню) и сконструировать в его среде Функциональное Меню, которое является удобным инструментом быстрого доступа к функциональности приложения и должно размещаться на родительской форме. Окно Menu Editor (Редактор меню) представлено на рисунке 2:

Рисунок 2 - Компоненты функционального меню в среде Редактора меню

На рисунке 3 представлена Родительская форма в загруженном состоянии с выведенной строкой меню:

Рисунок 3 - Родительская форма в загруженном состоянии с выведенной строкой меню

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

Функциональность формы Ввода можно реализовать с помощью следующего набора элементов управления, которые должны быть размещены на ее поверхности и приведены в таблице 1:

Таблица 1 - Характеристика элементов для формы Ввода

Объект

Свойство

Значение свойства

Form1

Caption

Ввод параметров нелинейной цепи

Label1

Caption

Введите R1, Ом

Text1

Text

Empty

Label2

Caption

Введите R2, Ом

Text2

Text

Empty

Label3

Caption

Введите Ik, А

Text3

Text

Empty

Label4

Caption

Время интегрирования, с

Text4

Text

Empty

Label5

Caption

Параметр индуктивности, А

Text5

Text

Empty

Label6

Caption

Параметр индуктивности, В

Text6

Text

Empty

Label7

Caption

Число точек

Text7

Text

Empty

Command1

Caption

OK

Picture1

Picture

(Bitmap)

Picture2

Picture

(Bitmap)

На рисунке 4 представлен экранный вид формы Ввода в режиме выполнения

численный интегрирование электрический цепь

Рисунок 4 - Форма Ввода в режиме выполнения

Вторая дочерняя Форма Form2 должна обеспечивать реализацию команды Интегрирование из функционального меню проектируемого приложения, включая процесс интегрирования потокосцепления и расчет переходных процессов изменения Тока через индуктивность и ЭДС самоиндукции в исходной электрической цепи. Для реализации такой функциональности на поверхности формы необходимо установить следующий набор элементов управления, который представлен в таблице 2:

Таблица 2 - Характеристика элементов для формы Интегрирования

Объект

Свойство

Значение свойства

Form2

Caption

Интегрирование

Form2

MDIChild

True

Label1

Caption

Заряд на конденсаторе

Label2

Caption

Ток и напряжение на конденсаторе

Label3

Caption

Начать интегрирование?

ProgressBar1

Caption

ProgressBar2

Caption

Command1

Caption

Да

Command2

Caption

Возврат в меню

На рисунке 5 представлен экранный вид Form 2 формы интегрирования в режиме выполнения:

Рисунок 5 - Form 2 форма Интегрирования в режиме выполнения

Третья дочерняя Форма Form3 должна обеспечивать реализацию команды Таблица из функционального меню проектируемого приложения, включая вывод в графы таблицы следующих числовых последовательностей, полученных на этапе интегрирования и расчета переходных процессов: T (i) - физическое время, P (i) - потокосцепление, IL (i) - ток через индуктивность, UL (i) - ЭДС самоиндукции. Для реализации такой функциональности на поверхности формы необходимо установить следующий набор элементов управления, приведенный в таблице 3:

Таблица 3 - Характеристика элементов для формы Таблица

Объект

Свойство

Значение свойства

Form3

Caption

Таблица переходных процессов в нелинейном конденсаторе

Form3

MDIChild

True

MSFlexGrid1

AllowBigSelection

True

Command1

Caption

Процессы

Command2

Caption

Возврат в меню

На рисунке 6 представлен экранный вид Form 3 в режиме выполнения:

Рисунок 6 - Form 3 форма Таблицы в режиме выполнения

Четвертая дочерняя Форма Form4 должна обеспечивать реализацию команды Графики из функционального меню проектируемого приложения, включая вывод на поверхность формы следующих табулированных функций времени, полученных на этапе интегрирования: P (t)- потокосцепление, IL (t)- Ток через индуктивность, UL (t) - ЭДС самоиндукции. Для реализации такой функциональности на поверхности формы необходимо установить следующий набор элементов управления, приведенный в таблице 4:

Таблица 4 - Характеристика элементов для формы Графики

Объект

Свойство

Значение свойства

Form4

Caption

Графики переходных процессов в нелинейном конденсаторе

MDIChild

True

Frame1

Caption

Графики переходных процессов

Option1

Caption

Q(t)

Option2

Caption

Uc(t)

Option3

Caption

Ic(t)

Command1

Caption

Возврат в меню

Рисунок 7 - Form 4 форма Графики в режиме выполнения

Ниже представлен код приложения. Описание кода выполнено в комментариях по тексту процедур. Формы в режиме выполнения представлены выше, в процессе описания разработки приложения.

Стандартный модуль проекта:

Public R1 As Double

Public R2 As Double

Public E As Double

Public A As Double

Public B As Double

Public Ti As Double

Public N As Long

Public Q() As Double

Public Uс() As Double

Public Iс() As Double

Public T() As Double

Модуль родительской формы:

Процедура загрузки родительской формы

Private Sub MDIForm_Load()

MDIForm1.Show

End Sub

Процедура запуска команды меню Ввод

Private Sub MnuVvod_Click()

Form1.Show

End Sub

Процедура запуска команды меню Интегрирование

Private Sub MnuInteg_Click()

Form2.Show

End Sub

Процедура запуска команды меню Таблица

Private Sub MnuTabl_Click()

Form3.Show

End Sub

Процедура запуска команды меню Графики

Private Sub MnuGraf_Click()

Form4.Show

End Sub

Процедура запуска команды меню Каскад

Private Sub MnuKskad_Click()

MDIForm1.Arrange vbCascade

End Sub

Процедура запуска команды меню Вертикаль

Private Sub MnuVert_Click()

MDIForm1.Arrange vbVertical

End Sub

Модуль формы для выполнения команды ввод:

Процедура обработки события Click на командной кнопке формы

Form1. Здесь выполняются преобразования текстовых значений исходных параметров

цепи, введенных через текстовые поля на Form1, в арифметические значения

глобальных переменных типа Double и Long

Private Sub Command1_Click()

R1 = CDbl(Text1.Text) 'Преобразование текстового значения в

арифметическое значение глобальной переменной типа Double

R2 = CDbl(Text2.Text)

E = CDbl(Text3.Text)

A = CDbl(Text5.Text)

B = CDbl(Text6.Text)

N = CLng(Text7.Text) 'Преобразование текстового значения в

арифметическое значение глобальной переменной типа Long

Ti = CDbl(Text4.Text)

Unload Me 'Выгрузить форму Form1

End Sub

Процедура инициализации формы Form1 и установка стартовых значений свойств

Private Sub Form_Initialize()

FontSize = 8

FontItalic = True

Form1.Height = 15000

Form1.Width = 15000

End Sub

Процедура загрузки формы Form1 и инициализации ее текстовых полей

Private Sub Form1_Load()

Text1.Text = Empty

Text2.Text = Empty

Text3.Text = Empty

Text4.Text = Empty

Text5.Text = Empty

Text6.Text = Empty

Text7.Text = Empty

End Sub

Модуль формы для выполнения команды интегрировать

Процедура обработки события Click на командной кнопке Command1 формы Form2. Здесь запускается процедура

Интегрировать потокосцепление методом

Рунге-Кутта с постоянным шагом

Private Sub Command1_Click()

Интегрировать

End Sub

Процедура интегрирования нелинейного уравнения методом Рунге-Кутта с переменным шагом

Private Sub Интегрировать()

Dim K1 As Double, K2 As Double, K3 As Double, K4 As Double

Dim H As Double

ReDim Q(1 To N) As Double, T(1 To N) As Double

ReDim Uс(1 To N) As Double, Iс(1 To N) As Double

Dim D As Double, J As Integer, Q1 As Double, Q2 As Double, Q3 As Double

Const EW As Double = 0.001 'Точность интегрирования на каждом шаге задана значением константы

H = Ti / N

Uс(1) = E / 2

Q(1) = (((A ^ 2 + 4 * Uс(1) * B) ^ 0.5) - A) / 2 / B

For I = 2 To N

m2: For J = 1 To 2

K1 = H * F(Q(I - 1))

K2 = H * F(Q(I - 1) + K1 / 2)

K3 = H * F(Q(I - 1) + K2 / 2)

K4 = H * F(Q(I - 1) + K3)

If J = 1 Then

Q1 = Q(I - 1) + (K1 + 2 * K2 + 2 * K3 + K4) / 6

H = H / 2: GoTo M1

Else

Q2 = Q(I - 1) + (K1 + 2 * K2 + 2 * K3 + K4) / 6

Q2 = Q2 + (K1 + 2 * K2 + 2 * K3 + K4) / 6

End If

M1: Next J

D = Abs(Q1 - Q2)

If Abs(Q1) < 1 And D <= 0.001 Or Abs(Q1) > 1 And D <= 0.001 * Abs(Q1) Then

Q(I) = Q2 - (Q1 - Q2) / 15

H = 2 * H

T(I) = T(I - 1) + H

Else

H = H / 2

GoTo m2

End If

With Form2.ProgressBar2

Min = 0

Max = N

Visible = True

Value = I

End With

Next I

For I = 1 To N

Uс(I) = A * Q(I) + B * Q(I) ^ 2

Iс(I) = F(Q(I))

With ProgressBar1 'Индикатор прогресса в цикле расчета

процессов тока и напряжения

Min = 0

Max = N

Visible = True

Value = I

End With

Next I

End Sub

'Процедура-функция для расчета правой части интегрируемого уравнения

Private Function F(ByVal Z As Single) As Single

Dim II As Single, A1 As Single, B1 As Single, Ik As Single

Ik = 10

II = Ik * (3 * R1 + R2) / (R1 + R2)

A1 = A

B1 = B

F = II - A1 * Z - B1 * Z ^ 2

End Function

Процедура обработки события Click на командной 'кнопке Command2 формы Form2. Здесь выгружается форма

Private Sub Command2_Click()

Unload Me

End Sub

Процедура обработки события Click на командной кнопке Command1 'формы Form3. Здесь запускается процедура вывода рассчитанных переходных процессов в колонки таблицы элемента управления MSFlexGrid1

Private Sub Command1_Click()

Dim I As Long, J As Long

For J = 0 To 3

MSFlexGrid1.Col = J

For I = 1 To N - 1

With MSFlexGrid1

Row = I

If J = 0 Then

Text = Format(T(I), "Scientific")

ElseIf J = 1 Then

Text = Format(Q(I), "Scientific")

ElseIf J = 2 Then

Text = Format(Uс(I), "Scientific")

ElseIf J = 3 Then

Text = Format(Iс(I), "Scientific")

End If

End With

Next I

Next J

End Sub

Private Sub Command2_Click()

Unload Me

End Sub

Загрузка формы Form3 c установкой свойств таблицы MSFlexGrid1

Private Sub Form_Load()

Dim ЗаголовкиГр As Variant

Dim I As Double

ЗаголовкиГр = Array("Время, с", "Заряд, Кл", "Напряжение, В", _

"Ток, А")

Caption = "Таблица переходного процесса в нелинейной индуктивности"

With MSFlexGrid1

WordWrap = True

Rows = N

Cols = 4

Row = 0

RowHeight(0) = 500

For I = 0 To 3

Col = I

TextMatrix(0, I) = ЗаголовкиГр(I)

CellAlignment = 3

Next I

For I = 0 To 3

ColWidth(I) = 1500

Next I

End With

End Sub

Процедура обработки события Click на переключателе Option1 'формы Form4. Здесь выполняется вывод График Заряда

Private Sub Option1_Click()

Dim X As Long, Y As Long, Y0 As Long, X0 As Long, I As Long

CurrentX = 450: CurrentY = 150

Print "График заряда на конденсаторе"

X0 = 400: Y0 = 3500

Line (X0, Y0)-(2500, Y0)

Line (X0, Y0)-(X0, 400)

Line (400, 400)-(340, 470)

Line (400, 400)-(460, 470)

Line (2500, 3500)-(2440, 3430)

Line (2500, 3500)-(2440, 3570)

For I = 1 To 10

Line (X0 + 210 * I, 3500)-(X0 + 210 * I, 400)

Next I

For I = 1 To 10

Line (X0, Y0 - 310 * I)-(2500, Y0 - 310 * I)

Next I

PSet (X0 + T(1) * (2100 / T(N)), Y0 - Q(1) * (3100 / Q(N)))

DrawWidth = 2

For I = 2 To N

X = X0 + T(I) * (2100 / T(N))

Y = Y0 - Q(I) * 3100 / Q(N)

Line -(X, Y)

Next I

DrawWidth = 1

CurrentX = 100: CurrentY = 450

Print "Q(t)"

CurrentX = 2570: CurrentY = 3300

Print "t"

CurrentX = 300: CurrentY = 3600

Print "0"

CurrentX = X0 + 210 * 4: CurrentY = 3600

Print Format((T(N) / 2), "Fixed")

CurrentX = X0 + 210 * 9: CurrentY = 3600

Print Format(T(N), "Fixed")

CurrentX = X0 - 400: CurrentY = Y0 - (3100 / 10) * 4

Print Format((Q(N) / 10) * 5, "Fixed")

CurrentX = X0 - 400: CurrentY = Y0 - (3100 / 10) * 8

Print Format((Q(N) / 10) * 8, "Fixed")

End Sub

Процедура обработки события Click на переключателе Option2'формы Form4. Здесь выполняется вывод Графика Тока

Private Sub Option2_Click()

Dim X As Single, Y As Single, Y0 As Single, X0 As Single, I As Integer

CurrentX = 1000 + 2700: CurrentY = 150

Print "График напряжения"

X0 = 400 + 2700: Y0 = 3500

Line (X0, Y0)-(X0 + 2100, Y0)

Line (X0, Y0)-(X0, 400)

Line (X0, 400)-(X0 - 60, 470)

Line (X0, 400)-(X0 + 60, 470)

Line (X0 + 2100, Y0)-(X0 + 2040, Y0 - 70)

Line (X0 + 2100, Y0)-(X0 + 2040, Y0 + 70)

For I = 1 To 10

Line (X0 + 210 * I, 3500)-(X0 + 210 * I, 400)

Next I

For I = 1 To 10

Line (X0, Y0 - 310 * I)-(X0 + 2100, Y0 - 310 * I)

Next I

PSet (X0 + T(1) * (2100 / T(N)), Y0 - Uс(1) * 3100 / Uс(N))

DrawWidth = 2

For I = 2 To N

X = X0 + T(I) * (2100 / T(N))

Y = Y0 - Uс(I) * 3100 / Uс(N)

Line -(X, Y)

Next I

DrawWidth = 1

CurrentX = X0 - 450: CurrentY = 450

Print "Uc (t)"

CurrentX = X0 + 2200: CurrentY = Y0 - 150

Print "t"

CurrentX = X0 - 100: CurrentY = Y0 + 100

Print "0"

CurrentX = X0 + 210 * 4: CurrentY = Y0 + 100

Print Format((T(N) / 2), "Fixed")

CurrentX = X0 + 210 * 9: CurrentY = Y0 + 100

Print Format(T(N), "Fixed")

CurrentX = X0 - 500: CurrentY = Y0 - (3100 / 10) * 4

Print Format((Uс(N) / 10) * 5, "Fixed")

CurrentX = X0 - 500: CurrentY = Y0 - (3100 / 10) * 8

Print Format((Uс(N) / 10) * 8, "Fixed")

End Sub

Процедура обработки события Click на переключателе Option3 формы Form4. Здесь выполняется вывод Графика ЭДС Самоиндукции

Private Sub Option3_Click()

Dim X As Single, Y As Single, Y0 As Single, X0 As Single, I As Integer

X0 = 400 + 5400: Y0 = 3500

CurrentX = X0 + 50: CurrentY = 150

Print "График тока"

Line (X0, Y0)-(X0 + 2100, Y0)

Line (X0, Y0)-(X0, 400)

Line (X0, 400)-(X0 - 60, 470)

Line (X0, 400)-(X0 + 60, 470)

Line (X0 + 2100, Y0)-(X0 + 2040, Y0 - 70)

Line (X0 + 2100, Y0)-(X0 + 2040, Y0 + 70)

For I = 1 To 10

Line (X0 + 210 * I, 3500)-(X0 + 210 * I, 400)

Next I

For I = 1 To 10

Line (X0, Y0 - 310 * I)-(X0 + 2100, Y0 - 310 * I)

Next I

PSet (X0 + T(1) * (2100 / T(N)), Y0 - Iс(1) * (3100 / Iс(1)))

DrawWidth = 2

For I = 2 To N

X = X0 + T(I) * (2100 / T(N))

Y = Y0 - Iс(I) * (3100 / Iс(1))

Line -(X, Y)

Next I

DrawWidth = 1

CurrentX = X0 - 450: CurrentY = 450

Print "Ic (t)"

CurrentX = X0 + 2200: CurrentY = Y0 - 150

Print "t"

CurrentX = X0 - 100: CurrentY = Y0 + 100

Print "0"

CurrentX = X0 + 210 * 4: CurrentY = Y0 + 100

Print Format((T(N) / 10) * 5, "Fixed")

CurrentX = X0 + 210 * 9: CurrentY = Y0 + 100

Print Format(T(N), "Fixed")

CurrentX = X0 - 500: CurrentY = Y0 - (3100 / 10) * 4

Print Format(Abs((Iс(N) - Iс(1)) / 10) * 5, "Fixed")

CurrentX = X0 - 500: CurrentY = Y0 - (3100 / 10) * 8

Print Format(Abs((Iс(N) - Iс(1)) / 10) * 8, "Fixed")

End Sub

Private Sub Command1_Click()

Unload Me

End Sub

Вывод: выполнил по предложенному варианту задания содержательную и формальную постановку задачи расчета переходного процесса в нелинейной электрической цепи, вызванного ее включением или отключением;

Изучил процедурные особенности заданного метода численного интегрирования обыкновенных дифференциальных уравнений;

Спроектировал диалоговую программу модульной структуры для расчета переходного процесса в заданной электрической цепи и написал исходные тексты программных модулей на изучаемом языке программирования;

Исследовал переходные процессы в заданной электрической цепи с помощью отлаженной программы.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.