Можно улучшить степень и гибкость порта 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")