516x
001711
2020-08-12

[ZH] 常见问题 004622 | 如何通过 DYNAM 中的 COM 接口输入或读出反应谱...

问题:
如何通过 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 命令进行传递。