大规模复杂系统集成仿真技术漫谈(四):如何集成源码形式的模型?
01
—
新的探索:MBSE+数字孪生
为了实现跨工具、跨领域、跨尺度的集成仿真,德国和美国的学者结合工业4.0相关理论提出了构建全功能可交互虚拟样机(fully functioning interactivevirtual prototypes)的设想,即 ExperimentableDigital Twins(EDTs)。其核心理念是构建一个数据交互与分发的中转枢纽,不同的是国外将其理解为实时数据库,而我们则将其理解为一种“虚拟总线”或“软总线”的概念,本质就是通过一类数据交互技术进而实现大规模复杂系统集成仿真这一最终目的。
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和数字孪生落地应用的底层保障,提前为新的应用方向提供一种可能性。