Ce système de signalisation ferroviaire est un exemple d'implémentation conforme à la norme CENELEC 50128 (SIL2). Il démontre la gestion des signaux ferroviaires simples avec support complet pour les changements d'états, les commandes réversibles et la gestion d'événements asynchrones. La simplicité de ce projet, fait qu'il est techniquement conforme à SIL4 sous la CENELEC 50128.
- 🚦 Gestion complète des aspects des signaux (Rouge, Vert, Jaune)
- ⏱️ Traitement asynchrone des commandes
- ↩️ Support complet undo/redo des commandes
- 🔒 Implémentation conforme SIL2
- 🧪 Tests unitaires exhaustifs
- Compilateur C++23
- CMake 3.15+
- Conan 2.8
- Boost 1.84.0
- GTest 1.14.0
- Linux pour la simplicité, mais Conan le projet est compatible sur Windows avec Conan
git clone https://github.com/your-org/railway-signaling.git
cd railway-signaling
conan profile detect
mkdir build && cd build
conan install .. --output-folder . --build=missing
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build .
ctest --output-on-failure
Le système utilise le pattern Command pour encapsuler toutes les opérations sur les signaux :
- Permet la réversibilité des opérations
- Garantit la traçabilité des changements
- Facilite l'audit de sécurité
Les changements d'état suivent un workflow strict :
Rouge ⟷ Jaune ⟷ Vert
Chaque transition est validée selon les règles de sécurité définies.
Utilisation de Boost.Asio et Boost.Signals2 pour :
- La gestion des commandes asynchrones
- La notification des changements d'état
- La surveillance du système
La documentation complète est disponible dans le dossier docs/
:
- Exigences CENELEC et SIL
- Référence des Classes
- Documentation de Sécurité
- Documentation de Conception
Le projet inclut plusieurs niveaux de tests :
- Tests unitaires (GTest)
- Tests d'intégration
- Tests de validation de sécurité
Pour exécuter un test spécifique :
./build/bin/railway_signaling_test --gtest_filter=RailwaySignalTest.AspectChange
Ce projet suit les directives de la norme CENELEC 50128 à titre d'exemple :
- Développement basé sur les exigences de sécurité
- Documentation exhaustive
- Traçabilité complète
- Validation indépendante
- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature
) - Commit les changements (
git commit -m 'Add AmazingFeature'
) - Push vers la branche (
git push origin feature/AmazingFeature
) - Ouvrir une Pull Request
Distribué sous la licence MIT. Voir LICENSE
pour plus d'informations.