How to pass a variable from one file to another?

Hi all, I have a matlab function block in Simulink with a feedback. The input to the function is a constant that changes with the time. The function calls another function includes ode15s (File1) that must get their equations from another file (File2). I want to pass the value of B from the main matlab function file to File2 to be used there. I used global but that did not work. Any idea?
Matlab Function File:
function y = fcn(B)
...
y=File1
%-----------------------------
File 1
function [t,x]=File1
....
[t,x] = ode15s(@File2,tspan,x0,opt);
%-----------------------------------
File2
function out= File2(t,x)
...
out=[some equations that use "B" as a constant]
%-----------------------------------------------------
%

3 comentarios

When you say It Didn't work, How was the error looks like...?
Ismaeel
Ismaeel el 20 de Feb. de 2017
"The GLOBAL declaration must precede any use of the variable B."
Ismaeel
Ismaeel el 20 de Feb. de 2017
"Global declaration not resolved to a Data Store Memory block registered via the Ports and Data Manager."

Iniciar sesión para comentar.

 Respuesta aceptada

Walter Roberson
Walter Roberson el 20 de Feb. de 2017

1 voto

7 comentarios

Ismaeel
Ismaeel el 21 de Feb. de 2017
Thanks Walter, I read the document but still I have the same problem. I was wondering how there is no direct way to get the port value of the block and share it with other files?
"I was wondering how there is no direct way to get the port value of the block and share it with other files"
You can route the signal that is output from Subsystem2 to multiple blocks; each of them can receive B on input. Likewise you could route the output of the MATLAB Function Block to multiple blocks.
However, File1 and File2 are not blocks, they are MATLAB functions. You cannot route signals to or from them.
function y = fcn(B)
...
y = File1(B)
%-----------------------------
function [t,x] = File1(B)
....
[t,x] = ode15s(@(t,x) File2(t,x,B), tspan, x0, opt);
%-----------------------------------
function out = File2(t, x, B)
...
out=[some equations that use "B" as a constant]
%----------------------------------------------------
Not a global in sight.
Ismaeel
Ismaeel el 21 de Feb. de 2017
I see now, thanks for the clarification.
Ismaeel
Ismaeel el 21 de Feb. de 2017
Editada: Ismaeel el 21 de Feb. de 2017
Sorry Walter, I have followed the nested method mentioned in the link you provided but unfortunately, it is not supported using matlab function block.
Walter Roberson
Walter Roberson el 21 de Feb. de 2017
Hmmm, as indicated in one of your other Questions recently, that should be supported provided that the function handle is buried like is shown. What error message are you receiving?
Ismaeel
Ismaeel el 21 de Feb. de 2017
I am trying to upload a picture of the error but there is something prevents it after uploading it. Anyway, this is what i got: Nested functions are not supported.
Function 'MF' (#83.127.128), line 8, column 15: "f" Launch diagnostic report.
If you have multiple functions in the same file, make sure each is terminated with "end" as soon as it is finished.
function y = fcn(B)
...
y = File1(B)
end
%-----------------------------
function [t,x] = File1(B)
....
[t,x] = ode15s(@(t,x) File2(t,x,B), tspan, x0, opt);
end
%-----------------------------------
function out = File2(t, x, B)
...
out=[some equations that use "B" as a constant]
end
%----------------------------------------------------

Iniciar sesión para comentar.

Más respuestas (1)

Ismaeel
Ismaeel el 20 de Feb. de 2017

0 votos

Also, I added a block "To Workspace" with the name "B" but still B is undefined.

Categorías

Más información sobre Simulink en Centro de ayuda y File Exchange.

Preguntada:

el 20 de Feb. de 2017

Comentada:

el 22 de Feb. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by