在Simulink系统中报告任务和块的执行顺序
这个例子展示了如何创建一个报告,该报告显示模型执行的所有任务的信息,以及每个任务中块执行的顺序。
块执行可以根据样本时间分为不同的任务将每个离散的速率视为一个单独的任务选中“配置参数”。导出功能模型和包含某些块的系统(如异步中断或事件触发子系统)也将块执行分组到不同的任务中。看到控制和显示执行顺序有关在Simulink®中查看任务信息和块执行顺序的更多信息。
此图像显示了示例模型的示意图slreportgen_demo_ExecutionOrder
以及模型的任务摘要和块执行顺序。
因为这个模型是一个连续系统,所以主要任务,续
,其样本时间值为0
.在所有的模型中,常数块被分为常数
任务。
MultiplyMu
是非虚拟子系统。默认情况下,块执行顺序列表中的非虚拟子系统条目包含到该子系统的块执行顺序列表的链接。或者,您可以配置ExecutionOrder
报告器选项以嵌套列表的形式显示子系统块。
开放模式
打开一个模型。本例使用单任务模型,即除常量块外的所有块在同一任务中执行。
模型=“slreportgen_ExecutionOrder_example”;open_system(模型);
报告的设置
导入Report Generator API包,这样就不必使用长而完全限定的类名。
进口mlreportgen.report。*进口slreportgen.report。*进口slreportgen.finder。*
创建并打开一个Simulink报表对象。要创建Microsoft®Word、HTML或单文件HTML报表,请更改“pdf”
“多克斯”
”,html”
,或称“html文件”
,分别。
rpt = slreportgen.report。报告(模型+“_Report”,“pdf”);打开(rpt);
添加一个标题页和目录。
titlepage = titlepage (“标题”模型+":执行命令报告",“作者”,“简”);add (rpt, titlepage);toc = TableOfContents ();add (rpt, toc);
报告任务和块执行顺序
查找并遍历模型中的所有系统。
仪= SystemDiagramFinder(模型);而hasNext(finder)系统= next(finder);
创建一个新的章节并添加图表结果。
ch =章(“标题”sprintf (“系统% s”system.Name));添加(ch、系统);
只有当系统是框图或非虚拟子系统时,才报告系统的执行顺序。虚拟子系统中的块按其父块执行顺序报告。
isNonvirtualSubsystem = strcmp(系统。类型,”模型。子系统”)...& & strcmp (get_param(系统。对象,“IsSubsystemVirtual”),“关闭”);如果比较字符串(系统。类型,”模型。立体图”) | | isNonvirtualSubsystem
创建一个执行顺序
部分和一个ExecutionOrder
记者。
eoSect =节(“执行命令”);eoRptr = ExecutionOrder(系统);
对于子系统,设置ExecutionOrder
选项,以便不报告任务详细信息,因为父框图执行顺序已经报告了该信息。
如果isNonvirtualSubsystem eoRptr。ShowTaskDetails = false;结束
添加ExecutionOrder
记者的执行顺序
章节,并将该章节添加到报告中。
add (eoSect eoRptr);添加(ch, eoSect);结束
创建一个部分来包含系统中每个块的详细信息。块包含在ExecutionOrder
块执行顺序列表链接到本节中相应的块详细信息。
blkSect =节(“块”);blkFinder = BlockFinder(系统);结果=找到(blkFinder);添加(blkSect,结果);添加(ch, blkSect);
把这一章添加到报告中。
add (rpt, ch);结束
关闭并查看报表
关闭(rpt);rptview (rpt);
查看样例报告
要查看其他类型模型的执行顺序是如何报告的,请查看本示例中可用的示例报告。
多任务模型
样例模型slreportgen_demo_Multitasking
配置为将每个离散的采样时间视为一个单独的任务。块的采样时间In1_1s
,魔法石,第1章
,SS2
是1秒,block的采样时间In2_2s
是2秒。
该模型还被配置为按样本时间显示用颜色编码的块。以1秒采样时间执行的块为红色,以2秒采样时间执行的块为绿色。多速率块,如速率转换块之间积分器
块和两个子系统,为黄色。要以这种方式以编程方式配置模型,请执行以下命令:
set_param(模型,“SampleTimeColors”,“上”);
该模型的执行顺序报告了两个任务。的触发
任务详细信息表的列报告每个任务的示例时间(以秒为单位)。
模型块按任务划分。速率转换块在两个任务期间执行,因此它包含在两个列表中。但是,在任务期间只执行其输出端口D1
,并且在任务期间只执行其输入端口D2
.
要查看完整的示例报告,执行以下命令:
rptview (“slreportgen_demo_Multitasking_Report.pdf”)
非周期的任务
有些任务(例如由异步中断或事件侦听器创建的任务)不基于样例时间执行。例如,示例模型slreportgen_demo_InitResetTerm
使用三个子系统,执行由事件监听器控制。每个事件监听器都被配置为在接收到初始化、重置或终止函数调用事件时执行子系统。
初始化、重置和终止事件在执行顺序中作为单独的任务报告。它们的执行不直接依赖于模型的采样时间,因此在任务表中没有给它们一个订单号。的SourceBlock
列表示哪个块定义任务。
要查看完整的示例报告,执行以下命令:
rptview (“slreportgen_demo_InitResetTerm_Report.pdf”)
条件执行
样例模型slreportgen_demo_ConditionalExecution
包含一个If块和一个函数调用生成器块,它们控制模型中的某些子系统何时执行。
有条件执行的子系统不会在块执行顺序列表中报告,因为它们不一定在每个时间步骤中都执行。相反,它们被包含在条件执行
在块执行顺序列表之后报告的表。
要查看完整的示例报告,执行以下命令:
rptview (“slreportgen_demo_ConditionalExecution_Report.pdf”)
另请参阅
slreportgen.report.ExecutionOrder