exponenta event banner

Использовать обратные вызовы для связи UDP

Вы можете повысить мощность и гибкость порта UDP, используя события и обратные вызовы. Событие происходит после выполнения условия и может привести к одному или нескольким обратным вызовам.

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

Свойства обратного вызова

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. Запишите строку для запуска функции обратного вызова. 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")

См. также

|

Связанные темы