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

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

 

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

 

N бака Профиль бака Ширина бака
 

 

 

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

 

 

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

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

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

 

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

 

 

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

 

 

 

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

 

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

После чего мы видим во фрейме “Тарировочная характеристика” можно сравнить её с тарировочной характеристикой полученной позже в программе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

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