Clear Filters
Clear Filters

setting an outputport to the function call type in an s function

4 views (last 30 days)
Hello community.
I am working on a UDP receive block that is used with generated code for an embedded linux platform.
My goal is to have it output the message, message length and a function call output to process the message.
The block setup is currently like this
function sfcn_UDPReceive(block) %setup
tsamp = 1;
buff_len = 2;
%% Register number of input and output ports
block.NumInputPorts = 0;
block.NumOutputPorts = 2;
%% function call
%block.OutputPort(1); %Somehow set this to a function call? C code
%seems to suggest DatatypeID 9 is a function call, but it gives me an
%error when I use it here.
%% message length
block.OutputPort(2).Dimensions = 1;
block.OutputPort(2).DatatypeID = 7; %uint32
block.OutputPort(2).Complexity = 'Real';
block.OutputPort(2).SamplingMode = 'sample';
%% message
block.OutputPort(3).Dimensions = block.DialogPrm(buff_len).Data;
block.OutputPort(3).DatatypeID = 3; %uint8
block.OutputPort(3).Complexity = 'Real';
block.OutputPort(3).SamplingMode = 'sample';
% Number of S-Function parameters expected
% (tsamp, buff_len)
block.NumDialogPrms = 2;
block.SampleTimes = [block.DialogPrm(tsamp).Data 0];
block.RegBlockMethod('WriteRTW', @WriteRTW);
end
function WriteRTW(block)
buff_len = 2; % make buff_len available to .tlc file
block.WriteRTWParam('string', 'buff_len', num2str(block.DialogPrm(buff_len).Data));
end
How do I set block.OutputPort(1).DatatypeID to fcncall?
I have found examples of how to do it in C, which would then have to be compiled to mex files, but I like this interface being in regular matlab script.
The documentation for doing things this way seems way more scarse than that for the C-mex interface.
  2 Comments
Ayush
Ayush on 1 Apr 2024
Hello Rick,
To integrate a function call output to an S-function block in MATLAB requires specific setup for the formatted output containing the message, its length along with the function call itself. Although there is no direct way to do the same, a similar output can be achieved by triggering a function call subsystem via the S-function block’s output acting as a trigger signal. Here are the steps for the same:
  1. Setup you S-function block with three output ports, one for the message, one for the message length and the last one for the trigger signal for function call subsystem
  2. Implement a logic in your S-function block that would output the signal whenever you want to call the function and send it to the “trigger” block input port.
  3. Create a “function call subsystem” and connect the trigger output port from the S-function block.
You can also refer to the documentation below to know more about “Trigger block” and “Function-Call subsystems”:
Hope this helps!
Rick Gijsberts
Rick Gijsberts on 8 May 2024
@Ayush the issue is that I want to call the function-call subsystems potentially multiple times per sample time, as many times as there are UDP datagrams in the buffer.
Sadly a C-mex, but that seems to be the only way to create a FCN_CALL output type.

Sign in to comment.

Accepted Answer

Rick Gijsberts
Rick Gijsberts on 8 May 2024
The solution is use a C-mex function it seems.

More Answers (0)

Categories

Find more on Simulink Coder in Help Center and File Exchange

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!