Sending UDP data from my Simulink model to some IP without passing by my MIMXRT1024 board

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Sending UDP data from my Simulink model to some IP without passing by my MIMXRT1024 board

1,616 次查看
ylahdili
Contributor II

Hi. My Simulink model needs to run on my NXP MIMXRT1024 board. I am running in External Mode, so that I can log some sensor measurements I receive using ADC block of MBDT toolbox.

Everything runs well, until I try to add a UDP communication block to transmit data from my ADC to a Unity game that listens on port 8000 of my localhost (i.e. same PC machine running the simulation).

None of the UDP methods I tried worked: I tried all Simulink library "UDP send" blocks, and writing custom MyUDP.m code inside MATLAB functions, MATLAB Systems, and Level-1 S Function using udpport and dsp.UDPSender objects, as well as trying NXP's own TCP/UDP block (which I believe will only work if we physically connect the board with Ethernet cable to my PC).

All of these methods mentioned, caused error when Simulink's Embedded Coder tries to code generate.

My question I guess is, in External Mode simulation, how can I force the UDP part of my model to not code generate itself (i.e. runs from the board), and instead make it run using the MATLAB engine from my PC without compiling (as if I was executing a "UDP send" command from MATLAB shell, which works btw)?

PS: In trying to create a MATLAB System block, the block generated (see figure below) proposes the choices: Code Generation and Interpreted Execution, but no matter what I choose, it throws the same error, as I believe it always tries to code generate. So I wonder if there is any actual effect of Interpreted Execution choice.

ylahdili_0-1687572835599.png

Code inside the MATLAB System block:

classdef MyUDPSender < matlab.System
properties (Nontunable)
ipAddress = '127.0.0.1';
port = 8000;
end

properties (Access = private)
udpObject
end

methods (Access = protected)
function setupImpl(obj)
obj.udpObject = dsp.UDPSender('RemoteIPAddress', obj.ipAddress, 'RemoteIPPort', obj.port);
end

function stepImpl(obj, data)
data = uint8(data);
step(obj.udpObject, data);
end

function releaseImpl(obj)
release(obj.udpObject);
end

function resetImpl(obj)
obj.releaseImpl();
obj.setupImpl();
end

function numInputs = getNumInputsImpl(obj)
numInputs = 1;
end

function numOutputs = getNumOutputsImpl(obj)
numOutputs = 0;
end
end
end

 Am I missing something? thanks a lot for helping me.

0 项奖励
回复
0 回复数