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模型(.slx) 配置检查规则 MAAB风格组 (mc_for_simulink) 执行检查 ModelAdvisor.run() 输出 HTML报告 检查结果统计 通过 (Passed) N/A 警告 (Warning) N/A 失败 (Failed) N/A 验证判定标准 ✓ 脚本正常执行完毕,无MATLAB报错 ✓ 命令行输出统计结果(通过/警告/失败数量) ✓ 指定目录下生成HTML报告,可查看违规详情与模型定位

关键说明

本脚本使用Simulink Check自带的MAAB检查组mathworks.maab.mc_for_simulink,该组覆盖信号命名、端口连接、模块参数等常用风格规则。若需自定义规则,可在Model Advisor配置管理器中创建新的检查组,然后将checkGroup变量替换为自定义组的ID。脚本中的resultObj结构体数组包含每条检查的状态、标题和描述信息,可直接用于后续的CI集成或自动门禁判断。