A4A : Modbus TCP Server + Web HMI = A4A_Piano

Bonjour,

J’évoquais ce tantôt en fin d’article une application mêlant un serveur Modbus TCP et une IHM Web pour constituer un « piano » pour mes essais et démonstrations.

Cette application s’appuie donc sur le framework Gnoga qui permet de réaliser des IHM Web entre autres. Gnoga, de Monsieur David Botton, intègre également les Simple Components de Monsieur Dmitry Kasakov qui fournissent entre autres le serveur web embarqué dans l’application.

Gnoga permet la création dynamique de contenu web et l’animation des pages depuis une application écrite en Ada.

En ce moment je joue beaucoup avec Inkscape qui permet plein de fantaisie dans l’édition au format SVG de graphiques vectoriels.
C’est bien sûr intéressant pour dessiner des synoptiques que l’on pourra animer relativement facilement et cela permet aussi de faire un beau schéma :

Structure de l'application A4A_Piano
Structure de l’application A4A_Piano

L’application « A4A_Piano » met en œuvre le noyau « kernel0 » qui intègre seulement un serveur Modbus TCP, fourni par libmodbus, et une tâche principale ainsi qu’une tâche périodique.
Le noyau gère les échanges entre les tâches et le serveur Modbus TCP, la tâche principale appelle la fonction principale du programme utilisateur, la tâche périodique appelle la fonction périodique du programme utilisateur.
Le programme utilisateur est en charge de la gestion des échanges entre les zones mémoire E/S et les objets utilisateur ainsi que du traitement de ces objets.
C’est de l’histoire ancienne.

L’IHM Web est composée d’une part des vues affichées dans le / les navigateurs, ces vues étant constituées naturellement de technologies Web telles HTML 5, CSS, SVG et JavaScript, et d’une contrepartie en Ada fondée sur le patron de conception Modèle-Vue-Contrôleur un peu bricolé.

Tel que réalisé dans « A4A_Piano », le code HTML est juste une amorce, le SVG et le CSS ont été écrits à la main, je vous conseille la lecture des tutoriels de Monsieur Jenkov, courts et efficaces.
Avec un peu d’habitude on arrive à faire de belles choses avec SVG et Inkscape et on peut alors penser plus grand.

En fait, plutôt que de tout piloter d’un côté ou de l’autre, j’ai pris le parti de laisser l’aspect graphique côté technologies Web et de n’agir que sur un attribut d’état. En fonction de l’état, le CSS fait le reste pour l’animation.

Chaque objet de synoptique HTML ou SVG que l’on souhaite animer dispose d’un identifiant dont on pourra se servir pour le connecter à un pendant « View », un objet dérivé des objets fournis par Gnoga.
Pour chaque connexion on va instancier une collections d’objets « View » ainsi qu’une tâche gérant le rafraîchissement.

Ces objets « View » gèrent la mise à jour des objets HTML ou SVG auxquels on les a connectés à la création de la connexion ainsi que l’interaction avec l’utilisateur, c’est à dire les « Cliques » souris par exemple.
D’un autre côté on les a également connectés avec un objet « Controller » dont le rôle est d’une part de servir de proxy aux objets « View » et de gérer l’accès en lecture / écriture des données utilisateur.
La tâche « Scanner » va piloter elle le rafraîchissement des « Controllers ».

Le code n’est sans doute pas optimal mais il est quand même disponible dans le dépôt comme d’habitude.

Pour information, j’espère bien vous voir à ces 17èmes Journées du Logiciel Libre…
D’autant plus que les Gentils Organisateurs ont bien voulu m’accorder la faveur insigne d’un stand pour la présentation du projet « Ada for Automation » !

JDLL2016

Cordialement,
Stéphane