www.gusucode.com > mbcexpr 工具箱 matlab 源码程序 > mbcexpr/mbcGetBlockValue.m

    function value = mbcGetBlockValue(b,Parameter)
%mbcGetBlockValue get value of parameter from Simulink block
%    value = mbcGetBlockValue(b,Parameter)
%
%    The data source for the block parameter can be the base workspace, the model workspace or a
%    mask workspace. Mixed sources of data are not supported. The model must be compiled for this
%    function to return data. 
%    An [] is returned if a block its data cannot be determined.

%  Copyright 2012-2013 The MathWorks, Inc.

if isnumeric(b)
    % need to use block name
    sys = get_param(b,'Parent');
    b = [sys,'/',get_param(b,'Name')];
end

try
    vars = Simulink.findVars(bdroot(b),'UsedByBlocks',b,'SearchMethod','cached');
catch %#ok<*CTCH>
    vars = [];
end
value = [];
try
    ParameterEvalString = get_param(b,Parameter);
catch 
    return
end

if isempty(vars) || all( strcmp({vars.SourceType},'base workspace') )
    % evaluate expression in base model workspace
    try
        value = evalin('base', ParameterEvalString );
    end
    
elseif all( strcmp({vars.SourceType},'model workspace') )
    % evaluate expression in model workspace
    ws = get_param(bdroot(b),'ModelWorkSpace');
    try %#ok<*TRYNC>
        value = ws.evalin( ParameterEvalString );
    end
    
    
elseif all( strcmp({vars.SourceType},'mask workspace') ) && all(strcmp(vars(1).Source,{vars.Source}))
    % evaluate expression using mask workspace
    
    mv = get_param(vars(1).Source,'MaskWSVariables');
    value= evalMask(mv,ParameterEvalString);
    
else
    % unhandled case
    value = [];
end

function val= evalMask(maskVarInfo,parameterEvalString)
for iMaskLoopCounter=1:length(maskVarInfo)
    eval( [maskVarInfo(iMaskLoopCounter).Name '=maskVarInfo(iMaskLoopCounter).Value;'] )
end
try
    val = eval(parameterEvalString);
catch 
    val = [];
end