How to find number of input and output ports of an unknown simulink model ?

157 visualizaciones (últimos 30 días)
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.

Respuesta aceptada

Paul
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
Shiv Nileshkumar Matliwala
Shiv Nileshkumar Matliwala el 12 de Dic. de 2022
Hello Paul,
I just need some help from you. Can yu please tell me how can I get the data type of a signal in simulink model programmatically ??
for example, I have 2 signals A and B between Bus selector and bus creator blocks in simulink model. Now I want to find the data type of signals A and B.
Can you suggest me how can I find this data types and how can I set that with 'Boolean' ?

Iniciar sesión para comentar.

Más respuestas (1)

Florian Bidaud
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
Shiv Nileshkumar Matliwala
Shiv Nileshkumar Matliwala el 24 de Nov. de 2022
I had one more doubt that if i have one unknown simulink model for which i dont dont how many blocks are there. So is there any way I can find like how many blocks are there inside the simulink model ??
Florian Bidaud
Florian Bidaud el 24 de Nov. de 2022
Yes, you can again use :
length(get_param('yourSimulinkSystem','Blocks'))

Iniciar sesión para comentar.

Categorías

Más información sobre Programmatic Model Editing en Help Center y File Exchange.

Productos


Versión

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by