(Form9 для Асинхронного двигуна) для вибору типу збереження чи імпорту розрахованих параметрів , з такими об’єктами:
- Label1;
- GroupBox1;
- 3 кнопки від BitBtn1 до BitBtn3;
- MainMenu1;
- Timer1;
- CheckBox1 та CheckBox2;
- Panel1;
Для створення головного меню вставляється об’єкт MainMenu1 і надаємо йому вигляд, як зображено на Рисунку 11.
Рисунок 11 – Вікно „Form6.MainMenu1” – для створення головного меню
Форма Form6 (або Form9) матиме такий вигляд(після зміни властивостей об’єктів) – Рисунок 12.
Рисунок 12 - для вибору типу збереження чи імпорту розрахованих параметрів з розміщеними об’єктами та зміненими властивостями
В програмі також створюється форма про програму (AboutBox), і задається вигляд, змінюючи властивості об’єктів, як зображено на Рисунку 13
Рисунок 13 – Вікно “Про програму”
Розробка інтерфейсу на цьому завершується
6. Складання коду програми
Основні частини тексту модуля Unit1.pas, який відповідає за вибір типу двигуна чи генератора приведені нижче:
- анімація лівої картинки
if image1.Visible=true then image1.Visible:=false
else image1.Visible:=true;
- анімація правої картинки
if image2.Visible=true then image2.Visible:=false
else image2.Visible:=true;
- анімація надпису
if label1.Visible=true then
label1.Visible:=false
else label1.Visible:=true;
{вихід з програми}
close;
- перехід по формах
form2.show;
form1.Visible:=false;
- показ інформації про програму
aboutbox.show;
form1.Visible:=false;
Основні частини тексту модуля Unit2.pas чи Unit3.pas , ідентичні тому опис однієї з них приведений нижче
- функція округлення до заданого знаку
function RoundTo(num:real; r:byte):real;
var
rt:longint;
i:byte;
begin
rt:=1;
for i:=1 to r do rt:=rt*10;
RoundTo:=round(num*rt)/rt;
end;
- вихід з програми
form1.close;
- повернення на попередню форму
form1.Show;
form3.visible:=false;
- масив з якого автоматично вибирається напруженість поля в станині
aa[1,0]:=0.52;aa[1,1]:=0.53;aa[1,2]:=0.54;aa[1,3]:=0.55;aa[1,4]:=0.56;
aa[1,5]:=0.58;aa[1,6]:=0.59;aa[1,7]:=0.60;aa[1,8]:=0.61;aa[1,9]:=0.62;
aa[2,0]:=0.64;aa[2,1]:=0.65;aa[2,2]:=0.66;aa[2,3]:=0.67;aa[2,4]:=0.69;
aa[2,5]:=0.70;aa[2,6]:=0.71;aa[2,7]:=0.72;aa[2,8]:=0.74;aa[2,9]:=0.77;
aa[3,0]:=0.80;aa[3,1]:=0.81;aa[3,2]:=0.83;aa[3,3]:=0.85;aa[3,4]:=0.87;
aa[3,5]:=0.89;aa[3,6]:=0.91;aa[3,7]:=0.93;aa[3,8]:=0.95;aa[3,9]:=0.97;
aa[16,5]:=47.2;aa[16,6]:=49.3;aa[16,7]:=51.4;aa[16,8]:=53.5;aa[16,9]:=55.6;
aa[17,0]:=57.7;aa[17,1]:=60.0;aa[17,2]:=63.0;aa[17,3]:=66.0;aa[17,4]:=70.0;
aa[17,5]:=74.0;aa[17,6]:=79.0;aa[17,7]:=84.0;aa[17,8]:=90.0;aa[17,9]:=97.0;
- отримання числових значень введених даних
val(edit1.Text,d_ja_zovn,coder1);
val(edit2.Text,d_ja_vn,coder2);
val(edit3.Text,da,coder3);
val(edit4.Text,dval,coder4);
val(edit5.Text,lja,coder5);
val(edit6.Text,n,coder6);
val(edit37.Text,hzser1,coder37);
- розрахунок параметрів та виведення їх в поле виведення
pol_dil:=pi*da/p2;
str(pol_dil:8:4,ed1);
form5.Memo1.Lines.Add('Полюсне ділення - мм ');
form5.Memo1.Lines.Add(ed1);
form5.Memo1.Lines.Add(line);
l:=la-nk*bk;
str(l:8:4,ed2);
form5.Memo1.Lines.Add('Довжина якоря без вентиляційних каналів - мм');
form5.Memo1.Lines.Add(ed2);
form5.Memo1.Lines.Add(line);
str(bzmin:8:4,ed10);
form5.Memo1.Lines.Add('Ширина зубця в номінальному перерізі - мм ');
form5.Memo1.Lines.Add(ed10);
form5.Memo1.Lines.Add(line);
bzmax:=(bq*ti)/(kc*bzmin);
str(bzmax:8:4,ed11);
form5.Memo1.Lines.Add('Індукція в найменшому пеперізі зубця - Тл ');
form5.Memo1.Lines.Add(ed11);
form5.Memo1.Lines.Add(line);
- якщо bzmax>1.8 Тл, то рахувати додаткові параметри
if bzmax>1.8 then begin
MessageDlg('Велечина Bz max > 1.8 Тл - Беруться дані з графіків та розраховуються додаткові параметри Генератора. ',
mtInformation,[mbOk], 0);
form5.Memo1.Lines.Add(' Результати розрахунку додаткових параметрів ');
form5.Memo1.Lines.Add(line);
- Розрахунок додаткових параметрів
B_Bzmin:=(bq*ti)/(kc*(ti-bp));
str(B_Bzmin:8:4,ed12);
form5.Memo1.Lines.Add('Магнітна індукція в максимальному перерізі зубця - Тл');
form5.Memo1.Lines.Add(ed12);
form5.Memo1.Lines.Add(line);
bzser:=0.5*(bzmax+b_bzmin);
str(bzser:8:4,ed13);
form5.Memo1.Lines.Add('Магнітна індукція в середньому перерізі зубця - Тл');
form5.Memo1.Lines.Add(ed13);
form5.Memo1.Lines.Add(line);
form5.Memo1.Lines.Add(' Напруженість поля в середньому перерізі зубця');
form5.Memo1.Lines.Add('Bz ser = '+ed23+' Тл ');
form5.Memo1.Lines.Add('kz ser = '+ed24);
form5.Memo1.Lines.Add('Hz ser = '+ed25+' А/см ');
form5.Memo1.Lines.Add(line);
end
- інакше
else MessageDlg('Велечина Bz max < 1.8 Тл - Не розраховуються додаткові параметри Генератора. ',
mtInformation,[mbOk], 0);
form5.Memo1.Lines.Add(' Продовження розрахунку основних параметрів ');
form5.Memo1.Lines.Add(line);
- розрахунок основних параметрів
h_z:=(hzmax1+4*ht+hzmin2)/6;
str(h_z:8:4,ed26);
form5.Memo1.Lines.Add('Значення напруженості поля в зубці якоря - А/см');
form5.Memo1.Lines.Add(ed26);
form5.Memo1.Lines.Add(line);
ba:=F/(2*(sa*0.000001));
str(ba:8:4,ed30);
form5.Memo1.Lines.Add('Магнітна індукція в спинці якоря - Тл');
form5.Memo1.Lines.Add(ed30);
form5.Memo1.Lines.Add(line);
- округлення до заданого знаку
n_n_n:=2; a_a_a:=4;
f1:=roundto(f,a_a_a);
ba1:=roundto(ba,n_n_n);
- отримання індексів елементів масиву
ind1:=trunc(f1/0.01+1);
ind2:=trunc((ba1-0.3)/0.1);
- вибірка елементів з масиву
H_a:=aa[ind2,ind1];
- продовження розрахунку основних параметрів
form5.Memo1.Lines.Add('Напруженість поля в спинці якоря - А/см');
form5.Memo1.Lines.Add(ed31);
form5.Memo1.Lines.Add(line);
l_a:=((pi)*(da-(2*hz)-ha))/p2;
str(l_a:8:4,ed32);
form5.Memo1.Lines.Add('Довжина середньої силової лінії в спинці якоря - мм');
form5.Memo1.Lines.Add(ed32);
form5.Memo1.Lines.Add(line);
ku:=fbo/(2*fq);
str(ku:8:4,ed46);
form5.Memo1.Lines.Add('Коефіцієнт магнітного накопичення ');
form5.Memo1.Lines.Add(ed46);
form5.Memo1.Lines.Add(line);
form5.Memo1.Lines.Add(' Розрахунок закінчено ');
end;
Основні частини тексту модуля Unit5.pas чи Unit7.pas , ідентичні тому опис однієї з них приведений нижче:
- очистка поля виведення
begin
memo1.Clear;
- закриття форми
begin
form1.close;
- перехід на попередню форму
begin
form3.show;
form5.Visible:=false;
Основні частини тексту модуля Unit6.pas чи Unit9.pas , ідентичні тому опис однієї з них приведений нижче:
- збереження даних
if checkbox1.Checked=true then begin {якщо встановлений, то запис до файлу}
assignfile(file1,'Import files\TXT\Generation.txt');
rewrite(file1);
writeln(File1,'Результати розрахунків основних параметрів генератора постійного струму ');
writeln(file1,' ');
writeln(file1,'Полюсне ділення - мм');
writeln(file1,ed1);
writeln(file1,' ');
writeln(file1,'Довжина якоря без вентиляційних каналів - мм');
writeln(file1,ed2);
writeln(file1,' ');
writeln(file1,'МРС обмотки якоря збудження на пару полюсів в режимі холостого ходу - А');
writeln(file1,ed45);
writeln(file1,' ');
writeln(file1,'Коефіціент магнітного накопичення ');
writeln(file1,ed46);
writeln(file1,' ');
writeln(file1,' Розрахунки завершено успішно ');
closefile(file1);
end;
- якщо встановлений, то імпорт в документ Word
if checkbox2.Checked=true then {якщо встановлений, то імпорт в документ Word}
- перевірка чи можна запустити Word
begin
try
Word := CreateOleObject('Word.Application');
except
ShowMessage('Cannot start Word !');
Exit;
end;
- параметри тексту верхнього колонтитула
Word.Selection.Font.Name := 'Palatino linotype';
Word.Selection.Font.Size := 14;
Word.Selection.Font.Bold := True;
Word.Selection.Font.color := 0111;
Word.Selection.ParagraphFormat.Alignment := 1;
- записати текст в колонтитул
Word.Selection.TypeText(
'Розрахунок параметрів генератора постійного струму ');
- параметри тексту імпортованих параметрів
Word.ActiveWindow.ActivePane.View.SeekView := 0;
Word.Selection.Font.Name := 'palatino linotype';
Word.Selection.Font.Size := 12;
Word.Selection.Font.Bold := false;
- імпортовані параметри
Word.Selection.TypeText('Полюсне ділення мм');
Word.Selection.TypeParagraph;
Word.Selection.TypeText(ed1);
Word.Selection.TypeParagraph;
Word.Selection.TypeText('Довжина якоря без вентиляційних каналів - мм');
Word.Selection.TypeParagraph;
Word.Selection.TypeText(ed2);
Word.Selection.TypeParagraph;
Word.Selection.TypeText('Розрахункова довжина якоря - мм');
Word.Selection.TypeParagraph;
Word.Selection.TypeText(ed3);
Word.Selection.TypeParagraph;
Word.Selection.TypeText('Загальний потік - Вб');
Word.Selection.TypeParagraph;
Word.Selection.TypeText(ed4);
Word.Selection.TypeParagraph;
word.Selection.TypeText('Магнітне напруження станини - мм');
Word.Selection.TypeParagraph;
Word.Selection.TypeText(ed43);
Word.Selection.TypeParagraph;
word.Selection.TypeText('Магнітна індукція в станині - А');
Word.Selection.TypeParagraph;
Word.Selection.TypeText(ed44);
Word.Selection.TypeParagraph;
word.Selection.TypeText('МРС обмотки якоря збудження на пару полюсів в режимі холостого ходу - А');
Word.Selection.TypeParagraph;
Word.Selection.TypeText(ed45);
Word.Selection.TypeParagraph;
word.Selection.TypeText('Коефіцієнт магнітного накопичення ');
Word.Selection.TypeParagraph;
Word.Selection.TypeText(ed46);
Word.Selection.TypeParagraph;
Word.Selection.TypeParagraph;
word.Selection.TypeText('Розрахунок завершено успішно. ');
Основні частини тексту модуля Unit4.pas (про програму ) приведено нижче:
- перехід на основну форму
close;
form1.visible:=true;
- показувати час
label5.Caption:=timetostr(time);
7. Аналіз програми
Кожна подія обробляється окремою процедурою і спричиняє різні дії.
При натисненні на кнопку "Асинхронний двигун" відбувається перехід на форму введення початкових вхідних даних, ця подія опрацьовується процедурою Button1Click, цю ж саму дію можна конати з пункта "Розрахувати – Асинхронний двигун" головного меню, ця подія опрацьовується процедурою N8Click. При натисненні на кнопку "Генератор постійного струму" відбувається перехід на форму введення початкових вхідних даних, ця подія опрацьовується процедурою Button2Click, цю ж саму дію можна конати з пункта "Розрахувати – Генератор постійного струму" головного меню, ця подія опрацьовується процедурою N7Click.
При запуску програми виконується анімація надпису "Виберіть тип генератора чи двигуна" та анімація зображення, ці події опрацьовуються такими процедурами, Timer1Timer, Timer2Timer, Timer3Timer.
При вибору пункту "Вихід" головного меню виконується вихід з програми, ця подія опрацьовується процедурою N5Click.
В програмі використана функція округлення до заданого знаку RoundTo, яка використовується при автоматичній вибірці значення напруженості поля.
При натисненні кнопки "Назад" виконується повернення на попередню форму, ця подія опрацьовується процедурою BitBtn1Click.
При натисненні кнопки "Далі" виконується перехід на наступну форму, ця подія опрацьовується процедурою BitBtn2Click.
При виборі пункту головного меню під назвою "Про Програму" викликається інформаційна форма про програму, ця подія опрацьовується процедурою N4Click.
В інформаційній формі "Про Програму " передбачена додаткова функція показу поточного часу, яка опрацьовується процедурою