一种面向时序离散系统的Modelica建模方法与流程

文档序号:32409754发布日期:2022-12-02 21:14阅读:335来源:国知局
一种面向时序离散系统的Modelica建模方法与流程
一种面向时序离散系统的modelica建模方法
技术领域
1.本发明涉及建模与仿真技术领域,尤其涉及一种面向时序离散系统的modelica建模方法。


背景技术:

2.modelica是一种面向对象的多领域物理统一建模语言,可以建立不同学科领域的物理对象模型,实现大型系统多领域统一建模与协同仿真。工程中,系统一般包括连续对象和离散对象,modelica可以支持连续和离散组件交互作用的混合建模。以航空发动机数控系统为例,液压、电子、传感子系统为连续对象,控制软件作为数控系统的核心组件,是一种典型的离散对象。modelica规范面向对象建模、非因果陈述式建模的特点,在构建连续子系统时具有强大的优势。但是在构建控制软件等离散对象时,存在以下两个方面的问题:
3.一方面离散控制系统具有明显的时序特征,时序设计与验证是对控制软件建模与仿真的关键目标。modelica支持通过继承标准离散类使模块离散化,执行周期与执行时间可配置。一个典型的控制软件一般由若干任务(task)组成,软件通过底层调度机制,实现多速率组时序调度所有task。软件中每个task一般由上百量级的基础函数组成,对应modelica模型中,一个顶层task模型需要由上百个基础模块搭建。当设置或改变一个task的执行周期和执行时间时,需要对task模型中每个基础模块的参数进行设置,设计和迭代难度大。
4.另一方面,离散控制系统模型中广泛应用结构化数据端口(connector),用于刻画一个任务和另一个任务之间的数据流。以图1所示的简单时序离散系统为例,当任务执行顺序为a-b-c时,控制软件中只需按照时序执行a、b、c任务并分别更新输出数据端口a、b、c即可。而在模型中,若按照图1直接连接任务间的输出和输入,则会出现循环依赖,导致模型编译失败。根据执行时序,任务a使用的实际是任务c上一个周期更新的数据c,因此,在matlab/simulink等商业工具的模型中,一般会采用在数据端口c后连接一个延迟模块(z-1
)来解除循环依赖,这种处理在时序离散系统中是必要且广泛存在的。而对于modelica模型,由于其延迟模块基于内置pre()函数实现,该函数仅支持real、bool、数组等内置数据类型,不支持结构化数据端口(connector),因此在建模时,需要分别对connector中的每一位数据分别进行z-1
处理,当connector中数据量达到几十或上百量级时,建模和维护工作量将急速增加。
5.以上两方面的问题使得基于modelica的模型在大型时序离散系统中寸步难行。随着航空、航天等领域离散电子控制逐渐替代机械液压控制,极大地限制了基于modelica的多学科统一建模与仿真技术在相关领域中的应用与推进。


技术实现要素:

6.针对现有技术中的缺陷和不足,本发明提供了一种面向时序离散系统的modelica建模方法,首先构建离散源模块,并以一个任务为单位,所有通用离散模块继承同一个离散
源模块参数,通过设置离散源模块参数,可一键修改任务中所有基础模块的执行周期和执行时间,并在此基础上实现了面向时序离散系统的多速率组时序调度建模与仿真;本发明通过引入结构化数据记录与读取机制,破除了大型时序离散系统模型中的循环依赖问题。
7.作为本发明的第一个方面,提供一种面向时序离散系统的modelica建模方法,包括:
8.步骤s1:构建继承同一离散源模块的标准模块包,其中,所述标准模块包包括离散源模块和通用离散模块;
9.步骤s2:依据所述标准模块包,构建继承同一所述离散源模块的多个任务包,其中,每一所述任务包包括所述标准模块包和任务模型;
10.步骤s3:实例化所有任务模型,并建立各个任务模型数据端口之间的连接关系,以构建多速率组任务调度离散控制系统模型;
11.步骤s4:依据所述多速率组任务调度离散控制系统模型,构建各个任务模型数据端口的单步/多步延迟模块,以实现各个任务模型端口数据的单步/多步延迟。
12.进一步地,所述构建继承同一离散源模块的标准模块包,其中,所述标准模块包包括离散源模块和通用离散模块,还包括:
13.步骤s1-1:通过modelica标准库的discrete block构建所述离散源模块;其中,所述离散源模块包括执行周期和开始执行时间,所述执行周期和开始执行时间是多速率组时序调度的两个关键可配置参数,并根据所述执行周期和开始执行时间生成周期脉冲trigger;
14.步骤s1-2:所述通用离散模块对标软件中的通用函数,所有通用离散模块首先继承所述离散源模块,所有算法语句在周期脉冲trigger有效时执行,以实现按照执行周期和开始执行时间离散执行通用离散模块功能;其中,当所述离散源模块中的执行周期和开始执行时间参数改变时,所述通用离散模块中对应的参数默认值同步改变。
15.进一步地,所述依据所述标准模块包,构建继承同一所述离散源模块的多个任务包,其中,每一所述任务包包括标准模块包和任务模型,还包括:
16.步骤s2-1:新建一个package作为任务包,并在其下一层级拷贝一个所述标准模块包;
17.步骤s2-2:在所述任务包下集成构建任务模型,所述任务模型使用所述标准模块包中的通用离散模块与modelica标准库中的连续通用模块搭建,其中,所述任务模型输入和输出为结构化数据端口;
18.步骤s2-3:重复步骤s2-1和步骤s2-2,建立多个任务包,各任务模型的执行周期和开始执行时间继承自身标准模块包中的离散源模块。
19.进一步地,所述实例化所有任务模型,并建立各个任务模型数据端口之间的连接关系,以构建多速率组任务调度离散控制系统模型,包括:
20.步骤s3-1:建立record类型的数据记录模块,并在所述数据记录模块中实例化所有任务模型的结构化数据端口;
21.步骤s3-2:所述任务模型的输入数据端口从所述数据记录模块读取数据,输出数据端口向所述数据记录模块写数据,通过端口数据的读写建立各个任务模型之间的连接关系。
22.进一步地,所述依据所述多速率组任务调度离散控制系统模型,构建各个任务模型数据端口的单步/多步延迟模块,以实现各个任务模型端口数据的单步/多步延迟,包括:
23.采用非因果方程和算法方程两种方式构建各个任务模型数据端口的单步/多步延迟模块;
24.其中,所述非因果方程为典型的modelica方程,以关键词equation开始,所有方程在仿真时同时求解,无求解先后顺序;
25.其中,所述算法方程区分所述非因果方程,以关键词algorithm开始,求解时按照语句顺序,单步进行赋值操作。
26.进一步地,所述非因果方程基于软件缓存区写入存在延时完成的原理,假设输出在(starttime,periodtime)时刻完成从所述数据记录模块读数据,则输入在(starttime+dt,periodtime)时刻完成向所述数据记录模块写入数据,其中dt《periodtime,dt为时间,则实现输出相对于输入单步延迟;
27.同理,对于n步延迟,构建数据端口n维数组,记做bus[n],输出在(starttime,periodtime)时刻完成从所述数据记录模块的bus[n]读数据,输入在(starttime+n*dt,periodtime)时刻完成向所述数据记录模块的bus[1]写入数据,而在(starttime+k*dt,periodtime)时刻完成bus[n-k]向bus[n-k+1]写入数据,则输出相对输入n步延迟,其中,k=1,2,

n-1,n*dt《periodtime。
[0028]
进一步地,所述算法方程基于软件按照代码顺序执行的原理,在(starttime,periodtime)时刻依次执行输出从所述数据记录模块读数据、输入在(starttime+dt,periodtime)时刻向所述数据记录模块写入数据操作,则实现输出相对于输入单步延迟;
[0029]
同理,对于n步延迟,构建数据端口n维数组,记做bus[n],在(starttime,periodtime)时刻依次执行输出从所述数据记录模块的bus[n]读数据、输入在(starttime+n*dt,periodtime)时刻完成向所述数据记录模块的bus[1]写入数据,而在(starttime+k*dt,periodtime)时刻完成bus[n-k]向bus[n-k+1]写入数据,则输出相对输入n步延迟。
[0030]
进一步地,所述通用离散模块包括采样器、计数器和积分器。
[0031]
本发明提供的面向时序离散系统的modelica建模方法具有以下优点:
[0032]
1、本发明通过构建离散源模块,并以一个任务为单位,所有通用离散模块继承同一个离散源模块参数,通过设置离散源模块参数,可一键修改任务中所有基础模块的执行周期和执行时间,在此基础上实现了面向时序离散系统的多速率组时序调度建模与仿真,填补基于modelica语言的时序离散系统建模技术空白;
[0033]
2、本发明通过引入结构化数据记录与读取机制,破除了以结构化数据端口连接的时序离散系统模型中的循环依赖问题,打破了modelica在大型离散/混合系统中的应用瓶颈;
[0034]
3、本发明实现了结构化数据单步/多步延迟方法,巧妙地解决了modelica语言在离散对象中使用系统前一周期或前n个周期结构化数据的问题,这一问题普遍存在于具有总线通讯、余度表决等任务的系统。
附图说明
[0035]
附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与下面的具
体实施方式一起用于解释本发明,但并不构成对本发明的限制。
[0036]
图1为一种典型的循环依赖问题模型示意图。
[0037]
图2为本发明一个具体实施例建模对象示意图。
[0038]
图3为本发明一个具体实施例面向时序离散系统的建模原理图。
[0039]
图4为本发明一个具体实施例时序离散对象多速率组任务调度仿真结果示意图。
[0040]
图5为本发明一个具体实施例混合系统仿真结果示意图。
[0041]
图6为本发明一个具体实施例结构化数据单步/多步延迟仿真结果示意图。
[0042]
图7为本发明提供的面向时序离散系统的modelica建模方法的流程图。
具体实施方式
[0043]
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互结合。下面将参考附图并结合实施例来详细说明本发明。
[0044]
为了使本领域技术人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0045]
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包括,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0046]
图2为一个根据发动机控制系统典型应用场景简化的混合系统示例,系统各对象特征见表1,其中,任务1~3为离散任务,构成时序离散子系统,任务4为连续对象。
[0047]
表1混合系统对象参数
[0048]
对象执行周期(s)开始执行时间(s)任务10.10任务20.250.03任务30.50.05任务4
‑‑‑‑
[0049]
在本实施例中提供了一种面向时序离散系统的modelica建模方法,图7为本发明提供的面向时序离散系统的modelica建模方法的流程图。如图7所示,所述面向时序离散系统的modelica建模方法,包括:
[0050]
步骤s1:构建继承同一离散源模块的标准模块包,原理见图3,所述标准模块包指modelica的package类型,其中,所述标准模块包包括离散源模块和通用离散模块;
[0051]
步骤s2:依据所述标准模块包,以一个任务为单位构建继承同一所述离散源模块的多个任务包,其中,每一所述任务包包括所述标准模块包和任务模型;
[0052]
步骤s3:实例化所有任务模型,并建立各个任务模型数据端口之间的连接关系,以构建多速率组任务调度离散控制系统模型;
[0053]
步骤s4:依据所述多速率组任务调度离散控制系统模型,构建各个任务模型数据端口的单步/多步延迟模块,以实现各个任务模型端口数据的单步/多步延迟。
[0054]
优选地,所述构建继承同一离散源模块的标准模块包,其中,所述标准模块包包括离散源模块和通用离散模块,还包括:
[0055]
步骤s1-1:通过modelica标准库的discrete block构建所述离散源模块,所述modelica标准库指modelica协会开发维护的modelica标准预定义包;其中,所述离散源模块包括执行周期periodtime和开始执行时间starttime,所述执行周期和开始执行时间是多速率组时序调度的两个关键可配置参数,并根据所述执行周期periodtime和开始执行时间starttime生成周期脉冲trigger=sample(starttime,periodtime);
[0056]
步骤s1-2:所述通用离散模块对标软件中的通用函数,通用离散模块指通用模块中与仿真步长相关的模块,例如采样、计数器、积分器等,所有通用离散模块首先继承步骤s1-1中的所述离散源模块,所有算法语句在周期脉冲trigger有效时执行,以实现按照执行周期和开始执行时间离散执行通用离散模块功能;其中,当所述离散源模块中的执行周期和开始执行时间参数改变时,所述通用离散模块中对应的参数默认值同步改变。
[0057]
优选地,所述依据所述标准模块包,构建继承同一所述离散源模块的多个任务包,原理见图3,其中,每一所述任务包包括标准模块包和任务模型,还包括:
[0058]
步骤s2-1:新建一个package作为任务包1,并在其下一层级拷贝一个所述标准模块包;
[0059]
步骤s2-2:在所述任务包1下集成构建任务1模型,所述任务1模型使用所述标准模块包中的通用离散模块与modelica标准库中的连续通用模块搭建,其中,所述任务模型输入和输出为结构化数据端口(connector);
[0060]
需要说明的是,所述连续通用模块指只与实时输入相关,与仿真步长无关的模块,例如数学运算模块、逻辑模块等,所述结构化数据端口指由一个或多个不同数据类型的数据或其他结构体数据组成的结构化数据,在modelica语言中不允许直接进行延迟、运算等操作。
[0061]
步骤s2-3:重复步骤s2-1和步骤s2-2,建立任务包2、任务包3、任务包4,根据表1参数修改各任务模型的执行周期和开始执行时间,各任务模型的执行周期和开始执行时间继承自身标准模块包中的离散源模块。
[0062]
优选地,所述实例化所有任务模型,并建立各个任务模型数据端口之间的连接关系,以构建多速率组任务调度离散控制系统模型,针对任务模型之间的连接出现的循环依赖问题,通过用从数据记录模块读写端口数据的操作替代直接连接建立等式关系的方式,解除求解出现的循环依赖问题,具体方法如下:
[0063]
步骤s3-1:建立record类型的数据记录模块busrecord,并在所述数据记录模块中实例化所有任务模型的结构化数据端口;
[0064]
步骤s3-2:所述任务模型的输入数据端口从所述数据记录模块读取数据,输出数据端口向所述数据记录模块写数据,通过端口数据的读写建立各个任务模型之间的连接关系。
[0065]
离散任务1~3内置计数器,每步执行计数器累加1,各个任务执行情况见图4,与时序设计相符。混合系统模型仿真结果如图5所示,时序离散系统与连续对象可混合仿真,符
合预期。其中,所有任务对象输入输出均为结构化数据端口(connector),仿真曲线中只绘制其中一个参数以展示结果。
[0066]
优选地,利用步骤s3的原理可以实现结构化数据端口(connector)的单步/多步延迟模块的构建,模型仿真结果如图6所示。采用非因果方程和算法方程两种方式构建各个任务模型数据端口的单步/多步延迟模块;其中,所述非因果方程为典型的modelica方程,以关键词equation开始,所有方程在仿真时同时求解,无求解先后顺序;其中,所述算法方程区分所述非因果方程,以关键词algorithm开始,求解时按照语句顺序,单步进行赋值操作。非因果方程单步延迟实现方法见表2,n步延迟实现方法见表3。其中,k=1,2,

n-1,n*dt《periodtime。
[0067]
表2单步延迟模块实现方法
[0068]
非因果方程执行时刻非因果方程执行内容算法方程执行顺序sample(starttime,periodtime)out=busout:=bussample(starttime+dt,periodtime)bus=inbus:=in
[0069]
表3 n步延迟模块实现方法
[0070]
非因果方程执行时刻非因果方程执行内算法方程执行顺序sample(starttime,periodtime)out=bus[n]out:=bus[n]sample(starttime+dt,periodtime)bus[n]=bus[n-1]bus[n]:=bus[n-1]
………
sample(starttime+k*dt,periodtime)bus[n-k+1]=bus[n-k]bus[n-k+1]:=bus[n-k]
………
sample(starttime+(n-1)*dt,periodtime)bus[2]=bus[1]bus[2]:=bus[1]sample(starttime+n*dt,periodtime)bus[1]=inbus[1]:=in
[0071]
优选地,所述非因果方程基于软件缓存区写入存在延时完成的原理,假设输出在(starttime,periodtime)时刻完成从所述数据记录模块读数据,则输入在(starttime+dt,periodtime)时刻完成向所述数据记录模块写入数据,其中dt《periodtime,dt为时间,则实现输出相对于输入单步延迟;
[0072]
同理,对于n步延迟,构建数据端口n维数组,记做bus[n],输出在(starttime,periodtime)时刻完成从所述数据记录模块的bus[n]读数据,输入在(starttime+n*dt,periodtime)时刻完成向所述数据记录模块的bus[1]写入数据,而在(starttime+k*dt,periodtime)时刻完成bus[n-k]向bus[n-k+1]写入数据,则输出相对输入n步延迟,其中,k=1,2,

n-1,n*dt《periodtime。
[0073]
优选地,所述算法方程基于软件按照代码顺序执行的原理,在(starttime,periodtime)时刻依次执行输出从所述数据记录模块读数据、输入在(starttime+dt,periodtime)时刻向所述数据记录模块写入数据操作,则实现输出相对于输入单步延迟;
[0074]
同理,对于n步延迟,构建数据端口n维数组,记做bus[n],在(starttime,periodtime)时刻依次执行输出从所述数据记录模块的bus[n]读数据、输入在(starttime+n*dt,periodtime)时刻完成向所述数据记录模块的bus[1]写入数据,而在(starttime+k*dt,periodtime)时刻完成bus[n-k]向bus[n-k+1]写入数据,则输出相对输入n步延迟。
[0075]
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施
方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1