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