В этом примере показано, как отправить данные по Пользовательской дейтаграмме Protcol (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"
Отправьте "НАЧИНАТЬ" команду в 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");
Сделайте паузу прежде, чем очистить объект для ответов, чтобы возвратиться из первого сеанса работы с 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