Matlab脚本辅助Simulink建模

Matlab/Simulink建模从形式上可以分为交互式建模和编程式建模。交互式建模就是大家最常用的方式,即通过鼠标操作的方式来选择模块、编辑模块属性、连接模块等,这种方式可以快速的建立单个功能模块,实现我们建模或仿真的需求。编程式建模一般用的不多,主要存在于批量建立相似功能模块或者整理模型建模规范等场景,例如,对于某ECU,它需要接收来自其他节点的几十帧报文,对每一帧报文信号都需要做相似的信号处理,采用编程式建模就会大大提高工作效率。

今天我们就谈编程式建模的两个小方法:自动生成输入输出接口和输入输出接口连线自动对齐​。​


自动生成输入输出接口

在做模型开发时,架构工程师往往已经把功能模块输入输出信号的数量和名称定义好了,软件工程师只需要搭建功能逻辑即可。有些功能模块的输入输出接口加起来可能有上百个,去逐个创建会很繁琐,这时用编程式建模就会很方便。

假如功能模块的输入输出信号已经定义在了excel文件中,如下图所示:

Matlab脚本辅助Simulink建模

第一列是输入信号名称,第二列是输出信号名称。我们运行以下代码:

Matlab脚本辅助Simulink建模


运行后如下图,输入输出结果自动创建完成,效果很好,符合预期。

Matlab脚本辅助Simulink建模

核心代码就是add_block指令,add_block(source,) 官方解释是从库或模型中将模块 source 的副本添加到指定的目标模型和模块名称。

以输入接口Inport创建为例具体解释:

for i=1:inportLength;

add_block('simulink/Commonly Used Blocks/In1',strcat('newModel/',name{i,1}),'Position',[50 100+i*50 80 115+i*50]);

end

1、这里我们从库模型中提取source模块,即simulink/Commonly Used Blocks/In1。

2、放到指定的模型newModel中,并命名为name{i,1}。这里用For循环依次调用了元胞数组里每一行的第一列字符串。

3、定义了每一个输入接口的位置,即定义属性Position为[50 100+i*50 80 115+i*50],这个1x4的向量依次定义了接口的左、上、右、下的绝对坐标位置。


输入输出接口连线自动对齐

上面建立的输入输出接口后,很容易手动封装成子系统,然后把子系统框图稍微拉大一点,就变成如下图所示的样子。

Matlab脚本辅助Simulink建模

同样的问题,当输入输出接口数量很多的时候,调整输入输出接口与子系统之间的连线也是比较浪费时间的,这时我们同样可以采用编程式建模来自动对齐连线。

运行以下代码:

Matlab脚本辅助Simulink建模

运行后结果如下图,连线自动对齐,很完美,符合预期。

Matlab脚本辅助Simulink建模

核心代码包括get_param、find_system、set_param。

1、get_param(Object,) 用于返回指定模型或模块对象的指定参数的名称或值,我们这里用来获取子系统的接口位置信息。

2、find_system(System,) 用于返回指定系统中满足指定条件的对象,我们这里用来找到所有Inport接口。

3、set_param(Object,,) 用于将指定模型或模块对象上的参数设置为指定的值,我们这里把子系统接口位置依次给输入输出接口用于定义其位置,保证二者对齐。


以上,按个人理解介绍了两种编程式建模方法和Matlab部分函数用法,算是一个抛砖引玉吧。大家有不理解的地方,可以经常查阅Matlab自带的帮助文档,里面有更加详细全面的介绍。


分享到:


相關文章: