主要内容

建模语义注意事项

数据传播

代码生成的第一阶段是块图的编译。这个阶段类似于C或C++程序。编译器执行类型检查和预处理。同样,Simulink。万博1manbetx®引擎验证块端口的输入/输出数据类型是否一致,块之间的线宽是否具有预期厚度,以及连接块的采样时间是否一致。

Simu万博1manbetxlink引擎沿信号线将数据从一个块传播到下一个块。传播的数据包括

  • 数据类型

  • 线的宽度

  • 采样时间

可以通过键入来验证Simulink块支持的数据类型万博1manbetx万博1manbetx

在MATLAB®提示,或(从帮助浏览器)单击上面的命令。

Simu万博1manbetxlink引擎通常从源块派生信号属性。例如,“输入块的参数”对话框指定块的信号属性。

在本例中,Inport块的端口宽度为3,采样时间为.01秒,数据类型为double,信号复杂。

下图通过一个简单的框图显示了与import块关联的信号属性的传播。

在本例中,增益块和输出块继承为输入块指定的属性。

采样时间传播

源块中继承的采样时间(例如,根输入端口)有时会导致意外和非预期的采样时间分配。由于块可能指定继承的采样时间,因此一开始可用的信息通常不足以完全编译框图。

在这种情况下,Simulink引擎会将万博1manbetx已知或指定的采样时间传播到已继承采样时间但尚未指定采样时间的块。因此,发动机将继续填充空白(未知采样时间),直到将采样时间分配给尽可能多的块。仍然没有采样时间的块将指定默认采样时间。

对于完全确定性模型(不使用上述规则设置采样时间的模型),您应该明确指定源块的采样时间。源块包括根输入端口块和没有输入端口的块。您不必设置子系统输入端口采样时间。但是,在创建模块化系统时,您可能需要这样做。

未连接的输入隐式连接到地。对于接地块和接地连接,采样时间始终恒定().

所有块都有一个继承的采样时间(Ts= 1)。它们的样本时间是TF-T)/50.

输出具有常量值的块

默认情况下,显示采样时间颜色时,常数块呈现洋红色,表示块输出在模拟过程中具有常数值。在模拟过程中,其输出值也是恒定的下游块,例如获得如果块使用继承的样例时间,则类似地显示为品红色。为这些块生成的代码部分取决于块参数的可调性。

如果您设置了模型配置参数默认参数的行为内联,块参数在生成的代码中不可调。由于块输出是恒定的,代码生成器消除了由于恒定折叠而产生的块代码。如果代码生成器无法折叠代码,或者如果您选择设置以禁用恒定折叠,则模块代码将显示在模型初始化功能中。生成的代码效率更高,因为它在执行期间不计算这些块的输出。

但是,如果配置块或模型,使块参数作为可调变量显示在生成的代码中,则代码生成器将以不同的方式表示块。块参数是可调的,例如:

  • 您可以设置参数默认参数的行为可调。默认情况下,数字块参数显示为全局参数结构的可调字段。

  • 您可以使用可调参数,例如万博1manbetxSimulink.参数对象,该对象使用的存储类不是汽车,作为一个或多个数字块参数的值。无论您为模型配置参数选择的设置如何,这些块参数都是可调的默认参数的行为

如果块参数是可调的,则生成的代码必须在执行期间计算块输出。因此,块代码出现在模型中函数。如果模型使用多个离散速率,则块代码将出现在输出函数中,用于使用块输出的最快下游速率。

子系统块的锁存器

当输入块是触发或函数调用子系统的信号源时,您可以使用闩锁选项在子系统执行时保留输入值。输入块闩锁选项包括:

对于 使用
触发子系统 通过延迟外部信号锁存输入
函数调用子系统 功能调用子系统输出反馈信号的锁存器输入

选择子系统块参数时功能调用子系统输出反馈信号的锁存器输入对于函数调用子系统,代码生成器

  • 在生成的代码中保留锁存,而不考虑可能设置的优化

  • 将闩锁代码放置在子系统输出/更新功能的开始处

有关这些选项的详细信息,请参见的块说明轮廓尺寸

块执行命令

Simulink引万博1manbetx擎编译方框图后,将创建一个模型.rtw文件(类似于从C或C++文件生成的对象文件)。模型.rtw文件包含模型的连接信息以及信号属性。因此,中的定时引擎可以确定何时应执行具有不同速率的块。

不能通过直接调用模型中的块(在手写代码中)来重写此执行顺序。例如,在下一个图中断开的U触发器左侧的模型将其触发器端口连接到地,这可能导致块继承恒定采样时间。调用触发器函数,f (),直接从用户代码不起作用。相反,您应该使用函数调用生成器来指定f ()应执行,如中所示连接的U触发器右边的模特。

代替函数调用生成器,您可以使用另一个可以驱动触发器端口的块。然后,您应该调用模型的主入口点来执行触发器函数。

对于多速率模型,代码生成器的一个常见用途是分别为各个模型生成代码,然后在生成的代码模块之间手工编写I/O代码。这种方法将模型之间的数据一致性的负担交给了模型的开发人员。另一种方法是让Simulink和代码生成器保持速率之间万博1manbetx的数据一致性,并生成用于多任务环境的多速率代码。速率转换块能够接口周期和异步信号。的描述万博1manbetx仿真软件编码器™块库,看到异步事件.有关多速率代码生成的更多信息,请参见多任务执行的建模

代数循环

代数循环是变量之间的循环依赖关系。这阻止了直接计算它们的值。例如,在方程组的情况下

  • x=y+2

  • y = - x

的值xY无法直接计算。

要解决这个问题,要么反复尝试潜在的解决方案万博 尤文图斯xY(以智能的方式,例如,使用基于梯度的搜索)或“求解”方程组。在前面的示例中,将方程组求解为显式形式会导致

  • 2x=2

  • y = - x

  • x = 1

  • y = 1

当具有直接馈通的块的输出(例如获得,总和,产品,传递函数)作为同一块的输入反馈。Simulink引擎通常能够解决包含代数循环的模型,例如下一个图表。万博1manbetx

代码生成器不会生成求解代数循环的代码。此限制包括在反馈路径中使用代数约束块的模型。但是,Simulink引擎通常可以通过在包含代数循环的模型中以特定方式对方程进行分组来消除产生的代数循环。它通过分离更新和输出来实现这一点ut函数以避免循环依赖。有关详细信息,请参阅万博1manbetx代数循环概念

触发子系统中的代数环

虽然Simulink万博1manbetx引擎可以最小化涉及原子和启用子系统的代数循环,但对于某些触发的子系统需要特别考虑。下面的模型和触发的子系统中显示了一个可以生成代码的示例。

默认的Simulink行万博1manbetx为是结合子系统的输出和更新方法,这会创建一个明显的代数循环,即使子系统中的单元延迟块没有直接的馈通。

如果可行,您可以允许Simulink万博1manbetx引擎通过拆分触发子系统和启用触发子系统的输出和更新方法来解决问题。如果希望代码生成器利用此功能,请选择subsystem block parameter(子系统块参数)最小化代数循环出现次数. 选择此参数可避免循环中涉及的触发子系统中出现代数循环警告。

笔记

如果选中此框,则为该子系统生成的代码可能包含拆分输出和更新方法,即使该子系统实际上没有参与循环。此外,如果直接馈通块(如增益块)连接到上述触发子系统中的输入端口,Simulink引擎无法解决问题,代码生成器也无法生成代码。万博1manbetx

模型配置参数最小化代数循环出现次数也可用。选择它使代码生成器能够为包含的模型生成代码模型涉及代数循环的块。