Можно повысить степень и гибкость порта UDP с помощью событий и коллбэков. Событие происходит после достижения условия и может привести к одному или нескольким коллбэкам.
Пока MATLAB® соединяется с портом UDP, можно использовать события для отображения сообщения, отображения данных, анализа данных и так далее. Вы можете управлять коллбэками через свойства коллбэка и функции обратного вызова. Все типы событий имеют связанное свойство коллбэка. Функции обратного вызова являются функциями MATLAB, которые вы записываете в соответствии с вашими конкретными потребностями приложения. Выполните коллбэк, когда происходит конкретное событие, путем определения имени функции обратного вызова в качестве значения связанного свойства коллбэка.
The 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)Напишите строку, чтобы запустить функцию обратного вызова. The 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")