仿真和部署软件架构
本示例演示了如何安排组件函数的执行顺序、进行仿真并生成代码。
在此示例中,在 System Composer™ 中模型了一个包含两个组件的简单软件架构。该导出函数组件与一个 Simulink® 行为 (export_model_software_architecture) 相关联。基于速率的组件与一种名为 Simulink 的行为 (rate_based_software_architecture) 相关联。
model = systemcomposer.openModel('RateBasedExportFunctionSoftwareArchitectureModel');
导出函数组件的关联行为模型包含两个函数。每个函数都使用一个与 Inport 模块相连的 Function-Call Subsystem 模块,该模块会生成周期性的函数调用事件,其采样时间分别为 10ms 和 100ms。有关创建导出函数模型的详细信息,请参阅Create Export-Function Model。

如果连接到函数调用输入端口的 Inport 个模块使用 -1 的采样/样本时间,则这些函数是非周期性的。要对非周期函数进行调度与仿真,请创建一个包含显式调度模块(例如 Stateflow® Chart)的测试模型。有关详细信息,请参阅测试软件架构。
基于速率的组件的关联行为模型包含两个子系统,其采样时间分别为 200ms 和 400ms。有关创建基于费率的模型的详细信息,请参阅Create Rate-Based Model。

使用默认执行顺序仿真模型
要对该模型进行仿真,请使用 sim 函数。
sim("RateBasedExportFunctionSoftwareArchitectureModel.slx");要查看基于速率的组件的输出信号,请打开“仿真数据检查器”。转到仿真选项卡,在查看结果部分中,选择数据检查器。

使用函数编辑器安排组件函数
您可以使用 函数编辑器 来更改组件函数的执行顺序,并编辑具有继承采样时间的函数的周期 (-1)。
要打开函数编辑器,请在工具条的模型选项卡中,设计部分,点击函数编辑器。

在函数编辑器的函数选项卡上,您可以查看组件函数并安排其执行顺序。
打开函数编辑器后,模型会自动更新,表中将显示模型中各组件的函数。
如果软件架构发生变更,更新模型按钮会变为黄色,以作为信号提示您需要进行更新才能刷新函数表。
要更改组件函数的顺序,请使用上下箭头,或拖动函数进行排序。
要编辑函数的采样时间,请在函数表中指定其周期。
您可以根据数据依赖关系自动对函数进行排序。要启用自动排序,请选中按依赖关系执行函数复选框。有关详细信息,请参阅使用函数编辑器创建作者函数和函数组。
此外,您还可以使用 systemcomposer.arch.Function 对象的 increaseExecutionOrder 和 decreaseExecutionOrder 函数,通过编程方式更改函数的执行顺序。若要按依赖关系对函数进行排序,可以使用以下命令启用架构模型的 OrderFunctionsByDependency 参数:
set_param('RateBasedExportFunctionSoftwareArchitectureModel','OrderFunctionsByDependency','on');
OrderFunctionsByDependency 参数默认处于禁用状态。
测试软件架构
您可以通过在测试模型中引用该架构来测试软件架构模型。Simulink 模型包含一个 Stateflow Chart (Stateflow) 模块,用于建模更复杂的函数调度。此功能需要 Stateflow 许可证。
在此示例中,Model 模块引用了软件架构 RateBasedExportFunctionSoftwareArchitectureModel,并且针对该软件架构中的每个函数都设有一个函数调用输入端口。若要使用 Stateflow 周期调度器进行仿真,请将图中的函数调用输出连接到 Model 模块的函数调用输入。

为软件架构生成代码
您可以从软件架构模型为导出函数和基于速率的组件的函数生成代码。代码生成需要 Embedded Coder® 许可。
要从架构模型生成代码,请在工具条的 Apps 选项卡上选择 Embedded Coder。然后,在工具条的 C 代码选项卡上,选择生成代码。
生成的代码包含软件架构中每个组件函数的入口点函数。有关导出函数模型代码生成的详细信息,请参阅Generate Code for Export-Function Model。
对于导出函数组件,生成代码包含两个函数,每个函数分别对应关联的行为模型中的一个周期性函数调用事件。

对于基于速率的组件,生成代码为关联行为模型中的每个采样时间都提供了单独的入口点函数。

另请参阅
systemcomposer.createModel | createArchitectureModel | createSimulinkBehavior | increaseExecutionOrder | decreaseExecutionOrder