Министерство образования и науки Республики Казахстан
Карагандинский государственный технический университет
Кафедра автоматизации производственных процессов им. В.Ф. Бырьки
ОТЧЕТ
по вычислительной практике
Руководитель
Калинин А.А
Студент: АиУ 09-3(группа)
Колосков И. Г
2011г.
Цель работы: Настоящая работа ориентирована на индивидуальное изучение задачи расчета переходных процессов в электрических цепях фиксированной структуры в процессе самостоятельной разработки, отладки и использования комплекса диалоговых программ, работающих в среде современных информационных технологий на базе персональных компьютеров.
Постановка задачи
Выполнить по предложенному варианту задания содержательную и формальную постановку задачи расчета переходного процесса в нелинейной электрической цепи, вызванного ее включением или отключением;
Изучить процедурные особенности заданного метода численного интегрирования обыкновенных дифференциальных уравнений;
Разработать алгоритм, спроектировать диалоговую программу модульной структуры для расчета переходного процесса в заданной электрической цепи и написать исходные тексты программных модулей на изучаемом языке программирования;
Выполнить отладку разработанной программы в среде изучаемой системы программирования, предварительно приняв и подготовив критерии правильности работы программы и контрольные точки для доказательства правильности.
Исследовать переходные процессы в заданной электрической цепи с помощью отлаженной программы, объяснить и оценить физические особенности полученных процессов.
Вариант 9
Исходные данные приведены на рисунке 1
Рисунок 1 - Исходные данные
Метод: Рунге-Кутта с переменным шагом
Краткое описание метода численного интегрирования Рунге-Кутта с переменным шагом:
Для запуска вычислительной схемы необходимы следующие исходные данные: начальное значение шага интегрирования h, интервал определения независимого переменного [to,tk], начальное значение искомой функции f(to)=yo, заданная точность вычисления искомой функции Е на каждом шаге интегрирования.
Вычислительная схема метода определяется следующими действиями:
. Отыскиваются:
.1. Приближенное решение W в точке ti+h с шагом h по формулам:
W=yi-1+(K1+2K2+2K3+K4)/6(1)1=hf(ti-1, yi-1)(2)2=hf(ti-1+h/2, yi-1+K1/2)(3)3=hf(ti-1+h/2, yi-1+K2/2)(4)4=hf(ti-1+h, yi-1+K3)(5)
.2 Приблеженное решение Х в точке ti-1+h/2 c шагом h/2 по формуле.
X=yi-1+(K1+2K2+2K3+K4)/6(10)
.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.
. Проверяется выполнение одного из неравенств:
|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.
. Проверяется условие ti>tk. Если оно выполняется, то искомая функция определена на заданном интервале независимого переменного [to,tk].
Процесс разработки приложения
Для приложения используем стиль приложения интерфейса MDI (multiple document interface) т.е. интерфейс с многими документами. Родительская форма содержит строку функционального меню приложения и на нем размещаются четыре дочерних формы (для ввода исходных данных, для интегрирования потокосцепления и расчета процессов, для вывода процессов в таблицу, для вывода трех графиков процессов).
Интерфейс MDI обеспечивает создание приложений, которые содержат несколько форм в одной Родительской форме-контейнере. Это позволяет пользователю приложения отображать несколько документов одновременно так, что каждый документ отображается в своей дочерней форме и соответствует реализации некоторой функциональной команды. Проектируемое приложение должно обладать функциональностью, которая может раскрываться через следующий набор функциональных команд: Ввод, Интегрирование, Таблица, Графики, Окно.
Для создания нашего MDI-приложения необходимо:
. В меню File запустить команду New Project.
. В меню Project запустить команду Add MDI Form. Теперь проект будет содержать форму-контейнер MDIForm1 и стандартную форму Form1.
. В меню Tools запустить команду Menu Editor (Редактор меню) и сконструировать в его среде Функциональное Меню, которое является удобным инструментом быстрого доступа к функциональности приложения и должно размещаться на родительской форме. Окно Menu Editor (Редактор меню) представлено на рисунке 2:
Рисунок 2 - Компоненты функционального меню в среде Редактора меню
На рисунке 3 представлена Родительская форма в загруженном состоянии с выведенной строкой меню:
Рисунок 3 - Родительская форма в загруженном состоянии с выведенной строкой меню
Первая дочерняя Форма Form1 должна обеспечивать реализацию команды Ввод из функционального меню проектируемого приложения, включая процесс ввода с клавиатуры допустимых значений исходных параметров моделируемой электрической цепи.
Функциональность формы Ввода можно реализовать с помощью следующего набора элементов управления, которые должны быть размещены на ее поверхности и приведены в таблице 1:
Таблица 1 - Характеристика элементов для формы Ввода
ОбъектСвойствоЗначение свойстваForm1CaptionВвод параметров нелинейной цепиLabel1CaptionВведите R1, ОмText1TextEmptyLabel2CaptionВведите R2, ОмText2TextEmptyLabel3CaptionВведите Ik, АText3TextEmptyLabel4CaptionВремя интегрирования, сText4TextEmptyLabel5CaptionПараметр индуктивности, АText5TextEmptyLabel6CaptionПараметр индуктивности, ВText6TextEmptyLabel7CaptionЧисло точекText7TextEmptyCommand1CaptionOKPicture1Picture(Bitmap)Picture2Picture(Bitmap)
На рисунке 4 представлен экранный вид формы Ввода в режиме выполнения
численный интегрирование электрический цепь
Рисунок 4 - Форма Ввода в режиме выполнения
Вторая дочерняя Форма Form2 должна обеспечивать реализацию команды Интегрирование из функционального меню проектируемого приложения, включая процесс интегрирования потокосцепления и расчет переходных процессов изменения Тока через индуктивность и ЭДС самоиндукции в исходной электрической цепи. Для реализации такой функциональности на поверхности формы необходимо установить следующий набор элементов управления, который представлен в таблице 2:
Таблица 2 - Характеристика элементов для формы Интегрирования
ОбъектСвойствоЗначение свойстваForm2CaptionИнтегрированиеForm2MDIChildTrueLabel1CaptionЗаряд на конденсатореLabel2CaptionТок и напряжение на конденсатореLabel3CaptionНачать интегрирование?ProgressBar1CaptionProgressBar2CaptionCommand1CaptionДаCommand2CaptionВозврат в меню
На рисунке 5 представлен экранный вид Form 2 формы интегрирования в режиме выполнения:
Рисунок 5 - Form 2 форма Интегрирования в режиме выполнения
Третья дочерняя Форма Form3 должна обеспечивать реализацию команды Таблица из функционального меню проектируемого приложения, включая вывод в графы таблицы следующих числовых последовательностей, полученных на этапе интегрирования и расчета переходных процессов: T (i) - физическое время, P (i) - потокосцепление, IL (i) - ток через индуктивность, UL (i) - ЭДС самоиндукции. Для реализации такой функциональности на поверхности формы необходимо установить следующий набор элементов управления, приведенный в таблице 3:
Таблица 3 - Характеристика элементов для формы Таблица
ОбъектСвойствоЗначение свойстваForm3CaptionТаблица переходных процессов в нелинейном конденсатореForm3MDIChildTrueMSFlexGrid1AllowBigSelectionTrueCommand1CaptionПроцессыCommand2CaptionВозврат в меню
На рисунке 6 представлен экранный вид Form 3 в режиме выполнения:
Рисунок 6 - Form 3 форма Таблицы в режиме выполнения
Четвертая дочерняя Форма Form4 должна обеспечивать реализацию команды Графики из функционального меню проектируемого приложения, включая вывод на поверхность формы следующих табулированных функций времени, полученных на этапе интегрирования: P (t)- потокосцепление, IL (t)- Ток через индуктивность, UL (t) - ЭДС самоиндукции. Для реализации такой функциональности на поверхности формы необходимо установить следующий набор элементов управления, приведенный в таблице 4:
Таблица 4 - Характеристика элементов для формы Графики
ОбъектСвойствоЗначение свойстваForm4CaptionГрафики переходных процессов в нелинейном конденсатореMDIChildTrueFrame1CaptionГрафики переходных процессовOption1CaptionQ(t)Option2CaptionUc(t)Option3CaptionIc(t)Command1CaptionВозврат в меню
Рисунок 7 - Form 4 форма Графики в режиме выполнения
Ниже представлен код приложения. Описание кода выполнено в комментариях по тексту процедур. Формы в режиме выполнения представлены выше, в процессе описания разработки приложения.
Стандартный модуль проекта:
Public R1 As Double
Public R2 As DoubleE As DoubleA As DoubleB As DoubleTi As DoubleN As LongQ() As DoubleUс() As DoubleIс() As DoubleT() As Double
Модуль родительской формы:
Процедура загрузки родительской формы
Private Sub MDIForm_Load().Show
End Sub
Процедура запуска команды меню Ввод
Sub MnuVvod_Click()
Form1.ShowSub
Процедура запуска команды меню Интегрирование
Sub MnuInteg_Click()2.ShowSub
Процедура запуска команды меню Таблица
Sub MnuTabl_Click()
Form3.ShowSub
Процедура запуска команды меню Графики
Sub MnuGraf_Click()
Form4.ShowSub
Процедура запуска команды меню Каскад
Sub MnuKskad_Click().Arrange vbCascadeSub
Процедура запуска команды меню Вертикаль
Sub MnuVert_Click()
MDIForm1.Arrange vbVerticalSub
Модуль формы для выполнения команды ввод:
Процедура обработки события Click на командной кнопке формы. Здесь выполняются преобразования текстовых значений исходных параметров
цепи, введенных через текстовые поля на Form1, в арифметические значения
глобальных переменных типа Double и LongSub Command1_Click()= CDbl(Text1.Text) 'Преобразование текстового значения в
арифметическое значение глобальной переменной типа Double
R2 = CDbl(Text2.Text)= CDbl(Text3.Text)= CDbl(Text5.Text)= CDbl(Text6.Text)
N = CLng(Text7.Text) 'Преобразование текстового значения в
арифметическое значение глобальной переменной типа Long
Ti = CDbl(Text4.Text)Me 'Выгрузить форму Form1
End Sub
Процедура инициализации формы Form1 и установка стартовых значений свойств
Private Sub Form_Initialize()= 8= True.Height = 15000.Width = 15000
End Sub
Процедура загрузки формы Form1 и инициализации ее текстовых полей
Private Sub Form1_Load().Text = Empty.Text = Empty.Text = Empty.Text = Empty.Text = Empty.Text = Empty.Text = Empty
End Sub
Модуль формы для выполнения команды интегрировать
Процедура обработки события Click на командной кнопке Command1 формы Form2. Здесь запускается процедура
Интегрировать потокосцепление методом
Рунге-Кутта с постоянным шагом
Private Sub Command1_Click()
Интегрировать
Sub
Процедура интегрирования нелинейного уравнения методом Рунге-Кутта с переменным шагом
Private Sub Интегрировать()K1 As Double, K2 As Double, K3 As Double, K4 As DoubleH As DoubleQ(1 To N) As Double, T(1 To N) As DoubleUс(1 To N) As Double, Iс(1 To N) As DoubleD As Double, J As Integer, Q1 As Double, Q2 As Double, Q3 As Double EW As Double = 0.001 'Точность интегрирования на каждом шаге задана значением константы
H = Ti / Nс(1) = E / 2(1) = (((A ^ 2 + 4 * Uс(1) * B) ^ 0.5) - A) / 2 / BI = 2 To N: For J = 1 To 2= H * F(Q(I - 1))= H * F(Q(I - 1) + K1 / 2)= H * F(Q(I - 1) + K2 / 2)= H * F(Q(I - 1) + K3)J = 1 Then= Q(I - 1) + (K1 + 2 * K2 + 2 * K3 + K4) / 6= H / 2: GoTo M1= Q(I - 1) + (K1 + 2 * K2 + 2 * K3 + K4) / 6= Q2 + (K1 + 2 * K2 + 2 * K3 + K4) / 6If: Next J= Abs(Q1 - Q2)Abs(Q1) 1 And D
процессов тока и напряжения
Min = 0
Max = N= True= IWithISub
'Процедура-функция для расчета правой части интегрируемого уравнения
Private Function F(ByVal Z As Single) As SingleII As Single, A1 As Single, B1 As Single, Ik As Single= 10= Ik * (3 * R1 + R2) / (R1 + R2)= A= B= II - A1 * Z - B1 * Z ^ 2 Function
Процедура обработки события Click на командной 'кнопке Command2 формы Form2. Здесь выгружается форма
Sub Command2_Click()MeSub
Процедура обработки события Click на командной кнопке Command1 'формы Form3. Здесь запускается процедура вывода рассчитанных переходных процессов в колонки таблицы элемента управления MSFlexGrid1
Private Sub Command1_Click()I As Long, J As LongJ = 0 To 3.Col = JI = 1 To N - 1MSFlexGrid1= IJ = 0 Then= Format(T(I), "Scientific")J = 1 Then= Format(Q(I), "Scientific")J = 2 Then= Format(Uс(I), "Scientific")J = 3 Then= Format(Iс(I), "Scientific")IfWithIJSubSub Command2_Click()MeSub
Загрузка формы Form3 c установкой свойств таблицы MSFlexGrid1
Sub Form_Load()ЗаголовкиГр As Variant I As Double
ЗаголовкиГр = Array("Время, с", "Заряд, Кл", "Напряжение, В", _
"Ток, А")
Caption = "Таблица переходного процесса в нелинейной индуктивности"
With MSFlexGrid1= True= N= 4= 0(0) = 500I = 0 To 3= I(0, I) = ЗаголовкиГр(I)= 3II = 0 To 3(I) = 1500IWith Sub
Процедура обработки события Click на переключателе Option1 'формы Form4. Здесь выполняется вывод График Заряда
Sub Option1_Click()X As Long, Y As Long, Y0 As Long, X0 As Long, I As Long
CurrentX = 450: CurrentY = 150"График заряда на конденсаторе"
X0 = 400: Y0 = 3500(X0, Y0)-(2500, Y0)(X0, Y0)-(X0, 400)(400, 400)-(340, 470)(400, 400)-(460, 470)(2500, 3500)-(2440, 3430)(2500, 3500)-(2440, 3570)I = 1 To 10(X0 + 210 * I, 3500)-(X0 + 210 * I, 400)II = 1 To 10(X0, Y0 - 310 * I)-(2500, Y0 - 310 * I)I(X0 + T(1) * (2100 / T(N)), Y0 - Q(1) * (3100 / Q(N)))= 2I = 2 To N= X0 + T(I) * (2100 / T(N))= Y0 - Q(I) * 3100 / Q(N)-(X, Y)I= 1= 100: CurrentY = 450"Q(t)"= 2570: CurrentY = 3300"t"= 300: CurrentY = 3600"0"= X0 + 210 * 4: CurrentY = 3600Format((T(N) / 2), "Fixed")= X0 + 210 * 9: CurrentY = 3600Format(T(N), "Fixed")= X0 - 400: CurrentY = Y0 - (3100 / 10) * 4Format((Q(N) / 10) * 5, "Fixed")= X0 - 400: CurrentY = Y0 - (3100 / 10) * 8Format((Q(N) / 10) * 8, "Fixed")
End Sub
Процедура обработки события Click на переключателе Option2'формы Form4. Здесь выполняется вывод Графика Тока
Sub Option2_Click()X As Single, Y As Single, Y0 As Single, X0 As Single, I As Integer= 1000 + 2700: CurrentY = 150"График напряжения"= 400 + 2700: Y0 = 3500(X0, Y0)-(X0 + 2100, Y0)(X0, Y0)-(X0, 400)(X0, 400)-(X0 - 60, 470)(X0, 400)-(X0 + 60, 470)(X0 + 2100, Y0)-(X0 + 2040, Y0 - 70)(X0 + 2100, Y0)-(X0 + 2040, Y0 + 70)I = 1 To 10(X0 + 210 * I, 3500)-(X0 + 210 * I, 400)II = 1 To 10(X0, Y0 - 310 * I)-(X0 + 2100, Y0 - 310 * I)I(X0 + T(1) * (2100 / T(N)), Y0 - Uс(1) * 3100 / Uс(N))= 2I = 2 To N= X0 + T(I) * (2100 / T(N))= Y0 - Uс(I) * 3100 / Uс(N)-(X, Y)I= 1= X0 - 450: CurrentY = 450"Uc (t)"= X0 + 2200: CurrentY = Y0 - 150"t"= X0 - 100: CurrentY = Y0 + 100"0"= X0 + 210 * 4: CurrentY = Y0 + 100Format((T(N) / 2), "Fixed")= X0 + 210 * 9: CurrentY = Y0 + 100Format(T(N), "Fixed")= X0 - 500: CurrentY = Y0 - (3100 / 10) * 4Format((Uс(N) / 10) * 5, "Fixed")= X0 - 500: CurrentY = Y0 - (3100 / 10) * 8Format((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= 400 + 5400: Y0 = 3500= X0 + 50: CurrentY = 150"График тока"(X0, Y0)-(X0 + 2100, Y0)(X0, Y0)-(X0, 400)(X0, 400)-(X0 - 60, 470)(X0, 400)-(X0 + 60, 470)(X0 + 2100, Y0)-(X0 + 2040, Y0 - 70)(X0 + 2100, Y0)-(X0 + 2040, Y0 + 70)I = 1 To 10(X0 + 210 * I, 3500)-(X0 + 210 * I, 400)II = 1 To 10(X0, Y0 - 310 * I)-(X0 + 2100, Y0 - 310 * I)I(X0 + T(1) * (2100 / T(N)), Y0 - Iс(1) * (3100 / Iс(1)))= 2I = 2 To N= X0 + T(I) * (2100 / T(N))= Y0 - Iс(I) * (3100 / Iс(1))-(X, Y)I= 1= X0 - 450: CurrentY = 450"Ic (t)"= X0 + 2200: CurrentY = Y0 - 150"t"= X0 - 100: CurrentY = Y0 + 100"0"= X0 + 210 * 4: CurrentY = Y0 + 100Format((T(N) / 10) * 5, "Fixed")= X0 + 210 * 9: CurrentY = Y0 + 100Format(T(N), "Fixed")= X0 - 500: CurrentY = Y0 - (3100 / 10) * 4Format(Abs((Iс(N) - Iс(1)) / 10) * 5, "Fixed")= X0 - 500: CurrentY = Y0 - (3100 / 10) * 8Format(Abs((Iс(N) - Iс(1)) / 10) * 8, "Fixed")SubSub Command1_Click()
Unload MeSub
Вывод: выполнил по предложенному варианту задания содержательную и формальную постановку задачи расчета переходного процесса в нелинейной электрической цепи, вызванного ее включением или отключением;
Изучил процедурные особенности заданного метода численного интегрирования обыкновенных дифференциальных уравнений;
Спроектировал диалоговую программу модульной структуры для расчета переходного процесса в заданной электрической цепи и написал исходные тексты программных модулей на изучаемом языке программирования;
Исследовал переходные процессы в заданной электрической цепи с помощью отлаженной программы.