当前位置: 首页 > article >正文

Adams与Matlab通过FMI联合仿真

Adams与Matlab的联合仿真通过Adams/Controls中的接口功能已经很早就实现,具体是通过Adams安装路径下的支持文件,利用Adams/Controls中的导出功能,将Adams模型生成模型文件以及同Matlab的接口文件*.m,然后在Matlab中执行该*.m文件后,再执行相关命令将机械和控制融合为一个模型进行求解。该功能实现比较容易,操作比较简单,因此工程师普遍接受并展开了广泛的工程应用,而随着FMI技术的发展,有了更多借助FMU实现二者联合仿真的需求,为此,本文针对Adams与Matlab通过FMI协议接口进行联合仿真展开描述。

模型准备

为了展现本文的通用性,使用Adams安装路径下的模型,具体为:

将上述路径下的antenna.cmd和antenna.mdl拷贝到指定的工作路径下,二者分别对应Adams和Matlab/Simulink的模型。

联合仿真

基于FMI协议接口的联合仿真与二者传统的方式类似,需要在多体模型中将输入输出信号以状态变量的方式定义好并与模型建立关联,控制模型需要将多体模型融合,将输入与输出信号按照规定的逻辑关系进行关联。

Adams模型的操作

首先将描述点驱动的azimuth_motion_csd失效,因为,我们将使用Matlab传过来的驱动力矩替换它。

Adams与Matlab联合仿真,需要基于Adams状态变量描述输入和输出信号,本文提供的模型,输入和输出状态变量已经定义好,如下所示:

然后,利用Adams/Controls中的FMI功能将模型导出为相应的FMU模型。当然,我们对FMI协议的类型需要明确一下,Cosim和ModelExchange并且二者还会根据实际应用划分为Master和Slave等模式。我们这里以Adams的角度看,展示的是Cosim中的Slave的模型,因此,通过Adams将模型导出为FMU后,再将其导入Matlab中,在后者环境中提交仿真。另外,在生成FMU时,Adams支持FMI1.0和2.0两个版本,两者对编译环境的依赖有所区别,为了方便,这里使用了FMI2.0版本生成FMU。具体生成FMU如下所示:

上图中生成的Controls plant名称、前缀等保持默认不变,将输入输出信号进行选择,将Target Software进行选择FMU v2.0,其它保持不变。这里需要说明的是,在本对话框最下端有SmartFMU的选择项,这个功能是近期MSC软件所推出的一组功能,主要涉及Adams/Easy5/Elements三个产品在FMI方面的应用,可以只生成一次FMU,用户可以方便地对模型参数进行修改等,是一项非常实用的功能。生成的文件如下:

Matlab模型的操作

在Matlab中,首先打开控制模型antenna.mdl,之后将其中的橙色框删除,此时为控制模型的初始状态。然后,在Simulink库中找到FMU的功能元件,拖拽到Simulink控制模型中,最后,将所需的FMU模型通过路径进行指定和选择,并将输入输出信号进行关联。完成后的状态如下所示:

联合仿真提交计算与结果

本次仿真以Matlab为主进行任务提交,因此,需要借助Matlab环境完成,可以对其求解器参数进行设置,然后点击Run进行任务提交。

仿真完成后其输入输出的时域曲线可以通过双击Scope进行展现,具体如下所示:

上图中分别对应控制扭矩、角位移和角速度随时间的历程。

既然是联合仿真,那么同样可以在Adams中查看结果。为此,需要首先找到联合仿真的计算结果,然后导入Adams中,在其后处理环境中进行查看。

由于不同软件的设置不同,联合仿真结果存放的位置也是不同的,甚至有些软件基于FMI联合仿真后,其联合仿真的结果仅在联合仿真过程中存在临时文件中,一旦仿真终止,其结果也会删除。对于Adams与Matlab通过FMI的联合仿真,其结果存在于联合仿真的工作路径之下,会新形成一个文件夹slprj,然后在其中找对应FMU名称的文件夹,一直深入到resources文件中可以看到对应的结果文件,如下所示:

在Adams后处理中,可以看到如下结果,分别为角位移、扭矩和角速度等。

结论

通过上述内容,可以看到Adams与Matlab通过FMI接口可以方便地完成联合仿真应用流程,整个流程设置相似于传统生成M文件的方式,甚至还要更简洁。比如,传统生成M文件方式在Matlab中融合模型时,需要执行.m文件并录入adams_sys命令将橙色框调出两步,而实用FMI的话只需要将FMI框调出设置好指定的FMU路径一步即可。另外,如果使用MSC系列软件新功能SmartFMU的话会有更方便的工程应用。


http://www.kler.cn/a/317425.html

相关文章:

  • Serverless架构在实时数据处理中的应用
  • sealos部署K8s,安装docker时master节点突然NotReady
  • MySQL【三】
  • UVa 11855 Buzzwords
  • 安装SQL server中python和R
  • Webkit 滚动条样式属性
  • 我的AI工具箱Tauri版-FunAsr音频转文本
  • git 删除 git push 失败的记录
  • 阿里开源多模态大模型Ovis1.6,重塑出海电商AI格局
  • python自学笔记
  • 价格便宜又好用的云电脑挑选:ToDesk云电脑 vs 青椒云
  • oracle rac多个实例就相当于多个数据库系统程序
  • Python 管理 AWS ElastiCache 告警
  • 前端——盒子模型
  • 巨潮股票爬虫逆向
  • Qt_多元素控件
  • 机器学习(1)——线性回归、线性分类与梯度下降
  • CSS中的多种关系选择器
  • ASP .NET CORE 6 项目实现WebSocket通信实践
  • Linux环境下Redis三主三从集群搭建
  • Python+requests+pytest+allure自动化测试框架
  • 把vue页面中展示的UI和图表导出为pdf或者图片
  • linux/CentOS 开机启动程序
  • Linux-DHCP服务器搭建
  • PHP中error_reporting函数作用
  • Matlab|考虑柔性负荷的综合能源系统低碳经济优化调度