UDP Receive and Send Matlab

2019-03-05 05:15发布

问题:

I am currently working on receiving packets of data from an external device and then ill be sending data to another device. I having a working Simulink model however i don't know how to code it in Matlab.

The parameters for the UDP receive block in Matlab are shown in this image UDP Receive Parameters

The code I have so far for making the same link is

echoudp('on', 25000)
u = udp('0.0.0.0', 25000)
fopen(u)
while True
A = fread(u, 8156, 'unit16')
end

I want to be able to read the data continuously and print it out. However the fread is giving me no data what so ever but the simulink model works fine. Any idea where i am going wrong?

回答1:

This should work:

clc();

echoudp('on',25000);

u = udp('127.0.0.1',25000);
u.InputBufferSize = 10000;
u.OutputBufferSize = 10000;
u.ReadAsyncMode = 'continuous';
u.BytesAvailableFcn = @BytesAvailable_Callback;
u.BytesAvailableFcnMode = 'terminator';

fopen(u);

if (~strcmp(u.Status,'open'))
    NetworkError(u,'Connection failed!');
end

try
    for i = 1:10
        fprintf(u,'Hey!');
    end
catch e
    NetworkError(u,['Communication failed! (' e.message ')']);
end

pause(1);

NetworkDispose(u);

function BytesAvailable_Callback(u,evt) %#ok<INUSD>
    data = fscanf(u);
    disp('Data Received!');
    disp(data);
end

function NetworkDispose(u)  
    fclose(u);
    delete(u);
    clear u;

    echoudp('off');
end

function NetworkError(u,msg)
    NetworkDispose(u);
    error(msg);
end

This sets up a continuous (and asynchronous) listening over UDP. For more information read this.