Интерфейс COM в VBA | 2.2 Создание стержня

Техническая статья

Эта статья была переведена Google Translator Посмотреть исходный текст

Часть 2.1 серии статей об интерфейсе COM, описывающая создание и модификацию элементов на примере стержня. В третьей части эти стержневые элементы используются снова для создания узловых опор, нагрузок, сочетаний нагрузок и расчетных сочетаний. Таким образом, модель, созданная во второй части, будет расширена. Таким образом, элементы, объясненные в Части 1 и части 2.1, не будут описаны снова.

Pисунок 01 - Система
Тусклый iApp Как RFEM5.Application
Набор iApp = GetObject (, «RFEM5.Application»)
Затем запускается процедура обработки ошибок, и лицензия блокируется:
'Процедура обработки ошибок.
При ошибке Перейти к

'Лицензия COM и доступ к программе заблокированы.
iApp.LockLicense

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

'Получить интерфейс для первой модели.
Тусклый iModel Как RFEM5.model
Если iApp.GetModelCount> 0 Тогда
Набор iModel = iApp.GetModel (0)
Else
Err.Raise vbObjectError, «LoadModel ()», «iApp.GetModelCount <1»
End If

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

Создать узловую опору

Необходимо создать однопролетную балку, и, поскольку стержень проходит вдоль оси x, перемещение узла x, y, z и вращение вокруг x и около z должны быть заблокированы в узле 1. Опора в узле 2 аналогична первой, за исключением свободного перемещения в x-направлении. Перед созданием узловых опор необходимо получить интерфейс для данных модели. При определении опоры убедитесь, что число, большее или равное 0, совпадает с расцепителем с пружинной постоянной для степеней свободы. Опять же, используются единицы СИ, то есть, N/m или N/rad:

'Получить интерфейс для данных модели.
Тусклый iModelData Как RFEM5.iModelData
Набор iModelData = iModel.GetModelData ()

'Создать опору узла.
Тусклый nodsups (0 Для 1) Как RFEM5.NodalSupport
nodsups (0) .No = 1
nodsups (0) .nodeList = «1»
nodsups (0) .RestraintConstantX = -1
nodsups (0) .RestraintConstantY = 0 #
nodsups (0) .RestraintConstantZ = -1
nodsups (0) .SupportConstantX = -1
nodsups (0) .SupportConstantY = -1
nodsups (0) .SupportConstantZ = -1

nodsups (1) .No = 2
nodsups (1) .nodeList = «2»
nodsups (1) .RestraintConstantX = -1
nodsups (1) .RestraintConstantY = 0 #
nodsups (1) .RestraintConstantZ = -1
nodsups (1) .SupportConstantX = 0 #
nodsups (1) .SupportConstantY = -1
nodsups (1) .SupportConstantZ = -1

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

Конечно, узловая опора должна быть снова перенесена в режиме редактирования (PrepareModification/FinishModification) после этого:

'Передать узловую опору.
iModelData.PrepareModification
iModelData.SetNodalSupports nodsups
iModelData.FinishModification

Создание загружений

Чтобы создать нагрузки, сначала нужно определить загружение, как в RFEM. Данная конструкция означает, что загружения создаются и передаются сначала во время программирования, а затем нагрузки могут передаваться только с помощью интерфейсов загружений. Во-первых, для создания загружений:

'Получить интерфейс для нагрузок.
Тусклый iLoads Как RFEM5.iLoads
Набор iLoads = iModel.GetLoads

'Создание загружений.
Тусклый Нагрузки (0 Для 2) Как RFEM5.LoadCase

Loadcases (0) .Loading.No = 1
Loadcases (0) .SelfWeight = True
loadcases (0) .ToSolve = True
loadcases (0) .SelfWeightFactor.X = 0
loadcases (0) .SelfWeightFactor.Y = 0
loadcases (0) .SelfWeightFactor.Z = 1
loadcases (0) .ActionCategory = Постоянный

Мы хотим создать три загружения: Собственная нагрузка, снег и полезная нагрузка. Все идентификаторы в COM-программировании являются английскими. Таким образом, в случае нагрузки с собственным весом, постоянная используется для ActionCategory. Используйте свойство SelfWeightFactor, чтобы задать направление и значение собственного веса. Однако они применяются только в том случае, если для свойства SelfWeight установлено значение True. В противном случае, для параметра ToSolve все равно должно быть установлено значение True, чтобы расчет нагрузки также был рассчитан, а для этого варианта загрузки был назначен номер (.Loading.No). Другие два загружения еще более просты в своем определении, потому что там не используется собственный вес:

Нагрузки (1). Загрузка. № = 2
Нагрузки (1) .SelfWeight = Ложь
Loadcases (1) .ToSolve = True
Нагрузки (1) .ActionCategory = ShowHLowerThan1000

Нагрузки (2). Загрузка.Нет = 3
Нагрузки (2) .SelfWeight = Ложь
Loadcases (2) .ToSolve = True
loadcases (2) .ActionCategory = ImpposedCategoryA

'Передача загружений.
iLoads.PareareModification
iLoads.SetLoadCases
iLoads.FinishModification

Для снега ниже 1000 м над уровнем моря используется категория ShowHLowerThan1000, а для категории полезной нагрузки - ImpposedCategoryA. После этого загружения могут быть переданы в RFEM. Однако для этого используется не интерфейс IModelData, а интерфейс ILoads, поскольку он больше не является данными модели, а загружает данные.

Создание сочетаний нагрузок и расчетных сочетаний

При создании обоих вариантов, есть только несколько отличий. Это в основном связано с тем, что расчетную теорию и другие настройки можно выполнить только после создания сочетания нагрузок через соответствующий интерфейс. Определение такое же, как в RFEM, и вы можете использовать как английские идентификаторы LC (Load Case), так и LF (Load Case). Кроме того, различные десятичные разделители и регистр не являются существенными и принимаются:

'Создание сочетаний нагрузок.
Тусклый Loadcombs (0 Для 0) Как RFEM5.LoadCombination

loadcombs (0) .Loading.No = 1
loadcombs (0) .ToSolve = True
loadcombs (0) .Definition = «1,35 * lc1 + 1,5 * lc2 + 1,05 * lc3»

'Передача сочетаний нагрузок.
iLoads.PareareModification
iLoads.SetLoadCombination loadcombs
iLoads.FinishModification

'Создание комбинаций результатов.
Тусклый Резкомб (0 Для 0) Как RFEM5.ResultCombination

rescombs (0) .Loading.No = 1
rescombs (0) .Definition = «1,35 * lc1 + 0,75 * lc2 + 1,5 * lc3»

'Передать комбинации результатов.
iLoads.PareareModification
iLoads.SetResultCombination rescombs
iLoads.FinishModification

Создание нагрузок

Как уже упоминалось, нагрузки теперь передаются через интерфейсы загружений. В данном примере дополнительные нагрузки не создаются в случае нагрузки 1, в случае нагрузки 2 применяется трапециевидная линейная нагрузка, а в случае нагрузки 3 - постоянная линейная нагрузка и узловая нагрузка. Вот процедура для загружения 2:

'Создать нагрузки.
'Нагрузка 2.
Тусклый iLoadCase Как RFEM5.iLoadCase

Набор iLoadCase = iLoads.GetLoadCase (2, AtNo)
Поскольку номер загружения известен, его можно использовать при выборке интерфейса с помощью AtNo:
'Создание нагрузок на стержни.
Тусклый memLoads () Как RFEM5.MemberLoad
ReDim memLoads (0 Для 0)

В этом случае, так как memLoads должен быть повторно использован для загружения 3, размер массива определяется не во время инициализации, а только после нее. Преимущество этого заключается в том, что при повторном использовании ReDim содержимое будет сброшено до значений по умолчанию. Под ObjectList, вы выбираете стержни для загрузки, разделенные запятой или дефисом. В случае трапециевидной нагрузки, необходимо указать расстояния для начала (DistanceA) и конца (DistanceB) в дополнение к двум значениям нагрузки для начала (Magnitude1) и конца (Magnitude2) нагрузки. Свойство RelativeDistances определяет, используются ли абсолютные (False) спецификации в m или относительные (True) спецификации от 0-1:

memLoads (0) .No = 1
memLoads (0) .ObjectList = «1»
memLoads (0) .Distribution = TrapezoidalType
memLoads (0) .Magnitude1 = 6000 #
memLoads (0) .Magnitude2 = 4000 #
memLoads (0) .RelativeDistances = Ложь
memLoads (0) .DistanceA = 0,2
memLoads (0) .DistanceB = 0,9

'Передача нагрузок на стержни.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification
При передаче данных, необходимо обратить внимание на правильный интерфейс, здесь интерфейс ILoadCase. Нагрузки для случая нагрузки 3 определяются аналогично следующим образом:
'Создание узловых нагрузок.
Тусклый nodalLoads (0 Для 0) Как NodalLoad
nodalLoads (0) .No = 1
nodalLoads (0) .nodeList = «2»
nodalLoads (0) .Component.Force.X = -15000
nodalLoads (0) .Component.Force.Y = 0
nodalLoads (0) .Component.Force.Z = 0
nodalLoads (0) .Component.Moment.X = 0
nodalLoads (0) .Component.Moment.Y = 0
nodalLoads (0) .Component.Moment.Z = 0

'Передача узловых нагрузок.
iLoadCase.PrepareModification
iLoadCase.SetNodalLoads nodalLoads
iLoadCase.FinishModification

'Создание нагрузок на стержни.
ReDim memLoads (0 Для 0)
memLoads (0) .No = 1
memLoads (0) .ObjectList = «1»
memLoads (0) .Distribution = UniformType
memLoads (0) .Magnitude1 = 5000 #

'Передача нагрузок на стержни.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification
В конце программы, процедура обработки ошибок завершается, и лицензия разблокируется:
e: Если Err.Number <> 0 Тогда MsgBox Err.Description ,, Err.Source

'Лицензия COM высвобождена, доступ к программе снова возможен.
iModel.GetApplication.UnlockLicense

Резюме и перспективы

Процедуры, показанные в этой статье, основаны на двух предыдущих статьях. Как уже упоминалось, структура одинакова для всех элементов. За исключением упомянутых здесь нелинейных концевых защелок стержней или узловых опор, мы рассмотрим следующую статью.

Загрузки

Ссылки

Контакты

Свяжитесь с Dlubal

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

+49 9673 9203 0

info@dlubal.com

RFEM Основная программа
RFEM 5.xx

Основная программа

Программное обеспечение для расчета конструкций методом конечных элементов (МКЭ) плоских и пространственных конструктивных систем, состоящих из плит, стен, оболочек, стержней (балок), тел и контактных элементов

Цена первой лицензии
3 540,00 USD
RFEM Прочие
RF-COM 5.xx

Дополнительный модуль

Программируемый интерфейс (API), основанный на технологии COM

Цена первой лицензии
580,00 USD