Domanda:
Quali linguaggi di programmazione vengono utilizzati per l'equipaggiamento a bordo degli aerei?
Taher Elhouderi
2014-04-28 15:59:07 UTC
view on stackexchange narkive permalink

In generale, per quale linguaggio di programmazione viene utilizzato nell'aviazione (radio ATC, radar, ILS, pilota automatico e avionica di bordo)?

  • Esiste uno standard applicato dall'ICAO?
  • Ogni produttore di aeroplani usa il linguaggio di programmazione che preferisce purché sia ​​affidabile e venga sottoposto a test?

Ricordo di aver guardato un documentario su YouTube l'anno scorso sull'aviazione e ha detto qualcosa sull'UE, dopo la seconda guerra mondiale, ha iniziato a creare standard per i sistemi di aviazione all'interno dell'Europa. Collegherò il video se riesco a trovarlo

vedi questa domanda: http://programmers.stackexchange.com/questions/153266/what-operating-systems-are-used-in-airplanes-and-what-programming-languages-are
Nel keynote su Going Native 2012, Bjarne Stroustrup menziona che il software per F-35 è scritto in C ++ con alcune limitazioni. In particolare, menziona che le eccezioni non vengono utilizzate perché non è stato possibile fornire una garanzia rigida in tempo reale per loro.
Parlando in generale? Questo suona un po 'come una tana di coniglio. In generale, sono abbastanza sicuro che tutti i produttori di avionica facciano quello che vogliono, purché soddisfi le specifiche.
@egid La prima parte di quest'ultima frase è così vera! Ma se rispettassero le specifiche, sarei impiegato solo part-time!
@Jan, oh, questo spiega i superamenti dei costi dell'F-35 :)
Quattro risposte:
#1
+40
Kent A.
2015-06-06 03:30:57 UTC
view on stackexchange narkive permalink

Non ci sono raccomandazioni o requisiti linguistici, oltre a ciò che è sensato dati i requisiti di verifica nei vari standard (ad esempio, DO-178B / C). Per i livelli di garanzia di progettazione più elevati, il codice generato deve essere ispezionato a livello di codice operativo per garantire che non vengano richiamati i trucchi noti del processore. Finisci anche per dover testare ogni parte di ogni condizionale, sia il lato vero che quello falso, e assicurarti che nessuna istruzione di salto ti porti da qualche parte dove non ti aspettavi.

Per questi ragioni, i tre grandi linguaggi in uso nell'avionica incorporata oggi sono:

  1. C ++ (come un C. migliore La natura OO è spesso usata solo con parsimonia. Cose come il polimorfismo sono semplicemente troppo costose da verificare)
  2. Ada (Potrebbe non piacerti, ma una tonnellata di avionica corrente è scritta in Ada e viene attualmente mantenuta e aggiornata con nuove funzionalità)
  3. C - Il più vicino al hardware come si desidera ottenere ed essere comunque altamente produttivi (non con l'intenzione di offendere chiunque sia produttivo in qualcos'altro)

L'assemblatore viene spesso utilizzato per esigenze specifiche, ma non sarebbe abituato a un grado maggiore di uno dei linguaggi sopra menzionati.

Ciò che rende questi linguaggi ideali per l'avionica è che sono relativamente vicini all'hardware e alla struttura della memoria, non oo astratto. I loro strumenti sono maturi e conosciuti. Le persone hanno anni di esperienza nella certificazione del software scritto al loro interno. E ci sono molti programmatori che possono essere al passo con loro rapidamente (Sì, anche Ada).

Il software non critico per la sicurezza, sia dentro che fuori dall'aereo, sarà scritto in uno dei grandi linguaggi del giorno: Java, C #, VB, C, C ++, Python, Perl, Ruby, ecc. .

Gli iPad stanno diventando utili all'interno dell'abitacolo e sono approvati in situazioni limitate. Le app iOS sono scritte in Objective-C, C, C ++ e, sempre di più, Swift (il nuovo linguaggio di Apple).

Storicamente, FORTRAN è stato utilizzato molto. Esempio: X-31.
SPARK sta sostituendo sempre più Ada poiché è più affidabile e rimuove molte delle ambiguità di Ada.
Un componente molto importante dello stack è l'hardware e il sistema operativo. L'hardware è solitamente progettato per funzionare con un sistema operativo che funziona in tempo reale. Garantire una risposta deterministica alle interruzioni da parte del sistema operativo che assicuri che le notifiche siano gestite secondo uno dei numerosi modelli con livelli variabili di garanzia del servizio. Comprendere l'hardware e la combinazione del sistema operativo (solo hardware senza un sistema operativo) è importante per garantire le migliori scelte e pratiche per lo sviluppo del software.
#2
+15
Federico
2014-04-28 16:12:43 UTC
view on stackexchange narkive permalink

Per quanto ne so, non esiste una direttiva su quale lingua usare. Hai linee guida su come testare e certificare il software, ma per quanto riguarda queste linee guida, nessuna lingua è preferita, è una scelta di design.

Ad oggi, in la mia (limitata) esperienza come ingegnere / programmatore, ho visto principalmente che i linguaggi non orientati agli oggetti sono preferiti, poiché riducono la quantità di test richiesti. Gli argomenti usuali che ho incontrato riguardano principalmente la gestione esplicita della memoria in ambienti spesso limitati dalle risorse.

Tutto vero, ma [Ada] (http://en.m.wikipedia.org/wiki/Ada_ (programming_language)) è molto diffuso nell'avionica esistente perché è stato progettato pensando alla verificabilità. Tuttavia, il nuovo sviluppo si sta allontanando da questo.
Vale la pena ricordare che non solo la scelta della lingua è un problema, ma lo è anche il compilatore. Spesso i compilatori hanno bug noti e devi fare attenzione alla progettazione per evitare o aggirare questi problemi.
@dvnrrs motivo principale Ada è prevalente è storico, non attuale. Quando quei vecchi sistemi (e l'obbligo dei militari statunitensi di usarli, è il loro bambino) scompaiono, Ada scompare.
il non-OO riduce i test? C'è un primo ... OO è stato in parte introdotto per migliorare la testabilità del codice.
@jwenting date le linee guida collegate nella risposta, sì.
@dvnrrs, ADA è stato anche il mio primo pensiero, soprattutto per scopi militari. Vedo dalla discussione che ne è seguita che potrebbe non essere più così diffuso.
Non ridurre il test quando devi ispezionare il codice dell'assembly. L'assemblaggio è molto più difficile da decifrare.
#3
+9
user7241
2015-06-06 22:42:39 UTC
view on stackexchange narkive permalink

La preferenza di un esperto per i sistemi critici per la sicurezza che ho ascoltato una volta era

  1. Ada
  2. C con uno standard di programmazione (come Misra-C nell'industria automobilistica ).

Preferiva decisamente Ada a C.

#4
+4
erol_smsr
2017-05-08 20:14:50 UTC
view on stackexchange narkive permalink

Questo spiega tutto sui sistemi informatici del Boeing 777: http://archive.adaic.com/projects/atwork/boeing.html

Honeywell doveva sviluppare i controlli di volo primari della cabina di pilotaggio in due progetti, l'Airplane Information Management System del Boeing 777 e il suo Air Data / Inertial Reference System. Per questi progetti, Honeywell ha acquistato Ada Compiler System di DDC-I, Inc., utilizzandolo come fonte front-end per il debugger simbolico di Honeywell. Le due società hanno lavorato insieme per un anno e mezzo per costruire il debugger finale del compilatore e l'intero back-end, mirato a un microprocessore Advanced Micro Devices (AMD) 29050. Secondo una recente intervista telefonica con Jeff Greeson, responsabile del progetto Honeywell per l'ingegneria del progetto 777, le aziende "sono state in grado di integrare nel compilatore molte funzionalità di ottimizzazione specifiche per il nostro hardware".

Hydro-Aire ha selezionato gli strumenti di sviluppo software Ada di Alsys per il progetto del sistema di controllo dei freni. Il fornitore ha utilizzato i cross compilatori AdaWorld con il pacchetto Smart Executive e certificazione per garantire la conformità ai requisiti in tempo reale e FAA. I compilatori sono ospitati su piattaforme Hewlett-Packard HP 9000/300; hanno preso di mira il microcontrollore Motorola 58333, rendendo Hydro-Aire una delle prime aziende a utilizzare il nuovo chip.

Il sistema di controllo dei freni di ogni 777 include due microcontrollori Motorola programmati interamente in Ada. Harry Hansen, Responsabile dell'ingegneria del software di Hydro-Aire ha riferito che "Troviamo Ada un linguaggio eccellente per lo sviluppo di applicazioni in tempo reale". I processori controllano il test integrato (BIT) e le funzioni di freno automatico. Il BIT include sia un'interfaccia in linea per il computer di manutenzione centrale che funzionalità di manutenzione fuori linea. Il freno automatico applica la quantità corretta di pressione del freno durante gli atterraggi e applica la quantità massima di pressione - senza causare lo scoppio del pneumatico - durante decolli interrotti. Inoltre, il sistema include hardware e software per impedire slittamenti, sensori e trasduttori a sistemi esterni e valvole idrauliche.

Anche Sundstrand ha scelto un compilatore di Alsys, Inc. (ora Thomson Software Products, Inc. ). Funzionando su un host PC, ha generato codice mirato a un microprocessore Intel 80186. Il codice esecutivo Certifiable Small Ada Run Time (CSMART) che si interfaccia con il linguaggio risiede all'interno del controllore runtime e, pertanto, doveva essere testato e verificato. È stata un'impresa importante, ma non un inconveniente a lungo termine. "Ada continua ad essere il nostro linguaggio di base per i futuri sistemi elettrici", ha detto Teske, "per ragioni di costo ed efficienza. Ora siamo in grado di riutilizzare il codice. Estraiamo alcuni pezzi di software per aeroplani e li inseriamo in nuovi progetti."

In una recente intervista telefonica, l'ingegnere senior del software Malkit Rai, che ha guidato lo sforzo sul progetto di energia elettrica Sundstrand 777, ha concordato sull'importanza del supporto di Ada per il riutilizzo. Ada ha sostituito definitivamente il precedente linguaggio di alto livello del negozio, PLM, sviluppato da Intel e basato su PL / I. "Dal 10 al 15 percento del sistema di generazione di energia elettrica del canale principale 777 è già in fase di riutilizzo", ha affermato. Due nuovi progetti, per il business jet Gulfstream V e l'elicottero Comanche, sono stati in grado di integrare la libreria di Sundstrand di pacchetti generici comuni scritti in Ada per il 777.

In effetti, le 80.000 linee di alimentazione dei sistemi di alimentazione Sundstrand il codice veniva riutilizzato dal 10 al 15 percento. Le dimensioni ridotte del software incorporato dimostrano che Ada è adatto per progetti con meno di 100.000 righe di codice, nonché per grandi sforzi. Il sistema di gestione della cabina del 777, ad esempio, è un modulo di comunicazione montato sui sedili posteriori del 777 e offre ai passeggeri una varietà di servizi ed è composto da sole 70.000 linee.

Mettere insieme una nuova architettura

In confronto, il progetto AIMS (Airplane Information Management System) di Honeywell consiste nel più grande computer centrale dell'aereo di linea; esegue 613.000 nuove righe di codice (definite come punto e virgola del corpo), occupando 15.656 kilobyte (KB) di spazio su disco e 4.854 KB di memoria ad accesso casuale (RAM). Con la ridondanza, il software funziona a 46.191 KB e 10.732 KB di RAM. Un sistema multiprocessore montato su rack, l'AIMS ha sostituito molte delle unità sostituibili in linea e ha ridotto la ridondanza hardware e software.

Due scatole AIMS gestiscono i sei display principali di volo e navigazione: due set si trovano nella parte anteriore di entrambi il capitano e il copilota in modo che possano spostarsi da un posto all'altro e due set centrali di parametri del motore sono condivisi dai piloti. Gli strumenti di volo primari indicano l'assetto di beccheggio e rollio, la direzione, la velocità dell'aria, il rateo di salita, l'altitudine, ecc. L'AIMS include anche la funzione di manutenzione centrale, che riceve rapporti dagli altri computer del 777 e quindi raccoglie i dati in un rapporto di manutenzione centrale per il meccanico. Il suo sistema di monitoraggio raccoglie dati su come stanno facendo altre funzioni e può determinare, ad esempio, che un motore si sta deteriorando, prima che si guasti effettivamente. Altre funzioni AIMS includono un gateway di conversione dei dati, l'acquisizione dei dati di volo, il caricamento dei dati, un gateway di conversione Ada e la gestione della spinta.

L'impegno massiccio di Honeywell sul 777 ha coinvolto oltre 550 sviluppatori di software. L'azienda ha costruito il computer AIMS come una piattaforma personalizzata basata sul processore AMD 29050. Era unico tra i sistemi di aviazione per l'integrazione delle funzioni degli altri computer; in altri sistemi, ogni funzione risiede in un box diverso [la centrale di manutenzione aveva il proprio box con i propri input / output (I / O), la propria unità di elaborazione centrale (CPU), ecc.]. AIMS combina tutte queste funzioni e condivide tra loro CPU e I / O: utilizza gli stessi segnali per la gestione del volo e per i display, in modo che i dati entra solo una volta invece di due; un circuito di ingresso fornisce dati a tutte le funzioni; ciascuna delle funzioni ottiene una parte della CPU, come in un computer mainframe, dove i sistemi utilizzano una parte della CPU ma non tutta; e ad ogni funzione è garantita la sua fascia oraria. L'ingegnere Jeff Greeson ha affermato che "Il sistema federato è obsoleto. Mettere tutte le funzioni in una scatola è un passo avanti nella tecnologia che abbiamo portato nel settore."

Un'altra innovazione è che l'unità disco può leggere i file formattati per il sistema operativo Microsoft Disk, che fornisce la manutenzione con accesso alle comunicazioni del terminale. I meccanici possono trasferire i file per il caricamento dei dati sul bus dell'aereo, perché Honeywell ha creato il programma per accettare nuovi dati e modificare il software. In effetti, la maggior parte delle apparecchiature dell'aereo ha questa capacità, solo pochi sistemi classici no (come il sistema di allarme di prossimità al suolo, che si è dimostrato sufficientemente affidabile e non necessita di modifiche).

Progettare una nuova architettura contemporaneamente a un nuovo linguaggio è stato "piuttosto eccitante", ha affermato Greeson. "I dettagli organizzativi erano difficili da mettere insieme". Con Ada, i manager hanno potuto delegare le sette funzioni principali a gruppi di 60-100 ingegneri del software. Le entità software separate hanno un'interfaccia minima con altre parti del software e non tutto il software è integrato. Lavorando con pezzi vagamente accoppiati, i leader del progetto sono stati in grado di distribuire le funzioni ad altri gruppi. L'integrazione libera, tuttavia, non lega il software alla piattaforma 777 e aiuterà Honeywell a utilizzare il codice per altri obiettivi. "Avevamo bisogno della massima capacità di portarlo in altri luoghi", ha detto Greeson.

Le interfacce dati che esistono tra le unità software sono abbastanza uniformi, ha detto Greeson, perché Ada ha aiutato gli ingegneri del software a implementare alcuni regole al momento della compilazione. "Ada ti costringe a tenerlo dritto lì piuttosto che in laboratorio", ha detto, "dove ha aiutato a ridurre al minimo le nostre difficoltà nel renderlo integrato e funzionante". A causa dell'elevato livello di precisione durante la compilazione, è stato impiegato meno tempo per il debug del codice. Pertanto, lo studio iniziale di Honeywell si è rivelato corretto. "Sono convinto che, a causa di Ada, abbiamo avuto una quantità minima di problemi di interfaccia, con i quali ci saremmo uccisi se avessimo avuto C o Pascal", ha concluso Greeson. "È andato molto più facilmente rispetto ai programmi precedenti."

Questo in realtà non risponde alla domanda, poiché si tratta di una piattaforma OEM (B777) piuttosto che per l'industria nel suo insieme.
È la fonte più informativa e dettagliata che ho trovato sui sistemi avionici in generale. Altre fonti menzionano semplicemente che ogni parte ha un chip isolato diverso ed è alimentata da un sistema operativo in tempo reale. Questo articolo va molto più in profondità e contiene alcuni riferimenti al modo in cui le cose venivano fatte anche sugli aerei più vecchi.
potresti provare a parafrasarlo? o almeno evidenziare le parti importanti?
@Federico Una domanda che chiede quali linguaggi di programmazione vengono utilizzati nell'aviazione è inutile, perché la risposta è semplice: C, Assembly, ADA, ecc. Non ti insegna molto sapere quale lingua usano. Ciò che conta sono i dettagli (di implementazione). Questo articolo spiega perché è stato scelto Ada, ad esempio vedi: "Sono convinto che, a causa di Ada, abbiamo avuto una quantità minima di problemi di interfaccia, con i quali ci saremmo uccisi se avessimo avuto C o Pascal.". dichiarato chiaramente, "problemi di interfaccia", quindi Ada è stato scelto per questo motivo. È più informativo del semplice dire "Ada".
quello che volevo dire è che se potessi provare a riassumere l'articolo qui, e non averne una copia completa. o almeno copia qui solo i passaggi più rilevanti.
@Federico L'articolo non è molto lungo e contiene molte informazioni, quindi puoi leggere l'intero articolo se sei curioso di questo.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...