FR 2695739 A1 19940318 FR 9211072 A 19920915 La présente invention se rapporte à un procédé de traitement de données booléennes dans une unité centrale d'automate programmable et à une unité centrale de traitement à coprocesseur booléen permettant la mise en oeuvre de ce procédé. Un coprocesseur (flottant tel que le MOTOROLA 68881 ou arithmétique tel que le INTEL 80287) est un circuit spécialisé dans certains traitements (mathématiques, arithmétiques ou graphiques), élargissant les possibilités d'un microprocesseur généraliste auquel il est associé. Le coprocesseur peut être indépendant du microprocesseur et communiquer avec lui par l'intermédiaire d'un bus. Il peut aussi être intégré directement au microprocesseur. Le coprocesseur fonctionne comme un prolongement du microprocesseur principal dont il étend le jeu d'instructions, en augmentant la précision et la puissance de calcul. Les automates programmables sont constitués d'un ensemble de racks qui reçoivent les différents modules ou cartes. Le rack principal contient le ou les modules d'unités centrales. D'autres racks contiennent des cartes d'entrées sorties et /ou les cartes de communication, de commande d'axes, de régulation. Parmi les modules d'unités centrales, l'unité centrale de traitement comprend principalement un microprocesseur, une mémoire programme, une mémoire "données et travail"-dans laquelle sont stockées les valeurs courantes des entrées et des sorties des cartes d'entrées/sorties et/ou des cartes de communication et/ou des cartes de commandes d'axes et/ou des cartes de régulation. L'unité centrale de l'automate programmable exécute un programme relatif à une application d'automatisme, écrit dans un langage spécifique à l'automate. Ce programme est constitué principalement de fonctions logiques et /ou numériques qui vont traiter les informations présentes sur les entrées de l'automate (reliées aux capteurs), pour élaborer des informations sur les sorties de l'automate (commandes des préactionneurs). Le langage spécifique à l'automate est formé de réseaux de schémas à contacts (ladder) et/ou de boites fonctionnelles constructeur et/ou de schémas Grafcet. Une unité centrale telle que celle décrite dans le brevet EP-0174231 comprend au moins deux processeurs internes dont un microprocesseur numérique standard et un processeur spécifique du type booléen. Le microprocesseur numérique gère les tâches système, les boites fonctionnelles constructeur et exécute les instructions sur mots et sur blocs fonctions. Le processeur spécifique booléen exécute les opérations sur bits, des traitements typiquement "booléens" associés au langage à relais. Les processeurs booléens actuels travaillent séquentiellement avec le microprocesseur numérique. La présente invention a pour but d'améliorer les performances d'un coprocesseur booléen en intégrant dans celui-ci un algorithme d'interprétation de données booléennes qui sont organisées en mémoire. Ce niveau de performance est atteint grâce à l'organisation des données, grâce à la structure de l'algorithme d'interprétation des données et enfin grâce à la limitation au maximum des accès mémoires. De plus le microprocesseur numérique reste disponible pendant que le coprocesseur travaille, ce qui conduit à un gain en temps d'exécution au travers de tâches exécutées en parallèle. Ce coprocesseur permet d'obtenir un temps d'exécution très réduit pour des tâches répétitives et pénalisantes en temps d'exécution pour le microprocesseur numérique associé, c'est à dire concernant essentiellement la partie booléenne des applications.De plus, le coprocesseur permet également, par son algorithme de traitement booléen, d'interpréter du grafcet, grâce au fait que tout graphe peut être traduit sous forme de structure de données booléennes. Le procédé selon l'invention consiste à stocker, dans une mémoire, des variables d'entrée présentant un état actif et un état inactif et représentatives des états d'entrée de l'automate et des variables de sortie présentant un état actif et un état inactif et représentatives des états de sortie de l'automate et à stocker, dans une mémoire de données, des données correspondant à un programme d'automatisme écrit soit en grafcet soit en réseau relais ou ladder constitué d'une expression combinatoire d'entrée représentant une fonction de logique combinatoire des variables d'entrée vraie ou fausse conditionnant respectivement le positionnement actif ou inactif des variables combinatoires de sortie qui forment l'expression combinatoire de sortie, et il est caractérisé par le fait qu'il consiste:: - à stocker dans la mémoire de données, dans une pluralité de mots, des paramètres attachés à chaque variable d'entrée, en ordonnant ces variables et, dans une pluralité de mots, des paramètres attachés à chaque variable de sortie, en ordonnant ces variables; - à évaluer successivement chacune des variables d'entrée stockées dans la mémoire des variables, de manière que si ladite variable conduit, c'est à dire si elle est active, l'évaluation suivante porte sur la variable successeur dans l'expression combinatoire d'entrée et que si ladite variable ne conduit pas, l'évaluation porte sur la variable de déroutage dans l'expression combinatoire d'entrée, et cela tant que le résultat de l'expression combinatoire d'entrée n'est pas déterminé;; - à affecter successivement chacune des variables de sortie stockées dans la mémoire des variables, dès que le résultat, vrai ou faux, de l'expression combinatoire d'entrée du réseau relais est déterminé, de manière que si le résultat est vrai, la variable de sortie soit positionnée à sa valeur active, l'affectation suivante portant sur la variable successeur de ladite variable dans l'expression combinatoire de sortie et que si le résultat est faux, la variable de sortie soit généralement positionnée à sa valeur inactive, l'affectation suivante portant sur la variable successeur de ladite variable dans l'expression combinatoire de sortie. Selon une caractéristique, le procédé consiste à mémoriser en mémoire de données, dans les mots attachés à chaque variable d'entrée, un multiplet étant l'adresse du mot contenant la valeur de la dite variable en mémoire des variables, un multiplet définissant des paramètres et un masque d'accès à la valeur de ladite variable en mémoire des variables, à calculer, par une fonction logique, la conduction ou non-conduction de ladite variable, en utilisant les paramètres, le masque d'accès et le mot contenant la valeur de ladite variable d'entrée. Selon une autre cactéristique, le procédé consiste à mémoriser en mémoire de données, dans les mots attachés à chaque variable d'entrée, un bit indiquant si la valeur de la variable successeur est contenue dans le même mot en mémoire des variables que la valeur de la dite variable d'entrée, pour dans le cas où la dite variable d'entrée conduit, éviter la relecture de ce mot en mémoire des variables. Selon une autre caractéristique, le procédé consiste à mémoriser en mémoire de données, dans les mots attachés à chaque variable d'entrée, un multiplet donnant l'adresse en mémoire des données des mots attachés à une variable de déroutage de la dite variable. Selon une autre caractéristique, le procédé consiste à mémoriser en mémoire des données, dans les mots attachés à chaque variable d'entrée, un bit indiquant si la valeur de la variable de déroutage est contenue dans le même mot en mémoire des variables que la valeur de la dite variable d'entrée, pour dans le cas où la dite variable d'entrée ne conduit pas, éviter la relecture de ce mot en mémoire des variables. Selon une autre caractéristique, le procédé consiste à mémoriser, en mémoire des données, dans les mots attachés à chaque variable de sortie, un multiplet étant l'adresse du mot contenant la valeur de ladite variable en mémoire des variables, un multiplet définissant des paramètres et un masque d'accès à la valeur de ladite variable en mémoire des variables, à calculer par une fonction logique, la condition d'affectation vraie ou fausse et l'affectation de ladite variable, en utilisant les paramètres, le masque d'accès et le mot contenant la valeur de ladite variable de sortie ainsi que la valeur vraie ou fausse de l'expression combinatoire d'entrée. Selon une autre caractéristique, le procédé consiste à mémoriser, en mémoire des données, dans les mots attachés à chaque variable de sortie, un bit indiquant si la valeur de la variable successeur est contenue dans le même mot en mémoire des variables que la valeur de ladite variable de sortie pour éviter la relecture de ce mot en mémoire des variables. Selon une autre caractéristique, le procédé consiste, dans le cadre de l'affectation des variables de sortie, à mémoriser en interne dans le coprocesseur dans les registres bits, un bit indiquant si au moins unes des valeurs de variables de sortie (donc au moins un des bits) a été modifiée en interne dans le coprocesseur, pour éviter dans le cas où aucune des valeurs n'a été modifiée d'écrire le mot en mémoire des variables. L'unité centrale selon l'invention comprend un coprocesseur travaillant sur une mémoire des variables stockant les variables d'entrée et de sortie représentatives des états d'entrée et des états de sortie de l'automate et une mémoire de données stockant des données correspondant à un programme d'automatisme écrit en ladder ou grafcet, le coprocesseur comprenant une partie de contrôle ou de séquencement assurant le séquencement et le contrôle des traitements de données et une partie opérative de traitement assurant le traitement des données,et elle est caractérisée par le fait que le coprocesseur comporte deux bus d'adresses pour adresser la mémoire de données et la mémoire des variables et deux bus de données pour transporter des données vers ou de la mémoire de données ou la mémoire des variables, la partie opérative comprenant des moyens comprenant des blocs logiques, reliés en entrée aux bus de données et en sortie avec le bus de données de la mémoire des variables pour évaluer les variables booléennes d'entrée et pour affecter les variables booléennes de sortie. Selon une caractéristique, la partie opérative comprend des blocs d'entrée /sortie qui assurent les liaisons entre les bus de données du coprocesseur et les mémoires et des blocs de sortie qui assurent les liaisons entre les bus d'adresses et les mémoires. Selon une autre caractéristique, elle comporte des moyens comprenant des blocs logiques, reliés en entrées et sorties au bus d'adresses de la mémoire de données et capables sur commande du séquenceur (39) de générer une adresse incrémentée dans ladite mémoire de données. L'invention va maintenant être décrite avec plus de détail en se référant à un mode de réalisation donné à titre d'exemple et représenté par les dessins annexés sur lesquels: - la figure 1 est un schéma d'une unité centrale de traitement comprenant le coprocesseur booléen selon l'invention; - la figure 2 est un exemple de réseau booléen; - la figure 3 montre un découpage du réseau booléen de la figure 2 qui permet d'aboutir à la structure de données selon l'invention - la figure 4 est un schéma fonctionnel du coprocesseur spécifique selon l'invention. L'automate programmable comprenant l'unité centrale de la figure 1, reçoit, via des modules d'entrée/sortie, des signaux électriques de capteurs et émet des signaux électriques vers des pré-actionneurs et des voyants. Les signaux reçus et les signaux émis sont définis par des niveaux logiques "0" ou "1" et sont appelés variables d'entrée et variables de sortie. L'unité centrale de l'automate programmable exécute en permanence un programme d'automatisme relatif à une application particulière, en fonction des états des entrées, pour commander les états des sorties. Le temps d'exécution est appelé temps de cycle. Ce programme d'automatisme est décrit dans un langage graphique spécifique: langage à contacts ("ladder"), boites fonctionnelles constructeur ou langage grafcet. Le langage à contacts est un langage graphique qui représente une succession de fonctions logiques. Les variables d'entrée sont uniquement des variables de types contacts ouverts ou fermés. La fonction logique des variables d'entrée (appelée aussi réseau combinatoire d'entrée) a une valeur 0 ou 1 qui conditionne les états de variables de sortie connectées en parallèle. Ces variables de sortie constituent le réseau combinatoire de sortie.Elles sont principalement des variables de type bobines pouvant être ouvertes ou fermées. L'unité centrale comprend un microprocesseur numérique standard 2 et un processeur spécifique ou coprocesseur 3 exécutant les traitements booléens, interprétant des données booléennes. A titre indicatif, le microprocesseur numérique 2 est un microprocesseur Motorola 68000. Le microprocesseur numérique 2 travaille sur une mémoire "programme et données" 4 (de type mémoire vive) et sur une mémoire commune 1 (de type mémoire vive) dans laquelle sont stockées les variables automate. On entend par variables automates, les variables d'entrée et de sortie et les variables internes nécessaires au traitement du programme d'automatisme. Chacune des variables d'entrée ou de sortie est représentée par un bit stocké dans un mot (c'est à dire un ensemble de bits) ou une table. Les variables internes sont représentées par des bits ou des mots internes. Le coprocesseur 2 travaille sur une mémoire de données 5 (de type mémoire "vive") et sur la mémoire commune 1 dans laquelle sont stockées les variables automate. La mémoire 5 est dite partagée car le microprocesseur numérique 2 peut aussi y avoir accès. Ces mémoires 5 et 1 travaillent par exemple sur des mots de 16 bits. Une première partie de la mémoire partagée 5 contient une structure de données booléennes qui sera définie plus loin et qui représente la partie ladder ou grafcet de l'application d'automatisme. Une seconde partie de la mémoire partagée 5, de taille fixée, permet au coprocesseur 3 et au microprocesseur numérique 2 de communiquer l'un avec l'autre. Le microprocesseur numérique 2 peut écrire des adresses en mémoire partagée 5 destinées au coprocesseur 3 pour que celui-ci les lise. Inversement le coprocesseur 3 peut écrire, en mémoire partagée 5, des adresses destinées au microprocesseur numérique 2 pour que celuici les lise. Le coprocesseur 3 adresse la mémoire partagée 5, via un bus d'adresses 61, lorsqu'il est autorisé à accéder à ladite mémoire, par l'intermédiaire d'un multiplexeur 10 contrôlé par le microprocesseur 2. Les échanges de données entre la mémoire partagée 5 et le coprocesseur 3 s'effectuent via un bus de données 71. Le coprocesseur 3 adresse la mémoire commune 1, via un bus d'adresses 62, lorsqu'il est autorisé à accéder à ladite mémoire, par l'intermédiaire d'un arbitre de bus 11. Les échanges de données entre le coprocesseur 3 et la mémoire commune 1 s'effectuent par un bus de données 72. Le microprocesseur numérique 2 adresse la mémoire partagée 5, au travers du multiplexeur 10, via un bus d'adresses 82. Les échanges de données entre le microprocesseur numérique 2 et la mémoire partagée 5 s'effectuent via un bus de données 92. Le microprocesseur numérique 2 adresse la mémoire "programme et données" 4 via un bus d'adresses 81. Les échanges de données entre le microprocesseur numérique 2 et la mémoire programme et données 4 s'effectuent via un bus de données 91. Le microprocesseur numérique 2 adresse la mémoire commune 1, via un bus d'adresses 83, lorsqu'il y est autorisé par l'arbitre de bus 11. Les échanges de données entre le microprocesseur numérique 2 et la mémoire commune 1 s'effectuent via un bus de données 93. Le réseau ladder ou grafcet correspondant à un programme d'automatisme particulier est écrit à l'aide d'un éditeur graphique disponible depuis un terminal ou exécuté par un micro-ordinateur. La figure 2 montre un exemple de réseau ladder écrit à t'aide de l'éditeur graphique mentionné cidessus. Le réseau combinatoire d'entrée comprend des variables d'entrée du type contacts A, B, C, D, E, F. Le réseau combinatoire de sortie comprend des variables de sortie G, H qui sont du type bobines et une variable de sortie I. Si le programme d'automatisme particulier est écrit en grafcet, les graphes grafcet sont traduits par un premier traducteur informatique grafcet/ladder qui génère un ensemble de réseaux ladder tel que celui de la figure 2 et représentant la description topologique des graphes. Les réseaux ladder, qu'ils soient écrits directement en ladder ou qu'ils résultent de la traduction de graphes grafcet, sont traduits par un second traducteur informatique Iadder/structures de données booléennes qui génère une structure de données booléennes particulière, stockée en mémoire partagée 5. Cette structure de données booléennes est un ensemble de données interprétables en ligne par le coprocesseur 3. Pour chaque expression combinatoire, le traducteur ladder/structure de données booléennes regroupe les variables d'entrée en couches et les variables de sortie en tranche. Si la structure de données ne comporte aucune couche, l'expression combinatoire est vraie et les sorties sont affectées. Toute variable d'entrée est booléenne de type contact, soit de type indexé soit de type non indexé. Toute booléenne variable d'entrée non indexée est définie par un bit appartenant à un mot stocké en mémoire commune 1. Toute variable booléenne d'entrée peut être complémentée ou pas. Si elle est complémentée, la valeur active est 0 et la valeur inactive est 1. Si elle est non complémentée, la valeur active est 1 et la valeur inactive est 0. Dans l'exemple des figures 2 et 3, les variables d'entrée A, B, D et F sont non complémentées, tandis que les variables d'entrée C et E sont complémentées. Chaque variable booléenne d'entrée indexée est contenue dans une table de bits rangés dans une suite de mots de la mémoire commune 1. Elle est définie par le premier bit de la table en mémoire commune 1 et par un index fixe ou variable de la variable dans la table, ce bit et cet index étant récupérables par un masque d'accès stocké en mémoire partagée 5. Pour chaque variable booléenne d'entrée, la mémoire partagée 5 contient des paramètres attachés à cette variable. Ces paramètres occupent trois mots de cette mémoire 5. Le premier mot mémoire contient un multiplet définissant l'adresse, en mémoire commune 1, du mot qui contient la valeur de la variable d'entrée, plus un bit pour indiquer si ce même mot contient aussi la valeur de la variable successeur de la variable courante dans la couche. Autrement dit ce bit indiquera si le successeur a la même adresse en mémoire commune 1 que la variable courante. Le second mot mémoire contient des multiplets définissant les positions de la variable dans le réseau combinatoire d'entrée (en fin d'une couche ou pas, avec ou sans variable de déroutage), les types de la variable d'entrée (variable booléenne indexée ou non indexée, variable de table de bits à index fixe ou variable, variable complémentée ou pas), le masque d'accès au bit contenant la valeur de la variable dans le mot stocké en mémoire commune 1. Ce masque d'accès permet de récupérer le bit de la variable d'entrée en mémoire des variables 1. Le troisième mot mémoire contient un multiplet définissant l'adresse éventuelle de la variable de déroutage de la variable courante, en mémoire partagée 5, plus un bit pour indiquer si ce même mot contient aussi la valeur de la variable de déroutage de la variable courante. Autrement dit ce bit indiquera si la variable de déroutage a la même adresse en mémoire commune 1 que la variable courante. Pour chaque variable booléenne d'entrée indexée, la mémoire partagée 5 contient des paramètres attachés à cette variable et qui occupent quatre mots mémoire. Ces quatre mots sont les trois mots décrits cidessus mais relatifs à la variable du premier bit de la table et non pas à la variable courante plus un quatrième mot qui contient soit un index fixe, soit l'adresse en mémoire commune 1 d'un index variable. La plupart des variables de sortie sont booléennes. Ce sont des bobines indexées ou non indexées. Une variable booléenne de sortie du type bobine est définie par un bit appartenant à un mot stocké en mémoire commune 1. En se référant aux figures 2 et 3, les variables G et H sont des variables de ce type. Une variable booléenne de sortie du type bobine peut être complémentée ou pas. Si elle est complémentée, la valeur active est 0, la valeur inactive est 1. Si elle est non complémentée, comme par exemple la variable G, la valeur active est 1, la valeur inactive est 0. Une variable de sortie de type bobine, complémentée ou non complémentée, est positionnée à sa valeur active si l'expression combinatoire logique du réseau d'entrée est vraie. Sinon elle est positionnée à sa valeur inactive. Une variable booléenne de sortie peut être du type bobine "reset" ou "set". Si elle est du type "reset", la valeur active est 0, la valeur inactive est 1. Si elle est du type "set", comme par exemple la variable R la valeur active est 1, la valeur inactive est 0. Une variable de sortie de type bobine "reset" ou "set" est positionnée à sa valeur active si l'expression combinatoire logique du réseau d'entrée est vraie. Au contraire si l'expression combinatoire logique est fausse, les bobines "reset" ou "set" conservent leur valeur initiale. Une variable booléenne de sortie indexée est contenue dans une table de bits rangés dans une suite de mots en mémoire commune 1. Elle est repérée par le masque d'accès au premier bit de la table en mémoire commune 1 et par un index fixe ou variable de la variable dans la table. Des variables de sortie peuvent être non booléennes. Une variable de sortie non booléenne du type "saut à une expression combinatoire" correspond à un saut à une expression combinatoire située en aval ou en amont de l'expression combinatoire courante. Le saut dans la structure de données n'est réalisé que si l'expression de logique combinatoire du réseau booléen d'entrée est vraie. La variable I des figures 2 et 3 est une variable de ce type. Une variable de sortie non booléenne du type "appel d'un sous-programme" correspond à un sousprogramme devant être exécuté par le microprocesseur numérique 2. Le coprocesseur 3 doit alors communiquer une adresse au microprocesseur numérique 2 via la mémoire partagée 5 afin que ledit microprocesseur numérique 2 exécute le programme correspondant en mémoire "programme et données" 4. L'adresse du sous-programme en mémoire "programme et données" 4 n'est placée dans la boîte aux lettres de la mémoire partagée 5 que si l'expression de logique combinatoire du réseau booléen d'entrée est vraie. Pour chaque variable booléenne de sortie, la mémoire partagée 5 contient des paramètres attachés à cette variable. Ces paramètres occupent deux mots mémoire de la mémoire 5. Le premier mot mémoire contient un multiplet relatif à l'adresse en mémoire commune 1 du mot qui contient la valeur de la variable ou l'adresse de saut à une expression combinatoire en mémoire partagée 5 ou l'adresse d'appel d'un sous-programme en mémoire programme et données 4, plus un bit indiquant si cette adresse est destinée à la mémoire commune 1 ou pas, plus un bit pour indiquer si ce même mot contient aussi la valeur de la variable successeur de la variable courante de la tranche. Autrement dit ce dernier bit indique si la variable successeur a la même adresse en mémoire commune 1 que la variable courante. Le second mot mémoire contient des multiplets définissant les positions de la variable dans le réseau booléen de sortie (en fin de tranche ou pas, en fin d'une structure de données ou pas), les types de la variable de sortie (variable booléenne classique ou pas, variable de table de bits à index fixe ou variable, variable complémentée ou pas, variable de "saut à une expression combinatoire", variable "d'appel de sousprogramme"), le masque d'accès au bit contenant la valeur de la variable dans le mot en mémoire commune 1. Ce masque d'accès permet de récupérer le bit de la variable de sortie en mémoire des variables 1. Pour chaque variable booléenne de sortie indexée, la mémoire partagée 5 contient des paramètres attachés à cette variable et qui occupent trois mots mémoire. Ces trois mots sont les deux mots décrits cidessus mais relatifs à la variable du premier bit de la table et non pas à la variable courante plus un troisième mot qui contient un index fixe ou l'adresse en mémoire commune 1 d'un index variable. Afin de définir les couches, l'expression combinatoire d'entrée est développée en respectant l'ordre dans lequel les variables d'entrée ont été saisies par l'utilisateur. On aboutit donc à une expression combinatoire développée constituant une suite de Ou logiques reliant des expressions en Et logiques. Dans la première étape, on constitue des ensembles regroupant les expressions Et logiques dont la première variable à gauche est commune. Dans l'étape suivante, pour chaque ensemble, on conserve la première expression Et logique. Dans toutes les autres expressions Et logique, on supprime la première variable commune à gauche. Dans ce nouvel ensemble ainsi modifié, on itère le processus sans prendre en compte la variable que l'on a déjà considérée et laissée ou supprimée. Par ensemble le processus est arrêté lorsqu'on ne trouve plus de première variable à gauche non traitée commune à plusieurs expressions Et logique ou que chaque ensemble n'est plus constitué que d'une seule expression Et logique. ll n'y a plus de simplification possible. Enfin les couches sont obtenues en éliminant les redondances. Parmi celles qui sont identiques, on conserve la dernière. Le nombre de couches de la structure de données booléennes est le nombre de Ou logiques plus 1. Ainsi si l'on considère l'exemple des figures 2 et 3, l'expression de logique combinatoire est: (A et ( non(C) ou D) et F) ou (B et non(E)). L'expression développée est : A et non (C) et F ou A et D et F ou B et non(E). Le tableau 1 cidessous résume le processus de création des couches dans le cas de l'exemple des figures 2 et 3. TABLEAU 1 Expressions Etape 1 Etape 2 Couches Et Logiques Ensembles Ensembles Ensembles Ensembles modifiés modifiés Expression Et Ensemble Ensemble modifié Ensemble Ensemble modifié logique n 1 Couche 1 Anon(C)F Anon(C)F Anon(C)F Anon(C)F Anon(C)F Anon(C)F Expression Et Ensemble Ensemble modifié Logique n 2 Couche 2 ADF ADF DF DF DF DF Expression Et Ensemble Ensemble modifié Ensemble Ensemble modifié Logique n0 3 Couche 3 Bnon(E) Hnon Bnon(E) ~ Bnon(E) ~ Bnon(E) Bnon(E) Dans cet exemple, le processus est arrêté à l'étape 2 car dans chaque ensemble de chemins n'est plus constitué que d'un seul chemin. La première couche comprend les variables A, C, F, la seconde couche comprend les variables D et F, la troisième couche comprend les variables B et E. La figure 3 montre la structure en couches. Le tableau 2 ci dessous schématise la structure de données stockée en mémoire partagée 5 qui correspond à l'exemple de la figure 3: TABLEAU 2 ADRESSES CONTENUS (Mémoire partagée 5) Adresse 1 Adresse 23 (adresse de début de La tranche 1 des variables de sortie) (couche 1 des variabLes dentrée) Adresses 2, 3 et 4 paramètres de la variable A Adresses 5, 6 et 7 paramètres de ta variable C Adresses 8, 9 et 10 paramètres de La variable F (couche 2 des variables dentrée) Adresses 11, 12 et 13 paramètres de la variable D Adresses 14, 15 et 16 paramètres de la variable F (couche 3 des variables dentrée) Adresses 17, 18 et 19 paramètres de la variable B Adresses 20, 21 et 22 paramètres de la variable E (tranche 1 des variables de sortie) Adresses 23 et 24 Adresses 25 et 26 paramètres de la variable G Adresses 27 et 28 paramètres de la variable H paramètres de La variable I Une tranche de variable de sortie contient au plus une variable de sortie de type "saut à une expression combinatoire" ou au plus une variable de sortie de type "appel d'un sous-programme" Les variables de sortie sont implantées dans la structure de données dans le même ordre que l'ordre d'apparition des variables de sortie dans le réseau combinatoire de sortie.Sur la figure 3, les variables G, H et I sont rassemblées en une seule tranche. lly a toujours une tranche unique. On appelle variable de déroutage d'une variable donnée, la variable qui sera évaluée si la variable considérée ne conduit pas c'est à dire si sa fonction de conduction est fausse. Pour une variable donnée appartenant à une couche, la variable de déroutage appartient à une autre couche en avaL Toute variable de couche possède aucune ou au plus une variable de déroutage. Ainsi sur la figure 3, la variable B est la variable de déroutage de la variable A ou de la variable F ou de la variable D. La variable D est la variable de déroutage de la variable C. La variable B n'a pas de variable de déroutage. L'adresse de déroutage de A est l'adresse en mémoire partagée 5 de B (en se référant au tableau 1 précédent le contenu de l'adresse 4 est l'adresse 17). L'adresse de déroutage de C est l'adresse en mémoire partagée 5 de B (le contenu de l'adresse 7 est l'adresse 11). L'adresse de déroutage de D est l'adresse en mémoire partagée 5 de B (contenu de l'adresse 13 = adresse 17). L'adresse de déroutage de F est l'adresse en mémoire partagée 5 de B (contenu de l'adresse 16 = adresse 17). Les adresses de déroutage de B et E n'existent pas et sont sans signification (contenus des adresses 19 et 22). On appelle variable successeur d'une variable de couche (respectivement tranche), la variable qui suit dans la même couche (respectivement tranche). Toute variable de couche (respectivement tranche) possède aucune ou au plus une variable successeur. Ainsi sur la figure 3, la variable d'entrée F est la variable successeur de la variable C, la variable E n'a pas de variable successeur. La variable de sortie I est le successeur de la variable H qui est le successeur de la variable G. L'adresse du successeur de la variable booléenne d'entrée ou de sortie courante en mémoire partagée 5 n'est pas mémorisée dans le coprocesseur 3 car les couches de variables d'entrée et la tranche des variables de sortie sont réalisées de telle manière que pour chaque variable l'adresse de sa variable successeur soit implicite dans la structure de données. Pour une variable d'entrée, l'adresse de la variable successeur est obtenue par incrémentation de l'adresse courante en mémoire partagée 5, lorsque ladite variable d'entrée conduit et qu'elle n'est pas la dernière de la couche.Pour une variable de sortie, l'adresse de la variable successeur est également obtenue par incrémentation de l'adresse courante en mémoire partagée 5, lorsque les fonctions condition d'affectation et affectation de ladite variable de sortie ont été calculées et que ladite variable de sortie n'est pas la dernière de la tranche. Le coprocesseur 3 exécute successivement: - l'évaluation des variables d'entrée du réseau combinatoire d'entrée (calcul de la fonction de conduction associée à une variable d'entrée booléenne) tant que le résultat de l'expression de logique combinatoire représentée par le réseau combinatoire d'entrée n'est pas connu; - l'affectation de toutes les variables de sortie (calculs des fonctions de condition d'affectation et d'affectation associées à chaque variable de sortie booléenne). En se référant à la figure 4, le coprocesseur 3 présente deux bus d'adresses 312 et 314 qui permettent respectivement d'adresser la mémoire partagée 5 et la mémoire commune 1 et deux bus de données 311 et 313 qui permettent de transmettre ou de récupérer des données en mémoire partagée 5 et en mémoire commune 1 respectivement. Le coprocesseur 3 comprend une partie opérative 3c qui contient l'ensemble des opérateurs aptes à réaliser les différents traitements: des blocs d'entrée/sortie 316, 318 qui assurent les liaisons entre les bus internes de données 311, 313 et les bus externes 71, 72; des blocs de sortie 315, 317 qui assurent les liaisons entre les bus d'adresses 312, 314 et les bus externes 61, 62; un bloc incrémenteur /registre d'adresses 32; un bloc d'évaluation-affectation 33; un bloc mémoire 37 de type RAM; un bloc registres de bits 38. ll comprend un bloc 3a de traitement des variables booléennes indexées qui comprend un bloc encodeur 34, un bloc additionneur-soustracteur 35, un bloc diviseur/décodeur 36.Il comprend par ailleurs une partie de contrôle 3b qui intègre l'algorithme d'exécution et qui constitue le séquenceur 39 des traitements de données (au sens large: adresses, données, bits) lues et/ou écrites en mémoire partagée 5 et/ou en mémoire commune 1. Le bloc incrémenteur/registre d'adresses 32 est relié en entrée et en sorties au bus d'adresses 312 qui transporte les adresses servant à adresser la mémoire partagée 5. Il permet de générer sur une sortie une adresse courante ou sur une seconde sortie une adresse courante incrémentée de 1. Ce bloc incrémenteur/registre d'adresses 32 est commandé par le séquenceur 39. Il est à la fois un compteur ordinal et un registre d'adresses des adresses de la mémoire partagée 5. Le bloc "évaluation/affectation" 33 est relié en entrée d'une part au bus de données 311 servant à échanger les données avec la mémoire partagée 5 et d'autre part au bus de données 313 servant à échanger les données avec la mémoire commune 1. Il est relié en sortie au bus de données 313 et est commandé par le séquenceur 39 à qui il donne des informations. Il sert à évaluer les variables d'entrée (calcul de la fonction de conduction) et à affecter les variables booléennes de sortie (calcul de la condition d'affectation et calcul de la fonction affectation). Le bloc 3a permet de traiter les variables booléennes d'entrée indexées. Une variable booléenne d'entrée indexée est affectée par le bloc évaluation / affectation 33 après avoir été traitée par le bloc 3a. Le bloc 3a est commandé par le séquenceur 39 et permet de calculer l'adresse en mémoire commune 1 et la position dans le mot à cette adresse d'une variable booléenne indexée. Ces calculs sont réalisés en fonction de l'adresse en mémoire commune 1 de la première variable indexée et en fonction de l'index fixe (dont la valeur est contenue dans un mot en mémoire partagée 5) ou de l'index variable (dont la valeur est contenue dans un mot en mémoire commune 1) de la variable indexée. Le bloc encodeur 34 est relié en entrée au bus de données 311 et en sortie à un bloc additionneur/soustracteur 35. Il est commandé par le séquenceur 39 et il code le masque d'accès à la première variable booléenne (bit de la table dont la valeur est contenue dans un mot en mémoire commune 1) en un index qui permet de repérer la position de cette première variable indexée dans le même mot. Le bloc additionneur/soustracteur 35 est relié, en entrée, aux bus de données 311 et 313, au bus d'adresses 314, au bloc encodeur 34 et, en sortie, au bus d'adresses 314 et au bloc diviseur/décodeur 36. Il est commandé par le séquenceur 39. Il permet soit d'additionner l'index de la première variable de la table avec l'index fixe ou variable de la variable que l'on veut évaluer dans la table soit de soustraire l'adresse en mémoire commune 1 de la première variable de la table avec le quotient issu du bloc diviseur/décodeur 36 via le bus de données 311. Le bloc diviseur/décodeur 36 est relié en entrée au bloc additionneur/soustracteur 35, en sortie au bus de données 311. Il est commandé par le séquenceur 39. I1 permet de réaliser une division euclidienne du résultat de l'addition issu du bloc additionneur/soustracteur 35. Il calcule le quotient et le reste décodé de la division euclidiennne. Une mémoire interne 37 du type RAM peut être adressée par le séquenceur 39. Elle peut échanger des données via les bus de données 311 et 313 ou des adresses via les bus d'adresses 312 et 314. Elle sert à stocker: - l'adresse de la boite aux lettres de communication entre le coprocesseur 3 et le microprocesseur 2 en mémoire partagée 5 ; - l'adresse de la tranche des variables de sortie qui vont être éventuellement affectées; - l'adresse en mémoire commune 1 de la variable d'entrée ou de sortie courante; - l'adresse de déroutage de la variable d'entrée courante. Le bloc des registres bits 38 est relié en entrée au bus de données 311. Ces registres stockent les bits internes de fonctionnement. Le séquenceur 39 intègre un algorithme de contrôle et il séquence les traitements des données (au sens large adresses, données, bits). Il commande tous les blocs de la partie opérative 3c et reçoit des signaux de "comptes rendus" de certains blocs de cette partie opérative. Il reçoit des signaux RUN du microprocesseur numérique 2 et lui envoie des signaux END. Le fonctionnement du coprocesseur va maintenant être expliqué: Le démarrage du coprocesseur 3 s'effectue sur ordre du microprocesseur principal 2. Le coprocesseur 3 lit alors à une adresse fixe de la mémoire partagée 5, l'adresse de début de la structure de données booléennes qu'il doit exécuter Tant que le résultat de l'expression combinatoire logique associée à un réseau de variables booléennes d'entrée n'est pas déterminé (vrai ou faux), le bloc évaluation/affectation 33 du coprocesseur 3 évalue les variables booléennes d'entrée issues des structures de données booléennes stockées en mémoire partagée 5. La première opération consiste à évaluer la première variable d'entrée. Dans le cas des figures 2 et 3 ce sera la variable d'entrée A. L'évaluation consiste à calculer la variable puis à déterminer si elle conduit ou non. Pour évaluer une variable d'entrée non indexée ( constituée par un bit précis rangé dans un mot précis), le séquenceur 39 génère trois adresses, via le bus d'adresses 61, en mémoire partagée 5 pour acquérir les paramètres attachés à ladite variable. Si la valeur de la variable n'est pas déjà stockée dans un registre interne du bloc fonctionnel évaluation/affectation 33 du coprocesseur 3, alors le séquenceur 39 génère éventuellement une adresse en mémoire commune 1 des variables automate, via le bus d'adresses 62, pour lire la valeur du mot contenant la valeur de la variable. Puis l'évaluation de la variable est réalisée par le bloc fonctionnevaffectation 33 du coprocesseur 3 en fonction des différents paramètres de la variable. La valeur de la variable d'entrée est calculée de la manière suivante. Le mot de la mémoire commune 1 contenant la valeur de ladite variable parmi un de ses bits, est récupéré et stocké dans un registre désigné ValeurVariable du bloc fonctionnel évaluation / affectation 33. Le masque d'accès contenu dans le second mot mémoire associé à la variable d'entrée, en mémoire partagée 5, permet de récupérer la valeur de ladite variable contenue dans ce mot de la mémoire commune 1. La valeur de cette variable d'entrée est obtenue en faisant le Ou logique des 16 Et logiques de chaque bit du masque d'accès de la variable et du bit de même poids du mot en mémoire commune 1 contenant la valeur de la variable. Ce calcul est effectué par une fonction logique dans le bloc fonctionnel 33. Prenons l'exemple d'un mot 100001 ...contenant une variable booléenne d'entrée et stocké en mémoire commune 1. Si, en mémoire partagée 5, le masque d'accès à la variable dans le mot est 000100 ..., le calcul de la valeur de la variable d'entrée donnera 0. La fonction de conduction du bloc évaluation / affectation 33 est vraie pour une variable booléenne d'entrée active, fausse si la variable est inactive. Dans le premier mot mémoire qui caractérise la variable d'entrée courante, en mémoire partagée 5, le bit indiquant si la variable successeur de la variable d'entrée courante est contenue dans le même mot en mémoire commune 1 est recopié dans un registre désigné Suivant du bloc fonctionnel Registres Bits 38. Par exemple, si on considère la variable d'entrée courante A, ce bit indiquera si la variable successeur C est contenue dans le même mot que A en mémoire commune 1. Si la variable d'entrée courante conduit (fonction de conduction vraie) et si elle n'est pas la dernière de la couche (test du bit de position fin de couche à faux), le coprocesseur évalue la variable successeur de la variable courante dans la couche. Le séquenceur 39 recopie le bit stocké dans le registre désigné Suivant (information de l'adresse successeur par rapport à l'adresse courante) dans un autre registre désigné Précédent du bloc fonctionnel Registres Bits 38. On récupère ensuite les informations relatives à la nouvelle variable courante (C dans l'exemple), c'est à dire les trois mots mémoires en mémoire partagée 5 y compris, dans le premier mot mémoire d'adresse de la nouvelle variable courante en mémoire commune 1, le bit qui permet de savoir si la variable successeur (F dans l'exemple) a la même adresse en mémoire commune que la nouvelle variable courante. Ce bit est stocké dans le registre désigné Suivant. Ainsi, avant de générer l'adresse de C en mémoire commune 1, le séquenceur 39 teste la valeur du registre appelé Précédent qui indique si la variable successeur a la même adresse en mémoire commune 1 que la variable précédemment évaluée A. On économise la génération de cette adresse en mémoire commune 1 puisque c'est la même adresse que celle de la variable courante. On s'affranchit de la récupération, de la lecture du mot contenant la valeur de variable courante et la valeur de la variable successeur, puisque l'ensemble de ce mot avait été stocké dans un registre ValeurVariable du bloc fonctionnel évaluation / affectation 33 lors de l'évaluation de la variable courante. Si la variable d'entrée courante ne conduit pas (fonction de conduction fausse) et si elle possède une variable de déroutage (test du bit de position fin d'expression combinatoire à faux), le coprocesseur évalue la variable de déroutage. Le séquenceur recopie le bit stocké dans le registre appelé Suivant Déroutage (information de l'adresse de la variable de déroutage par rapport à l'adresse de la variable courante) dans un autre registre appelé Précédent du bloc fonctionnel Registres Bits 38, puis les informations relatives à la variable de déroutage. Les trois mots mémoires sont récupérés en mémoire partagée 5 y compris dans le premier mot mémoire d'adresse de la variable de déroutage en mémoire commune 1, le bit qui permet de savoir si la variable de déroutage a la même adresse en mémoire commune 1. Ce bit est stocké dans le registre appelé Suivant. Si l'évaluation de la dernière des variables d'entrée est un succès, l'expression combinatoire est vraie et les sorties sont affectées en conséquence. Dans l'exemple des figures 2 et 3, les bobines de sortie G, H et la variable de sortie I doivent être affectées à leur valeur active. Si l'évaluation de la dernière des variables d'entrée est un échec, l'expression combinatoire est fausse et les sorties sont affectées en conséquence. Dans l'exemple des figures 2 et 3, les bobines de sortie G, H et la variable de sortie I doivent être affectées à leur valeur inactive. Par exemple, en se référant à la figure 3, si les fonctions de conduction successives des variables A, C et F de la première couche sont toutes vraies, l'expression combinatoire est vraie. L'évaluation est un succès. Grâce à la notion de successeur implicite en structure de données en mémoire partagée 5, le résultat de l'expression combinatoire est connu. Il n'y aura pas d'évaluations inutiles de B, D et E. Toujours en se référant à la figure 3 et à titre d'exemple, si les fonctions de conduction respectives de A, C, F, B et E sont vraie, vraie, fausse, vraie et fausse respectivement, alors l'expression combinatoire est fausse. L'évaluation est un échec. Comme la fonction de conduction de C était vraie, on n'a pas été dérouté vers D, et comme la fonction de conduction de F était fausse, on a été dérouté vers B. Grâce à la notion de déroutage implantée en structure de données en mémoire partagée 5, il n'y a pas d'évaluation inutile de D. A présent, l'affectation des variables de sortie, les calculs des fonctions de condition d'affectation et d'affectation, s'effectuent en fonction de ce paramètre Echec et des paramètres de chaque variable stockés dans le bloc fonctionnel évaluation / affectation 33. La fonction condition d'affectation a pour but d'indiquer si l'on doit affecter la variable de sortie, courante telle que G. Elle permet de savoir en fonction de la valeur de ladite variable, du succès ou de l'échec de l'évaluation du réseau combinatoire d'entrée, du type de la variable (complémentée ou pas), du type "reset","set", si l'on affecte ou pas ladite variable de sortie. La fonction d'affectation d'une variable booléenne de sortie est fonction de tous les paramètres cités ci-dessus plus de la condition d'affectation. Cette fonction permet de calculer le nouveau mot complet stocké dans le bloc fonctionnel évaluation / affectation 33, et de l'écrire éventuellement en mémoire commune 1, lorsque la valeur de la variable booléenne de sortie courante contenue à un emplacement dans ce mot nécessite d'être modifiée. Pour affecter une variable de sortie booléenne (constituée par un bit précis dans un mot précis), le séquenceur 39 génère, via le bus d'adresses 61, deux adresses en mémoire partagée 5 pour acquérir les paramètres de ladite variable. Si la valeur de variable n'est pas déjà stockée dans un registre interne du bloc fonctionnel évaluation /affectation 33 du coprocesseur 3, le séquenceur génère éventuellement une adresse en mémoire commune 1 des variables automate pour lire la valeur du mot contenant la valeur de la variable, via le bus d'adresses 62. Puis l'affectation de la variable de sortie qui inclut le calcul de la valeur de cette variable est réalisée par le bloc fonctionnel évaluation/affectation 33 du coprocesseur en fonction des différents paramètres de ladite variable et en fonction de la valeur de la fonction logique du réseau des variables d'entrée. Le séquenceur génère enfin via le bus d'adresses 62, une adresse en mémoire commune 1 pour écrire la nouvelle valeur de la variable de sotie, si la valeur de la variable nécessite de changer d'état et si ladite variable de sortie suivante n'est pas contenue dans le même mot. La valeur d'une variable booléenne de sortie est obtenue en faisant le Ou logique des 16 Et logiques, de chaque bit du masque d'accès de la variable et du bit de même poids du mot en mémoire commune 1 contenant la valeur de la variable. Ce calcul est effectué par une fonction logique dans le bloc fonctionnel 33. Prenons l'exemple d'un mot 100101 ...contenant une variable booléenne de sortie et stocké en mémoire commune 1. Si, en mémoire partagée 5, le masque d'accès à la variable dans le mot est 000100 ..., le calcul de la valeur de la variable de sortie donnera 1. Tant que les calculs des fonctions de condition d'affectation et d'affectation successives portent sur des variables booléennes de sortie contenues dans le même mot, le mot éventuellement modifié est stocké dans le bloc fonctionnel évaluation / affectation 33. L'écriture en mémoire commune 1 du nouveau mot ne s'effectue pas, elle est simplement réalisée chaque fois que la variable de sortie successeur de la variable booléenne de sortie courante n'est pas contenue dans ce même mot (test du registre Suivant à faux). De plus elle est réalisée s'il y a eu au moins une modification d'un bit du mot (test d'un registre interne du bloc Registres Bits 38 désigné Au Moins Une Affectation). Si l'évaluation des variables d'entrée est un succès et si la variable booléenne de sortie est complémentée, la fonction condition d'affectation est vraie et la fonction d'affectation génère le mot :100001 à àécrire en mémoire commune 1 si la variable successeur n'est pas contenue dans ce mot. Par contre si la variable successeur est contenue dans ce mot, on calcule la fonction d'affectation avec ce nouveau mot en fonction des paramètres associés à la variable successeur en différant l'écriture en mémoire commune 1 jusqu'au moment où la variable successeur n'est plus contenue dans ce même mot et s'il y a eu une modification portant sur au moins un bit du mot. Si l'évaluation des variables d'entrée est un échec et si la variable booléenne de sortie est complémentée, la fonction condition d'affectation est fausse et la fonction d'affectation génère le mot :100101 ... qu'il est inutile d'écrire en mémoire commune 1 puisque la variable a déjà la valeur souhaitée. Si la variable successeur est contenue dans ce mot, on calcule la fonction d'affectation avec ce même mot en fonction des paramètres associés à la variable successeur en différant l'écriture en mémoire commune 1 jusqu'au moment où la variable successeur n'est plus contenue dans ce même mot et s'il y a eu une modification portant sur au moins un bit du mot. Si l'évaluation des variables d'entrée est un succès et si la variable booléenne de sortie est non complémentée, la fonction condition d'affectation est fausse et la fonction d'affectation génère le mot :100101 ... qu'il est inutile d'écrire en mémoire commune 1 puisque la variable a déjà la valeur souhaitée. Si l'évaluation des variables d'entrée est un échec et si la variable booléenne de sortie est non complémentée, la fonction condition d'affectation est vraie et la fonction d'affectation génère le mot :100001 à àécrire en mémoire commune 1 si la variable successeur n'est pas contenue dans ce mot. Si l'évaluation des variables d'entrée est un succès et si la variable booléenne de sortie est du type "reset", la fonction condition d'affectation est vraie et la fonction d'affectation génère le mot :100001 ... à écrire en mémoire commune 1 si la variable successeur n'est pas contenue dans ce mot. Si l'évaluation des variables d'entrée est un échec et si la variable booléenne de sortie est du type "reset", la fonction condition d'affectation est fausse et la fonction d'affectation génère le mot :100101 ... qu'il est inutile d'écrire en mémoire commune 1 puisque la variable a déjà la valeur souhaitée. En cas d'échec pour une variable de type "reset" "set", il y a conservation de la valeur initiale. Si l'évaluation des variables d'entrée est un succès et si la variable booléenne de sortie est du type "set", la fonction condition d'affectation est fausse et la fonction d'affectation génère le mot :100101 ... qu'il est inutile d'écrire en mémoire commune 1 puisque la variable a déjà la valeur souhaitée. Si l'évaluation des variables d'entrée est un échec et si la variable booléenne de sortie est du type "set", la fonction condition d'affectation est fausse et la fonction d'affectation génère le mot :100101 .. qu'il est inutile d'écrire en mémoire commune 1 puisque la variable a déjà la valeur souhaitée. En cas d'échec pour une variable de type "reset" "set", il y a conservation de la valeur initiale. Le coprocesseur 3 interprète et traite les données booléennes jusqu'à la dernière variable de sortie d'une structure booléenne (au niveau d'une variable de sortie, test du bit fin d'une structure) et indique au microprocesseur principal 2 qu'il a terminé. ll se positionne en état d'attente d'un ordre de reprise d'exécution lorsqu'il a détecté et transmis dans la structure de données booléennes l'adresse d'un sous-programme exécutable par le microprocesseur principal 2 en mémoire programme 4. Les structures de données statiques booléennes et grafcet en mémoire partagée 5 sont distinctes. La structure de données grafcet est calquée sur la structure de données booléennes, afin de pouvoir être interprétée et traitée par l'algorithme booléen. Par conséquent, l'algorithme de traitement orienté booléen traite les structures de données booléennes qu'elles soient issues directement d'une description en langage à relais, ou qu'elles soient obtenues à partir de grafcet retraduit en langage à relais. On notera que les blocs fonctionnels (compteurs, temporisateurs, ..) restent du domaine du microprocesseur numérique 2. Ils conservent donc leur programme associé qui est stocké en mémoire "programme et données" 4 et est exécuté par le microprocesseur numérique 2. REVENDICATIONS 1. Procédé de traitement de données booléennes dans une unité centrale d'automate programmable, consistant à stocker, dans une mémoire (1), des variables d'entrée présentant un état actif et un état inactif et représentatives des états d'entrée de l'automate et des variables de sortie présentant un état actif et un état inactif et représentatives des états de sortie de l'automate et à stocker, dans une mémoire de données (5), des données correspondant à un programme d'automatisme écrit soit en grafcet soit en réseau relais ou ladder constitué d'une expression combinatoire d'entrée représentant une fonction de logique combinatoire des variables d'entrée, vraie ou fausse, conditionnant respectivement le positionnement actif ou inactif des variables combinatoires de sortie qui forment l'expression combinatoire de sortie, caractérisé par le fait qu'il consiste:: - à stocker dans la mémoire de données (5), dans une pluralité de mots, des paramètres attachés à chaque variable d'entrée, en ordonnant ces variables et, dans une pluralité de mots, des paramètres attachés à chaque variable de sortie, en ordonnant ces variables; - a évaluer successivement chacune des variables d'entrée stockées dans la mémoire des variables (1), de manière que si ladite variable conduit, c'est à dire si elle est active, l'évaluation suivante porte sur la variable successeur dans l'expression combinatoire d'entrée et que si ladite variable ne conduit pas, l'évaluation porte sur la variable de déroutage dans l'expression combinatoire d'entrée, et cela tant que le résultat de l'expression combinatoire d'entrée n'est pas déterminé;; - à affecter successivement chacune des variables de sortie stockées dans la mémoire des variables (1), dès que le résultat, vrai ou faux, de l'expression combinatoire d'entrée du réseau relais est déterminé, de manière que si le résultat est vrai, la variable de sortie soit positionnée à sa valeur active, l'affectation suivante portant sur la variable successeur de ladite variable dans l'expression combinatoire de sortie et que si le résultat est faux, la variable de sortie soit généralement positionnée à sa valeur inactive, l'affectation suivante portant sur la variable successeur de ladite variable dans l'expression combinatoire de sortie. 2. Procédé selon la revendication 1, caractérisé par le fait qu'il consiste à mémoriser en mémoire de données (5), dans les mots attachés à chaque variable d'entrée, un multiplet étant l'adresse du mot contenant la valeur de la dite variable en mémoire des variables (1), un multiplet définissant des paramètres et un masque d'accès à la valeur de ladite variable en mémoire des variables (1), à calculer, par une fonction logique, la conduction ou non-conduction de ladite variable, en utilisant les paramètres, le masque d'accès et le mot contenant la valeur de ladite variable d'entrée. 3. Procédé selon l'une quelconque des revendications précédentes, caractérisé par le fait qu'il consiste à mémoriser en mémoire de données (5), dans les mots attachés à chaque variable d'entrée, un bit indiquant si la valeur de la variable successeur est contenue dans le même mot en mémoire des variables (1) que la valeur de la dite variable d'entrée, pour dans le cas où la dite variable d'entrée conduit, éviter la relecture de ce mot en mémoire des variables (1). 4. Procédé selon l'une quelconque des revendications précédentes, caractérisé par le fait qu'il consiste à mémoriser en mémoire de données (5), dans les mots attachés à chaque variable d'entrée, un multiplet donnant l'adresse en mémoire des données (5) des mots attachés à une variable de déroutage de la dite variable. 5. Procédé selon l'une quelconque des revendications précédentes, caractérisé par le fait qu'il consiste à mémoriser en mémoire des données (5), dans les mots attachés à chaque variable d'entrée, un bit indiquant si la valeur de la variable de déroutage est contenue dans le même mot en mémoire des variables (1) que la valeur de la dite variable d'entrée, pour dans le cas où la dite variable d'entrée ne conduit pas, éviter la relecture de ce mot en mémoire des variables (1). 6. Procédé selon l'une quelconque des revendications précédentes, caractérisé par le fait qu'il consiste à mémoriser, en mémoire des données (5), dans les mots attachés à chaque variable de sortie, un multiplet étant l'adresse du mot contenant la valeur de ladite variable en mémoire des variables (1), un multiplet définissant des paramètres et un masque d'accès à la valeur de ladite variable en mémoire des variables (1), à calculer par une fonction logique, la condition d'affectation vraie ou fausse et l'affectation de ladite variable, en utilisant les paramètres, le masque d'accès et le mot contenant la valeur de ladite variable de sortie ainsi que la valeur vraie ou fausse de l'expression combinatoire d'entrée. 7. Procédé selon l'une quelconque des revendications précédentes, caractérisé par le fait qu'il consiste à mémoriser, en mémoire des données (5), dans les mots attachés à chaque variable de sortie, un bit indiquant si la valeur de la variable successeur est contenue dans le même mot en mémoire des variables (1) que la valeur de ladite variable de sortie pour éviter la relecture de ce mot en mémoire des variables (1). 8. Procédé selon l'une quelconque des revendications précédentes, caractérisé par le fait qu'il consiste, dans le cadre de l'affectation des variables de sortie, à mémoriser en interne dans le coprocesseur dans les registres bits (38), un bit indiquant si au moins une des valeurs de variables de sortie (donc au moins un des bits) a été modifiée en interne dans le coprocesseur pour éviter, dans le cas où aucune des valeurs n'a été modifiée, d'écrire le mot en mémoire des variables (1). 9. Unité centrale d'automate programmable assurant le traitement de données booléennes et comprenant un coprocesseur (3) travaillant sur une mémoire (1) des variables stockant les variables d'entrée et de sortie représentatives des états d'entrée et des états de sortie de l'automate et une mémoire de données (5) stockant des données correspondant à un programme d'automatisme écrit en ladder ou grafcet, le coprocesseur (3) comprenant une partie de contrôle ou de séquencement (3b) assurant le séquencement et le contrôle des traitements de données et une partie opérative de traitement (3c) assurant le traitement des données, caractérisée par le fait que le coprocesseur (3) comporte deux bus d'adresses (312,314) pour adresser la mémoire de données (5) et la mémoire des variables (1), et deux bus de données (311, 313) pour transporter des données vers ou de la mémoire de données (5) ou la mémoire des variables (1) , la partie opérative (3c) comprenant des moyens (33) comprenant des blocs logiques, reliés en entrée aux bus de données (311,313) et en sortie avec le bus de données (313) de la mémoire des variables (1) pour évaluer les variables booléennes d'entrée et pour affecter les variables booléennes de sortie. 10. Unité de traitement selon la revendication 9, caractérisée par le fait que la partie opérative (3c) comprend des blocs d'entrée /sortie (316,318) qui assurent les liaisons entre les bus de données (311,313) du coprocesseur et les mémoires (5,1) et des blocs de sortie (315,317) qui assurent les liaisons entre les bus d'adresses (312,314) et les mémoires (5,1). 11. Unité de traitement selon l'une quelconque des revendications 9 et 10, caractérisée par le fait qu'elle comporte des moyens (32) comprenant des blocs logiques, reliés en entrée et sorties au bus d'adresses (312) de la mémoire de données (5) et capable sur commande du séquenceur (39) de générer une adresse incrémentée dans ladite mémoire de données (5). 12. Unité de traitement selon l'une quelconque des revendications 9 à 11, caractérisée par le fait que le coprocesseur (3) comprend une mémoire interne (37). 13. Unité de traitement selon l'une quelconque des revendications 9 à 12, caractérisée par le fait que le coprocesseur comporte un registre bits (38). 14. Unité de traitement selon l'une quelconque des revendications 9 à 13, caractérisée par le fait qu'elle comporte des moyens (3a) de traitement des variables indexées comprenant un encodeur (34), un additionneur-soustracteur (35) et un diviseur-décodeur (36).