Robot Principal 26
Documentation du Club Robot INSA Rennes 2026
Chargement...
Recherche...
Aucune correspondance

La librairie permettant de créer & lire un simili-grafcet. Plus de détails...

Graphe de collaboration de Grafcet:

Fichiers

fichier  ActionNode.h
 Un noeud d'action du grafcet, permettant de réaliser des actions de front montant.
 
fichier  Grafcet.h
 Header wrapper pour faciliter les import.
 
fichier  Node.h
 Représentation d'un noeud du grafcet.
 
fichier  StateMachine.h
 La machine a état permettant de parcourir le grafcet.
 
fichier  Transition.h
 Un noeud de transition du grafcet permettant d'évaluer la condition de passage d'un noeud d'action à un autre.
 

Description détaillée

La librairie permettant de créer & lire un simili-grafcet.

libgrafcet

Copyright (C) 2026 Club Robot INSA Rennes This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Introduction

Cette librairie permet de créer et d'exécuter des pseudo-GRAFCETS. Il est à noter que cette librairie ne se veut pas conforme à la norme, mais seulement inspirée par celle-ci. Elle est donc plus simple, comporte moins de fonctionnalités et est plus limitée.

Compilation

Pour compiler la librairie, vous aurez besoin de CMake, d'un compilateur C++ et de la libc.

cmake -B build
cd build
make

Utilisation

Pour utiliser cette librairie, il vous faut créer une machine à états qui va lire ce grafcet, et lui passer le premier noeud du graphe.

auto startingNode = Grafcet::ActionNode();
auto machine = Grafcet::StateMachine(*startingNode);
// ou alors
auto machine = Grafcet::StateMachine();
machine.setStartingNode(*startingNode);
/* Une fois la machine créée, vous pouvez l'exécuter en appelant la méthode `execute()`.
* Il faut maintenant définir le noeud.
*/
startingNode.actionFunction = []() {
/* Code à exécuter pour ce noeud
* vous pouvez également utiliser la capture de variables locales
* ou bien une fonction nommée
*/
};
/* Ensuite, vous pouvez lui ajouter des enfants.
* NB: Ajouter des actionNode enfants à un actionNode n'est pas supporté et provoquera
* un blocage silencieux du grafcet.
*/
auto t1 = Grafcet::Transition();
startingNode.addChild(t1);
/* Vous pouvez maintenant définir la transition.
* NB: là où enchainer deux actionNode est impossible, enchainer deux transition est possible.
*/
t1.condition = [] {
/* Code à exécuter pour cette transition
* doit retourner un booléen
*/
}
Représente un noeud d'action dans le grafcet Les noeuds d'action n'exécute qu'une seule fois leur opé...
Definition ActionNode.h:27
La machine à état permettant de parcourir le grafcet.
Definition StateMachine.h:25
Représente une transition dans le grafcet Les noeuds de transition présente une fonction personnalisé...
Definition Transition.h:26

Les noeuds peuvent être déclaré synchronisant ou non.

  • Un actionNode synchronisant attend que TOUTES ses transitions enfants soient validées avant de transitionner vers le noeud suivant. Un actionNode non synchronisant ne nécessite qu'une seule transition validée pour transitionner.
  • Une transition synchronisante attend que TOUTES ses noeuds parents soient activés avant de pouvoir évaluer sa condition. Une transition non synchronisante ne nécessite qu'un seul parent activé pour pouvoir évaluer sa condition.