How do I send data between two computers using the UDP function from the Instrument Control Toolbox?

81 views (last 30 days)
I am using the Instrument Control Toolbox, and I would like to communicate between two computers using the User Datagram Protocol (UDP).

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 22 May 2023
Edited: MathWorks Support Team on 22 May 2023
By creating and customizing a UDP object on each computer, you can configure each object to communicate to the other through data reading and writing commands. Keep in mind that UDP protocol does not guarantee transmission or order of the packets.
The following example shows how to communicate between two computers, referred to as 'machineA' and 'machineB' using the UDP function of the Instrument Control Toolbox. In this example, the IP addresses of machineA and machineB are 144.212.206.23 and 144.212.206.178, respectively. The ports used by these computers are 9090 and 9091, respectively.
Step 1. Configure Machine A
On the first machine, issue the following commands at the MATLAB command prompt:
%% Define computer-specific variables
ipA = '144.212.206.23'; portA = 9090; % Modify these values to be those of your first computer.
ipB = '144.212.206.178'; portB = 9091; % Modify these values to be those of your second computer.
%% Create UDP Object
udpA = udp(ipB,portB,'LocalPort',portA);
%% Connect to UDP Object
fopen(udpA)
Step 2. Configure Machine B
On the second machine, issue the following commands at the MATLAB command prompt:
%% Define computer-specific variables
% Modify these values to be those of your first computer:
ipA = '144.212.206.23'; portA = 9090;
% Modify these values to be those of your second computer:
ipB = '144.212.206.178'; portB = 9091;
%% Create UDP Object
udpB = udp(ipA,portA,'LocalPort',portB);
%% Connect to UDP Object
fopen(udpB)
Both computers are now configured for communicating with one another via UDP. We will continue this example, however, to show how a simple communication may progress.
Step 3. Send messages from Machine A to Machine B.
On the first machine, issue the following commands at the MATLAB command prompt:
fprintf(udpA,'This is test message number one.')
fprintf(udpA,'This is test message number two.')
fprintf(udpA,'doremifasolatido')
Step 4. Retrieve messages on Machine B from Machine A.
On the second machine, issue the following commands at the MATLAB command prompt:
fscanf(udpB)
Note that only the first message is retrieved:
ans =
This is test message number one.
Now, retrieve the second message by issuing the same command at the MATLAB command prompt:
fscanf(udpB)
Here again, only the second message is retrieved:
ans =
This is test message number two.
Now, let us retrieve the third message -- only this time, we will retrieve it two characters at a time. To do this, we will need to set the 'DatagramTerminateMode' property to 'off'.
On the second machine, issue the following commands at the MATLAB command prompt:
set(udpB,'DatagramTerminateMode','off')
for notes=1:8, fscanf(udpB,'%c',2), end
Your output should look like the following:
ans =
do
ans =
re
ans =
mi
ans =
fa
ans =
so
ans =
la
ans =
ti
ans =
do
Step 5. Clean Up Machine A
On the first machine, issue the following commands at the MATLAB command prompt:
%% Clean Up Machine A
fclose(udpA)
delete(udpA)
clear ipA portA ipB portB udpA
Step 6. Clean Up Machine B
On the second machine, issue the following commands at the MATLAB command prompt:
%% Clean Up Machine B
fclose(udpB)
delete(udpB)
clear ipA portA ipB portB udpB notes
For more information, see the "Controlling Instruments Using TCP/IP and UDP" section of the Instrument Control Toolbox documentation at:
  1 Comment
Walter Roberson
Walter Roberson on 21 Oct 2016
Nabeel Afridi, you can fwrite() the array in binary, or you can fprintf() the array. The code above shows a string being sent, and strings are arrays (of characters.) If the array is not fixed size you might be wanting to send the size information just before you send the array.

Sign in to comment.

More Answers (1)

Vinod
Vinod on 14 Apr 2014
Edited: MathWorks Support Team on 27 Apr 2023
The UDP protocol does not guarantee transmission or order of the packets.
For most applications, you probably want to use TCPIP, like this:
  1 Comment
Walter Roberson
Walter Roberson on 14 Apr 2014
Real-time communications require UDP rather than TCP, as TCP has no upper bound on packet delivery time and does not allow later packets to be delivered.
TCP is also not usable for broadcasting of any kind.
Effectively all other IP protocols other than TCP are unidirectional, so there are a lot of different applications where in-order guaranteed delivery is not suitable.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!