web-dev-qa-db-fra.com

Quelles langues sont utilisées pour la programmation de systèmes en temps réel?

Je n'ai trouvé aucune information utile sur les langages de programmation pour les systèmes temps réel. Tout ce que je trouvais était Systèmes temps réel et langages de programmation: Ada 95, Java temps réel et C-POSIX temps réel ( quelques pdf ici ), qui semble parler d’extensions de Java et de C pour systèmes temps réels (je n'ai pas le livre à lire). En outre, le livre a été publié en 2001 et les informations peuvent maintenant être obsolètes.

Je ne suis donc pas sûr que ces langages soient utilisés dans des applications du monde réel ou que les systèmes en temps réel dans le monde réel soient créés dans d'autres langages, comme les DSL.

Si la deuxième option est vraie pour vous, quelles sont les caractéristiques exceptionnelles de la langue que vous utilisez?

22
eKek0

La spécification temps réel pour Java comporte maintenant plusieurs implémentations de qualité commerciale:

Ces produits couvrent le continuum allant de la compilation au code natif (Aonix) à J2ME (aicas, apogée), en passant par J2SE complet (Sun, IBM). La plupart, sinon tous, ont assisté à des déploiements dans un petit nombre de systèmes essentiels à la sécurité ou à la mission, mais la dynamique se renforce. Les exemples incluent la modernisation du radar de surveillance spatiale d'Eglin AFB et l'utilisation du RTSJ par la US Navy dans le DDG-1000/Zumwalt destroyer . Sun revendique également le déploiement dans le domaine du traitement des transactions financières.

Si vous êtes intéressé par RTSJ, je suggère la programmation de Peter Dibble Programmation de plate-forme en temps réel , ou celle du professeur Wellings/ Programmation simultanée et en temps réel en Java .

Sur une note connexe, des travaux sont également en cours pour fournir un profil de sécurité critique pour le langage de programmation Java, construit comme un sous-ensemble de RTSJ. En outre, un groupe d'experts s'est formé pour explorer un système RTSJ DRTSJ distribué, mais les travaux sont dans l'impasse.

21
andersoj

Je suis un ingénieur en logiciel avionique. J'ai pu participer à plusieurs projets de développement. Les langages que j'ai utilisés dans ces projets sont: C, C++ et Java temps réel.

C est génial. Le C++ n’est pas si mauvais, mais le C/C++ requiert des normes de codage strictes pour les considérations de sécurité telles que le DO-178B.

Je pense que le Java temps réel est la voie à suivre, mais je ne vois pas encore beaucoup d'applications d'avionique.

L'entraîneur à réaction coréen T-50 disposera d'un ordinateur de mission fonctionnant sous RT application Java servant de HUD et MFD écrans, ainsi que toutes les fonctions critiques.

24
Keugyeol

Le livre couvre l'utilisation d'Ada 95, du système Java Real-Time et des extensions POSIX en temps réel (programmées en C). Aucune d'entre elles n'est directement une langue spécifique à un domaine.

Ada 95 est un langage de programmation couramment utilisé à la fin des années 90 et (AFAIK) toujours largement utilisé pour la programmation en temps réel dans les industries de la défense et de l'aérospatiale. Il y a au moins un DSL construit sur Ada - SparkAda - qui est un système d'annotations décrivant les caractéristiques du système pour un outil de vérification de programme.

Cette interview du 6 avril 2006 indique certaines des modifications apportées aux classes et aux machines virtuelles qui composent le système Java Real-Time. Il ne mentionne aucune extension linguistique spécifique à un domaine. Je n'ai pas rencontré d'utilisation de Java dans les systèmes temps réel, mais je n'ai pas étudié les types de systèmes dans lesquels je m'attendrais à le trouver (je travaille dans la simulation aérospatiale, où C++, Fortran et occasionnellement Ada pour les systèmes en temps réel dans la boucle).

Temps réel POSIX est un ensemble d’extensions des fonctionnalités du système d’exploitation POSIX. En tant qu'extensions de système d'exploitation, elles ne nécessitent rien de spécifique dans la langue. Cela dit, je peux penser à un DSL basé sur C pour décrire les systèmes intégrés - SystemC - mais je ne sais pas s'il est également utilisé pour générer les systèmes intégrés.

Le livre ne mentionne pas Matlab , qui est passé d’un outil de simulation à un système de développement piloté par un modèle pour les systèmes temps réel. Matlab/Simulink est en réalité un DSL pour la programmation linéaire, les machines à états et les algorithmes. Matlab peut générer C ou HDL pour les systèmes temps réel et intégrés. Il est très rare de voir un travail en temps réel dans l'industrie de la défense, dans le domaine de l'avionique, de la guerre électronique ou de tout autre secteur de la défense, qui ne nécessite aucune expérience de Matlab. (Je ne travaille pas pour Matlab, mais il est difficile de trop insister sur son omniprésence dans l'industrie)

12
Pete Kirkham

Les applications en temps réel peuvent être faites dans presque toutes les langues. L'environnement (système d'exploitation, bibliothèques d'exécution et bibliothèques d'exécution) doit cependant être conforme aux contraintes temps réel. Dans la plupart des cas, le temps réel signifie qu'il y a toujours un moment déterministe dans lequel quelque chose se passe. Le temps déterministe est généralement une valeur de temps très basse dans la plage des microsecondes/millisecondes.

Les systèmes en temps réel dépendent uniquement de ce critère, car les spécifications spécifient généralement quelque chose du type 'Chaque x (période) (faire quelque chose | vérifier quelque chose)'. Cela se produit généralement si le système s'interface avec des capteurs externes et contrôle des systèmes permettant de sauver ou qui mettent la vie en danger.

Je travaillais sur un système de navigation et d'infodivertissement en voiture développé principalement en C/C++ avec un système d'exploitation configuré spécifiquement pour répondre aux contraintes en temps réel permettant la navigation et la lecture multimédia en temps réel.

Mais ce n’est pas tout pour les systèmes temps réel: la sélection des algorithmes dans l’ensemble du système a généralement des exécutions déterministes selon la notation Big-O, utilisant principalement un temps linéaire ou constant. Tout le reste est considéré comme non déterministe et donc non utilisable pour les systèmes temps réel.

7
grover

Tous les systèmes temps réel avec lesquels j'ai travaillé étaient principalement écrits en C avec des fragments d'assembleur, ou principalement en assembleur avec des fragments de C (selon que l'on parle des années 90 et au-delà, ou des années 80, respectivement.) Toutefois, certains des systèmes temps réel avec lesquels j'ai travaillé ont utilisé - pas exactement les DSL - des générateurs de code internes.

6
Eddie

Langue orientée en temps réel?

Quel est le temps réel

Nous devons d’abord définir ce que temps réelsignifie.

Bien sûr, selon le fonctionnement de votre outil par rapport à l'environnement physique purement en temps réelne peut pas être effectué efficacement, principalement en raison du nombre important de dépendances de tiers.

Si vous construisez des éléments intégrés à l’aide de microcontrôleurs tels que arduino , le langage à utiliser sera limité par le matériel, mais avec des éléments plus complexes tels que Raspberry Pi , le choix de langage est très vaste.

Granularité

Cela dépend de ce que vous mesurez, si vous travaillez avec:

  • températures météorologiques, une lecture toutes les 10 minutes peut suffire
  • taille ou poids des personnes, un ou peut-être quatre lus par jour
  • état du serveur, entre 1 seconde pour un débogage précis et environ 1 heure pour un serveur secondaire sans importance silencieux.
  • nombre de collisions atomiques: quelque chose de plus fin ...

Lecture basée sur les événements

La bonne (meilleure) méthode de collecte de données repose sur valeur: événement de changement... chaque fois que le périphérique le permet.

Votre outil ne doit pas pollvaleurs de l’appareil, mais l’appareil doit envoyer des valeurs à votre outil quand elles changent.

Cela peut être fait en utilisant un interruption matérielletrigger) ou en utilisant un protocole de port tel que RS-232en restant à l'écoute sur un port série, par exemple).

Environnement de surveillance

La dernière chose à être averti est comment un utilisateur légitime interagira avec.

Si vous construisez un périphérique autonome incorporé, tel que robot, vous pouvez utiliser des bibliothèques graphiques pour interagir avec l'écran tactile.

Si vous construisez un moniteur basé sur le Web, vous devrez peut-être garder à l'esprit que le client peut être un ancien écran 800x600monochrome, avec une connexion Internet médiocre et un petit processeur ... Mais cela dépend de l'objectif final si vous pouvez interagir avec les clients, vous pouvez vous assurer que le matériel et les connexions Internet sont solides. Quoi qu’il en soit, vous devez surveiller les pertes de connexion et les retards de communication entre le serveur et le client. Il existe principalement des dépendances de tiers.

Quel langage de programmation?

A partir de là, le choix de langue est large et dépend clairement de

  • vos connaissances.
  • granularité demandée (en utilisant bien sûr aussi les événements)
  • le temps dont vous disposez pour construire l'outil (argent;)
  • retard, collègues ...
  • type d'appareil
  • type de surveillance
  • d'autres raisons politiques

Vous pouvez créer un moteur de surveillance en temps réel en utilisant bash et sql seulement, j'ai vu des moteurs sophistiqués construits sous postgresql seulement ... J'ai personnellement construit un site Web , moniteur d’énergie solaire en utilisant Perl , mysql et javascript .

5
F. Hauri

Je ne peux pas croire que personne n'ait mentionné le langage de programmation LabVIEW, largement utilisé pour les systèmes critiques en temps réel. Il dispose de bibliothèques étendues et de modèles de conception bien connus pour l’architecture et la mise en œuvre de systèmes RT.

National Instruments fabrique également divers matériels (cRIO, PXI, etc.) conçus pour des applications en temps réel.

Nous utilisons LabVIEW pour la fracturation hydraulique (fracturation hydraulique) qui est utilisée dans des environnements sécuritaires critiques.

À propos, LabVIEW est également utilisé pour les applications non-RT.

4
Kamran Bigdely

Les automates programmables exécutent du code ladder et fbd, qui est un code DSL en temps réel dans la mesure où vos options sont si limitées qu'il est difficile de programmer de manière à obtenir des performances d'exécution imprévisibles

2
Tallak Tveide

My Kickstarter http://www.kickstarter.com/projects/767046121/crawl-space- propose une application vraiment utile du langage C à la programmation en temps réel - et à toutes les questions connexes (comme la programmation parallèle) - computing-with-connel Cela s'appelle "Programmation large" et je l'ai fait presque toute ma vie. Les récompenses comprennent une bibliothèque de logiciels et un livre - conçus pour être utiles.

1
Larry Dickson

la société pour laquelle je travaille depuis 2003 développe et déploie une plate-forme Scada/Mes. L'implémentation initiale a commencé en 1993 et ​​utilisait Modula2 sur OS/2. Plus tard (1998), il a été porté sur Ada95 et Windows. Actuellement (2019), nous utilisons le compilateur Ada par AdaCore. Notre système a été porté et déployé sous Windows 32/64, HPUX, OpenVMS (et dernièrement même sur Raspberry). Nous avons plusieurs installations en Europe centrale (industrie gazière, raffineries, usines, centrales électriques). Nous pensons que les fonctionnalités d'Ada confèrent à notre système un haut degré de fiabilité et permettent d'éviter de nombreuses erreurs qui pourraient facilement se produire si nous utilisions des langues telles que C. Voir aussi mon blog https://www.ipesoft.com/en/blog/ quelle-langue-est-le-d2000-écrit

0
Peter Humaj