Вы можете повысить мощность и гибкость порта UDP, используя события и обратные вызовы. Событие происходит после выполнения условия и может привести к одному или нескольким обратным вызовам.
В то время как MATLAB ® подключен к порту UDP, события можно использовать для отображения сообщения, отображения данных, анализа данных и т.д. Можно управлять обратными вызовами с помощью свойств обратного вызова и функций обратного вызова. Все типы событий имеют связанное свойство обратного вызова. Функции обратного вызова - это функции MATLAB, которые записываются в соответствии с конкретными потребностями приложения. Выполнение обратного вызова при возникновении определенного события путем указания имени функции обратного вызова в качестве значения связанного свойства обратного вызова.
udpport далее следуют свойства и функции, связанные с обратными вызовами.
| Свойство или функция | Цель |
|---|---|
NumBytesAvailable | Число байтов, доступных для чтения |
BytesAvailableFcn | Доступная функция обратного вызова в байтах |
BytesAvailableFcnCount | Количество байтов данных для запуска обратного вызова |
BytesAvailableFcnMode | Доступный режим триггера обратного вызова в байтах |
NumDatagramsAvailable | Количество датаграмм, доступных для чтения |
DatagramsAvailableFcn | Функция обратного вызова для датаграмм |
DatagramsAvailableFcnCount | Количество датаграмм, запускающих обратный вызов |
DatagramsAvailableFcnMode | Режим триггера обратного вызова доступных дейтаграмм |
configureCallback | Установка функции обратного вызова и условия запуска для связи с портом UDP |
ErrorOccurredFcn | Функция обратного вызова, вызванная событием ошибки |
UserData | Свойство общего назначения для пользовательских данных |
Дополнительные сведения о настройке этих свойств и функций см. в разделе udpport Свойства.
В этом примере показано, как настроить функцию обратного вызова на запуск при наличии определенного количества байтов данных байтового типа. udpport объект.
Создайте эхо-сервер для подключения из сетевого сокета UDP. Эхо-сервер возвращает те же данные, что и записанные на него.
echoudp("on",4040)Создайте функцию обратного вызова. Определение функции обратного вызова readUDPData считывает полученные данные и отображает их в окне команд.
function readUDPData(src,~) src.UserData = src.UserData + 1; disp("Callback Call Count: " + num2str(src.UserData)) data = read(src,src.BytesAvailableFcnCount,"uint8") end
Сохраните его как файл .m в каталоге, в котором вы работаете.
Создание байтового типа udpport объект u.
u = udpport("byte","LocalPort",3030)
u =
UDPPort with properties:
IPAddressVersion: "IPV4"
LocalHost: "0.0.0.0"
LocalPort: 3030
NumBytesAvailable: 0
Show all properties, functions
Установите UserData для свойства 0.
u.UserData = 0;
Настройте свойства обратного вызова для чтения и отображения данных каждый раз при получении пяти байт в MATLAB.
configureCallback(u,"byte",5,@readUDPData)Запишите десять байт данных, чтобы дважды запустить функцию обратного вызова.
write(u,1:10,"localhost",4040)Callback Call Count: 1
data =
1 2 3 4 5
Callback Call Count: 2
data =
6 7 8 9 10
Очистить udpport по завершении работы с ним. Выключите эхо-сервер.
clear u echoudp("off")
В этом примере показано, как настроить функцию обратного вызова на запуск, когда терминатор доступен для чтения из байтового типа. udpport объект.
Создайте эхо-сервер для подключения из сетевого сокета UDP. Эхо-сервер возвращает те же данные, что и записанные на него.
echoudp("on",4040)Создайте функцию обратного вызова. Определение функции обратного вызова readUDPData считывает полученные данные и отображает их в окне команд
function readUDPData(src,~) src.UserData = src.UserData + 1; disp("Callback Call Count: " + num2str(src.UserData)) data = readline(src) end
Сохраните его как файл .m в каталоге, в котором вы работаете.
Создание байтового типа udpport объект u.
u = udpport("byte","LocalPort",3030)
u =
UDPPort with properties:
IPAddressVersion: "IPV4"
LocalHost: "0.0.0.0"
LocalPort: 3030
NumBytesAvailable: 0
Show all properties, functions
Установите UserData для свойства 0.
u.UserData = 0;
Сконфигурируйте свойства обратного вызова для считывания и отображения данных каждый раз при получении данных с окончанием ASCII в MATLAB.
configureCallback(u,"terminator",@readUDPData)Запишите строку для запуска функции обратного вызова. writeline функция автоматически добавляет признак конца к строке перед записью на сервер.
writeline(u,"hello","localhost",4040)
Callback Call Count: 1
data =
"hello"
Запишите другую строку для повторного запуска функции обратного вызова.
writeline(u,"world","localhost",4040)
Callback Call Count: 2
data =
"world"
Очистить udpport по завершении работы с ним. Выключите эхо-сервер.
clear u echoudp("off")
В этом примере показано, как настроить функцию обратного вызова на запуск при наличии определенного количества датаграмм из типа дейтаграммы. udpport объект.
Создайте эхо-сервер для подключения из сетевого сокета UDP. Эхо-сервер возвращает те же данные, что и записанные на него.
echoudp("on",4040)Создайте функцию обратного вызова. Определение функции обратного вызова readUDPData считывает полученные данные и отображает их в окне команд
function readUDPData(src,~) src.UserData = src.UserData + 1; disp("Callback Call Count: " + num2str(src.UserData)) data = read(src,1,"uint8") end
Сохраните его как файл .m в каталоге, в котором вы работаете.
Создание типа дейтаграммы udpport объект u.
u = udpport("datagram","LocalPort",3030)
u =
UDPPort with properties:
IPAddressVersion: "IPV4"
LocalHost: "0.0.0.0"
LocalPort: 3030
NumDatagramsAvailable: 0
Show all properties, functions
Установите UserData для свойства 0.
u.UserData = 0;
Укажите максимальное количество байт, записываемых в пакет дейтаграммы, как десять байт, установив значение OutputDatagramSize собственность.
u.OutputDatagramSize = 10;
Настройте свойства обратного вызова для чтения и отображения данных каждый раз при получении одной дейтаграммы в MATLAB.
configureCallback(u,"datagram",1,@readUDPData)Запишите 30 байт данных, чтобы запустить функцию обратного вызова три раза.
write(u,1:30,"localhost",4040)Callback Call Count: 1
data =
Datagram with properties:
Data: [1 2 3 4 5 6 7 8 9 10]
SenderAddress: "127.0.0.1"
SenderPort: 4040
Callback Call Count: 2
data =
Datagram with properties:
Data: [11 12 13 14 15 16 17 18 19 20]
SenderAddress: "127.0.0.1"
SenderPort: 4040
Callback Call Count: 3
data =
Datagram with properties:
Data: [21 22 23 24 25 26 27 28 29 30]
SenderAddress: "127.0.0.1"
SenderPort: 4040
Очистить udpport по завершении работы с ним. Выключите эхо-сервер.
clear u echoudp("off")