Simulink:使用命令行应用掩码参数

时间:2017-10-13 19:43:27

标签: matlab simulink mask

我有一个simulink掩码块,我可以使用open_system(gcb)打开掩码,我可以使用'close_system(gcb)`关闭它。

但是,任何未保存的参数都将被删除。 有没有办法确保保存掩码参数?比如,点击Apply按钮或OK按钮?

我的matlab版本是2011b,此版本中没有Simulink.Mask框架。

由于

2 个答案:

答案 0 :(得分:0)

这是一个有效的解决方案:

首先你必须得到阻止对话框:

function blockDialog = getBlockDialog( blockHandle )

    blockDialog    = [];
    allOpenDialogs = DAStudio.ToolRoot.getOpenDialogs;

    for index = 1:length( allOpenDialogs )

        dialogSource = allOpenDialogs( index ).getDialogSource;

        if isa(dialogSource, 'Simulink.SLDialogSource')
            dialogSourceSID = Simulink.ID.getSID( dialogSource.get_param('handle') );

            if isequal(dialogSourceSID, Simulink.ID.getSID( blockHandle ))
                blockDialog = allOpenDialogs( index );
                break;
            end
        end
    end            
end

其次你必须得到块小部件:

function blockWidget = getBlockWidget( blockDialog)

    blockWidget = [];

    if ~isempty( blockDialog )
        blockWidget = DAStudio.imDialog.getIMWidgets( blockDialog );
    end
end

最后,您使用小部件在对话框上执行想要的操作:

function clickBlockOk( blockHandle )

    blockDialog = getBlockDialog( blockHandle );
    blockWidget = getBlockWidget( blockDialog );

    if ~isempty(blockWidget)
        blockWidget.clickOk( blockDialog );
    end

end

function clickBlockApply( blockHandle )

    blockDialog = getBlockDialog( blockHandle );
    blockWidget = getBlockWidget( blockDialog );

    if ~isempty(blockWidget)
        blockWidget.clickApply( blockDialog );
    end

end

在小部件中,您可以找到其他功能,例如clickHelp,clickRevert,clickCustomButton。

真正奇怪的是你需要对话框来获取小部件,但是你仍然需要使用小部件与对象进行交互的对话....这是我在建筑上没有得到的东西,但是那里有#s也许是一个原因。

答案 1 :(得分:-2)

您可以使用set_param直接从命令行设置(并保存)参数:

set_param('<path-to-your-masked-block>','<name-of-the-parameter-to-set>','value')

请注意,value参数必须作为字符串传递。

更简单的方法是在蒙版中设置一个可以直接从工作区定义的变量。