ソース情報
- リポジトリ
- JohnNuwan/EVA_CORE
- ソースの最終更新活動
- 2026年7月18日 08:30
- 検出された SKILL.md の言語
- フランス語
- スター
- 0
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
SOC 職業分類に基づく
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill beckhoff-twincatコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?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.