Цель к Целевой коммуникации с помощью TCP

Этот пример показывает, как использовать блоки TCP, чтобы отправить данные между двумя целевыми компьютерами. Этот пример также описывает эффекты сервера и клиента, запускающегося в различных шагах расчета.

Модель TargetToTargetTCPServer сервера работает на TargetPC1 с шагом расчета.02 секунд. Эта модель содержит источник синусоиды. Клиентская модель TargetToTargetTCPClient работает на TargetPC2 с шагом расчета.01 секунд. Эта модель содержит пилообразный источник волны. Обе модели отправляют и получают пакеты данных сигнала.

Щелкните здесь, чтобы открыть этот пример: TargetToTargetTCP.

Открытый, сборка и загрузка модель сервера

Щелкните здесь, чтобы открыть модель 1: TargetToTargetTCPServer.

Откройте модель.

mdlOpen = 0;
systems = find_system('type', 'block_diagram');
if ~any(strcmp('TargetToTargetTCPServer', systems))
  mdlOpen = 1;
  open_system(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','TargetToTargetTCPServer'));
end

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

  • Сконфигурируйте настройки TCP сервера.

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

set_param('TargetToTargetTCPServer/TCP Server Configure','PCIBus','5');
set_param('TargetToTargetTCPServer/TCP Server Configure','PCISlot','0');
set_param('TargetToTargetTCPServer/TCP Server Configure','PCIFunction','0');
rtwbuild('TargetToTargetTCPServer');
### Starting Simulink Real-Time build procedure for model: TargetToTargetTCPServer
### Generated code for 'TargetToTargetTCPServer' is up to date because no structural, parameter or code replacement library changes were found.
### Successful completion of build procedure for model: TargetToTargetTCPServer
### Created MLDATX ..\TargetToTargetTCPServer.mldatx
### Looking for target: TargetPC1
### Download model onto target: TargetPC1
  • Закройте модель.

if (mdlOpen)
  bdclose('TargetToTargetTCPServer');
end

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

Щелкните здесь, чтобы открыть модель 2: TargetToTargetTCPClient.

Откройте модель.

mdlOpen = 0;
systems = find_system('type', 'block_diagram');
if ~any(strcmp('TargetToTargetTCPClient', systems))
  mdlOpen = 1;
  open_system(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','TargetToTargetTCPClient'));
end

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

  • Сконфигурируйте клиентские настройки TCP.

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

set_param('TargetToTargetTCPClient/TCP Client Configure','PCIBus','8');
set_param('TargetToTargetTCPClient/TCP Client Configure','PCISlot','10');
set_param('TargetToTargetTCPClient/TCP Client Configure','PCIFunction','0');
rtwbuild('TargetToTargetTCPClient');
### Starting Simulink Real-Time build procedure for model: TargetToTargetTCPClient
### Generated code for 'TargetToTargetTCPClient' is up to date because no structural, parameter or code replacement library changes were found.
### Successful completion of build procedure for model: TargetToTargetTCPClient
### Created MLDATX ..\TargetToTargetTCPClient.mldatx
### Looking for target: TargetPC2
### Download model onto target: TargetPC2
  • Закройте модель.

if (mdlOpen)
  bdclose('TargetToTargetTCPClient');
end

Запустите обе модели

Используя переменные объекта Simulink Real-Time tg1 и tg2, запустите модели.

  • Запустите модель TargetPC1.

  • Запустите модель TargetPC2.

start(tg1);
start(tg2);
pause(4);

Остановите обе модели

Используя переменные объекта Simulink Real-Time tg1 и tg2, остановите модели.

  • Остановите модель TargetPC1.

  • Остановите модель TargetPC2.

stop(tg1);
stop(tg2);

Сгенерируйте сервер (TargetPC1) график

tg1.viewTargetScreen();

  • Определите объем 1, 'Status' вывод блока 'TCP Server Configure'. Значение переходит в 1, когда связь устанавливается.

  • Определите объем 2, 'Status' вывод блока 'TCP Send'. После того, как связь устанавливается, значение переходит в 16, чтобы указать, что 16 байтов отправляются каждый шаг расчета.

  • Определите объем 3, 'Length' вывод блока 'TCP Receive' в модели сервера. Значение в осциллографе идет от 0 до 16 и затем остается в 32. Это - то, вследствие того, что сервер запускает половину с такой скоростью, как клиент. В результате для каждого шага расчета на сервере, клиент отправляет ему 2 пакета 16 байтов каждый. В каждом шаге расчета блоки сервера имеют 32 байта в наличии, чтобы читать. В этой модели на 16 байтах считаны так, другие 16 байтов пропущены моделью. Это не будет ошибкой TCP, когда пакеты эффективно переданы и получены - но модель сконфигурирована способом, который заставляет пакеты быть пропущенными.

  • Определите объем 4, отображает полученные данные на графике.

Сгенерируйте клиент (TargetPC2) график

tg2.viewTargetScreen();

  • Определите объем 1, 'Status' вывод блока 'TCP Client Configure'. Значение переходит в 1, когда связь устанавливается.

  • Определите объем 2, 'Status' вывод блока 'TCP Send'. После того, как связь устанавливается, значение переходит в 16, чтобы указать, что 16 байтов отправляются каждый шаг расчета.

  • Определите объем 3, 'Length' вывод блока 'TCP Receive' в клиентской модели. Это переключается между 0 и 16, поскольку клиент запускается дважды с такой скоростью, как сервер, таким образом, для каждой альтернативной выборки он не получает данных.

  • Определите объем 4, отображает полученные данные на графике.

Эффект различия в шагах расчета

Следующий график сравнивает синусоиду, отправленную сервером и полученную клиентом.

Синусоида сервера

tx = tg1.TimeLog;
x = tg1.OutputLog;

Клиентская синусоида (получена)

ty = tg2.TimeLog;
y = tg2.OutputLog;

Постройте короткий раздел

ПРИМЕЧАНИЕ: Этот фрагмент только работает, когда у вас есть вторая целевая машина, которая поддерживает TCP.

plot(tx(10:30), x(10:30), 'b--o', ty(10:60), y(10:60), 'g--o');
legend({'Server (SampleTime: .02)','Client (SampleTime: .01)'})
xlabel('Time (seconds)')
ylabel('Amplitude')
title('Compare Tx and Rx sine waveform')
  • Клиент запускается дважды с такой скоростью, как сервер, таким образом, там удваивают количество зеленых точек на то же время времени.

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

  • Задержка между синусоидами зависит от различных факторов как отсутствие синхронизации между целями, и сеть вызвала задержки.