Trainsim

Ambiente di simulazione per il collaudo di apparecchiature ferroviarie in sicurezza

Sviluppo software apparati ferroviari

“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

GE Transportation, la divisione dedicata ai sistemi di segnalamento ferroviario della nota multinazionale, aveva la necessità di implementare un complesso sistema di simulazione di scenari, per il collaudo di apparecchiature ferroviaria in sicurezza.

Il simulatore avrebbe dovuto girare su più nodi (PC industriali e/o a bordo di device), con requisiti molto 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 per ottenere le performance richieste nei casi semplici, e poi durante lo sviluppo è stata 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