Алгоритм автоматизированного синтеза приспособлений

Современные системы геометрического моделирования предоставляют средства разработки проблемно-ориентированных программных модулей, например, так называемый интерфейс программирования приложений (англ. API – Application Programming Interface). Предполагается, что с его помощью любой пользователь создаст на базе имеющихся процедур создания и редактирования геометрии собственные программы, ориентированные на проектирование определенного класса конструкций. Как показывает практика, навыки программирования как такового в подобной ситуации не самое важное. Научиться пользоваться основными операторами – арифметическими, логическими, операторами циклов и т.п. – несложно. Гораздо важнее алгоритмически четко представлять себе технологию проектирования и знать то, какими API-процедурами эту технологию представить. В этой связи в данном разделе приводится вариант программной реализации ранее изложенной методики автоматизированного проектирования приспособлений. В качестве базовой системы геометрического моделирования предполагается Solid Works, а язык программирования Basic.

Для работы модуля автоматизированного проектирования приспособлений исходным является состояние, когда загружена геометрическая система (базовое приложение), а в нем создан и активен документ класса «сборка». Для дальнейшей работы, по крайней мере, на начальных этапах понадобятся ссылки: на приложение, swApp, на документ (модель), Model и на сборку, Assembly:

Dim swApp As Object: Set swApp = Application.SldWorks

Dim Model As ModelDoc2: Set Model = swApp.ActiveDoc

Dim Assembly As AssemblyDoc: Set Assembly = swApp.ActiveDoc.

Модель объекта оснащения присутствует в активном документе в качестве компонента.

Первый шаг проектирования – ввод информации о базах (блок 1,Рисунок 8.1). Наиболее адекватным представителем базы в графической модели является грань. Соответственно, ввод информации о базах – это указание соответствующих граней, их выделение. Доступ к выделенным граням поддерживает специальный объект – Selection Manager:

Dim SelMan As SelectionMgr: Set SelMan = Model.SelectionManager.

Из него следует переписать ссылки на базовые грани в какую-либо внутреннюю структуру проектирующей программы:

For i = 1 To SelectedObjectCount

BaseCollection.Add Selman.GetSelectedObject6(i, -1)

Next i,

где SelectedObjectCount – переменная, содержащая количество выделенных объектов. Внутренней структурой для хранения баз в приведенном примере является семейство BaseCollection. В данном качестве можно также использовать и массив.

Следующий шаг (блок 2) – определение схемы базирования определение статуса каждой базы (Таблица 4.1). Объективные принципы сопоставления размеров баз, как отмечалось выше, в статье не предлагаются. В данном контексте в качестве примера приводится вариант оценки размеров соответствующих базам граней. В приложении Solid Works грани это объекты класса Face2. Среди свойств, определенных в этом классе, наиболее информативными представляются параметры U и V – размеры вдоль образующей и направляющей[2]. Доступ к ним обеспечивает метод GetUVBounds, определенный в классе Face2. Результат возвращается в виде одномерного массива, содержащего экстремальные значения параметров: (Umin, Umax, Vmin, Vmax). Каждый размер определяется как разница между соответствующими элементами массива:

Dim FaceUVBounds, Dim1 As Double, Dim2 As Double

FaceUVBounds = BaseFace.GetUVBounds: Dim1 = Fabox(1) - Fabox(0): Dim2 = Fabox(3) - Fabox(2).

 

1. Множество гранейбаз: F = {fi}, i=1..3
2. Определение схемы базирования, SB
3. Синтез схемы установки, SL
4. Размещение установочных элементов
6. Размещение фиксирующих элементов
8. Построение корпусной плиты
9. Сопряжение элементов с корпусной плитой
10. Вставка переходных элементов
5. Корректировка
7. Корректировка
11. Геометрическая модель приспособления

 

Рисунок 8.1 – Блок-схема процесса проектирования

 

Синтез схемы установки (блок 3) в данном контексте рассматривается на уровне вставки элементов и сопряжения их с соответствующими базами. Предусматривается, что подходящий элемент уже выбран и его имя зафиксировано в соответствующей переменной keName. Вставка элемента осуществляется как добавление компонента в сборку Assembly методом AddComponent, определенным в классе AssemblyDoc:

[swApp.OpenDoc keName &, swDocPART][3]

dim keComponet as Component: Set keComponet = Assembly.AddComponent (keName, Pt(0), Pt(1), Pt(2))

[swApp.CloseDoc keName],

где Pt(i) - координаты точки вставки обязательные параметры метода AddComponent. Поэтому, несмотря на то, что впоследствии положение компонента будет определяться сопряжениями, некоторые исходные значения следует указать. keComponet – ссылка на вставляемый компонент, которая необходима для последующих операций.

Сопряжение осуществляется методом AddMate3, определенным в классе ModelDoc2. Сопрягаемые поверхности не передаются как аргумент, они должны быть предварительно выделены:

BaseFace.Select True

LocFace.Select True

Model.AddMate3 Type, Align, False, 0, 0, 0, 0, 0, 0, 0, 0, False, Erf.

Аргумент Type определяет тип сопряжения – совпадение, соосносность, касательность и т.д. Аргумент Align – обозначает тип выравнивания – взаимная ориентация нормалей или осей сопрягаемых граней. Остальные аргументы, на взгляд авторов, менее значимы и поэтому не комментируются.

Со стороны установочного элемента в сопряжении участвует только установочная поверхность, обозначенная в приведенном выше фрагменте LocFace. Если базовая грань, BaseFace, выделяется пользователем, то LocFace должна быть найдена программно[4]. Для этого предлагаются два способа. Первый заключается в том, чтобы перебрать все грани элемента, проанализировать их свойства и выбрать подходящую. В элементе класса «палец», например, внешнюю цилиндрическую, в опоре – самую верхнюю горизонтальную и т.п. Альтернативный способ – связать с гранью установочной поверхности элемент справочной геометрии – плоскость или ось. Подобные элементы относятся к классу «свойства» (Feature) и имеют собственные имена, по которым могут быть определены:

Dim LocFace as Feature: Set LocFace = keComponent.FeatureByName(LocatingSurfaceName).

Далее выполняются шаги по размещению установочных элементов (блок 4) и фиксирующих (блок 6) (Рисунок 8.2). Это наименее формализуемые этапы проектирования. Поэтому на данный момент предусмотрен интерактивный режим их выполнения штатными средствами системы геометрического моделирования.

В соответствие с основными принципами построения корпусной плиты (блок 8), рассмотренными в разделе 7, из моделей элементов необходимо извлечь информацию о привалочных гранях, а именно нормали и контурные точки. Доступ к граням компонента[5] осуществляется следующим образом:

Dim keFaces: keFaces = keComponent.GetBody.GetFaces,

где GetBody – метод, возвращающий граничное представление компонента (Boundary Representation), а keFaces – одномерный массив граней, объектов класса Face2. Для поиска привалочной следует перебрать грани этого массива, проверяя каждую на соответствие определенному условию – расположению, наличию какого-либо атрибута и т.п.

Нормаль является непосредственным свойством грани, информация о ней извлекается простым запросом Face.Normal. Что касается контурных точек, то для их получения необходимо сначала при помощи метода GetLoops запросить контуры, ограничивающие грань. Каждый контур – объект класса Loop2, в котором, в свою очередь, определен метод GetVertices, возвращающий вершины контура. И контуры, и вершины возвращаются массивами. В итоге, контурные точки привалочных граней извлекаются следующим образом:

FacesLoops = SettingFace.GetLoops

For j = 0 to LoopsCount

LoopsVertices = FaceLoop(j).GetVertices

For k = 0 to VerticesCount

VerticesCollection.Add LoopsVertices(k)

Next k

Next j,

где SettingFace – привалочная грань, а VerticesCollection – семейство, в котором накапливаются контурные точки.

Координаты контурных точек и нормалей граней, полученные описанным способом, будут находиться в системе координат своего компонента keComponent. Соответственно, их необходимо пересчитать в глобальную систему координат. Для этого извлекается матрица, описывающая положение этого компонента, kePositionMatrix:

kePositionMatrix As MathTransform: Set kePositionMatrix = keComponent.Transform.

Результат возвращается в виде объекта класса MathTransform. В этом классе определена операция умножения, посредством которой и преобразуются координаты.

Приведенный способ получения контурных точек может быть упрощен. Упрощенный вариант основан на допущении о том, что все элементы приспособления располагаются вертикально, и у каждого из них привалочной является самая нижняя грань[6]. В таком случае достаточно габаритного параллелепипеда, охватывающего компонент (Рисунок 4.2). Он запрашивается непосредственно у компонента при помощи метода GetBox:

Dim keBox: keBox = keComponent.GetBox (A1,A2),

где А1 и А2 – аргументы булевого типа, определяющие учитывать или нет справочные плоскости и эскизы. Возвращаемый результат, keBox шестиэлементный массив координат угловых точек Cmin и Cmax. По ним можно восстановить координаты остальных углов и использовать их в качестве контурных точек.

Следующий шаг состоит всопряжении элементов с корпусной плитой (блок 9). Он выполняется аналогично сопряжению установочных элементов с базами. Однако в некоторых случаях возникает необходимость «удлинить» элемент (элемент «упор», Рисунок 3.1). Для автоматизации решения подобной задачи элемент необходимо подготовить заранее. Следует определить часть геометрии, за счет которой будет регулироваться его высота и связать соответствующий размер с каким-либо параметром элемента. Например, палец (Рисунок 8.4) состоит из двух частей – функциональной, расположенной сверху, и бобышкой внизу, предназначенной для установки. Очевидно, что высоту регулировать следует за счет бобышки. Ее высота, соответственно, связывается с параметром H. После построения привалочной грани корпуса определится расстояние между ней и нижней частью пальца, H. Эта величина должна быть просто прибавлена к параметру H.

Управление выражениями, описывающими параметрические связи, осуществляется посредством «менеджера выражений» (Equation Manager), доступ к которому предоставляется через модель компонента:

Dim keEquations As EquationMgr: Set keEquations = ke.GetModelDoc.GetEquationMgr.

Каждое выражение – это строка вида «<Имя>=<Выражение>». Соответственно, чтобы изменить нужный параметр необходимо перебрать все эти строки, проверяя их на соответствие шаблону. Найденная строка переписывается.

For i = 0 To EquationCount

If = keEquations.Equation(i) Like ParameterName & "=*" Then Equm.Equation(i) = ParameterName & “=” & NewValue

Next i.

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

Интерактивная корректировка (блоки 5 и 7) обязательный элемент проектирования. Как бы совершенны не были принципы выбора и позиционирования элементов, необходимо обеспечить проектировщику возможность при необходимости их перемещения, замены[7], и т.д. Причем корректировка должна быть выполнена до проектирования несущей системы.

Рисунок 8.3 – Габаритный параллелепипед элемента Рисунок 8.4 – Управление высотой конструктивного элемента