exponenta event banner

Обмен данными между двумя сеансами MATLAB с использованием протокола пользовательских дейтаграмм

В этом примере показано, как отправлять данные по протоколу пользовательских дейтаграмм (UDP) между двумя сеансами MATLAB на одном компьютере с помощью udpport функция.

Первая сессия MATLAB

Создать экземпляр udpport

Создать udpport экземпляр и привязка к порту 2020.

uFirst = udpport("LocalPort",2020)
uFirst = 
  UDPPort with properties:

     IPAddressVersion: "IPV4"
            LocalHost: "0.0.0.0"
            LocalPort: 2020
    NumBytesAvailable: 0

  Show all properties, functions

Подготовка функции обратного вызова

Сконфигурируйте функцию обратного вызова для считывания данных, полученных с помощью configureCallback функция. Эта функция обратного вызова срабатывает при каждом получении терминатора. sendAcknowledgement функция обратного вызова отправляет строку подтверждения обратно в udpport экземпляр во втором сеансе MATLAB, когда он принимает данные.

Установите Terminator свойство для "CR/LF", чтобы соответствовать другому udpport экземпляр.

configureTerminator(uFirst, "CR/LF");

Terminator теперь свойство должно иметь значение "CR/LF".

uFirst.Terminator
ans = 
"CR/LF"

Настройка функции обратного вызова sendAcknowledgement для запуска при получении назначенного терминатора.

configureCallback(uFirst,"terminator",@sendAcknowledgement);

sendAcknowledgement.m функция обратного вызова приведена ниже.

function sendAcknowledgement(u, ~)
% Read the data received from the other udpport instance. readline removes
% the terminator from the data read.
data = readline(u);

% Prepare the acknowledgement string.
data = "COMMAND RECEIVED - """ + data +  """. SENDING ACKNOWLEDGEMENT.";

% Send the acknowledgement string, followed by the Terminator "CR/LF", to the
% udpport instance bound to port 3030 in the first MATLAB instance.
writeline(u, data, "127.0.0.1", 3030);
end

BytesAvailableFcn должно быть установлено в функцию обратного вызова, и BytesAvailableFcnMode установить в значение "terminator".

uFirst.BytesAvailableFcn
ans = function_handle with value:
    @sendAcknowledgement

uFirst.BytesAvailableFcnMode
ans = 
"terminator"

Вторая сессия MATLAB

Создать экземпляр udpport

Создать udpport и выполнить привязку к порту 3030.

uSecond = udpport("LocalPort", 3030)
uSecond = 
  UDPPort with properties:

     IPAddressVersion: "IPV4"
            LocalHost: "0.0.0.0"
            LocalPort: 3030
    NumBytesAvailable: 0

  Show all properties, functions

Подготовка функции обратного вызова

Конфигурирование функции обратного вызова readAcknowledgement для считывания данных, полученных с помощью configureCallback функция. Эта функция обратного вызова запускается при получении терминатора. В этом примере используется значение терминатора "CR/LF".

Установите Terminator свойство для "CR/LF" с использованием configureTerminator функция.

configureTerminator(uSecond,"CR/LF");

Terminator теперь свойство должно иметь значение "CR/LF".

uSecond.Terminator
ans = 
"CR/LF"

Настройка функции обратного вызова readAcknowledgement для запуска при получении назначенного терминатора.

configureCallback(uSecond,"terminator",@readAcknowledgement);

readAcknowledgement.m функция обратного вызова приведена ниже.

function readAcknowledgement(u, ~)
% Read the acknowledgement data. readline removes the Terminator from the
% data read.
data = readline(u);

% Display the acknowledgement string read.
disp(data);
end

BytesAvailableFcn должно быть установлено в функцию обратного вызова, и BytesAvailableFcnMode установить в значение "terminator".

uSecond.BytesAvailableFcn
ans = function_handle with value:
    @readAcknowledgement

uSecond.BytesAvailableFcnMode
ans = 
"terminator"

Отправить команду на первый сеанс MATLAB

Отправьте команду «START» в udpport случай uFirst в первом сеансе MATLAB с использованием writeline. uFirst связан с портом 2020. writeline автоматически добавляет команду «START» с помощью Terminator "CR/LF".

disp("Sending Command - START");
Sending Command - START
writeline(uSecond, "START", "127.0.0.1", 2020);

Отправьте другую команду на тот же адрес назначения и порт назначения. Команда «STOP» автоматически добавляется с помощью Terminator "CR/LF".

disp("Sending Command - STOP");
Sending Command - STOP
writeline(uSecond, "STOP");

Очистить udpport

Приостановите перед очисткой объекта, чтобы ответы возвращались из первого сеанса MATLAB.

pause(0.3);

Сконфигурируйте обратные вызовы как отключенные.

configureCallback(uSecond, "off");

BytesAvailableFcn теперь должно быть установлено пустое свойство function_handle, и BytesAvailableFcnMode установить в значение "off".

uSecond.BytesAvailableFcn
ans =

  0×0 empty function_handle array
uSecond.BytesAvailableFcnMode
ans = 
"off"

Ясно udpport экземпляр.

clear uSecond