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