文章目录
1 模型诊断
模型诊断配置的目的是,当我们编译一个Simulink模型时,会自动为我们诊断该模型中的错误或潜在风险,以便提早修复该类问题。
在Simulink模型上方的工具栏点击Model Settings(小齿轮形状),打开配置参数。点击左侧的Diagnostics选项卡,就可以在右侧看到所有的诊断配置项。
例如Algebraic loop右侧对应的是warning,就表示运行模型时,如果检测出代数环,则向用户报出警告。用户也可以将其手动配置为error或者none,代表检测出代数环向用户报出error,或者不报警。
Simulink默认的模型诊断配置是比较宽松的,在工程开发中通常会将其配置得更为严格,以便在模型编译阶段警告开发者其中的错误和风险。后文中,博主会介绍一些常用的诊断配置,以及其应用场景。这些配置是基于MAB建模规范的推荐以及工程实践。
2 诊断配置及场景
本章节列举几个常见的诊断配置及其对应的场景。在实际工作经验中,这部分诊断可以指出开发者常见的错误。
2.1 Inf or NaN block output
该选项表明,当模块输出的值为 Inf 或 NaN 时要执行的诊断操作,通常将其配置为error,默认为none,配置界面如下图。
Inf 或 NaN 是软件运行时的不合理的输出量,例如除零时会输出Inf(可以理解为无穷),可以通过配置为error,使得在运行软件时报出错误。
2.2 Wrap on overflow
该选项表明,当整形类型信号的值溢出信号数据类型时进行的诊断操作,通常将其配置为error,默认为warning,配置界面如下图。
当整形数运算溢出了其数据类型所能表达的数值时,数值会默认转换。
2.3 Unconnected line
该选项表明,当模型包含未连接的信号线时的诊断操作,通常将其配置为error,默认为none。类似的还有未连接的输入或输出端口,配置界面如下图。
在开发中有的时候会忘记连接信号线,但是模型也能编译并生成代码。这种情况下,信号没有正确地传输,导致软件漏洞。
2.4 Detect read before write
该选项表明,写之前读内存中的值时的诊断操作,通常将其配置为Enable all as errors,默认为Use local settings,配置界面如下图。
在代码中,局部变量的值如果未经初始化或赋值,可能是任意值。直接读取该值时不安全的行为。如下图的DataStoreRead模块直接读取内存中变量A的值,但是在此之前没有经过任何赋值,模型运行时就会诊断出错误。
2.5 Algebraic loop
该选项表明,模型中存在代数环,通常将其配置为error,默认为warning,配置界面如下图。
代数环指的是当模型中的输入直接使用了输出信号的场景,如下图所示的累加器,希望在每次输出的基础上加一,所以将输出反馈到输入。这样,模型就无法进行正确的求解。
解决代数环的方法是,在输出反馈的输入的时候加一个Unit Delay模块,即使用上一周期的输出作为本周期的输入。
3 Model Advisor配置模型诊断
上一章节列出的诊断项举例只是所有诊断配置中的一部分,是开发过程中常见的一些错误。实际上,可以在Model Advisor工具中,根据一些模板来检查当前模型的配置项是否符合标准。本章节会以ISO 26262标准中推荐的模型配置项为例,向读者演示如果使用Model Advisor工具配置模型诊断。
1)首先,在Simulink模型上方切到MODELING选项卡中,点击Model Advisor;
2)在弹出的System Selector窗口选择最顶层模型,即和你的Simulink模型相同的名字;
如果模型中有多个子系统,这里的System Selector窗口中会根据每一级子系统折叠或者展开。
3)在打开的Model Advisor中根据层级找到需要勾选的配置项检查,这里26262标准的层级路径为Model Advisor — By Task — Modeling Standards for ISO 26262 — High-Integrity Systems — Configuration,将Configuration下面所有和诊断相关的选项全部勾选上;
其实该路径下不止包含模型诊断配置,还有生成代码配置,代码优化配置,接口配置等。这里全部按照ISO 26262标准推荐的项目进行检查。
3)点击上方的Run Checks按钮,等待检查结束就会出现报告;
未通过检查的项目会标记为红色感叹号,选中该项目就可以在右侧报告页中显示出具体的条目。其中包含了参数项,当前值和推荐值。单击链接就可以直接打开配置窗口中对应的位置,并按照推荐值修改。
4)另外,也可以通过选中条目,点击上方的Fix按钮一键修改配置项;
这些选项中,除了代码生成的System Target File选项需要手动修改,其他都可以通过fix解决。将System Target File配置成Embedded Coder的方法如下:
具体代码生成相关配置地解释会在以后的博客中。
5)将所有的未通过的配置都一键修改,重新对Configuration文件夹下的配置运行Model Advisor检查,得到全部通过;
4 总结
本文介绍了模型诊断配置,通过配置一部分诊断项为error后,有助于工程师减少开发中的问题,并且规范开发流程。