Question:
Où dois-je commencer à apprendre la programmation avionique?
user2369869
2014-12-04 15:22:40 UTC
view on stackexchange narkive permalink

Je suis étudiant dans son dernier semestre pour un B.S. en informatique. J'aimerais à terme faire une transition vers l'industrie de l'exploration spatiale (NASA, SpaceX, Boeing, Lockheed Martin, etc.). Je ne connais rien à l'avionique et j'aimerais en savoir plus sur le sujet, en particulier le côté logiciel. J'ai trouvé peu d'informations en ligne. Veuillez me donner du matériel de référence (livres, sites Web, etc.) pour en savoir plus sur ce domaine. Votre point de vue et informations supplémentaires sont les bienvenus.

Je n'ai pas de livres / matériels ou d'informations plus concrètes, donc je posterai ceci comme un commentaire et non comme une réponse, mais je vous suggère fortement de revoir votre programmation de bas niveau si vous êtes sérieux au sujet de cela surface.
@JonStory: Certainement C et C ++. Bien que des choses comme les sacs de vol électroniques soient probablement faites avec Java et même HTML et JavaScript.
Je ne suis pas convaincu que Java soit très utilisé dans une compagnie aérienne - la JVM introduit trop d'incertitude pour être utilisée dans une application en temps réel: mais si vous êtes suffisamment compétent en C / C ++ pour obtenir ce type d'emploi, vous peut faire Java dans votre sommeil.
@JonStory: Le temps réel dur est toujours C ou non hébergé (sous-ensemble limité de) C ++. Mais le flightbag électronique est une application pour afficher des graphiques, des listes de contrôle et faire des calculs. Il n'a pas d'exigences en temps réel et fonctionne normalement sur un ordinateur portable ou une tablette standard, bien qu'ils soient intégrés dans de nouveaux avions comme l'A380. Cela peut donc être en Java ou même en HTML + JavaScript.
@JonStory: En passant, si vous mentionnez air * line *, la plupart des TI qu'ils font sont probablement en Java et HTML. Parce que les compagnies aériennes ne font pas d'avionique. Ils font des systèmes de réservation de billets et des applications de planification de vol et les sacs de vol électroniques et rien de tout cela n'a besoin en temps réel. Au fait, chez mon ancien employeur, une équipe a fait un système de contrôle des feux d'aéroport (approche, piste, voie de circulation, barres d'arrêt, etc.) et même cela était à Java. Parce que c'était principalement l'interface graphique de la tour pour allumer les lumières et que cela ne nécessitait pas non plus de temps réel.
Les applications EFB pour tablette qui reçoivent des données du TIS-B et de la météo peuvent ne pas être difficiles en temps réel, mais il serait sage d'afficher les informations assez rapidement.
Désolé ouais, je voulais dire Aviation généralement pas spécifiquement les compagnies aériennes. Les EFB sont une chose, mais je ne les considérerais en aucun cas comme «avionique».
http://programmers.stackexchange.com/a/153267 est une bonne lecture sur le sujet.
@rbp: "temps réel" a une signification très spécifique complètement indépendante de "assez rapidement". Java est bien pour "assez rapide". D'un autre côté, les systèmes "temps réel" ne sont souvent pas particulièrement rapides; ils doivent juste être absolument exempts de tout retard imprévisible (ce qui rend GC hors de question; généralement, même toute allocation dynamique l'est).
merci, je programme dur en temps réel depuis 35 ans, et j'ai choisi mes mots avec soin
Embry Riddle a un programme d'études qui est exactement ce que vous voulez.
Comment se fait-il que cette partie «Veuillez me donner du matériel de référence (livres, sites Web, etc.) pour en savoir plus sur ce domaine. ”A été globalement signalé comme étant essentiellement basé sur l'opinion? Peut-être a-t-il été édité plus tard ...?
il n'a jamais été édité, c'est juste un comportement typique de stackexchange malheureusement.
Huit réponses:
Lorenzo Dematté
2014-12-04 22:23:46 UTC
view on stackexchange narkive permalink

Ok, je postais ceci en commentaire mais devenait ridiculement long ...

J'ai travaillé pendant la majeure partie de ma vie professionnelle dans des domaines qui sont en quelque sorte liés. Je peux voir qu'il y a trois domaines d'étude qui vous aideront beaucoup ici.

Premièrement: les langages de programmation. Connaître une langue utilisée dans l'industrie est un plus. Maintenant je travaille dans l'industrie automobile / transport; Je ne travaille pas sur des matériaux critiques pour la sécurité, nous utilisons donc simplement le C / C ++ standard. Même à ce niveau une bonne connaissance de la programmation et des logiciels de bas niveau (comment écrire un pilote simple, comment interagir avec un périphérique en utilisant ioctl, etc.) sont très utiles.

Avant cela, je a travaillé sur un domaine lié aux langages de programmation et aux compilateurs, en particulier sur la simulation et l'analyse de code concurrent. Entre autres, j'ai brièvement interagi avec des personnes travaillant pour Airbus (des professeurs qui sont dans le milieu universitaire, mais qui aident à construire de vrais logiciels) .Ils voient et utilisent encore beaucoup d'Ada là-bas, alors ... sachant que c'est bien :) sachez que Java est également utilisé, ainsi que des outils spéciaux de vérification du code.

Ce qui nous amène à la seconde: tout ce qui concerne la vérification des logiciels , les deux d'un point de vue théorique et pratique, vous aidera énormément dans cette industrie. Étudiez et pratiquez au moins avec des moniteurs d'exécution et des vérificateurs de modèles. Découvrez diverses techniques d'analyse statique, comme l'interprétation abstraite. Suivez des cours à ce sujet, si vous le pouvez dans votre école.

Et troisièmement: étudiez et pratiquez avec des systèmes embarqués et avec les systèmes d'exploitation en temps réel (plus rares) et comment ils fonctionnent (et comment vous les programmez) Procurez-vous un arduino ou un netduino (pas un Raspberry PI - niveau trop élevé, trop de ressources là-bas!) Et entraînez-vous avec eux. Apprenez à propos d'uboot.

La vérification, le test, la validation, les parties formelles du génie logiciel sont les plus importantes. Si le code est critique pour la sécurité - ce qu'il sera - vous êtes dans une toute autre ligue, là-haut avec les satellites. Vous avez besoin d'une expérience dans l'ingénierie des exigences vraiment minutieuse et atrocement pédante. Les projets d'avionique dans lesquels j'ai travaillé ont été réalisés dans de grandes équipes internationales, vous avez donc besoin d'expérience dans ce domaine également.
Et dans votre CV, vous devriez avoir de nombreux outils de gestion des exigences et de contrôle de version; Portes, Serena, peu importe. Subversion, CVS. Peu importe laquelle, car chaque entreprise a sa propre variante, il suffit d'être habitué à l'idée et de vouloir se soumettre à la discipline.
Jan Hudec
2014-12-04 16:58:12 UTC
view on stackexchange narkive permalink

Je soupçonne que la seule réponse est "sur le tas".

Apprenez à la fois C et C ++ et un peu de programmation embarquée et essayez de postuler pour tous les postes juniors dans les entreprises faisant de l'avionique que vous trouverez.

Les téléphones portables ne peuvent plus vraiment être considérés comme embarqués, mais vous devriez pouvoir trouver un cours de robotique ou de cybernétique (contrôleurs industriels) ou un stage les impliquant. Un stage en électronique grand public pourrait aussi aider.

Et n'oubliez pas que les avionneurs ne font pas eux-mêmes l'avionique mais achètent des modules standard à des fournisseurs comme Garmin ou Honeywell ou les sous-traitent à de nombreuses sociétés de conseil. Et ces entreprises font souvent d'autres types de matériel embarqué (automobile, industriel, etc.).


Notes: Je connais à distance quelqu'un qui a fait de l'avionique et je ne pense pas qu'il le visait spécifiquement; il était juste un bon programmeur C et a postulé pour un emploi. J'ai moi-même fait un peu d'automobile, encore une fois juste postulé pour un emploi C / C ++ (junior; c'était juste après l'obtention du diplôme) dans une société de conseil qui était à l'origine mobile et qui a été déplacée vers l'automobile car le projet original n'a pas vraiment démarré.

+1 pour votre note: je travaille dans un domaine connexe (automobile / transport) et je viens d'en faire la demande. J'avais de bonnes compétences en C / C ++ et c'était ce qu'il fallait.
Graham Bartlett
2014-12-05 00:07:58 UTC
view on stackexchange narkive permalink

Pour l'avionique, ce qui suit sera essentiel juste pour que votre CV soit pris en compte: -

  • Bonnes compétences en C
  • Théorie du contrôle, en particulier l'espace d'états et au-delà
  • Lié à la théorie du contrôle, une base solide en mathématiques
  • Expérience du traitement en temps réel difficile
  • Expérience de travail avec les normes de codage
  • Connaissance avec des processus d'examen

Ce qui suit serait également utile: -

  • Expérience d'Ada, et éventuellement C ++
  • Quelques connaissances en sécurité procédures liées (DO-178B, MISRA, etc.)
  • Connaissance du développement piloté par les tests
  • Expérience des RTOS courants tels que VxWorks
  • Expérience de faible -niveau de programmation sur microcontrôleurs

Avec un BS (pas BEng) en informatique (pas en génie électronique), vous pouvez être désavantagé sur certains de ces points. Vous DEVEZ choisir vos projets pour obtenir la bonne expérience que vous souhaitez offrir aux employeurs.

Bien sûr, vous n’êtes qu’au tout début de votre vie professionnelle. Un diplôme n'est que le début, et tout employeur qui embauche des diplômés saura que vous avez besoin d'une formation. Un bon employeur examinera plus généralement à quel point vous semblez brillant et dans quelle mesure il pense que vous pouvez acquérir de nouvelles compétences. Si vous jouez avec la technologie pendant votre temps libre, c'est probablement une bonne chose à apporter également aux interviews.

RedGrittyBrick
2014-12-04 22:56:06 UTC
view on stackexchange narkive permalink

J'ai un ami qui travaille dans le logiciel Avionics. Y compris les projets spatiaux.

Il s'y est lancé en postulant pour un emploi dans des entreprises qui travaillent dans ce domaine ou similaire, avant cela, il n'avait aucune formation ou expérience particulière en avionique.

Les travaux d'avionique ont tendance à utiliser davantage des langages de programmation qui ne sont pas courants. Je pense qu'il y a beaucoup de C embarqué (donc des compétences générales en C peuvent être utiles) mais aussi d'assemblage et de langages spécifiques au processeur comme Ada (peut-être plus pour l'avionique de défense).

Vous êtes très susceptible de cibler un système d'exploitation en temps réel (RTOS) ou un microcontrôleur. La connaissance de ceux-ci peut donc être un avantage. Vous devrez peut-être écrire des pilotes de périphérique et les porter sur de nouvelles plates-formes (par exemple, d'un microprocesseur à un autre). Vous devrez peut-être programmer des microcontrôleurs (par exemple 8051) en assemblage ou C.

Il est probable que vous rencontriez une rigueur beaucoup plus élevée en termes d'écriture et / ou d'utilisation de tests unitaires, de harnais de test, de couverture outils, tests d'intégration et documentation formelle minutieuse et examen de tout.

Ada a probablement plus de traction dans l'utilisation civile que militaire de nos jours, peut-être que les entrepreneurs militaires ont encore une réaction instinctive contre le mandat, 20 ans de retard ... Airbus et Boeing sont de gros utilisateurs, tout comme les systèmes ferroviaires et le contrôle du trafic aérien. SPARK gagne également du terrain.
Robert
2014-12-04 22:11:56 UTC
view on stackexchange narkive permalink

L'apprentissage du C et du C ++ a déjà été suggéré, et j'ajouterais également le langage de programmation Ada à cette liste. De nombreux logiciels d'avionique sont écrits dans ces trois langages de programmation.

Lors de l'apprentissage du C / C ++, apprendre à coder correctement selon les normes de codage des logiciels d'aviation peut également être utile.

Je recommande de lire:

Si vous souhaitez jouer avec la programmation avionique réelle, vous pourriez être intéressé par un quadrocoptère open source (comme celui de AeroQuad) comme jouet et expérimenter son logiciel.

Ce. Jouez avec l'avionique open source, les systèmes de contrôle au sol, les stabilisateurs, les trackers, ce genre de choses. Ardupilot, planificateur de mission, UDB / MatrixPilot, etc.
peter
2014-12-06 02:27:14 UTC
view on stackexchange narkive permalink

Je ne travaille pas avec l'avionique, mais j'ai travaillé avec la télédétection dans le contexte des sciences de la Terre.

Je pense que ces matériaux pourraient être d'une certaine aide en plus de ce que d'autres ont suggéré, en particulier. si vous êtes intéressé par les aspects scientifiques (désolé, la réponse peut être quelque peu hors sujet si vous ne l'êtes pas).

  • Programmation

    En plus de C, Fortran est encore beaucoup utilisé pour implémenter divers algorithmes et modèles. Pour les tâches et la visualisation plus petites, les gens utilisent souvent Python ( numpy, scipy, pandas, matplotlib) et R (R est un excellent langage de programmation statistique, quelque chose que vous utiliseriez à la place d'Excel pour les choses sérieuses).

    En ce qui concerne C, personne ne semble mentionner que le codage sécurisé est vraiment nécessaire pour ces applications à haut enjeu. Seacord, 2013 est un excellent livre à cet effet.

    • Chapman, Stephen J. Fortran 95/2003 pour les scientifiques et les ingénieurs. McGraw-Hill, 2008.

    • Seacord, Robert. Codage sécurisé en C et C ++ (2e édition) (série SEI en génie logiciel). Addison-Wesley Professional, 2013.

    • Matloff, Norman. Programmation Art of R. No Starch Press, 2011.

  • Physique

    De bonnes bases en physique sont certainement vitales dans l'exploration spatiale.

    De nombreuses mesures effectuées dans l'espace sont liées au rayonnement, j'ajoute donc une référence à cela.

  • Mathématiques

    Le calcul est probablement la chose la plus importante, puis l'algèbre linéaire.

    De nombreux problèmes de conception et de physique sont liés aux statistiques et à l'optimisation.

  • Unix / Linux

    Les systèmes d'exploitation Unix sont beaucoup utilisés dans les sciences appliquées, les systèmes embarqués et supercalculateurs.

    • Kerrisk, M. L'interface de programmation Linux: un manuel de programmation système Linux et UNIX. No Starch Press, 2010.

    • Lucas, MW. Absolute FreeBSD: Le guide complet de FreeBSD. No Starch Press, 2007.

    • de nombreux autres livres, par exemple ceux publiés par O'Reilly

Quelques lectures quotidiennes: phys.org/space-news/ (- ;

Sean
2014-12-06 07:53:03 UTC
view on stackexchange narkive permalink

Je suggère fortement de suivre un cours d'analyse de logiciel et d'apprendre un système de démonstration tel que PVS. Je suis retourné aux études supérieures après 14 ans dans diverses industries du logiciel, et le cours d'analyse de logiciels que j'ai suivi a facilement été le plus révélateur. Cela n'aurait pas eu beaucoup de sens quand j'étais à l'école, mais après avoir travaillé pendant de nombreuses années, le matériel a cliqué. Ce n'était jamais un sujet que je pensais aimer, et cela peut être un peu sec, mais une fois que vous l'aurez compris, vous ne verrez jamais la programmation de la même manière,



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...