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

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

Первый сеанс работы с MATLAB

Создайте образец udport

Создайте 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 функция. Функция обратного вызова запускается каждый раз, когда получен терминатор строки. The sendAcknowledgement функция обратного вызова отправляет строку подтверждения назад в udpport Образец во втором Сеансе работы с MATLAB, когда он получает данные.

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

configureTerminator(uFirst, "CR/LF");

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

uFirst.Terminator
ans = 
"CR/LF"

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

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

The 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

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

uFirst.BytesAvailableFcn
ans = function_handle with value:
    @sendAcknowledgement

uFirst.BytesAvailableFcnMode
ans = 
"terminator"

Второй сеанс работы с MATLAB

Создайте образец udport

Создайте 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");

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

uSecond.Terminator
ans = 
"CR/LF"

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

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

The 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

The 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);

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

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

Очистить удпорт

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

pause(0.3);

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

configureCallback(uSecond, "off");

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

uSecond.BytesAvailableFcn
ans =

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

Очистить udpport образец.

clear uSecond