exponenta event banner

Цель передачи на хост с помощью UDP

В этом примере показано, как использовать UDP-блоки для отправки данных с целевого компьютера на компьютер разработки. В этом примере используется целевой компьютер с IP-адресом 192.168.7.5 и компьютер разработки с IP-адресом 192.168.7.2.

Приложение передачи в реальном времени slrt_ex_target_to_host_UDP выполняется на целевом компьютере и отправляет данные сигнала в объект UDP, который скрипт создает в MATLAB на компьютере разработки.

При использовании протокола UDP для передачи данных на целевой компьютер или с него следует учитывать следующие проблемы:

  • Модель Simulink на компьютере разработчика работает как можно быстрее. Скорость работы модели не синхронизирована с часами реального времени.

  • UDP - это протокол без установления соединения, который не проверяет, были ли переданы пакеты. Пакеты данных могут быть потеряны или отброшены.

  • На целевом компьютере UDP-блоки выполняются в фоновой задаче, которая выполняется каждый шаг времени после завершения задачи в реальном времени. Если блок не может запустить или завершить фоновую задачу до следующего временного шага, данные могут не передаваться.

  • Пакеты данных UDP передаются по каналу Ethernet между разработчиками и целевыми компьютерами. Эти передачи совместно используют полосу пропускания с каналом Ethernet.

Дополнительные сведения об UDP и Simulink Real-Time см. в разделе Настройка связи UDP.

Открытие модели, построение и загрузка приложения в реальном времени

Эта модель управляет передаточной функцией первого порядка с сигналом прямоугольной формы и посылает входные и выходные сигналы передаточной функции на компьютер разработки с помощью UDP. Чтобы открыть модель, в окне команды MATLAB введите:

open_system(fullfile(matlabroot,'toolbox','slrealtime','examples','slrt_ex_target_to_host_UDP'));

mdl = 'slrt_ex_target_to_host_UDP';
mdlOpened = 0;
systems = find_system('type', 'block_diagram');
if ~any(strcmp(mdl, systems))
  mdlOpened = 1;
  open_system(fullfile(matlabroot,'toolbox','slrealtime','examples',mdl));
end

Создайте модель и загрузите ее на целевой компьютер.

  • Настройка для построения, отличного от Verbose.

  • Отметьте вывод блока распаковки байтов для регистрации данных.

  • Создайте и загрузите приложение.

  • Откройте инспектор данных моделирования.

В этом коде показано, как программно маркировать сигналы для регистрации данных. Можно также отметить сигналы для регистрации данных в редакторе Simulink Editor. Зарегистрированные данные можно просмотреть в инспекторе расчетных данных.

set_param(mdl,'RTWVerbose','off');
set_param(mdl,'StopTime','10');
targetIP = '192.168.7.5';
set_param([mdl,'/UDP Receive'],'ipAddress',targetIP);
hostIP = '192.168.7.2';
set_param([mdl,'/UDP Send'],'toAddress',hostIP)
set_param([mdl,'/UDP Receive'],'fmAddress',hostIP)
handle = get_param([mdl,'/Byte Unpacking '],'PortHandles');
Outport = handle.Outport(1);
Simulink.sdi.markSignalForStreaming(Outport,'on');
slbuild(mdl);
tg = slrealtime;
load(tg,mdl);
### Successful completion of build procedure for: slrt_ex_target_to_host_UDP
### Created MLDATX ..\slrt_ex_target_to_host_UDP.mldatx

Build Summary

Top model targets built:

Model                       Action                       Rebuild Reason                                    
===========================================================================================================
slrt_ex_target_to_host_UDP  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 53.286s

Закройте модель, если она открыта.

if (mdlOpened)
  bdclose(mdl);
end

Создание объекта UDP в MATLAB на компьютере разработки

uByte = udpport("IPV4","LocalHost",hostIP,"LocalPort",8002);

Запустить модель на целевом компьютере

start(tg);

Компьютер разработки для чтения и записи данных

tic;
while (toc<10)
    data = read(uByte,16);
    write(uByte,data,targetIP,25000);
    data = read(uByte,16);
end

Просмотр сигналов в инспекторе данных моделирования

Simulink.sdi.view;

Отключить объект UDP на компьютере разработки

clear uByte;