VBA中的COM接口| 2.2创建会员

技术文章

This article was translated by Google Translator View original text

关于COM接口的文章系列的第2.1部分描述了在一个例子中创建和修改元素。在第三部分中,这些核心单元再次用于创建节点支座,荷载组合和荷载组合以及结果组合。这样在第二部分中创建的模型将被扩展。因此, 第1部分和第2.1 部分中说明的要素不再描述。

图片 01 - System

获取已打开模型的接口

与上两篇文章不同的是,现在已加载在RFEM中打开的现有模型。在这个例子中打开了第二篇文章中的模型。首先检索打开的应用程序的界面:

' Interface with RFEM is retrieved.
Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application" )

然后启动错误处理程序并锁定许可证:

' Error Handler
On Error GoTo e

' COM license and program access is locked.
iApp.LockLicense

建议在锁定许可证之前启动处理程序,否则RFEM会在出现错误时保持锁定状态,并且只能通过任务管理器关闭。由于现在可以应用该界面,您可以获得该模型的界面:

' Get interface for the first model.
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的数字与释放相等。这里也使用SI单位,即N / m或N / rad:

' Get interface for model data.
Dim iModelData As RFEM5.iModelData
Set iModelData = iModel.GetModelData()

' Create nodal supports.
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

如果出现问题,可能是错误的数据类型造成的。如果需要double,则整数输入可能会导致错误。因此,必须在整数值之后添加一个哈希键,以便将其用作double值。

当然,节点支座必须再次转入编辑模式(PrepareModification / FinishModification):

' Transfer nodal supports.
iModelData.PrepareModification
iModelData.SetNodalSupports nodsups
iModelData.FinishModification

创建荷载工况

首先要定义荷载工况,这与在RFEM中完全相同。在编程时首先创建和传递荷载工况,然后才能使用荷载工况的界面传递荷载。首先我们创建荷载工况:

' Get interface for loads.
Dim iLoads As RFEM5.iLoads
Set iLoads = iModel.GetLoads

' Create load cases.
Dim loadcases(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
loadcases(2).SelfWeight = False
loadcases(2).ToSolve = True
loadcases(2).ActionCategory = ImposedCategoryA

' Transfer load cases.
iLoads.PrepareModification
iLoads.SetLoadCases loadcases
iLoads.FinishModification

在海拔高度1000米以下的雪中使用ShowHLowerThan1000类别,在类别A的荷载范围内使用ImposedCategoryA。然后,荷载工况可以转移到RFEM。然后使用接口ILoads而不是接口IModelData,因为不再关心模型数据,而是加载数据。

创建荷载和结果组合

创建荷载组合或者结果组合时,只有一些区别。计算方法和其它设置只能在通过相应的接口创建荷载组合后才能应用。该定义按照RFEM中的定义进行。为此您可以使用标识符LC(荷载工况)。不同的小数点分隔符和大写和小写字母不起任何作用,并且都被接受:

' Create load combinations.
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"

' Transfer load combinations.
iLoads.PrepareModification
iLoads.SetLoadCombinations loadcombs
iLoads.FinishModification

' Create result combinations.
Dim rescombs(0 To 0) As RFEM5.ResultCombination

rescombs(0).Loading.No = 1
rescombs(0).Definition = "1.35*lc1 + 0.75*lc2 + 1.5*lc3"

' Transfer result combinations.
iLoads.PrepareModification
iLoads.SetResultCombinations rescombs
iLoads.FinishModification

创建荷载

如上所述,现在使用荷载工况接口传递荷载。在我们的示例中,在荷载工况1中创建了任何附加荷载。在荷载工况2中,应用了梯形分布荷载。荷载工况3适用于一个恒定的线性荷载和一个节点荷载。这里是荷载工况2的步骤:

' Create loads.
' Load Case 2.
Dim iLoadCase As RFEM5.iLoadCase
Set iLoadCase = iLoads.GetLoadCase(2, AtNo)

由于我们知道荷载工况编号,因此在检索界面时可以和AtNo一起使用:

' Create member loads.
Dim memLoads() As RFEM5.MemberLoad
ReDim memLoads(0 To 0)

在这种情况下,数组不是在初始化时标注尺寸,而是之后,因为对于荷载工况3应该再次使用memLoads。这样可以在再次使用ReDim时将内容重置为默认值。在对象列表中,您可以选择要加载的成员,用逗号分隔或用连字符连接。除了荷载起始(Magnitude1)和荷载末端(Magnitude2)的荷载值外,梯形荷载还需要指定荷载起始距离(DistanceA)和终点(距离B)。 RelativeDistances(相对距离)属性决定是使用m或0(0)的相对(真)数据的绝对(假)数据:

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

' Transfer member loads.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification

在传递荷载时,必须设置正确的界面,在这种情况下是接口ILoadCase。荷载工况3的荷载定义如下:

' Create nodal loads.
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

' Transfer nodal loads.
iLoadCase.PrepareModification
iLoadCase.SetNodalLoads nodalLoads
iLoadCase.FinishModification

' Create member loads.
ReDim memLoads(0 To 0)
memLoads(0).No = 1
memLoads(0).ObjectList = "1"
memLoads(0).Distribution = UniformType
memLoads(0).Magnitude1 = 5000#

' Transfer member loads.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification

关闭程序时,错误处理程序例程就会完成,许可证也会解锁:

e: If Err.Number <> 0 Then MsgBox Err.Description, , Err.Source

' COM license is unlocked, the program access is possible again.
iModel.GetApplication.UnlockLicense

摘要和概述

本文中的步骤基于之前的两篇文章。如前所述,所有单元的结构相似。在下一篇文章中将介绍非线性杆件释放或节点支座的例外情况。

下载

更多信息

联系我们

Kontakt zu Dlubal

如果您有任何关于我们产品的问题或者建议,请联系我们的技术支持或者搜索我们的问题和解答 (FAQs)。

+49 9673 9203 0

(可要求接中文热线)

info@dlubal.com

RFEM 主程序 RFEM
RFEM 5.xx

主程序

结构设计与有限元­分析软件(FEA)可以用于建立 平面与空间结构模型,适用于由杆件、面、 板、墙、折板、膜、壳、实体以及接触单元等的建模与分析计算。

首个许可价格
3,540.00 USD
RFEM 其他附加模块
RF-COM 5.xx

附加模块

RFEM 可编程序的 COM 接口

首个许可价格
580.00 USD