当你模型有一些常量(主要是标定量或者常数)想用别的模型内已经定义好的量,这时模型之间该怎么关联呢?模型和模型之间的输入输出信号如何关联?
应用层模型模块化:为什么需要做这个事情,在平时工作中,随着一些功能策略的复杂,或者需求增多,需要增加各种功能,会让模型越做越大,这时会涉及软件架构,应当把模型可以按照硬件的不同系统以子系统的形式区分开来。然而把所有子系统放在一个模型内,每次只要有一小点改动,在生成代码时整个模型都会参与编译,时间会非常长,而模型模块化之后,未改动的模块不需要再参与编译,将大大提高软件集成的效率。
下面以一个简单的模型例子来解答上述问题。
如图,首先创建一个模型包含3个子系统和一个状态机,为了阐述功能,模型我们尽可能简单。
该模型的输入的两个信号一个来自底层传感器的采集信号,一个来自CAN通讯信号,输出信号一个给到底层驱动执行器,一个信号为CAN通讯,通过CAN通讯和其他控制器进行交互。
A,B,C是应用层模型策略,想象模型非常庞大,急需要模块化以此来提高软件集成效率。
我们将分为3个模块。
A模块如下图:
注意,A模块有3个标定量,我们需要把该3个标定量和输出量aswo_A在sldd文件中进行定义。
为A模块创建sldd文件
创建后在sldd文件内定义上面的4个量,如下图
注意aswo_A 在属性中设置为全局输出变量,因为该变量要给其他模块用,运行以下发现报错,上面定义的量未定义,这是因为模型和sldd文件还没有关联起来,
在模型空白处点击右键,找到“Model Properties”,找到Data选项,选择“Browse”,找到刚刚定义的sldd文件进行关联
再点击运行,发现红框报错都消失了,
B模块:
B模块内部还有变量,如图:
我们发现,有新的变量caliD,也有A模块中出现的caliA变量,我们只需要创建B模块的sldd文件,把新的变量定义好,而A模块出现的变量可以将A模块的sldd文件关联进来即可。
另外,由于B模块的输入信号来自A模块的输出信号,故也需要在B模块的输入信号线属性(这个时候不要去sldd中定义了,不然关联A模块的sldd文件后,会造成A模块的输出信号有2个定义而矛盾)中对其进行定义(将aswo_A定义为全局变量输入),这样B模块的输入信号就和A模块的输出模块相关联了,同时也需要把B模块的输出信号进行全局变量输出,如下图所示:
将新创建的B模块的sldd文件与B模型进行关联,如果现在运行模型,将会报错,因为B模型用的A模型的变量caliA还没有进行关联,如下图进行关联:
点击ADD,找到A模块的sldd文件
运行模型如果还是找不到,模型需要重启再运行,
B模块中输入信号(即A模块输出信号的定义):
B模块模型运行后:
同理可得C模块:
按上述操作再做一遍,运行模型:
到此,模型模块化及相互之间的关联操作完毕