- •Содержание
- •Введение
- •1 Постановка задачи
- •1.1 Математическая модель задачи
- •1.2 Входные данные
- •1.3 Выходные данные
- •1.4 Обработка ошибок
- •2 Разработка программного модуля
- •2.1 Разработка структурной схемы программного модуля
- •Разработка программного модуля и ее описание
- •Разработка пользовательского интерфейса
- •3 Реализация программного модуля
- •Код программы
- •3.2 Описание используемых операторов и функций
- •4 Тестирование программного модуля
- •Заключение
- •Список использованной литературы
-
Разработка пользовательского интерфейса
Рисунок 3 – Пользовательская форма
Userform – пользовательская форма, которая предназначена для отображения основных элементов управления.
Label1 – надпись, которая предназначена для отображения текста «Длина кривошипа».
Label2 – надпись, которая предназначена для отображения текста «Начальный угол».
TextBox1 – текстовое поле, которое предназначено для ввода длины кривошипа.
TextBox2 – текстовое поле, которое предназначено для ввода начального угла.
TextBox3 – текстовое поле, которое предназначено для вывода длины шатуна .
TextBox4 – текстовое поле, которое предназначено для вывода межосевого расстояния .
TextBox5 – текстовое поле, которое предназначено для вывода длины кулисы X1.
TextBox6 – текстовое поле, которое предназначено для вывода расстояния до точки O2 LO1O2.
TextBox7 – текстовое поле, которое предназначено для вывода кулисы X2.
TextBox8 – текстовое поле, которое предназначено для вывода расстояния LAC.
Compare – кнопка, предназначенная для расчета длин , ,, X1, X2 LO1O2 и вывода их в текстовые поля.
Run – кнопка, которая предназначена для отображения анимации механизма на рабочем листе.
Cancel – кнопка выхода из формы.
Clear – кнопка, которая предназначена для очистки пользовательской формы.
BuildDiagram – кнопка, которая предназначена для рисования графиков скорости, перемещения и ускорения.
Image1 – элемент управления, который предназначен для отображения изображения графика перемещения.
Image2 – элемент управления, который предназначен для отображения изображения графика скорости.
Image3 – элемент управления, который предназначен для отображения изображения графика ускорения.
3 Реализация программного модуля
-
Код программы
Const Pi = 3.14159265358979
Dim xo1, yo1, xo2, yo2, xA, yA, xB, yB, xC, yC, xD, yD As Double
Dim x1, x2, O1A, O2B, AB, CD, O1O2, AC, value As Double
Private Sub CommandButton2_Click()
kovalev2.Hide
End Sub
Private Sub UserForm_Initialize()
Image1.PictureAlignment = fmPictureAlignmentTopLeft
Image1.PictureSizeMode = fmPictureSizeModeStretch
Image2.PictureAlignment = fmPictureAlignmentTopLeft
Image2.PictureSizeMode = fmPictureSizeModeStretch
Image3.PictureAlignment = fmPictureAlignmentTopLeft
Image3.PictureSizeMode = fmPictureSizeModeStretch
Frame.Visible = False
End Sub
Private Sub CommandButton3_Click()
If Not IsNumeric(LO1A.Text) Then
MsgBox "Длина кривошипа должна быть числом, vbOKOnly, "Повторите ввод..."
TextBox1 = ""
TextBox1.SetFocus
Exit Sub
End If
If LO1A <= 0 Then
MsgBox "Длина кривошипа должна быть больше 0", vbOKOnly, "Повторите ввод..."
TextBox1 = ""
TextBox1.SetFocus
Exit Sub
End If
If Not IsNumeric(fi1.Text) Then
MsgBox "Значение угла должно быть числом", vbOKOnly, "Повторите ввод..."
TextBox2 = ""
TextBox2.SetFocus
Exit Sub
End If
O1A = CInt(LO1A.Text)
f1 = CInt(fi1.Text) * Pi / 180 + Pi / 2
xo1 = 300: yo1 = 300
AB = O1A: O2B = O1A: x1 = 1.5 * O1A: x2 = O1A: O1O2 = O1A: AC = 1.5 * O1A
For fi = 0 + f1 To f1 + 2 * Pi Step Pi / 60
xA = xo1 - O1A * Cos(fi)
yA = yo1 - O1A * Sin(fi)
xo2 = xo1 + x2
yo2 = y01 + 300
xB = xA + x2
yB = yA
xC = xA - AC
yC = yA
xD = xo1 - 1.5 * O1A - O1A
yD = yA - x1
yd2 = yA + x1
ActiveSheet.Shapes.AddShape(msoShapeIsoscelesTriangle, xo1 - 5, yo1, 10, 10).Line.ForeColor.RGB = RGB(0, 0, 0)
ActiveSheet.Shapes.AddShape(msoShapeIsoscelesTriangle, xo2 - 5, yo2, 10, 10).Line.ForeColor.RGB = RGB(0, 0, 0)
ActiveSheet.Shapes.AddShape(msoShapeRectangle, xC - 10, yC - 5, 20, 10).Line.ForeColor.RGB = RGB(0, 0, 0)
ActiveSheet.Shapes.AddLine(xo1, yo1, xA, yA).Line.ForeColor.RGB = RGB(0, 0, 250)
ActiveSheet.Shapes.AddLine(xA, yA, xB, yB).Line.ForeColor.RGB = RGB(0, 0, 250)
ActiveSheet.Shapes.AddLine(xB, yB, xo2, yo2).Line.ForeColor.RGB = RGB(0, 0, 250)
ActiveSheet.Shapes.AddLine(xA, yA, xC, yC).Line.ForeColor.RGB = RGB(0, 0, 250)
ActiveSheet.Shapes.AddLine(xo1, yo1, xo2, yo2).Line.ForeColor.RGB = RGB(0, 0, 250)
ActiveSheet.Shapes.AddLine(xD, yD, xD, yd2).Line.ForeColor.RGB = RGB(0, 0, 250)
ActiveSheet.Shapes.AddLine(xD, yC, xD + 1.5 * x1, yC).Line.ForeColor.RGB = RGB(0, 0, 250)
ActiveSheet.Shapes.AddShape(msoShapeOval, xA - 3, yA - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)
ActiveSheet.Shapes.AddShape(msoShapeOval, xB - 3, yB - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)
ActiveSheet.Shapes.AddShape(msoShapeOval, xC - 3, yC - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)
ActiveSheet.Shapes.AddShape(msoShapeOval, xo1 - 3, yo1 - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)
ActiveSheet.Shapes.AddShape(msoShapeOval, xo2 - 3, yo2 - 3, 6, 6).Line.ForeColor.RGB = RGB(0, 0, 0)
Clock 0.01
ActiveSheet.Shapes.SelectAll
Selection.Delete
Next fi
End Sub
Sub Clock(PauseTime)
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
End Sub
Private Sub BuildDiagram_Click()
Dim fi As Double, L As Double
Dim input_text As Boolean
Dim iter As Integer
return_value = CheckInputData(LO1A.Text, fi1.Text, L, fi)
If (return_value = False) Then
MsgBox "ошибка исходных данных", vbCritical, "сообщение о ошибке"
Exit Sub
End If
angle = fi
For iter = 1 To 13
Call WriteDataOnList(angle, L, iter)
angle = angle + Pi / 6
Next iter
Call DrawGraphics
ActiveSheet.Shapes.SelectAll
Selection.Delete
End Sub
Function CheckInputData(ByVal L_text As String, ByVal fi1_text As String, _
ByRef L As Double, ByRef fi As Double)
If (IsNumeric(L_text)) Then
If (CDbl(L_text) > 0) Then
L = CDbl(L_text)
Else
CheackInputData = False
Exit Function
End If
Else
CheackInputData = False
Exit Function
End If
If (IsNumeric(f1_text)) Then
fi = CDbl(fi1_text) * Pi / 180
Else
CheackInputData = False
Exit Function
End If
CheckInputData = True
End Function
Sub WriteDataOnList(ByVal angle As Double, ByVal L As Double, ByVal iterator As Integer)
Worksheets(2).range("A" & iterator) = iterator - 1
Worksheets(2).range("B" & iterator) = Recompare(angle, L)
Worksheets(2).range("C" & iterator) = iterator - 1
Worksheets(2).range("D" & iterator) = (Recompare(angle + 0.000001, L) - Recompare(angle - 0.000001, L)) / 0.000001
Worksheets(2).range("E" & iterator) = iterator - 1
Worksheets(2).range("F" & iterator) = (Recompare(angle + 0.001, L) - 2 * Recompare(angle, L) + Recompare(angle - 0.001, L)) / 0.001 ^ 2
End Sub
Function Recompare(ByVal angle As Double, ByVal L_value As Double)
O1A = L_value
xo1 = 0: yo1 = 0
AB = O1A: O2B = O1A: x1 = 2.5 * O1A: x2 = O1A: O1O2 = O1A: AC = 1.5 * O1A
xA = O1A * Cos(angle) + 300
yA = O1A * Sin(angle) + 300
xo2 = xo1 + x2
yo2 = y01 + 300
xB = xA + x2
yB = yA
xC = xA - AC
yC = yA
xD = xo1 - 1.5 * O1A - O1A
yD = yA - x1
yd2 = yA + x1
Recompare = yD
End Function
Sub DrawGraphics()
Const count_cell = 13
Image1.Picture = LoadPicture(Diagram("A1:B" & count_cell, "Перемещение"))
Image2.Picture = LoadPicture(Diagram("C1:D" & count_cell, "Скорость"))
Image3.Picture = LoadPicture(Diagram("E1:F" & count_cell, "Ускорение"))
End Sub
Function Diagram(o, name)
cells_range = o
range(cells_range).Select
Charts.Add
ActiveChart.ChartType = xlXYScatterLinesNoMarkers
ActiveChart.SetSourceData Source:=Sheets("Ëèñò2").range(cells_range)
ActiveChart.Location Where:=xlLocationAsObject, name:="Лист2"
ActiveChart.SeriesCollection(1).Smooth = True
ActiveChart.Legend.Delete
ActiveChart.ChartWizard , , , , , , , Title:=name
ActiveChart.Export ActiveWorkbook.Path & "\ss.gif"
Worksheets(2).ChartObjects.Delete
Worksheets(2).range(cells_range) = ""
Worksheets(2).Cells(1, 1).Select
Diagram = ActiveWorkbook.Path & "\ss.gif"
End Function
Private Sub Compare_Click()
Dim fi As Double, L As Double
Dim input_text As Boolean
return_value = CheckInputData(LO1A.Text, fi1.Text, L, fi)
If (return_value = False) Then
MsgBox "Ошибка исходных данных", vbCritical, "Сообщение о ошибкке
Exit Sub
End If
Call Recompare(fi, L)
Text1 = "AB:" & AB
Text2 = "O2B:" & O2B
Text3 = "x1:" & x1
Text4 = "O1O2:" & O1O2
Text5 = "x2:" & x2
Text6 = "AC:" & AC
Frame.Visible = True
End Sub
Private Sub Clear_Click()
Cells.Clear
ActiveSheet.Shapes.SelectAll
Selection.Delete
Image1.Picture = LoadPicture("")
Image2.Picture = LoadPicture("")
Image3.Picture = LoadPicture("")
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
End Sub