Расчет коэффициента мощности выпрямителя в зависимости от реактивного сопротивления и эффективного значения электродвижующей силы
СОДЕРЖАНИЕ
СОДЕРЖАНИЕ
РЕФЕРАТ
ВВЕДЕНИЕ
АЛГОРИТМИЗАЦИЯ ВЫЧИСЛИТЕЛЬНЫХ
ПРОЦЕССОВ
МАТЕМАТИЧЕСКОЕ РЕШЕНИЕ ЗАДАЧИ
РАСКРЫТИЕ ТЕМЫ КУРСОВОЙ РАБОТЫ
Разработка интерфейса пользователя
Создание программного кода
СОЗДАНИЕ АНИМАЦИИ
РАЗРАБОТКА СПРАВОЧНОЙ СИСТЕМЫ
РАСЧЁТ КОНТРОЛЬНОГО ПРИМЕРА
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ИНФОРМАЦИИ
ПРИЛОЖЕНИЯ
Приложение 1
Приложение 2
РЕФЕРАТ
Для решения поставленной задачи будет
использоваться среда разработки приложений Delphi
7. При помощи Delphi 7 будет
создана программа коэффициента мощности выпрямителя в зависимости от
реактивного сопротивления и эффективного значения электродвижущей силы
Для отображения алгоритма решения, создаём
блок-схему.
ВВЕДЕНИЕ
Целью данной работы является расчет
коэффициента мощности выпрямителя (Вт) в зависимости от реактивного
сопротивления Χ
(Ом)
и эффективного значения электродвижующей силы Е (В).
Для этой цели составлена программа
на языке программирования “Delphi”. С помощью данной программы
произведены необходимые вычисления и получены результаты, как в виде таблицы,
так и в виде графиков зависимостей. Так же для улучшения визуального восприятия
и облегчения работы с программой составлены дополнительные модули “Анимация” и
“О программе”. Кроме этого в выше указанных модулях будет содержаться
дополнительная информация о разработчике программы.
Целью данной курсовой работы
является закрепление и применение на практике полученных навыков
программирования во время изучения дисциплины «Информатика».
Разработанная мною программа имеет
примитивный интерфейс. Данной программой может пользоваться не только
подготовленный пользователь, но и пользователь, который слабо знает данную
сторону вопроса и методы её реализации.
АЛГОРИТМИЗАЦИЯ ВЫЧИСЛИТЕЛЬНЫХ
ПРОЦЕССОВ
Ниже приведена блок-схема,
описывающая алгоритм, по которому будет выполняться программа.
Рисунок 1 - Блок-схема алгоритма решения
математической модели
МАТЕМАТИЧЕСКОЕ РЕШЕНИЕ ЗАДАЧИ
Рассчитать коэффициент мощности
выпрямителя (Вт) в зависимости от реактивного
сопротивления Χ
(Ом)
и эффективного значения электродвижующей силы Е (В).
Коэффициент мощности выпрямителя (Вт) в зависимости от реактивного
сопротивления Χ(Ом) и
эффективного значения электродвижующей силы Е (В) рассчитывается по формуле:
,
где k - отношение
эффективного тока вторичной обмотки трансформатора к среднему значению
выпрямленному току;
ξ - коэффициент, учитывающий
влияние омического падения напряжения в цепи переменного тока на среднее
выпрямленное напряжение;
- величина выпрямленного тока (А);
- отношение коэффициента
трансформации на данной ступени регулирования к наименьшему коэффициенту
трансформации, при котором получается номинальная электродвижующая сила
холостого хода вторичной обмотки трансформатора.
На рисунке 1 представлена схема
трёхфазного выпрямителя и осциллограммы напряжения в различных точках
выпрямителя
Рисунок 2 - схема трёхфазного
выпрямителя и осциллограммы напряжения в различных точках выпрямителя
На рисунке обозначено:
- напряжения на вторичных обмотках
трехфазного трансформатора.
напряжение на нагрузке получаемое с
соответствующего вентиля.
- Суммарное напряжение на нагрузке.
Выпрямитель представляет собой
однополупериодный выпрямитель для каждой из трех фазных вторичных обмоток. Все
три вентиля имеют общую нагрузку.
Если рассмотреть осциллограммы
напряжения на нагрузке при отключенном конденсаторе для каждой из трех фаз, то
можно заметить, что напряжение на нагрузке имеет такой же уровень пульсаций как
и в схеме однополупериодного выпрямления. Сдвиг фаз(т.е. сдвиг по времени)
напряжений выпрямителей между собой в результате даст в 3 раза меньший уровень
пульсаций, чем в однофазной однополупериодной схеме выпрямления. Трёхфазные
мощные выпрямители используются в электровозах, городском электротранспорте.
РАСКРЫТИЕ ТЕМЫ КУРСОВОЙ РАБОТЫ
Я начал разработку программы с разработки
интерфейса.
Разработка интерфейса пользователя
При запуске программы появляется главное окно,
представленное на рисунке 2.
Рисунок 3 - Стартовое окно программы
Исходные данные для удобства ввода разбиты на
три логических блока: Реактивное сопротивление ,Эффективное значение
электродвижущей силы и Другие параметры. Для проведения расчетов необходимо
нажать кнопку Расчет.
Если требуется выполнить дополнительные вычисления,
то можно воспользоваться калькулятором, который вызывается нажатием кнопки
Калькулятор.
Для удобства работы программа содержит главное
(рисунок 2) и контекстное меню (рисунок 4).
Рисунок 4 - Падающее меню программы
Рисунок 5 - Контекстное меню программы
Для того, чтобы ввести данные, необходимо нажать
Файл - Открыть. Для того, чтобы сохранить файл, необходимо нажать Файл -
Сохранить. Для того, чтобы рассчитать задачу, необходимо нажать Работа -
Расчет. Меню Помощь содержит такие компоненты как Справка и О программе, при
помощи которых можно, соответственно, вызвать справочную систему и просмотреть
информацию о программе.
При нажатии Помощь - О программе загружается
новая форма (рисунок 4), на которой представлена информация о программе и
анимация.
Рисунок 6 - Окно представления информации о
программе
Для облегчения понимания работы с программой
содержится статусная строка, в которую выводится справочная информация о любом
объекте программы, к которому подводится курсор.
После выполнения расчетов результаты
отображаются на новой форме в виде таблицы (рисунок 6).
Рисунок 7 - Результаты расчета
На данной форме имеются ряд кнопок, позволяющих
провести постобработку полученных результатов. Можно сохранить результаты в MS
Excel, MS
Word. Есть возможность
построить графические зависимости, вывести результирующую таблицу на печатающее
устройство, вызвать справочную информацию и вернуться назад к вводу исходных
данных.
При нажатии на кнопку Графики загружается новая
форма (рисунок 7), на которой представлены графические зависимости коэффициента
мощности выпрямителя от реактивного сопротивления и эффективного значения электродвижущей
силы. Также предусмотрена возможность построения трехмерного графика.
Для всех графиков имеется компонент TeeCommander
(рисунок 7), имеющий следующие элементы для работы с графиками:
Normal, Rotate, Move, Zoom, Depth,
3D, Edit, Print, Copy, Save.
Рисунок 9 - Компонент TeeCommander
Строка состояния создаётся на основе компонента
TStatusBar , расположенного на
вкладке Win32. Данный компонент отображает «горячие» подсказки и выводит
дополнительную информацию. Строка состояния обычно делится на несколько
панелей.
В самом простом варианте строка состояния работает,
как одна большая панель. При этом свойство SimplePanel получают значение True,
а выводимый текст записывается в свойство SimpleText.
Для отображения подсказок существует два
способа:
1. В
инспекторе объектов для свойства AutoHint присвоить значение True;
2. В
разделе описания процедур добавляем:ShowHint(Sender: TObject);
После этого вручную прописываем две
процедуры(см. Приложение1 ).
Строка состояния значительно облегчает работу с
программой и её освоение.
СОЗДАНИЕ ПРОГРАММНОГО КОДА
Далее рассмотрим написание текста программы,
необходимого для расчёта.
Первоначально в программу необходимо ввести
данные, для этого воспользуемся расположенными на форме компонентами LabeledEdit.
В тексте программы (на кнопке РАСЧЁТ)
присваиваем переменным значения из компонентов LabeledEdit,
но первоначально описываем каждую переменную глобально в разделе var:
var: TFMain;, MvSteps: Integer;,
Xmin, Xmax, dX, Emin, Emax, dE, _k, _Id, _Em: Real;:=
StrToFloat(LabeledEdit1.Text);:= LabeledEdit2;:= StrToFloat(LabeledEdit2.Text);:=
LabeledEdit4;:= StrToFloat(LabeledEdit4.Text);:= LabeledEdit5;:=
StrToFloat(LabeledEdit5.Text);:= LabeledEdit7;
_k :=
StrToFloat(LabeledEdit7.Text);:= LabeledEdit8;
_Em :=
StrToFloat(LabeledEdit8.Text);:= LabeledEdit9;
_Id := StrToFloat(LabeledEdit9.Text);:=
LabeledEdit10;:= StrToFloat(LabeledEdit10.Text);:= LabeledEdit3;:=
StrToInt(LabeledEdit3.Text);:= (Xmax - Xmin) / (MsSteps - 1);:= LabeledEdit6;:=
StrToInt(LabeledEdit6.Text); := (Emax
- Emin) / (MvSteps
- 1);
где
Также программа должна проверять правильность
вводимых значений, для этого нужно задать условия, при выполнении которых будет
выдаваться ошибка:
if (Xmin < 0.3) or (Xmax <
0.3) then
MessageDlg('Значение реактивного сопротивления
должно быть не менее 0,3 Ом',
mtWarning, [mbOK], 0);:= False;;
Такой программный код необходимо записать для
каждой переменной, задавая соответствующие условия.
Так как все пользовательские подпрограммы нужно
оформлять как динамически подключаемые библиотеки, сперва создаем динамическую
библиотеку. Для этого необходимо в программе Delphi
7 в падающем меню File(файл)
выбрать пункт New(новый),
затем Others(другие) и в
появившемся окне выбрать элемент DLL
Wizard. В открывшемся
окне редактора кода создаём два новых типа: mass1
и mass2(одномерный и
двумерный массивы соответственно), эти же типы создаём и в самой программе, а
затем создаём новую процедуру raschet1,
указывая в скобках переменные, которые передаются в процедуру, а в разделе var
те переменные, которые необходимо вывести из процедуры. В разделе var
процедуры raschet1
указываем переменные, которые будут использоваться только внутри процедуры,
после этого записываем текст программы, который соответствует блок-схеме:
function Formula(k0,X,E,k,Id,Em:
Real): Real; stdcall;:= ((2*sqrt(2))/(3.14*k))-((2*Em*Id*X*k0)/(3.14*E*k))
end;
//k - отношение эффективного тока вторичной
обмотки трансформатора к среднему выпрямленному току
//Em - коэффициент, учитывающий влияние
омического падения напряжения в цепи переменного тока на среднее выпрямленное
напряжение
//Id - величина выпрямленного тока
//X - реактивное сопротивление
//k0 - отношение коэффициента трансформации на
данной ступени регулирования к наименьшему коэффициенту трансформации, при
котором получается номинальная электродвижущая сила хода вторичной обмотки трансформатора
//E - эффективное значение электродвижущей
силыFormula index 1;
Для того, чтобы было возможно обратиться к
данной процедуре в её конце записана строка exports Formula index 1 . После
написания процедуры нужно скомпилировать проект(Ctrl+F9),
а затем сохранить в отдельную папку.
Для того чтобы можно было обратиться к созданной
процедуре нужно в тексте программы написать следующее:
function Formula(k0, X, E, _k, i,
_Em: Real): Real; stdcall;'Dll\FormulaDLL.dll' index 1
Причём необходимо указывать полный путь к dll
библиотеке.
После подключения библиотеки можем использовать
её в программе: на кнопке расчёт, после введения данных, обращаемся к данной
библиотеке.
Для вызова калькулятора на кнопке КАЛЬКУЛЯТОР
вводим следующий элемент программного кода:
winexec('calc.exe',sw_restore);
Поскольку программа должна запоминать последние
введённые данные, на кнопке ВЫХОД вводим следующий элемент программного кода,
который будет отвечать за то, чтобы все значения из компонентов LabeledEdit
были сохранены в текстовом файле, однако перед этим для каждой переменной нужно
ввести программный код для проверки правильности введённых данных(так же как и
на кнопке РАСЧЁТ):
AssignFile(TempFile,
FileName);(TempFile);(TempFile, LabeledEdit1.Text);(TempFile, LabeledEdit2.Text);(TempFile,
LabeledEdit3.Text);(TempFile, LabeledEdit4.Text);(TempFile,
LabeledEdit5.Text);(TempFile, LabeledEdit6.Text);(TempFile,
LabeledEdit7.Text);(TempFile, LabeledEdit8.Text);(TempFile,
LabeledEdit9.Text);(TempFile, LabeledEdit10.Text);(TempFile);
СОЗДАНИЕ АНИМАЦИИ
Данная анимация расположена в окне «О
программе».
Рисунок 10 - Окно представления информации о
программе
Для создания анимации было использовано два
основных компонента это TImage
(вкладка Additional)
и TTimer (вкладка
System), которые в
основном применяются для создания каких-либо графических изображений в Delphi.
Компонент TImage
активно используется во многих программах, причём не только для отображения
статических картинок, но и для создания анимационных эффектов.
Компонент TTimer
применяется в основном для создания темпа смены кадров. Следует учесть, что
интервал свойства Interval задаётся в миллисекундах.
Формирование анимации заключается в
последовательной прорисовке кадров, сначала рисуется первый кадр, а затем идёт
смещение с очисткой предыдущего положения рисунка.
Для создания анимации были использованы
некоторые свойства и методы класса TCanvas.
Ниже приведены некоторые методы класса TCanvas
и их предназначение:
procedure
Draw - вывод графического изображения в заданной точке холста;Polygon
- рисуется сложная фигура, состоящая из отрезков, последовательно соединяющих
точки, представленные ввиде динамического массива элементов TPoint.
Последняя точка соединяется с первой. Внутренняя часть фигуры заполняется в
соответствии со значением свойства Brush;
procedure
Rectangle - рисуется
прямоугольник. Его внутренняя область заполняется в соответствии со значением
свойства Brush;
procedure
Ellipse - рисуется эллипс.
Текст анимации смотри в Приложении1 Unit4.
РАЗРАБОТКА СПРАВОЧНОЙ СИСТЕМЫ
программа выпрямитель мощность
графический
Создание справки производилось при помощи
приложения Help & Manual 6. Поэтому необходимо, чтобы на компьютере было
предварительно установлено приложение Help & Manual 6.
Рисунок 11 - Help & Manual 6
Следует привести порядок действий, которые
необходимо выполнить для создания справки.
При помощи приложения Help & Manual 6
создаём файл справки .chm.В
открывшемся окне программы создаём новый проект, при этом указываем место его
сохранения. В появившемся проекте в Обозревателе проекта создаём нужные нам
разделы:
. Введение;
. Описание интерфейса;
.1Форма Расчёт реактивной проводимости
трансформатора:
.1.1. Описание формы Расчёт реактивной
проводимости трансформатора;
.1.2. Ввод данных;
.1.3. Вызов калькулятора;
.1.4. Восстановление данных по умолчанию;
.2.1. Описание формы Результат расчёта;
.2.2. Сохранение результатов расчёта;
.3. Форма Графики:
.3.1. Описание формы Графики;
.3.2. Сохранение графиков;
.3.3. Печать графиков;
.4. Форма О программе:
2.4.1. Описание формы О программе;
Рисунок 12 - Внешний вид окна справки
Для каждого раздела на вкладке Опции раздела
указываем в строке Контекст справки номер данного раздела.
Для того, что бы скомпилировать проект справки,
нужно нажать Ctrl+F9, затем в открывшемся окне выбрать вкладку WinHelp, указать
путь сохранения (желательно папку с программой) и нажать OK.
В самой программе для того, чтобы открыть
справку, нужно сделать следующее: щёлкнув один раз по форме, в Object
Incpector’е в строке HelpFile записать имя скомпилированного проекта, а в строке
HelpContext указать номер раздела справки, который необходимо открыть. Теперь в
ходе работы программы при нажатии на кнопку F1 будет открыт необходимый раздел
справки.
Для того чтобы в ходе работы программы при
нажатии на кнопку Справка появлялся нужный раздел справки, надо на кнопку
записать следующий фрагмент программного кода (цифра обозначает номер раздела
справки): ShellExecute(handle,
nil, PChar(ExtractFilePath(ParamStr(0))+
'spravka.chm'),
nil, nil,
SW_SHOW);
// Вызов справки
Эти действия необходимо проделать для всех форм
программы, только следует изменять номер раздела справки.
РАСЧЁТ КОНТРОЛЬНОГО ПРИМЕРА
При помощи программы рассчитаем коэффициент
мощности выпрямителя. По графикам определим как влияет каждый из параметров на
коэффициент мощности выпрямителя.
X1=0.6 Ом -
минимальное значение реактивного сопротивления;
X2=1.5 A
- максимальное значение реактивного сопротивления;
n=15 - число
расчетных точек;
E1=0.15 В -
минимальное значение электродвижущей силы;
E2=2.6 В -
максимальное значение электродвижущей силы
m=14 - число
расчетных точек;
k=0.2 - отношение
эффективного тока к среднему выпрямленному току.
E=0.24 -
коэффициент, учитывающий влияние омического падения напряжения в цепи
переменного тока на среднее выпрямленное напряжение;
Id =0.75 -
величина выпрямленного тока
k0=0.33 - отношение
коэффициента трансформации на данной ступени регулирования к наименьшему
коэффициенту трансформации, при котором получается номинальная электродвижующая
сила холостого хода вторичной обмотки трансформатора.
Рисунок 13 - Вид главной формы
На рисунке 12 показан результат расчёта.
Рисунок 14 - Результат расчёта
Рисунок 15 - Зависимость от реактивного
сопротивления
Рисунок 16 - Зависимость от эффективного
значения электродвижущей силы
Рисунок 17 - Трёхмерная зависимость
ЗАКЛЮЧЕНИЕ
В результате проделанной мной работы создана
программа для расчёта коэффициента мощности выпрямителя. Как приложение к
программе создана справочная система для лучшего освоения программы.
При помощи этой программы можно анализировать от
каких параметров, и в какой степени зависит искомая величина. При помощи
программы произведён расчёт контрольного примера, в котором использованы
конкретные данные трансформатора.
ПРИЛОЖЕНИЯ
Приложение 1
Таблица П.1-Сводные данные по расчётным
параметрам
Переменная
|
Обозначение
в формуле
|
Диапазон
изменения
|
Примечания
|
Реактивное
сопротивление
|
X
|
0,6…1,5
|
Варьируемая
величина
|
Эффективное
значение ЭДС
|
Е
|
0,15…2,6
|
Варьируемая
величина
|
отношение
эффективного тока вторичной обмотки трансформатора к среднему значению
выпрямленному току
|
k
|
0,2
|
Постоянная величина
|
коэффициент,
учитывающий влияние омического падения напряжения в цепи переменного тока на
среднее выпрямленное напряжение
|
ξ
|
0,24
|
Постоянная величина
|
величина
выпрямленного тока
|
|
0,75
|
Постоянная
величина
|
отношение
коэффициента трансформации на данной ступени регулирования к наименьшему
коэффициенту трансформации, при котором получается номинальная
электродвижующая сила холостого хода вторичной обмотки трансформатора.
|
|
Постоянная величина
|
Приложение 2
Приложение 2 содержит полный текст программы.
ФОРМА 1Unit1;,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Menus,
ExtCtrls, ComCtrls, XPMan, StdCtrls, Buttons, Unit2,shellapi ;= class(TForm):
TStatusBar;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;:
TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;:
TMenuItem;: TXPManifest;: TPopupMenu;: TMenuItem;: TMenuItem;: TMenuItem;:
TMenuItem;: TGroupBox;: TGroupBox;: TGroupBox;: TGroupBox;: TBitBtn;: TBitBtn;:
TBitBtn;: TBitBtn;: TLabeledEdit;: TLabeledEdit;: TLabeledEdit;: TLabeledEdit;:
TLabeledEdit;: TLabeledEdit;: TLabeledEdit;: TLabeledEdit;: TUpDown;: TUpDown;:
TOpenDialog;: TSaveDialog;: TLabeledEdit;: TLabeledEdit;FormCreate(Sender:
TObject);ShowHint(Sender: TObject);Exit(Sender: TObject);ExecCalc(Sender:
TObject);Calculate(Sender: TObject);leFloatKeyPress(Sender: TObject; var Key:
Char);leIntKeyPress(Sender: TObject; var Key: Char);leIntKeyUp(Sender: TObject;
var Key: Word;: TShiftState);ShowAboutProgram(Sender: TObject);N4Click(Sender:
TObject);N5Click(Sender: TObject);FormCloseQuery(Sender: TObject; var CanClose:
Boolean);LoadDataFile(FileName: TFileName);SaveDataFile(FileName:
TFileName);bbHelpClick(Sender: TObject);N10Click(Sender: TObject);
{ Private declarations }
{ Public declarations };: TFMain;,
MvSteps: Integer;, Xmin, Xmax, dX, Emin, Emax, dE, _k, _Id, _Em: Real;Unit3,
Unit4;Formula(k0, X, E, _k, i, _Em: Real): Real; stdcall;'Dll\FormulaDLL.dll'
index 1
{$R
*.dfm}TFMain.LoadDataFile(FileName: TFileName);: string;:
TextFile;FileExists(FileName) then(TempFile, FileName);(TempFile);(TempFile,
TempStr);.Text := TempStr;(TempFile, TempStr);.Text := TempStr;(TempFile,
TempStr);.Position := StrToInt(TempStr);(TempFile, TempStr);.Text :=
TempStr;(TempFile, TempStr);.Text := TempStr;(TempFile, TempStr);.Position :=
StrToInt(TempStr);(TempFile, TempStr);.Text := TempStr;(TempFile,
TempStr);.Text := TempStr;(TempFile, TempStr);.Text := TempStr;(TempFile,
TempStr);.Text := TempStr;(TempFile);;;;TFMain.SaveDataFile(FileName:
TFileName);: TextFile;(TempFile, FileName);(TempFile);(TempFile,
LabeledEdit1.Text);(TempFile, LabeledEdit2.Text);(TempFile,
LabeledEdit3.Text);(TempFile, LabeledEdit4.Text);(TempFile,
LabeledEdit5.Text);(TempFile, LabeledEdit6.Text);(TempFile,
LabeledEdit7.Text);(TempFile, LabeledEdit8.Text);(TempFile, LabeledEdit9.Text);(TempFile,
LabeledEdit10.Text);(TempFile);;;TFMain.ShowHint(Sender: TObject);.SimpleText
:= Application.Hint;TFMain.Exit(Sender:
TObject);('Data.txt');;TFMain.ExecCalc(Sender: TObject);('Calc.exe',
SW_NORMAL);GetData: Boolean;: TLabeledEdit;FMain do:= True;:= LabeledEdit1;:=
StrToFloat(LabeledEdit1.Text);:= LabeledEdit2;:=
StrToFloat(LabeledEdit2.Text);:= LabeledEdit4;:=
StrToFloat(LabeledEdit4.Text);:= LabeledEdit5;:=
StrToFloat(LabeledEdit5.Text);:= LabeledEdit7;
_k := StrToFloat(LabeledEdit7.Text);:=
LabeledEdit8;
_Em :=
StrToFloat(LabeledEdit8.Text);:= LabeledEdit9;
_Id :=
StrToFloat(LabeledEdit9.Text);:= LabeledEdit10;:=
StrToFloat(LabeledEdit10.Text);:= LabeledEdit3;:=
StrToInt(LabeledEdit3.Text);:= (Xmax - Xmin) / (MsSteps - 1);:= LabeledEdit6;:=
StrToInt(LabeledEdit6.Text);:= (Emax - Emin) / (MvSteps - 1);(Xmin < 0.3) or
(Xmax < 0.3) then('Значение реактивного сопротивления
должно быть не менее 0,3 Ом',
mtWarning, [mbOK], 0);:=
False;;(Xmax > 2) or (Xmin > 2) then('Значение реактивного
сопротивления должно быть не более 2 Ом',
mtWarning, [mbOK], 0);:=
False;;(Emin < 0.1) or (Emax < 0.1) then('Эффективное
значение электродвижущей силы должно быть не менее 0,1 В',
mtWarning, [mbOK], 0);:=
False;;(Emax > 3) or (Emin > 3) then('Эффективное
значение электродвижущей силы должно быть не более 3 В',
mtWarning, [mbOK], 0);:= False;;(_k
> 0.5) or (_k < 0.1) then('Значение отношения
эффективного тока вторичной обмотки'+
' к среднему выпрямленному току должно
находиться в ' +
'пределах от 0,1 до 0,5 ', mtWarning,
[mbOK], 0);
Result := False;;(_Em < 0.1) or
(_Em > 0.5) then
MessageDlg('Значение
коэффициента, учитывающего влияние омического'+
' падения напряжения в цепи переменного тока на
среднее выпрямленное напряжение ' +
'должно находиться в пределах от 0,1 до 0,5', mtWarning,
[mbOK], 0);
end;(_Id < 0.5) or (_Id > 1)
then
MessageDlg('Величина
выпрямленного тока должна находиться'+
' в пределах от 0,5 до 1 А', mtWarning,
[mbOK], 0);
Result := False;;(k0 < 0.1) or
(k0 > 0.5) then
MessageDlg('Отношение
коэффициента трансформации на данной ступени'+
' регулирования к наименьшему коэффициенту
трансформации должен находиться'+
' в пределах от 0,1 до 0,5', mtWarning,
[mbOK], 0);
Result := False;;(Xmin >= Xmax)
or (Xmin >= Xmax) then
MessageDlg('Минимальное
значение должно быть меньше максимального',
mtWarning, [mbOK], 0);:=
False;;EConvertError do('Некорректно введены данные!', mtWarning, [mbOK],
0);.SetFocus;:= False;;EZeroDivide do('Количество шагов должно быть > 1!',
mtWarning, [mbOK], 0);.SetFocus;:= False;;;;;TFMain.Calculate(Sender:
TObject);, j: Integer;GetData then.sgRes.ColCount := MsSteps +
1;.sgRes.RowCount := MvSteps +
1;.Series1.Clear;.Series2.Clear;.Series3.Clear;.Series4.Clear;.LineSeries1.Clear;.LineSeries2.Clear;.LineSeries3.Clear;i
:= 0 to MsSteps - 1 doj := 0 to MvSteps - 1 do.sgRes.Cells[i + 1, j + 1] :=
Format('%0.2f',
[Formula(k0, Xmin + dX * i, Emin +
dE * j, _k, _Id, _Em)]);i := 1 to MsSteps doj := 1 to MvSteps
do.Series4.AddXYZ(j, StrToFloat(FCalc.sgRes.Cells[i, j]), i);
//xi := 1 to MsSteps
do.sgRes.Cells[i, 0] := Format('%.0f Ом', [Xmin + dX * (i -
1)]);.AutoSizeGridColumn(FCalc.sgRes, i);;
//xi := 1 to MvSteps
do.sgRes.Cells[0, i] := Format('%.0f В', [Emin + dE * (i -
1)]);.AutoSizeGridColumn(FCalc.sgRes, 0);i := 0 to MsSteps - 1
do.Series1.AddXY((Xmin + dX * i) / 1000,(k0, Xmin + dX * i, Emin, _k, _Id, _Em)
/ 1000);.Series2.AddXY((Xmin + dX * i) / 1000,(k0, Xmin + dX * i, (Emin + Emax)
/ 2, _k, _Id, _Em) /
);.Series3.AddXY((Xmin + dX * i) /
1000,(k0, Xmin + dX * i, Emax, _k, _Id, _Em) / 1000);;i := 0 to MvSteps - 1
do.LineSeries1.AddXY((Emin + dE * i) / 1000,(k0, Xmin, Emin + dE * i, _k, _Id,
_Em) / 1000);.LineSeries2.AddXY((Emin + dE * i) / 1000,(k0, (Xmin + Xmax) / 2,
Emin + dE * i, _k, _Id, _Em) /
);.LineSeries3.AddXY((Emin + dE * i)
/ 1000,(k0, Xmax, Emin + dE * i, _k, _Id, _Em) /
1000);;.ShowModal;;;TFMain.FormCreate(Sender: TObject);('Data.txt');.OnHint :=
ShowHint;TFMain.leFloatKeyPress(Sender: TObject; var Key: Char);Key of
'0'..'9', #8:;
'.', ',': Key := DecimalSeparator:=
#0;;;TFMain.leIntKeyPress(Sender: TObject; var Key: Char);Key of
'0'..'9', #8:;:=
#0;;;TFMain.leIntKeyUp(Sender: TObject; var Key: Word;:
TShiftState);(TLabeledEdit(Sender).Text = '') or
(StrToInt(TLabeledEdit(Sender).Text)
<= 1) then(Sender).Text := '2';;TFMain.ShowAboutProgram(Sender:
TObject);.ShowModal;;TFMain.N4Click(Sender: TObject);.InitialDir :=
ExtractFilePath(Application.ExeName);OpenDlg.Execute
then(OpenDlg.FileName);;TFMain.N5Click(Sender: TObject);.InitialDir :=
ExtractFilePath(Application.ExeName);SaveDlg.Execute thenPos('.txt',
SaveDlg.FileName) = 0 then.FileName := SaveDlg.FileName +
'.txt';(SaveDlg.FileName);;;TFMain.FormCloseQuery(Sender: TObject; var
CanClose: Boolean);
case
MessageDlg('Вы действительно хотите
выйти из программы?', mtConfirmation,
mbOKCancel, 0) of: CanClose :=True;:
CanClose := False;;;TFMain.bbHelpClick(Sender: TObject);(handle, nil,
PChar(ExtractFilePath(ParamStr(0))+ 'spravka.chm'), nil, nil, SW_SHOW); //
Вызов справки;TFMain.N10Click(Sender: TObject);(handle, nil,
PChar(ExtractFilePath(ParamStr(0))+ 'spravka.chm'), nil, nil, SW_SHOW); //
Вызов справки;.
ФОРМА 2Unit2;,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids,
StdCtrls, Buttons, ComCtrls, ComObj, Printers,shellapi;= class(TForm): TLabel;:
TStringGrid;: TGroupBox;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;:
TBitBtn;: TBitBtn;: TStatusBar;: TSaveDialog;: TPrintDialog;FormCreate(Sender:
TObject);bbExitClick(Sender: TObject);bbChartClick(Sender:
TObject);bbHTMLClick(Sender: TObject);bbWordClick(Sender:
TObject);bbExcelClick(Sender: TObject);bbPrintClick(Sender:
TObject);AutoSizeGridColumn(Grid: TStringGrid; Column:
Integer);bbHelpClick(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TFCalc;Unit3;
{$R
*.dfm}TFCalc.AutoSizeGridColumn(Grid: TStringGrid; Column: Integer);, Temp,
Max: Integer;:= 0;i := 0 to Grid.RowCount do:=
Grid.Canvas.TextWidth(Grid.Cells[Column, i]);Temp > Max then:=
Temp;;.ColWidths[Column] := Max + 3 +
Grid.GridLineWidth;;TFCalc.FormCreate(Sender: TObject);.Caption := 'Сохранить
в'#13'MS Excel';.Caption := 'Сохранить в'#13'MS Word';.Caption :=
'Сохранить'#13'в HTML';.Caption := 'Распечатать'#13'таблицу';.Caption :=
'Графики';.Caption := 'Справка';.Caption :=
'Закрыть'#13'окно';TFCalc.bbExitClick(Sender:
TObject);;TFCalc.bbChartClick(Sender:
TObject);.ShowModal;;TFCalc.bbHTMLClick(Sender: TObject);: TextFile;, j:
Integer;.DefaultExt := 'html';.Filter := 'HTML-файл (*.html)|*.html';.FileName
:= 'Результаты расчетов';SaveDlg.Execute then(HTMLFile,
SaveDlg.FileName);(HTMLFile);(HTMLFile, '<html>');(HTMLFile,
'<head>');(HTMLFile, '<meta http-equiv="Content-Type"
content="text/html; ' +
'charset=windows-1251">');(HTMLFile,
'<title>Результаты расчетов</title>');(HTMLFile,
'</head>');(HTMLFile, '<body>');(HTMLFile, ' <center><font
size="6"><b>' + Label1.Caption +
'</b></font></center>');(HTMLFile,
' <table border=1 cellspacing=0 cellspading=0>');i := 0 to sgRes.RowCount
do(HTMLFile, ' <tr>');j := 0 to sgRes.ColCount do(j = 0) or (i = 0)
then(HTMLFile, ' <td><b><i>' +.Cells[j, i] +
'</i></b>')(HTMLFile, ' <td>' + sgRes.Cells[j,
i]);;(HTMLFile, ' </table>');(HTMLFile, '</body>');(HTMLFile,
'</html>');(HTMLFile);;;TFCalc.bbWordClick(Sender: TObject);, NewDoc,
WordTable: OLEVariant;, iCols, iGridRows, jGridCols: Integer;.DefaultExt :=
'doc';.Filter := 'Документ MS Word (*.doc)|*.doc';.FileName := 'Результаты
расчетов';not SaveDlg.Execute then;:= CreateOleObject('Word.Application');;:=
WordApp.Documents.Add;:= sgRes.ColCount;:= sgRes.RowCount;:=
NewDoc.Tables.Add(WordApp.Selection.Range, iRows, iCols);.Range.Font.Size :=
8;iGridRows := 1 to iRows dojGridCols := 1 to iCols do.Cell(iGridRows,
jGridCols).Range.Text :=.Cells[jGridCols - 1, iGridRows -
1];.ActiveDocument.SaveAs(SaveDlg.FileName);.Quit;:= Unassigned;:=
Unassigned;:= Unassigned;;TFCalc.bbExcelClick(Sender: TObject);, Sheet, Column:
Variant;, j, m, n: Integer;.DefaultExt := 'xls';.Filter := 'Документ MS Excel
(*.xls)|*.xls';.FileName := 'Результаты расчетов';not SaveDlg.Execute then;:=
CreateOleObject('Excel.Application');;.WorkBooks.Add(-4167);.WorkBooks[1].WorkSheets[1].Name
:= 'Результаты расчетов';:= XLApp.WorkBooks[1].WorkSheets['Результаты
расчетов'].Columns;:= sgRes.ColCount;:= sgRes.RowCount;i := 1 to m + 1 do:=
XLApp.WorkBooks[1].WorkSheets['Результаты расчетов'].Rows;.Columns[1].Font.Bold
:= True;.Rows[1].Font.Bold := True;.Rows[1].Font.Italic :=
True;.Rows[2].Font.Bold := True;:= XLApp.WorkBooks[1].WorkSheets['Результаты
расчетов'];.Enabled := False;i := 0 to n doj := 0 to m do.Cells[j + 2, i + 1]
:= '''' + sgRes.Cells[i, j];.Enabled := True;.Cells[1, 2] :=
Label1.Caption;.ActiveWorkBook.SaveAs(SaveDlg.FileName);.Quit;TFCalc.bbPrintClick(Sender:
TObject);, X2: Integer;, Y2: Integer;: Integer;: Integer;: TRect;:
TPrinterOrientation;:= Printer.Orientation;.Orientation :=
poLandScape;PrintDialog1.Execute then.Title :=
Label1.Caption;.BeginDoc;.Canvas.Pen.Color := 0;.Canvas.Font.Name := 'Times New
Roman';.Canvas.Font.Size := 12;.Canvas.Font.Style := [fsBold,
fsUnderline];.Canvas.TextOut(0, 100, Printer.Title);F := 1 to sgRes.ColCount -
1 do:= 0;TmpI := 1 to (F - 1) do:= X1 + 5 * (sgRes.ColWidths[TmpI]);:= 300;:=
0;TmpI := 1 to F do:= X2 + 5 * (sgRes.ColWidths[TmpI]);:= 450;:= Rect(X1, Y1,
X2 - 30, Y2);.Canvas.Font.Style := [fsBold];.Canvas.Font.Size :=
7;.Canvas.TextRect(TR, X1 + 50, 350, sgRes.Cells[F, 0]);.Canvas.Font.Style :=
[];TmpI := 1 to sgRes.RowCount - 1 do:= 150 * TmpI + 300;:= 150 * (TmpI + 1) +
300;:= Rect(X1, Y1, X2 - 30, Y2);.Canvas.TextRect(TR, X1 + 50, Y1 + 50,
sgRes.Cells[F, TmpI]);;;.EndDoc;;.Orientation :=
OldOrientation;;TFCalc.bbHelpClick(Sender: TObject);(handle, nil,
PChar(ExtractFilePath(ParamStr(0))+ 'spravka.chm'), nil, nil, SW_SHOW); //
Вызов справки;.
ФОРМА 3Unit3;,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ComCtrls,
StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart,, Printers;=
class(TForm): TPageControl;: TTabSheet;: TTabSheet;: TTabSheet;: TChart;:
TLineSeries;: TLineSeries;: TLineSeries;: TChart;: TLineSeries;: TLineSeries;:
TLineSeries;: TChart;: TSurfaceSeries;: TButton;: TButton;: TButton;:
TPrintDialog;Button1Click(Sender: TObject);Button2Click(Sender:
TObject);Button3Click(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TFCharts;Unit2, Unit1,shellapi;
{$R
*.dfm}TFCharts.Button1Click(Sender: TObject);;TFCharts.Button2Click(Sender:
TObject);(handle, nil, PChar(ExtractFilePath(ParamStr(0))+ 'spravka.chm'), nil,
nil, SW_SHOW); // Вызов справки;TFCharts.Button3Click(Sender: TObject);,
pWidth: Longint;: TPrinterOrientation;: TChart;PrintDlg.Execute
thenPageControl1.TabIndex of
: TempChart := Chart1;
: TempChart := Chart2;
: TempChart := Chart3;;.Cursor :=
crHourGlass;:= Printer.Orientation;.Orientation := poLandScape;.BeginDoc;:=
Printer.PageHeight;:= Printer.PageWidth;.PrintPartial(Rect(pWidth div 15,
pHeight div 10,- (pWidth div 20), pHeight - (pHeight div
20)));.EndDoc;Exception do.Abort;.EndDoc;;;.Orientation :=
OldOrientation;.Cursor := crDefault;;.
ФОРМА 4Unit4;,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls,
ExtCtrls, Buttons,Shellapi;= class(TForm): TGroupBox;: TGroupBox;: TLabel;:
TGroupBox;: TBitBtn;: TBitBtn;: TTimer;: TImage;tAnimationTimer(Sender:
TObject);FormDestroy(Sender: TObject);FormShow(Sender:
TObject);BitBtn2Click(Sender: TObject);BitBtn3Click(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TFAbout;:integer;
{$R
*.dfm}TFAbout.tAnimationTimer(Sender: TObject);: integer;.Canvas.Pen.Color :=
clWhite;.Canvas.Rectangle(0,0,Image1. Width,Image1.Height);.Canvas.Pen.Color :=
clBlack;.Canvas.MoveTo(0, trunc(30*sin(y))+40);x := 0 to Image1.ClientWidth do
// От левого края до конца формы.Canvas.LineTo(x, trunc(30*sin(x/10+y))+40); //
Собственно, рисуем график;:=y+1;;TFAbout.FormDestroy(Sender: TObject);.Enabled
:= False;;TFAbout.FormShow(Sender: TObject);.Enabled :=
True;;TFAbout.BitBtn2Click(Sender: TObject);(handle, nil,
PChar(ExtractFilePath(ParamStr(0))+ 'spravka.chm'), nil, nil, SW_SHOW); //
Вызов справки;TFAbout.BitBtn3Click(Sender: TObject);: integer;.Canvas.Pen.Color
:= clBlack; // Рисуем голубым цветом1.Canvas.MoveTo(0,
100); // Устанавливаем точку начала рисования
for
x := 0 to
Image1.ClientWidth
do // От левого края
до конца формы
begin
Image1.Canvas.LineTo(x,
trunc(30*sin(x/10))+40);
// Собственно, рисуем график
end;;.FormulaDLL;
{$R *.res}Formula(k0,X,E,k,Id,Em:
Real): Real; stdcall;:= ((2*sqrt(2))/(3.14*k))-((2*Em*Id*X*k0)/(3.14*E*k))
end;
//k - отношение эффективного тока вторичной
обмотки трансформатора к среднему выпрямленному току
//Em - коэффициент, учитывающий влияние
омического падения напряжения в цепи переменного тока на среднее выпрямленное
напряжение
//Id - величина выпрямленного тока
//X - (завис) реактивное сопротивление
//k0 -отношение коэффициента трансформации на
данной ступени регулирования к наименьшему коэффициенту трансформации, при
котором получается номинальная электродвижущая сила хода вторичной обмотки
трансформатора
//E - (завис) эффективное значение электродвижущей
силы