PTP: Sincronizziamo Gli Orologi Al Microsecondo

Il PTP (Precision Time Protocol) è un protocollo di livello applicativo, utilizzato per la sincronizzazione di dispositivi industriali o di strumentazione di laboratorio all’interno di una rete a commutazione di pacchetto, quindi con tempi di latenza variabili ed inaffidabili. Rispetto al più conosciuto protocollo NTP (Network Time Protocol), permette di ottenere un’accuratezza di sincronizzazione maggiore (inferiore al microsecondo). La precisione può essere ulteriormente aumentata, fino all’ordine dei nanosecondi, utilizzando componenti hardware dedicati.

Ovviamente l’accuratezza che può garantire il PTP, non è necessaria nella vita di tutti giorni, ma esistono scenari quali l’automazione industriale e la Robotica, in qui una differenza anche minima nella coordinazione di due azioni potrebbe indurre in risultati disastrosi. Inoltre il PTP è di particolare interesse anche perchè, può essere utilizzato sulle infrastrutture esistenti, non prevedendo costosi cablaggi aggiuntivi come nel caso della distribuzione di un segnale PPS, o la ricezione del segnale orario da una antenna GPS.

Il protocollo è stato standardizzato in 2 versioni (tra loro incompatibili) dall’IEEE, con i nome di IEEE-1588-2002 V1 e IEEE-1588-2008 V2.
La versione due è di fatto un miglioramento della versione precedente, permette l’utilizzo di messaggi piu corti e supporta l’invio unicast anzichè multicast, risparmiando una notevole quantità di banda.

PTP nel Dettaglio

Il principio di funzionamento è comunque simile e si compone di due fasi. La prima consiste nell’organizzare tutti gli orologi della rete in una gerarchia di Master e Slave, come indicato in figura:

Questo processo avviene tramite un sofisticato algoritmo che prende il nome di Best Master Clock (BMC). Il dispositivo che che ha l’orologio più affidabile sarà il Grand Master Clock, e fornirà l’ora a tutti gli altri, o direttamente, o tramite Master intermedi. Terminata la fase di definizione della gerarchia, inizia la sincronizzazione vera e propria. Il principio di funzionamento è molto semplice, si tratta di stimare due grandezze Offest (cioè la differenza tra l’orologio master e l’orologio slave) e il tempo di attraversamento o Delay (cioè quanto tempo impiega il messaggio che parte dal master a raggiungere lo slave.

Per correggere l’offset il Master manda un messaggio di SYNC allo slave, comunicando il tempo in cui è stato spedito. Tale tempo non può essere conosciuto dal master a priori, a causa di tutti gli strati software da attraversare, viene quindi salvato il più tardi possibile (generalmente a livello ethernet) e invitato tramite un secondo messaggio che prende il nome di FOLLOW UP. Lo slave confronta il tempo in cui riceve il messaggio e il tempo in cui il master lo ha spedito, ne ricava l’offset (facendo la differenza) e aggiorna il proprio orologio di conseguenza. Se la trasmissione dei pacchetti fosse istantanea i due orologi sarebbero ora sincronizzati. Questo processo viene ripetuto ciclicamente, di solito ogni due secondi nelle impostazioni di default.

Rimane ora da stimare il Delay. L’iniziativa questa volta la prende lo slave che manda un messagio di DELAY REQUEST al master, salvandosi l’istante esatto della trasmissione. Il master lo riceve e risponde con un messagio di DELAY RESPONSE, comunicando il tempo esatto in cui ha ricevuto la richiesta. Si noti che non è necessario alcun messaggio di follow up in questo caso, poichè tutti il master conosce già il tempo di ricezione della richiesta, al momento di invio della risposta. Lo slave dal canto suo conosce l’istante esatto di invio della REQUEST e con una semplice differenza.
Il processo di stima del Delay viene fatto a intervalli irregolari, di solito compresi tra i 4 e i 60 secondi, in funzione della topologia della rete.

Vediamo ora un esempio numerico, e cerchiamo di fissare meglio le idee con l’aiuto di una figura.

 

Supponiamo che inizialmente l’orologio Master indichi le 10:30 e 15 secondi, mentre lo slave sia avanti di 10 secondi. Supponiamo, anche, che il tempo di propagazione del messaggio sia pari ad un secondo. Questi valori sono, ovviamente esagerati, nella realtà le differenze saranno dell’ordine del microsecondi (o addirittura dei nano secondi). Il master invia il messagio di SYNC al secondo 15, e tramite un messaggio di FOLLOW UP lo comunichi allo slave. Lo slave riceve il messaggio a quelo che per lui è il secondo 26. Supponendo che il delay sia zero, la differenza dei due tempi rappresenta l’offset. Lo slave a questo punto corregge il proprio orologio.

Si noti come ora la differenza dei due orologi sia data dal solo tempo di delay, se la propagazione del messaggio fosse istantanea avremo già ottenuto la sincronia. È importante osservare che, se entrami gli orologi restano stabili, (cioè non derivano)  le successive iterazioni non modificheranno più l’ora del sistema, poichè la componete offset è già stata annullata. Per annullare anche la componente di ritardo, occorrono due osservazioni (il perchè di questo sarà chiaro in seguito). La prima osservazione misura la differenza tra il master e lo slave, e ha indice 2 nella figura. La seconda osservazione misura la differenza tra lo slave e il master e ha indice 3 nella figura.

Sostituendo i valori nelle equazioni otteniamo il valore del tempo di attraversamento, possiamo quindi aggiornare il tempo dello slave. A questo punto i due orologi risultano perfettamente in sincronia. Ovviamente il procediemento viene ripetuto periodicamente, in modo da contrastare una nuova deriva dei due

Un Approccio Matematico

I lettori più esigenti potrebbero chiedersi da dove arrivano le equazioni che abbiamo usato.
Come è facile intuire, il sistema è composto da due incognite: l’offset (To) e il tempo di attraversamento (Td), affinchè ammetta una soluzione, quindi, deve quindi contenere due equazioni. Per ottenere possiamo esprimere la differenza tra i due orologi dal punto di vista del master (1) e dal punto di vista dello slave (2)

  1. Dms = To + Td
  2. Dsm = -To + Td

La differenza tra master e slave è data dalla somma di Td e To, mentre la differenza tra slave master cambia segno al contributo di To ma non ha Td poichè il ritardo è sempre positivo ovviamente. Abbiamo ottenuto le due equazioni, necessarie per risolvere il sistema, basta ottenere i valori di Dms e Dsm con delle misurazioni. È ciò che abbiamo fatto nel disegno in figura.

Nella prima fase abbiamo trascurato Td ponendolo uguale a zero, e misurato Dms come differenza Tm1 -Ts1 (abbiamo supposto un incognita uguale a zero quindi basta una sola osservazione). La seconda equazione invece per la seconda equazione abbiamo bisogno di due osservazioni: Dms = Tm2 – Ts2 e Dsm = Ts3 – Tm3. A questo punto possiamo risolvere il sistema per combinazione lineare e otteniamo

  1. Tm2 -Ts2 + Ts3 -Tm3 = 2 Td  e quindi esplicitando Td
  2. Td = Tms -Ts2 +Ts3 – Tm3)/2

A questo punto basta sostituire i valori numerici.

© 2008 Ziogeek.com

Tag: ,