Chargement de la progression locale…
PLC Gym
Accueil PLC GymNiveau 1, 0 XP · ta progression
Siemens, Rockwell et TwinCAT · Rien à installer

Convertisseur automate : du ladder au texte structuré, de Siemens à Rockwell

Colle un programme TIA Portal, Studio 5000 ou TwinCAT. PLC Gym détecte de quel fabricant il vient, te le rend dans le code de l’autre fabricant, fait tourner les deux versions côte à côte et te montre ce qui diffère, ligne par ligne. Une façon d’apprendre l’autre fabricant avec ton propre code, et une longueur d’avance pour une migration. Il ne convertit que la logique, donc il faut encore le tester sur la vraie machine.

  • Chaque ligne associée Survole un échelon ou une ligne pour voir d’où il vient
  • Vérifié, pas deviné Les deux programmes tournent avec les mêmes entrées dans notre simulateur, cycle par cycle
  • Ton code n’est pas conservé Il va sur notre serveur pour être converti, et n’est ni stocké ni journalisé

Tu connais Siemens ou Rockwell, mais pas les deux ?

Colle ton propre code et vois-le comme l’écrit l’autre fabricant, avec un résumé de ce qui change pour toi et les lignes où se trouve chaque différence. Puis exécute-le sur le pupitre de commande et essaie-le sur une mission. C’est une façon d’apprendre et une longueur d’avance pour une migration, pas du code pour une installation en production.

de Siemens à Rockwell

De TIA Portal à Studio 5000, et du SCL au texte structuré

Temporisation
#Delay(IN := #Start, PT := T#2s);Delay.PRE := 2000; Delay.TimerEnable := Start; TONR(Delay);
Bit terminé
#Delay.QDelay.DN
One shot
#Edge(CLK := #Eye);Edge.InputBit := Eye; OSRI(Edge);
Essaie-le sur un feu tricolore Siemens

De Rockwell à Siemens

De Studio 5000 à TIA Portal, et du texte structuré au SCL

Temporisation
Delay.PRE := 2000; Delay.TimerEnable := Start; TONR(Delay);#Delay(IN := #Start, PT := T#2s);
Bit terminé
Delay.DN#Delay.Q
One shot
Edge.InputBit := Eye; OSRI(Edge);#Edge(CLK := #Eye);
Essaie-le sur un niveau de cuve Rockwell

Fiche mémo Siemens, Rockwell, TwinCAT : une instruction, trois noms

Le convertisseur fait la correspondance de chacune pour toi. C’est aussi une fiche mémo pratique quand tu passes d’une usine à l’autre.

Ce qu'il faitRockwell Studio 5000Siemens TIA PortalTexte structuré Beckhoff TwinCAT 3
Contacts normalement ouverts et fermésXIC, XIOContacts NO et NCÉcrit comme de la logique : A AND NOT B
Bobine, verrouillage et déverrouillageOTE, OTL, OTUBobine, S, Rx := …, IF … THEN x := TRUE
Temporisation à l’enclenchementTON sur un TIMER (.PRE .ACC .DN) ; TONR sur un FBD_TIMER en STTON_TIME (PT, ET, Q)TON (PT, ET, Q)
Temporisation au déclenchementTOF ; TOFR en STTOF_TIMETOF
CompteurCTU sur un COUNTER, remise à zéro avec RES ; CTUD en STCTU sur un IEC_COUNTER (PV, CV, Q, R)CTU (PV, CV, Q, RESET)
Front montantONS, OSR ; OSRI en STContact P, P_TRIG, R_TRIGR_TRIG
Front descendantOSF ; OSFI en STContact N, N_TRIG, F_TRIGF_TRIG
Déplacer une valeurMOVE (MOV avant la v36)MOVEx := y
ComparerEQ, NE, LT, GT, LE, GE (EQU, NEQ, LES, GRT, LEQ, GEQ avant la v36)CMP ==, <>, <, >, <=, >==, <>, <, >, <=, >=
CalculsADD, SUB, MUL, DIV, CPTADD, SUB, MUL, DIV, CALCULATE+, -, *, /
Mettre à l’échelle une entrée analogiqueSCPNORM_X puis SCALE_XÉcrit sous forme de formule
Nombres entiersDINT (INT existe, DINT est natif)Int, DIntINT, DINT
DuréesDINT en millisecondes : 2000Time : T#2sTIME : T#2S
Variables (tags) dans un blocVariables du programme, sans préfixe#Name (block interface)Sans préfixe (sections VAR)
Ton propre type de donnéesUDT (des BOOLs regroupés dans un SINT caché)Type de données API : TYPE … STRUCTSTRUCT dans un DUT
Ton propre blocAdd-On Instruction (AOI) avec une variable (tag) de supportFB, appelé comme multi-instanceFUNCTION_BLOCK avec une instance
L’appelerPumpCtl(Pump1, Start, Stop, Run) : l’instance d’abord, puis les paramètres obligatoires dans l’ordre#Pump1(Start := …, Run => …)Pump1(Start := …, Run => …)
Un bloc dont l’échelon est inactifEnableIn passe à faux : la logique ne s’exécute pas (sa routine EnableInFalse s’exécute, s’il en a une)EN inactif : le FB n’est pas appelé (ENO faux)Non appelé : mets l’appel dans un IF
Exécuté une fois au démarrageLa routine Prescan de l’AOI : s’exécute pendant le prescan, quand l’automate passe en RunOB de démarrage (OB100), ou un indicateur de premier appel dans le FBUn indicateur de premier appel dans le FB (ou FB_init)

Ce qu’il convertit, et ce qu’il ne convertit pas

Il convertit la logique. Tout ce qu’il ne peut pas transposer est listé avec la ligne et ce qu’il faut faire, jamais omis en silence.

Convertit

  • Du schéma à contacts au texte structuré, à chaque fois
  • Du texte structuré au schéma à contacts, là où la logique s’y prête : contacts, bobines, mise à 1 et mise à 0, temporisations, compteurs, fronts, comparaisons, déplacements et calculs
  • De Siemens à Rockwell et retour, en texte structuré ou en schéma à contacts, et TwinCAT dans les deux sens
  • Membres de temporisation et de compteur (IN/PT/Q/ET vers TimerEnable/PRE/DN/ACC), variables locales avec #, types de données, fronts, MOVE et MOV, comparaisons et calculs
  • Les déclarations de variables (tags) avec leurs commentaires, et les commentaires de ton code
  • Tes propres blocs fonctionnels, Add-On Instructions et UDT : les définitions, les appels et chaque Tag.Member, dans la forme propre à chaque constructeur
  • Des AOI écrites en schéma à contacts, avec leurs routines Prescan et EnableInFalse : gardées en échelons pour une cible en schéma à contacts, ou écrites en texte structuré
  • Des blocs CONT et LOG Siemens, depuis l’export XML de TIA Portal : chaque réseau est lu comme le SCL qui fait la même chose
  • Des programmes entiers d’un seul coup : une source Siemens avec ses blocs de données, un programme Studio 5000 dont la routine principale appelle les autres, et plusieurs fichiers TwinCAT ou TIA Portal ouverts ensemble
  • Des échelons Studio 5000 avec copies et remplissages (COP, CPS et FLL, jusqu’à 64 éléments), un compteur dans les deux sens (CTU avec CTD), de la logique de bits, MOD, ABS, SQR et MVM
  • Une temporisation d’impulsion (TP) vers le texte structuré Studio 5000, qui n’en a pas : réécrite autour d’un TONR et comparée à l’original cycle par cycle
  • Un rapport que tu peux enregistrer en fichier texte : ce qui demande ton attention, ce qui a changé et pourquoi, et ce que la comparaison côte à côte a essayé ou non

Ne convertit pas

  • Configuration matérielle, adresses E/S, réseaux et communications (MSG, PUT/GET, EtherNet/IP, PROFINET)
  • Variables IHM, alarmes et écrans
  • Blocs de bibliothèque constructeur comme PID, contrôle de mouvement et variateurs
  • Des AOI dont la logique est en logigramme ou en SFC : signalées, pour que tu puisses d’abord réécrire cette routine en schéma à contacts ou en texte structuré
  • Méthodes, propriétés, actions et unions TwinCAT
  • Chaînes de texte : les lignes qui les utilisent sont signalées et te sont laissées
  • Boucles FOR vers le schéma à contacts : elles sont signalées avec la ligne et une suggestion
  • LIST, IL, SFC et GRAPH, et logigramme depuis Studio 5000

Comment fonctionne la preuve

1. Convertir

Ton code est lu dans une forme neutre, puis réécrit comme l’écrit le fabricant cible : écritures de membres et TONR en Logix, un seul appel TON_TIME en SCL, T#2s ou 2000.

2. Exécuter les deux

Le simulateur de PLC Gym fait tourner le programme original et le programme converti pendant 3 000 cycles (60 secondes simulées). Les entrées sont appuyées, maintenues et relâchées, et les nombres franchissent chaque limite à laquelle ton code les compare.

3. Comparer chaque cycle

Chaque sortie est comparée à chaque cycle. Là où les fabricants diffèrent vraiment (une impulsion au premier cycle, une remise à zéro de compteur), le convertisseur écrit le code pour que le comportement corresponde quand même, et le signale.

Il tourne sur le simulateur de PLC Gym, c’est donc une vérification solide de la logique, pas une garantie pour ton installation : teste sur la vraie machine comme ton site l’exige. Tu veux le voir tourner ? Appuie sur Exécute-le pour ouvrir le programme converti sur le pupitre de commande de simulateur d'automate en ligne gratuit, ou teste ton code automate sur une machine 3D.

Questions

Les questions des ingénieurs

Ce que les gens vérifient avant de faire confiance à un convertisseur.

Convertit-il du code Siemens TIA Portal en Rockwell Studio 5000 ?

Oui. Colle du SCL ou ouvre un fichier .scl et il part vers Rockwell par défaut, en texte structuré ou en schéma à contacts. Passer du SCL au texte structuré change plus que les noms de variables (tags) : les appels TON_TIME deviennent TONR avec .PRE et .TimerEnable, R_TRIG devient OSRI, .Q devient .DN, T#2s devient 2000 et INT devient DINT. Tu peux télécharger un .L5X à importer. Il ne convertit que la logique, et ce fichier n’a été testé jusqu’ici qu’en le relisant dans PLC Gym, donc vérifie l’import dans Studio 5000.

Convertit-il du code Rockwell Studio 5000 en Siemens TIA Portal ?

Oui. Colle du texte structuré ou du texte d’échelon, ou ouvre un export L5X, et il part vers Siemens par défaut : du SCL à partir du texte structuré, du CONT à partir du schéma à contacts. Les temporisations TONR deviennent TON_TIME, les compteurs CTUD deviennent CTU, les one shots OSRI deviennent R_TRIG, DN devient Q et ACC devient ET ou CV, et chaque variable locale reçoit son # en SCL.

Je connais Siemens mais pas Rockwell. Cela peut-il m’aider à apprendre ?

Oui, et dans l’autre sens aussi. Colle ton propre code et tu obtiens un résumé de ce qui est différent pour toi : comment changent les temporisations, les one shots et les noms de variables, avec les lignes de ton programme où se trouve chacun. Exécute ensuite le programme converti sur le pupitre de commande de PLC Gym, et joue une mission dans le langage de ce constructeur. L’aide-mémoire de cette page couvre le reste.

Le code converti est-il prêt à tourner sur une installation réelle ?

Non. Vois-le comme un moyen d’apprendre et un coup d’avance sur une migration. Il ne convertit que la logique : la configuration matérielle, les adresses E/S, les communications, l’IHM, le PID, le contrôle de mouvement et les variateurs restent à ta charge. La comparaison côte à côte tourne sur le simulateur de PLC Gym, pas sur ta machine, et les fichiers doivent être vérifiés dans le logiciel du constructeur. Relis-le comme le code d’un collègue, et teste-le sur la vraie machine comme l’exige ton site.

Comment sait-il de quel constructeur vient mon code ?

Il lit le code, comme un traducteur reconnaît une langue. Un # devant les noms de variables veut dire Siemens, TONR ou .DN veut dire Studio 5000, et T#2s sur des variables sans # veut dire TwinCAT. Il te dit ce qu’il a vu, et si le code pouvait venir de n’importe quel constructeur, il le dit et te laisse choisir. Les fichiers disent ce qu’ils sont : .scl, .L5X, .TcPOU et l’export .xml de TIA Portal.

Lit-il le schéma à contacts (CONT) et le LOG Siemens de TIA Portal ?

Oui, depuis l’export XML de TIA Portal. Un bloc CONT ou LOG n’a pas de source .scl, donc le XML est la façon dont il sort de TIA Portal : à partir de la V16, ajoute un espace de travail sous Interface de contrôle de version dans l’arborescence du projet et amène-y le bloc, et TIA Portal écrit le bloc en fichier .xml. Les scripts Openness écrivent le même fichier. Chaque réseau est lu comme le SCL qui fait la même chose, une bobine comme tout ce qui est câblé à son entrée et une boîte comme un appel, puis converti de là vers Rockwell ou TwinCAT, en texte structuré ou en schéma à contacts. Ouvre avec lui les blocs de données et les types de données du bloc et ils sont lus ensemble. Le lecteur a été écrit d’après la description du format par Siemens et n’a pas été essayé sur toutes les versions de TIA Portal, donc un réseau avec une partie qu’il ne lit pas est signalé et t’est laissé, et le reste du bloc se convertit autour.

Peut-on convertir du schéma à contacts en texte structuré ?

Oui, toujours. Chaque échelon devient une ou deux lignes de texte structuré : les contacts deviennent AND et OR, les bobines deviennent des affectations, OTL et OTU deviennent IF … THEN, et les temporisations, compteurs et one shots deviennent des appels dans le style propre au constructeur cible. Les commentaires d’échelon passent comme commentaires.

Tout texte structuré peut-il être transformé en schéma à contacts ?

La plupart de la logique de commande le peut : contacts, bobines, mise à 1 et mise à 0, temporisations, compteurs, fronts, comparaisons, déplacements et calculs. Les boucles FOR non, car le schéma à contacts exécute chaque échelon une fois par cycle, donc le convertisseur signale la ligne et suggère d’écrire un échelon par élément ou de garder cette partie en texte structuré.

Convertit-il mes propres blocs fonctionnels, Add-On Instructions et UDT ?

Oui. Une AOI Studio 5000 devient un FB TIA Portal ou un FUNCTION_BLOCK TwinCAT, et inversement. Les AOI écrites en schéma à contacts restent en schéma à contacts quand tu convertis vers du CONT TIA Portal, et deviennent du texte structuré sinon. Un UDT devient un type de données API ou un STRUCT TwinCAT. Les appels changent aussi : Studio 5000 passe l’instance puis les paramètres obligatoires dans l’ordre, TIA Portal et TwinCAT nomment chaque paramètre. Les structures d’entrée vont dans une AOI en InOut, TIME devient des millisecondes DINT, et les valeurs par défaut d’un UDT passent sur les variables, parce que les UDT Logix ne peuvent pas contenir de valeurs par défaut. Chaque changement est listé dans le rapport, et l’essai de preuve compare aussi chaque membre de structure.

Que deviennent les routines EnableInFalse et Prescan d’une AOI dans TIA Portal ou TwinCAT ?

Aucun des deux n’a de routines de mode de cycle, donc le bloc fonctionnel fait lui-même le même travail. EnableInFalse devient une entrée EnableIn : le bloc est appelé à chaque cycle avec EnableIn réglé d’après son échelon, et son IF … ELSE exécute la logique EnableInFalse quand l’échelon est inactif. Prescan devient du code qui s’exécute une fois, au début du premier appel du bloc. Postscan ne s’exécute que lorsqu’une action SFC se termine, donc il est gardé pour Studio 5000 et noté ailleurs. L’essai de preuve vérifie que les deux versions se comportent pareil.

Comment savoir si le code converti fait la même chose ?

PLC Gym exécute ton programme d’origine et le programme converti côte à côte dans son simulateur pendant des milliers de cycles, en leur donnant les mêmes entrées, et compare chaque sortie à chaque cycle. Les entrées numériques sont poussées au-delà des limites de ton code et sur toute la plage de leur type, et la page montre la plage essayée. Il ne dit « identique » que lorsque chaque ligne de ton programme s’est exécutée, que chaque sortie est passée de l’état actif à inactif et inversement, et que chaque temporisation et chaque compteur est allé jusqu’au bout pendant l’essai. Tout ce qu’il n’a pas pu essayer est nommé, et le résultat dit « partiel » à la place. Un « identique » veut dire qu’ils ont été d’accord dans ces tests, donc ce n’est pas une garantie. Tu vois le résultat sous forme de trace d’analyseur logique. Appuie sur Exécuter pour ouvrir le programme converti sur le pupitre de commande de PLC Gym, avec des boutons, des interrupteurs et des voyants faits à partir de ses variables, et essaie-le toi-même. Teste toujours sur la vraie machine comme l’exige ton site.

Le convertisseur est-il gratuit ?

Les exemples prêts à l’emploi sont ouverts à tous, sans compte. Chaque compte reçoit un essai Pro gratuit jusqu’au 5 décembre 2026, donc d’ici là un compte gratuit convertit autant de ton propre code que tu veux. Ensuite, un compte gratuit convertit 3 de tes propres programmes, et convertir le même code de nouveau ou vers un autre constructeur n’en utilise pas un autre.

Mon code est-il envoyé quelque part ?

Ton code part vers notre serveur par une connexion chiffrée pour être converti, et le résultat revient aussitôt. Nous ne le stockons pas et ne l’enregistrons pas dans des journaux, et il est masqué dans les enregistrements de session que nous utilisons pour améliorer le site. Sur un compte gratuit, nous gardons une empreinte brouillée de jusqu’à 3 programmes, pour que le même code ne compte pas deux fois. Elle ne permet pas de retrouver ton code, et elle disparaît avec ton compte.

Puis-je importer le résultat dans TIA Portal, Studio 5000 ou TwinCAT ?

Oui. Télécharge une source .scl et utilise Générer des blocs à partir de la source dans TIA Portal, un .L5X à importer dans Studio 5000, ou un .TcPOU à ajouter à un projet TwinCAT 3. Tes propres types et blocs viennent aussi : dans le .scl et le .L5X, ou sous forme de zip de fichiers .TcDUT et .TcPOU pour TwinCAT. TIA Portal n’a pas de format texte pour le schéma à contacts, donc pour le CONT Siemens tu redessines les réseaux affichés, ou tu utilises le fichier SCL. Traite ces fichiers comme une bêta : le .L5X n’a été testé jusqu’ici qu’en le relisant dans PLC Gym, donc vérifie chaque import dans le logiciel du constructeur.

Que ne convertit-il pas ?

Seulement la logique : pas la configuration matérielle, les communications, les variables IHM ni les blocs de bibliothèque constructeur comme PID et contrôle de mouvement. Tes propres blocs fonctionnels, AOI et UDT se convertissent bien, tant que leur logique est en schéma à contacts ou en texte structuré. Tout ce qu’il ne peut pas transposer est listé avec la ligne et ce qu’il faut faire, jamais omis en silence.

Tu passes d’un fabricant à l’autre ? Échange des astuces au Vestiaire.