Научная статья на тему 'Методика применения пакета Maple для кинематического анализа механизмов'

Методика применения пакета Maple для кинематического анализа механизмов Текст научной статьи по специальности «Математика»

CC BY
1386
170
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по математике, автор научной работы — Асадулин Рафаэль Камильевич

Предложена методика реализации метода планов для кинематического исследования механизмов с использованием прикладных библиотек математического пакета Maple на примере анализа рычажного механизма второго класса. Подробно описан алгоритм создания процедуры построения планов положений и скоростей, приведен пример такой процедуры. Рассмотрены варианты использования данной методики для решения практических задач. Библиогр. 1. Ил. 3.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Асадулин Рафаэль Камильевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

USING PACKET 'MAPLE' FOR KINEMATICAL ANALYSIS OF MECHANISMS

Methods of plans for kinematical investigating of mechanisms using applied libraries of mathematical packet 'Maple' have been presented taking analysis of lever mechanism of II class as an example. Algorithm of making plans of configuration and velocity is given in details. Variants of given methods have been used to solve practical problems.

Текст научной работы на тему «Методика применения пакета Maple для кинематического анализа механизмов»

УДК 531.133.3:519.6

Р. К. Асадулин Астраханский государственный технический университет

МЕТОДИКА ПРИМЕНЕНИЯ ПАКЕТА MAPLE ДЛЯ КИНЕМАТИЧЕСКОГО АНАЛИЗА МЕХАНИЗМОВ

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

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

Реализуем метод планов с помощью пакета Maple 7, богатого прикладными библиотеками, направленными на решение различных задач.

Пакет аналитических вычислений Maple не нашел такого широкого распространения, как, например, MathCAD или Matlab [1], но это не уменьшает его достоинств. Этот пакет - совместное детище университета Ватерлоо (штат Онтарио, Канада) и Высшей технической школы (ЕТН, Цюрих, Швейцария). Он состоит из ядра - процедур, написанных на языке С, библиотек и интерфейса. Работа с пакетом проходит в режиме интерпретатора. В строке ввода пользователь вводит команду, нажимает клавишу Enter и получает результат - строку (строки) вывода либо сообщение об ошибочно введенной команде. Тут же выдается приглашение вводить новую команду и т. д.

Библиотека geometry содержит команды для решения задач двухмерной евклидовой геометрии [1]. Геометрические объекты определяются обычным образом: точка задается своими координатами (команда point), прямая (команда line) - двумя точками или уравнением, окружность (команда circle) - тремя точками, заданием центра и радиуса, диаметром. Целый ряд команд пакета проверяет выполнение того или иного условия для геометрических объектов, например, команда are_collinear проверяет, лежат ли три точки на одной прямой. Другие команды предназначены для

поиска характеристик геометрических объектов - так, команда intersection находит точку пересечения двух прямых. Все программы на языке Maple начинаются с команды restart, которая обнуляет все полученные результаты при перезапуске программы.

В качестве объекта исследования рассмотрим изображенный на рис. 1 рычажный механизм второго класса по Ассуру.

Рис. 1. Схема исследуемого механизма

Механизм приводится в движение кривошипом 1, вращающимся с постоянной угловой скоростью Wj = const. Создадим процедуру построения планов положений этого механизма. Задаем геометрические параметры механизма: /1 = 1,2 - длина звена 1; /2 = 1,5 - длина звена 2; / 31 = 5,0 - длина отрезка ВС звена 3; / 4 = 1,0 - длина отрезка CD звена 3; ОЕ = 4,5 - длина отрезка OE. Задаем начальный и конечный угол поворота звена 1: ug1 = 0; ug2 = 2 ■% . Определим шаг построения планов положений, который представляет собой угол поворота кривошипа

step =

ug2 - ug1 Npoints -1

(1)

Здесь Крот18 - число планов положений, которые должны быть построенными, т. е. угол поворота кривошипа для /-го плана положений будет равен:

ugol, = ug1 + step ■ i.

(2)

Определим положение всех точек механизма (напомним, что точка задается командой point): geometry [point] (O, [0,0])

geometry[point](C||i,[(oe+l4*cos(ugol[i])),(l4*sin(ugol[i]))]) geometry [point] (E,[oe,0])

Точка D лежит на прямой OE и является одной из точек пересечения этой прямой с окружностью радиусом /32 с центром в точке С. geometry [circle] (ec, [E,l4]): geometry [line]

(OE,[O,E]):

geometry[circle] (cd||i, [C||i,l32]):

geometry[intersection](D||i,cd||i,OE,[D||i1,D||i2]):

x1_d||i:=evalf(geometry[HorizontalCoord](D||i1)):

x2_d||i:=evalf(geometry[HorizontalCoord](D||i2)):

Команда intersection выдаст две точки пересечения прямой и окружности, соответственно D||i1 и D||i2 (символ || является синтаксическим знаком, результатом такой записи будет значение Di1 и Di2). Из условия сборки нас будет интересовать точка, координаты которой ограничены условием xD > ОЕ , т. е.: if x1_d||i > oe then D||i:=D||i1 else D||i:=D||i2 end if

Эту запись можно расшифровать следующим образом - если координата по оси х точки Di1 больше величины OE, то точку Di1 считать точкой Di, в противном случае считать точкой Di точку Di2 .

Точка В находится как точка пересечения прямой СD и окружности радиусом /31, ограниченная условием хв < ОЕ . geometry[line](CD||i,[C||i,D||i]): geometry[circle](oa,[O,l1]): geometry[circle] (db||i, [D||i,(l31+l32)]): geometry [intersection] (B||i,CD||i,db||i, [B||i1,B||i2]): x1_b||i:=evalf(geometry[HorizontalCoord](B||i1)): x2_b||i:=evalf(geometry[HorizontalCoord](B||i2)): if x1_b||i < oe then B||i:=B||i1 else B||i:=B||i2 end if:

Чтобы не потерять ход рассуждений, необходимо указать, что команда evalf(n) вычисляет значение величины n в формате числа с плавающей запятой, а команда HorizontalCoord(N) определяет координату точки N по горизонтальной оси (форма записи geometry[HorizontalCoord](N) означает, что команда HorizontalCoord принадлежит библиотеке geometry).

Точка А находится на пересечении двух окружностей с центрами в точках О и В и радиусами /2 и /4 соответственно. Поскольку есть затруднения в задании ограничивающих условий, представляем оба условия сборки:

geometry [circle] (ba||i,[B||i,l2]):

geometry [intersection](A||i,ba||i,oa,[A||i1,A||i2]):

Определим координаты всех подвижных точек с использованием команд VerticalCoord(N) и HorizontalCoord, определяющих координаты точки по осям координат: x1_a||i:=evalf(geometry[VerticalCoord](A||i1)): x2_a||i:=evalf(geometry[HorizontalCoord](A||i2)): x_a||i:=geometry[HorizontalCoord](A||i1): y_a||i:=geometry[VerticalCoord](A||i1): x_a_||i:=geometry[HorizontalCoord](A||i2): y_a_||i:=geometry[VerticalCoord](A||i2): x_b||i:=geometry[HorizontalCoord](B||i): y_b||i:=geometry[VerticalCoord] (B||i): x_c||i:=geometry[HorizontalCoord] (C||i): y_c||i:=geometry[VerticalCoord](C||i): x_d||i:=geometry[HorizontalCoord] (D||i): y_d||i:=geometry[VerticalCoord] (D||i): x_e:=geometry[HorizontalCoord](E):

y_e:=geometry[VerticalCoord](E):

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

zveno1 [i] := plottools [line] ([0,0],[x_a||i,y_a||i] ,color =blue,thickness=2): zveno1_ [i] :=plottools [line] ([0,0], [x_a_||i,y_a_| |i] ,color =blue,thickness=2): zveno2 [i] :=plottools [line]([x_a||i,y_a||i],[x_b||i,y_b||i] ,color= =blue,thickness=2):

zveno2_[i]:=plottools[line]([x_a_||i,y_a_||i],[x_b||i,y_b||i],color

=blue,thickness=2):

zveno3 [i] :=plottools [line]([x_b||i,y_b||i],[x_d||i,y_d||i] ,color=

=blue,thickness=2):

polzun [i]: =plottools [polygon] ([ [x_d||i-

0.5,y_d||i+0.2],[x_d||i+0.5,y_d||i+0.2],[x_d||i+0.5,y_d||i-0.2],[x_d||i-0.5, y_d||i-0.2]],color= yellow):

krivoship [i] :=plottools [line]([x_c||i,y_c||i],[x_e,y_e] ,color =blue,thickness=2):

opora1:=plottools[polygon]([[0,0],[-.2,-.2],[.2,-.2]],color=red, thickness=1): opora2:=plottools[polygon] ([ [x _e,y_e], [x_e-.2,y_e-.2], [x_e+.2,y_e-.2]], color=red, thickness=1): z1_[i]:=plottools[circle]([0,0] ,l1): z2_[i]:=plottools[circle]([x_b||i,y_b||i],l2):

Как видно из этой записи, такие команды, как line и circle встречаются не только в библиотеке geometry, поэтому необходимо конкретизировать их принадлежность. Новой командой является команда polygon, служащая для задания многоугольника по координатам его вершин. Опции color и thickness задают цвет и толщину линии изображаемой фигуры. Теперь можно построить i-й план положений с помощью команды display.

Индекс i у каждого определенного параметра позволяет нам сгруппировать весь алгоритм расчета в цикл, т. е. алгоритм будет выполняться для каждого i из определенной последовательности. Maple позволяет создать процедуру, в которую будет заключен этот алгоритм. В результате получим n планов положений. Если их показывать по очереди, то получим анимацию движения механизма, заданную процедурой, которая носит название pp, что означает «планы положений»: pp:= proc(Npoints::numeric) local

step,i,ugol,C,O,E,ec,OE,cd,D,D1,D2,x1_d,x2_d,CD,db,B,B1,B2,x1_b,x2_b,b

a,oa,x1_a,x2_a,U,zveno1,zveno1_,zveno2,zveno2_,zveno3,polzun,krivoship,

opora1,opora2,picture,x_a,y_a,x_b,y_b,x_c,y_c,x_d,y_d,x_e,y_e,itogo,

z1_,z2_;

step := (ug2 - ug1)/(Npoints - 1); for i from 0 to Npoints-1 do ugol[i]:=ug1+step*i;

picture[i]:=display({opora1,opora2,zveno1[i],zveno2 [i],zveno1_[i],zveno2_ [i] ,zveno3 [i] ,polzun [i] ,krivoship [i] ,z1_[i] ,z2_[i]}); end do;

display([seq(picture[i],i=0..Npoints-1)],insequence=true,

axes=normal,scaling=constrained);

end proc:

Здесь слово proc означает - процедура, число за скобками - Npoints -число планов положений, которое мы введем при запуске процедуры. Затем вводят локальные переменные, т. е. переменные, которым будет присваиваться какое-то значение только внутри данной процедуры. Место многоточия на самом деле занимает алгоритм, описанный выше. Слово seq в команде display означает, что переменная picture[i] будет преобразована в список, где i в качестве нижнего индекса будет задавать последовательность, принимая значения от 0 до Npoints-1, а значит, и картинка, заданная фигурами opora1, opora2, zveno1[i], zveno2[i], zveno1_[i], zveno2_[i], zveno3[i], polzun[i], krivoship[i], z1_[i], z2_[i], будет воспроизводиться последовательно. Выполнение команды «pp(100);» занимает несколько минут, после чего выводится анимационная картинка из ста слайдов (рис. 2).

Рис. 2. Кадры анимации движения механизма

Укажем, что результатом выполнения процедуры рр можно сделать любые из определенных в процедуре параметров, например, можно получить матрицу, где будут приведены координаты всех точек, или запрограммировать процедуру так, чтобы при вводе в скобках угла поворота кривошипа процедура определяла координаты какой-то одной или всех точек для данного положения механизма. Это говорит о том, что процедура является численной функцией / (х) = у , где значение х мы задаем сами, а значение у получаем в процессе выполнения процедурой алгоритма расчета, причем «тело» процедуры мы не изменяем.

Аналогичным образом выполняем построение планов скоростей, к процедуре рр добавляем следующие строки:

> geometry[point](pv,[0,0]):

geometry[point](c||i,[(v_a*cos((Pi/2)+ugol[i])),(v_a*sin((Pi/2)+ugol[i]))]):

geometry[PerpendicularLine] (cd||i,c||i,CD||i):

geometry[intersection] (d||i,cd||i,OE):

cd_||i:=geometry[distance](c||i,d||i):bc_||i:=l31*cd_||i/l32:

geometry [circle] (cb_||i, [c||i,bc_||i]):

geometry[intersection](b||i,cb_||i,cd||i,[b||i1,b||i2]):

bd1||i:=evalf(geometry[distance](d||i,b||i1)):

bd2||i:=evalf(geometry[distance](d||i,b||i2)):

if bd1||i >bd2||i then b||i:=b||i1 else b||i:=b||i2 end if:

geometry[line] (OA1 ||i,[O,A||i1]):

geometry[line] (BA1||i,[B||i,A||i1]):

geometry [line] (OA2||i,[O,A||i2]):

geometry[line] (BA2||i,[B||i,A||i2]):

geometry [PerpendicularLine] (pva1 ||i,pv,OA1 ||i):

geometry[PerpendicularLine](ba1||i,b||i,BA1||i):

geometry [intersection] (a1||i,pva1 ||i,ba1||i):

geometry[PerpendicularLine](pva2||i,pv,OA2||i):

geometry[PerpendicularLine](ba2||i,b||i,BA2||i):

geometry[intersection] (a2||i,pva2||i,ba2||i):

xpv:=evalf(geometry[HorizontalCoord](pv)):

ypv:=evalf(geometry[VerticalCoord](pv)):

xc||i: =evalf(geometry [HorizontalCoord] (c||i)):

yc||i:=evalf(geometry[VerticalCoord](c||i)):

xd||i:=geometry[HorizontalCoord] (d||i):

yd||i:=geometry[VerticalCoord](d||i):

xb||i:=geometry[HorizontalCoord](b||i)

:yb||i:=geometry[VerticalCoord](b||i):

xa1 ||i:=geometry[HorizontalCoord] (a1 ||i):

ya1||i:=geometry[VerticalCoord](a1||i):

xa2||i:=geometry[HorizontalCoord](a2||i):

ya2||i:=geometry[VerticalCoord](a2||i):

pvc [i] := plottools[line] ([xpv,ypv],[xc||i,yc||i] ,color =blue,thickness=2): bd[i]:=plottools[line]([xb||i,yb||i],[xd||i,yd||i],color =blue,thickness=2): pvd [i]: = plottools [line] ([xpv,ypv], [xd||i,yd||i] ,color =blue,thickness=2): pvb [i]: =plottools [line] ([xpv,ypv], [xb ||i,yb||i],color =blue,thickness=2): pva1 [i] := plottools [line]([xpv,ypv],[xa1 ||i,ya1 ||i] ,color =blue,thickness=2): pva2 [i] := plottools [line]([xpv,ypv],[xa2||i,ya2||i] ,color =blue,thickness=2): ba1 [i] :=plottools [line] ([xb||i,yb||i],[xa1 ||i,ya1 ||i] ,color =blue,thickness=2): ba2 [i] :=plottools [line] ([xb||i,yb||i],[xa2||i,ya2||i] ,color =blue,thickness=2): picture [i] :=display( {pvc [i] ,bd [i] ,pvd [i] ,pvb [i] ,pva1 [i] ,pva2 [i] ,ba1 [i] ,ba2 [i]});

В результате выполнения такой процедуры получим анимацию изменения планов скоростей механизма (рис. 3).

Рис. 3. Кадры анимации изменения плана скоростей механизма

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

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

СПИСОК ЛИТЕРА ТУРЫ

1. Оладьев В. З., Шишаков М. Л. Автоматизированное рабочее место математика. - М.: Лаборатория базовых знаний, 2000. - 351 с.

Получено 17.01.06

USING PACKET ‘MAPLE’

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

FOR KINEMATICAL ANALYSIS OF MECHANISMS

R. K. Asadulin

Methods of plans for kinematical investigating of mechanisms using applied libraries of mathematical packet ‘Maple’ have been presented taking analysis of lever mechanism of II class as an example. Algorithm of making plans of configuration and velocity is given in details. Variants of given methods have been used to solve practical problems.

i Надоели баннеры? Вы всегда можете отключить рекламу.