用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill beckhoff-ads-integration命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | beckhoff-ads-integration |
| description | Générer et intégrer du code Structured Text Beckhoff. |
| version | 1.1.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"tags":["beckhoff","twincat","ads","plc","structured-text","automation-engineering"],"related_skills":["industrial-plc-connectivity"]} |
Cette compétence guide l'agent pour concevoir, structurer et intégrer des projets TwinCAT 3 en Structured Text (ST) et configurer les liaisons de communication via le protocole ADS (Automation Device Specification) de Beckhoff.
Les outils de communication directe suivants peuvent être mobilisés :
`beckhoff_ads_get_info` : Lecture du statut du runtime TwinCAT.`beckhoff_ads_read_tag` : Lecture de variables PLC par leur nom de symbole.`beckhoff_ads_write_tag` : Écriture de variables PLC par leur nom de symbole.Pour établir un dialogue entre EVA (ou toute application hôte) et le contrôleur Beckhoff via ADS, les routes doivent être mutuellement déclarées.
192.168.1.100.1.1).851 : Premier runtime PLC de TwinCAT 3.10000 : Système de diagnostic ou routeur ADS lui-même./etc/ads/StaticRoutes.xml doit être configuré de la sorte :
<TcConfig>
<RemoteConnections>
<Route>
<Name>EVAAgent</Name>
<Address>192.168.1.50</Address> <!-- IP de la machine EVA -->
<NetId>192.168.1.50.1.1</NetId> <!-- AMS Net ID de la machine EVA -->
<Type>TCP_IP</Type>
</Route>
</RemoteConnections>
</TcConfig>
Beckhoff propose des blocs fonctionnels asynchrones (dans la bibliothèque Tc2_System) pour interagir avec le système de fichiers de l'OS (Windows ou TwinCAT RTOS). Ces opérations s'exécutent sur plusieurs cycles en utilisant les variables bExecute, bBusy et bError.
PROGRAM PRG_FileLog
VAR
fbFileOpen : FB_FileOpen; // Bloc d'ouverture de fichier
fbFileWrite : FB_FileWrite; // Bloc d'écriture de fichier
fbFileClose : FB_FileClose; // Bloc de fermeture de fichier
hHeaderFile : UINT := 0; // Handle du fichier ouvert
sLogLine : STRING := 'Vitesse: 1450 rpm; Defaut: False$N'; // Ligne à écrire ($N = CR/LF)
bWriteTrigger : BOOL; // Déclencheur d'écriture
iState : INT := 0; // État de la machine d'état
bBusy : BOOL;
bError : BOOL;
END_VAR
CASE iState OF
0: // Attente d'un déclenchement
IF bWriteTrigger THEN
bWriteTrigger := FALSE;
bBusy := TRUE;
bError := FALSE;
iState := 10;
END_IF;
10: // Ouverture du fichier en mode Append
fbFileOpen(
sNetId := '', // Machine locale
sPathName := 'C:\Logs\production.csv',
nMode := FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
bExecute := TRUE
);
IF NOT fbFileOpen.bBusy THEN
IF NOT fbFileOpen.bError THEN
hHeaderFile := fbFileOpen.hFile;
fbFileOpen(bExecute := FALSE); // Reset du bloc
iState := 20;
ELSE
bError := TRUE;
iState := 99; // État d'erreur
END_IF;
END_IF;
20: // Écriture de la ligne de log
fbFileWrite(
sNetId := '',
hFile := hHeaderFile,
pWriteBuff := ADR(sLogLine),
cbWriteLen := INT_TO_UDINT(LEN(sLogLine)),
bExecute := TRUE
);
IF NOT fbFileWrite.bBusy THEN
fbFileWrite(bExecute := FALSE);
iState := 30; // Fermeture obligatoire même après erreur
END_IF;
30: // Fermeture du fichier
fbFileClose(
sNetId := '',
hFile := hHeaderFile,
bExecute := TRUE
);
IF NOT fbFileClose.bBusy THEN
fbFileClose(bExecute := FALSE);
bBusy := FALSE;
iState := 0; // Retour à l'attente
END_IF;
99: // Gestion de l'erreur
bBusy := FALSE;
fbFileOpen(bExecute := FALSE);
iState := 0;
END_CASE
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Description' := 'Consigne de vitesse de la pompe principal'}
rPumpSpeed : REAL;
LREAL (double précision 64 bits) pour les variables de position ou d'axes de mouvement (TwinCAT NC/MC).TIME, LTIME, TOD, DT) doivent être formatés selon le standard (ex: T#500ms, DT#2026-07-06-10:40:00).