770x
004622
2020-08-12

问题

如何通过 DYNAM Pro 中的 COM 接口输入或读出反应谱?


回复:

RFEM 和 RSTAB 中通过 COM 接口可以读取或创建用户自定义反应谱。

为了进行转换,需要通过 RFEM 模型 (IModel) 的接口获得模块的接口 (IDynamModule)。 然后使用该接口创建模块案例(IModuleCase)。 IModuleCase 中包含 GetRSParams 函数,该函数可用于读取反应谱的参数。 另一方面,SetRSParams 函数可以写入新数据。 以下示例代码对此进行了说明:

Dim iApp As RFEM5.Application
Dim iMod As RFEM5.model
Set iApp = GetObject(, "RFEM5.Application")

将 rs_no 变暗为整数
rs_no = 1

出错时转到 e

' 检查 RS-COM 许可证并锁定应用程序以供 COM 使用。
iApp.LockLicense

设置 iMod = iApp.GetActiveModel

' 获取模块接口
Dim iDyn As IDynamModule
Set iDyn = iMod.GetModule("DynamPro")

' 获取模块案例接口
将 iDynCase 调暗为 IModuleCase
设置 iDynCase = iDyn.GetData
    
' 设置反应谱参数
将 rspara 调暗为 RSParam
rspara = iDynCase.GetRSParams(rs_no)
    
将 rs_spec(0 到 10) 调暗为 RSTableRow
    
将索引调暗为整数
指数 = 0
rs_spec(index).s = 0.6
rs_spec(index).T = 0
    
指数 = 1
rs_spec(index).s = 1.33
rs_spec(index).T = 0.153
    
指数 = 2
rs_spec(index).s = 1.33
rs_spec(index).T = 0.4
    
指数 = 3
rs_spec(index).s = 1.204
rs_spec(index).T = 0.443
    
指数 = 4
rs_spec(index).s = 1.07
rs_spec(index).T = 0.5
    
指数 = 5
rs_spec(index).s = 0.7
rs_spec(index).T = 0.761
    
指数 = 6
rs_spec(index).s = 0.508
rs_spec(index).T = 1.051
    
指数 = 7
rs_spec(index).s = 0.367
rs_spec(index).T = 1.453
    
指数 = 8
rs_spec(index).s = 0.267
rs_spec(index).T = 1.995
    
指数 = 9
rs_spec(index).s = 0.16
rs_spec(index).T = 2.584
    
指数 = 10
rs_spec(index).s = 0.16
rs_spec(index).T = 5
    

rspara.UserDefinedTable = rs_spec
rspara.Comment = "测试 rs"
rspara.DefinitionType = ResponseSpectraType.UserDefinedRS
rspara.description = "通过 COM 测试 rs"
rspara.编号 = rs_no
    
iDynCase.SetRSParams rs_no, rspara
    
e: 如果 Err.Number <> 0 那么 MsgBox Err.description, , Err.Source
    
iMod.GetApplication.UnlockLicense
设置 iMod = 无
设置 iApp = 无

反应谱是根据 EN 1998‑1:2010 创建的,共有 11 个点。 首先,创建一个包含 11 个元素的 RSTableRow 类型的数组,并填充数据,然后将其保存在 UserDefinedTable 属性下。 使用 SetRSParams 命令进行传递。