How to send any type of parameters in update-function to output-function in simulink s-function?
1 view (last 30 days)
Show older comments
I try to show 'ax' in output, so I send 'ax' to output by adding it to the state vector 'x'.
But, it is not a good idea when the size of 'ax' vector is increasing. It will increase computation time because dim. of state increases.
global 'ax' doesn't work at all.
any suggestions?
function sys=mdlUpdate(t,x,u)
dt = 0.01;
Td = u;
% Numerical Integration
x_prev = x(1);
x(1) = x(1) + Td*dt; % Euler integration
ax = (x(1)-x_prev)/dt;
x(2) = ax;
sys = [x(1) x(2)];
function sys=mdlOutputs(t,x,u)
ax = x(2);
sys = [x(1) ax];
0 Comments
Answers (1)
Pavan Sahith
on 20 Oct 2023
Hello,
I understand you are trying to pass a parameter ‘ax’ in the update function to output function of the Simulink S-function block.
As a workaround you can try “ssSetUserData” and “ssGetUserData” functions which uses the S-function’s user data.
Please refer to this sample code to understand the use of “ssSetUserData” and “ssGetUserData” function.
%In update-function you can use these
% Retrieve 'ax' from the userdata field
% ‘gcb’- get current block.
userdata = ssGetUserData(gcb); % Get user data
ax = userdata.ax; % Access 'ax' from the user data
% Update 'ax' in the user data
userdata.ax = ax; % Update 'ax' in user data
ssSetUserData(gcb, userdata); % Set user data
% sample output-function can be like this
function sys = mdlOutputs(t, x, u)
% Retrieve 'ax' from the userdata field
userdata = ssGetUserData(gcb); % Get user data
ax = userdata.ax; % Access 'ax' from the user data
sys = [x(1); ax];
end
Please refer to the MathWorks documentation links to know more about
Hope it helps.
0 Comments
See Also
Categories
Find more on Block and Blockset Authoring in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!