专栏
标签
Sysplorer 通过Python api 如何实现开环模型批量仿真
技术分享
发布于 2025-07-22 15:01:51
查看 2过去315天

可使用如下代码

# SinCosEncoder 是一个控制模块,我们可以借助TimeTable 模块创建一个时序的输入传给SinCosEncoder,进行仿真
# 以下是示例代码

import mworks.sysplorer as eng

def GetTable(time_vec:list, source_vec:list):

#根据时间序列和输入向量的值,拼接传给Modelica的输入参数字符串

res = '{'
    for i in range(len(time_vec)):
        if i != 0:
            res += ', '
        time_i = time_vec[i]
        if len(source_vec) > i:
            src_i = source_vec[i]
        else:
            src_i = 0
        res += '{' + str(time_i) + ', ' + str(src_i) + '}'
    res += '}'
    return res

1.环境配置,自定义工作目录

work_path = r'C:\Users\TR\Documents\Syslab\SysplorerPythonAPI2024a'
model_name = 'TestSystem'
model_file = model_name + '.mo'
control_moel_file = 'SinCosEncoder.mo' #将附带的这个控制模型放在上面设置的 work_path 中
result_csv = work_path + '/' + model_name + '.csv'

eng.StartSysplorer('-gui')
eng.ChangeDirectory(work_path)

2.加载Modelica库,开环模型 SinCosEncoder

eng.LoadLibrary('Modelica')
eng.OpenModelFile(work_path + '/' + control_moel_file)

3.新建模型 TestSystem,这就是用来仿真的模型。将 SinCosEncoder 模块添加到 TestSystem

has_model = eng.OpenModelFile(work_path + '/' +model_file)
if not has_model:
    eng.NewModel(model_name, saveInOneFile=True)
    eng.OpenModel(model_name)
    eng.AddComponent('SinCosEncoder', model_name, 'sys_control', 50, 0)

4.将时序输入模块添加到 TestSystem

eng.AddComponent('Modelica.Blocks.Sources.TimeTable', model_name, 'vector_source', -50, 0)
    eng.ConnectPort(model_name, 'vector_source.y', 'sys_control.u')

5.添加时序输入(向量是线性变化的,为了形成突变的信号,在0.09, 0.1 这样的两个连续时间步插入数据,形成突变效果。仿真时要设置步长为0.01)

time_vec = [0, 0.09, 0.1,  1]
source_vec = [3, 3, 6, 6]
table_str = GetTable(time_vec, source_vec)
eng.SetParamValue('vector_source.table', table_str)

6.仿真并导出数据

eng.TranslateModel(model_name)
eng.SetInitialValue('vector_source.k', 20)
eng.SimulateModel(model_name, stopTime=1.0, interval=0.01)
eng.Plot(['sys_control.y'])
res = eng.GetVarValues('sys_control.y')
eng.ExportResult(result_csv, 'csv', ['sys_control.y'])

7.保存模型

if not has_model:
    eng.SaveModel(model_name)

# eng.Exit()
所属专栏:Sysplorer基础平台
产品信息:Sysplorer系统建模仿真环境
系统建模

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天