Расчет диаметра поддерживающего катка, в зависимости от общего количества поддерживающих катков и базы трактора

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 06.12.2013
Размер файла 2,2 M

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

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

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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Курсовая работа

по дисциплине: «информатика»

Тема: Расчет диаметра поддерживающего катка, в зависимости от общего количества поддерживающих катков и базы трактора

РЕФЕРАТ

ПОДДЕРЖИВАЮЩИЙ КАТОК ГУСЕНИЧНОГО ТРАКТОРА, БАЗА ТРАКТОРА, DELPHI, СПРАВКА

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

Программа разработана в среде Delphi. К программе прилагается справка.

ВВЕДЕНИЕ

В современном мире с высоким уровнем развития науки и техники идет повсеместное использование ЭВМ. С ее помощью успешно решаются технические задачи: от стадии проектирования и разработки до создания действующих образцов и их практического использования. ЭВМ позволяет проводить компьютерное моделирование и расчет, что снижает экономические, материальные и временные затраты, повышает точность и качество совершенной работы.

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

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

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

1. МАТЕМАТИЧЕСКАЯ МОДЕЛЬ

Необходимо рассчитать требуемый диаметр поддерживающего катка Dp, в зависимости от общего количества поддерживающих катков z и базы трактора L.

Расчет значения ведется по формуле:

,

где Dp - требуемый диаметр поддерживающего катка, м;

z- общее количество поддерживающих катков;

L- база трактора, м;

My- момент сопротивления проворачиванию уплотнений, Нм;

tg- шаг гусеницы, м;

qg- вес единицы длины гусеницы, Н;

- коэффициент трения гусеницы о ролик;

- коэффициент сопротивления вращению катка;

Расположение поддерживающих катков на гусенице трактора показано на рисунке [1]:

Рисунок 1

Сводные данные по расчетным параметрам примем для модели гусеничного трактора «Беларус 2102», изображение которого показано на рисунке [2]:

Рисунок 2 - Трактор “Беларус 2102”.

Строение поддерживающего катка изображено на рисунке [3]:

Рисунок 3 - Строение поддерживающего катка: 1 - ступица катка, 2 - кронштейн, 3 - резинометаллическое торцовое уплотнение, 4 - корпус уплотнения, 5 - ось, 6 - резиновый бандаж, 7 - крышка

Сводные данные по расчетным параметрам представлены в таблице [1].

Примем коэффициент сопротивления вращению катка для летних условий эксплуатации, который равен 0,01...0,02.

Таблица 1 - Сводные данные по расчетным параметрам

Обозначение в формуле

Диапазон изменения

Примечание

z

1..10

Варьируемая величина

L

2..2,5

Варьируемая величина

My

1,5..5,5

Постоянная величина

tg

0,125

Постоянная величина

qg

100..800

Постоянная величина

µ

0,15

Постоянная величина

f

0,01..0,02

Постоянная величина

2. АЛГОРИТМИЗАЦИЯ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ

Блок-схема алгоритма решения математической модели представлена на рисунке [4]:

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

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

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

Рисунок 4 - Блок-схема алгоритма решения математической модели

3. ТАБЛИЦА ИДЕНТИФИКАТОРОВ

Таблица идентификаторов, используемых в программе, представлена в таблице [2]:

Таблица 2 - Идентификаторы используемые в программе

Переменная в формуле

Обозначение в программе

Тип данных

Область

Видимости

Пояснение

-

zMin

Вещественный

Глобальная

Минимальное количетво поддерживающих катков

-

zMax

Вещественный

Глобальная

Максимальное количетво поддерживающих катков

-

LMin

Вещественный

Глобальная

Начальное значение базы трактора

-

LMax

Вещественный

Глобальная

Конечное значение базы трактора

-M

My

Вещественный

Глобальная

Момент сопротивления проворачиванию уплотнений

-

tg

Вещественный

Глобальная

Шаг гусеницы

fп

f

Вещественный

Глобальная

Коэффициент сопротивления

-

v

Целый

Глобальная

Количество расчётных точек

_

u

Целый

Глобальная

Текущее значение веса подрессоренных частей трактора

-

i

Целый

Локальная

Параметр цикла

-

j

Целый

Локальная

Параметр цикла

-

Fw

Текстовый файл

Локальная

Файловая переменная для записи

-

Fr

Текстовый файл

Локальная

Файловая переменная для записи

-

FrPY

Текстовый файл

Локальная

Файловая переменная для записи

4. РАЗРАБОТКА ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ

При запуске программы появляется главное окно, представленное на рисунке [5]:

Рисунок 5 - Главное окно программы

Для ввода исходных данных существует три блока: Общее количество катков, База трактора и Дополнительные параметры. Для проведения расчетов необходимо нажать кнопку Расчет. Если требуется выполнить дополнительные вычисления, то можно воспользоваться калькулятором, который вызывается нажатием кнопки Калькулятор. Для вызова справки существует кнопка Справка.

Программа содержит падающее меню (рисунок 6) и контекстное меню (рисунок 7), из которых можно выполнить основные действия с программой.

а) б) в)

Рисунок 6 - Главное падающее меню программы: а) меню файл; б) меню расчет; в) меню справка

Рисунок 7 - Контекстное меню программы

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

После выполнения расчетов результаты отображаются на новой форме в виде таблицы (рисунок 8).

Рисунок 8 - Результаты расчета

На данной форме имеются кнопки позволяющие провести постобработку полученных результатов. Можно сохранить результаты в MS Excel, MS Word. Есть возможность показать графические зависимости. Возможен вызов Справки при нажатии на соответствующую кнопку. Так же есть контекстное меню (рисунок 9), из которого можно выполнить основные действия с программой.

Рисунок 9 - Контекстное меню окна «Результаты расчета»

При нажатии на кнопку Графики загружается новая форма (рисунок 10), на которой представлены графические зависимости требуемого диаметра катка трактора: от общего количества поддерживающих катков; от базы трактора. Также предусмотрена возможность построения трехмерного графика - зависимость диаметра катка трактора при одновременном изменении сразу двух параметров: базы трактора и общего количества поддерживающих катков.

Рисунок 10 - Окно представления графических зависимостей

Если необходимо получить информацию о программном продукте, то следует выбрать пункт меню О программе на главной форме (рисунок 11).

Рисунок 11 - Окно «О программе»

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

5. СТРУКТУРА ПРОГРАММНОГО ПРИЛОЖЕНИЯ

5.1 Падающее и контекстное меню

Большинство программ содержат меню, так как именно оно дает наиболее удобный и быстрый доступ к основным функциям программы.

Существует несколько различных типов меню. В программе использовались два типа меню: падающее (см. рисунок 6) и контекстное (см. рисунок 7).

Каждый раздел меню снабжен соответствующей пиктограммой. Некоторые пункты меню соответствуют кнопкам на форме.

5.2 Статусная строка

Статусная строка представляет собой панель, отображающую полосу состояния в стиле Windows. Она создается с использованием компонента StatusBar. Используется для вывода подсказок к каждому элементу программы.

Подсказки для каждого компонента, задаваемые свойством Hint выводятся в статусную строку при наведении курсора на конкретный объект.

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

5.3 Обработка исключительных ситуаций

Некоторые пользователи программы по своей невнимательности допускают ошибки ещё на начальном этапе работы с программой, при вводе данных. Чтобы избежать таких недоразумений в программе используется система защиты от ввода и использования некорректно введенных данных.

На первом этапе осуществляется блокирование ввода заранее неверной информации в labeledEdit. Это осуществляется путем создания двух процедур:

1. Первая процедура позволяет вводить только вещественный тип данных, т.е. блокируется ввод всех символов, кроме цифр и запятой.2. Вторая процедура позволяет вводить только целый тип данных, т.е. блокируется ввод всех символов, кроме цифр (см. Приложение, с.26-30).

На втором этапе осуществляется контроль данных при помощи обработки исключительных ситуаций. При введении неверной информации программа автоматически выдаёт сообщение об ошибке и выделяет объект, в который были введены неверные данные (см. Приложение, с с.26-30).

В случае возникновения ошибки будет выдано соответствующее сообщение, при этом будет установлен фокус в тот LabeledEdit, где находятся некорректные данные.

Необходимо учитывать, что, например, введенные данные не приводят к возникновению исключительной ситуации, но тем не менее, препятствуют нормальной работе приложения. Для исключения подобных ситуаций на третьем этапе обработки данных в программе введена дополнительная обработка корректности введенных данных (см. Приложение, с.26-30).

В случае неправильного ввода данных будет выдано соответствующее сообщение, при этом будет установлен фокус в тот LabeledEdit, где находятся некорректные данные.

5.4 Построение графических зависимостей

Для подтверждения расчетных данных в программе используется построение графиков. Если расчётные данные совпадают с результатами на графической зависимости, то можно сделать вывод, что программа написана верно, без искажения реальных фактов (см. Приложение, с.32-33).

5.5 Создание анимации

В данной курсовой работе анимация предоставляет минимальную информацию о создателе программы и схематически показывает исследуемый объект (Приложение, с.34-35).

Вызов внешнего приложения

Для уточнения полученных результатов или для каких-то предварительных расчетов можно воспользоваться системным калькулятором Windows.

В программе есть такая возможность (Приложение, с.29).

Данная процедура позволяет вызывать внешнее приложение из программного продукта, не закрывая программу.

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

5.6 Динамически подключаемые библиотеки

Динамически подключаемые библиотеки (DLL - Dynamic Link Library) являются ключевым компонентом при написании любого современного приложения Windows.

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

Одно из основных и, пожалуй, главных назначений библиотек DLL - позволить загружать процедуры и функции в память только в случае необходимости во время выполнения приложения, а не компилировать их в само приложение и таким образом загружать в память всякий раз при запуске, независимо от того понадобятся они либо нет.

Кроме того, несколько приложений могут использовать одни и те же процедуры и функции, хранящиеся в DLL, одновременно.

И самое главное, библиотеки DLL являются универсальными относительно языка программирования. Текст библиотеки представлен в приложении, с.35.

6. РАЗРАБОТКА СПРАВОЧНОЙ СИСТЕМЫ

Файл справочной системы был создан при помощи Help&Manual версии 5.

Итоговый файл справки и файл содержания располагаются в подпапке Hlp папки с программой. Вызвать файл справки можно, нажав клавишу F1, соответствующую кнопку на форме либо соответствующий пункт в падающем и контекстном меню.

Для каждой формы есть своя страница файла справки.

На каждом диалоговом окне есть кнопка Справка, на которой пишется программный текст вызова справки конкретного раздела, который представлен в приложении, с.33.

Разработанная справочная система представлена на рисунках, приведенных ниже (рисунок 12,13,14.15,16):

Рисунок 12 - Справка

Рисунок 13 - Справка «О программе»

Рисунок 14 - Справка «Главная форма»

Рисунок 15 - Справка «Форма с результатами расчетов»

Рисунок 16 - Справка «Форма с графическими зависимостями»

7. РАСЧЁТ КОНТРОЛЬНОГО ПРИМЕРА

Исходные данные для расчета:

Трактор «Беларус 2102»

- момент сопротивления проворачиванию уплотнений

(=3.5 Н*м);

- шаг гусеницы; (0,125 м);

z- число поддерживающих катков (на одной стороне) (z=1-5);

- вес единицы длины гусеницы(100 H);

L - база трактора; (2,1-2,5 м)

µ - коэффициент трения гусеницы о ролик (µ = 0,15);

f - коэффициент сопротивлению вращению катка (f =0,02).

Таблица 3 - Результаты требуемого диаметра катка, м

L\z

1.00

2.00

3.00

4.00

5.00

2.10 м

0.0801

0.0962

0.1122

0.1282

0.1442

2.14 м

0.0785

0.0942

0.1099

0.1255

0.1412

2.19 м

0.0769

0.0922

0.1076

0.1230

0.1384

2.23 м

0.0753

0.0904

0.1055

0.1206

0.1356

2.28 м

0.0739

0.0886

0.1034

0.1182

0.1330

2.32 м

0.0725

0.0870

0.1014

0.1159

0.1304

2.37 м

0.0711

0.0853

0.0995

0.1138

0.1280

2.41 м

0.0698

0.0837

0.0977

0.1117

0.1256

2.46 м

0.0685

0.0822

0.0959

0.1096

0.1233

2.50 м

0.0673

0.0808

0.0942

0.1077

0.1212

Рисунок 17 - Зависимость требуемого диаметра катка от базы трактора

Рисунок 18 - Зависимость требуемого диаметра катка от общего количества катков

Рисунок 19 -Трехмерная зависимость

идентификатор алгоритмизация библиотека интерфейс

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

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

ЗАКЛЮЧЕНИЕ

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

Данную программу можно в дальнейшем использовать при проектировании поддерживающих катков. Меняя параметры трактора, можно подобрать наиболее подходящий под данную модель трактора поддерживающий каток или найти компромиссное решение.

Был произведен расчет диаметра поддерживающего катка гусеничного трактора БЕЛАРУС 2102, который прямо пропорционально увеличивается с увеличением количества поддерживающих катков от 1 до 5 и уменьшается с увеличением базы трактора от 2,1м до 2,5м. При количестве поддерживающих катков равному 3 и базе трактора равной 2,1м получаем диаметр поддерживающего катка равный 0,1122м, что подтверждает возможность прикладного использования программы.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Тракторы. Проектирование, конструирование и расчет / Под общ. ред. И.П. Ксеневича. - М.: Машиностроение, 1991. - 418 с.

2. Барский И.Б. Конструирование и расчет тракторов. Третье издание. - М.: Машиностроение, 1980. - 367 с.

3. Методическое пособие по выполнению курсовой работы по дисциплине «Информатика» для студентов специальностей «Тракторостроение», «Многоцелевые гусеничные и колесные машины», «Городской электрический транспорт». В.В. Равино, Ю.Е. Атаманов

ПРИЛОЖЕНИЕ

Текст программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, Buttons, Menus, ExtCtrls ,ComObj, Math;

type

TForm1 = class(TForm)

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

GroupBox3: TGroupBox;

LabeledEdit1: TLabeledEdit;

LabeledEdit2: TLabeledEdit;

LabeledEdit3: TLabeledEdit;

LabeledEdit4: TLabeledEdit;

LabeledEdit5: TLabeledEdit;

LabeledEdit6: TLabeledEdit;

LabeledEdit7: TLabeledEdit;

LabeledEdit8: TLabeledEdit;

LabeledEdit9: TLabeledEdit;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

PopupMenu1: TPopupMenu;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

StatusBar1: TStatusBar;

N14: TMenuItem;

LabeledEdit10: TLabeledEdit;

LabeledEdit11: TLabeledEdit;

Label3: TLabel;

Label1: TLabel;

PopupMenu2: TPopupMenu;

N13: TMenuItem;

N15: TMenuItem;

BitBtn5: TBitBtn;

procedure FormCreate(Sender: TObject);

procedure ShowHint(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure BitBtn5Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

zMin,zMax,LMin,LMax,My,tg,qg,m,f:Real;

v,u:Integer;

Fr,Fw,FrPY:TextFile;

implementation

uses Unit2, Unit4;

{$R *.dfm}

Type massive1=array[1..100] of real;

Type massive2=array[1..100,1..100] of real;

procedure Diametr(zMin,zMax,LMin,LMax,My,tg,qg,m,f:real;v,u:integer;var Dp,DpZ,DpL:massive2;var DpVer,DpGor,zMass,LMass:massive1); external

'DLL\Traktor.dll';

procedure TForm1.FormCreate(Sender: TObject);

begin

BorderIcons:=BorderIcons-

[biSystemMenu];

DecimalSeparator:='.';

Application.OnHint:=ShowHint;

AssignFile(Fr, 'Данные.txt');

Reset(Fr);

ReadLn(Fr, zMin);

ReadLn(Fr, zMax);

ReadLn(Fr, v);

ReadLn(Fr, LMin);

ReadLn(Fr, LMax);

ReadLn(Fr, u);

ReadLn(Fr, My);

ReadLn(Fr, tg);

ReadLn(Fr, qg);

ReadLn(Fr, m);

ReadLn(Fr, f);

CloseFile(Fr);

Form1.LabeledEdit1.Text:=FloatToStr(zMin);

Form1.LabeledEdit2.Text:=FloatToStr(zMax);

Form1.LabeledEdit3.Text:=IntToStr(v);

Form1.LabeledEdit4.Text:=FloatToStr(LMin);

Form1.LabeledEdit5.Text:=FloatToStr(LMax);

Form1.LabeledEdit6.Text:=IntToStr(u);

Form1.LabeledEdit7.Text:=FloatToStr(My);

Form1.LabeledEdit8.Text:=FloatToStr(tg);

Form1.LabeledEdit9.Text:=FloatToStr(qg);

Form1.LabeledEdit10.Text:=FloatToStr(m);

Form1.LabeledEdit11.Text:=FloatToStr(f);

end;

procedure TForm1.ShowHint(Sender: TObject);

begin

Form1.StatusBar1.SimpleText:=Application.Hint;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var Dp,DpZ,DpL:massive2;

DpVer,DpGor,zMass,LMass:massive1;

i,j:Integer;

begin

try

zMin:=StrToFloat(Form1.LabeledEdit1.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено начальное значение количества катков',

mtWarning,[mbOK],0);

Form1.LabeledEdit1.SetFocus;

Exit;

end;

end;

try

zMax:=StrToFloat(Form1.LabeledEdit2.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено конечное значение количества катков',

mtWarning,[mbOK],0);

Form1.LabeledEdit2.SetFocus;

Exit;

end;

end;

try

v:=StrToInt(Form1.LabeledEdit3.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено количество расчётных точек',

mtWarning,[mbOK],0);

Form1.LabeledEdit3.SetFocus;

Exit;

end;

end;

try

LMin:=StrToFloat(Form1.LabeledEdit4.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено начальное значение базы трактора',

mtWarning,[mbOK],0);

Form1.LabeledEdit4.SetFocus;

Exit;

end;

end;

try

LMax:=StrToFloat(Form1.LabeledEdit5.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно конечное конечное значение базы трактора',

mtWarning,[mbOK],0);

Form1.LabeledEdit5.SetFocus;

Exit;

end;

end;

try

u:=StrToInt(Form1.LabeledEdit6.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено количество расчётных точек',

mtWarning,[mbOK],0);

Form1.LabeledEdit6.SetFocus;

Exit;

end;

end;

try

My:=StrToFloat(Form1.LabeledEdit7.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено значение момента сопротивления',

mtWarning,[mbOK],0);

Form1.LabeledEdit7.SetFocus;

Exit;

end;

end;

try

tg:=StrToFloat(Form1.LabeledEdit8.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено значение шага гусеницы',

mtWarning,[mbOK],0);

Form1.LabeledEdit8.SetFocus;

Exit;

end;

end;

try

qg:=StrToFloat(Form1.LabeledEdit9.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено значение веса гусеницы',

mtWarning,[mbOK],0);

Form1.LabeledEdit9.SetFocus;

Exit;

end;

end;

try

m:=StrToFloat(Form1.LabeledEdit10.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено значение коэффициента трения',

mtWarning,[mbOK],0);

Form1.LabeledEdit10.SetFocus;

Exit;

end;

end;

try

f:=StrToFloat(Form1.LabeledEdit11.Text);

except

on EConvertError Do

begin

MessageDlg('Неправильно введено значение коэффициента сопротивления',

mtWarning,[mbOK],0);

Form1.LabeledEdit11.SetFocus;

Exit;

end;

end;

if (zMin<1) or (zMin>9) then

begin

MessageDlg('Неправильно введено начальное значение количества катков',

mtWarning,[mbOK],0);

Form1.LabeledEdit1.SetFocus;

Exit;

end;

if (zMax<2) or (zMax>10) then

begin

MessageDlg('Неправильно введено конечное значение количества катков',

mtWarning,[mbOK],0);

Form1.LabeledEdit2.SetFocus;

Exit;

end;

if (LMin<2) then

begin

MessageDlg('Неправильно введено начальное значение базы трактора',

mtWarning,[mbOK],0);

Form1.LabeledEdit4.SetFocus;

Exit;

end;

if (LMax<2.1) or (LMax>2.5) then

begin

MessageDlg('Неправильно конечное конечное значение базы трактора',

mtWarning,[mbOK],0);

Form1.LabeledEdit5.SetFocus;

Exit;

end;

if (My<1.5) or (My>5.5) then

begin

MessageDlg('Неправильно введено значение момента сопротивления',

mtWarning,[mbOK],0);

Form1.LabeledEdit7.SetFocus;

Exit;

end;

if (tg<0.124) or (tg>0.126) then

begin

MessageDlg('Неправильно введено значение шага гусеницы',

mtWarning,[mbOK],0);

Form1.LabeledEdit8.SetFocus;

Exit;

end;

if (qg<50) or (qg>800) then

begin

MessageDlg('Неправильно введено значение веса гусеницу',

mtWarning,[mbOK],0);

Form1.LabeledEdit9.SetFocus;

Exit;

end;

if (m<0.14) or (m>0.16) then

begin

MessageDlg('Неправильно введено значение коэффициента трения',

mtWarning,[mbOK],0);

Form1.LabeledEdit10.SetFocus;

Exit;

end;

if (f<0.01) or (f>0.03) then

begin

MessageDlg('Неправильно введено значение коэффициента сопротивления',

mtWarning,[mbOK],0);

Form1.LabeledEdit11.SetFocus;

Exit;

end;

if (v<1) or (v>1000000) then

begin

MessageDlg('количество расчётных точек',

mtWarning,[mbOK],0);

Form1.LabeledEdit3.SetFocus;

Exit;

end;

if (u<1) or (u>10000000) then

begin

MessageDlg('количество расчётных точек',

mtWarning,[mbOK],0);

Form1.LabeledEdit6.SetFocus;

Exit;

end;

if m=f then

begin

MessageDlg('Неправильно введены данные',mtWarning,[mbOK],0);

Form1.LabeledEdit10.SetFocus;

Form1.LabeledEdit11.SetFocus;

Exit;

end;

Diametr(zMin,zMax,LMin,LMax,My,tg,qg,m,f,v,u,Dp,DpZ,DpL,DpVer,DpGor,zMass,LMass);

Form2.StringGrid1.ColCount:=v+1;

Form2.StringGrid1.RowCount:=u+1;

for i:=1 to v do

begin

for j:=1 to u do

begin

Form2.StringGrid1.Cells[i,j]:=FloatToStrF(Dp[i,j],ffFixed,8,4);

Form2.StringGrid1.Cells[i,0]:=FloatToStrF(DpVer[i],ffFixed,3,2);

Form2.StringGrid1.Cells[0,j]:=FloatToStrF(DpGor[j],ffFixed,3,2)+' м';

end;

end;

Form2.ShowModal;

end;

procedure TForm1.N14Click(Sender: TObject);

begin

AssignFile(FrPY, 'По умолчанию.txt');

begin

Reset(FrPY);

ReadLn(FrPY,zMin);

ReadLn(FrPY,zMax);

ReadLn(FrPY,v);

ReadLn(FrPY,LMin);

ReadLn(FrPY,LMax);

ReadLn(FrPY,u);

ReadLn(FrPY,My);

ReadLn(FrPY,tg);

ReadLn(FrPY,qg);

ReadLn(FrPY,m);

ReadLn(FrPY,f);

CloseFile(FrPY);

Form1.LabeledEdit1.Text:=FloatToStr(zMin);

Form1.LabeledEdit2.Text:=FloatToStr(zMax);

Form1.LabeledEdit3.Text:=IntToStr(v);

Form1.LabeledEdit4.Text:=FloatToStr(LMin);

Form1.LabeledEdit5.Text:=FloatToStr(LMax);

Form1.LabeledEdit6.Text:=IntToStr(u);

Form1.LabeledEdit7.Text:=FloatToStr(My);

Form1.LabeledEdit8.Text:=FloatToStr(tg);

Form1.LabeledEdit9.Text:=FloatToStr(qg);

Form1.LabeledEdit10.Text:=FloatToStr(m);

Form1.LabeledEdit11.Text:=FloatToStr(f);

end;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

WinExec ('Calc\calc.exe', SW_RESTORE);

end;

procedure TForm1.N6Click(Sender: TObject);

begin

Form1.BitBtn2.Click;

end;

procedure TForm1.N10Click(Sender: TObject);

begin

Form1.BitBtn2.Click;

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

try

zMin:=StrToFloat(Form1.LabeledEdit1.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit1.SetFocus;

Exit;

end;

end;

try

zMax:=StrToFloat(Form1.LabeledEdit2.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit2.SetFocus;

Exit;

end;

end;

try

v:=StrToInt(Form1.LabeledEdit3.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit3.SetFocus;

Exit;

end;

end;

try

LMin:=StrToFloat(Form1.LabeledEdit4.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit4.SetFocus;

Exit;

end;

end;

try

LMax:=StrToFloat(Form1.LabeledEdit5.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit5.SetFocus;

Exit;

end;

end;

try

u:=StrToInt(Form1.LabeledEdit6.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit6.SetFocus;

Exit;

end;

end;

try

My:=StrToFloat(Form1.LabeledEdit7.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit7.SetFocus;

Exit;

end;

end;

try

tg:=StrToFloat(Form1.LabeledEdit8.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit8.SetFocus;

Exit;

end;

end;

try

qg:=StrToFloat(Form1.LabeledEdit9.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit9.SetFocus;

Exit;

end;

end;

try

m:=StrToFloat(Form1.LabeledEdit9.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit9.SetFocus;

Exit;

end;

end;

try

f:=StrToFloat(Form1.LabeledEdit9.Text);

except

on EConvertError Do

begin

MessageDlg('Некорректно введены данные',

mtWarning,[mbOK],0);

Form1.LabeledEdit9.SetFocus;

Exit;

end;

end;

AssignFile(Fw, 'Данные.txt');

ReWrite(Fw);

WriteLn(Fw,StrToFloat(Form1.LabeledEdit1.Text));

WriteLn(Fw,StrToFloat(Form1.LabeledEdit2.Text));

WriteLn(Fw,StrToInt(Form1.LabeledEdit3.Text));

WriteLn(Fw,StrToFloat(Form1.LabeledEdit4.Text));

WriteLn(Fw,StrToFloat(Form1.LabeledEdit5.Text));

WriteLn(Fw,StrToInt(Form1.LabeledEdit6.Text));

WriteLn(Fw,StrToFloat(Form1.LabeledEdit7.Text));

WriteLn(Fw,StrToFloat(Form1.LabeledEdit8.Text));

WriteLn(Fw,StrToFloat(Form1.LabeledEdit9.Text));

WriteLn(Fw,StrToFloat(Form1.LabeledEdit10.Text));

WriteLn(Fw,StrToFloat(Form1.LabeledEdit11.Text));

CloseFile(Fw);

Close;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

Form1.BitBtn4.Click;

end;

procedure TForm1.N9Click(Sender: TObject);

begin

Form1.BitBtn1.Click;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

Form1.BitBtn1.Click;

end;

procedure TForm1.N13Click(Sender: TObject);

begin

Form1.N14.Click;

end;

procedure TForm1.N12Click(Sender: TObject);

begin

Form1.BitBtn4.Click;

end;

procedure TForm1.N8Click(Sender: TObject);

begin

Form4.ShowModal;

end;

procedure TForm1.BitBtn5Click(Sender: TObject);

begin

Form4.ShowModal;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

WinHelp(Handle,'Help.hlp',sw_restore,1);

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

WinHelp(Handle,'Help.hlp',sw_restore,2);

end;

end.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Grids ,ComObj, Menus, ComCtrls, Math;

type

TForm2 = class(TForm)

GroupBox1: TGroupBox;

StringGrid1: TStringGrid;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

BitBtn6: TBitBtn;

SaveDialog1: TSaveDialog;

PopupMenu1: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

MSWord1: TMenuItem;

MSExcel1: TMenuItem;

N4: TMenuItem;

PrintDialog1: TPrintDialog;

Label1: TLabel;

SaveDialog2: TSaveDialog;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure MSWord1Click(Sender: TObject);

procedure MSExcel1Click(Sender: TObject);

procedure BitBtn6Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

zMin,zMax,LMin,LMax,My,tg,qg,m,f:Real;

v,u:Integer;

Fr,Fw,FrPY:TextFile;

implementation

uses Unit1, Unit3;

{$R *.dfm}

Type massive1=array[1..100] of real;

Type massive2=array[1..100,1..100] of real;

procedure Diametr(zMin,zMax,LMin,LMax,My,tg,qg,m,f:real;v,u:integer;var Dp,DpZ,DpL:massive2;var DpVer,DpGor,zMass,LMass:massive1); external

'DLL\Traktor.dll';

procedure TForm2.BitBtn1Click(Sender: TObject);

begin

Close;

end;

procedure TForm2.BitBtn4Click(Sender: TObject);

var i,j:integer;

Dp,DpZ,DpL:massive2;

DpVer,DpGor,LMass,zMass:massive1;

begin

zMin:=StrToFloat(Form1.LabeledEdit1.Text);

zMax:=StrToFloat(Form1.LabeledEdit2.Text);

v:=50;

LMin:=StrToFloat(Form1.LabeledEdit4.Text);

LMax:=StrToFloat(Form1.LabeledEdit5.Text);

u:=50;

My:=StrToFloat(Form1.LabeledEdit7.Text);

tg:=StrToFloat(Form1.LabeledEdit8.Text);

qg:=StrToFloat(Form1.LabeledEdit9.Text);

m:=StrToFloat(Form1.LabeledEdit10.Text);

f:=StrToFloat(Form1.LabeledEdit11.Text);

Diametr(zMin,zMax,LMin,LMax,My,tg,qg,m,f,v,u,Dp,DpZ,DpL,DpVer,DpGor,zMass,LMass);

for i:=1 to v do

begin

for j:=1 to u do

begin

Form3.Series7.AddXYZ(DpVer[i],Dp[i,j],DpGor[j]);

Form3.Series4.AddXY(DpVer[i],DpL[i,1]);

Form3.Series5.AddXY(DpVer[i],DpL[i,2]);

Form3.Series6.AddXY(DpVer[i],DpL[i,3]);

Form3.Series1.AddXY(DpGor[j],DpZ[1,j]);

Form3.Series2.AddXY(DpGor[j],DpZ[2,j]);

Form3.Series3.AddXY(DpGor[j],DpZ[3,j]);

end;

end;

Form3.Series1.Title:='Знач. кол-ва катков: '+FloatToStr(zMass[1]);

Form3.Series2.Title:='Знач. кол-ва катков: '+FloatToStr(zMass[2]);

Form3.Series3.Title:='Знач. кол-ва катков: '+FloatToStr(zMass[3]);

Form3.Series4.Title:='Знач. базы трактора: '+FloatToStr(LMass[1])+' м';

Form3.Series5.Title:='Знач. базы трактора: '+FloatToStr(LMass[2])+' м';

Form3.Series6.Title:='Знач. базы трактора: '+FloatToStr(LMass[3])+' м';

Form3.ShowModal;

end;

procedure TForm2.N1Click(Sender: TObject);

begin

Form2.BitBtn1.Click;

end;

procedure TForm2.N2Click(Sender: TObject);

begin

Form2.BitBtn4.Click;

end;

procedure TForm2.FormCreate(Sender: TObject);

begin

BorderIcons:=BorderIcons-

[biSystemMenu];

with StringGrid1 do

begin

Cells[0,0]:='L\z'

end;

end;

procedure TForm2.BitBtn2Click(Sender: TObject);

var WordApp,NewDoc,WordTable:OLEVariant;

iRows,iCols,iGridRows,jGridCols:integer;

begin

if Form2.SaveDialog1.Execute=false then exit;

try

WordApp:=CreateOleObject('Word.Application');

except

Exit

end;

NewDoc:=WordApp.Documents.Add;

iCols:=Stringgrid1.ColCount;

iRows:=Stringgrid1.RowCount;

WordTable:=NewDoc.Tables.Add(WordApp.Selection.Range,iRows,iCols);

WordTable.Range.Font.Size:=8;

for iGridRows:=1 to iRows do

for jGridCols:=1 to iCols do

WordTable.Cell(iGridRows,jGridCols).Range.Text:=Form2.Stringgrid1.Cells[jGridCols-1,iGridRows-1];

WordApp.ActiveDocument.SaveAs(Form2.SaveDialog1.FileName);

WordApp.Quit;

WordApp:=Unassigned;

NewDoc:=Unassigned;

WordTable:=Unassigned;

end;

procedure TForm2.BitBtn3Click(Sender: TObject);

var XLApp,sheet,colum:variant;

i,j:integer;

begin

if Form2.SaveDialog2.Execute=false then exit;

try

XLApp:=CreateOleObject('Excel.Application');

except

Exit

end;

XLApp.Workbooks.Add(-4167);

XLApp.Workbooks[1].WorkSheets[1].Name:='Результат';

Colum:=XLApp.Workbooks[1].WorkSheets['Результат'].Columns;

v:=StrToInt(Form1.LabeledEdit3.Text);

u:=StrToInt(Form1.LabeledEdit6.Text);

for i:=1 to v+1 do

Colum:=XLApp.Workbooks[1].WorkSheets['Результат'].Rows;

Colum.columns[1].Font.Bold:=true;

Colum.Rows[1].Font.Bold:=true;

Colum.Rows[1].Font.italic:=true;

Colum.Rows[2].Font.Bold:=true;

Sheet:=XLApp.Workbooks[1].WorkSheets['Результат'];

for i:=0 to v do

for j:=0 to u do

sheet.Cells[j+2,i+1]:=Form2.Stringgrid1.Cells[i,j];

sheet.Cells[1,2]:='Требуемый диаметр поддерживающего катка, м.';

XLApp.ActiveWorkbook.SaveAs(Form2.SaveDialog2.FileName);

XLApp.Quit;

end;

procedure TForm2.MSWord1Click(Sender: TObject);

begin

Form2.BitBtn2.Click;

end;

procedure TForm2.MSExcel1Click(Sender: TObject);

begin

Form2.BitBtn3.Click;

end;

procedure TForm2.BitBtn6Click(Sender: TObject);

begin

WinHelp(Handle,'Help.hlp',sw_restore,3);

end;

end.

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, TeeSurfa, TeEngine, Series, ExtCtrls,

TeeProcs, Chart, ComCtrls, Menus, ComObj, TeeTools, TeeComma;

type

TForm3 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

Chart3: TChart;

Series7: TSurfaceSeries;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

PopupMenu1: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

Chart1: TChart;

Series1: TLineSeries;

Series2: TLineSeries;

Series3: TLineSeries;

Chart2: TChart;

Series4: TLineSeries;

Series5: TLineSeries;

Series6: TLineSeries;

ChartTool1: TRotateTool;

TeeCommander1: TTeeCommander;

TeeCommander2: TTeeCommander;

TeeCommander3: TTeeCommander;

procedure BitBtn1Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm3.BitBtn1Click(Sender: TObject);

begin

Form3.Series1.Clear;

Form3.Series2.Clear;

Form3.Series3.Clear;

Form3.Series4.Clear;

Form3.Series5.Clear;

Form3.Series6.Clear;

Form3.Series7.Clear;

Close;

end;

procedure TForm3.N1Click(Sender: TObject);

begin

Form3.BitBtn1.Click;

end;

procedure TForm3.FormCreate(Sender: TObject);

begin

BorderIcons:=BorderIcons-

[biSystemMenu];

end;

procedure TForm3.BitBtn2Click(Sender: TObject);

begin

WinHelp(Handle,'Help.hlp',sw_restore,4);

end;

end.

unit Unit4;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls, Math, Menus;

type

TForm4 = class(TForm)

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Image1: TImage;

Timer1: TTimer;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

PopupMenu1: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

procedure BitBtn1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ShowHint(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

implementation

uses Unit1;

Const

R1=40;

R2=30;

R3=6;

VD=150;

D=80;

R=140;

var a,XN,XN1,YN,YN1,f:variant;

Procedure Koleso;

begin

with Form4.Image1.Canvas do

Begin

ellipse(f-2*R1-R,VD,f-R,VD-2*R1);

ellipse(f+D-R,VD,2*R1+f+D-R,VD-2*R1);

ellipse(f+30-R,VD-2*R1+20,f+50-R,VD-2*R1);

rectangle(f-R1-R,VD+1,2*R1+f-R1+D-R,VD-1);

rectangle(f-R1-R,VD-2*R1,2*R1+f-R1+D-R,VD+2-2*R1);

end;

end;

Procedure clear;

begin

Form4.Image1.canvas.Rectangle(0,0,Form4.Image1.Width,Form4.Image1.Height);

end;

Procedure road;

Begin

with Form4.image1.Canvas do

Begin

pen.Width:=4;

moveto(0,VD+3);

lineto(Form4.Image1.Width,VD+3);

pen.Width:=2;

end;

end;

{$R *.dfm}

procedure TForm4.BitBtn1Click(Sender: TObject);

begin

Close;

end;

procedure TForm4.Timer1Timer(Sender: TObject);

begin

clear;

road;

Koleso;

XN:=R2*cos(f*Pi/180);

YN:=R2*sin(f*Pi/180);

YN1:=R3*sin(a*Pi/180);

XN1:=R3*cos(a*Pi/180);

a:=a+30;

f:=f+10;

if f=1200 then f:=0;

end;

procedure TForm4.FormCreate(Sender: TObject);

begin

Application.OnHint:=ShowHint;

f:=0;

end;

procedure TForm4.ShowHint(Sender: TObject);

begin

Form1.StatusBar1.SimpleText:=Application.Hint;

end;

procedure TForm4.BitBtn2Click(Sender: TObject);

begin

WinHelp(Handle,'Help.hlp',sw_restore,5);

end;

procedure TForm4.N1Click(Sender: TObject);

begin

BitBtn1.Click;

end;

procedure TForm4.N2Click(Sender: TObject);

begin

BitBtn2.Click;

end;

end.

library Traktor; /DLL библиотека

uses

SysUtils,

Classes;

Type massive1=array[1..100] of real;

Type massive2=array[1..100,1..100] of real;

procedure Diametr(zMin,zMax,LMin,LMax,My,tg,qg,m,f:real;v,u:integer;var Dp,DpZ,DpL:massive2;var DpVer,DpGor,zMass,LMass:massive1);

var dz,dL,z,L,dz1,dL1:real;

i,j:integer;

begin

dz:=(zMax-zMin)/(v-1);

dL:=(LMax-LMin)/(u-1);

z:=zMin;

for i:=1 to v do

begin

DpVer[i]:=z;

L:=LMin;

for j:=1 to u do

begin

DpGor[j]:=L;

Dp[i,j]:=(2*My*tg*(2+0.5*z))/(qg*L*(m-f));

L:=L+dL;

end;

z:=z+dz;

end;

dz1:=(zMax-zMin)/2;

z:=zMin;

for i:=1 to 3 do

begin

L:=LMin;

for j:=1 to u do

begin

zMass[i]:=z;

DpZ[i,j]:=(2*My*tg*(2+0.5*z))/(qg*L*(m-f));

L:=L+dL;

end;

z:=z+dz1;

end;

dL1:=(LMax-LMin)/2;

z:=zMin;

for i:=1 to v do

begin

L:=LMin;

for j:=1 to 3 do

begin

LMass[j]:=L;

DpL[i,j]:=(2*My*tg*(2+0.5*z))/(qg*L*(m-f));

L:=L+dL1;

end;

z:=z+dz;

end;

end;

exports Diametr;

{$R *.res}

begin

end.

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


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

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