一种Simulink的自动布局方法与流程

文档序号:18824919发布日期:2019-10-09 01:25阅读:4112来源:国知局
一种Simulink的自动布局方法与流程

本发明涉及图形化建模工具matlab/simulink领域,具体是一种simulink的自动布局方法。



背景技术:

matlab是美国mathworks公司出品的商业数学软件,主要用于算法开发、数据可视化、数据分析以及数值计算等,在科学研究及工程计算等多个领域得到广泛的应用。simulink是matlab中的一种图形化建模工具,被广泛应用于线性系统、非线性系统、数字控制及数字信号处理的建模和仿真中。simulink提供了图形化的设计界面,以模块为功能单位,通过信号线进行连接,用户通过模块的参数设置对话框来设置参数,仿真的结果以数值和图像等方式展示。

在使用simulink工具进行建模的时候,随着模型复杂度的增加,模型的输入输出接口的数量也会增加;模型之间的关系也会越来越多越来越复杂,信号线的数量也会越来越多,长度越来越长,形状越来越复杂。另一方面,simulink并不提供自动布局功能,所有模块的大小,位置,信号线的形状都需要手动设置。这一切都使得模型的质量越来越低,模型本身越来越难以维护,给开发者造成很大的负担。

simulink模型文件是一种树形的层次关系,树形的每个节点都是模块,顶层是根模块。模块有多种类型,比如子系统,输入,输出,标签等。模块为子系统类型的可能有若干个子模块。根模块就是子系统类型。每个模块都可能有若干个输入,若干个输出。一个模块的输出可能对应另一个模块的输入。一个子系统模块下可以添加若干个输入模块和若干个输出模块,和外界通讯。

在simulink图形建模环境下,如果一个模块的输入对应另一个模块的输出,则用连线连接来表示对应数据的传输。连线有单向的箭头,表示数据传输的方向。simulink图形建模环境启动的时候,默认会显示根模块的视图。如果某个子模块下面还有子模块,则可以通过双击或者右键打开的方式来显示子模块的视图。

连线可以确定数据的传输方向和模块的执行顺序。如果模块a的输出连接模块b的输入,则在仿真的过程中模块a先执行,模块b后执行。使用连线的缺点是当模块的数量很多,模块的输入和输出数量很多,输入和输出之间的连线会非常杂乱无章。这时候可以选择用标签模块来取代连线。标签模块的读写类型有两种类型,写类型和读类型。在输出端和输入端创建同名的标签模块,分别设置为写和读类型,就可以把中间的连线删除,同名的标签模块,写类型只能有一个,读类型可以有多个。另外标签模块的可见性有三种,分别是local,scoped和global。local标签模块是指使用相同名字的标签模块都在同一个子系统模块里,类似于编程语言里的局部变量。scoped标签模块是使用相同名字的标签模块都在同一个子系统模块或者一个原子系统里。global标签模块是指使用相同名字的标签模块可以在模型里的任何位置。

标签模块的缺点是难以确保模块的执行顺序。如果模块a的输出连接模块b的输入,输入和输出都通过标签连接,则有可能模块b先执行,模块a后执行,造成仿真结果不可信。如果想确保模块的执行顺序,必须手动设置每个模块的执行顺序,非常繁琐。

另外,由于建模水平的限制,很多人通常用一根线表示一个标量(比如一个浮点数)。当传输一个3乘3的矩阵的时候,就需要连9根线,非常麻烦,这个时候完全可以用一根线来表示一个3乘3的矩阵,优化连线的数量。



技术实现要素:

本发明的目的在于提供一种simulink的自动布局方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:

一种simulink的自动布局方法,包括以下步骤:

s1:获取模型所有关于布局的信息,包括模块的信息和模块之间的树形层次关系。

s2:整理子系统模块下面的标签类型模块。如果有局部标签模块,就删除局部标签模块,用连线连接;如果有非局部标签模块,就先遍历整个模型的模块树,找到所有相同名字的非局部标签模块(scoped或者global类型),然后按读写类型分两组;写类型只有一个,读类型可以为多个;写类型模块命名为a,在读类型组中遍历,取当前的读类型模块命名为b。另外创建图的数据结构保存从一个写类型模块到若干个读类型模块的连接信息。

s3:整理模块的输入和输出数据。把输入数据中所有维度为1,且数据类型相同的数据整合成一个多维的输入数据。把输出数据中所有维度为1,且数据类型相同的数据整合成一个多维的输入数据。

s4:从顶层的根模块开始遍历处理所有的模块和子模块。

s5:在处理每个模块的时候,把模块的信息转成graphviz的输入,然后调用graphviz的算法得到自动布局的结果,然后设置模块的布局信息,包括模块位置、高度、宽度等。

s6:本方法通过matlab提供的接口添加到simulink的模型编辑菜单里,用户在使用simulink的时候右键弹出菜单,选择并使用本方法。

s7:本方法在使用的时候,先弹出对话框,或者提供配置文件,让用户选择设置布局的一些基础信息,比如字体、字体大小、布局间隔等。

作为本发明进一步的方案:所述s1中模块的信息包括位置、高度、宽度、模块的显示文本、输入的数据类型、输入个数、输出的数据类型和输出的个数。

作为本发明进一步的方案:所述s2处理标签模块连接步骤为:

步骤一:开始连接两个模块a和b。

步骤二:如果两个模块在同一个子系统模块里,则删除标签模块,用连线连接,退出循环,取下一个读类型模块命名为b,重新开始步骤一,直到遍历结束。

步骤三:遍历整个模型的模块树,确定两个模块的层次。根模块的层次为0,根模块的子模块的层次为1,依次递增,并获取两个模块所有的父模块队列。父模块队列的第一个是根模块。

步骤四:获取模块b可达的父模块c:在b模块的父模块队列中逆序遍历,如果模块已经在图里,则找到合适的父模块c,退出遍历;如果模块在a模块的父模块队列中,则找到合适的父模块c,退出遍历。一直遍历到根模块为止。根模块是所有模块的父模块。

步骤五:从模块a到模块c,创建输入输出模块并连接起来;从模块b到模块c,创建输入输出模块并连接起来。最后在模块c处,把输入输出模块通过连线连接起来,并保存在图里。

作为本发明进一步的方案:所述s5中模块的信息包括位置、高度、宽度、模块的显示文本、输入的数据类型、输入个数、输出的数据类型和输出的个数。

作为本发明再进一步的方案:所述s6具体是创建matlab脚本文件sl_customization.m,把自定义的菜单项添加到simulink的模型编辑菜单里。当用户启动simulink时,右键显示自定义的菜单。当用户点击自定义菜单项时,可以执行用户预定义的操作。

与现有技术相比,本发明的有益效果是:

本发明能删除标签类模块,用连线代替,这样可以确定模块之间的执行顺序,避免逻辑错误;本方法能精简输入输出数据的个数,最小化连线的数量,使模型更加简洁;本方法通过使用第三方开源的自动布局引擎,自动优化模型的布局,大大提高模型的布局质量。

附图说明

图1为一种simulink的自动布局方法中流程图的结构示意图。

图2为一种simulink的自动布局方法中连线连接的结构示意图。

图3为一种simulink的自动布局方法中标签连接的结构示意图。

图4为一种simulink的自动布局方法中处理非局部标签模块的结构示意图。

图中:1-

具体实施方式

下面结合具体实施方式对本专利的技术方案作进一步详细地说明。

请参阅图1-4,一种simulink的自动布局方法,包括以下步骤:

s1:获取模型所有关于布局的信息,包括模块的信息和模块之间的树形层次关系。模块的信息包括位置、高度、宽度、模块的显示文本、输入的数据类型、输入个数、输出的数据类型,输出的个数等。

s2:整理子系统模块下面的标签类型模块。如果有局部标签模块,就删除局部标签模块,用连线连接。如果有非局部标签模块,就先遍历整个模型的模块树,找到所有相同名字的非局部标签模块(scoped或者global类型),然后按读写类型分两组。写类型肯定只有一个,读类型可以为多个。写类型模块命名为a。在读类型组中遍历,取当前的读类型模块命名为b。另外创建图的数据结构保存从一个写类型模块到若干个读类型模块的连接信息,处理标签模块连接步骤为:

步骤一:开始连接两个模块a和b。

步骤二:如果两个模块在同一个子系统模块里,则删除标签模块,用连线连接,退出循环,取下一个读类型模块命名为b,重新开始步骤一,直到遍历结束。

步骤三:遍历整个模型的模块树,确定两个模块的层次。根模块的层次为0,根模块的子模块的层次为1,依次递增。并获取两个模块所有的父模块队列。父模块队列的第一个一定是根模块。

步骤四:获取模块b可达的父模块c:在b模块的父模块队列中逆序遍历,如果模块已经在图里,则找到合适的父模块c,退出遍历;如果模块在a模块的父模块队列中,则找到合适的父模块c,退出遍历。一直遍历到根模块为止。根模块肯定是所有模块的父模块。

步骤五:从模块a到模块c,创建输入输出模块并连接起来;从模块b到模块c,创建输入输出模块并连接起来。最后在模块c处,把输入输出模块通过连线连接起来,并保存在图里。

s3:整理模块的输入和输出数据。把输入数据中所有维度为1,且数据类型相同的数据整合成一个多维的输入数据。把输出数据中所有维度为1,且数据类型相同的数据整合成一个多维的输入数据。

s4:从顶层的根模块开始遍历处理所有的模块和子模块。

s5:在处理每个模块的时候,把模块的信息包括位置、高度、宽度、模块的显示文本、输入的数据类型、输入个数、输出的数据类型,输出的个数等转成graphviz的输入,然后调用graphviz的算法得到自动布局的结果,然后设置模块的布局信息,包括模块位置、高度、宽度等。

s6:本方法通过matlab提供的接口添加到simulink的模型编辑菜单里,用户在使用simulink的时候右键就可以弹出菜单,选择并使用本方法。具体是创建matlab脚本文件sl_customization.m,把自定义的菜单项添加到simulink的模型编辑菜单里。当用户启动simulink时,右键就可以显示自定义的菜单。当用户点击自定义菜单项时,就可以执行用户预定义的操作。

s7:本方法在使用的时候,先弹出对话框,或者提供配置文件,让用户选择设置布局的一些基础信息,比如字体、字体大小、布局间隔等。

本发明的工作原理是:本发明用到graphviz布局引擎。graphviz是贝尔实验室开发的一个开源的工具包,它使用一个特定的dsl(领域特定语言)-dot作为脚本语言,然后使用布局引擎解析脚本并完成自动布局。simulink模型文件是一种树形的层次关系,顶层是根模块。每个模块都可能有若干个子模块。每个模块当下的若干个模块之间通过连线连接,表示数据的传输。连线有单向的箭头,表示数据传输方向。有时候会用标签类模块来代替连线。本发明先遍历所有的模块,获取模块的信息(包括输入输出个数,输入输出数据类型,布局信息等)以及模块之间的树形层次关系。然后如果用户想处理标签类模块,则删除标签类模块,用连线代替。如果用户想优化同一维度的输入输出数据,可以整理输入输出数据,把所有维度为1,数据类型相同的输入输出数据用多维的输入输出数据代替。最后用graphviz来调整模块的布局设置。

上面对本专利的较佳实施方式作了详细说明,但是本专利并不限于上述实施方式,在本领域的普通技术人员所具备的知识范围内,还可以在不脱离本专利宗旨的前提下做出各种变化。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1