Programmer un automate Siemens
en parlant à une IA
Découverte de T-IA Connect : le pont entre Claude, le protocole MCP et TIA Openness. Et un exemple concret avec la régulation d'un château d'eau.
De quoi parle-t-on, au juste ?
Imagine que tu puisses ouvrir une fenêtre de chat, écrire en français « crée-moi un bloc fonction pour gérer le remplissage d'un château d'eau avec une pompe, deux capteurs de niveau et une sécurité anti-débordement », et voir apparaître quelques secondes plus tard le code SCL prêt à être intégré dans TIA Portal.
C'est exactement ce que permet aujourd'hui une nouvelle génération d'outils qui connectent l'IA à ton environnement d'automatisme. Avant d'entrer dans le concret, posons les briques une par une.
Trois concepts à comprendre
Pour saisir ce qui se passe, il faut poser trois briques techniques. Rien de sorcier.
TIA Portal
L'environnement de développement Siemens pour programmer les automates SIMATIC (S7-1200, S7-1500), les IHM et la configuration réseau. Rien de nouveau ici — c'est l'outil quotidien de l'automaticien.
TIA Openness
Une API officielle Siemens qui permet à un programme externe de piloter TIA Portal : ouvrir un projet, créer des blocs, exporter du SCL, compiler. Jusqu'ici, il fallait écrire du C# ou du PowerShell.
MCP
Le Model Context Protocol, inventé par Anthropic, est un standard ouvert qui permet à une IA de dialoguer avec des outils externes. MCP donne des mains à l'IA : elle ne se contente plus de parler, elle peut agir.
en langage naturel
Pour relier tout ça, il faut un serveur MCP dédié à TIA Portal. C'est là qu'entre en scène T-IA Connect.
T-IA Connect, c'est quoi exactement ?
Un outil développé par la société française FeelAutom. Son rôle est simple à décrire : c'est un serveur qui tourne sur ta machine, qui parle MCP d'un côté (avec Claude, ChatGPT, ou un modèle local) et qui parle Openness de l'autre (avec TIA Portal).
Ce que ça permet concrètement
-
Lire ton projet
Explorer l'arborescence, les blocs, les variables, les UDT existants.
-
Générer du code SCL
Contextualisé, utilisant tes propres types et conventions de nommage.
-
Créer et modifier des blocs
OB, FB, FC, DB — directement dans le projet ouvert.
-
Compiler et détecter les erreurs
Validation automatique, feedback immédiat dans le chat.
-
Piloter PLCSim Advanced
Pour tester le code virtuellement avant déploiement réel.
-
Gérer les IHM
Tag tables, configuration réseau, écrans WinCC.
Les points qui plaisent aux industriels
-
Tout reste local
Le serveur tourne sur ta station. Ton code PLC ne part pas sur un cloud tiers sans ton accord.
-
Choix du modèle IA
Claude, GPT-4, ou des modèles locaux (Llama 3, Mistral, Qwen) via Ollama pour l'air-gapped.
-
BYOK (Bring Your Own Key)
Licence unique + tes propres clés API. Pas d'abonnement SaaS récurrent par poste.
-
Génération déterministe
Validation contre les schémas SimaticML : pas d'hallucination de syntaxe.
Comment ça s'installe
Le principe est comparable à n'importe quel serveur MCP. Après avoir installé T-IA Connect, tu ajoutes quelques lignes dans le fichier de configuration de Claude Desktop :
{
"mcpServers": {
"tia-connect": {
"command": "C:\\Program Files\\T-IA Connect\\TiaPortalApi.App.exe",
"args": ["--mcp"]
}
}
}
Tu redémarres Claude Desktop, et l'IA voit apparaître les outils T-IA Connect dans sa panoplie. Tu peux commencer à lui parler de ton projet TIA comme tu parlerais à un collègue.
Exemple concret : la régulation d'un château d'eau
Un cas d'école classique en automatisme. L'objectif : maintenir un niveau d'eau correct dans un réservoir en haut d'une tour qui alimente un village ou une installation industrielle.
Installation type : 3 capteurs de niveau, 1 pompe, 1 arrêt d'urgence
Le cahier des charges
Voici les fonctionnalités à implémenter dans le bloc fonction :
- LSL — NIVEAU BAS Capteur qui déclenche le démarrage de la pompe quand l'eau descend sous le seuil.
- LSH — NIVEAU HAUT Capteur qui arrête la pompe une fois le réservoir plein.
- LSHH — SÉCURITÉ Anti-débordement : coupe immédiate en cas de dépassement critique.
- AU — ARRÊT D'URGENCE Contact actif bas (sécurité positive). Coupe tout et passe en défaut.
- MODE AUTO / MANU Commutation pour la maintenance ou les essais en mode manuel.
- TEMPO ANTI-CYCLE 30 secondes minimum entre deux démarrages pour protéger le moteur.
Le prompt envoyé à Claude
Chateau_Eau.als20. Crée un Function Block en SCL qui s'appelle FB_Gestion_Chateau_Eau pour piloter une pompe de remplissage.
Entrées : LSL (niveau bas, Bool), LSH (niveau haut, Bool), LSHH (sécurité anti-débordement, Bool), AU (arrêt d'urgence actif bas, Bool), Mode_Auto (Bool), Cmd_Manu_Pompe (Bool).
Sorties : Pompe_Marche (Bool), Defaut (Bool), Etat (Int : 0=arrêt, 1=remplissage, 2=défaut).
La pompe démarre quand LSL passe à FALSE (eau basse) et s'arrête quand LSH passe à TRUE (eau haute).
En cas de LSHH ou AU, coupe immédiate et passage en défaut. Ajoute une tempo anti-redémarrage de 30 secondes. Commente le code en français.
Ce que Claude fait en coulisses
L'IA enchaîne plusieurs appels aux outils MCP de T-IA Connect :
Connect()— se relie à TIA Portal en cours d'exécutionOpenProject("Chateau_Eau.als20")— ouvre le projetGetProjectOverview()— lit l'arborescence, les tag tables, les UDT existantsCreateBlock(name, type="FB", language="SCL", code=...)— crée le bloc avec le code généréCompileBlock("FB_Gestion_Chateau_Eau")— compile et vérifie la syntaxe
Le code SCL généré
Voici ce que Claude renvoie (extrait), prêt à être intégré :
FUNCTION_BLOCK "FB_Gestion_Chateau_Eau"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
LSL : Bool; // Capteur niveau bas (TRUE = eau présente)
LSH : Bool; // Capteur niveau haut (TRUE = plein)
LSHH : Bool; // Sécurité anti-débordement
AU : Bool; // Arrêt d'urgence (actif bas)
Mode_Auto : Bool; // TRUE = auto, FALSE = manuel
Cmd_Manu_Pompe : Bool; // Commande manuelle de la pompe
END_VAR
VAR_OUTPUT
Pompe_Marche : Bool; // Sortie vers le contacteur
Defaut : Bool; // Défaut général
Etat : Int; // 0=arrêt, 1=remplissage, 2=défaut
END_VAR
VAR
Tempo_AntiCycle : TON; // Tempo anti-redémarrage
Memo_Arret : Bool; // Mémoire du dernier arrêt
END_VAR
BEGIN
// --- Gestion des défauts (priorité absolue) ---
IF #LSHH OR NOT #AU THEN
#Pompe_Marche := FALSE;
#Defaut := TRUE;
#Etat := 2;
#Memo_Arret := TRUE;
RETURN;
END_IF;
#Defaut := FALSE;
// --- Tempo anti-cycle court : 30 s après un arrêt ---
#Tempo_AntiCycle(IN := #Memo_Arret, PT := T#30S);
IF #Tempo_AntiCycle.Q THEN
#Memo_Arret := FALSE; // Tempo écoulée, on peut redémarrer
END_IF;
// --- Mode automatique ---
IF #Mode_Auto THEN
// Démarrage quand eau basse ET tempo écoulée
IF NOT #LSL AND NOT #Memo_Arret THEN
#Pompe_Marche := TRUE;
#Etat := 1;
END_IF;
// Arrêt quand eau haute
IF #LSH THEN
#Pompe_Marche := FALSE;
#Etat := 0;
#Memo_Arret := TRUE;
END_IF;
ELSE
// --- Mode manuel ---
#Pompe_Marche := #Cmd_Manu_Pompe AND NOT #LSH AND NOT #LSHH;
#Etat := 0;
END_IF;
END_FUNCTION_BLOCK
J'ai créé le FB FB_Gestion_Chateau_Eau dans ton projet. Compilation réussie, aucune erreur. Le bloc est prêt à être appelé depuis ton OB1. Veux-tu que je génère aussi le DB d'instance associé et un exemple d'appel depuis l'OB1 ?
Tu réponds « oui », et en deux autres prompts tu obtiens le DB d'instance et le code d'appel. Le tout sans jamais quitter la conversation, sans écrire une ligne de code à la main, sans chercher dans la documentation Siemens.
Les limites à garder en tête
Même avec cet outillage, quelques règles de bon sens restent essentielles. Un automaticien reste indispensable.
Toujours relire le code
L'IA fait des erreurs, surtout sur des cas métier complexes ou des normes de sûreté. Un code SCL n'est jamais déployé sur un automate réel sans revue humaine.
Tester en simulation
PLCSim Advanced (supporté par T-IA Connect) permet de valider le comportement avant d'envoyer sur l'automate physique. Indispensable.
Attention aux applications SIL
Pour la sécurité fonctionnelle (SIL2, SIL3), l'IA peut dégrossir, mais la validation formelle reste une affaire d'ingénieurs certifiés.
Le facteur contexte
Plus tu donnes de contexte (UDT existants, conventions, normes ISA-88 / IEC 61131-3), plus le code sera pertinent. Un prompt vague = code générique.
Pour aller plus loin
Si l'idée t'intéresse, le chemin le plus rapide est le suivant. En une après-midi, tu auras une idée claire du gain de productivité.