Пример работы программы с краткими пояснениями

Задание курсовой работы.

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

N бака Профиль бака Ширина бака
  Пример работы программы с краткими пояснениями - student2.ru Пример работы программы с краткими пояснениями - student2.ru

Пример работы программы с краткими пояснениями - student2.ru

2. Разработка программы в Visual Basic

2.1 Описание программы

Команда “Сетка”.Это команда создания осей координат. Сначала нам необходимо нарисовать координатную сетку, для этого выбираем ее цвет после чего используя цикл с определенным шагом и команды Line рисуются несколько линий по горизонтали и вертикали, которые образуют саму эту координатную сетку. Далее аналогичным образом создаются оси координат ,то есть выбирается цвет командой и рисуются две линии.

Команда “Бак”Это команда создания бака .Первым шагом является заполнение координат бака, которые мы берем из своего варианта, после чего идет процесс определения этих же координат при заданном угле:

из текстового поля, куда мы вводим угол, значение угла пересчитывается в радианы и записывается в "а",если значение этого "а" получается строго больше или меньше 0,то для координат "x" и "y" каждой точки с помощью цикла находится длины радиус-векторов из начала координат, а также начальные углы их наклона . Начальные углы и задаваемый нами угол складываются и записываются в "d",с помощью этого угла и найденных радиус-векторов с помощью цикла происходит пересчет координат каждой точки, в следствии чего наш бак поворачивается на заданный нами угол.

Далее для каждой точки находим смещение y относительно начала координат, из уравнения прямой(y=kx+c) с помощью цикла находим для каждой точки значение "c",зная координаты каждой точки "x" и "y", а также коэффициента "k" как отношение приращения функции к приращению аргумента , это нам после потребуется для расчета объема бака

Следующим шагом следует сам процесс рисования бака, для начала все заданные нами координаты с помощью цикла пересчитываются в пиксели, далее аналогично с осями координат, выбирается цвет командой RGB и после с помощью цикла командой Line рисуются линии , соединяющие каждую точку бака

Команда“Расчёт”.Это кнопка расчёта объёма. Первым этапом значения ширины считываются с заданного нами текстового поля, а значению объема присваивается 0 .

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

После чего если в текстовом поле уровня топлива что-то записано, тогда с помощью цикла определяются координаты верхних точек бака, с учетом отсечения на заданный уровень, то есть если значение каких либо координат "y" бака будет больше или равно заданному уровню, тогда им присваивается значение уровня топлива, и если меньше, то определяются значения координат "x",эти координаты являются координатами отсечения бака, соответствующие заданному уровню топлива

Найденные координаты с помощью цикла пересчитываются в пиксели и по ним выбранным цветом используя команду (RGB) рисуется линия командой (Line) отсечения бака на заданный уровень и по формуле высчитывается объем необходимой части нашего бака.

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

Dim x(100), y(100), r(100), c(100), k(100), px(10000), py(10000), x1(100), y1(100)

Dim color As Long

Private Sub Command1_Click()

'Çàäà¸òñÿ êîîðäèíàòíàÿ ñåòêà

color = RGB(176, 176, 176)

For i = 1 To 10000 Step 200

Form1.Line (0, i)-(10000, i), color

Form1.Line (i, 0)-(i, 10000), color

Next i

color = RGB(0, 0, 0)

Form1.Line (0, 5000)-(10000, 5000), color

Form1.Line (5000, 0)-(5000, 10000), color

End Sub

Private Sub Command2_Click()

' Çàäàþòñÿ òî÷êè, îïèñûâàþùèå áàê è ïîëîæåíèå äàò÷èêà

n = 21

x(1) = 1.17

y(1) = 0.03

x(2) = 1.07

y(2) = 0.23

x(3) = 1.03

y(3) = 0.39

x(4) = 0.83

y(4) = 0.58

x(5) = 0.57

y(5) = 0.68

x(6) = 0.37

y(6) = 0.72

x(7) = -0.43

y(7) = 0.78

x(8) = -0.63

y(8) = 0.73

x(9) = -0.77

y(9) = 0.63

x(10) = -1.03

y(10) = 0.48

x(11) = -1.53

y(11) = 0.03

x(12) = -1.13

y(12) = -0.07

x(13) = -0.63

y(13) = -0.37

x(14) = -0.23

y(14) = -0.68

x(15) = 0.17

y(15) = -0.73

x(16) = 0.37

y(16) = -0.73

x(17) = 0.63

y(17) = -0.64

x(18) = 0.77

y(18) = -0.63

x(19) = 0.98

y(19) = -0.43

x(20) = 1.07

y(20) = -0.17

x(21) = 1.17

y(21) = 0.03

'çàäà¸ì êîîðäèíàòû äàò÷èêà

Z1 = Text10

Z2 = Text10

Q1 = 0.73

Q2 = -0.73

' Çàäà¸ì ïîëîæåíèå äàò÷èêà, áàêà ïðè çàäàííîì óãëå òàíãàæà

A = Val(Text5.Text) * (3.1415926535 / 180)

If A > 0 Or A < 0 Then

For i = 1 To n Step 1

r(i) = Sqr(x(i) * x(i) + y(i) * y(i))

B = Atn(y(i) / x(i))

D = A + B

If x(i) > 0 Then

x(i) = r(i) * Cos(D)

y(i) = r(i) * Sin(D)

Else

x(i) = -r(i) * Cos(D)

y(i) = -r(i) * Sin(D)

End If

Next i

B1 = Atn(Q1 / Z1)

B2 = Atn(Q2 / Z2)

D1 = A + B1

D2 = A + B2

l1 = Sqr(Z1 * Z1 + Q1 * Q1)

l2 = Sqr(Z2 * Z2 + Q2 * Q2)

Q1 = l1 * Sin(D1)

Q2 = l2 * Sin(D2)

Z1 = l1 * Cos(D1)

Z2 = l2 * Cos(D2)

End If

' Íàõîäèì êîýôôèöèåíòû ôóíêöèé, îïèñûâàþùèõ áàê

For i = 1 To n - 1 Step 1

k(i) = (y(i) - y(i + 1)) / (x(i) - x(i + 1))

c(i) = y(i) - k(i) * x(i)

Next i

If A = 0 Then

k(15) = 0.0000001

End If

k(0) = k(20)

c(0) = c(20)

' Çàäà¸ì òî÷êè áàêà è ñîåä èõ ëèíèÿìè

For i = 1 To n

px(i) = 2000 * x(i) + 5000

py(i) = 5000 - 2000 * y(i)

Next i

color = RGB(255, 100, 10)

For i = 1 To n - 1

Form1.Line (px(i), py(i))-(px(i + 1), py(i + 1)), color

Next i

' çàäà¸ì ëèíèþ-ìåñòî ðàñïîëîæåíèå äàò÷èêà

color = RGB(255, 255, 0)

Form1.Line ((2000 * Z1 + 5000), (5000 - 2000 * Q1))-((2000 * Z2 + 5000), (5000 - 2000 * Q2)), color

End Sub

Private Sub Command3_Click()

Cls

End Sub

Private Sub Command4_Click()

' Çàäà¸ì ïàðàìåòðû áàêà è çíà÷åíèå óðîâíÿ òîïëèâà

n = 21

' V-îáú¸ì

V = Val(Text1.Text)

For i = 1 To n Step 1

x1(i) = x(i)

y1(i) = y(i)

Next i

H0 = Val(Text4.Text)

If Len(Text6.Text) Then

step = Val(Text6.Text)

Else

step = H0

End If

Do While H0 > 1.51

H0 = InputBox("Ââîä H0 íå ïðåâûøàåò ìêñèìàëüíîé âûñîòû áàêà = 1.51 ")

Text4.Text = Str$(H0)

Loop

Do While H0 >= 0

vt = 0

H1 = H0 - 0.73

coord = Text10

Text8.Text = Text8.Text + " " + Str$(H0)

' Ó÷¸ò èçìåíåíèÿ ïîëîæåíèÿ äàò÷èêà

A = Val(Text5.Text) * (3.1415926535 / 180)

If A < 0 Or A > 0 Then

B1 = Atn(H1 / coord)

D1 = B1 + A

l1 = Sqr(coord * coord + H1 * H1)

H1 = l1 * Sin(D1)

End If

' Ñìåùåíèå òî÷åê êîîðäèíàò â çàâèñèìîñòè îò óðîâíÿ òîïëèâà

If Len(Text4.Text) Then

For i = 1 To n Step 1

j = i

If y(i) >= H1 Then

y1(i) = H1

If y(i - 1) < H1 Then

If j = 7 Then

x1(i) = (H1 - c(i)) / k(i)

Else

x1(i) = (H1 - c(i - 1)) / k(i - 1)

End If

Else

If (j < 21 And H1 < y(i) And H1 > y(i + 1)) Or (j >= 11 And j < 21) Then

x1(i) = (H1 - c(i)) / k(i)

End If

End If

End If

Next i

End If

' Ðàñ÷¸ò îáú¸ìà òîïëèâà ïî ìåòîäó Íàäæàðîâà

For i = 1 To n - 2 Step 1

w0 = (x1(i + 1) - x1(1)) * (y1(i + 2) - y1(1))

w1 = (x1(i + 2) - x1(1)) * (y1(i + 1) - y1(1))

vt = vt + Abs(V / 2) * (w0 - w1)

Next i

Text7.Text = Text7.Text + " " + Str$(vt)

' Çàäà¸ì ëèíèþ óðîâíÿ òîïëèâà

For i = 1 To n

px(i) = 2000 * x1(i) + 5000

py(i) = 5000 - 2000 * y1(i)

Next i

color = RGB(200, 0, 0)

For i = 1 To n - 1

Form1.Line (px(i), py(i))-(px(i + 1), py(i + 1)), color

Next i

If H0 = 0 Then

H0 = H0 - 1

Else

H0 = H0 - step

End If

Loop

End Sub

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

Пример работы программы с краткими пояснениями

Запускаем программу, видим поле с кнопками, выбираем кнопку Коорд Сетка . Программа выдает нам ось координат.

Пример работы программы с краткими пояснениями - student2.ru

Далее нам необходимо , чтобы наша программа рисовала бак и датчик по заданным координатам. Проверяем это: Нажимаем кнопку с надписью "Бак"и задаём координаты бака 0,1. Программа работает верно.

Пример работы программы с краткими пояснениями - student2.ru

После чего задаём другие координаты датчика(0,4) , что бы убедится что программа работает верно.

Пример работы программы с краткими пояснениями - student2.ru

Теперь проверяем поворачивается ли наш бак и датчик при угле тангажа 50.

Пример работы программы с краткими пояснениями - student2.ru

Осталось проверить считает ли моя программа тарировочную характеристику, при заданном значении ширины бака(0.5), максимальном уровне(максимальная H=1.51) и шаге(0.151). Пример работы программы с краткими пояснениями - student2.ru

После чего мы видим во фрейме “Тарировочная характеристика” можно сравнить её с тарировочной характеристикой полученной позже в программеSolidWorks.

Н, м V, м3
1,51 1,36
1,359 1,28
1,208 1,15
1,057 0,99
0,906 0,82
0,755 0,62
0,604 0,44
0,453 0,29
0,302 0,16
0,151 0,06

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

Наши рекомендации