Шестаков В.С. Расчет на ЭВМ нефтегазового оборудования. Учебное пособие для МНГ-2015 (811778), страница 18
Текст из файла (страница 18)
Константами в этойпроцедуре задаются координаты верхнего левого и правого нижнегоугла графика: Const Xn = 10 * 72 / djum. В константах обеспечиваетсяпересчет мм в пикселы, так как для рисования в Visual Basic должнызадаваться значения в пк, а пользователи привыкли оперировать мм(1 пк=72/дюйм). Из полученных процедур составлена программа длярешаемой задачи:Option Explicit.Sub График() 'Основная процедураDim Хн, Хк, Х1, А0, А1, А2, В0, В1, N, MinY,MaxY,X0,Y0, mashtabX, mashtabYCall Ввод(Хн, Хк, Х1, А0, А1, А2, В0, В1, N)Call Расчет1(Хн, Хк, Х1, А0, А1, А2, В0, В1, N, MinY, MaxY)Call Оси_Сетка(Хн, Хк, MaxY, MinY, X0, Y0, mashtabX, mashtabY)Call Вывод_графика(Хн,Хк,Х1,А0,А1,А2,В0,В1,N,X0,Y0,mashtabX, mashtabY)End Sub.Sub Ввод(Хн, Хк, Х1, А0, А1, А2, В0, В1, N) 'Процедура ввода данныхWith Worksheets("Функция") 'Вынесение в заголовок наименования листаХн = .Range("F5")'Ввод из ячейки F5 значения и занесение в ХнХк = .Range("F6")'Ввод из ячейки F6 значения и занесение в ХкХ1 = .Range("F7")If Х1 < Хн Or Хк < Х1 Or Хн > Хк Then 'Защита от неверных данныхMsgBox "Неверно заданы границы интервалов" ‘Вывод сообщенияEnd IfА0 = .Range("F8"): А1 = .Range("F9") : А2 = .Range("F10") :В0 = .Range("F11") : В1 = .Range("F12") : N = .Range("F13")If N <= 0 Then MsgBox "Неверно задано число вычислений аргумента"End WithEnd Sub.Sub Расчет1(Хн, Хк, Х1, А0, А1, А2, В0, В1, N, MinY, MaxY)Dim I, dx, X, Y, iviv = 16'Указание 1 строки табл.
для вывода Х и УMinY = 10 ^ 10'Первое значение для поиска минимумаMaxY = -10 ^ 10'Первое значение для поиска максимумаdx = (Х1 - Хн) / N'Шаг вывода в табл. по первому выражениюX = Хн'Начальное значение аргумента для первого выраженияWith Worksheets("Функция")97For I = 0 To N'Начало цикла расчета по первому выражениюY = А0 + А1 * X + А2 * X ^ 2 'Расчет функции по первому выражениюIf Y < MinY Then MinY = Y'Запоминание минимума функцииIf Y > MaxY Then MaxY = Y'Запоминание максимума функции.Cells(iv, 1) = X'Вывод аргумента в табл.
на лист "Функция".Cells(iv, 2) = Y'Вывод функции в табл. на лист "Функция"X = X + dx'Изменение аргумента на шагiv = iv + 1'Изменение строки вывода в таблицуNext I'Конец циклаX = Х1'Начальное значение аргумента для второго выраженияdx = (Хк - Х1) / N'Шаг вывода в табл. по второму выражениюFor I = 0 To N'Начало цикла расчета по второму выражениюY = В0 + В1 ^ X'Расчет функции по первому выражениюIf Y < MinY Then MinY = Y'Запоминание минимума функцииIf Y > MaxY Then MaxY = Y 'Запоминание максимума функции.Cells(iv, 1) = X'Вывод аргумента в табл.
на лист "Функция".Cells(iv, 2) = Y'Вывод функции в табл. на лист "Функция"X = X + dx'Изменение аргумента на шагiv = iv + 1'Изменение строки вывода в таблицуNext I'Конец циклаEnd WithEnd Sub.Sub Вывод_графика(Хн,Хк,Х1,А0,А1,А2,В0, В1, N, X0,Y0, mashtabX, mashtabY)Dim X11, Y11, X12, Y12, I, dx, X, Ydx = (Х1 - Хн) / N 'Шаг расчета при выводе графикаX = Хн'Начальное значение аргумента для первого выраженияFor I = 0 To N – 1 'Цикл расчета при выводе графика поY = А0 + А1 * X + А2 * X ^ 2'Расчет функцииX11 = X0 + mashtabX * X'Координата Х первой точки линииY11 = Y0 - mashtabY * Y'Координата У первой точки линииX = X + dx'Изменение аргумента на шагY = А0 + А1 * X + А2 * X ^ 2 'Расчет функцииX12 = X0 + mashtabX * X'Координата Х второй точки линииY12 = Y0 - mashtabY * Y'Координата У второй точки линииCall Линия(X11, Y11, X12, Y12) 'Линия соединения точекNext I'Конец циклаX = Х1'Начальное значение аргумента для 2-го выраженияdx = (Хк - Х1) / N 'Шаг расчета при выводе графика по 2-му выражениюFor I = 0 To N - 1 'Цикл расчета при выводе графика по 1-му выражениюY = В0 + В1 ^ X'Расчет функцииX11 = X0 + mashtabX * X'Координата Х первой точки линии98Y11 = Y0 - mashtabY * Y'Координата У первой точки линииX = X + dx'Изменение аргумента на шагY = В0 + В1 ^ X'Расчет функцииX12 = X0 + mashtabX * X'Координата Х второй точки линииY12 = Y0 - mashtabY * Y'Координата У второй точки линииCall Линия(X11, Y11, X12, Y12) 'Линия соединения точекNext I'Конец циклаEnd Sub.' Процедура вывода осей, линий сетки, надписейSub Оси_Сетка(Хн, Хк, MaxY, MinY, X0, Y0, mashtabX, mashtabY)'Задание координат окна вывода графикаConst djum = 25.4'Значение дюйма в ммConst Xn = 10 * 72 / djum'Начало области вывода по Х 10 ммConst Yn = 10 * 72 / djum'Начало области вывода по У 10 ммConst Xk = 100 * 72 / djum'Конец области вывода по Х 100 ммConst Yk = 100 * 72 / djum'Конец области вывода по У 100 ммDim dy, dx, X1, Y1, X2, Y2, I, TxtОбразовать_лист'Вызов процедуры удаления старого и‘образования нового листаdx = Xk - Xn'Ширина окна под вывод графикаdy = Yk - Yn'Высота окна под вывод графика'Расчет масштабов, координат начала выводимого графикаIf Хк >= 0 And Хн >= 0 ThenmashtabX = dx / Хк'Масштаб при выводе по оси ХX0 = Xn'Координата начала графика по ХEnd IfIf Хк < 0 And Хн < 0 ThenmashtabX = dx / Abs(Хн)'Масштаб при выводе по оси ХX0 = Xk'Координата начала графика по ХEnd IfIf Хк > 0 And Хн < 0 ThenIf Xk > Abs(Xn) Then mashtabX = dx / Xk'Масштаб по оси ХIf Xk < Abs(Xn) Then mashtabX = dx / Abs(Xn) 'Масштаб по оси ХX0 = (Xk + Xn) / 2'Координата начала графикаEnd IfIf MaxY >= 0 And MinY >= 0 ThenmashtabY = dy / MaxY'Масштаб при выводе по оси У99Y0 = Yk'Координата начала графикаEnd IfIf MaxY < 0 And MinY < 0 ThenmashtabY = dy / Abs(MinY)'Масштаб при выводе по оси УY0 = Yn'Координата начала графикаEnd IfIf MaxY > 0 And MinY < 0 ThenIf MaxY > Abs(MinY) Then mashtabY = 0.5 * dy / MaxY 'Масштаб по оси УIf MaxY < Abs(MinY) Then mashtabY = 0.5 * dy / Abs(MinY)Y0 = (Yn + Yk) / 2'Координата начала графика по УEnd IfCall Линия(X0, Yn - 10, X0, Yk + 10)' Осевая вертикальная линияCall Линия(X0 - 10, Y0, Xk + 10, Y0)' Осевая горизонтальная линияX1 = Xn'Вывод вертикальных линий сеткиFor I = 1 To 11Call Линия_Пунктирная(X1, Yn, X1, Yk)'Пунктирная линияX1 = X1 + dx / 10Next IY1 = Yn'Вывод горизонтальных линий сеткиFor I = 1 To 11Call Линия_Пунктирная(Xn, Y1, Xk, Y1) 'Пунктирная линияY1 = Y1 + dy / 10Next I' Вывод текстовых надписейTxt = " График зависимости "Call Текст((Xn + Xk) / 3, Yn - 20, Xk - Xn - 40, 20, Txt)Call Текст(Xk + 10, Y0, 30, 20, "Х")Call Текст(X0 - 15, Yn, 30, 20, "Y")Txt = " Максим.
значение функции равно " + Str(Int(MaxY))Call Текст(Xn, Yk + 10, Xk - Xn, 20, Txt)Txt = " Миним. значение функции равно " + Str(Int(MinY))Call Текст(Xn, Yk + 25, Xk - Xn, 20, Txt)End Sub.Sub Образовать_лист() ‘Процедура удаления и образования листаSheets("Схема").Select'Обращение к листу "Схема"100ActiveWindow.SelectedSheets.Delete'Удаление листаSheets("Лист2").Select'Обращение к листу "Лист2"Sheets("Лист2").Copy Before:=Sheets(2)'Копирование листаSheets("Лист2 (2)").Select'Обращение к копии лист "Лист2"Sheets("Лист2 (2)").Name = "Схема" 'Изменение имени листаRange("A1").Select'Обращение к ячейке "A1"With ActiveWindow.DisplayGridlines = False'Установить линии ячеек невидимыми.DisplayHeadings = FalseEnd WithEnd SubSub Линия(X1, Y1, X2, Y2)'Убрать с экрана заголовки листа.'Вывода сплошной линии толщиной 1 пкActiveSheet.Shapes.AddLine(X1, Y1, X2, Y2).SelectSelection.ShapeRange.Line.Weight = 1#Selection.ShapeRange.Line.Visible = msoTrueSelection.ShapeRange.Line.Style = msoLineSingleEnd Sub.Sub Линия_Пунктирная(X1, Y1, X2, Y2) ‘Вывод пунктирной линииActiveSheet.Shapes.AddLine(X1, Y1, X2, Y2).SelectSelection.ShapeRange.Line.DashStyle = msoLineDashEnd Sub.Sub Текст(X, Y, dx, dy, Txt) 'Вывод на рисунок текстовых надписейActiveSheet.Shapes.AddTextbox (msoTextOrientationHorizontal, X, Y, dx, dy).SelectSelection.Characters.Text = TxtWith Selection.Characters(Start:=1, Length:=6).Font.Name = "Times New Roman".FontStyle = "обычный" : .Size = 10 : .Strikethrough = False.Superscript = False : .Subscript = False: .OutlineFont = False.Underline = xlUnderlineStyleNone.ColorIndex = xlAutomaticEnd WithSelection.ShapeRange.Line.Visible = msoFalseSelection.ShapeRange.Fill.Visible = msoFalseEnd Sub.10112345678910111213141516171819202122232425262728293031323334353637ABCDEFПример вывода изображения средствами Visual BasicФункция Y=A0+A1*X+A2*X2, при Xн<Х<=X1;Y=B0+B1X,при X1<=Х<=XкИсходные данные1.
Начальное значение переменной, Хн02. Конечное значение переменной, Хк123. Граница первого интервала, Х184. Коэффициент А0 первого выражения125. Коэффициент А1 первого выражения-1006. Коэффициент А2 первого выражения0.17. Коэффициент В0 второго выражения208. Коэффициент В1 второго выражения29. Количество вычислений функции на каждом интервале10Результаты расчетовАргумент Х0.000.801.602.403.204.004.805.606.407.208.008.008.408.809.209.6010.0010.4010.8011.2011.6012.00Функция Y12.0-67.9-147.7-227.4-307.0-386.4-465.7-544.9-623.9-702.8-781.6276.0357.8465.7608.1796.01044.01371.21802.92372.53124.24116.0График зависимостиYХМаксим. значение функции равно 4116Миним.
значение функции равно -7821024. РЕШЕНИЕ ЗАДАЧ РАСЧЕТА ДЛИТЕЛЬНОСТИ ЦИКЛАИ УСИЛИЙЛучше всего осваивается программирование и составление алгоритмов на конкретных реальных примерах. В данном пособии подобраны примеры задач, решить которые без ЭВМ просто невозможно. Вкаждой задаче подробно рассмотрены все этапы решения, поэтомуможете использовать их в качестве образцов при решении других подобных задач.4.1. Общие сведенияПодобные задачи приходится достаточно часто решать в процессепроектирования и эксплуатации нефтегазопромысловых машин: прирасчете производительности, мощности привода.Используемые в настоящее время в практике проектирования методики расчета продолжительности рабочих движений основаны наиспользовании достаточно простых выражений, типа "время =путь/номинальная скорость". Такие выражения не учитывают изменение скорости при изменении нагрузки на рабочем органе в течениерабочего цикла.