• Регистрация
pokk
pokk 0.00
н/д

MATLAB, как обрабатывать поток данных UDP пакета? новый вопрос

10.02.2020

Добрый день для проверки и отладки работы фильтра в процессоре, решил загнать результат фильтра в матлаб через UDP пакеты.

Принимать пакеты асинхронно c Callback научился

https://docs.exponenta.ru/instrument/asynchronous-read-and-write-operations-over-udp.html?searchHighlight=readasync#btfzqty

Но дальше появились вопросы:

1) Как зациклить прием(сейчас после запуска скрипта принимаееться N пакетов и скрипт завершается) ?

Можно как то в Callback запустить ещё раз прием но от суда возникает второй вопрос

2) Как остановить скрипт ?

Если жать на паузу в момент работы, то сокет не закрываеться, и потом матлаб ругает что порт уже порт/сокет открыт занят, и не хочет работать до перезагрузки матлаба. 

В общем в идеале хочу добиться, что бы принятые данных отображались на графике в режиме реального времени т.е со здвижкой данных+ кнопка включить/выключить прием(запуск скрипта).

В общем подскажите в какую сторону грести. Думаю скрипт(.m)  надо оформить в виде модуля и подцепить его в симулинке, но с симулинком не работал по этому незнаю правильная или нет моя затея.   

 

 

 

 

 

Теги

    10.02.2020

    Ответы

    • Павел Рословец
      Павел Рословец +239.28
      10.02.2020 10:26

      Быстрее всего действительно сделать это в Simulink, потому что, скорее всего, будет достаточно одного блока UDP Recieve из пакета Instrument Control Toolbox. Запускаете модель - принимаете сигнал в Scope. Останавливаете - порт закрывается.

      Если делать в MATLAB, то для удобной работы можно сделать приложение. Вот пример приложения для приема данных по Serial с Ардуино. Там есть описание логики работы.

      https://www.mathworks.com/matlabcentral/fileexchange/57168

      https://github.com/ETMC-Exponenta/LEDControlApp

      В приложении rgb_control для приема данных используется callback-функция, а для обновления интерфейса и отрисовки графика создается асинхронный таймер.