FR 3098959 A1 20210122 FR 1907927 A 20190715 Description Titre de l'invention : Procédé de production d'un automate apte à commander un moteur [0001] L'invention concerne un procédé de production d'un automate apte à commander un moteur. L'invention concerne également un support d'enregistrement d'informations et un atelier de programmation pour la mise en oeuvre de ce procédé. [0002] Un tel procédé est mis en oeuvre, notamment, à l'aide d'un automate programmable industriel et d'un atelier de programmation de cet automate. Il existe déjà des ateliers de programmations qui sont utilisables pour programmer, en langage graphique FBD (« Function Block Diagram »), des automates programmables industriels. Par exemple, un tel atelier de programmation peut être obtenu en exécutant le logiciel « Crouzet Soft » sur un calculateur électronique. Le logiciel « Crouzet Soft » est librement téléchargeablc à partir du site Internet https://automation.crouzet.fr/. [0003] Cet atelier de programmation fonctionne correctement pour produire un automate apte à commander un moteur. Toutefois, il est souhaitable d'améliorer le procédé de production d'un tel automate à l'aide de cet atelier de programmation. En particulier, il est souhaitable de simplifier le procédé de production d'un tel automate notamment pour : aider un utilisateur à produire plus efficacement un tel automate, et limiter le nombre d'erreurs que l'utilisateur peut commettre au cours de la production de cet automate. [0004] L'invention a donc pour objet un tel procédé de production d'un automate dans lequel ce procédé comporte : la fourniture d'un automate programmable industriel, et la fourniture d'un atelier de programmation en langage graphique FBD ("Function Block Diagram") de l'automate programmable industriel, cet atelier comportant : - une mémoire contenant unc base de données, cette base de données comportant des composantes connexes fonctionnelles et chacune de ces composantes connexes fonctionnelles est associée à un indice de priorité respectif, une composante connexe étant un groupe de boîtes fonctionnelles liées entre elles par des arcs orientés conformément au langage graphique FBD, chaque composante connexe formant ainsi un sous-graphe induit maximal connexe, une composante connexe fonctionnelle étant une composante connexe apte à être compilée sans erreur pour générer un code correctement exécutable par l'automate pro- 2 grammable industriel, - un écran, un calculateur électronique, et une interface homme machine apte à générer une commande destinée à être acquise par le calculateur électronique, dans lequel le calculateur électronique exécute les étapes suivantes : 1) l'acquisition d'une commande d'ajout d'une boîte fonctionnelle et, en réponse, la modification de l'état de l'atelier en ajoutant une nouvelle boîte fonctionnelle dans un code source écrit en langage graphique FBD d'un programme et ainsi obtenir une nouvelle composante connexe courante dans le code source de cc programme, puis 2) l'acquisition d'une commande de compilation et, en réponse, la compilation du code source du programme pour obtenir un code exécutable par l'automate programmable industriel, puis 3) l'acquisition d'une commande d'écriture et, en réponse, l'écriture du code exécutable dans l'automate programmable industriel qui est alors apte à l'exécuter pour commander le moteur, dans lequel le calculateur électronique exécute les étapes suivantes : - l'augmentation de l'indice de priorité associé à une composante connexe fonctionnelle de la hase de données à chaque fois que cette composante connexe fonctionnelle est utilisée dans un code source qui est ensuite compilé et écrit dans l'automate, - la sélection dans la base de données d'une composante connexe fonctionnelle qui comporte une partie commune identique à cette nouvelle composante connexe courante et qui est associée à l'indice de priorité le plus élevé, puis - en réponse à un événement déclencheur, le remplacement, dans le code source du programme, de la nouvelle composante connexe courante par la composante connexe fonctionnelle sélectionnée. [0005] Les modes de réalisation de ce procédé de production peuvent comporter une ou plusieurs des caractéristiques suivantes : 1) Le calculateur électronique exécute les étapes suivantes à chaque fois qu'une nouvelle composante connexe courante est obtenue a) la sélection dans la base de données de la composante connexe fonctionnelle qui comporte une partie commune identique à cette nouvelle composante connexe courante et qui est associée à l'indice de priorité le plus élevé, puis b) l'affichage sur l'écran : - de la composante connexe fonctionnelle sélectionnée, et en même temps - d'un bouton de validation associé à la composante connexe fonctionnelle affichée, puis c) en réponse à la sélection par l'utilisateur du bouton de validation, le remplacement 3 automatique dans le code source du programme, de la nouvelle composante connexe courante par la composante connexe fonctionnelle affichée et, en absence de sélection du bouton de validation, le retour à l'étape 1) sans effectuer ce remplacement automatique, la sélection du bouton de validation constituant ainsi l'événement déclencheur. 2) Le calculateur électronique diminue l'indice de priorité associé à une composante connexe fonctionnelle lorsque, lors de l'étape b), cette composante connexe fonctionnelle est affichée mais ensuite le bouton de validation associé à cette composante connexe fonctionnelle n'est pas sélectionné. 3) Le calculateur électronique : - compte le nombre de fois successives où, lors de l'étape b), une composante connexe fonctionnelle est affichée mais ensuite le bouton de validation associé à cette composante connexe fonctionnelle n'est pas sélectionné, et - inhibe la diminution de l'indice de priorité associé à cette composante connexe fonctionnelle tant que le nombre compté est inférieur à un seuil prédéterminé strictement supérieur à un. 4) La base de données comporte, associé à chacune des composantes connexes fonctionnelles, un identifiant du type d'automate programmable industriel apte à exécuter cette composante connexe après compilation. Le calculateur électronique acquière un identifiant du type d'automate programmable industriel à produire, et le calculateur électronique autorise seulement la sélection des composantes connexes fonctionnelle associées dans la base de données à un identifiant du type d'automate programmable industriel correspondant à celui acquis par le calculateur électronique. 5) La sélection dans la base de données de la composante connexe fonctionnelle comporte la comparaison de la composante connexe courante à la composante connexe fonctionnelle enregistrée dans la base de données, cette comparaison comportant les opérations suivantes : - le parcours de la composante connexe courante à partir d'un premier point de départ en empruntant uniquement les arcs orientés dans le même sens, ce premier point de départ étant une racine de la composante connexe courante, - le parcours de la composante connexe fonctionnelle à partir d'un second point de départ en empruntant uniquement les arcs orientés dans le même sens, ce second point de départ étant une boite fonctionnelle identique au premier point de départ, et - pour chaque première boite fonctionnelle fille rencontrée pendant le parcours de la composante connexe courante, la vérification que les premières boites fonctionnelles pères de cette première boite fonctionne fille sont identiques à des secondes boites fonctionnelles pères d'une seconde boite fonctionnelle fille de la composante connexe fonctionnelle, la seconde boite fonctionnelle fille occupant une position par rapport au second point de départ identique à la position de la première boite fonctionnelle fille par rapport au premier point de départ. 6) En réponse à l'exécution de l'étape 3), le calculateur électronique enregistre dans la hase de données une nouvelles composantes connexes fonctionnelles si le code source compilé comporte une composante connexe qui est différente des composantes connexes fonctionnelles déjà enregistrées dans cette hase de données, cette composante connexe différente enregistrée devenant ainsi une nouvelle composante fonctionnelle de la hase de données associée à son propre indice de priorité. [0006] L'invention a également pour objet un support d'enregistrement d'informations, lisible par un calculateur électronique, dans lequel le support comporte des instructions pour l'exécution du procédé ci-dessus, lorsque ces instructions sont exécutées par le calculateur électronique. [0007] Enfin, l'invention a également pour objet un atelier de programmation en langage graphique FBD ("Function Block Diagram") d'un automate programmable industriel apte à commander un moteur, pour la mise en oeuvre du procédé ci-dessus, cet atelier comportant : - une mémoire contenant une hase de données, cette hase de données comportant des composantes connexes fonctionnelles et chacune de ces composantes connexes fonctionnelles est associée à un indice de priorité respectif, une composante connexe étant un groupe de boîtes fonctionnelles liées entre elles par des arcs orientés conformément au langage graphique FBD, chaque composante connexe formant ainsi un sous-graphe induit maximal connexe, une composante connexe fonctionnelle étant une composante connexe apte à être compilée sans erreur pour générer un code correctement exécutable par l'automate programmable industriel, - un écran, - un calculateur électronique, et - une interface homme machine apte à générer une commande destinée à être acquise par le calculateur électronique, dans lequel le calculateur électronique est configuré pour exécuter les étapes suivantes 1) l'acquisition d'une commande d'ajout d'une boîte fonctionnelle et, en réponse, la modification de l'état de l'atelier en ajoutant une nouvelle boîte fonctionnelle dans un code source écrit en langage graphique FBD d'un programme et ainsi obtenir une nouvelle composante connexe courante dans le code source de ce programme, puis 2) l'acquisition d'une commande de compilation et, en réponse, la compilation du code source du programme pour obtenir un code exécutable par l'automate programmable industriel, puis 3) l'acquisition d'une commande d'écriture et, en réponse, l'écriture du code exécutable dans l'automate programmable industriel qui est alors apte à l'exécuter pour commander le moteur, dans lequel le calculateur électronique est également configure pour exécuter les étapes suivantes : - l'augmentation de l'indice de priorité associé à une composante connexe fonctionnelle de la hase de données à chaque fois que cette composante connexe fonctionnelle est utilisée dans un code source qui est ensuite compilé et écrit dans l'automate, - la sélection dans la hase de données d'une composante connexe fonctionnelle qui comporte une partie commune identique à cette nouvelle composante connexe courante et qui est associée à l'indice de priorité le plus élevé, puis - en réponse à un événement déclencheur, le remplacement, dans le code source du programme, de la nouvelle composante connexe courante par la composante connexe fonctionnelle sélectionnée. [0008] L'invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple non limitatif tout en se référant aux dessins sur lesquels : - la figure 1 est une illustration schématique d'un système de production d'un automate apte à commander un moteur ; - la figure 2 est une illustration schématique d'une interface graphique utilisée lors de la mise en oeuvre du système de la figure 1 ; - la figure 3 est un organigramme d'un procédé de production d'un automate à l'aide du système de la figure 1 ; - la figure 4 est une illustration schématique d'une portion d'une interface graphique utilisée lors de la mise en oeuvre du procédé de la figure 3 ; - la figure 5 est un organigramme d'un procédé de comparaison d'une composante connexe courante à une composante connexe fonctionnelle mis en oeuvre lors de l'exécution du procédé de la figure 3. [0009] Dans ces figures, les mêmes références sont utilisées pour désigner les mêmes éléments. Dans la suite de cette description, les caractéristiques et fonctions bien connues de l'homme du métier ne sont pas décrites en détail. [0010] Chapitre I : Exemples de modes de réalisation. [0011] La figure 1 représente un système de production d'un automate programmable in- dustriel 4. L'automate 4 est apte à commander un moteur 8 d'une installation technique 6. [0012] L'installation 6 peut être n'importe quelle installation industrielle qui comporte un moteur commandé automatiquement par un automate programmable industriel. Par exemple, l'installation 6 est une installation de traitement ou de fabrication d'un produit comportant à cet effet des moteurs électriques utilisés pour déplacer le produit 6 ou des moteurs d'actionneurs. A titre d'illustration, l'installation peut être une installation de traitement d'un liquide comme l'eau ou une usine de fabrication d'un produit ou une installation de production d'énergie électrique à l'aide de panneaux solaires ou autres. Pour simplifier la figure 1, seul le moteur 8 et seul l'automate 4 de l'installation 6 sont représentés. Toutefois, il est bien connu qu'une telle installation peut comporter de nombreux moteurs et de nombreux automates. [0013] Le moteur 8 est ici un moteur électrique. Il peut s'agir d'un moteur à courant continu, d'un moteur polyphasé comme un moteur triphasé ou d'un moteur monophasé. Le moteur 8 entraîne en rotation un arbre 10 qui entraîne à son tour le déplacement d'un mécanisme non représenté. [0014] L'automate 4 comporte un microprocesseur 20, une mémoire 22 raccordée au micro- processeur 20 et une interface 24 d'entrée et sortie. [0015] La mémoire 22 comporte un code exécutable 26 d'un programme exécuté par le mi- croprocesseur 20 pour interpréter les entrées et commander le moteur 8 en conséquence. [0016] L'interface 24 comporte des sorties raccordées, en général par des liaisons filaires 28, aux différents appareils à commander et donc ici en particulier au moteur 8. Par exemple, ces sorties appartiennent au groupe composé des sorties suivantes : - une sortie tout ou rien ; - une sortie analogique en tension ; - une sortie analogique en courant ; - une sortie modulée en largeur d'impulsions connue sous l'acronyme PWM ("Pulse Width Modulation"). [0017] Par exemple, si le moteur 8 est un moteur électrique triphasé, trois sorties ana- logiques en tension (le l'interface 24 sont raccordées au moteur 28 pour le commander. [0018] L'interface 24 comporte également généralement une ou plusieurs entrées raccordées chacune à des capteurs ou des hiterfaces Homme-Machines comme un écran tactile ou un bouton. Ici, pour simplifier la figure 1, seul un capteur électronique 25 est représenté. Comme pour les sorties, ces entrées appartiennent, par exemple, au groupe composé des entrées suivantes : - une entrée tout ou rien ; - une entrée analogique en tension ; - une entrée analogique en courant ; - une entrée de réception de signaux modulés pour coder une information. [0019] Les entrées tout ou rien, les entrées analogiques en tension et les entrées analogiques en courant sont généralement reliées aux capteurs par l'intermédiaire de liaison filaire Une entrée de signal modulé peut être reliée au capteur par une liaison filaire ou, au contraire, une liaison sans fil comme une liaison radio. 7 [0020] L'automate 4 se présente généralement sous la forme d'un boîtier 30 à l'intérieur duquel sont logés tous les éléments électriques et électroniques de l'automate 4 et donc, en particulier, le microprocesseur 20 et la mémoire 22. Seules des bornes électriques permettant de raccorder électriquement les entrées et les sorties de l'interface 24 aux appareils à commander et aux capteurs sont directement accessibles depuis l'extérieur de cc boîtier 30. Ce boîtier 30 protège les éléments électriques et électroniques de l'automate 4 de l'environnement extérieur. À cet effet, il présente souvent un indice de protection supérieur ou égal à IP30 ou TP31 ou IP51. [0021] L'automate 4 peut être mécaniquement indépendant des appareils commandés comme représenté sur la figure 1. Il peut aussi être intégré au moteur 8 et donc fixé, sans aucun degré de liberté, au châssis du moteur 8. Dans ce dernier cas, le moteur 8 est appelé « moteur programmable » et l'automate 4 est alors souvent désigné par le terme « contrôleur ». [0022] L'automate 4 commande automatiquement le moteur 8 en fonction d'une consigne. La consigne est typiquement choisie dans le groupe composé des consignes suivantes : - une consigne de couple pour l'arbre 10 ; - une consigne de vitesse pour l'arbre 10 ; - une consigne de position pour l'arbre 10. [0023] La valeur de la consigne peut-être une constante enregistrée dans la mémoire 22. Toutefois, le plus souvent, la valeur de la consigne est établie en temps réel par l'automate 4 à partir des informations acquises sur des entrées de l'interface 24. C'est le code exécutable 26 qui, lorsqu'il est exécuté par le microprocesseur 20, établit les valeurs délivrées sur les sorties de l'interface 24 à partir des informations acquises sur les entrées de cette même interface 24. Ainsi, toute modification du code exécutable 26 se traduit par une modification du fonctionnement de l'automate 4 et donc de la commande du moteur 8 et du fonctionnement de l'installation 6. [0024] Pour obtenir une installation 6 qui fonctionne, il est donc nécessaire de produire des automates correctement programmés pour commander le moteur 8. À cet effet, la figure 1 représente un système 40 de production de l'automate 4. Ce système 40 comporte l'automate 4 équipé du code exécutable 26 ou, au contraire, dépourvu de tout code exécutable apte à commander le moteur 8. [0025] Le système 40 comporte aussi un atelier 42 de programmation graphique en langage FBD (« Function Block Diagram ») de l'automate 4. L'atelier 42 est raccordé à l'automate 4 par une liaison 44 filaire ou sans fil. Le langage FBD est conforme à la norme CEI 61131-3 ainsi, seules les informations nécessaires pour la compréhension de ce qui suit sont données. Le langage FBD est un langage graphique dans lequel un code source se présente sous la forme de boîtes fonctionnelles raccordées entre elles. [0026] L'atelier 42 comporte notamment : 8 - un calculateur électronique 46 raccordé par la liaison 44 à l'automate 4 ; - un écran 48 raccordé au calculateur 46 pour afficher un code source 47 écrit en langage FBD et qui, après compilation, génère le code exécutable 26 ; - une interface Homme-Machine 50 raccordée au calculateur 46 pour acquérir des instructions et des commandes d'un utilisateur. [0027] Le calculateur 46 comporte typiquement un microprocesseur 52 et une mémoire 54 raccordée à ce microprocesseur 52. [0028] La mémoire 54 comporte les instructions d'un logiciel 56 de programmation de l'automate 4. Le logiciel 56 est apte, lorsqu'il est exécuté par le microprocesseur 52, à réaliser les étapes décrites plus en détail en référence aux figures 3 et 5. Le logiciel 56 comporte notamment à cet effet : - les instructions d'un éditeur 58 qui, lorsqu'elles sont exécutées par le microprocesseur 52, permettent de créer et de modifier le code source 47 ; - les instructions d'un compilateur 60 qui, lorsqu'elles sont exécutées par le microprocesseur 52, permettent notamment de compiler le code source 47 pour générer un code exécutable par l'automate 4 ; - une bibliothèque 62 pré-enregistrée de boîtes fonctionnelles prédéfinies ; - une hase de données 64 de composantes connexes fonctionnelles. [0029] Une "composante connexe" est une portion d'un code source écrit en langage FBD. La description détaillée d'une composante fonctionnelle est donnée plus loin en référence à la figure 2. Une composante connexe est dite « fonctionnelle » : - si elle est compilable sans erreur par le compilateur 60, et - si, après compilation, elle correspond à une portion d'un code exécutable qui a déjà été écrite dans un automate tel que l'automate 4. [0030] Typiquement, lorsqu'un code exécutable est écrit dans un automate, c'est qu'il est apte à commander correctement le moteur 8 lorsqu'il est exécuté. Ainsi, une composante connexe fonctionnelle correspond à une portion du code source qui est apte à être compilée sans erreur et à commander correctement un moteur. [0031] L'interface 50 comporte ici : - un pointeur 70 permettant à un utilisateur de déplacer un curseur sur l'écran 48 ; - un clavier 72. [0032] Typiquement, le pointeur 70 est une souris informatique. [0033] Pour remplacer le code exécutable 26 ou écrire un nouveau code exécutable 26 dans la mémoire 22, l'atelier a besoin d'être raccordé à l'automate 4 par la liaison 44. Une fois qu'un nouveau code exécutable 26 a été écrit dans la mémoire 22, l'atelier 42 peut rester raccordé à l'automate 4 ou, au contraire, être déconnecté de l'automate 4. En effet, l'automate 4 est capable d'exécuter le code 26 sans être connecté à l'atelier 42. [0034] En langage FBD, le code source 47 se compose de boîtes fonctionnelles également 9 connues sous le terme anglais de « Function Block ». Ces boîtes fonctionnelles sont accordées les unes aux autres par des arcs orientés. Chaque boîte fonctionnelle comporte une ou plusieurs entrées et/ou une ou plusieurs sorties. Chaque arc relie une sortie d'une boîte fonctionnelle à au moins une entrée d'une boîte fonctionnelle. Chaque boîte fonctionnelle correspond à une fonction prédéterminée qui traite les données reçues sur ses entrées pour produire les données délivrées sur ses sorties. [0035] Il existe un très grand nombre de fonctions prédéterminées possibles qui représentent autant de boîtes fonctionnelles. Il peut s'agir de fonctions qui réalisent des opérations simples sur les données reçues sur les entrées afin de générer les données délivrées sur les sorties. Par exemple, les opérations simples appartiennent au groupe composé des opérations suivantes : - une opération booléenne entre des données reçues sur plusieurs entrées pour construire le signal délivré sur une sortie de l'automate ; - une opération arithmétique comme les opérations de multiplication, d'addition, de soustraction ou de division ; - une opération trigonométrique comme un sinus ou un cosinus ; - une opération de traitement de caractères alphanumériques comme une concaténation de caractères. [0036] Il peut aussi s'agir de fonctions de commande d'un actionneur électrique ou d'une Interface Homme-Machine en fonction des données reçues sur les entrées de la boîte fonctionnelle. Par exemple, ces fonctions de commande appartiennent au groupe composé des fonctions suivantes : - une fonction d'asservissement de la position d'un moteur sur une consigne de position ; - une fonction d'asservissement de la vitesse d'un moteur sur une consigne de vitesse ; - une fonction d'asservissement du couple d'un moteur sur une consigne de couple ; - une fonction de commande d'une Interface Homme-Machine en fonction d'une donnée reçue sur une entrée, cette Interface Homme-Machine pouvant être intégrée à l'automate ou raccordée à l'automate par l'intermédiaire de l'interface 24. [0037] Il peut aussi s'agir de fonctions de commande encore plus complexe comme une fonction appartenant au groupe composé des fonctions suivantes : - une fonction de régulation du niveau d'une cuve en fonction d'une consigne de niveau ; - une fonction de régulation du débit d'une pompe en fonction d'une consigne de débit ; - une fonction de déplacement d'un objet, tel qu'un panneau solaire, en fonction de la position du soleil. [0038] Par exemple, les fonctions de commande sont elles-mêmes définies en langage FBD et donc à partir d'autres boîtes fonctionnelles ou correspondent à des fonctions compilées. [0039] Tl existe donc un grand nombre de boîtes fonctionnelles différentes. Ici, toutes les boîtes fonctionnelles qui réalisent la même fonction et comportent le même nombre d'entrées et de sorties sont dites "identiques" et sont associées à un même identifiant de fonction. À l'inverse, des boîtes fonctionnelles différentes sont associées à des identifiants respectifs de fonction différents. [0040] -Ici, la bibliothèque 62 comporte plus de dix, cinquante ou cent hoîtes fonctionnelles prédéfinics différentes. Ainsi, l'utilisateur construit un code source en langage FBD en disposant, dans une feuille d'édition affichée sur l'écran 48, des hoîtes fonctionnelles prédéfinics sélectionnées dans la bibliothèque 62. Ensuite, il relie entre elles les hoîtes fonctionnelles disposées sur la feuille d'édition à l'aide d'arcs orientés. [0041] La figure 2 représente schématiquement une feuille 80 d'édition dans le cas par- ticulier où l'automate 4 comporte trois entrées 82 à 84 et trois sorties 86 à 88. La feuille 80 est affichée et générée par l'éditeur 58 lorsqu'il est exécuté par le microprocesseur 52. Cette feuille 80 est par exemple similaire à celle affichée par le logiciel « Crouzct Soft ». Chaque entrée 82,83 et 84 et chaque sortie 86,87 et 88 représentée dans la feuille 80 correspond à une entrée ou une sortie respective de l'automate 4. [0042] Des boîtes fonctionnelles 100 à 122 reliées entre elles par des arcs orientés 130 à 151 sont disposées à l'intérieur de la feuille 80. Des arcs orientés 154 à 156 relient les entrées 82 à 84, respectivement, à des entrées des boîtes fonctionnelles 100, 110 et 120. Des arcs orientés 158 à 160 relient des sorties des boîtes fonctionnelles 104, 105 et 122, respectivement, aux sorties 86 à 88. [0043] La feuille 80 est associée à une barre 170 de menus qui permet à l'utilisateur de sé- lectionner une boîte fonctionnelle prédéfinie dans la bibliothèque 62. En réponse, l'éditeur 58 ajoute la boîte fonctionnelle dans la feuille 80. Ensuite, en réponse à des instructions acquises par l'intermédiaire de l'interface 50, l'éditeur 58 relie par des arcs la boîte fonctionnelle ajoutée aux autres boîtes fonctionnelles déjà présentes dans la feuille 80. [0044] La feuille 80 est aussi associée : - à un bouton 172 de validation, - à des boutons 174 et 176 pour naviguer entre différentes composantes connexes fonctionnelles proposées par le logiciel 56, - à un bouton 177 de compilation, et - à un bouton 178 d'écriture. Le fonctionnement de ces différents boutons est décrit plus en détail en référence à la figure 3. 11 [0045] -Ici, chaque boîte fonctionnelle disposée sur la feuille 80 comporte son propre identifiant de boîte fonctionnelle, qui permet d'identifier de façon unique cette boîte fonctionnelle parmi l'ensemble des boîtes fonctionnelles déjà disposées sur la feuille 80. Cet identifiant de boîte fonctionnelle permet donc de distinguer deux boîtes fonctionnelles de la feuille 80 même si ces deux boîtes fonctionnelles sont associées au même identifiant de fonction. [0046] Chaque entrée et chaque sortie d'une boîte fonctionnelle est associée à un numéro d'ordre. Ces numéros d'ordre permettent de distinguer les différentes entrées et les différentes sorties de la boîte fonctionnelle. Ces numéros d'ordre affectés aux entrées et aux sorties sont les mêmes pour toutes les boîtes fonctionnelles associées au même identifiant de fonction. Par exemple, ces numéros d'ordre sont des nombres entiers. Ainsi, par la suite, on parle de première, deuxième, ... etc entrées et de première, deuxième...etc sorties de la boîte fonctionnelle. [0047] Le code source en langage FBD se présente sous la forme d'une arborescence orientée ou d'un arbre orienté, formé de boîtes fonctionnelles et d'arcs orientés. Dès lors, la terminologie suivante, empruntée au domaine des arborescences orientées, est utilisée dans ce texte : - une racine est une boîte fonctionnelle ne possédant aucune boîte fonctionnelle parente ; - une feuille est une boîte fonctionnelle ne possédant aucune boîte fonctionnelle fille ; - une branche est un chemin allant d'une racine jusqu'à une feuille ; - un noeud interne est une boîte fonctionnelle possédant au minimum une boîte fonctionnelle fille et une boîte fonctionnelle parente ; - une composante connexe est un sous-graphe induit maximal connexe, c'est-à-dire un ensemble de boîtes fonctionnelles reliées deux à deux par un chemin. [0048] Par exemple, le code source représenté dans la figure 2 comporte : - quatre racines 100, 110, 116 et 120 ; - quatre feuilles 101, 104, 105 et 122 ; - trois noeuds internes 102, 103 et 112 ; - deux composantes connexes 180 et 182. [0049] Une arborescence d'un code source en langage FBD possède certaines spécificités qui la rendent difficile à parcourir de façon exhaustive en étant sûr de ne pas oublier de parcourir une boîte fonctionnelle ou un arc. En particulier, une telle arborescence peut comporter : - plusieurs racines y compris au sein d'une même composante connexe ; - deux boîtes fonctionnelles peuvent être raccordées l'une à l'autre par plusieurs arcs orientés en parallèle ; - les différentes entrées et sorties d'une boîte fonctionnelle ne sont pas inter- 12 changeables ; - une même sortie peut être reliée à plusieurs entrées de plusieurs boîtes fonctionnelles ; - les boîtes fonctionnelles ne sont pas systématiquement interchangeables ; - l'arborescence peut comporter des boucles. [0050] En cc qui concerne les entrées et sorties, on notera que raccorder une première et une deuxième sorties de la boîte fonctionnelle 103, respectivement, aux boîtes fonctionnelles 104 et 105 ne produit pas la même composante connexe que ci ces première et deuxième sorties de la boîte fonctionnelle 103 sont raccordées, respectivement, aux boîtes fonctionnelles 105 et 104. [0051] Par la suite, on suppose que les composantes connexes 180 et 182 sont des com- posantes connexes fonctionnelles qui, à ce titre, ont été enregistrées dans la hase de données 64. [0052] La base de données 64 est de préférence une base de données orientée graphe. Ici, pour chaque identifiant de type d'automate programmable à l'aide de l'atelier 42, cette hase de données comporte : - une description des composantes connexes fonctionnelles associées à cet identifiant de type d'automate ; - un indice de priorité associé à chacune des composantes connexes fonctionnelles. [0053] Par exemple, la description de chaque composante connexe fonctionnelle comporte : - une première table qui définit les boîtes fonctionnelles qui composent la composante connexe fonctionnelle ; - une deuxième table qui définit les différents arcs qui relient entre-elles les différentes boîtes fonctionnelles de la première table ; - une troisième table dans laquelle sont enregistrées les différentes informations permettant de mettre à jour l'indice de priorité associé à cette composante connexe fonctionnelle. [0054] La première table comporte par exemple pour chaque boîte fonctionnelle de la composante connexe fonctionnelle : - un identifiant de la composante connexe fonctionnelle ; - un identifiant de la fonction de la boîte fonctionnelle ; - l'identifiant de la boîte fonctionnelle. [0055] La deuxième table comporte par exemple pour chaque arc : - l'identifiant de la composante connexe fonctionnelle ; - l'identifiant de la boîte fonctionnelle et le numéro d'ordre de la sortie de cette boîte fonctionnelle à laquelle est relié l'arc ; - l'identifiant de la boîte fonctionnelle et le numéro d'ordre de l'entrée de la boîte fonctionnelle à laquelle est relié l'arc ; 13 - un identifiant de l'arc qui permet de le distinguer de tous les autres arcs de cette composante connexe fonctionnelle. [0056] Ici, la troisième table comporte notamment : - un nombre ny, égal au nomhre de fois où cette composante connexe fonctionnelle a été utilisée par l'atelier 42 et le calculateur 46 pour programmer un automate programmable industriel ; - un nombre uy, égal au nomhre de fois successives où cette composante connexe fonctionnelle a été affichée sur l'écran 48 sans qu'elle soit ensuite sélectionnée pour remplacer une composante connexe courante ; - la valeur actuelle d'un indice de priorité py, associé à cette composante connexe fonctionnelle. [0057] Dans cc mode de réalisation, la valeur de l'indice py, est calculée comme décrit en référence à la figure 3. [0058] Le fonctionnement du système 40 va maintenant être décrit en référence aux procédés des figures 3 et 5 et à l'aide de l'illustration de la figure 4. [0059] Lors d'une phase 198, l'automate 4 apte à commander le moteur 8 est produit. [0060] Initialement, au début de la phase 198, lors d'une étape 200, l'automate 4 et l'atelier 42 sont fournis. À ce stade, l'automate 4 fourni peut être un automate 4 vierge de tout code exécutable 26 ou pourvu d'un ancien code exécutable 26 à remplacer et à mettre à jour. Par exemple, lors de l'étape 200, l'automate 4 est raccordé à l'atelier 42 à l'aide de la liaison 44. L'automate 4 peut être raccordé à l'atelier 42 tout en laissant son interface 24 raccordée au moteur 8 et au capteur 25. Alternativement, l'automate 4 est d'abord déconnecté du moteur 8 et du capteur 25 avant d'être raccordé à l'atelier 42. [0061] Ensuite, lors d'une étape 202, le code source du programme 47 est construit à l'aide de l'atelier 42. Le programme 47 est destiné, après compilation et écriture dans la mémoire 22 de l'automate 4, à devenir le code 26 exécuté par l'automate 4 pour commander le moteur 8. Lors de cette étape 202, le microprocesseur 52 exécute le logiciel 56. [0062] La construction du code source du programme 47 commence par l'acquisition, lors d'une opération 204, d'un identifiant du type d'automate à programmer. Cet identifiant peut être acquis par la sélection de cet identifiant dans une liste de plusieurs identifiants prédéfinis. Il peut aussi être téléchargé automatiquement à partir de la mémoire 22 de l'automate 4 actuellement raccordé à l'atelier 42. Dans ce dernier cas, l'utilisateur n'a pas à saisir lui-même cet identifiant ou à le sélectionner dans une liste d'identifiants possibles de type d'automate. [0063] Ensuite, lors d'une opération 206, l'éditeur 58 affiche sur l'écran 48 une feuille d'édition. Cette feuille d'édition est par exemple identique à la feuille 80, sauf qu'elle est initialement vierge, c'est-à-dire, dépourvue de boîte fonctionnelle et d'arc. 14 [0064] Lors d'une opération 208, l'utilisateur sélectionne, à l'aide de la barre 170, une boîte fonctionnelle prédéfinie dans la bibliothèque 62. En réponse, l'éditeur 58 acquiert la commande correspondante puis ajoute la boîte fonctionnelle sélectionnée dans la feuille d'édition. [0065] Ensuite, s'il existe déjà au moins une autre boîte fonctionnelle dans la feuille d'édition, lors d'une opération 210, l'utilisateur indique, à l'aide de l'interface 50, comment la dernière boîte fonctionnelle ajoutée dans la feuille d'édition doit être raccordée à une ou plusieurs des boîtes fonctionnelles déjà présentes dans cette feuille d'édition. En réponse, l'éditeur 58 acquiert les instructions correspondantes d'ajout d'un arc orienté, puis génère les arcs orientés correspondants qui lient l'entrée et/ou la sortie de cette dernière boîte fonctionnelle aux entrées et/ou sorties des boîtes fonctionnelles déjà disposées dans la feuille d'édition. [0066] De façon similaire, lors de l'opération 210, l'utilisateur peut indiquer comment une entrée d'une boîte fonctionnelle doit être reliée à l'une des entrées 82 à 84 et comment la sortie d'une boîte fonctionnelle doit être reliée à l'une des sorties 86 à 88. [0067] À l'issue des opérations 208 et 210, une nouvelle composante connexe est présente dans la feuille d'édition. Par la suite, la composante connexe actuellement présentée dans la feuille d'édition est appelée « composante connexe courante ». La description de cette composante connexe courante est enregistrée dans des première et deuxième tables similaires à celles employées pour stocker la description des composantes connexes fonctionnelles. [0068] Ensuite, le procédé retourne à l'étape 208. Ainsi, l'utilisateur a la possibilité de construire la totalité du code source du programme 47 en ajoutant les différentes boîtes fonctionnelles nécessaires dans la feuille d'édition, les unes après les autres et en les reliant entre elles à l'aide d' arcs orientés. [0069] Une fois que le code source a été construit, l'étape 202 s'achève et le procédé se poursuit par une étape 212 lors de laquelle le logiciel 56 acquiert une commande de compilation. Par exemple, pour cela, l'utilisateur sélectionne le bouton 177 de compilation. Puis en réponse, le compilateur 60 compile le code source et génère un code exécutable. Lors de cette compilation, le compilateur 60 vérifie que le code source satisfait un jeu prédéfini de conditions. Si l'une de ces conditions n'est pas satisfaite, la compilation est interrompue et une erreur de compilation est affichée. Dans le cas contraire, le code exécutable correspondant au code source est généré. [0070] Lors d'une étape 214, une fois que le code exécutable a été généré et si l'automate 4 est raccordé à l'atelier 42 par la liaison 44, en réponse à la sélection du bouton 178 d'écriture, le logiciel 56 acquiert puis exécute une commande d'écriture du code exécutable généré dans la mémoire 22. Lors de l'exécution de cette commande d'écriture, l'atelier 42 enregistre le code exécutable dans la mémoire 22 de l'automate 4. En particulier, si la mémoire 22 contenait déjà un code exécutable, celui-ci est automatiquement remplacé par le nouveau code exécutable qui vient d'être généré et écrit dans cette mémoire. Le code exécutable enregistré dans la mémoire 22 lors de l'étape 214 correspond au code exécutable 26. [0071] À l'issue de l'étape 214, l'automate 4 produit est apte à commander le moteur 8. La phase 198 est donc terminée. [0072] Ensuite, lors d'une phase 220, l'automate 4 exécute le code exécutable 26 et commande donc le moteur 8. L'exécution du code exécutable 26 provoque notamment : - l'acquisition par l'automate 4 des mesures du capteur 25, puis - la génération d'une commande du moteur 8 en fonction des mesures acquises. [0073] La construction du code source boîte fonctionnelle par boîte fonctionnelle fonctionne, mais elle demande, de la part de l'utilisateur, systématiquement un grand nombre de mouvements. Par exemple, si les mouvements réalisés par l'utilisateur sont des clics et des déplacements de la souris 70, il faut en général : - au minimum deux clics pour sélectionner une boîte fonctionnelle prédéfinie dans la bibliothèque 62 et pour l'ajouter dans la feuille d'édition, et - au moins un clic pour relier la boîte fonctionnelle ajoutée à une autre boîte fonctionnelle déjà présente dans la feuille d'édition. [0074] Ainsi, des que le code source 47 est complexe et se compose donc d'un grand nombre de boîtes fonctionnelles, le nombre de mouvements que doit exécuter l'utilisateur pour écrire le code source de ce programme en langage FBD est important. [0075] Par ailleurs, la construction d'un programme boîte fonctionnelle par boîte fonc- tionnelle offre à l'utilisateur une grande liberté dans le choix des boîtes fonctionnelles prédéfinies qu'il souhaite ajouter dans la feuille d'édition et dans la manière de relier entre elles ces différentes boîtes fonctionnelles. Cette grande liberté de choix peut conduire l'utilisateur à rencontrer fréquemment les problèmes suivants : - Problème (1) : après avoir été compilé et écrit dans l'automate 4, la portion du code exécutable généré à partir d'une composante connexe ne commande pas correctement le moteur 8 lorsque cette portion de code est exécutée par l'automate 4. - Problème (2) : la compilation du code source déclenche une erreur qui interrompt la compilation et donc la génération du code exécutable correspondant. [0076] Le problème (1) se rencontre lorsque, par inadvertance, l'utilisateur n'a pas choisi les bonnes boîtes fonctionnelles ou n'a pas correctement relié entre elles les entrées et les sorties de boîtes fonctionnelles sélectionnées. Dans ce cas, le code source construit est inadapté pour commander correctement le moteur 8. Le problème (1) n'est pas détecté lors de la compilation du code source, car le code source peut satisfaire toutes les conditions nécessaires pour ne pas provoquer d'erreur de compilation sans pour autant 16 que cela en fasse un code source apte à commander correctement un moteur. [0077] Le problème (2) se rencontre lorsque le code source construit ne respecte pas une condition prédéfinic pour la compilation. Par exemple, une entrée d'une boîte fonctionnelle destinée à recevoir un signal tout ou rien a été raccordée à une sortie d'une boîte fonctionnelle qui délivre seulement un signal analogique en courant. [0078] Pour limiter le nombre de mouvements que doit réaliser l'utilisateur et pour limiter l'occurrence des problèmes (1) et (2), après chaque opération 208 et/ou 210, l'étape 202 de construction du code source comporte une opération 230 de prédiction. [0079] L'étape 230 consiste à établir une liste d'une ou plusieurs composantes connexes fonctionnelles contenues dans la hase de données 64. Toutes les composantes connexes fonctionnelles de cette liste comportent une partie commune identique à la composante connexe courante actuellement présente dans la feuille d'édition. De plus, ici, chacune des composante connexe fonctionnelle de cette liste est associée, par la hase de données 64, à un identifiant de type d'automate identique à celui acquis lors de l'opération 204. Pour cela, l'éditeur 58 compare la composante connexe courante à chacune des composantes connexes fonctionnelles, enregistrées dans la base de données 64, qui est associée à l'identifiant de type d'automate acquis lors de l'opération 204. [0080] Ensuite, à chaque fois qu'il trouve une composante connexe fonctionnelle dans la hase de données 64 dont une partie seulement est identique à la composante connexe courante, l'identifiant de cette composante connexe fonctionnelle est ajouté dans la liste. Dans le cas contraire, l'identifiant n'est pas ajouté à la liste. [0081] La comparaison de la composante connexe courante à une composante connexe fonc- tionnelle est décrite plus en détail en référence au procédé de la figure 5. [0082] De plus, à la fin de l'opération 230, l'éditeur 58 sélectionne automatiquement la composante connexe fonctionnelle de la liste établie qui est associée à la valeur de l'indice de priorité la plus élevée. [0083] Ensuite, lors d'une opération 232, l'éditeur 58 affiche sur l'écran 48 la composante connexe fonctionnelle sélectionnée dans la liste établie lors de l'étape 230. Cette composante connexe fonctionnelle est affichée en association avec les boutons 172, 174 et 176. [0084] Lors de l'opération 232, la composante connexe courante et la composante connexe fonctionnelle sélectionnée sont simultanément affichées sur l'écran 48. Pour limiter l'espace requis pour l'affichage de ces deux composantes connexes, la composante connexe fonctionnelle est directement affichée à l'intérieur de la feuille d'édition. Plus précisément, la composante connexe fonctionnelle est disposée à l'intérieur de la feuille d'édition de manière à ce que les boîtes fonctionnelles et les arcs de la composante connexe courante recouvrent totalement les boîtes fonctionnelles et les 17 arcs correspondants de la partie commune de la composante connexe fonctionnelle. Ainsi, la partie commune de la composante connexe fonctionnelle est cachée sous la composante connexe courante. Par contre, la partie non-commune de la composante connexe fonctionnelle, c'est-à-dire les boîtes fonctionnelles et les arcs de la composante connexe fonctionnelle qui n'appartiennent pas à la partie commune, sont affichés dans la feuille d'édition et sont visibles par l'utilisateur. [0085] Les boîtes fonctionnelles et/ou les arcs de la partie non-commune sont affichés en utilisant une mise en forme différente de celle utilisée pour afficher les boîtes fonctionnelles et les arcs de la composante connexe courante. Ainsi, les boîtes fonctionnelles et/ou les arcs de la partie non-commune sont facilement distinguables des boîtes fonctionnelles et des arcs de la composante connexe courante. Par exemple, la mise en forme particulière pour l'affichage des boîtes fonctionnelles et/ou arcs de la partie non-commune est choisie dans un groupe composé des mises en forme particulières suivantes : - une couleur pour l'affichage des boîtes fonctionnelles et/ou des arcs de la partie non-commune, différente de la couleur utilisée pour l'affichage des mêmes éléments de la composante connexe courante ; - une forme pour l'affichage des boîtes fonctionnelles et/ou arcs de la partie non-commune, différente de la forme utilisée pour l'affichage des mêmes éléments de la composante connexe courante. [0086] La figure 4 illustre l'affichage simultané de la composante connexe courante et d'une composante connexe fonctionnelle dans la feuille d'édition. Dans cette figure, la composante connexe courante est composée de trois boîtes fonctionnelles 102, 103 et 104 reliées les unes aux autres par les arcs 132 et 133. La composante connexe fonctionnelle associée à l'indice de priorité le plus élevé sélectionné lors de l'opération 230 est identique à la composante connexe 180 représentée sur la figure 2. Elle comporte donc notamment les boîtes fonctionnelles 100 à 105, 110, 112 et 116. Dans cet exemple, la partie commune de la composante connexe fonctionnelle comporte les boîtes fonctionnelles 102 à 104 et les arcs 132 et 133. Le reste de la composante connexe fonctionnelle constitue la partie non-commune. Sur cette illustration la partie commune est cachée par la composante connexe courante et n'est donc pas affichée et visible sur l'écran 48. Par contre, la partie non-commune est affichée et visible dans la feuille d'édition. La mise en forme particulière utilisée pour mettre en évidence la partie non-commune et pour la distinguer de la composante connexe courante est ici représenté par un hachurage des boîtes fonctionnelles de cette partie non-commune. Ainsi, l'utilisateur peut facilement voir sur le même écran la composante connexe courante et la composante connexe fonctionnelle sélectionnée dans la base de données 64. 18 [0087] Si la composante connexe fonctionnelle affichée dans la feuille d'édition correspond à celle que l'utilisateur souhaite construire, alors l'utilisateur sélectionne le bouton 172 de validation. En réponse, lors d'une opération 234, l'éditeur 58 remplace la composante connexe courante par la composante connexe fonctionnelle sélectionnée. Après cc remplacement, la composante connexe fonctionnelle qui a remplacé la composante connexe courante est affichée dans la feuille d'édition en utilisant la même mise en forme que celle utilisée pour afficher la composante connexe courante et non plus la mise en forme particulière utilisée lors de l'opération 232. [0088] On notera que dans l'exemple illustré sur la figure 4, le remplacement de la composante connexe courante par la composante connexe fonctionnelle sélectionnée permet à l'utilisateur d'ajouter six boîtes fonctionnelles et six arcs dans le code source en cliquant seulement une fois sur le bouton 172. De plus, le fait de sélectionner une composante connexe fonctionnelle dans la hase de données 64 permet à l'utilisateur d'éviter les problèmes (1) et (2) précédemment mentionnés. [0089] Si lors de l'opération 230, il existe plusieurs composantes connexes fonctionnelles dans la liste établie, alors les boutons 174 et 176 sont sélectionnables par l'utilisateur. Dans ce cas, si la composante connexe fonctionnelle actuellement affichée ne correspond pas à celle que souhaite construire l'utilisateur, l'utilisateur a la possibilité de sélectionner une autre des composantes connexes fonctionnelles présentes dans la liste établie lors de l'opération 230 en utilisant les boutons 174 et 176. [0090] Plus précisément, en réponse à la sélection du bouton 174 ou 176, lors d'une opération 236, l'éditeur 58 sélectionner une autre composante connexe fonctionnelle dans la liste établie lors de l'opération 230, puis retourne à l'opération 232. Lors de l'opération 232, c'est donc une autre composante connexe fonctionnelle, différente de la précédente, qui est affichée dans la feuille d'édition. Par exemple, ici, lorsque le bouton 176 est sectionné par l'utilisateur, l'éditeur 58 sélectionne, dans la liste, la composante connexe fonctionnelle associée à l'indice de priorité qui est, dans l'ordre décroissant des indices de priorité, situé immédiatement après l'indice de priorité de la composante connexe fonctionnelle actuellement sélectionnée. À l'inverse, si l'utilisateur sélectionne le bouton 174, l'éditeur 58 sélectionne, dans la liste, la composante connexe fonctionnelle associée à l'indice de priorité qui est, dans l'ordre décroissant des indices de priorité, situé immédiatement avant l'indice de priorité de la composante connexe fonctionnelle actuellement sélectionnée. Ainsi, les boutons 174 et 176 permettent à l'utilisateur de naviguer et donc d'afficher successivement les différentes composantes connexes fonctionnelles de la liste établie lors de l'opération 230. [0091] Si la composante connexe fonctionnelle actuellement affichée ne correspond pas à celle que l'utilisateur souhaite construire et si l'utilisateur souhaite poursuivre la construction du code source en ajoutant une nouvelle boîte fonctionnelle, il ne sé- 19 lectionne pas le bouton 172 et retourne directement à l'opération 208 pour ajouter une nouvelle boîte fonctionnelle dans la feuille d'édition. Après cet ajout, l'opération 230 et les opérations suivantes sont de nouveau exécutées. [0092] Ainsi les opérations 230 et 232 sont réitérées de façon répétée tout au long de l'étape 202 pour assister et guider l'utilisateur dans la construction du code source. [0093] En parallèle de la phase 202, lors d'une phase 250, l'éditeur 58 met à jour les valeurs des indices de priorité associés aux différentes composantes connexes fonctionnelles de la hase de données 64. Cette mise à jour est réalisée pour augmenter la probabilité que l'utilisateur sélectionne une composante connexe fonctionnelle à l'aide du bouton 172. Lors de la phase 250, l'éditeur 58 compte, pour chaque composante connexe fonctionnelle de la hase de données 64 : - le nombre nt de fois où cette composante connexe fonctionnelle a été utilisée dans un code source compilé puis écrit dans un automate programmable industriel, et - le nombre ucf, de fois successives où cette composante connexe fonctionnelle a été affichée lors de l'opération 232 et n'a pas ensuite été utilisée pour remplacer la composante connexe courante. [0094] Le nombre nm est par exemple incrémenté au moment où l'étape 214 est déclenchée. En effet, à cet instant, l'éditeur 58 sait que le code source a été utilisé pour générer un code exécutable écrit dans l'automate 4. Dans ce cas, l'éditeur 58 compare chaque composante connexe présente dans le code source aux composantes connexes fonctionnelles de la base de données 64. Ensuite, il incrémente le nombre nt associé à une composante connexe fonctionnelle uniquement si cette composante connexe fonctionnelle est trouvée, à l'identique, dans le code source compilé puis écrit dans l'automate. [0095] Le nombre ut correspond au nombre de fois successives où l'opération 232 est exécutée pour cette composante connexe fonctionnelle, sans qu'après le procédé se poursuive par l'exécution de l'opération 234 pour cette même composante connexe fonctionnelle. [0096] Les valeurs mises à jour des nombres nt et ut sont enregistrées pour chaque composante connexe fonctionnelle dans la troisième table associée à cette composante connexe fonctionnelle. À chaque fois que les nombres ni, et ut sont mis à jour pour une composante connexe fonctionnelle, l'indice de priorité Ri, associé à cette composante connexe fonctionnelle est également mis à jour. Ici, la valeur de l'indice pt est mise à jour à l'aide de la relation (1) suivante : p9= (nr'-nt/f)/(1+exp(a(ut-r))) + nit.; où : - "exp(...)" est la fonction exponentielle, et - a, r et f sont des constantes prédéfinies positives. [0097] Plus précisément, la constante "a" permet d'ajuster la vitesse à laquelle la valeur de l'indice py, va décroître dès que le nombre u' dépasse la constante "r". [0098] La constante "r" permet de limiter la diminution de la valeur de l'indice p' tant que le nombre up ne dépasse pas cette constante "r". Autrement dit, le terme exp(a(up-r)) implémente un mécanisme de retard qui retarde toute diminution substantielle de la valeur de l'indice py, tant que le nombre u' n'est pas supérieur à la constante "r". La constante "r" est donc supérieure ou égale à un et, de préférence, supérieure ou égale à trois. La constante "r" est généralement inférieure ou égal à vingt ou quinze. [0099] La constante "f" permet de pondérer l'importance donnée au mécanisme d'oubli. On désigne par "mécanisme d'oubli", le mécanisme qui permet d'accorder moins d'importance aux anciennes valeurs de l'indice p' par rapports aux valeurs les plus récentes de cet indice. Par exemple, si la constante "f" est égale à un, le mécanisme d'oubli est inhibé. À l'inverse, plus la constante "f" est grande, plus l'importance du mécanisme d'oubli dans la détermination de la valeur de l'indice p' est importante. Par exemple, la valeur de la constante "f" est supérieure ou égale à deux ou cinq et généralement inférieure à vingt. [0100] Le fait de pondérer le mécanisme d'oubli permet à la fois : - de faire décroître rapidement la valeur de l'indice p, quand la composante connexe fonctionnelle n'est plus utilisée, et - de restaurer rapidement une valeur de l'indice p' proche de la valeur du nombre n' dès que cette composante connexe fonctionnelle et de nouveau utilisée. [0101] Ainsi, grâce à la relation (1) : 1) La valeur de l'indice p, associé à une composante connexe fonctionnelle augmente à chaque fois que cette composante connexe fonctionnelle est utilisée pour générer un code exécutable écrit dans un automate. Cela accroît la probabilité que cette composante connexe fonctionnelle soit affichée puis utilisée lors des opérations 232 et 234. 2) La valeur de l'indice p' diminue lorsque la composante connexe fonctionnelle affichée n'est pas ensuite utilisée lors d'une opération 234. Cela permet une transition plus rapide en cas de changement important dans le contexte d'utilisation de l'atelier 42. 3) Le mécanisme de retard permet d'éviter d'enclencher trop rapidement la diminution de la valeur de l'indice p'. [0102] Enfin, lors d'une phase 260, l'éditeur 58 complète la base de données 64 en enre- gistrant de nouvelles composantes connexes fonctionnelles. Ici, l'étape 260 est exécutée à chaque fois que l'étape 214 d'écriture d'un code exécutable est exécutée. Plus précisément, lors de l'étape 260, l'éditeur 58 compare chaque composante connexe contenue dans le code source du programme qui a été compilé puis écrit dans 21 un automate à chacune des composantes connexes fonctionnelles actuellement contenues dans la hase de données 64. À chaque fois qu'il trouve une composante connexe dans le code source qui n'existe pas encore dans la hase de données 64, il enregistre cette composante connexe dans la hase de données 64 associée à un identifiant du type d'automate dans lequel cette composante connexe a été écrite. Cette composante connexe devient alors une nouvelle composante connexe fonctionnelle de la hase de données 64. Lors de la phase 260, une composante connexe est considérée comme n'existant pas encore dans la hase de données 64, seulement s'il existe une partie non-commune avec toutes les composantes connexes fonctionnelles déjà enregistrées dans cette hase de données 64. Ainsi, la hase de données 64 est complétée automatiquement avec les nouvelles composantes connexes fonctionnelles que l'utilisateur a construites et qui ont été compilées et exécutées par l'automate 4. [0103] La figure 5 représente plus en détail un procédé pour comparer une composante connexe courante à unc composante connexe fonctionnelle de la hase de données 64. [0104] Par la suite, on note : - A est unc racine de la composante connexe courante qui est utilisée comme point de départ pour une comparaison, - B est unc racine ou un noeud intermédiaire de la composante connexe fonctionnelle qui est utilisé comme point de départ pour une comparaison, - A' et B' les boîtes fonctionnelles actuellement traitées par le procédé de la figure 5. A' et B' sont des boîtes fonctionnelles, respectivement, des composantes connexes courante et fonctionnelle. - A' ' et B'' sont des boîtes fonctionnelles parentes, respectivement, des boîtes fonctionnelles A' et B'. - Al et Bq sont des boîtes fonctionnelles filles, respectivement, des boîtes fonctionnelles A' et B'. - Li et IB sont des entrées des boîtes fonctionnelles A' et B' ayant le même numéro d'ordre i. - 0,i et 0 sont des sorties des boîtes fonctionnelles A' et B' ayant le même numéro d'ordre j. - TAq est une table avec une première colonne pour contenir l'identifiant d'une boîte fonctionnelle de la composante connexe courante et une seconde colonne pour contenir l'identifiant d'une boîte fonctionnelle de la composante connexe fonctionnelle. Les identifiants de boîtes fonctionnelles situées sur une même ligne dans la table TAB signifient que ces boîtes fonctionnelles sont des boîtes fonctionnelles correspondantes dans la composante connexe courante et dans la composante connexe fonctionnelle. - Teh est une table qui contient l'identifiant des boîtes fonctionnelles rencontrées en parcourant une branche de la composante connexe courante. [0105] Lors d'une étape 296 initiale, la table TAB est vide. [0106] Ensuite, lors d'une étape 298, s'il existe une racine dans la composante connexe courante qui n'a pas encore été sélectionnée comme point de départ, l'éditeur 58 sélectionne cette racine A. A ce stade, la boîte fonctionnelle A' est prise égale à la racine A sélectionnée. [0107] Ensuite, lors d'une étape 300, s'il existe une boîte fonctionnelle B dans la composante connexe fonctionnelle qui n'a pas encore été sélectionnée comme point de départ, l'éditeur 58 sélectionne cette boîte fonctionnelle B comme point de départ. La boîte fonctionnelle B sélectionnée est nécessairement associée au même identifiant de fonction que celui associé à la racine A. A ce stade, la boîte fonctionnelle B' est prise égale à cette boîte fonctionnelle B sélectionnée. Une fois qu'une boîte fonctionnelle B est sélectionnée, la table T..1, est réinitialisée et vidée. [0108] Ensuite, lors d'une étape 302, l'éditeur 58 initialise les valeurs de deux variables POS et Bt à zéro et l'éditeur 58 affecte la valeur un à une variable Rt. [0109] Lors d'une étape 304, éditeur 58 vérifie si la boîte fonctionnelle A' n'est pas une racine. Seulement si la boîte fonctionnelle A' n'est pas une racine de la composante connexe courante, l'éditeur 58 procède à l'étape 306. Dans le cas contraire, il procède directement à l'étape 308. [0110] Lors de l'étape 306, pour chaque entrée TKI de la boîte fonctionnelle A', l'éditeur 58 relève l'identifiant de fonction de la boîte fonctionnelle A" raccordée à cette entrée par un arc orienté. L'éditeur 58 fait la même chose pour la même entrée de la boîte fonctionnelle B'. Ensuite, il compare les identifiants de fonction relevés pour les boîtes fonctionnelles A'' et B' '. Si ces identifiants de fonction sont différents, la valeur de la variable Rt est mise à zéro et le procédé retourne à l'étape 300. Dans le cas contraire, la valeur de la variable Rt reste inchangée et le procédé se poursuit par l'étape 308. Ainsi, lorsque l'étape 308 est exécutée, cela signifie que toutes les boîtes fonctionnelles parentes A' ' et B' ' sont identiques et raccordées aux mêmes entrées des boîtes fonctionnelles A' et B'. [0111] Lors de l'étape 308, l'éditeur 58 recherche si la table TAS comporte déjà l'identifiant de la boîte fonctionnelle A'. Dans l'affirmative, la valeur de la variable POS est prise égale au numéro de la ligne de la table TAS qui contient déjà l'identifiant de la boîte fonctionnelle A'. La valeur de la variable POS est alors nécessairement supérieure à zéro. [0112] Ensuite, lors d'une étape 310, si la valeur de la variable POS est égale à zéro, c'est-à-dire que l'identifiant de la boîte fonctionnelle A' n'était pas déjà présent dans la table TAB, alors les identifiants des boîtes fonctionnelles A' et B' sont enregistrés dans une nouvelle ligne de cette table TAB, respectivement, dans les première et seconde colonnes. 23 [0113] À l'inverse, si la valeur de la variable POS est différente de zéro, alors cela signifie que l'identifiant de la boîte fonctionnelle A' est déjà présent dans la table TAB. Dans ce cas, l'éditeur 58 compare l'identifiant de la boîte fonctionnelle B' à l'identifiant de boîte fonctionnelle associé, par la table TAB, à l'identifiant de la boîte A'. Seulement si les identifiants comparés sont différents, alors la valeur de la variable Rt est mise à zéro. [0114] Ensuite, lors d'une étape 312, l'éditeur 58 recherche l'identifiant de la boîte fonc- tionnelle A' dans la table Lir Seulement si l'identifiant de la boîte fonctionnelle A' se trouve déjà dans la table TAI, alors il affecte la valeur un à la variable Bt. À l'inverse, si l'identifiant de la boîte fonctionnelle A' n'est pas déjà présent dans la table T11, l'identifiant de la boîte fonctionnelle A' est enregistré dans cette table Tut,. [0115] Lors d'une étape 314, si la valeur de la variable Bt est égale à zéro et pour chaque sortie 0A, de la boîte fonctionnelle A' qui est raccordée à une boîte fonctionnelle fille Ag, le procédé retourne à l'étape 306 en remplaçant A' par Ag et B' par la boîte fonctionnelle fille B" qui est raccordée à la sortie OR'i- [0116] Si la boîte fonctionnelle A' n'a aucune boîte fonctionnelle fille A", alors : - le procédé retourne à l'étape 300 si la variable Rt est égale à zéro et s'il existe au moins une boîte fonctionnelle de la composante connexe fonctionnelle associée au même identifiant de fonction que celui de la racine A et qui n'a pas déjà été sélectionnée lors d'une précédente itération de l'étape 300, sinon : - le procédé retourne à l'étape 298 si la variable Rt est égale à un et s'il existe au moins une racine de la composante connexe courante qui n'a pas déjà été sélectionnée lors d'une précédente itération de l'étape 298, sinon : - le procédé s'arrête et le résultat de la comparaison de la composante connexe courante à la composante connexe fonctionnelle se trouve dans la variable Rt. [0117] Plus précisément, si la valeur de la variable Rt est restée égale à un, cela signifie qu'il existe dans la composante connexe fonctionnelle une partie commune identique à la composante connexe courante. De plus, si le nombre de boîtes fonctionnelles et d'arcs de la composante connexe fonctionnelle est supérieur au nombre de boîtes fonctionnelles et d'arcs de la composante connexe courante, cela signifie en plus qu'il existe dans la composante connexe fonctionnelle une partie non-commune avec la composante connexe courante. Si à l'issue des différentes itérations des étapes 298 à 314, la valeur de la variable Rt est égale à zéro, cela signifie qu'il n'existe pas de partie commune dans la composante connexe fonctionnelle identique à la composante connexe courante. [0118] Lors de l'opération 230, l'identifiant de la composante connexe fonctionnelle est ajouté à la liste uniquement s'il existe une partie non-commune non vide. [0119] Chapitre II : Variantes 24 [0120] En variante, le moteur 8 est un moteur électrique linéaire ou tout type de moteurs électriques. Par exemple, le moteur est le moteur d'une pompe, le moteur d'un actionneur qui déplace des panneaux solaires, le moteur d'un actionneur qui déplace les soupapes d'un moteur thermique, le moteur d'une articulation d'un bras d'un robot, un moteur d'entraînement d'un tapis roulant ou autres. [0121] D'autres modes de réalisation de l'interface homme-machine 50 sont possibles. Par exemple, l'écran 48 est un écran tactile qui sert alors, en plus, d'interface homme-machine 50. [0122] La base de données 64 peut être implémentée différemment. En particulier, il n'est pas nécessaire qu'il s'agisse d'une base de données orientée graphe. Il peut aussi s'agir d'une hase de données relationnelles comme une hase de données connue sous le nom de « MySQL ». [0123] Initialement, la hase de données 64 peut être vide. Dans ce cas, c'est uniquement après la première exécution de l'étape 214 d'écriture que cette hase de donnée 64 est peuplées avec une ou plusieurs composantes connexes fonctionnelles. A l'inverse, dans un autre mode de réalisation, initialement, la hase de données 64 comporte déjà des composantes connexes fonctionnelles pré-enregistrées. Dans ce dernier cas, la phase 260 peut être omise. [0124] L'automate 4 doit être raccordé à l'atelier 42 pour qu'un nouveau code exécutable puisse être écrit dans la mémoire 22. Toutefois, il n'est pas nécessaire que l'automate 4 soit raccordé à l'atelier 42 pendant la construction du code source et/ou pendant sa compilation. Ainsi, l'automate 4 peut être raccordé à l'atelier 42 uniquement après l'étape 212 et juste avant l'exécution de l'étape 214. [0125] En variante, les différentes conditions prédéfinies pour autoriser une compilation sans erreur sont vérifiées immédiatement après les opérations 208 et 210. Si une condition n'est pas satisfaite, alors l'ajout de la boîte fonctionnelle dans la feuille d'édition est interdit ou la création d'un arc dans cette feuille d'édition est interdite. Dans ce cas, à partir du moment où le code source peut être construit dans la feuille d'édition, il est nécessairement compilable sans déclencher d'erreur. [0126] En variante, les boutons 174 et 176 sont omis et l'opération 236 est également omise. Ainsi, dans ce mode de réalisation, seule la composante connexe fonctionnelle associée à l'indice Fit ayant la valeur la plus élevée est affichée lors de l'opération 232. [0127] Dans une autre variante, seul le bouton 174 est omis Le bouton 176 est quant à lui conservé. [0128] D'autres relations sont possibles et utilisables à la place de la relation (1). Par exemple, dans un mode de réalisation simplifié, la relation (1) est remplacée par la relation suivante : pcfn9. Dans ce cas, aucun mécanisme d'oubli n'est mis en oeuvre. Dès lors, la phase temporaire qui suit un changement important dans l'utilisation de l'atelier 42, tel qu'un changement de projet ou un changement de programme, dure plus longtemps que lorsqu'un mécanisme d'oubli est implémenté. [0129] Dans une autre variante, la valeur de l'indice py, associé à une composante connexe fonctionnelle est incrémentée d'un pas wl à chaque fois que l'opération 234 est exécutée pour cette composante connexe fonctionnelle. A l'inverse, la valeur de l'indice py, est décrémentée d'un pas w2 à chaque fois que l'opération 234 est exécutée pour une autre composante connexe fonctionnelle. Par exemple, les pas wl et w2 sont égaux, respectivement à 1 et à 0,1. Dans ce cas, la valeur de l'indice p,t, peut diminuer ce qui limite la durée de la phase transitoire en cas de changement important dans le contexte d'utilisation de l'atelier 42. Toutefois, cette façon de procéder ne conserve pas le classement des composantes connexes fonctionnelles les unes par rapport aux autres et dont l'usage s'est interrompu en même temps. Elle ne permet pas non plus de restaurer rapidement une valeur élevée de l'indice pcp dès que cette composante connexe fonctionnelle est de nouveau utilisée dans le code source d'un programme. [0130] Dans le cas où la hase de données 64 comportent, dès la première utilisation, des composantes connexes fonctionnelles pré-enregistrées associées chacune à un indice de priorité prédéterminé, en variante, cet indice de priorité prédéterminé n'est ensuite jamais mis à jour. Dans ce cas, l'étape 250 peut être omise. [0131] Lors de l'opération 230, des composantes connexes fonctionnelles associées à un identifiant de type d'automate correspondant à celui acquis lors de l'opération 204 peuvent également être sélectionnés. Un identifiant de type d'automate est considéré comme correspondant à celui acquis lors de l'opération 204 lorsqu'il est relié à l'identifiant acquis par une relation pré-enregistrée. Cette relation pré-enregistrée associe entre eux les identifiants des automates susceptibles d'utiliser les mêmes composantes fonctionnelles. Dans une variante simplifiée, l'identifiant de type d'automate n'est pas pris en compte pour construire la liste de composantes connexes fonctionnelles lors de l'opération 230. Dans ce cas, cet identifiant de type d'automate peut être omis [0132] D'autres procédés pour comparer la composante connexe courante à une composante connexe fonctionnelle peuvent être développés. Par exemple, au lieu de parcourir la composante connexe courante depuis les racines vers les feuilles, celle-ci peut être parcourue en sens inverse, c'est-à-dire, depuis des feuilles vers les racines. [0133] Dans le cas particulier où la composante connexe courante ne comporte aucune boucle, l'utilisation de la variable Bt et de la table Ta peut être omise. [0134] La comparaison de la composante connexe courante à une composante connexe fonc- tionnelle peut aussi être réalisée par comparaison des images de ces composantes connexes sans utiliser pour cela les tables telles que les première et deuxième tables. [0135] Dans les modes de réalisation précédents, c'est la sélection du bouton 172 qui 26 constitue un événement déclencheur du remplacement de la composante connexe courante par la composante connexe fonctionnelle sélectionnée. En variante, d'autres événements déclencheurs peuvent être utilisés en plus ou à la place de cet événement déclencheur. A titre d'exemple, un autre évènement déclencheur est le fait que la valeur de l'indice de priorité associé à la composante connexe fonctionnelle sélectionnée lors de l'opération 230 est supérieure à un seuil prédéterminé. Dans ce cas, le calculateur 46 exécute automatiquement et systématiquement l'opération 234 et l'étape 232 d'affichage préalable de cette composante fonctionnelle associée aux boutons 172 de validation est omise. A l'inverse, si la valeur de l'indice de priorité ne dépasse pas cc seuil prédéterminé, l'exécution automatique et systématique de l'opération 234 est inhibée. Par exemple, l'étape 232 est alors exécutée ou aucune des étapes 232, 234, 236 n'est exécutées. Dans ce dernier cas, le remplacement automatique de la composante connexe courante par la composante connexe fonctionnelle sélectionnée se produit uniquement si l'indice de priorité est supérieur au seuil prédéterminé. [0136] Dans le cas où l'opération 234 peut être déclenchée par un autre événement dé- clencheur que la sélection du bouton 172, les opérations 232 et 236 peuvent être omises. [0137] Chapitre III : Avantages des modes de réalisation décrits [0138] Un automate programmable industriel programmé est un objet technique. Un automate programmable industriel programmé est techniquement différent d'un automate programmable industriel non-programmé ou d'un automate programmable industriel programmé différemment. En effet, deux automates programmés différemment diffèrent l'un de l'autre par leur fonctionnement. Par exemple, un automate programmé pour réguler la vitesse d'un moteur ne fonctionne pas de la même manière qu'un automate programmé pour réguler la position de l'arbre de ce moteur. [0139] Un atelier de programmation modifie donc le fonctionnement d'un automate en écrivant dans cet automate un nouveau code exécutable. L'atelier de programmation est donc lui aussi un objet technique puisqu'il est apte à modifier le fonctionnement d'un objet technique à savoir le fonctionnement d'un automate programmable. [0140] Le fait de sélectionner et d'afficher une composante connexe fonctionnelle à chaque ajout d'une boîte fonctionnelle dans le code source permet, par des interactions répétées, de guider l'utilisateur dans la réalisation d'une tâche technique à savoir la production d'un automate programmable industriel apte à commander un moteur. [0141] De plus, la sélection automatique d'une composante connexe fonctionnelle dans la base de données 64 et la possibilité de remplacer la composante connexe courante par cette composante connexe fonctionnelle permet, en sélectionnant un seul bouton 172, d'ajouter plusieurs boîtes fonctionnelles au code source. Cela diminue donc le nombre de mouvements que doit réaliser l'utilisateur pour produire un automate. 27 [0142] De plus, cela limite la probabilité que l'utilisateur se trompe lors de l'ajout de boîtes fonctionnelles et obtienne donc un code source qui ne peut pas être compilé sans erreur ou qui ne fonctionne pas correctement. En effet, les composantes connexes fonctionnelles affichées et sélectionnables sont des composantes connexes qui ne génèrent pas d'erreur de compilation et qui ont déjà été écrites et exécutées par des automates. [0143] La comparaison de la composante connexe courante à une composante connexe fonc- tionnelle peut nécessiter des ressources informatiques importantes. Par exemple, si l'on recherche à singer les opérations mises en oeuvre par un être humain pour faire cela, il faut que le calculateur électronique compare entre elles une image de la composante connexe courante et une image de la composante connexe fonctionnelle pour savoir si une partie de la composante connexe fonctionnelle est identique à la composante connexe courante. Or, les traitements d'images sont longs et coûteux en ressources informatiques. Le procédé de la figure 5 permet de limiter les ressources informatiques nécessaires pour faire cette comparaison en exploitant les première et deuxième tables qui décrivent la structure de chaque composante connexe. [0144] Le fait de compléter automatiquement la hase de données 64 avec de nouvelles com- posantes connexes fonctionnelles développées par l'utilisateur et qui ont déjà été compilées sans erreur et écrites dans l'automate permet d'adapter automatiquement la hase de données 64 aux besoins de cet utilisateur. Cela permet donc d'assister encore plus efficacement l'utilisateur dans la production de l'automate 4. [0145] Le fait de mettre à jour l'indice de priorité associé à chaque composante fonc- tionnelle à chaque fois que celle-ci est utilisée pour générer un code exécutable qui est ensuite écrit dans un automate permet d'augmenter la probabilité que cette composante connexe fonctionnelle affichée soit sélectionnée par l'utilisateur. Cela permet donc d'assister encore plus efficacement l'utilisateur dans la production de l'automate 4. [0146] Lors de l'opération 230, le fait d'établir la liste en ne retenant que les composantes connexes fonctionnelles associées à un identifiant de type d'automate identique à celui acquis lors de l'opération 204 permet d'augmenter la probabilité qu'une composante connexe fonctionnelle affichée lors de l'opération 232 soit sélectionnée et utilisée lors de l'opération 234 et d'éviter l'utilisation de boîtes fonctionnelles non compatibles avec le type d'automate à produire. Cela permet donc d'assister encore plus efficacement l'utilisateur dans la production de l'automate 4. De plus, cela permet de limiter le nombre de composantes connexes fonctionnelles de la base de données 64 pour lesquels le procédé de la figure 5 est mis en oeuvre. Cela limite donc les ressources informatiques nécessaires pour le fonctionnement de l'atelier 42. [0147] L'atelier de programmation peut être utilisé pendant une première période pour produire un premier automate pour une première installation, puis pendant une seconde période, pour produire un second automate pour une seconde installation dans laquelle 28 le moteur à commander est différent de celui à commander dans la première installation. Dans cc cas, généralement, des premières composantes connexes sont fréquemment utilisées pendant la première période et des secondes composantes connexes différentes sont fréquemment utilisées pendant la seconde période. Pendant la première période, les indices de priorité des premières composantes connexes fonctionnelles sont donc incrémentés et deviennent donc très largement supérieurs aux indices de priorité associés aux secondes composantes connexes. À cause de cela, pendant une phase transitoire, au début de la seconde période, les composantes connexes fonctionnelles affichées lors de l'opération 232 sont les premières composantes connexes et non pas les secondes composantes connexes. Ainsi, pendant une phase transitoire, l'atelier de programmation est moins bon pour assister l'utilisateur dans la production du second automate. Le fait de diminuer automatiquement l'indice de priorité d'une composante connexe qui est affichée, mais qui n'est pas utilisée permet de raccourcir la durée de cette phase transitoire et donc d'assister plus efficacement l'utilisateur dans la production d'automates. [0148] Le fait d'inhiber la diminution de l'indice de priorité tant que le nombre u, ne dépasse pas la constante "r" permet d'éviter que l'indice de priorité d'une composante connexe fonctionnelle diminue dès qu'elle est affichée mais pas utilisée lors de l'opération 234. En effet, une diminution immédiate de l'indice p, conduit à une assistance dégradée lorsque l'utilisateur utilise en alternance une première et une seconde composantes connexes fonctionnelles. [0149] Lors de l'opération 232, le fait de superposer l'affichage de la composante connexe courante sur la partie commune de la composante connexe fonctionnelle permet d'afficher simultanément ces deux composantes connexes, tout en limitant l'espace requis pour cet affichage simultané. 29 [Revendication 1] REVENDICATIONSProcédé de production d'un automate apte à commander un moteur, ce procédé comportant : - la fourniture (200) d'un automate programmable industriel, et - la fourniture (200) d'un atelier de programmation en langage graphique FBD ("Function Block Diagram") de l'automate programmable industriel, cet atelier comportant : une mémoire contenant une hase de données, cette hase de données comportant des composantes connexes fonctionnelles et chacune de ces composantes connexes fonctionnelles est associée à un indice de priorité respectif, une composante connexe étant un groupe de boîtes fonctionnelles liées entre elles par des arcs orientés conformément au langage graphique FBD, chaque composante connexe formant ainsi un sous-graphe induit maximal connexe, une composante connexe fonctionnelle étant une composante connexe apte à être compilée sans erreur pour générer un code correctement exécutable par l'automate programmable industriel, un écran (48), un calculateur électronique (46), et une interface homme machine (50) apte à générer une commande destinée à être acquise par le calculateur électronique, dans lequel le calculateur électronique exécute les étapes suivantes : 1) l'acquisition (208) d'une commande d'ajout d'une boîte fonctionnelle et, en réponse, la modification de l'état de l'atelier en ajoutant une nouvelle boîte fonctionnelle dans un code source écrit en langage graphique FBD d'un programme et ainsi obtenir une nouvelle composante connexe courante dans le code source de cc programme, puis 2) l'acquisition (212) d'une commande de compilation et, en réponse, la compilation du code source du programme pour obtenir un code exécutable par l'automate programmable industriel, puis 3) l'acquisition (214) d'une commande d'écriture et, en réponse, l'écriture 30 [Revendication 2] [Revendication 3] du code exécutable dans l'automate programmable industriel qui est alors apte à l'exécuter pour commander le moteur, caractérisé en ce que le calculateur électronique exécute les étapes suivantes : - l'augmentation (250) de l'indice de priorité associé à une composante connexe fonctionnelle de la base de données à chaque fois que cette composante connexe fonctionnelle est utilisée dans un code source qui est ensuite compilé et écrit dans l'automate, - la sélection (230) dans la base de données d'une composante connexe fonctionnelle qui comporte une partie commune identique à cette nouvelle composante connexe courante et qui est associée à l'indice de priorité le plus élevé, puis - en réponse à un événement déclencheur, le remplacement (234), dans le code source du programme, de la nouvelle composante connexe courante par la composante connexe fonctionnelle sélectionnée. Procédé selon la revendication 1, dans lequel le calculateur électronique exécute les étapes suivantes à chaque fois qu'une nouvelle composante connexe courante est obtenue : a) la sélection (230) dans la base de données de la composante connexe fonctionnelle qui comporte une partie commune identique à cette nouvelle composante connexe courante et qui est associée à l'indice de priorité le plus élevé, puis b) l'affichage (232) sur l'écran (48): - de la composante connexe fonctionnelle sélectionnée, et en même temps - d'un bouton de validation associé à la composante connexe fonctionnelle affichée, puis c) en réponse à la sélection par l'utilisateur du bouton de validation, le remplacement automatique (234) dans le code source du programme, de la nouvelle composante connexe courante par la composante connexe fonctionnelle affichée et, en absence de sélection du bouton de validation, le retour à l'étape 1) sans effectuer ce remplacement automatique, la sélection du bouton de validation constituant ainsi l'événement déclencheur. Procédé selon la revendication 2, dans lequel le calculateur électronique diminue (250) l'indice de priorité associé à une composante connexe fonctionnelle lorsque, lors de l'étape b), cette composante connexe fonctionnelle est affichée mais ensuite le bouton de validation associé à cette 31 composante connexe fonctionnelle n'est pas sélectionné. [Revendication 4] Procédé selon la revendication 3, dans lequel le calculateur électronique [Revendication 5] [Revendication 6] - compte le nombre de fois successives où, lors de l'étape h), une composante connexe fonctionnelle est affichée mais ensuite le bouton de validation associé à cette composante connexe fonctionnelle n'est pas sélectionné, et - inhibe (250) la diminution de l'indice de priorité associé à cette composante connexe fonctionnelle tant que le nombre compté est inférieur à un seuil prédéterminé strictement supérieur à un. Procédé selon l'une quelconque des revendications précédentes, dans lequel - la hase de données comporte, associé à chacune des composantes connexes fonctionnelles, un identifiant du type d'automate programmable industriel apte à exécuter cette composante connexe après compilation, - le calculateur électronique acquière (204) un identifiant du type d'automate programmable industriel à produire, et - le calculateur électronique autorise seulement (230) la sélection des composantes connexes fonctionnelle associées, dans la hase de données, à un identifiant du type d'automate programmable industriel correspondant à celui acquis par le calculateur électronique. Procédé selon l'une quelconque des revendications précédentes, dans lequel la sélection (230) dans la base de données de la composante connexe fonctionnelle comporte la comparaison de la composante connexe courante à la composante connexe fonctionnelle enregistrée dans la base de données, cette comparaison comportant les opérations suivantes : - le parcours de la composante connexe courante à partir d'un premier point de départ en empruntant uniquement les arcs orientés dans le même sens, ce premier point de départ étant une racine de la composante connexe courante, - le parcours de la composante connexe fonctionnelle à partir d'un second point de départ en empruntant uniquement les arcs orientés dans le même sens, ce second point de départ étant une boite fonctionnelle identique au premier point de départ, et - pour chaque première boite fonctionnelle fille rencontrée pendant le parcours de la composante connexe courante, la vérification (306) que 32 [Revendication 7] [Revendication 8] [Revendication 9] les premières boites fonctionnelles pères de cette première boite fonctionne fille sont identiques à des secondes boites fonctionnelles pères d'une seconde boite fonctionnelle fille de la composante connexe fonctionnelle, la seconde boite fonctionnelle fille occupant une position par rapport au second point de départ identique à la position de la première boite fonctionnelle fille par rapport au premier point de départ. Procédé selon l'une quelconque des revendications précédentes, dans lequel, en réponse à l'exécution de l'étape 3), le calculateur électronique enregistre (260) dans la hase de données une nouvelles composantes connexes fonctionnelles si le code source compilé comporte une composante connexe qui est différente des composantes connexes fonctionnelles déjà enregistrées dans cette hase de données, cette composante connexe différente enregistrée devenant ainsi une nouvelle composante fonctionnelle de la base de données associée à son propre indice de priorité. Support (54) d'enregistrement d'informations lisible par un calculateur électronique, caractérisé en ce que le support comporte des instructions pour l'exécution d'un procédé conforme à l'une quelconque des revendications précédentes, lorsque ces instructions sont exécutées par le calculateur électronique. Atelier de programmation en langage graphique FBD ("Function Block Diagram") d'un automate programmable industriel apte à commander un moteur, pour la mise en oeuvre d'un procédé conforme à l'une quelconque des revendications 1 à 7, cet atelier comportant : - une mémoire (54) contenant une base de données (64), cette base de données comportant des composantes connexes fonctionnelles et chacune de ces composantes connexes fonctionnelles est associée à un indice de priorité respectif, une composante connexe étant un groupe de boîtes fonctionnelles liées entre elles par des arcs orientés confoimément au langage graphique FBD, chaque composante connexe formant ainsi un sous-graphe induit maximal connexe, une composante connexe fonctionnelle étant une composante connexe apte à être compilée sans erreur pour générer un code correctement exécutable par l'automate programmable industriel, - un écran (48), - un calculateur électronique (46), et - une interface homme machine (50) apte à générer une commande 33 destinée à être acquise par le calculateur électronique, dans lequel le calculateur électronique est configuré pour exécuter les étapes suivantes : 1) l'acquisition d'une commande d'ajout d'une boîte fonctionnelle et, en réponse, la modification de l'état de l'atelier en ajoutant une nouvelle boîte fonctionnelle dans un code source écrit en langage graphique FBD d'un programme et ainsi obtenir une nouvelle composante connexe courante dans le code source de ce programme, puis 2) l'acquisition d'une commande de compilation et, en réponse, la compilation du code source du programme pour obtenir un code exécutable par l'automate programmable industriel, puis 3) l'acquisition d'une commande d'écriture et, en réponse, l'écriture du code exécutable dans l'automate programmable industriel qui est alors apte à l'exécuter pour commander le moteur, caractérisé en ce que le calculateur électronique est également configuré pour exécuter les étapes suivantes : - l'augmentation de l'indice de priorité associé à une composante connexe fonctionnelle de la hase de données à chaque fois que cette composante connexe fonctionnelle est utilisée dans un code source qui est ensuite compilé et écrit dans l'automate, - la sélection dans la base de données d'une composante connexe fonctionnelle qui comporte une partie commune identique à cette nouvelle composante connexe courante et qui est associée à l'indice de priorité le plus élevé, puis - en réponse à un événement déclencheur, le remplacement, dans le code source du programme, de la nouvelle composante connexe courante par la composante connexe fonctionnelle sélectionnée.