Протокол IEEE® 1588™ Precision Time - синхронизация выполнения

Этот пример показывает синхронизацию Выполнения между целевыми компьютерами с помощью Протокола времени точности (PTP) с Необработанным Ethernet как транспортный протокол.

Требования

Чтобы запустить этот пример, вы должны:

  • Получите два целевых компьютера Speedgoat, оборудованные картой Intel® 82574 Ethernet от www.speedgoat.com.

  • Получите прозрачный переключатель часов PTP, такой как EDS-405A-PTP от www.moxa.com. (В следующем разделе смотрите альтернативную настройку в случае, если у вас нет переключателя PTP.)

  • Получите стандартный сетевой переключатель, который имеет по крайней мере 3 порта, такие как переключатель 5 портов LINKSYS® SD2005.

Соедините и сконфигурируйте устройства в сети

В этом примере эти два целевых компьютера называют TargetPC1 и TargetPC2.

  1. Соедините сетевой порт компьютера разработчика к порту переключателя LYNKSYS® Ethernet.

  2. Соедините сетевой порт каждого целевого компьютера, который выделен связи с компьютером разработчика к порту переключателя LINKSYS® Ethernet.

  3. Соедините сетевой порт карты Intel® 82574 Ethernet в TargetPC1 и TargetPC2 к портам переключателя EDS-405A-PTP соответственно. Если вы не имеете переключателя PTP, или соединяете непосредственно порт карты Intel® 82574 Ethernet TargetPC1 к порту той же карты в TargetPC2 или соединяете эти два порта с портами переключателя LYNKSYS® Ethernet.

  4. Сконфигурируйте переключатель EDS-405A-PTP как сквозные прозрачные часы.

  5. Включите PTP для портов, соединенных с TargetPC1 и TargetPC2.

Откройте и сконфигурируйте модели

Нажмите на следующие ссылки, чтобы открыть эти две модели:

Эти две модели сконфигурированы для загрузки на целевых компьютерах TargetPC1 и TargetPC2 соответственно. Если один из этих целевых компьютеров, например, TargetPC2, не существует в настройке среды Simulink® Real-Time™ на вашем компьютере разработчика, можно создать и сконфигурировать его при помощи Проводника Simulink® Real-Time™ или путем ввода следующей команды в командной строке MATLAB®:

tg2 = SimulinkRealTime.addTarget('TargetPC2');

Для каждой модели откройте маску для блока IEEE 1588 Ethernet и вставьте необходимые значения для номеров шины PCI и номеров слота, присвоенных карте Ethernet Intel 82574. Например, модель dPTPSlaveEthernet сконфигурирована, чтобы работать на целевом компьютере TargetPC2. Чтобы получить номера шины и номера слота, введите следующие команды в командной строке MATLAB® и ищите информацию для карты Intel® 82574 Ethernet:

tg2 = SimulinkRealTime.target('TargetPC2');
getPCIInfo(tg2, 'ethernet');

Модель dPTPMasterEthernet является Ведущим устройством PTP. Это отображает состояние, и ошибки синхронизации на целевом компьютере определяет объем и получает данные из модели dPTPSlaveEthernet.

openedMdl = find_system('type', 'block_diagram');
masterMdl = fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','dPTPMasterEthernet');
masterMdlOpen = 0;

Проверяйте, открыта ли модель уже. В противном случае откройте его.

if ~any(strcmp(masterMdl, openedMdl))
    masterMdlOpen = 1;
    open_system(masterMdl);
end

Модели dPTPSlaveEthernet сконфигурированы как Ведомый узел PTP. Это отображает состояние и ошибки синхронизации на целевых осциллографах и отправляет три сигнала смоделировать dPTPMasterEthernet:

  • Состояние Synchronization: Указывает, когда ведомые часы PTP синхронизируются с основными часами PTP в сконфигурированном пороге одной микросекунды.

  • Время PTP при прерывании по таймеру: Указывает на значение в секундах времени PTP, когда прерывание в реальном времени происходит.

  • Ошибка смещения: Указывает на ошибку синхронизации между временем PTP и часами ядра, которые генерируют прерывания в реальном времени.

Время PTP Чтения в возрастающей подсистеме ребра показывает, как можно регистрировать метки времени события с PTP. Блок IEEE 1588 Read Parameter в подсистеме является configuread, чтобы считать время PTP, когда выполнение блока запускается.

slaveMdl = fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','dPTPSlaveEthernet');
slaveMdlOpen = 0;

Проверяйте, открыта ли модель уже. В противном случае откройте его.

if ~any(strcmp(slaveMdl, openedMdl))
    slaveMdlOpen = 1;
    open_system(slaveMdl);
end

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

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

  • Установите настройку Ethernet совпадать с настройками целевого компьютера.

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

set_param(masterMdl,'RTWVerbose','off');
set_param('masterMdl/IEEE 1588 Ethernet','PciBus','5','PciSlot','0');
rtwbuild(masterMdl);
tg1 = slrt('TargetPC1');
load(tg1,'masterMdl');
set_param(slaveMdl,'RTWVerbose','off');
set_param('slaveMdl/IEEE 1588 Ethernet','PciBus','8','PciSlot','10');
rtwbuild(slaveMdl);
tg2 = slrt('TargetPC1');
load(tg2,'slaveMdl');

Запустите и остановите приложение

Запустите эти две модели в течение 50 секунд

tg1.start;
tg2.start;
pause(50);

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

tg1.stop;
tg2.stop;

Отобразите осциллографы целевого компьютера и остановите выполнение

Просмотрите отображение целевого компьютера.

Для модели dPTPSlaveEthernet на TargetPC2, используйте команду:

tg2.viewTargetScreen;
  • Определите объем 1, показывает состояние протокола и состояние синхронизации. Значение состояния протокола 9 для Ведомого узла. Состояние синхронизации равняется 1, если Ведомые часы PTP синхронизируются с Основными часами PTP в заданном пороге 1 микросекунды. В противном случае это 0.

  • Определите объем 2 отображений время PTP, когда Чтение время PTP в возрастающей запускаемой фронтом подсистеме будет инициировано.

  • Определите объем 3, показывает перемещение текущего времени между Ведомыми часами PTP и Основными часами PTP в наносекундах.

  • Определите объем 4, показывает перемещение текущего времени между часами прерывания в реальном времени и часами PTP в секундах.

Для модели dPTPMasterEthernet на TargetPC1, используйте команду:

tg1.viewTargetScreen;
  • Определите объем 1, показывает состояние протокола. Значение состояния протокола 6 для Главного узла.

  • Определите объем 2 отображений текущее время PTP в формате даты.

  • Определите объем 3, показывает перемещение текущего времени между часами прерывания в реальном времени и часами PTP в секундах, для Главного узла и Ведомого узла (полученный от модели dPTPSlaveEthernet).

  • Определите объем 4, показывает различие между временем PTP, когда прерывание в реальном времени происходит на Главном узле и Ведомом узле соответственно.

Когда Ведомые часы PTP синхронизируются с Основными часами PTP, и и Ведомые и Основные часы прерывания в реальном времени синхронизируются со своими соответствующими часами PTP, сигнал на Осциллографе 4 указывает на точность, с которой синхронизируется выполнение этих двух моделей.

Получите и постройте записанные данные

Следующий рисунок показывает значение, отображенное на Осциллографе 4 из модели dPTPMasterEthernet, когда эти два узла имеют свои часы PTP и синхронизируемые часы ядра.

Получите записанные данные для ведомого устройства nodesdPTPMa

logDataMaster = tg1.OutputLog;
syncIndex = find(logDataMaster(:,1) ~= 0, 1, 'first');
clockDiff = logDataMaster(syncIndex +100:end,2);

Фигура графика существует?

  • Если не, создайте фигуру.

  • Если да, сделайте его текущей фигурой.

figh = findobj('Name', 'ptpexample');
if isempty(figh)
  figh = figure;
  set(figh, 'Name', 'ptpexample', 'NumberTitle', 'off');
else
  figure(figh);
end

Постройте различие времени PTP в прерывании в реальном времени для этих двух моделей

plot(clockDiff, '.');
xlabel('Sample');
ylabel('Time difference (seconds)');
title('Execution synchronization precision');
drawnow;

Закройте модели

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

if (masterMdlOpen)
  bdclose(masterMdl);
end
if (slaveMdlOpen)
  bdclose(slaveMdl);
end