Цель, чтобы разместить передачу при помощи UDP

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

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

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

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

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

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

Для получения дополнительной информации о UDP и Simulink Real-Time, смотрите Коммуникационного Setup 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

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

  • Сконфигурируйте для немногословной сборки.

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

  • Сборка и приложение загрузки.

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

Этот код показывает, как отметить сигналы программно для регистрации данных. Можно также отметить сигналы для регистрации данных в Редакторе Simulink. Можно просмотреть записанные данные в в Инспекторе Данных моделирования.

set_param(mdl,'RTWVerbose','off');
set_param(mdl,'StopTime','10');
targetIP = '10.10.10.35';
set_param([mdl,'/UDP Receive'],'ipAddress',targetIP);
hostIP = '10.10.10.128';
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');
rtwbuild(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  Global variables have changed.  

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

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

if (mdlOpened)
  bdclose(mdl);
end

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

udpObj = udp('','LocalHost',hostIP,'LocalPort',8002,'RemoteHost',targetIP,'RemotePort',25000);
udpObj.InputBufferSize = 16;
fopen(udpObj);

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

start(tg);

Считайте компьютер разработчика данных и записи

[data,count,errmsg] = fread(udpObj,16);
while count~=0
    fwrite(udpObj,data);
    [data,count,errmsg] = fread(udpObj,16);
end

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

Simulink.sdi.view;

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

fclose(udpObj);