大规模复杂系统集成仿真技术漫谈(四):如何集成源码形式的模型?

01

新的探索:MBSE+数字孪生

随着数字化浪潮不断拓展,仿真技术已不再是一个单独的细分领域,而是逐渐成为许多领域数字化转型中的一项底层基础保障。尽管单一领域的仿真技术已经非常成熟,但由于在MBSE(基于模型的系统工程)和数字孪生的落地应用中不可避免地涉及到跨工具、跨领域、跨尺度的集成仿真问题,所以传统的单一领域或学科的仿真技术仍面临新的挑战。比如,德国亚琛工业大学(RWTH Aachen University)提出的eRobotics概念中就涉及超过30种不同领域和学科地工具。

为了实现跨工具、跨领域、跨尺度的集成仿真,德国和美国的学者结合工业4.0相关理论提出了构建全功能可交互虚拟样机(fully functioning interactivevirtual prototypes)的设想,即 ExperimentableDigital Twins(EDTs)。其核心理念是构建一个数据交互与分发的中转枢纽,不同的是国外将其理解为实时数据库,而我们则将其理解为一种“虚拟总线”或“软总线”的概念,本质就是通过一类数据交互技术进而实现大规模复杂系统集成仿真这一最终目的。

从相关公开资料可以看出,EDTs的典型应用主要包括:离散/连续系统仿真、动态/稳态场仿真(CAE仿真)、多体动力学仿真、视景仿真和代码集成。从前面几篇连载中我们对上面几点应用也都有介绍,本篇文章主要介绍代码集成,这是一个相当重要但是目前很少有人给出详细解决方案的应用方向。

02

“代码集成”的典型应用场景

在多系统集成仿真中,不可避免地需要集成一些源码形式的模型,这种需求的来源比较复杂,这里给出了几种典型的应用场景:

1.一些公司或机构出于对采购成本和自主化的考量不愿用商业工具,而是更偏向使用开源环境自己编写仿真计算程序,甚至开发自主化的仿真工具;

2.许多计算程序都是很久以前的自研程序(大部分是C或FORTRAN),经过多年修改与迭代可信度已经非常高,但因为各种原因导致代码无法移植,最现实的办法就是直接调用“祖传代码”而非重构

3.开源社区提供了非常丰富的库函数和工程包,许多以往需要大量时间开发的功能现在都可以直接调用,大幅节约开发的工作量和时间,实现开源社区资源与集成仿真的对接更加省时、省力。

03

概念的落地

综上,我们在分布式仿真架构下构建了一个能够实现各类型代码集成仿真的操作环境,即:代码集成

代码集成模块是通过一个DLL格式“统一形式的异构代码集成中间件”实现的,该DLL中间件同时兼具两个功能:一方面,作为TCP/IP客户端挂接“模型总线”并按照约定的通信协议完成数据交互;另一方面,约定了一个规范的调用接口,对不同的程序语言开放,将不同种类的源代码接入模型总线实现分布式联合仿真。

考虑到C/C++代码在仿真建模和数值计算中应用最为广泛,专门开发了一个用于C/C++代码的集成开发环境。在该环境中,可以自由使用全部C/C++语法规则进行模型开发和调试,也可以导入外部程序(或DLL)进行调用。

“代码集成”的操作界面类似C/C++的开发环境,可以直接在其中编写使用者所需要的数值计算程序,编写完成后可以直接在该环境中调试、运行、测试。

为了方便外部程序的调用,“代码集成”还提供了便捷的C/C++库和外部DLL文件的调用功能。调用已经通过测试的C/C++库时,只需要两步操作即可:

第一步,将需要被调用的源程序代码(*.h和*.c代码放在当地工作目录);

第二步,在“代码集成”头文件中添加“#include<...>”语句。

上面两步操作完成后,就可以直接调用库函数进行数值计算,并将计算结果接入“模型总线”开展分布式集成仿真。

同样,调用外部DLL文件也只需要类似的两步操作:

第一步,“代码集成”界面→导入→动态库(dll),添加需要调用的dll文件,导入结束后可以在“外部库管理”中查看是否成功导入;

第二步,在“代码集成”中链接DLL库,并且声明需要调用的函数。比如下图中分别链接了test.dll和myAPI.dll这两个外部库,并且分别声明了两个函数以供后续调用。

上述操作结束后,DLL中的函数就可以参与“模型总线”进行分布式集成仿真。

04

案例1:软件在环测试与验证

我们先看一个代码集成的简单算例。

这里的仿真对象是一个液压伺服作动系统,在AMESim建立飞机燃气轮机低压压气机叶片调节作动筒模型,用于提供叶片调节驱动力。通过输入位移指令与作动筒输出位移形成闭环反馈,由PID调节伺服阀流量与压力控制作动筒按给定的位移指令输出位移。其中控制器通过“代码集成”将C代码形式的PID控制算法集成进来。

利用C语言编写PID算法程序,此处仅为演示案例,相关参数都给成定值实际的控制算法会更加复杂。

C代码形式的PID控制算法与AMESim液压模型联合仿真操作演示如下:

C代码形式的PID控制算法与AMESim液压模型联合仿真结果为:

05

案例2:考虑隐私保护的代码集成

这里再给出一个“模型总线”集成DLL库的案例。

一个由液压源驱动的液压马达,液压源中配套了一个液压柱塞泵。该油泵是采购其他公司的货架产品,集成仿真时并不知道其内部构造所以无法准确建模,只能根据供应商提供的柱塞泵外部数据进行建模。

供应商出于试验数据保密的考虑,只同意提供柱塞泵外部特性的DLL文件。

将上面的试验数据写入程序,生成的DLL文件的头文件和试验数据调用函数为:

利用“模型总线”+“代码集成”实现液压马达与柱塞泵实际工作特性的联合仿真操作演示如下:

05

小结

使用“代码集成”进行联合仿真客观上存在一定的门槛,一般要求使用者具备编程基础并对仿真对象有比较深入的理解,属于相对高级的应用模块。随着基于模型的系统工程和数字孪生技术的不断融合,代码集成的需求将会在工程应用中不断涌现。“代码集成”作为MBSE和数字孪生落地应用的底层保障,提前为新的应用方向提供一种可能性。

(0)

相关推荐

  • 仿真、建模、虚拟调试——加速和简化机器设计开发过程

    在自动化的不同层面,仿真.建模和虚拟调试的应用正变得越来越容易.第三方仿真工具的接口也可以内置到开发软件中. 通过仿真调试可以加速和简化调试机器的过程.它可以最大限度地降低风险,确保项目的最后期限和质 ...

  • 基于虚拟样机的液压泵寿命试验(5)

    3  虚拟寿命试验中的关键技术 4)多学科模型的校核.验证和确认方法 多领域模型可用于估计物理模型的真实性能.然而,虚拟样机的准确性和正确性,是建模与仿真过程中必须解决的问题.通常认为建模仿真和模型的 ...

  • 一文解读C# 动态拦截第三方进程中的方法函数(外挂必备)

    一.前言 由于项目需要,最近研究了一下跨进程通讯改写第三方程序中的方法(运行中),把自己程序中的目标方法直接覆盖第三方程序中的方法函数:一直没有头绪,通过搜索引擎找了一大堆解决方案,资料甚是稀少,最后 ...

  • 自动驾驶虚拟仿真技术(四):仿真测试流程及要求

    一.自动驾驶仿真测试对象 自动驾驶系统分为了环境感知.决策规划和控制执行三个子系统,三个子系统又由传感器模型.决策模型.控制对象模型及对应的软件和硬件部分组成. 图 1  自动驾驶系统通用架构 从V模 ...

  • 精华文章汇总(指标,技术,心态,附源码)

    本公众号(通达信指标营guiguziyzwl)自创号一来,发布了很多文章. 本公众号新运行网站:股票指标网www.gpzbw.com.cn试运行,注册会员赠送积分,可以使用积分下载高级源码.敬请光临. ...

  • 补充|程序猿技术干货资源【附源码】

    导语 上次,发布了篇 程序猿充电优质编程技术电子书 ,得到了很多同行的认可和点赞,我感觉我付出时间和精力收集的资源对大家有帮助,还是很值得的,下次会继续推送编程干货.但是,有个认真的圈友,在公众号后台 ...

  • 技术分析四要以

    技术分析,笔者研究过更重理论指标,最后就形象的简化为一句话:均线是水,K线是舟,量能是马达,题材是推进器.水能载舟亦能覆舟,多空趋势尽在其中,这应该就是A股技术分析四要以. 其实,有机会可以去游船上亲 ...

  • Bentley软件收购交通仿真技术全球领先企业

    扩展用于动态多模式仿真的交通数字孪生技术 宾夕法尼亚州,埃克斯顿--2021年4月14日:基础设施工程软件公司Bentley Systems(纳斯达克股票代码:BSY)今天宣布收购INRO Softw ...

  • 电力电子FPGA仿真技术浅析

    扫取二维码获取

  • 最后一贴,万四绝技独奇码合技术公开和演示

    最后一贴,万四绝技独奇码合技术公开和演示 上期开奖086 转万四3806 >转换码和846-139>转换奇码和501649(注转换规则{1,3,5,7,9},{'50','16','27' ...

  • 浅谈Ga2O3器件仿真技术的难点

    浅谈Ga2O3功率半导体器件仿真技术的难点 目前,以GaN和SiC为代表的第三代半导体材料具有禁带宽度大.临界电场高和电子饱和漂移速度快等优势,突破了硅与传统化合物材料(GaAs.InP等)技术发展的 ...

  • ANSYS Mechanical绳索仿真技术

    绳索,俗称绳子,是通过扭或编等方式加强后,连成一定长度的纤维.其拉伸强度很好但没有压缩强度,可用来做连接.牵引的工具.绳索的用途数不胜数:从建筑中的材料固定.到岩土工程中的柔性锚索.汽车门窗的升降拉索 ...