How to find number of input and output ports of an unknown simulink model ?
164 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Shiv Nileshkumar Matliwala
el 24 de Nov. de 2022
Comentada: Chong Wang
el 19 de Jun. de 2023
I have three different simulink models Model1, Model2 and Model3. Now I am adding these all models into one single blank Model.
Here, I dont know that how many input ports are there and how many output ports are there.
So to connect the Model1, Model2 and Model3, I need to identify first how many input ports and output ports are there in these all three models Model1, Model2, Model3.
Then suppose first model has input ports like A and B and The second model has output ports like A and E
Then I want to do the 'for' loop which will one by one check all the input ports with all the output ports and when the port name like A matches with any output port name A then that input port and output port should be connected.
Everything I need to do it with matlab script.
so, any idea How to do this or any suggetions how can I find the total number of input and output ports of the simulink model ?
Please help me in this.
Thank you.
0 comentarios
Respuesta aceptada
Paul
el 24 de Nov. de 2022
Hi Shiv,
I started out with this model with three subsystems.
Then I ran this code:
% Handles to the subsystems
subsystems = find_system(get_param(gcs,'Handle'),'BlockType','SubSystem');
% Handes to the Inport blocks of the subsystems
inports = find_system(subsystems,'BlockType','Inport');
% Names of the Inport blocks of the subsystems
inportnames = get_param(inports,'Name');
% Handles to the Outport blocks of the subsystems
outports = find_system(subsystems,'BlockType','Outport');
% Names of the Outport blocks of the subsystems
outportnames = get_param(outports,'Name');
% Cell array of structures of port handles to the ports of the subsystems
porthandles = get_param(subsystems,'PortHandles');
% Convert to structure array
porthandles = [porthandles{:}];
% Vector of handles to the input ports
inporthandles = [porthandles.Inport];
% Vector of handles to the output ports
outporthandles = [porthandles.Outport];
% match up the port names. Assumes any matches between inport names and outport names are 1-to-1
[Lia,LocB]=ismember(inportnames,outportnames);
% connect the ports
add_line(gcs,outporthandles(LocB(Lia)),inporthandles(Lia));
The result was this model
Maybe this code can be adapted to your needs.
9 comentarios
Más respuestas (1)
Florian Bidaud
el 24 de Nov. de 2022
Editada: Florian Bidaud
el 24 de Nov. de 2022
Hi,
You need to use the function get_param with 'Ports' as a parameter, for each subsystem of your model.
The first and second element of the array will give you the input and output ports numbers
load_system('system.slx')
ports_data = get_param('system/Subsystem','Ports')
input_ports_number = ports_data(1)
output_ports_numer = ports_data(2)
4 comentarios
Florian Bidaud
el 24 de Nov. de 2022
Yes, you can again use :
length(get_param('yourSimulinkSystem','Blocks'))
Ver también
Categorías
Más información sobre Programmatic Model Editing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!