Round function with multiple inputs not working in MATLAB function block in Simulink

Hi all,
I want to round a number to 3 decimal places. In MATLAB I can easily do it in this way:
>> number=25.0001;
>> round(25.0001,3)
ans =
25
If I try to do this in Simulink in a MATLAB Function block in this way:
function D_avg1 = fcn(m)
%#codegen
D_avg1 = round(m,3);
It gives error:
Error calling 'round'. This call-site passes more inputs to this function than it can accept.
Function 'BSD_System /Averaging/MATLAB Function' (#278.45.55), line 4, column 10:
"round(m,3)"
Launch diagnostic report.
Component: MATLAB Function | Category: Coder error
How to solve this?

 채택된 답변

Instead of round(u,3) use
round(u*1000)/1000

댓글 수: 4

It helped !! Very efficient ! Thanks !
Any insight as to why it does not work? round(u,3) is a perfectly fine Matlab syntax. Is it because at the moment of initialising the model, Simulink does not now anything about the input "u" yet? I noticed in other situations as well that all data inside the embedded Matlab function should be known at the moment of initialisation.
Only the single argument syntax is supported:
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
  • Code generation supports only the syntax Y = round(X).
  • Code generation does not support char or logical data types for X.
I should have mentioned that if you want the 2-argument version declaring round as an extrinsic function should work.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Simulink Functions에 대해 자세히 알아보기

질문:

2015년 7월 7일

댓글:

2020년 5월 2일

Community Treasure Hunt

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

Start Hunting!

Translated by