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