Simulink:使用命令行应用封装参数

Simulink: Apply mask parameters using command line

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

但是,任何未保存的参数都将被删除。 有什么方法可以确保保存掩码参数吗?例如,单击“应用”按钮或“确定”按钮?

我的matlab版本是2011b,Simulink.Mask这个版本没有框架

谢谢

您可以使用 set_param:

直接从命令行设置(并保存)您的参数
set_param('<path-to-your-masked-block>','<name-of-the-parameter-to-set>','value')

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

一个更简单的方法是在您的掩码中设置一个变量,您可以直接从您的工作区定义该变量。

这是一个可行的解决方案:

首先你必须得到块对话框:

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。

真正奇怪的是,您需要对话框来获取小部件,但您仍然需要对话框来使用小部件与之交互....这是我在架构上没有得到的东西,但也许有原因。