Dim iApp As RFEM5.Application
Set iApp = GetObject (, «RFEM5.Application»)
Затем запускается обработчик ошибок и лицензия блокируется:
'Обработчик ошибок
On Error GoTo e
'Лицензия COM и доступ к программе заблокированы.
iApp.LockLicense
Мы рекомендуем запустить обработчик перед блокировкой лицензии; в противном случае программа RFEM остается заблокированной в случае ошибки и может быть закрыта только с помощью Диспетчера задач. Поскольку интерфейс теперь готов к применению, вы можете получить интерфейс для модели:
'Получить интерфейс для первой модели.
Dim iModel As RFEM5.model
If iApp.GetModelCount> 0 Then
Set 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 выравнивается с высвобождением с помощью постоянной пружины. Здесь также используются единицы СИ; то есть Н/м или Н/рад:
'Получить интерфейс для данных модели.
Dim iModelData As RFEM5.iModelData
Set iModelData = iModel.GetModelData ()
'Создание узловых опор.
Dim nodsups (0 To 1)As 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
Если возникают какие-либо проблемы, они могут быть вызваны неправильным типом данных. Если требуется двойное, целочисленный ввод может вызвать ошибки. Таким образом, после целочисленного значения необходимо добавить хеш-ключ, чтобы он использовался как двойное значение.
Конечно, узловая опора затем должна быть снова переведена в режим редактирования (PrepareModification/FinishModification):
'Перенос узловых опор.
iModelData.PrepareModification
iModelData.SetNodalSupports nodsups
iModelData.FinishModification
Создать загружения
Для создания нагрузок необходимо сначала определить загружения, точно так же, как в RFEM. При программировании сначала создаются и переносятся загружения, и только потом можно передавать нагрузки с помощью интерфейсов загружений. Сначала мы создадим загружения:
'Получить интерфейс для нагрузок.
Dim iLoads As RFEM5.iLoads
Set iLoads = iModel.GetLoads
'Создать загружения.
Dim Нагрузки (0 To 2) As 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 = Permanent
Необходимо создать три загружения: Собственный вес, снег и приложенная нагрузка. При программировании COM все идентификаторы на английском языке. Таким образом, постоянная используется для ActionCategory в случае нагрузки с собственным весом. Для свойства SelfWeightFactor можно задать направление и значение собственного веса. Однако они применяются только в том случае, если для свойства self-weight установлено значение True. Кроме того, ToSolve также должен быть установлен в True, чтобы включить расчет нагрузки в расчет и присвоить номер загрузке (.Loading.No). Два других загружения определяются более легко, поскольку в них нет собственного веса:
Loadcases (1) .Loading.No = 2
Loadcases (1) .SelfWeight = False
loadcases (1) .ToSolve = True
loadcases (1) .ActionCategory = ShowHLowerThan1000
Loadcases (2) .Loading.No = 3
Нагрузки (2) .SelfWeight = False
loadcases (2) .ToSolve = True
loadcases (2) .ActionCategory = ImpposedCategoryA
'Передача загружений.
iLoads.PareareModification
iLoads.SetLoadCases
iLoads.FinishModification
Категория ShowHLowerThan1000 используется для снега ниже высоты 1000 м над уровнем моря, а категория ImposedCategoryA используется для наложенной нагрузки категории A. Затем загружения могут быть переданы в RFEM. Однако для этого используется интерфейс ILoads вместо интерфейса IModelData, поскольку данные модели больше не используются; скорее, данные о нагрузке.
Создание сочетаний нагрузок и результатов
При создании сочетаний нагрузок или расчетных сочетаний, есть только несколько различий. Это связано с тем, что метод расчета и другие настройки можно применить только после создания сочетания нагрузок через соответствующий интерфейс. Определение выполняется как в RFEM. Для этого можно использовать идентификатор LC (Load Case). Различные десятичные разделители и прописные и строчные буквы не играют роли, и оба варианта допустимы:
'Создание сочетаний нагрузок.
Dim loadcombs (0 To 0) As 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
'Создание результирующих комбинаций.
Dim Резкомб (0 To 0) As 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.
Dim iLoadCase As RFEM5.iLoadCaseSet iLoadCase = iLoads.GetLoadCase (2, AtNo)
Поскольку мы знаем номер загружения, его можно использовать с AtNo при получении интерфейса:
'Создание нагрузок на стержни.
Dim memLoads () As RFEM5.MemberLoad
ReDim memLoads (0 To 0)
В этом случае размер массива определяется не во время инициализации, а после, потому что memLoads следует снова использовать для загружения 3. Преимущество этого заключается в том, что при повторном использовании ReDim содержимое будет сброшено до значений по умолчанию. В списке объектов можно выбрать элементы для загрузки, разделенные запятыми или соединенные дефисами. В дополнение к значениям нагрузки для начала нагрузки (Magnitude1) и конца нагрузки (Magnitude2), трапециевидная нагрузка требует указания расстояний для начала нагрузки (DistanceA) и конца (DistanceB). Свойство 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 = False
memLoads (0) .DistanceA = 0,2
memLoads (0) .DistanceB = 0,9
'Передача нагрузок на стержни.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification
При передаче нагрузок необходимо правильно настроить интерфейс; в данном случае - интерфейс ILoadCase. Нагрузки в загружении 3 определяются следующим образом:
'Создать узловые нагрузки.
Dim nodalLoads (0 To 0) As 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 To 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: If Err.Number <> 0 Then MsgBox Err.Description,, Err.Source
'COM -лицензия разблокирована, доступ к программе снова возможен.
iModel.GetApplication.UnlockLicense
Резюме и перспективы
Процедуры, показанные в этой статье, основаны на двух предыдущих статьях. Как уже было сказано, конструкция у всех элементов схожа. Упомянутое исключение нелинейных выпусков стержней или узловых опор будет объяснено в следующей статье.