Trainsim

Ambiente di simulazione per il collaudo di apparecchiature ferroviarie in sicurezza

Trainsim

“L’uso di ZeroMQ e del multithreading ha consentito di raggiungere fin dall’inizio e mantenere importanti target di performance riguardo alla latenza di comunicazione tra i nodi” 

Mirko Damiani, Sviluppatore

La richiesta

Il cliente aveva necessità di implementare un complesso sistema di simulazione di scenari, da utilizzare per il collaudo di apparecchiature ferroviera in sicurezza.

Il simulatore avrebbe dovuto girare su più nodi (PC industriali e/o a bordo di device), con requisiti molo importanti di sincronizzazione dello stato di simulazione (latenze di sincronizzazione inferiori a 10 ms).

Inoltre, era necessario che i nodi del simulatore potessero funzionare anche a bordo di computer Windows, e che la libreria fosse utilizzabile da C++, Python e LISP.

Vantaggi introdotti

Abbiamo utilizzato la libreria ZeroMQ per implementare il protocollo di trasporto per la sincronizzazione tra i nodi. I meccanismi di publish/subscribe e request/reply implementati da ZeroMQ si sono rivelati molto efficienti, sebbene durante la fase iniziale di studio architetturale abbiamo effettuato importanti ottimizzazioni tramite l’uso di un approccio completamente multithread, con sincronizzazione lockless e zero copy dei dati.

L’uso del C++ si è poi rivelato vincente anche in fase di scrittura di binding, dove abbiamo potuto facilmente interfacciarsi a Python e LISP, i linguaggi scelti dal cliente per la scrittura dei nodi a livello applicativo.

In quale modo la nostra metodologia ci ha aiutato

Abbiamo scelto un approccio performance-oriented: cominciando da pagina bianca, abbiamo prima lavorato ad ottenere le performance richieste nei casi semplici, e poi durante lo sviluppo è stato sempre considerata bloccante ogni regressione in termini di performance dovuta all’aggiunta di nuove funzionalità 

In quale modo l'open source ha aiutato il progetto

La libreria ZeroMQ è stato un importante tassello, che si è rivelato un trasporto perfetto per l’applicazione in questione, unendo basse latenze, un’architettura thread-safe e la piena portabilità tra mondo Linux e mondo Windows.

Le richieste

  • Simulazione di scenari tra più nodi
  • Supporto Linux e Windows
  • Sincronizzazione tra nodi entro 10ms

Cosa ha fatto Develer

  • Utilizzo di ZeroMQ come trasporto
  • Ottimizzazione tramite l’uso di C++, tecniche di multithreading e zero-copy
  • Binding da C++ a Python e a LISP

Risultati

  • Latenze estremamente basse e in linea con i requisiti
  • Software funzionante su piattaforme multiple

Cliente

General Electric Multinazionale produttrice di sistemi di segnalamento ferroviario