1783x
001408
2017-03-02

VBA中的COM接口 | 2.2创建杆件

In Teil 2.1 der Beiträge dieser Serie wurde am Beispiel eines Stabes das Anlegen und Verändern von Elementen gezeigt. Im dritten Teil werden diese Kernelemente wiederverwendet und damit Kontenlager, Lasten, Lastfälle, Lastkombinationen und Ergebniskombinationen angelegt. Das im zweiten Beitrag erstellte Modell wird dabei erweitert. Die Elemente aus Teil 1 und 2.1 werden daher nicht erneut angesprochen.


暗淡 iApp As RFEM5.Application
设置 iApp = GetObject(, “ RFEM5.Application”)
然后,启动错误处理程序并锁定许可证:
'错误处理程序
出现错误时转到 e

'COM许可证和程序访问被锁定。
iApp.LockLicense

我们建议您在锁定许可证之前启动处理器。否则RFEM会在出错时保持锁定,只能通过任务管理器关闭。 由于现在可以使用该接口了,因此您可以获取模型的接口:

'获取第一个模型的界面。
暗淡 iModel As RFEM5.model
If 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的数字与的释放值通过弹簧常数进行平衡。 这里也使用SI单位。 N/m或N/rad:

'获取模型数据接口。
暗淡 iModelData As RFEM5.iModelData
设置 iModelData = iModel.GetModelData()

'创建节点支座。
暗淡 nodsups(0 收件人 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,则整数项可能会导致错误。 因此,必须在整数值之后添加一个哈希键,以便将其用作双精度值。

当然,节点支座必须重新设置为编辑模式(PrepareModification/FinishModification):

'转移节点支座。
iModelData.PrepareModification
iModelData.SetNodalSupports点头
iModelData.FinishModification

创建荷载工况

为了创建荷载,首先必须像RFEM中一样定义荷载工况。 在编程时首先创建并传递荷载工况,然后只有通过荷载工况的接口才能进行荷载传递。 首先,我们创建荷载工况:

'获取荷载接口。
暗淡 荷载 As RFEM5.i荷载
设置 iLoads = iModel.GetLoads

'创建荷载工况。
暗淡 荷载工况(0 收件人 2) As RFEM5.LoadCase

荷载工况(0).Loading.No = 1
荷载工况(0).SelfWeight =
荷载工况(0).ToSolve =
荷载工况(0).SelfWeightFactor.X = 0
荷载工况(0).SelfWeightFactor.Y = 0
荷载工况(0).SelfWeightFactor.Z = 1
荷载工况(0).ActionCategory =永久

将创建三个荷载工况: 自重,雪和施加的荷载。 在COM编程中所有标识符都是英文的。 因此,对于自重荷载工况,将“永久”用于ActionCategory。 对于SelfWeightFactor属性,可以设置方向和自重值。 但是,仅当self-weight属性设置为True时才适用。 此外,ToSolve还必须设置为True,以便在计算中包括荷载工况并为荷载工况分配一个编号(.Loading.No)。 由于没有自重,所以另外两个荷载工况的定义非常简单:

荷载工况(1).Loading.No = 2
荷载工况(1).SelfWeight =
荷载工况(1).ToSolve =
荷载工况(1).ActionCategory = ShowHowerThan1000

荷载工况(2).Loading.No = 3
荷载工况(2).SelfWeight =
荷载工况(2).ToSolve =
loadcases(2).ActionCategory = ImposedCategoryA

'传递荷载工况。
iLoads.PrepareModification
iLoads.SetLoadCases荷载工况
iLoads.FinishModification

类别ShowHLowerThan1000适用于海拔高度1000 m以下的积雪,类别类别I的活荷载使用标准ImpulatingCategoryA类别。 然后将荷载工况传递给RFEM。 因为不再涉及模型数据,所以使用ILoads接口代替IModelData接口。而是荷载数据。

创建荷载和结果组合

创建荷载组合或结果组合时,只存在少量差异。 原因是计算方法和其他设置只能在通过相应的界面创建荷载组合后才能应用。 定义与RFEM中相同。为此可以使用标识符LC(荷载工况)。 不同的十进制分隔符和大小写字母不起作用,并且两者都可以被接受:

'创建荷载组合。
暗淡 荷载组合(0 收件人 0) As RFEM5.LoadCombination

loadcombs(0).Loading.No = 1
loadcombs(0).ToSolve =
loadcombs(0)。定义= “ 1.35 * lc1 + 1.5 * lc2 + 1.05 * lc3”

'传递荷载组合。
iLoads.PrepareModification
iLoads.SetLoadCombinations荷载组合
iLoads.FinishModification

'创建结果组合。
暗淡 rescombs(0 收件人 0) As RFEM5.ResultCombination

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

'传输结果组合。
iLoads.PrepareModification
iLoads.SetResultCombinations重新组合
iLoads.FinishModification

创建荷载

如上所述,现在可以通过荷载工况接口传输荷载。 在我们的示例中,荷载工况1中没有创建其他荷载;在荷载工况2中应用梯形均布荷载。在荷载工况3中分别施加了恒定的线荷载和节点荷载。 这是荷载工况2的步骤:

'创建荷载。
荷载工况2。
暗淡 iLoadCase As RFEM5.iLoadCase

设置 iLoadCase = iLoads.GetLoadCase(2,AtNo)
由于我们知道了荷载工况编号,因此在检索接口时可以将其与AtNo一起使用:
'创建杆件荷载。
暗淡 memLoads() As RFEM5.MemberLoad
ReDim memLoads(0 收件人 0)

在这种情况下,数组的大小不是在初始化时确定的,而是在之后的大小,因为在荷载工况3中应该再次使用memLoads。 这样做的好处是,再次使用ReDim时,内容会恢复为默认值。 在对象列表下可以选择用逗号分隔或连字符连接的杆件。 除了荷载起点(Magnitude1)和荷载终点(Magnitude2)的荷载值外,梯形荷载还规定了荷载起点(DistanceA)和终点(DistanceB)的距离。 RelativeDistances属性确定使用m的绝对(False)数据还是0-1的相对(True)数据:

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的荷载定义如下:
'创建节点荷载。
暗淡 节点荷载(0 收件人 0) As 节点荷载
nodalLoads(0).No = 1
nodalLoads(0).nodeList = “ 2”
节点荷载(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节点荷载
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: If 错误编号<> 0 然后 MsgBox Err.Description,,Err.Source

'COM许可证未锁定,因此可以再次访问程序。
iModel.GetApplication.UnlockLicense

总结和展望

本文中显示的过程基于之前的两篇文章。 如前所述,所有单元的结构都是相似的。 上述提到的非线性杆件释放或节点支座的例外情况将在下一篇文章中进行解释。


作者

Günthel 先生为Dlubal 软件客户提供技术支持。

链接
下载