Pyrame est un framework léger développé au Laboratoire Leprince-Ringuet (IN2P3/École Polytechnique) qui permet de prototyper rapidement et facilement des systèmes online de complexité arbitraire.
Pyrame est basé sur une série de modules, gérant chacun un matériel spécifique ou une fonctionnalité système. Ils communiquent entre eux au moyen de connections réseau standards (TCP) et d’un protocole très simple et ouvert, basé sur XML. Cette structuration permet un déploiement très facile des modules dans un environnement réseau, même sur des sites différents.
Le module de commande est une machine virtuelle Python intégrant un serveur réseau et un parseur XML. C’est un composant passif qui exécute ses contrôles-commandes à chaque fois qu’il reçoit une requête. Toute la complexité réseau et protocolaire est masquée au développeur qui peut se concentrer sur le contrôle-commande proprement dit. Il dispose de deux primitives qui permettent de renvoyer un résultat ou de faire appel à un autre module pour un fonctionnement hiérarchique.
Plusieurs matériels, courants sur nos bancs de tests, sont déjà implémentés : alimentations basses et hautes tensions (Agilent, CAEN, Hameg...), générateur de fonctions (Agilent), table de déplacement (Newport), adaptateurs de bus (Prologix, Cometh...). Pyrame permet d’unifier l’accès à ces différents matériels de génération et de technologies différentes.
Une chaîne d’acquisition générique à haut débit est également proposée. Elle permet d’acquérir, de décoder et de dispatcher les données en temps réel. Les médias actuellement supportés sont Ethernet et UDP .
Afin d’intégrer ces contrôles-commandes dans des systèmes existants, nous fournissons des bindings (interfaces) pour les langages de programmation courants (C, C++, Python, R), et il est très facile d’en implémenter de nouveaux. Il suffit d’un support socket TCP et d’un parseur XML basique. Ces bindings permettent d’interfacer Pyrame au SCADAs courants (Tango, OPC-UA, Xdaq...) facilitant leur intégration dans des projets existants.
Pour les petits bancs, l’achat d’un ordinateur peut se révéler superflu, c’est pourquoi nous avons porté notre framework sur de petites plateformes embarquées, en particulier le Raspberry-Pi et l’Arduino. Cela permet d’avoir un contrôle-commande évolué à moindre coût.
Le framework inclut également des services centralisés. Il propose un module permettant de partager des variables et leurs valeurs entre tous les modules du système. Un autre permet de collecter des statistiques parmi les différents modules et de les retransmettre (par exemple au GUIs) avec un timing adapté. Un autre module permet de repérer des signaux particuliers par leur nom afin de pouvoir activer les générateurs correspondants sans avoir à connaître leur adresse.
On peut, en interfaçant les modules entre eux, construire des systèmes complexes. Nous avons ainsi écrit le contrôle-commande du SiW-Ecal/ILD en aggrégeant 25 modules entre eux. Naturellement, la configuration d’un tel système est délicate et c’est pourquoi nous proposons dans Pyrame un système de configuration globale générique au moyen de fichiers XML.
Sur les bancs de tests pour l’électronique HEP, c’est généralement Labview qui est utilisé. Cet outil présente des avantages (programmation graphique, importante bibliothèque de composants) et des inconvénients (maintenabilité, stabilité, interfaçage). Pyrame se positionne sur le même créneau en apportant des solutions à ces inconvénients : c’est un outil très stable. La programmation Python est à la fois simple et maintenable. La simplicité de son protocole garantit une facilité d’interfaçage avec tous les systèmes et tous les langages.
Pour plus d’informations, merci de visiter cette page internet.
Frédéric MAGNIETTE (LLR – IN2P3/CNRS – École Polytechnique)