MATLAB: Simulinkモデルのブロックパラメーター変数名を一括で変更する

Simulinkのブロックパラメーターを変数名にしている場合があります。 その変数名を入れ替える場合の例をメモしておきます。

だいたいこんな感じです。場合によっては、そのまま動かないこともあるでしょう。その時は適宜修正します。

%%
%%
modelName = "hoge_model";
blockPaths = find_system(modelName, 'Type', 'Block');
pathNum = numel(blockPaths);

%%
orig_pattern = "orig_pattern";
new_pattern  = "new_pattern";
for ii = 1:pathNum
    blockName = blockPaths{ii};
    % すべてのダイアログ・パラメーターを取得
    dialogueParames = get_param(blockName, 'DialogParameters');
    if numel(dialogueParames)
        % ダイアログ・パラメーター名を取得
        dialogueParamNames = fieldnames(dialogueParames);
        paramNum = numel(dialogueParamNames);
        % すべてのダイアログパラメーターのパラメーター値を取得
        for jj = 1:paramNum
            dialogueParamName = dialogueParamNames{jj};
            param_val = get_param(blockName, dialogueParamName);
            % param_valがstringsでない場合にregexprepがエラーになる。
            idx = strfind(param_val, orig_pattern); % orig_patternが存在するかを検索 
             if numel(idx)
                 fprintf("%s value is %s.\n", dialogueParamName ,param_val)
                 new_string = regexprep(param_val, orig_pattern, new_pattern);
                 fprintf("%s param value %s is converted to  %s.\n", blockName, param_val, new_string)
                 set_param(blockName, dialogueParamName, new_string)
                 param_val = get_param(blockName, dialogueParamName);
                 fprintf("%s value is %s.\n", dialogueParamName ,param_val)
             end
        end
    end
end
%%