В этом примере показано, как отправить данные через проткола пользовательской датаграммы (UDP) между двумя сеансами работы с 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
функция. Функция обратного вызова запускается каждый раз, когда получен терминатор строки. 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"
Создайте 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"
Отправьте команду «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