MATLAB Answers

Lucas
0

Weird issue with Simulink model

Asked by Lucas
on 28 Aug 2012
At work I’m working with a new version of the model that I’ve been working with. In the previous version of the model I haven’t had any problems at all, but now I’m running into a weird one right now.
If I open the model, do a search (find) on the model with a name, I only get one result. But if I type:
find_system('FindAll', 'on', 'Name', 'VariableName')
it return multiple instances of the name. This causes my tool to do not work properly. Has anyone seen an instance where find returns a number of instances but find_system returns a different number. All the instances of the handles I got from find_system are centered around the single instance returned from find.

  0 Comments

Sign in to comment.

Products

1 Answer

Answer by Albert Yam
on 28 Aug 2012
Edited by Albert Yam
on 28 Aug 2012
 Accepted Answer

find_system(gcs,'FindAll', 'on', 'Name', 'VariableName') %needed a sys
I've never used the edit > find, but when I used find_system, something about finding the subsystem (or root) name of what you are centered on (rather than just everything inside the subsystem). But I don't think that is your problem.
Just did a little test. [const,line,scope] all named. The find_system, found the PORT, and the signal, the edit>find, only found the signal.
Suggest, add BlockType as a parameter.
What Simulink are you using? [6.6.1 here]
EDIT:
>> sx = find_system(gcs,'FindAll', 'on', 'Name', 'sigx')
sx =
1.0e+003 *
1.8550
0.0180
>> set_param(sx(1),'null','1')
??? Error using ==> set_param
port does not have a parameter named 'null'.
>> set_param(sx(2),'null','1')
??? Error using ==> set_param
line does not have a parameter named 'null'.

  7 Comments

Albert Yam
on 28 Aug 2012
Glad it worked out. I had that 'sys' in the first answer, should have followed up on it.
Sorry, I can't help with reference models. [No reference models, in Simulink 6.6.1, still using linked libraries]. I never used the Matlab search (edit/find).
find_system has a lookundermask, followlinks, not sure what variant is. http://www.mathworks.com/help/toolbox/simulink/slref/find_system.html
Alternatively, you can specify to "find_system(ref_block...)". You can also use "find_system(Top/Sub1/Sub2, ..)" if you want to find something somewhere specific.
Albert Yam
on 29 Aug 2012
It is because you have another model or reference library open. I made a reference to the answer when I tested it with Simulink browser and Constant.
Try this as an example, open a new model, open a second new model, open the Simulink browser. Copy a block, say Cosine to the 2 open models. Don't close any model.
Now find_system('FindAll', 'on', 'Name', 'Cosine') will give 3 results, but edit/find will give one.
Edit: Meaning, if you do not define a 'sys' in the find_system, it searches all models open, not just the highlighted one.
Albert Yam
on 29 Aug 2012
Hm.. are you sure that your script, or some callback isn't open_system/load_system anything? I wonder if there is a way to see what systems are open/loaded. I don't know how model referencing works, I'm wondering if it has some affect if it is referenced more than once.
By 6 instances, you just mean 6 windows open right? You can close 5 of them and save, next time you open it should just be the one (or specifically choose what you want to open), just for convenience though.

Sign in to comment.