基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill plc-testing-cicd命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Concevoir et maintenir un watchdog auto-correcteur pour services HTTP — checks de santé, auto-restart, état persistant, rapports et pièges bash.
Serveur de messagerie sécurisé auto-hébergé (Signal-like) avec Flask + WebSocket + AES-256-GCM + pont EVA
ADAM-SENTINEL — Veilleur technologique 24h/24h. Scanne 10 domaines, cree des rapports, met a jour les skills, alerte sur les CVE et breaking changes.
| name | plc-testing-cicd |
| description | Concevoir des tests unitaires et pipelines CI/CD pour PLC. |
| version | 1.0.0 |
| author | EVA |
| license | MIT |
| platforms | ["linux","macos","windows"] |
| metadata | {"tags":["plc","testing","unit-tests","cicd","devops","twincat","tcunit","plcsim-advanced","simulation"],"related_skills":["beckhoff-twincat","siemens-scl"]} |
Le développement d'automatisme moderne intègre les méthodologies DevOps. L'automatisation des compilations, le versioning propre avec Git et l'exécution systématique de tests unitaires permettent de sécuriser le code avant le déploiement sur site.
Cette compétence guide l'agent EVA pour écrire des tests unitaires PLC (avec TcUnit sous TwinCAT), concevoir des scripts d'intégration fonctionnels (avec PLCSIM Advanced sous Siemens), et structurer des pipelines de CI/CD (GitLab CI, GitHub Actions) pour les projets d'automatisme.
À utiliser lorsque l'utilisateur demande de :
TcUnit est le framework de test unitaire standard conforme à la CEI 61131-3 pour Beckhoff TwinCAT. Les tests sont écrits sous forme de blocs fonctionnels (FB) qui héritent de FB_TestSuite.
(* Bloc Fonctionnel FB_Scale_Test héritant de TcUnit.FB_TestSuite *)
FUNCTION_BLOCK FB_Scale_Test EXTENDS FB_TestSuite
VAR
fbScale : FB_Scale; // Instance du bloc à tester
// Variables d'entrées
rInputRaw : REAL;
rRawMin : REAL := 0.0;
rRawMax : REAL := 100.0;
rEUMin : REAL := 0.0;
rEUMax : REAL := 10.0;
// Variables de sorties
rOutputScaled : REAL;
bScaleFault : BOOL;
END_VAR
(* Corps du Bloc de Test *)
TEST('TestScaleNominal');
// 1. Arrange & Act
rInputRaw := 50.0;
fbScale(
Input_Raw := rInputRaw,
Raw_Min := rRawMin,
Raw_Max := rRawMax,
EU_Min := rEUMin,
EU_Max := rEUMax,
Output_Scaled => rOutputScaled,
Scale_Fault => bScaleFault
);
// 2. Assert
AssertEquals_REAL(
Expected := 5.0,
Actual := rOutputScaled,
Delta := 0.01,
Message := 'La valeur de mise à l'échelle nominale à 50% devrait être 5.0'
);
AssertFalse(
Condition := bScaleFault,
Message := 'Le bit de défaut ne devrait pas être actif'
);
TEST_FINISHED();
Pour Siemens S7-1500, nous utilisons l'API de PLCSIM Advanced pour lancer une instance virtuelle de l'automate, y charger le programme, et valider son comportement en simulant le terrain avec un script Python.
import time
# verify_plc_sim charge dynamiquement le wrapper C# PLCSIM Advanced API
from tools.verify_plc_sim import SiemensPLCSimulator
# 1. Démarrage de l'instance de simulation
sim = SiemensPLCSimulator(instance_name="PLCSIM_Test_Line1")
sim.start()
# 2. Chargement des variables I/O
# Simuler l'appui sur le bouton marche (Entrée %I0.0 de l'automate)
sim.write_tag("Tag_Start_Button", True)
time.sleep(0.1) # Attente du cycle automate
sim.write_tag("Tag_Start_Button", False)
# 3. Validation de l'activation du moteur (Sortie %Q0.0 de l'automate)
time.sleep(1.0) # Attente du temps de démarrage
motor_state = sim.read_tag("Tag_Motor_Running")
# Assertion du test
if motor_state == True:
print("TEST SUCCEEDED: Le moteur a démarré après appui sur le bouton.")
else:
print("TEST FAILED: Le moteur ne s'est pas activé.")
# 4. Nettoyage
sim.stop()
La compilation automatisée des projets PLC nécessite d'utiliser des conteneurs Windows ou des serveurs d'intégration possédant les licences et logiciels d'ingénierie installés.
.gitlab-ci.yml pour compiler un projet TwinCAT :stages:
- build
- test
build_twincat:
stage: build
tags:
- windows-builder # Cible un runner Windows avec TwinCAT XAE installé
script:
- echo "Démarrage de la compilation du projet TwinCAT..."
# Utilisation de la CLI TwinCAT pour compiler
- '& "C:\Program Files (x86)\Beckhoff\TcXaeShell\Common7\IDE\devenv.com" "MyTwinCATProject.sln" /Build "Release|TwinCAT RT (x64)"'
artifacts:
paths:
- MyTwinCATProject/_boot/
run_unit_tests:
stage: test
tags:
- windows-runner
script:
- echo "Exécution des tests unitaires TcUnit..."
# Démarre le runtime TwinCAT local en mode Config et injecte les tests
- '.venv\Scripts\python.exe scripts/run_tcunit_runner.py --solution "MyTwinCATProject.sln"'
dependencies:
- build_twincat
Compilation échouée en CI à cause de fenêtres interactives (Popups) :
/NoSplash, /Silent) et s'assurer que les configurations du projet désactivent l'authentification interactive.État mémoire persistant entre les tests (State Leakage) :
Instanciation concurrente de simulateurs :
CI_JOB_ID) pour nommer dynamiquement les instances et les isoler sur des adresses IP de sous-réseau virtuel différentes.FB_TestSuite de TcUnit et appellent TEST_FINISHED() en fin de cycle.TEST().try...finally pour éviter les fuites de processus sur le serveur..gitignore du projet excluent les fichiers temporaires générés par TIA Portal (~*) et TwinCAT (.vs, LineInfo).