Simcenter Amesim提供了一套完整的脚本函数,可以用更高级的语言(如Python、MATLAB和Visual Basic for Applications)编写简短的程序,这些语言可以自动与模型交互。 这些脚本功能设计用于参数和仿真模式下的自动化任务,例如设置或获取参数值,运行时间模拟或线性分析,以及对结果变量进行后处理。
这些任务可以组合起来构建小型或大型的应用程序,例如:
- 自动运行批处理
- 执行复杂的自动化预处理:参数检查和相关参数计算
- 做参数研究:简单扫描,蒙特卡罗分析,灵敏度分析…
- 执行复杂的后处理:创建2D或3D图,动画,执行信号分析,如FFT,光谱估计…
- 在外部应用程序中集成Simcenter Amesim模型,以用户定义的格式读写文件,连接数据库,通过网络通信等
今天通过一个简单的案例展示用python运行模型并绘制结果曲线。
首先我们安装下图在草绘模式搭建模型
在子模型选择界面我们选择“Premier submodel”即可
在参数设置界面我们需要调整两处参数:
1.我们将函数模块FX00的表达式设置为:abs(x)
2.将旋转负载的初始转速设置为100rev/min
在仿真前我们通过现有参数分析一下该模型,可以看到该模型的机械部分是一个带有初速度的旋转负载连接了一个可变刚度的旋转弹簧,同时设置了一个角度传感器将角度的绝对值作为弹簧刚度输入弹簧。
可以预想的是,该模型在开始计算时,负载会以我们设置的100rev/min的速度开始旋转,随着旋转角度的增大,弹簧刚度会越来越大,使负载的转速不断减小直至反向旋转,就这样不断重复,每次的旋转角度越来越小直至停止。
分析后我们开始计算
首先我们进入计算模式, 在菜单中选择File > Write files for simulation写入计算参数,注意:第一次运行模型和每次修改参数后都需要进行一次该操作。
接着我们使用以下代码编写python脚本,文件名随意
import os
import pylab
import scipy
import amesim
# Create a 1D map for SIGFXA01-1
os.chdir(r'd:\amesim_python')
theta = [0, 10, 10.1, 180]
K = [100, 100, 1000, 1000]
K = list(scipy.pi/180.0*scipy.array(K))
amesim.fx2ame(theta,K,'varspringrate.data')
amesim.ameputp('scrdemo','SIGFXA01 instance 1 name of ASCII file','varspringrate.data')
# Running a the simulation and getting results
sim_opt = amesim.amegetsimopt('scrdemo')
sim_opt.startTime = 0.0
sim_opt.finalTime = 1.0
sim_opt.printInterval = 0.01
amesim.amerunsingle('scrdemo', sim_opt)
# Post-processing the results
Results, Varnames = amesim.ameloadvarst('scrdemo', {'MECRL0A_1 shaft angle at port 2 [degree]'})
print('Angle at time {:f} s is {:f} deg'.format(Results[0][-1], Results[1][-1]))
pylab.plot(Results[0], Results[1],'r')
pylab.show()
注意,该脚本使用了scipy和matplotlib库,请提前配置
将代码文件和amesim文件保存在同一文件夹,注意保存路径需要与代码第7行保持一致。本文案例保存在‘d:\amesim_python’文件夹。
保持amesim开启,接着我们就可以在python终端上运行脚本了,可以在windows命令行中运行,也可以在ide中运行,这里使用了pycharm运行。注意要将路径修改为案例及脚本的保存路径(通过“cd+路径”命令)
最后我们键入命令“AMEPython scrdemo.py”即可运行,其中scrdemo.py为python脚本的文件名,这里将amesim文件同样命名为“scrdemo.ame”
所以运行命令为“AMEPython + 文件名”
我们在amesim中运行模型,可以看到二者结果完全一致