Использование коллбэков для связи UDP

Можно повысить степень и гибкость порта UDP с помощью событий и коллбэков. Событие происходит после достижения условия и может привести к одному или нескольким коллбэкам.

Пока MATLAB® соединяется с портом UDP, можно использовать события для отображения сообщения, отображения данных, анализа данных и так далее. Вы можете управлять коллбэками через свойства коллбэка и функции обратного вызова. Все типы событий имеют связанное свойство коллбэка. Функции обратного вызова являются функциями MATLAB, которые вы записываете в соответствии с вашими конкретными потребностями приложения. Выполните коллбэк, когда происходит конкретное событие, путем определения имени функции обратного вызова в качестве значения связанного свойства коллбэка.

Свойства коллбэка

The udpport следуют свойства и функции, связанные с коллбэками.

Свойство или функцияЦель
NumBytesAvailableКоличество байтов, доступных для чтения
BytesAvailableFcnДоступная функция обратного вызова в байтах
BytesAvailableFcnCountКоличество байтов данных для запуска коллбэка
BytesAvailableFcnModeДоступный режим триггера коллбэка
NumDatagramsAvailableКоличество дейтаграмм, доступных для чтения
DatagramsAvailableFcnДоступная функция обратного вызова датаграмм
DatagramsAvailableFcnCountКоличество датаграмм для запуска коллбэка
DatagramsAvailableFcnModeДоступный режим триггера коллбэка датаграмм
configureCallbackУстановите функцию обратного вызова и условие триггера для связи с портом UDP
ErrorOccurredFcnФункция обратного вызова, вызванная событием ошибки
UserDataСвойство общего назначения для пользовательских данных

Для получения дополнительной информации о настройке этих свойств и функций смотрите udpport Свойства.

Используйте обратный коллбэк в байтовом режиме с объектом UDP байтового типа

В этом примере показано, как задать функцию обратного вызова, чтобы запустить, когда определенное количество байтов данных доступно от типа байта udpport объект.

  1. Создайте эхо-сервер для подключения из сетевого сокета UDP. Эхо-сервер возвращает те же данные, которые на него записаны.

    echoudp("on",4040)
  2. Создайте функцию обратного вызова. Задайте функцию обратного вызова readUDPData считывает полученные данные и отображает их в командном окне.

    function readUDPData(src,~)
        src.UserData = src.UserData + 1;
        disp("Callback Call Count: " + num2str(src.UserData))
        data = read(src,src.BytesAvailableFcnCount,"uint8")
    end
    

    Сохраните его как файл .m в директории, в котором вы работаете.

  3. Создайте тип байта 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;
  4. Сконфигурируйте свойства коллбэка для чтения и отображения данных каждый раз при получении пяти байтов в MATLAB.

    configureCallback(u,"byte",5,@readUDPData)
  5. Запишите десять байтов данных, чтобы дважды запустить функцию обратного вызова.

    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
    
  6. Очистить udpport объект, когда вы завершили работать с ним. Отключите эхо-сервер.

    clear u
    echoudp("off")

Используйте обратный коллбэк в режиме терминатора с объектом UDP байтового типа

В этом примере показано, как задать функцию обратного вызова, которая запускается, когда терминатор строки доступен для чтения из типа байта udpport объект.

  1. Создайте эхо-сервер для подключения из сетевого сокета UDP. Эхо-сервер возвращает те же данные, которые на него записаны.

    echoudp("on",4040)
  2. Создайте функцию обратного вызова. Задайте функцию обратного вызова readUDPData считывающий полученные данные и отображающий их в командном окне

    function readUDPData(src,~)
        src.UserData = src.UserData + 1;
        disp("Callback Call Count: " + num2str(src.UserData))
        data = readline(src)
    end
    

    Сохраните его как файл .m в директории, в котором вы работаете.

  3. Создайте тип байта 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;
  4. Сконфигурируйте свойства коллбэка для чтения и отображения данных каждый раз, когда данные, оконечные по ASCII, получены в MATLAB.

    configureCallback(u,"terminator",@readUDPData)
  5. Напишите строку, чтобы запустить функцию обратного вызова. The writeline функция автоматически добавляет терминатор строки к строке перед записью на сервер.

    writeline(u,"hello","localhost",4040)
    Callback Call Count: 1
    
    data = 
    
        "hello"
    

    Напишите другую строку, чтобы запустить функцию обратного вызова во второй раз.

    writeline(u,"world","localhost",4040)
    Callback Call Count: 2
    
    data = 
    
        "world"
    
  6. Очистить udpport объект, когда вы завершили работать с ним. Отключите эхо-сервер.

    clear u
    echoudp("off")

Используйте коллбэк в режиме датаграммы с объектом UDP типа датаграммы

В этом примере показано, как задать функцию обратного вызова, чтобы запустить, когда определенное количество датаграмм доступно от типа дейтаграммы udpport объект.

  1. Создайте эхо-сервер для подключения из сетевого сокета UDP. Эхо-сервер возвращает те же данные, которые на него записаны.

    echoudp("on",4040)
  2. Создайте функцию обратного вызова. Задайте функцию обратного вызова readUDPData считывающий полученные данные и отображающий их в командном окне

    function readUDPData(src,~)
        src.UserData = src.UserData + 1;
        disp("Callback Call Count: " + num2str(src.UserData))
        data = read(src,1,"uint8")
    end
    

    Сохраните его как файл .m в директории, в котором вы работаете.

  3. Создайте тип датаграммы 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;
  4. Сконфигурируйте свойства коллбэка, чтобы считать и отображать данные каждый раз, когда одна дейтаграмма получена в MATLAB.

    configureCallback(u,"datagram",1,@readUDPData)
  5. Запишите 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
    
  6. Очистить udpport объект, когда вы завершили работать с ним. Отключите эхо-сервер.

    clear u
    echoudp("off")

См. также

|

Похожие темы