В этом примере показано, как использовать блоки 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 Communication Setup.
Эта модель управляет передаточной функцией первого порядка с сигналом квадратной волны и отправляет входные и выходные сигналы передаточной функции в компьютер разработчика, используя 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 сборки.
Отметьте выход блока Byte Unpacking для логгирования данных.
Создайте и загрузите приложение.
Откройте Данные моделирования Inspector.
Этот код показывает, как программно маркировать сигналы для логгирования данных. Можно также пометить сигналы для регистрации данных в Редактор. Просмотреть записанные данные можно в Данные моделирования Inspector.
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
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;
clear uByte;