Sysplorer通过Python api如何实现开环模型批量仿真
技术分享
发布于 2025-08-06 16:42:09
查看 4过去300天
使用如下代码:
# 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系统建模仿真环境