STEP_FUNCTION
function [x,y,typ]=STEP_FUNCTION(job,arg1,arg2)
x=[];y=[],typ=[]
select job
case 'plot' then
standard_draw(arg1)
case 'getinputs' then
[x,y,typ]=standard_inputs(arg1)
case 'getoutputs' then
[x,y,typ]=standard_outputs(arg1)
case 'getorigin' then
[x,y]=standard_origin(arg1)
case 'set' then
// paths to updatable parameters or states
ppath = list(1)
newpar=list();
for path=ppath do
np=size(path,'*')
spath=list()
for k=1:np
spath($+1)='model'
spath($+1)='rpar'
spath($+1)='objs'
spath($+1)=path(k)
end
xx=arg1(spath)// get the block
execstr('xxn='+xx.gui+'(''set'',xx)')
if diffobjs(xxn,xx) then
model=xx.model
model_n=xxn.model
if ~is_modelica_block(xx) then
modified=or(model.sim<>model_n.sim)|..
~isequal(model.state,model_n.state)|..
~isequal(model.dstate,model_n.dstate)|..
~isequal(model.rpar,model_n.rpar)|..
~isequal(model.ipar,model_n.ipar)|..
~isequal(model.label,model_n.label)
if or(model.in<>model_n.in)|or(model.out<>model_n.out) then
// input or output port sizes changed
needcompile=1
end
if or(model.firing<>model_n.firing) then
// initexe changed
needcompile=2
end
if model.sim=='input'|model.sim=='output' then
if model.ipar<>model_n.ipar then
needcompile=4
end
end
if or(model.blocktype<>model_n.blocktype)|..
or(model.dep_ut<>model_n.dep_ut) then
// type 'c','d','z','l' or dep_ut changed
needcompile=4
end
if (model.nzcross<>model_n.nzcross)|(model.nmode<>model_n.nmode) then
// size of zero cross changed
needcompile=4
end
if prod(size(model_n.sim))>1 then
if model_n.sim(2)>1000 then // Fortran or C Block
if model.sim(1)<>model_n.sim(1) then //function name has changed
needcompile=4
end
end
end
else //implicit block
//force compilation if an implicit block has been edited
modified=or(model_n<>model)
eq=model.equations;eqn=model_n.equations;
if or(eq.model<>eqn.model)|or(eq.inputs<>eqn.inputs)|..
or(eq.outputs<>eqn.outputs) then
needcompile=4
end
end
// parameter or states changed
arg1(spath)=xxn// Update
newpar(size(newpar)+1)=path// Notify modification
end
end
x=arg1
y=needcompile
typ=newpar
case 'define' then
model = mlist(..
['model','sim','in','in2','intyp','out','out2','outtyp','evtin','evtout','state','dstate',..
'odstate','rpar','ipar','opar','blocktype','firing','dep_ut','label','nzcross','nmode','equations'],..
'csuper',[],[],1,-1,[],1,[],[],[],[],list(),..
mlist(['diagram','props','objs'],..
tlist(..
['params','wpar','title','tol','tf','context','void1','options','void2','void3','doc'],..
[600,450,0,0,600,450],['STEP_FUNCTION','./'],[0.0001;1.000E-06;1.000E-10;100001;0;0],14,..
' ',[],..
tlist(['scsopt','3D','Background','Link','ID','Cmap'],list(%t,33),[8,1],[1,5],..
list([5,0],[4,0]),[0.8,0.8,0.8]),[],[],list()),..
list(..
mlist(['Block','graphics','model','gui','doc'],..
mlist(..
['graphics','orig','sz','flip','exprs','pin','pout','pein','peout','gr_i','id',..
'in_implicit','out_implicit'],[82.230597,652.6813],[40,40],%t,['1';'0';'1'],[],4,2,2,..
list(['txt=[''Step''];';'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'');'],8),..
emptystr(),[],[]),..
mlist(..
['model','sim','in','in2','intyp','out','out2','outtyp','evtin','evtout','state','dstate',..
'odstate','rpar','ipar','opar','blocktype','firing','dep_ut','label','nzcross','nmode','equations'],..
list('step_func',4),[],[],1,1,[],1,1,1,[],..
[],list(),[0;1],[],list(),'c',1,[%f,%t],emptystr(),0,0,list()),'STEP',list()),..
mlist(['Link','xx','yy','id','thick','ct','from','to'],..
[102.2306;102.2306;63.708992;63.708992;102.2306;102.2306],..
[646.96701;622.2884;622.2884;711.98452;711.98452;698.39559],'drawlink',[0,0],[5,-1],..
[1,1,0],[1,1,1]),..
mlist(['Block','graphics','model','gui','doc'],..
mlist(..
['graphics','orig','sz','flip','exprs','pin','pout','pein','peout','gr_i','id',..
'in_implicit','out_implicit'],[150.80203,662.6813],[20,20],%t,'1',4,[],[],[],list(' ',8),..
emptystr(),[],[]),..
mlist(..
['model','sim','in','in2','intyp','out','out2','outtyp','evtin','evtout','state','dstate',..
'odstate','rpar','ipar','opar','blocktype','firing','dep_ut','label','nzcross','nmode','equations'],..
'output',-1,[],1,[],[],1,[],[],[],[],list(),[],1,list(),..
'c',[],[%f,%f],emptystr(),0,0,list()),'OUT_f',list()),..
mlist(['Link','xx','yy','id','thick','ct','from','to'],[130.80203;150.80203],..
[672.6813;672.6813],'drawlink',[0,0],[1,1],[1,1,0],[3,1,1]))),[],list(),'h',[],[%f,%f],emptystr(),..
0,0,list())
gr_i=[ 'thick=xget(''thickness'')'
'pat=xget(''pattern'')'
'fnt=xget(''font'')'
'xpoly(orig(1)+[0.071;0.413;0.413;0.773]*sz(1),orig(2)+[0.195;0.195;0.635;0.635]*sz(2),'"lines"')';
'xset(''thickness'',thick)'
'xset(''pattern'',pat)'
'xset(''font'',fnt(1),fnt(2))']
x=standard_define([2 2],model,[],gr_i)
end
endfunction