Dim iApp As RFEM5.ApplicationSet iApp = GetObject (, «RFEM5.Application»)Затем запускается обработчик ошибок и лицензия блокируется:'Обработчик ошибокOn Error GoTo e'Лицензия COM и доступ к программе заблокированы.iApp.LockLicense
Мы рекомендуем запустить обработчик перед блокировкой лицензии; в противном случае программа RFEM остается заблокированной в случае ошибки и может быть закрыта только с помощью Диспетчера задач. Поскольку интерфейс теперь готов к применению, вы можете получить интерфейс для модели:
'Получить интерфейс для первой модели.Dim iModel As RFEM5.modelIf 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.iModelDataSet iModelData = iModel.GetModelData ()
'Создание узловых опор.Dim nodsups (0 To 1)As RFEM5.NodalSupportnodsups (0) .No = 1nodsups (0) .nodeList = «1»nodsups (0) .RestraintConstantX = -1nodsups (0) .RestraintConstantY = 0 #nodsups (0) .RestraintConstantZ = -1nodsups (0) .SupportConstantX = -1nodsups (0) .SupportConstantY = -1nodsups (0) .SupportConstantZ = -1
nodsups (1) .No = 2nodsups (1) .nodeList = «2»nodsups (1) .RestraintConstantX = -1nodsups (1) .RestraintConstantY = 0 #nodsups (1) .RestraintConstantZ = -1nodsups (1) .SupportConstantX = 0 #nodsups (1) .SupportConstantY = -1nodsups (1) .SupportConstantZ = -1
Если возникают какие-либо проблемы, они могут быть вызваны неправильным типом данных. Если требуется двойное, целочисленный ввод может вызвать ошибки. Таким образом, после целочисленного значения необходимо добавить хеш-ключ, чтобы он использовался как двойное значение.
Конечно, узловая опора затем должна быть снова переведена в режим редактирования (PrepareModification/FinishModification):
'Перенос узловых опор.iModelData.PrepareModificationiModelData.SetNodalSupports nodsupsiModelData.FinishModification
Создать загружения
Для создания нагрузок необходимо сначала определить загружения, точно так же, как в RFEM. При программировании сначала создаются и переносятся загружения, и только потом можно передавать нагрузки с помощью интерфейсов загружений. Сначала мы создадим загружения:
'Получить интерфейс для нагрузок.Dim iLoads As RFEM5.iLoadsSet iLoads = iModel.GetLoads
'Создать загружения.Dim Нагрузки (0 To 2) As RFEM5.LoadCase
loadcases (0) .Loading.No = 1loadcases (0) .SelfWeight = Trueloadcases (0) .ToSolve = Trueloadcases (0) .SelfWeightFactor.X = 0loadcases (0) .SelfWeightFactor.Y = 0loadcases (0) .SelfWeightFactor.Z = 1loadcases (0) .ActionCategory = Permanent
Необходимо создать три загружения: Собственный вес, снег и приложенная нагрузка. При программировании COM все идентификаторы на английском языке. Таким образом, постоянная используется для ActionCategory в случае нагрузки с собственным весом. Для свойства SelfWeightFactor можно задать направление и значение собственного веса. Однако они применяются только в том случае, если для свойства self-weight установлено значение True. Кроме того, ToSolve также должен быть установлен в True, чтобы включить расчет нагрузки в расчет и присвоить номер загрузке (.Loading.No). Два других загружения определяются более легко, поскольку в них нет собственного веса:
Loadcases (1) .Loading.No = 2Loadcases (1) .SelfWeight = Falseloadcases (1) .ToSolve = Trueloadcases (1) .ActionCategory = ShowHLowerThan1000
Loadcases (2) .Loading.No = 3Нагрузки (2) .SelfWeight = Falseloadcases (2) .ToSolve = Trueloadcases (2) .ActionCategory = ImpposedCategoryA
'Передача загружений.iLoads.PareareModificationiLoads.SetLoadCasesiLoads.FinishModification
Категория ShowHLowerThan1000 используется для снега ниже высоты 1000 м над уровнем моря, а категория ImposedCategoryA используется для наложенной нагрузки категории A. Затем загружения могут быть переданы в RFEM. Однако для этого используется интерфейс ILoads вместо интерфейса IModelData, поскольку данные модели больше не используются; скорее, данные о нагрузке.
Создание сочетаний нагрузок и результатов
При создании сочетаний нагрузок или расчетных сочетаний, есть только несколько различий. Это связано с тем, что метод расчета и другие настройки можно применить только после создания сочетания нагрузок через соответствующий интерфейс. Определение выполняется как в RFEM. Для этого можно использовать идентификатор LC (Load Case). Различные десятичные разделители и прописные и строчные буквы не играют роли, и оба варианта допустимы:
'Создание сочетаний нагрузок.Dim loadcombs (0 To 0) As RFEM5.LoadCombination
loadcombs (0) .Loading.No = 1loadcombs (0) .ToSolve = Trueloadcombs (0) .Definition = «1,35 * lc1 + 1,5 * lc2 + 1,05 * lc3»
'Передача сочетаний нагрузок.iLoads.PareareModificationiLoads.SetLoadCombination loadcombsiLoads.FinishModification
'Создание результирующих комбинаций.Dim Резкомб (0 To 0) As RFEM5.ResultCombination
rescombs (0) .Loading.No = 1rescombs (0) .Definition = «1,35 * lc1 + 0,75 * lc2 + 1,5 * lc3»
'Передать комбинации результатов.iLoads.PareareModificationiLoads.SetResultCombination rescombsiLoads.FinishModification
Создание нагрузок
Как упоминалось выше, нагрузки теперь будут передаваться с помощью интерфейсов для загружений. В нашем примере в загружении 1 не создаются дополнительные нагрузки; в загружении 2 применяется распределенная нагрузка трапециевидной формы; а загружение 3 применяет постоянную линейную нагрузку и узловую нагрузку. Вот процедура для Нагрузки 2:
'Создать нагрузки.
'Нагрузка 2.
Dim iLoadCase As RFEM5.iLoadCaseSet iLoadCase = iLoads.GetLoadCase (2, AtNo)Поскольку мы знаем номер загружения, его можно использовать с AtNo при получении интерфейса:'Создание нагрузок на стержни.Dim memLoads () As RFEM5.MemberLoadReDim memLoads (0 To 0)
В этом случае размер массива определяется не во время инициализации, а после, потому что memLoads следует снова использовать для загружения 3. Преимущество этого заключается в том, что при повторном использовании ReDim содержимое будет сброшено до значений по умолчанию. В списке объектов можно выбрать элементы для загрузки, разделенные запятыми или соединенные дефисами. В дополнение к значениям нагрузки для начала нагрузки (Magnitude1) и конца нагрузки (Magnitude2), трапециевидная нагрузка требует указания расстояний для начала нагрузки (DistanceA) и конца (DistanceB). Свойство RelativeDistances определяет, будут ли использоваться абсолютные (False) данные в m или относительные (True) данные 0‑1:
memLoads (0) .No = 1memLoads (0) .ObjectList = «1»memLoads (0) .Distribution = TrapezoidalTypememLoads (0) .Magnitude1 = 6000 #memLoads (0) .Magnitude2 = 4000 #memLoads (0) .RelativeDistances = FalsememLoads (0) .DistanceA = 0,2memLoads (0) .DistanceB = 0,9
'Передача нагрузок на стержни.iLoadCase.PrepareModificationiLoadCase.SetMemberLoads memLoadsiLoadCase.FinishModificationПри передаче нагрузок необходимо правильно настроить интерфейс; в данном случае - интерфейс ILoadCase. Нагрузки в загружении 3 определяются следующим образом:'Создать узловые нагрузки.Dim nodalLoads (0 To 0) As NodalLoadnodalLoads (0) .No = 1nodalLoads (0) .nodeList = «2»nodalLoads (0) .Component.Force.X = -15000nodalLoads (0) .Component.Force.Y = 0nodalLoads (0) .Component.Force.Z = 0nodalLoads (0) .Component.Moment.X = 0nodalLoads (0) .Component.Moment.Y = 0nodalLoads (0) .Component.Moment.Z = 0
'Передача узловых нагрузок.iLoadCase.PrepareModificationiLoadCase.SetNodalLoads nodalLoadsiLoadCase.FinishModification
'Создание нагрузок на стержни.ReDim memLoads (0 To 0)memLoads (0) .No = 1memLoads (0) .ObjectList = «1»memLoads (0) .Distribution = UniformTypememLoads (0) .Magnitude1 = 5000 #
'Передача нагрузок на стержни.iLoadCase.PrepareModificationiLoadCase.SetMemberLoads memLoadsiLoadCase.FinishModificationПри закрытии программы процедура обработки ошибок завершается и лицензия разблокируется:e: If Err.Number <> 0 Then MsgBox Err.Description,, Err.Source
'COM -лицензия разблокирована, доступ к программе снова возможен.iModel.GetApplication.UnlockLicense
Резюме и перспективы
Процедуры, показанные в этой статье, основаны на двух предыдущих статьях. Как уже было сказано, конструкция у всех элементов схожа. Упомянутое исключение нелинейных выпусков стержней или узловых опор будет объяснено в следующей статье.