Simulink模型到Modelica模型转换技术
作者:董政 丁建完
来源:《计算机辅助工程》2016年第05
        摘要: 针对Simulink模型重用到更高阶的Modelica平台上的需求,分析Simulink模型的数学本质和代码表达,以及Modelica对外部函数和外部类的支持,重用Simulink模型转换生成的S-function目标C代码,实现Simulink模型到Modelica模型转换.
        关键词: Simulink S-function Modelica 模型转换
        中图分类号: TP391.9 文献标志码: B
        0
        随着数字化功能样机技术和仿真技术的发展,近几十年来涌现出许多成熟的建模仿真分析工具,并广泛应用于机械、电子、控制等领域中,使得对集机械、电子、液压、控制等多个学科领域子系统于一体的复杂产品的整体系统进行分析成为可能.多年以来,Simulink以其基本模块的易用性和通用性,被广泛应用于控制系统的建模.同时,为满足物理系统建模,MATLAB
方和第三方均提供多种扩展工具模块,但是实际使用时,扩展工具模块往往难以满足使用需求.越来越多的使用者发现针对复杂物理系统,Simulink存在着建模难度大并且耗费时间多的问题.欧洲学者针对复杂物理系统统一建模,提出多领域统一建模语言——Modelica语言,实现对复杂产品整体统一建模分析,并使之成为复杂系统建模领域的标准.目前,Modelica语言已有较大的发展,针对其开发的标准模型库更是迅猛增长,已覆盖机械、液压、气压、电控、热力和电磁等多个领域,并在欧美汽车、能源、动力、机电、航空和航天等各行业获得成功应用.[1]
        虽然Modelica的应用已推进复杂物理系统的建模和仿真发展,但是控制系统工程师依然习惯利用Simulink进行控制系统的建模和仿真,而其他设计工程师使用Modelica建立物理系统模型.长期以来,大量的知识已经以Simulink模型的方式累积下来,如果把这些模型用Modelica重写,十分耗费时间和精力.基于Modelica语言在多领域建模和仿真中的广泛应用以及未来发展趋势,可以考虑将控制系统Simulink模型转换成Modelica模型,使系统模型在统一的Modelica平台下进行仿真.有学者提出一种模块映射方案,通过在Modelica平台中建立与Simulink基本模块对应的模型库元件,并按照Simulink模型模块和连接关系,用Modelica元件代替Simulink模块并复现连接关系,实现模型转换.[2-3]这种方案依赖于专门定制的Mod
elica模型库元件.然而,部分Simulink基本模块,如积分模块等,有多种变形模式,要设计一种Modelica元件与其对应的难度很大.对此,本文提出一种基于Simulink模型代码生成和Modelica外部类和函数接口实现Simulink模型到Modelica模型转换的新方案.
        1 模型转换原理
        1.1 Simulink模型描述
        Simulink模型中包含时间
        Simulink通常用模块和连接关系表达模型.通过MATLAB提供的代码生成工具RTWmatlab难还是c语言难(Real-Time Workshop)把模型转换成S-Function目标C代码后,Simulink模型中的数学描述就变成代码描述.Simulink模型转换成C代码后,Simulink模型原有的所有变量信息都保存在SimStruct实例中,SimStructS-Function目标C代码中定义的类,代码中还定义用于对SimStruct操作的接口函数.
        Simulink求解器通过对接口函数的调用,对用C代码描述的Simulink模型进行仿真,仿真流程见图1,仿真主要包含初始化和循环求解2个阶段.
        初始化阶段由mdlInitializeSizesmdlStartmdlInitializeSampleTimes函数实现采样时间、状态向
        量、输入向量的初始化.在循环求解阶段中,
        modelOutputs函数用C代码的方式描述关系式
        1.4 Modelica外部类
        类是Modelica语言的基本结构元素,是构成Modelica模型的基本单元,类可以包含3种类型:变量、方程和成员类.变量表示类的属性,通常代表某个物理量;方程指定类的行为,表达变量之间的数值约束关系.[1]通常,类定义在Modelica内部,类的变量、方程和成员类均以Modelica语言描述,对内是可见的.
        Modelica同时支持外部类.外部类一般由C语言定义,对于Modelica相当于一个黑箱,只暴露其操作的接口,内部结构完全封闭.外部函数协作完成某一任务时,这些外部函数之间需要传递一些信息的内部存储,外部类的实例就可以表示这种内部存储.Modelica语言中,外部类同样以class作为关键字,但加上extends ExternalObject关键字修饰,表明从External
Object派生,并且仅有3个函数constructordestructor,分别用于构造和销毁外部实例.外部类实例通常为一个指向某类实例的指针,见图3.定义SimStructPrt外部类并且定义类构造函数.构造函数由外部函数实现,SimStructPrt实例即为指向SimStruct实例的指针.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。