Используйте коллбэки для коммуникации 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")

Смотрите также

|

Похожие темы