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