Этот пример показывает, как использовать блоки 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);
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, отображает полученные данные на графике.
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')
Клиент запускается дважды с такой скоростью, как сервер, таким образом, там удваивают количество зеленых точек на то же время времени.
Поскольку промежуточные точки нет новых данных отправили, предыдущее значение сохранено.
Задержка между синусоидами зависит от различных факторов как отсутствие синхронизации между целями, и сеть вызвала задержки.