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