3. 建模规范检查
任务说明
本案例目标是在Simulink环境中配置模型风格指南(Model Advisor风格规则),并自动执行建模规范检查,最终生成检查报告。需要完成:定义一组可复用的建模规范检查配置,通过脚本方式自动运行检查并输出结果,便于在模型开发流程中持续执行。
实现方案
采用MATLAB脚本驱动Model Advisor的方式实现。核心思路:(1) 使用ModelAdvisor系统对象加载模型;(2) 配置需要执行的检查组(此处选用常用的MAAB风格检查子集);(3) 运行检查并导出报告。该方案不依赖图形界面,可在CI环境中批量执行。
代码实现
<code>%% 建模规范自动检查脚本
% 功能:对指定Simulink模型执行MAAB风格规则检查并生成报告
% 依赖:MATLAB + Simulink + Simulink Check(Model Advisor)
function run_style_check(modelName, reportDir)
% 输入参数:
% modelName - 待检查模型名称(.slx文件需在当前路径或已加载)
% reportDir - 报告输出目录(自动创建)
if nargin < 2
reportDir = './style_check_report';
end
% 1. 加载模型(若未加载)
if isempty(find_system('type', 'block_diagram', 'Name', modelName))
load_system(modelName);
end
% 2. 创建Model Advisor配置
mdlAdvObj = ModelAdvisor;
mdlAdvObj.Model = modelName;
% 3. 配置检查组:选择MAAB风格相关规则子集
% 使用内置组 'mathworks.maab.mc_for_simulink'(Simulink建模规范)
checkGroup = 'mathworks.maab.mc_for_simulink';
mdlAdvObj.CheckID = checkGroup;
% 4. 运行检查
fprintf('开始对模型 %s 执行建模规范检查...\n', modelName);
resultObj = run(mdlAdvObj);
% 5. 生成HTML报告
if ~exist(reportDir, 'dir')
mkdir(reportDir);
end
reportFile = fullfile(reportDir, [modelName '_style_report.html']);
generateReport(resultObj, reportFile, 'html');
% 6. 汇总结果到命令行
totalChecks = numel(resultObj);
passCount = 0;
warnCount = 0;
failCount = 0;
for i = 1:totalChecks
switch resultObj(i).Status
case 'Passed'
passCount = passCount + 1;
case 'Warning'
warnCount = warnCount + 1;
case 'Failed'
failCount = failCount + 1;
end
end
fprintf('检查完成。总计:%d,通过:%d,警告:%d,失败:%d\n', ...
totalChecks, passCount, warnCount, failCount);
fprintf('报告已生成:%s\n', reportFile);
% 7. 若存在失败项,输出详细信息便于定位
if failCount > 0
fprintf('\n--- 失败项详情 ---\n');
for i = 1:totalChecks
if strcmp(resultObj(i).Status, 'Failed')
fprintf('[失败] %s\n', resultObj(i).Title);
fprintf(' 原因: %s\n', resultObj(i).Description);
end
end
end
end
使用方式
% 在MATLAB命令窗口执行(示例模型名为 demo_model.slx)
run_style_check('demo_model', './report_output');
验证方法
准备一个包含常见风格问题的测试模型(如信号命名不规范、缺少注释、端口命名不符合MAAB规则等),执行上述脚本。判定标准:(1) 脚本正常结束无报错;(2) 命令行输出检查统计结果,其中失败项数量大于0;(3) 在report_output目录下生成demo_model_style_report.html文件,用浏览器打开后能看到具体违规项及模型中的定位信息。若模型完全符合规范,则失败项为0,报告显示全部通过。
关键说明
本脚本使用Simulink Check自带的MAAB检查组mathworks.maab.mc_for_simulink,该组覆盖信号命名、端口连接、模块参数等常用风格规则。若需自定义规则,可在Model Advisor配置管理器中创建新的检查组,然后将checkGroup变量替换为自定义组的ID。脚本中的resultObj结构体数组包含每条检查的状态、标题和描述信息,可直接用于后续的CI集成或自动门禁判断。