论文部分内容阅读
摘 要:结合对火炮初速减退量进行准确修正的迫切需求,本文对基于Simulink仿真模型的MBD开发流程进行了研究,根据已建立好的火炮烧蚀磨损内弹道仿真模型,对自动生成代码进行了参数配置,实现了仿真模型代码的自动生成,减少了系统开发周期,为模型的工程化应用奠定了基础。
关键词:内弹道模型;自动代码生成
1引言
基于模型设计的开发流程,开发人员在Simulink环境下建立仿真模型并进行仿真,进行早期设计的验证,当仿真结果符合开发要求时,使用Embedded Coder技术可自动生成嵌入式的产品级代码,应用于硬件平台上。克服了传统手工编码开发周期长、实现复杂且经常引入错误以及不易于保持MATLAB参考代码与C代码的一致性等缺点,并且可对代码进行非实时与实时环境下的验证与测试,保证了工程的可靠性和实时性,大大提高了嵌入式开发的效率,加快了开发进程。
2模型参数配置
以某型125mm高膛压坦克炮穿甲弹,标准条件下新炮起动压力约为30MPa,常温初速小于1740m/s,平均最大膛压小于等于470.4MPa,发射药为“**/**H花高”,基于MATLAB中的Simulink库建立內弹道仿真模型,根据坦克炮(新炮)的內弹道相关参数,对模型进行仿真,得到在标准条件下坦克炮内弹道的仿真结果如图1所示。
图1 某型坦克炮穿甲弹弹丸速度、膛压仿真曲线
从上图中可以看出,该型坦克炮穿甲弹弹丸初速约为1721m/s,起动压力约为30MPa,约在3.51ms处达到最大膛压464.7MPa,与该炮标准数据相吻合,证明了内弹道模型的可靠性。
3模型代码生成
建立磨损火炮的内弹道仿真模型之后,为实现模型的工程化应用,将内弹道模型应用硬件系统当中,完成射弹初速的计算功能,需要生成嵌入式代码。MATLAB是美国MathWorks公司出品的商业数学软件,提供了三种代码的自动生成工具:MATLAB Coder,Simulink Coder和Embedded Coder,其中,MATLAB Coder可以自动实现MATLAB代码生成C/C++代码;Simulink Coder可以自动从Simulink/Stateflow模型生成C/C++代码,但以上两种工具生成的代码均不能直接用于嵌入式系统,而Embedded Coder可以自动生成可重用、结构紧凑且执行快速的实时C代码,故本文利用Embedded Coder工具完后模型代码的生成工作[1]。
在进行代码生成之前,必须对模型的参数进行配置,为生成嵌入式代码,至少需要配置3部分:模型的解算器solver,模型的系统目标文件(如ert.tlc或其他自定义的嵌入式系统目标文件),硬件实现规定(Hardware Implenmatation)[1]。
求解器solver的设置,主要包括仿真时间范围、起始和停止时间、仿真步长和选择合适的仿真解法[2]。具体操作如下:按下Ctrl+E打开模型的Configuration Parameter对话框,解算器类型选择固定点解算器,长度为0.01s,求解算法选择为Runge-Kutta法。对目标硬件规格(Hardware Implementation)进行设置,在这个选项卡中可以配置芯片的厂商和类型,设置芯片的字长、字节顺序等。最后一个关键的配置是控制整个代码生成过程的系统目标文件System Target File,ert.tlc文件是Embedded Coder提供的能够生成专门用于嵌入式系统C代码的系统目标文件,代码格式是一种专为生成产品级代码而设计的紧缩型代码格式,占用的内存较少[3]。
4代码验证
为了验证用于代码生成的模型与自动生成代码的一致性,在代码移植在底层驱动前,需要对代码进行验证,主要是为了避免代码生成过程中可能引入的错误,错误主要来源于两方面,一是来自于代码生成工具本身,代码生成工具作为一款软件,和其它软件一样,都可能存在一定的bug;二是来自于代码生成用户,代码生成过程是一个可以定制化的过程,如果定制化的过程没有经过严格、充分的验证,也很容易引入bug。因此,为了防止这类bug生成不正确的代码,在MBD开发流程中,常用软件在环测试(Software-in-the-Loop,SIL)进行模型代码验证。
5结论
本文通过对MBD开发流程进行分析,依据MBD开发流程,建立了内弹道仿真模型,仿真结果与标准数据相符,证明了模型的准确性,然后对模型参数进行配置,自动生成嵌入式代码,利用SIL软件在环仿真,对代码进行了一致性检验,为火炮领域仿真模型的工程化应用奠定了基础。
参考文献:
[1]孫君潇,Simulink仿真及代码生成技术入门到静通[M],北京:北京航空航天大学出版社,2015.
[2]陈亮,郝洪涛,倪凡凡等,双离合自动变速器系统建模与代码自动生成的研究[J].传动技术,2018,32(2):3-12.
[3]邱宝梅,左文英,王凤娟.基于Simulink/RTW的汽车电子控制系统的研究[J].计算机测量与控制,2011,19(5):1086-1088.
关键词:内弹道模型;自动代码生成
1引言
基于模型设计的开发流程,开发人员在Simulink环境下建立仿真模型并进行仿真,进行早期设计的验证,当仿真结果符合开发要求时,使用Embedded Coder技术可自动生成嵌入式的产品级代码,应用于硬件平台上。克服了传统手工编码开发周期长、实现复杂且经常引入错误以及不易于保持MATLAB参考代码与C代码的一致性等缺点,并且可对代码进行非实时与实时环境下的验证与测试,保证了工程的可靠性和实时性,大大提高了嵌入式开发的效率,加快了开发进程。
2模型参数配置
以某型125mm高膛压坦克炮穿甲弹,标准条件下新炮起动压力约为30MPa,常温初速小于1740m/s,平均最大膛压小于等于470.4MPa,发射药为“**/**H花高”,基于MATLAB中的Simulink库建立內弹道仿真模型,根据坦克炮(新炮)的內弹道相关参数,对模型进行仿真,得到在标准条件下坦克炮内弹道的仿真结果如图1所示。
图1 某型坦克炮穿甲弹弹丸速度、膛压仿真曲线
从上图中可以看出,该型坦克炮穿甲弹弹丸初速约为1721m/s,起动压力约为30MPa,约在3.51ms处达到最大膛压464.7MPa,与该炮标准数据相吻合,证明了内弹道模型的可靠性。
3模型代码生成
建立磨损火炮的内弹道仿真模型之后,为实现模型的工程化应用,将内弹道模型应用硬件系统当中,完成射弹初速的计算功能,需要生成嵌入式代码。MATLAB是美国MathWorks公司出品的商业数学软件,提供了三种代码的自动生成工具:MATLAB Coder,Simulink Coder和Embedded Coder,其中,MATLAB Coder可以自动实现MATLAB代码生成C/C++代码;Simulink Coder可以自动从Simulink/Stateflow模型生成C/C++代码,但以上两种工具生成的代码均不能直接用于嵌入式系统,而Embedded Coder可以自动生成可重用、结构紧凑且执行快速的实时C代码,故本文利用Embedded Coder工具完后模型代码的生成工作[1]。
在进行代码生成之前,必须对模型的参数进行配置,为生成嵌入式代码,至少需要配置3部分:模型的解算器solver,模型的系统目标文件(如ert.tlc或其他自定义的嵌入式系统目标文件),硬件实现规定(Hardware Implenmatation)[1]。
求解器solver的设置,主要包括仿真时间范围、起始和停止时间、仿真步长和选择合适的仿真解法[2]。具体操作如下:按下Ctrl+E打开模型的Configuration Parameter对话框,解算器类型选择固定点解算器,长度为0.01s,求解算法选择为Runge-Kutta法。对目标硬件规格(Hardware Implementation)进行设置,在这个选项卡中可以配置芯片的厂商和类型,设置芯片的字长、字节顺序等。最后一个关键的配置是控制整个代码生成过程的系统目标文件System Target File,ert.tlc文件是Embedded Coder提供的能够生成专门用于嵌入式系统C代码的系统目标文件,代码格式是一种专为生成产品级代码而设计的紧缩型代码格式,占用的内存较少[3]。
4代码验证
为了验证用于代码生成的模型与自动生成代码的一致性,在代码移植在底层驱动前,需要对代码进行验证,主要是为了避免代码生成过程中可能引入的错误,错误主要来源于两方面,一是来自于代码生成工具本身,代码生成工具作为一款软件,和其它软件一样,都可能存在一定的bug;二是来自于代码生成用户,代码生成过程是一个可以定制化的过程,如果定制化的过程没有经过严格、充分的验证,也很容易引入bug。因此,为了防止这类bug生成不正确的代码,在MBD开发流程中,常用软件在环测试(Software-in-the-Loop,SIL)进行模型代码验证。
5结论
本文通过对MBD开发流程进行分析,依据MBD开发流程,建立了内弹道仿真模型,仿真结果与标准数据相符,证明了模型的准确性,然后对模型参数进行配置,自动生成嵌入式代码,利用SIL软件在环仿真,对代码进行了一致性检验,为火炮领域仿真模型的工程化应用奠定了基础。
参考文献:
[1]孫君潇,Simulink仿真及代码生成技术入门到静通[M],北京:北京航空航天大学出版社,2015.
[2]陈亮,郝洪涛,倪凡凡等,双离合自动变速器系统建模与代码自动生成的研究[J].传动技术,2018,32(2):3-12.
[3]邱宝梅,左文英,王凤娟.基于Simulink/RTW的汽车电子控制系统的研究[J].计算机测量与控制,2011,19(5):1086-1088.