4. Benjamin MARRON
Gentleman coder since 1996
Dev Lead
X/Twitter : @bmarron
Bluesky : bmarron.bsky.social
Linkedin : marronbenjamin
5. Conséquences
• Prise de conscience de la dangerosité potentielle des ouvrages
• Etat des lieux des tunnels français
• Evolution de la réglementation au niveau européen :
• examen périodique,
• obligation d'exercices de sécurité réguliers
12. Supervision
• Connaitre l’état de chaque équipement (fonctionnel et technique)
• Algorithmes de calculs (alarmes, synthèses, …)
• Monde des mainteneurs
16. Système d’Aide à l’Exploitation (SAE)
• Connaitre l’état synthétique d’un ouvrage (fonctionnel et technique)
• Déclenchement de procédures d’exploitation
• Monde des superviseurs
19. Rénovation des IHM
Ancien système
• Client lourd
• Langage propriétaire
• Difficultés de création de
nouvelles IHM
• Utilisation de taches C sur le
poste opérateur
• Communication via socket
Nouveau système
• Client léger
• Java11 (SpringBoot)/Angular
• IHM guidée par le paramétrage
• Communication asynchrone
• Projet global de refonte du SAE
21. Rénovation des IHM
Problématiques à résoudre
• 19 ouvrages
• Plusieurs vues par ouvrage : Signalisation, Ventilation, Eclairage, …
• Affichage des données en temps réel pour la vue concernée
Filtrage des données transmises à l’IHM par ouvrage et domaine
24. Filtrer les données ?
2 Commande d’envoi
11 Exécution d’une commande
1 Domaine Signalisation
31 Commande à exécuter sur le système destinataire
7 Identifiant du tunnel
20 Type d’équipement (20 = PMV)
320 Identifiant du panneau
1 Identifiant du message
0 Fin du message
XXX Identifiant retour
25. Traiter les données en temps réel ?
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
public void receiveMessage(Object message) {
ConnectorStateEvent connectorEvent = new ConnectorStateEvent(this);
connectorEvent.setTechnicalState(TechnicalState.NORMAL);
applicationEventPublisher.publishEvent(connectorEvent);
}
public void processConnectorStateEvent(ConnectorStateEvent connectorEvent) {
// Processing the event
…
}
Publication
Réception
26. Afficher les données filtrées en temps réel ?
@Autowired
SimpMessagingTemplate template;
public void broadcastConnectorStateEvent(ConnectorStateEvent connectorEvent) {
template.convertAndSend("/topic/ALM", connectorEvent);
logger.info("Envoi message", connectorEvent.getTechnicalState());
}
ngOnInit() {
this.rxStompService.watch('/topic/ALM').subscribe((message: Message) => {
this.receivedMessages.push(message.body);
});
}
Publication
Réception
https://stomp-js.github.io/