在两台目标计算机上同步 PTP 时钟
此示例演示了如何使用精密时间协议 (PTP) 在两台目标计算机上同步时钟。
PTP 系统设置
要运行 PTP 守护进程并构建使用 PTP 的实时应用程序,必须安装 Speedgoat I/O Blockset。有关详细信息,请参阅PTP 前置条件。
安装 Speedgoat I/O 模块集后,使用 Speedgoat showPtpInterfaces 实用程序检查所选端口是否支持 PTP 协议,并确保该支持功能已完成配置。
要检查目标计算机 tg1 和 tg2 的配置,此示例在 MATLAB 命令行窗口中使用以下命令:
speedgoat.showPtpInterfaces('TargetObject', tg1)
Label Index PTPSupport Configuration
_____________ __________ __________ _________________________________________ {'Host Link'} {'eno1' } {'No' } {'IP: 192.168.7.5 Subnet: 255.255.0.0' }
{'ETH1' } {'enp4s0'} {'Yes'} {'IP: 10.10.10.21 Subnet: 255.255.255.0'}speedgoat.showPtpInterfaces('TargetObject', tg2)
Label Index PTPSupport Configuration
_____________ __________ __________ _________________________________________ {'Host Link'} {'eno1' } {'No' } {'IP: 192.168.7.10 Subnet: 255.255.0.0' }
{'ETH1' } {'eno2' } {'Yes'} {'IP: 10.10.10.22 Subnet: 255.255.255.0'}
{'Onboard' } {'enp7s0'} {'No' } {'Not configured' }要使用点对点传输 (PTP),请使用 Speedgoat 以太网配置工具 speedgoat.configureEthernet 为以太网接口配置 IP 协议栈。
在此示例中,tg1 的 ETH1 端口被设置为 IP 地址 10.10.10.21,而 tg2 的 ETH1 端口被设置为 IP 地址 10.10.10.22。

在目标计算机上配置好 ETH1 端口后,使用以太网电缆将它们相互连接。
启动 PTP 守护进程目标计算机
对于目标计算机 PC1(tg1),请连接至目标计算机并启动 PTP 守护进程作为时钟发送器(主节点,-W)。
tg1 = slrealtime('TargetPC1'); connect(tg1); tg1.ptpd.Command = 'ptp4l -i enp4s0 -S'; pause(5); start(tg1.ptpd)
对于目标计算机 PC2(tg2),请连接至目标计算机并启动 PTP 守护进程作为时钟接收器(从属设备,-g)。
tg2 = slrealtime('TargetPC2'); connect(tg2); tg2.ptpd.Command = 'ptp4l -i eno2 -S'; pause(5); start(tg2.ptpd)
有关 PTP 守护进程选项的信息,请参阅 PTP4l 参考页面。
开放模型并编译实时应用
打开 PTP 时钟接收器模型 slrt_ex_ptp_offset_time_receiver 并构建实时应用程序。
model = 'slrt_ex_ptp_offset_time_receiver';
open_system(model);

modelSTF = getSTFName(tg2); set_param(model,"SystemTargetFile",modelSTF); evalc('slbuild(model)');
为确认点对点时钟同步,请在 tg2 上加载实时应用程序并运行该应用程序。
load(tg2,model); start(tg2);
查看目标计算机之间的时钟偏移
打开仿真数据检查器,观察发射器和接收器时钟之间的偏移或差异。显示屏呈现了时钟在同步过程中如何逐步缩小时间偏差。

关闭模型
bdclose(model);