В этом примере показано, как использовать блоки 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
udpObj = udp('','LocalHost',hostIP,'LocalPort',8002,'RemoteHost',targetIP,'RemotePort',25000); udpObj.InputBufferSize = 16; fopen(udpObj);
start(tg);
[data,count,errmsg] = fread(udpObj,16); while count~=0 fwrite(udpObj,data); [data,count,errmsg] = fread(udpObj,16); end
Simulink.sdi.view;
fclose(udpObj);