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