跳到主要内容

SimStudio IES SDK 快速入门

快速入门

本例以通过 Python 脚本获取SimStudio 平台三联供算例计算结果为例,帮助用户快速入门综合能源 CloudPSS SDK 的使用。

算例创建和使用

首先,在 CloudPSS Simstudio 中打开 三联供算例,该算例也可以通过模板算例进行创建。

三联供算例
三联供算例

点击运行标签页,在计算方案中选择默认的综合能源系统仿真模拟方案1

选择综合能源系统仿真模拟方案
选择综合能源系统仿真模拟方案

点击启动任务运行仿真,在结果页面会生成综合能源仿真计算结果。

综合能源仿真计算结果1 综合能源仿真计算结果2

提示

若要批量处理综合能源的计算结果,比如将所有负荷的用能量相加来计算分时总负荷,常规的方法是在计算结果列表中找到所有的负荷元件,然后手动提取他们的负荷数据再进行相加,但通常综合能源系统中元件数量众多,对应的结果图表数量也较多,这样处理的效率十分低下。借助 CloudPSS SDK,利用 Python 脚本获取结果数据,然后进行批量处理,可快速完成上述功能。

示例代码

配置好 Python 开发环境,这里主要用到了第三方绘图库 DashJupyterDash,用户可以使用 pip install dashpip install jupyter-dash 指令进行安装。接下来执行以下脚本:

import time
import cloudpss
import os
import sys
from jupyter_dash import JupyterDash
from dash.dependencies import Input, Output
from dash import html,dcc
from functools import reduce

app =JupyterDash(__name__)

def init_html():
tabs=[]
for val in tabData:
tabs.append(dcc.Tab(label=val['name'], value=val['id']),)
# tabs.append(dcc.Tab(label='Tab Two', value='tab-2-example-graph'))
app.layout = html.Div([
html.H1('Total Thermal Load'),
dcc.Tabs(id="tabs-example-graph", value=tabData[0]['id'], children=tabs),
html.Div(id='tabs-content-example-graph')
])

@app.callback(Output('tabs-content-example-graph', 'children'),
Input('tabs-example-graph', 'value'))
def render_content(tab):
for data in tabData:
if data["id"]==tab:
return html.Div([
dcc.Graph(
id=data["id"],
figure={
'data': [{
'x': data['x'],
'y': data['y'],
}]
}
)
])

if __name__ == '__main__':
cloudpss.setToken('{token}')

### 获取指定 rid 的项目
project = cloudpss.Model.fetch('model/CloudPSS/CHPCase')

### 通过采暖制冷负荷的rid获取所有的采暖制冷负荷元件信息
loadComponents = project.getComponentsByRid('model/CloudPSS/IES-HeatColdLoad')

try:
# 运行仿真
runner = project.run()
while not runner.status():
print('running', flush=True)
logs = runner.result.getLogs()
for log in logs:
print(log)
time.sleep(1)

'''
getPlotData获取key对应的采暖负荷元件的时序负荷结果,
将每个采暖制冷负荷元件的时序负荷结果组成List
'''
loadList = [
runner.result.getPlotData('/' + key, 'Power(kW)', 'Thermal Load')['Thermal Load']['y']
for key in loadComponents.keys()
]
timeSerial = runner.result.getPlotData('/' + list(loadComponents.keys())[0], 'Power(kW)', 'Thermal Load')['Thermal Load']['x']

# 分别统计分时热负荷和分时冷负荷,热负荷在LoadList中的数值为正,冷负荷为负
totalHeatLoad = [0.0]*len(loadList [0])
totalCoolLoad = [0.0]*len(loadList [0])
totalHeatLoad = reduce(lambda x, y:
[x[i] + (y[i] if y[i] > 0 else 0) for i in range(len(x))],
loadList,
totalHeatLoad)
totalCoolLoad = reduce(lambda x, y:
[x[i] + (-y[i] if y[i] < 0 else 0) for i in range(len(x))],
loadList,
totalCoolLoad)

tabData =[]
tabData.append({"name":"HeatLoad","x":timeSerial,"y":totalHeatLoad,"id":"HeatLoad"})
tabData.append({"name":"CoolLoad","x":timeSerial,"y":totalCoolLoad,"id":"CoolLoad"})
init_html()
app.run_server(mode='inline')
except Exception as e:
print('error', e)

上述代码运行后,将在 python 终端输出如下图的结果曲线。 SDK代码运行结果1 SDK代码运行结果2

获取结果

综合能源仿真计算结果均保存在 runner.result 中。用户可查看 result 类的 接口说明文档 获取更多帮助。

print(runner.result.getPlotData('/component_ies_heat_cold_load_8', 'Power(kW)', 'Thermal Load'))
print(runner.result.getPlotData('/component_ies_heat_cold_load_8', 'Power(kW)', 'Thermal Load', 0))

通过上述两条语句可分别获得元件 component_ies_heat_cold_load_8 整个仿真周期内的负荷时序结果和首个时刻的负荷结果。返回结果以字典对象的格式进行存储,如下:

 {
'Thermal Load': {
'x': ['2021-01-01 01:00:00'],
'y': [439.3155554349029]
}
}

如果想整个取出目标 key 的数值结果,可直接访问该 key 下的 y 成员。例如:

loadValue = runner.result.getPlotData('/component_ies_heat_cold_load_8', 'Power(kW)', 'Thermal Load')['Thermal Load']['y']
print(loadValue)

此时输出的数值即为此算例的 component_ies_heat_cold_load_8 采暖制冷负荷(冷库负荷)的时序结果。