机械系统动力学自动分析联合仿真的高效通用方法.docx

上传人:b****4 文档编号:24923178 上传时间:2023-06-02 格式:DOCX 页数:12 大小:647.74KB
下载 相关 举报
机械系统动力学自动分析联合仿真的高效通用方法.docx_第1页
第1页 / 共12页
机械系统动力学自动分析联合仿真的高效通用方法.docx_第2页
第2页 / 共12页
机械系统动力学自动分析联合仿真的高效通用方法.docx_第3页
第3页 / 共12页
机械系统动力学自动分析联合仿真的高效通用方法.docx_第4页
第4页 / 共12页
机械系统动力学自动分析联合仿真的高效通用方法.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

机械系统动力学自动分析联合仿真的高效通用方法.docx

《机械系统动力学自动分析联合仿真的高效通用方法.docx》由会员分享,可在线阅读,更多相关《机械系统动力学自动分析联合仿真的高效通用方法.docx(12页珍藏版)》请在冰豆网上搜索。

机械系统动力学自动分析联合仿真的高效通用方法.docx

机械系统动力学自动分析联合仿真的高效通用方法

机械系统动力学自动分析联合仿真的高效通用方法

安德鲁·S·艾略特博士

机械动力学有限股份有限公司

6530东弗吉尼亚街

梅萨,亚利桑那州,美国,85215-0736

480.985.1557aelli@

摘要:

本文介绍了一种将任何外在的计算机编码和机械系统动力学自动分析连接起来的高效通用的方法,这样两个程序可以在系统模拟中连接起来,从而两个程序都能以接近最佳单机速度的速度运行。

该方法允许外部编码按照设计在离散时间中运行,并且可能有多重和(或者)可变的采样率。

有两个问题可能利用了这一方法,其分别为气动伺服弹性响应和半实物之类的交互仿真更改。

在前者中,通过有限差分计算流体动力学软件计算空气动力载荷;而在后者中,用户需要在问题产生时改变模拟输入。

该方法运用了二次内插、外插程序,这体现在公式翻译程式语言中,不过在任何程序语言中都能轻松实现。

序言:

在ADAMS机械系统仿真技术的高级应用中,用户经常在只能解决部分问题的其他计算机编码中投入很多,比如说计算水力,电磁负荷或是气动载荷。

这可能是个商业上可行的程序,或者特别开发的高度专有的内部产品。

另外一个编码通常的解法和ADAMS大相径庭,它可能在不同的计算机硬件或是不同的站点上运行。

因此,要把另外一个编码转化成求解器模块的子程序,使其运行,这通常是不大可能的。

反之亦然。

在这些研究中,我们需要把另外一个编码和求解器模块连接起来,使得两个程序能够在系统模拟中互相通信,从而获得完整的耦合响应。

另外,由于这类问题一般比较大而且复杂,连接必须有效,如此两个程序能以最佳可能速度运行,除非在时间和硬件可用性上没有限制。

联合仿真注意事项:

提出联合仿真解法时,应该考虑以下几点:

1.求解器模块在连续时间内解决系统方程式,并且得出连续结果,即使我们只在固定时间增量内要求求解程序给出输出信息的情况下,亦是如此。

除此之外,求解器模块的解法的安排方式是,如果校正器出现问题,难以聚合,内部模拟时间事实上有可能倒退。

2.你想连接到求解程序上的另外一个编码经常只能在离散时间内解决其自身问题,而且无法得到时间步长之间的结果。

如果另外一个编码使用离散逼近连续时间法,譬如说有限差分方法,或者另外一个编码事实上是模仿数控执行机构之类的离散过程,那么这有可能成真。

3.另外一个编码有可能比求解器模块慢得多或者快得多,这取决于每个编码解决的问题的相对复杂程度,以及它们使用的计算机硬件。

如果可能的话,我们希望确保在联合仿真过程中,每个编码以其最佳可能速度运行,而且编码之间的通讯不会限制速度。

范例问题——可能出错之处

通过一个非常简单的证明题,我们可以说明准备不充分的联合仿真可能出错的很多地方。

然后,我们将通过同一问题说明如何有效改善结果。

模型包括一对完全相同的弹簧-质量-阻尼器,其特征为:

K=314.16lbf/in(=121391lbm-in/sec2/in)

C=0.0005lbf-sec/in

M=0.3183lbm

我们特意设计了这个模型,来创建一个非常僵硬、几乎没有阻尼的系统,其自然频率接近100赫兹(实际上大约为98.3赫兹)。

一个弹簧-质量-阻尼器受到一个常规ADAMSSFORCE因素的推动,其使用了低频率,全部是正弦曲线的力量,量值为50lbf,周期为1秒。

另外一个弹簧-质量-阻尼器受到外部离散时间编码的推动,这一编码的力量接近第一个。

我们可以轻易控制另外一个编码的时间步长。

所有仿真会持续4秒钟。

联合仿真会出错的地方很多。

最常见的问题是编码之间存在通讯瓶颈,联合解决方案运行速度非常慢。

一个编码如果难以“消化”另外一个编码提供的数据,也会引起减速。

然而,某些问题可能导致联合仿真得出错误答案。

这些问题包括:

●两个编码之间的同步化故障

●采样区间不当引起的混淆现象

●离散输入导致的ADAMS系统中的数值脉冲

●不兼容的误差控制引起的人为不稳定

现在,让我们一起看看在求解器模块和另外一个编码中使用不同步长联合仿真时,这个简单的系统会出现什么情况。

求解器模块–25outputsteps/sec(stepsize=.040)

外部力量-50computesteps/sec(stepsize=.020)

由于受迫振动频率只有1赫兹,我们会期待这些数值会得出非常不错的结果。

下面的图表将受到真正连续外力作用的质量的位移和受到联合仿真离散外力作用的质量的位移做了对比。

将求解器的步长减小到.02或者甚至是.01秒,对联合仿真响应几乎没有影响,除了提高运行时间10%或20%之外。

不过,求解器达到0.005秒或者更小的步长,会允许离散外部力量在数值上激起100盒子的机械系统,如下图所示。

求解器模块–200outputsteps/sec(stepsize=.005)

外部力量-50computesteps/sec(stepsize=.020)

因此,很明显这不是达到预期解决方案的步骤。

相反,我们可以试着减少外部力量编码的步长,看看是否会改善系统响应。

求解器模块–50outputsteps/sec(stepsize=.020)

外部力量-500computesteps/sec(stepsize=.002)

这个方法看起来很有希望,不过随着仿真的进行,响应似乎在减弱。

如果我们查看速度轨迹的话,就会发现系统产生纯粹是人为引起的不稳定性,其频率出人意料地为大约1.6赫兹。

我们的最后一个方案是努力提高外部力量编码的采样率。

求解器模块–50outputsteps/sec(stepsize=.020)

外部力量-1000computesteps/sec(stepsize=.001)

结果更糟糕!

离散受迫方不稳定,响应频率是奇怪的1.4赫兹。

不仅如此,数值变得如此糟糕,响应变成预想的模型的两倍,而且使得模型也变得不稳定!

因此,我们很明显在使用外部计算离散外部力量时,遇到了简单的联合仿真问题。

我们无法接近真实解法。

增加求解器一方的仿真步数会认为引发意料不到的系统谐振,而增加外部力量一方的步数则会导致响应不稳定。

解决方案——“胶水”程序

幸运的是,有一个很直接的方法可以解决这个问题。

那就是在求解器模块和另外一个编码之间加一个内插、外插界面。

首先,我们必须承认,这类问题的所有数字计算机解法事实上都是对连续物理的离散计算逼近(暂时先不考虑数控)。

我们拥有的不同破解工具之间的区别主要在于功能的排序。

该排序可以用来粗略估计计算的离散点之间的真正解法。

有效差分编码(以及离散压力器)可能完全不会在求解点之间插入,但是求解器模块通过预估校正解法中各种排序的多项式帮助积分器推动并且插入求解点之间的响应。

我们可以将这种方法应用到联合仿真中。

另外一个编码希望采用它青睐的步长,这一般比求解器的步长小多了。

而且,另外一个编码希望在每一个步骤里,抽样检查ADAMS的响应。

由于求解器主要使用不同的步长积分器,因此,要求求解器使用和另外一个编码相同的小步长既不合理,也没效率。

而且正如我们上文所示,即使我们可以实现这一点,也不能完全解决联合仿真的问题。

我们真正需要的是另外一个编码可以随时抽样检查的ADAMS结果的连续逼近。

这就是积分器。

另外,求解器模块希望能够在任何特定时间询问另外一个编码的响应,不仅仅是在固定的区间,甚至也不是总是准时。

另外一个编码通常只有离散输出,因此它只能响应那些。

我们可以努力让另外一个编码采取细微的步长,这样它会非常接近连续。

但是我们之前已经发现,这不能完全解决联合仿真的问题。

另外,随着求解器的进步,预测器需要在未来时代猜测响应,但是另外一个编码无法提供这些。

所以,我们需要一种可以将另外一个编码的响应延伸到未来的方法,即外插工具。

因此,解决问题的方案就是创建一个小巧高效的“胶水”程序,可以在联合仿真过程中将两个编码连接起来,并且能对编码之间传输的数据进行双向内插和外插。

这个方法事实上非常有效。

我将在下面对其进行详细描述。

双向内外插界面

下列图表展示了我们的“胶水”程序所具备的功能。

通常,该程序的实施中伴随着以下逻辑:

1.求解器模块随着每一积分步长的机械相应数据更新其界面一方。

2.另外一个编码在其使用的任意抽样检查区间从界面获得内插响应。

3.另外一个编码向前推移,直到与求解器模块的仿真时间相差一个步长为止,同时随着每一步长的压力数据更新其界面一方。

4.求解器模块从界面获得连续外插力量,促进其自身进步。

由于另外一个编码永远赶不上求解器,这种方法有时被称为“半步领先”法。

注意,如果另外一个编码实际上模拟真正的离散过程,你则不应该使用界面的外插工具。

上列图表的“省略”部分说明了这一点。

同样,如果另外一个编码的响应不取决于任何ADAMS系统状态,而只是取决于时间,那么你也没有必要使用内插工具。

内插工具和外插工具都需要用到二次函数。

使用二次方程式可以避免高阶多项式中出现的“样条函数连接”问题,不过仍然能更好地逼近简单的一次函数。

但是,二次函数要求有三个数据点,因此,计算二次函数比计算一次函数代价高,而且需要三个步长才能开始。

因而,要认真安装启用内插工具和外插工具,以便从界面获得最好的响应。

这一点很重要。

在二次系数的分析解法的基础上,这里说明了在FORTRAN中这种界面的单变量实现,同时利用旋转迭式存储器减小存储操作。

这可以转化为任何目标语言,而且可以作为多变量实现的基础。

SUBROUTINEINTRP2(yvals,tvals,reqtim,value)

DOUBLEPRECISIONyvals(3),tvals(3),reqtim,value

DOUBLEPRECISIONa,b,c,denom,y1d23,y2d31,y3d12,d31,d23

Cassumptionisthaty=a*t^2+b*t+c

d31=tvals(3)-tvals

(1)

d23=tvals

(2)-tvals(3)

denom=d31*(tvals

(1)*tvals(3)+tvals

(2)*(d23-tvals

(1)))

y1d23=yvals

(1)*d23

y2d31=yvals

(2)*d31

y3d12=yvals(3)*(tvals

(1)-tvals

(2))

a=(y1d23+y2d31+y3d12)/denom

b=((tvals

(2)+tvals(3))*y1d23+

1(tvals(3)+tvals

(1))*y2d31+

2(tvals

(1)+tvals

(2))*y3d12)/-denom

c=((tvals

(2)*tvals(3)*y1d23)+

1(tvals

(1)*tvals(3)*y2d31)+

2(tvals

(2)*tvals

(1)*y3d12))/denom

Coutput

value=a*reqtim**2+b*reqtim+c

return

end

使用TIMGET

两个程序的同步化取决于它们知道对方在仿真序列里的位置。

求解器模块的实用子程序TIMGET通常根据上一次成功的仿真步长,返回时间;而且过了这个时间,求解器再也不会做备份。

通过监测用户编写的子程序(如SFOSUB,VFOSUB)内部的TIMGET结果,我们可以确认一个成功的仿真步长是何时完成的。

这里又引出了一个小小的并发问题。

监测TIMGET的结果只能告诉我们上个步长是何时成功的。

这意味着每次进入子程序时,我们都需要保存所有传达给外部力量编码的状态,这样当我们看到TIMGET结果的变化时,我们可以从上次调用子程序时发送状态数量。

我们在下面概括介绍了这个问题。

需要的求解器模块功能:

1.检查TIMGET,看看上一步是否成功(如果没有成功,则跳到3#)。

2.连接到界面。

更新保存的状态阵列的内插阵列。

3.将保存的状态阵列更新为目前的状态。

4.连接到界面。

获得外插力量。

5.返回外部力量给模型。

跨进程通信

当然,为了确保联合仿真顺利工作,两个编码和“胶水”程序必须能彼此交流。

根据每个编码使用的操作系统和硬件以及你是否能够进入另外一个编码的内部工作,很多方法可以实现这一点。

在求解器一方,通信经常是通过用户为SFORCE,VFORCE,GFORCE,VARIABLE或者DIFF元素编写的标准子程序完成的。

最高效的跨进程通信借助于直接的子程序界面。

也就是说,要设立内插提取界面和另外一个编码,这样求解器模块可以调用它们。

在这种情况下,通过FORTRANCOMMON分程序块等共享记忆可以转化数据。

特别是在Windows/NT平台上,只要每个编码有办法获得系统服务,通过动态连接库也可以转化数据。

跨进程通信的另外一个方法是利用“管道”。

UNIX和NT操作系统都提供管道服务。

管道服务与共享内存堆栈的功能相当,不过要通过文档形式存储。

管道服务包括进程阻塞和同步化工具。

管道要求所有涉及到的进程在NT工作组内的同一个或者是类似的系统里运行。

这里举的例子是把管道作为通信方法。

最后,如果参与进程是在不同系统,甚至不同地方运行,跨进程通信可以通过套接字这种网络系统实现。

套接字是UNIX和NT操作系统都提供的另外一项标准系统服务。

它可以通过TCP/IP协议,在任何网络的任何兼容硬件上运行。

套接字的实现和管道非常像,也能提供进程阻塞和同步化工具。

点击

结果

在这为数不多的几次机会里,我们可以获得更快更廉价更好的结果。

1.内插联合仿真的运行速度比非内插联合仿真快。

这里列举了4秒钟仿真实例的运行时间结果。

该实例在求解器中使用了50步长/秒,在外部力量编码中使用了1000赫兹抽样检查,并且在400兆赫兹的NT计算机上进行:

非内插联合仿真——7.91秒

内插联合仿真——0.73秒!

2.没有必要大规模修改ADAMS模型或者另外一个编码。

大部分工作是在内插外插界面上完成的。

根据你所选择的跨进程通信方法,你甚至可以继续在不同操作系统各自的机顶盒上运行你的两个编码。

3.随着另外一个编码的计算步长(或者样本区间)减小,内插联合仿真可以出色地和连续解法聚合到一起。

下面图表说明了这一点。

在下面图表中,.001秒的样本的曲线正好位于真正连续解法的下方。

4.不论是位移,还是第一次和第二次的时间导数,内插结果都要比非内插结果好得多。

下面两个图表说明了这一点。

在下面图表中,非内插联合仿真结果用“ZOH”表示,意为零阶保持。

两个图表中的内插结果都很接近连续解法,因而难以区分。

总结

1.在把现有的任何类型的外部计算工具和ASAMS模型连接方面,联合仿真技术具有广泛的用途。

2.安装好联合仿真界面很复杂。

如果安装不好,速度会很慢,甚至得到错误结果。

3.在界面中使用双向二次内插外插系统可以极大提高联合仿真的保真度和速度。

4.这种界面还可以用于平台之间和操作系统之间。

5.在CD中可以找到文字说明、模型实例和编码实例,还可以在网上下载。

如有需要,发送邮件到aelli@,联系作者。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1