Code generation of an S-function with multiple inputs and outputs
1 view (last 30 days)
Hi. As a follow up to my previous query, I'm now trying to generate a dll from an S-function that takes in three inputs and returns 3 outputs. This is based on the following equations :
Where V, alpha and beta are the inputs into the S-function block and u,v and w are the outputs respectively. I'm getting the right results whenever I run the simulation but upon code generation, I'm getting the following error messages:
warning C4013: 'cos' undefined; assuming extern returning int
error C2143: syntax error: missing ')' before ';'
I have attached relevant snippets of the S-function code as well as the generated C code respectively below:
V = block.InputPort(1).Data;
alpha = block.InputPort(2).Data;
beta = block.InputPort(3).Data;
u = block.OutputPort(1).Data;
v = block.OutputPort(2).Data;
w = block.OutputPort(3).Data;
u = V * cos(alpha) * cos(beta);
v = V * sin(beta);
w = V * sin(alpha) * cos(beta);
rtb_Level2MATLABSFunction_o1 = simpleflight_U.V * (cos(simpleflight_U.V) *
rtb_Level2MATLABSFunction_o2 = simpleflight_U.V * (sin(simpleflight_U.V));
rtb_Level2MATLABSFunction_o3 = simpleflight_U.V * (sin(simpleflight_U.V)) *
As you can see, in addition to the error messages, only one of the three inputs is being used in the generated c code.
I have also attached the tlc file below for further reference:
%implements "vab_to_uvw1" "C"
%% Function: Outputs ===========================================================
%function Outputs(block, system) Output
/* %<Type> block: %<Name> */
%assign rollVars = ["U", "Y"]
%roll idx = RollRegions, lcv = RollThreshold, block, "Roller", rollVars
%assign V = LibBlockInputSignal(0, "", "", 0)
%assign alpha = LibBlockInputSignal(0, "", "", 1)
%assign beta = LibBlockInputSignal(0, "", "", 2)
%assign u = LibBlockOutputSignal(0, "", lcv, idx)
%assign v = LibBlockOutputSignal(1, "", lcv, idx)
%assign w = LibBlockOutputSignal(2, "", lcv, idx)
%<u> = %<V> * (cos(%<alpha>) * (cos(%<beta>));
%<v> = %<V> * (sin(%<beta>));
%<w> = %<V> * (sin(%<alpha>)) * (cos(%<beta>));
Has anybody encountered this issue before? Any help would be great.
Thanks in advance.