Systèmes embarqués · Cybersécurité · Migration technologique · Temps réel

Applications embarquées de traitement de données pour un calculateur de réacteur nucléaire

Contexte

Conception, évolution et maintenance de plusieurs applications logicielles destinées au traitement et à l’exploitation des données acquises par un calculateur de réacteur nucléaire, persistées dans une base MariaDB. Ces applications s’inscrivaient dans un système embarqué développé et maintenu sur plusieurs générations de matériel par le bureau d’études Hardware du service MCO d’Assystem (Maintien en Conditions Opérationnelles).

Au sein du bureau d’études Software, j’ai participé à la modernisation de l’architecture logicielle, le renforcement de la sécurité du système, l’évolution de l’IHM et la migration progressive des applications historiques. Le projet se situait à l’interface entre logiciel applicatif, système Linux, drivers, communications inter-processus et matériel embarqué, avec des contraintes fortes liées à la pérennité et à la maintenabilité d’un système industriel existant.

Le projet était mené selon un cycle en V imposé par EDF, le client. J’étais chargé de la rédaction des conceptions détaillées pendant le développement. J’ai pu pour cela m’appuyer sur Doxygen. La complexité et la sensibilité du système ne permettent pas d’en détailler davantage l’architecture ici, mais ses étapes essentielles étaient : acquisition (électronique), passerelle entre l’électronique et des langages plus évolués (assembleur propriétaire), traitement (C++) et affichage (QML) — mon intervention portant sur ces deux dernières étapes.

Chaîne de traitement, de l’acquisition à l’affichage — les deux étapes couvertes par mon intervention sont mises en évidence

Contraintes techniques

Le système était constitué de plusieurs briques logicielles communiquant avec le calculateur, les périphériques matériels et les différents services du système d’exploitation, réparties sur plusieurs niveaux de la pile logicielle : applications métier (traitement, exploitation et visualisation des données acquises), interface graphique Qt (notamment sur écran tactile), services système, communication inter-processus via D-Bus, drivers d’accès aux équipements matériels, et système d’exploitation Linux (configuration et durcissement de la plateforme). Faire évoluer un système aussi étendu sans en casser la cohérence était une contrainte en soi.

Cette architecture nécessitait une collaboration permanente avec le BE Hardware, notamment lors des évolutions de la carte électronique, des périphériques ou des interfaces matérielles, le matériel et le logiciel évoluant conjointement au fil des générations, tout en préservant un patrimoine logiciel et matériel important plutôt que de le remplacer d’un bloc.

Le réseau du site restant isolé, sans connexion vers l’extérieur, les environnements de validation devaient être construits et exploités dans ces mêmes conditions, y compris pour l’automatisation des recettes.

Démarche

Cette position entre les bureaux d’études Hardware et Software a demandé un développement multi-couches, de l’acquisition jusqu’à l’application graphique, pour intervenir sur l’ensemble de la chaîne logicielle en coordination avec les évolutions matérielles décidées côté Hardware.

La migration vers C++/Qt s’est faite progressivement : analyse et compréhension du comportement des applications Java existantes, reprise des fonctionnalités en C++, conception des interfaces graphiques en QML, intégration avec les services système et les communications D-Bus et les drivers, puis validation du comportement de la nouvelle implémentation par rapport à l’existant.

Pour faciliter les développements futurs, j’ai travaillé sur la simulation de l’étape d’acquisition, pendant qu’un autre développeur de l’équipe construisait un simulateur de l’étape de préacquisition, de quoi découpler les évolutions applicatives des contraintes du matériel réel.

Côté outillage, j’ai participé à la mise en place de Squish pour Qt au sein d’environnements Docker de pré-production, afin d’automatiser des processus lourds de validation et d’intégration allant au-delà des seuls tests unitaires. La fiabilité, la qualité du code et la sécurité étant des exigences fortes pour ce client, SonarQube a été intégré au cycle de développement pour analyser en continu la qualité et la sécurité du code produit.

Au-delà du développement en bureau d’études, des déplacements réguliers sur site, dans différents CNPE partout en France, ont permis d’intervenir directement sur les systèmes en exploitation pour leur mise à niveau, à la fois matérielle et logicielle, une proximité avec le terrain et le client qui complétait le travail réalisé à distance.

Réalisations

  • Migration Java → C++/Qt

    Reprise complète des applications historiques vers une nouvelle architecture C++, avec interfaces graphiques repensées en QML pour écran tactile.

  • Renforcement de la sécurité

    Chiffrement des communications inter-systèmes et durcissement du système d’exploitation, suite aux exigences issues de la LPM de 2018.

  • Documentation

    Rédaction des dossiers de conception détaillées, code commenté et claire

  • Simulateur de l’étape d’acquisition

    Développé pour découpler les évolutions logicielles futures des contraintes du matériel réel.

  • Outillage qualité

    Mise en place de Squish pour Qt au sein d’environnements Docker de pré-production, et intégration de SonarQube au cycle de développement.

  • Interventions sur site

    Déplacements dans plusieurs CNPE en France pour la mise à niveau des systèmes, matérielle et logicielle.

Déploiement

Une bonne partie des CNPE est aujourd’hui équipée de la nouvelle version du système, le déploiement se faisant progressivement, au rythme des visites décennales (VD) de chaque tranche. Signe de confiance du client, le contrat a été reconduit jusqu’en 2038 à ce jour.

Enseignements

Ce projet a été l’occasion de me perfectionner en C++ et en QML, sur un système aux contraintes fortes : choix d’OS imposés, versions de bibliothèques figées, à intégrer sans toujours pouvoir s’appuyer sur les pratiques ou versions les plus récentes. Il m’a aussi appris à tenir la relation client dans la durée, à assurer un management d’équipe sur site, et à mesurer concrètement, sur un projet mené à plusieurs et dans le temps, l’importance de la qualité du code, des tests et de la communication entre développeurs.

Compétences exercées sur ce projet

C++ · QML · Linux · D-Bus · Drivers · Écran tactile · Durcissement OS · Puppet · Squish · Docker · SonarQube · Doxygen · MariaDB

Un besoin similaire ?

Parlons de votre projet