跳到主要内容

拓扑信息获取及解析

功能介绍

使用 EMTLab SDK 获取仿真模型项目的 JSON 拓扑文件,并进行解析。

使用说明

用到的 API

模型类:Class: Model

  • 实例方法:
    方法功能
    model.revision获取当前版本项目的版本信息
    model.fetchTopology(implementType, config, maximumDepth=None)获取项目拓扑实例

拓扑类:Class: ModelTopology

  • 静态方法:

    方法功能
    ModelTopology.fetch(hash, implementType, config, maximumDepth=None)通过项目 hash,获取项目拓扑实例
    ModelTopology.dump(topology, filePath, indent=None)保存拓扑到本地文件(JSON 格式)
  • 实例方法:

    方法功能
    modelTopology.components拓扑解析,摊平后的拓扑元件,参数和引脚不再保留表达式的形式,如果元件为拓扑实现,并有读取权限时将被展开
    modelTopology.mappings拓扑分析后的一些映射数据

版本类:Class: ModelRevision

  • 实例方法:
    方法功能
    modelRevision.fetchTopology(implementType, config, maximumDepth=None)通过项目 hash,获取项目拓扑实例

调用方式

获取项目拓扑实例

获取项目拓扑实例的方式有以下三种

  1. 通过模型类获取
  • 使用model.fetch方法,获取项目实例
  • 使用model.fetchTopology()方法,获取项目拓扑实例
  1. 通过拓扑类获取
  • 使用model.fetch方法,获取项目实例
  • 使用model.revision.hash方法,获取当前版本项目的 hash
  • 使用ModelTopology.fetch(hash, implementType, config, maximumDepth=None)获取项目拓扑实例
  1. 通过版本类获取
  • 使用model.fetch方法,获取项目实例
  • 使用model.revision方法,获取项目的版本信息
  • 使用modelRevision.fetchTopology(implementType, config, maximumDepth)获取项目拓扑实例

拓扑实例解析

  • 使用modelTopology.components方法获取项目摊平后的拓扑元件的参数和引脚信息
  • 使用modelTopology.mappings方法获取项目虚拟输入和虚拟输出引脚信息

拓扑 JSON 文件获取

  • 使用ModelTopology.dump(topology, filePath, indent=None)将拓扑实例保存为本地 JSON 文件

案例介绍

代码解析

IEEE-3机9节点项目为例,通过三个完整的案例来介绍如何基于上述 API 编写 Python 脚本获取项目拓扑实例并进行解析。

  • 使用model.fetch方法,获取项目实例
获取IEEE 3机9节点项目实例

import os
import cloudpss

if __name__ == '__main__':
os.environ['CLOUDPSS_API_URL'] = 'http://orange.local.cloudpss.net/'
cloudpss.setToken('{token}')
# 获取IEEE 3机9节点项目实例
model = cloudpss.Model.fetch('model/Maxwell/IEEE')

  • 使用model.fetchTopology()方法,获取项目拓扑实例
    # 获取电磁暂态实现方式下,参数方案为1,仅展开 1 层嵌套模块
modelTopology = model.fetchTopology(implementType='emtp',config=model.configs[0], maximumDepth=1)
  • 拓扑实例解析
    # 获取项目摊平后的拓扑元件的参数和引脚信息
components = modelTopology.components
print(components)
# 获取项目虚拟输入和虚拟输出引脚信息
mappings = modelTopology.mappings
print(mappings)
  • 拓扑 JSON 文件获取
    # 使用 ModelTopology.dump 将拓扑实例保存为本地 JSON 文件
filePath = '{0}.json'.format(model.name)
cloudpss.ModelTopology.dump(modelTopology, filePath, indent=2)

结果展示

拓扑 JSON 文件包括components元件字典以及mappings虚拟引脚字典,如下图所示:

拓扑 JSON 文件
拓扑 JSON 文件

components获取到的是项目摊平后的所有元件字典,字典的 key 是每个元件的 key,value 是元件的参数和引脚信息字典,value 字典的数据结构如下:

keyvalue含义
label'NC-6'元件的标签
args{'Name':''}元件的参数卡字典
pins{'0':'1'}元件每个引脚的编号字典,可通过搜索同名引脚,找到与该元件有连接关系的所有元件
definition'model/CloudPSS/ElectricalLable'元件的定义与rid一致
context{}元件的上下文信息
props{'enabled': True}元件是否显示
rid'model/CloudPSS/ElectricalLable'元件的rid与定义一致
status'type end'元件的状态

mappings获取到的项目虚拟输入和虚拟输出引脚字典数据结构如下:

keyvalue含义
in{'@.@L2N': 51, '@.@S2M': 63}虚拟输入引脚的名称及引脚编号
args{'Name':''}元件的参数卡字典
pins{'0':'1'}元件的引脚卡字典
definition'model/CloudPSS/ElectricalLable'元件的定义与rid一致
context{}元件的上下文信息
props{'enabled': True}元件是否显示
rid'model/CloudPSS/ElectricalLable'元件的rid与定义一致
status'type end'元件的状态

调试技巧

若拓扑实例获取失败,请检查 API 接口是否正确调用,特别注意参数的顺序和必填项,可参考案例的完整代码。

常见问题

封装的模块内部的元件信息能获取吗?

如果封装的模块为拓扑实现,并有读取权限时可以获取。

最大递归深度maximumDepth参数默认多少?可以将多重嵌套的模块内部元件信息全部获取吗?
  • maximumDepth参数默认为 None, 此时将项目中有读取权限的所有模块全部打开,摊平内部元件。
  • 也可以配置maximumDepth参数,例如maximumDepth = 2,仅展开 2 层,嵌套层数超过 2 的元件无论是否有读写权限都不会被打开。

完整代码

import os
import cloudpss
if __name__ == '__main__':
os.environ['CLOUDPSS_API_URL'] = 'http://orange.local.cloudpss.net/'
cloudpss.setToken('{token}')
# 获取IEEE 3机9节点项目实例
model = cloudpss.Model.fetch('model/Maxwell/IEEE')
# 获取电磁暂态实现方式下,参数方案为1,仅展开 1 层嵌套模块
modelTopology = model.fetchTopology(implementType='emtp',config=model.configs[0], maximumDepth=1)
# 获取项目摊平后的拓扑元件的参数和引脚信息
components = modelTopology.components
print(components)
# 获取项目虚拟输入和虚拟输出引脚信息
mappings = modelTopology.mappings
print(mappings)
# 使用 ModelTopology.dump 将拓扑实例保存为本地 JSON 文件
filePath = '{0}.json'.format(model.name)
cloudpss.ModelTopology.dump(modelTopology, filePath, indent=2)