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

В этом примере показано, как отправить данные по Пользовательской дейтаграмме Protcol (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

Отправьте "НАЧИНАТЬ" команду в udpport экземпляр uFirst на первом сеансе работы с MATLAB с помощью writeline. uFirst обязан портировать 2020. writeline автоматически добавляет "НАЧИНАТЬ" команду с 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");

Очистите 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