基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill beckhoff-twincat命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 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 | beckhoff-twincat |
| description | Programmer sous TwinCAT et utiliser le protocole ADS. |
| version | 1.2.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"EVA":{"tags":["beckhoff","twincat","ads","ethercat","plc","industrial-automation","pyads","multi-read"],"related_skills":["industrial-protocols","systematic-debugging"]}} |
L'approche de Beckhoff repose sur le concept de PC Control : transformer un PC industriel (IPC ou Embedded PC sous Windows ou TwinCAT/BSD) en contrôleur temps réel déterministe de haute performance. L'environnement de développement et de programmation est TwinCAT 3 (intégré directement sous Microsoft Visual Studio).
Concepts fondamentaux de l'environnement :
À utiliser lorsque l'utilisateur demande de :
pyads) et l'automate TwinCAT.TwinCAT 3 supporte pleinement la programmation orientée objet (POO) pour le Texte Structuré (ST).
// --- DÉFINITION DE L'INTERFACE ---
// Fichier : I_Sensor.TcIO
INTERFACE I_Sensor
METHOD ReadValue : REAL
END_METHOD
// --- DÉFINITION DE LA CLASSE D'IMPLÉMENTATION ---
// Fichier : FB_AnalogSensor.TcPOU
FUNCTION_BLOCK FB_AnalogSensor IMPLEMENTS I_Sensor
VAR
rRawValue : REAL; (* Valeur brute du canal ADC *)
rScalingMax : REAL := 100.0;
END_VAR
METHOD ReadValue : REAL
ReadValue := (rRawValue / 32767.0) * rScalingMax;
END_METHOD
Les pragmas permettent de configurer le comportement du compilateur, de lier les variables aux E/S physiques ou d'exposer des tags à des services système (OPC UA, IHM).
// Fichier : GVL_Exchange.TcGVL
{attribute 'qualified_only'}
VAR_GLOBAL
// Rend cette variable visible par le serveur OPC UA intégré de TwinCAT
{attribute 'OPC.UA.DA' := '1'}
rTemperatureProcess : REAL;
// Associe automatiquement la variable au canal d'E/S de la borne physique sans configuration manuelle
{attribute 'TcLinkTo' := 'TIIB^Device 1 (EtherCAT)^Term 1 (EK1100)^Term 3 (EL3064)^Channel 1^Value'}
iAnalogInputRaw : INT;
// Pragma pour forcer le monitoring en temps réel d'une propriété dans le debugger Visual Studio
{attribute 'monitoring' := 'call'}
bMotorRunningStatus : BOOL;
END_VAR
pyads (Recettes Avancées)Pour collecter des données à des fins d'analyse ou piloter l'automate depuis un script Python (comme l'agent EVA), la bibliothèque pyads est utilisée.
Pour optimiser la bande passante et éviter de surcharger le routeur ADS, regroupez toujours vos requêtes en une seule trame réseau TCP au lieu de faire des boucles de requêtes individuelles.
Au lieu de poller (interroger périodiquement) des variables d'état (ex: alarmes), abonnez-vous aux notifications de changement envoyées par l'automate.
import pyads
import time
import logging
# Configuration du logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("TwinCAT_ADS")
AMS_NET_ID = "192.168.1.50.1.1" # NetID de l'automate cible
PLC_PORT = 851 # Port par défaut de la tâche PLC 1 (TwinCAT 3)
def notification_callback(notification, name):
"""Fonction callback déclenchée sur changement d'état d'une variable abonnée."""
value = notification.contents.data
logger.info(f"[NOTIF] Variable '{name}' a changé de valeur : {value}")
def main():
# Initialisation de la connexion ADS
plc = pyads.Connection(AMS_NET_ID, PLC_PORT)
try:
plc.open()
logger.info("Connexion ADS ouverte avec succès.")
# 1. Exemple de Lecture/Écriture Groupée (Multi-Read)
tags_to_read = [
"GVL_Exchange.rTemperatureProcess",
"MAIN.fbMotor.bMotorOn",
"MAIN.fbMotor.bTimeoutError"
]
# Lecture groupée
read_results = plc.read_list_by_name(tags_to_read)
logger.info(f"Résultats de lecture groupée : {read_results}")
# Écriture groupée
tags_to_write = {
"MAIN.bStartCmd": True,
"MAIN.rSpeedSetpoint": 45.5
}
plc.write_list_by_name(tags_to_write)
logger.info("Écriture groupée effectuée.")
# 2. Exemple d'Abonnement Asynchrone (Device Notification)
alarm_tag =
attr = pyads.NotificationAttrib(sizeof=)
notification_handle = plc.add_device_notification(
alarm_tag,
attr,
notification_callback,
user_handle=alarm_tag
)
logger.info()
time.sleep()
plc.del_device_notification(notification_handle, attr)
logger.info()
pyads.ADSError err:
logger.error()
:
plc.close()
logger.info()
__name__ == :
main()
| Code (Hex / Dec) | Signification | Cause possible & Résolution |
|---|---|---|
| 0x702 / 1794 | Invalid Signature | Mauvaise correspondance de type de données ou de structure de données. |
| 0x705 / 1797 | Device not active | L'automate n'est pas démarré (vérifier s'il est en mode RUN). |
| 0x710 / 1808 | Symbol not found | Chemin symbolique de la variable erroné (sensible à la casse). |
| 0x745 / 1861 | Timeout | Route ADS manquante ou ports bloqués par le pare-feu (TCP/UDP 48897). |
StaticRoutes.xml.VAR_PERSISTENT reviennent à zéro lors d'une coupure brutale d'alimentation.WritePersistentData cycliquement dans le code.48897 de communication ADS est autorisé dans le pare-feu de l'IPC.VAR_PERSISTENT sont associées à un module d'écriture sécurisé (NOVRAM ou UPS active).{attribute 'TcLinkTo'}) sont correctement formatés selon la topologie physique cible.