3102x
001441
2017-05-23

VBA中的COM接口 | 3.创建工具

COM 接口系列文章的第 2.2 部分介绍了在杆件上创建和修改节点支座、荷载、荷载工况、荷载组合和结果组合。 第四部分介绍了如何创建单个工具。

基本

我们想要创建一个在程序中当前选择的节点上创建非线性节点支座的工具。 为此需要以下几个关键组成部分:

  • 获取当前选择的节点
  • 创建节点支座
  • 创建和分配非线性
  • 在程序中运行工具

现在说明这些问题。 这需要了解本系列文章前面的部分,这里不再赘述。 但是,可用的源代码中包含注释,这些注释记录了前面提到的元素,例如获取结构。

获取当前选中的节点

您可以通过COM接口使用已知的功能编辑所选单元,例如节点的IModelData.GetNodes。 但是,为了只返回所选择的元素,必须首先通过输入IModelData.EnableSelections切换到编辑当前选择。 如果EnableSelections设置为True,则IModelData.GetNodes仅返回选定的元素。 这是一个具体的例子:

'获取选中的节点。
iModDat.EnableSelections '仅与所选对象一起使用
暗淡 nodes() As RFEM5.Node
节点= iModDat.GetNodes
iModDat.EnableSelections '再次处理所有对象

获得选定节点后,EnableSelections会再次重置为false,因为这通常可能会导致错误。 由于节点支座需要一个节点列表作为定义的字符串,因此同时提供:

'创建节点列表。
暗淡 nodeList As 字串
暗淡 iAs长的
关于技术提问和解答: i = 0 收件人UBound(nodes,1)
nodeList = nodeList&nodes(i)。否& “,”
更多 i

创建节点支座

非线性或特殊情况下的图表是一个单独的单元。 仅当在系统中已经存在节点支座时,才可以将其分配给节点支座。 因此,有必要首先按照前面文章中介绍的原理创建节点支座:

'创建节点支座。
暗淡 nodSup As RFEM5.NodalSupport
nosSup.No = 100
nodSup.IsColumn =
nodSup.IsValid =
nodSup.nodeList = nodeList
nodSup.ReferenceSystem = GlobalSystemType

nodSup.RestraintConstantX = 0.01
nodSup.RestraintConstantY = 0.01
nodSup.RestraintConstantZ = 0.01

nodSup.SupportConstantX = -1
nodSup.SupportConstantY = -1
nodSup.SupportConstantZ = -1

'定义非线性。
nodSup.SupportNonlinearityZ = WorkingDiagramType

iModDat.PrepareModification
iModDat.SetNodalSupport nodSup
iModDat.FinishModification

正如在代码中看到的那样,WorkingDiagramType被指定为在全局z方向上的非线性。

创建和分配非线性支座

在为WorkingDiagramType非线性准备节点支座之后,现在应该创建:

'创建非线性。
暗淡 nldgrm As RFEM5。非线性关系图

nldgrm.ForceType = StiffnessDiagramForceType.NoneStiffnessForce
nldgrm.PositiveZoneType = DiagramAfterLastStepType.StopDiagramType
nldgrm.Symmetric =

'创建图表。
ReDim nldgrm.PositiveZone(3,1)
nldgrm.PositiveZone(0,0)= 0#
nldgrm.PositiveZone(0,1)= 0#

nldgrm.PositiveZone(1,0)= 0.01
nldgrm.PositiveZone(1,1)= 100

nldgrm.PositiveZone(2,0)= 0.03
nldgrm.PositiveZone(2,1)= 200

nldgrm.PositiveZone(3,0)= 0.05
nldgrm.PositiveZone(3,1)= 300

该图由二维数组组成。 第一维对应于数据集,第二维对应于数据集的元素。 在这种情况下,数据集中的第一个元素是位移,单位是m,第二个元素是力,单位是N。 因此,上面的示例创建了四个数据集,其中在该位置的图的第三点是30 mm和0.2 kN。 现在将该非线性分配给现有支座。 为此需要确定节点节点的范围以及非线性值:

'分配非线性。
暗淡 iNodSup As RFEM5.INodalSupport
iNodSup = iModDat.GetNodalSupport(100,ItemAt.AtNo)
暗淡 iNldiag As RFEM5.IN非线性图
iNldiag = iNodSup.GetNonlinearity(AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

在这种情况下,非线性是沿着Z轴,因此在获得非线性时必须选择“ AroundAxisZ”。 非线性在已知的修改块中分配。

在程序中运行工具

外部程序可以集成到RFEM中。 为此必须在程序路径中修改RFEM.ini。 与在C#和VB中创建可执行文件的情况不同,在VBA中使用Excel可以实现。 在打开一个要打开的文件时可以通过一个参数给Excel赋值。 这在命令行中显示如下(Excel文件位于C:\ temp下,并且Excel安装为32位版本):
“ C:\ Program Files(x86)\ Microsoft Office \ Office15 \ EXCEL.EXE” C:\ temp \ table1.xlsm

因此,Excel将打开所需的文件。 为了确保RFEM仅打开外部程序而没有其他参数(例如本例中EXCEL.EXE后面的文件名),必须首先创建Windows批处理文件。 Windows将该简单的文本文件扩展名“ .bat”作为可执行EXE文件进行处理。 因此,您可以使用编辑器创建一个TXT文件,其中包含新的文件扩展名“ .bat”。 显示文件扩展名的选项必须首先在Windows资源管理器中设置。 因此,该批处理文件(以下称为EXCEL-Tool.bat)必须包含:
“ C:\ Program Files(x86)\ Microsoft Office \ Office15 \ EXCEL.EXE” C:\ temp \ table1.xlsm
这与在命令行中输入的命令相对应。

创建此可执行文件后,可以将其作为外部工具输入到RFEM.ini中。 RFEM.ini包含在RFEM的程序路径中(RFEM 5.07 64位默认路径: C:\ Program Files \ Dlubal \ RFEM 5.07)。 在那里,您应该添加以下输入:

ModuleName2 = EXCEL-Tool
ModuleExeName2 =“ c:\ temp \ EXCEL-Tool.bat”
ModuleDescription2 =非线性杆件端部释放

当然,批处理文件EXCEL-Tool.bat和宏table1.xlsm也必须存储在C:/temp/下。

为了自动运行宏,打开文件时应在Excel自动执行的子程序中启动该子程序。 该子程序称为Workbook_Open,必须存储在Workbook中。

现在我们需要在成功执行后关闭Excel。 如果出现错误或者RFEM没有打开,您可以编辑该宏。 为此,需要区分大小写。 完整的草稿如下:

私有 Workbook_Open()

'错误处理程序运行RFEM。
出现错误时转到 e

'检索与RFEM的接口。
暗淡 iApp AsRFEM5.Application
iApp = GetObject(, “ RFEM5.Application”)

e: '如果出现错误,则显示“ RFEM not open”
If 错误编号<> 0 然后
消息框 “ RFEM未打开”,,错误源
   退出
末端 If

'错误处理程序。
出现错误时转到 [F12]

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

'获取激活模型的界面。
暗淡 iModel As RFEM5.model
If iApp.GetModelCount> 0 然后
设置iModel = iApp.GetActiveModel
Else
'如果没有足够的模型显示错误。
Err.Raise vbObjectError, “ LoadModel()”,“ iApp.GetModelCount <1”
End If

'放置您自己的源代码。

f: '截取源代码错误。
如果Err.Number <> 0那么
MsgBox Err.Description,,Err.Source
' COM licence is unlocked, programme access possible again
iModel.GetApplication.UnlockLicense
'工具允许在出现错误时打开Excel。
   出口子
End If

' COM licence is unlocked, programme access possible again
iModel.GetApplication.UnlockLicense
'工具将在成功应用后关闭Excel。
比例。退出

结束子

目前位于“您自己的源代码的位置”下的子程序的引用仅丢失了。 完整的源代码可以在下面的链接中找到。

小结

本文介绍的如何在节点支座上进行非线性计算,是如何使用外部节点支座的? 使用可执行文件(通常使用VisualStudio和VB或C#创建)时,集成更加简单。 因此,已经描述了使用Excel进行复杂处理的过程。


作者

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

链接
下载