Try/Catch inside the Simulink Function
8 views (last 30 days)
Show older comments
I am using the Simulink of MATLAB 2017a. There is a function inside the Simulink using lqr code inside the function.
The lqr function is very sensitive and it can not generate the information with every set of weights. Then, I am trying to use try and catch to skipe the situation that lqr can not find the feasible solution.
But problem is that I can not use the try/catch inside the Simulink Function. I have faced with error which says "code generation does not support TRY/CATCH construction". Any idea how can i use try/catch inside the Simulink Function.
If you are recomending "coder.extrinsic" what should I put instead of the function name? Because I have already tried this and it does not work.
3 Comments
Answers (1)
Abhas
on 6 Aug 2024
Hi,
When working with Simulink in MATLAB, the "try/catch" construct is not supported for code generation even when using "coder.extrinsic". A viable workaround is to create a separate MATLAB script or function that handles the "lqr" computation and error handling, and then call this script or function from the MATLAB Function block using "coder.extrinsic".
You can follow the below steps to achieve this:
- Create a new MATLAB function file, e.g., calculateLqr.m:
function [K, S, e] = calculateLqr(A, B, Q, R)
% Initialize outputs
K = [];
S = [];
e = [];
% Try to compute the LQR
try
[K, S, e] = lqr(A, B, Q, R);
catch
% Handle the error case
K = NaN;
S = NaN;
e = NaN;
end
end
- Open the MATLAB Function Block Editor in your Simulink model and replace the code with the following:
function [K, S, e] = myLqrFunction(A, B, Q, R)
% Declare outputs
K = zeros(size(B'));
S = zeros(size(A));
e = zeros(size(A,1),1);
% Declare the external function as extrinsic
coder.extrinsic('calculateLqr');
% Call the external function
[K, S, e] = calculateLqr(A, B, Q, R);
end
- Set the values of the "Constant blocks" to appropriate matrices for 'A', 'B', 'Q', and 'R'.
The "calculateLqr" function will be executed in interpreted mode, and the "try/catch" block within it will handle any errors that occur when "lqr" is unable to find a feasible solution.
You may refer to the following MathWorks documentation links to have a better understanding on coder.extrinsi, lqr function and different simulation modes of Simulink:
0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!