FR 2945170 A1 20101105 FR 0952861 A 20090430 Procédé pour émettre des messages périodiques. L'invention concerne un procédé pour émettre des messages périodiques sur un réseau, particulièrement sur un réseau exploitant un bus de communication série, employé pour faire communiquer différents calculateurs qui contrôlent et commandent les organes d'un véhicule, notamment d'un véhicule automobile. Le procédé utilise des fenêtres temporelles de longueur constante qui permettent à un calculateur relié au réseau d'émettre des messages périodiques et non périodiques en répartissant les messages à émettre dans les fenêtres. On connaît déjà des procédés de ce type tels que, par exemple, celui décrit dans le document EP1461910B1. Dans ce document de l'état de la technique, les fenêtres sont distribuées entre les calculateurs de façon à attribuer spécifiquement certaines fenêtres à un calculateur. Cette approche pose des problèmes lorsque la charge d'un calculateur augmente en émission ou lorsqu'il est nécessaire de modifier le nombre de calculateurs. La possibilité laissée à chaque calculateur de gérer de manière autonome les fenêtres temporelles, permet une plus grande souplesse. Cependant d'autres problèmes apparaissent alors, notamment le problème de la collision entre des messages qui sont émis indépendamment par différents calculateurs. Pour répondre aux problèmes que pose l'état antérieur de la technique, l'invention a pour objet un procédé pour émettre depuis un calculateur, des messages à chacun desquels est associé une période d'émission, en répartissant les messages dans des fenêtres temporelles à périodicité prédéterminée de telle sorte que chaque période d'émission est exprimable par un multiple entier de ladite périodicité. Dans le procédé, les messages sont placés dans des fenêtres qui sont sélectionnées avec des décalages par rapport à une fenêtre initiale de façon à éviter ou à diminuer des collisions avec des messages émis par un autre calculateur ou avec des messages présents sur le réseau. Ce procédé permet aussi de diminuer les collisions 5 avec les autres messages présents sur le réseau. Particulièrement, pour sélectionner chaque fenêtre, le procédé comprend : - une première étape à partir de laquelle pour un message courant sélectionné parmi lesdits messages, on 10 teste des fenêtres temporelles successives en nombre inférieur d'une unité au multiple entier qui exprime la période d'émission associée au message courant, en calculant pour chaque fenêtre testée au moins la quantité de bits qui est contenue dans la fenêtre testée et dans 15 une fenêtre qui succède à la fenêtre testée après une période d'émission lorsque le message courant est placé dans ladite fenêtre testée ; et - une deuxième étape dans laquelle la fenêtre sélectionnée pour placer le message, est celle pour 20 laquelle au moins la quantité de bits calculée est minimale. Plus particulièrement : - dans la première étape, on calcule pour chaque fenêtre testée, une priorité moyenne des messages 25 contenus dans la fenêtre testée et dans la fenêtre qui succède à la fenêtre testée après une période d'émission lorsque le message courant est placé dans ladite fenêtre testée ; et - dans la deuxième étape, parmi deux fenêtres 30 testées pour lesquelles la quantité de bits calculée est minimale, la fenêtre sélectionnée est celle pour laquelle la priorité moyenne est la plus faible. Plus particulièrement encore dans la deuxième étape, parmi deux fenêtres testées pour lesquelles la 35 quantité de bits calculée est minimale et la priorité moyenne est de niveau identique, la fenêtre sélectionnée est celle précédemment testée. Avantageusement, le procédé comprend une étape initiale exécutée préalablement aux autres étapes et dans laquelle les messages à émettre sont classés par ordre de périodes d'émission croissantes et les messages auxquels sont associés des périodes d'émission identiques, sont classés par ordre de priorités décroissantes. De préférence, le message courant sélectionné pour une première exécution de la première étape, est le message auquel la période d'émission associée est la plus faible et parmi les messages de période d'émission la plus faible, le message de priorité la plus élevée. Plus précisément pour exécuter la première étape et la deuxième étape, les messages à émettre sont sélectionnés par ordre de périodes d'émission croissantes et pour des périodes d'émission identiques, par ordre de priorités décroissantes. Particulièrement, le procédé comprend une troisième étape qui est exécutée après avoir sélectionné la fenêtre temporelle qui convient pour le message courant, de façon à trouver une position de fenêtre temporelle qui débute une suite de longueur maximale de fenêtres temporelles vides successives. Plus particulièrement, après exécution de la troisième étape, la fenêtre testée est positionnée au milieu de ladite suite et la longueur de ladite suite est réduite de moitié. Parmi d'autres caractéristiques intéressantes pour mettre en oeuvre l'invention, on remarque : une quatrième étape dans laquelle on observe 30 s'il existe encore un message à traiter ; une cinquième étape exécutée s'il existe encore un message à traiter, en prenant le message observé comme nouveau message courant, de façon à ré exécuter la première étape pour le nouveau message courant lorsque la 35 quantité de bits qui est contenue dans la fenêtre testée et dans la fenêtre qui succède à la fenêtre testée après une période d'émission, est nulle ou lorsque la valeur ordinale de la fenêtre testée est égale à la position de fenêtre temporelle qui débute une suite de longueur maximale de fenêtres temporelles vides successives ; une sixième étape exécutée après la cinquième étape lorsque la quantité de bits qui est contenue dans la fenêtre testée et dans la fenêtre qui succède à la fenêtre testée après une période d'émission, n'est pas nulle et lorsque la valeur ordinale de la fenêtre testée n'est pas égale à la position de fenêtre temporelle qui débute une suite de longueur maximale de fenêtres temporelles vides successives, de façon à ré exécuter la cinquième étape après avoir positionné la fenêtre testée au milieu de la suite réduite de longueur maximale de fenêtres temporelles vides successives et avoir réduit à nouveau de moitié ladite suite réduite. Dans une version préférée de mise en oeuvre du procédé, la valeur ordinale de la fenêtre testée est remise à zéro lorsque ladite valeur ordinale atteint ledit nombre inférieur d'une unité au multiple entier qui exprime la période d'émission associée au message courant. L'invention a aussi pour objet un produit programme d'ordinateur chargeable directement dans la mémoire interne d'un calculateur numérique, comprenant des portions de code logiciel pour l'exécution des étapes du procédé selon l'invention lorsque ledit programme est exécuté sur un calculateur. Il est possible d'embarquer le procédé dans un calculateur. On peut aussi utiliser uniquement la synthèse des résultats c'est-à-dire utiliser les offsets ou les déphasages fournis par le procédé. Les résultats sont générés par une station de travail de type PC et paramétrés dans un calculateur. L'invention a encore pour objet un calculateur 35 agencé pour émettre des messages à chacun desquels est associée une période d'émission, comprenant en mémoire : - une première variable pour indiquer une périodicité de fenêtres temporelles prédéterminée de telle sorte que chaque période d'émission est exprimable par un multiple entier de ladite périodicité ; - une table associative dans laquelle les messages sont associés chacun à un décalage de fenêtre par rapport à une fenêtre initiale de décalage nul de façon à éviter ou à diminuer des collisions avec des messages émis par un autre calculateur ou avec des messages présents sur le réseau. Particulièrement, les décalages associés aux messages conduisent à une répartition des messages dans les fenêtres temporelles qui génère une charge minimale d'occupation des fenêtres par les messages. Avantageusement, les messages sont classés dans la table associative par ordre de périodes d'émission croissantes et les messages auxquels est associée une même période d'émission, sont classés par ordre de priorités décroissantes. D'autres caractéristiques et avantages de l'invention ressortiront clairement de la description qui en est faite ci-dessous, à titre indicatif et nullement limitatif, en référence aux figures annexées, parmi lesquelles : - la figure 1 montre un exemple de tableau qui répertorie les messages à émettre par un calculateur ; - la figure 2 montre un autre exemple de tableau qui répertorie les messages à émettre par un calculateur ; - la figure 3 montre un séquencement temporel d'émission de messages ; - la figure 4 montre une étape de procédé conforme à l'invention en phase d'initialisation ; - les figures 5 et 6 montrent comment le tableau de la figure 2 est traité en phase d'initialisation ; - les figures 7 à 9 montrent des étapes de procédé conforme à l'invention après la phase d'initialisation ; - Les figures 10 et 11 présentent les tableaux respectivement des figures 1 et 2 après traitement par le procédé décrit ; - les figures 12 et 13 présentent des tableaux qui 5 mesurent l'efficacité de la répartition des messages en émission. Dans la présente description, on nomme tick une fenêtre temporelle de longueur constante qui se répète dans le temps avec une périodicité égale à sa longueur 10 pour permettre à un calculateur d'émettre un ou plusieurs messages. Chaque calculateur sur le réseau gère son propre tick en émission, et ceci de façon totalement asynchrone avec la gestion par les autres calculateurs de leurs propres ticks. 15 Chaque calculateur comprend dans sa mémoire (non représentée) une table associative qui répertorie les messages à émettre cycliquement avec une période fixée, exprimée par exemple en millisecondes au moyen d'une variable V9 associée à chaque message. 20 A titre illustratif, on considère des messages formatés pour être émis sur un réseau de type CAN (Controller Area Network) particulièrement utilisé pour faire communiquer les différents organes d'un véhicule, notamment d'un véhicule automobile. 25 Un message pour ce type de réseau, comprend de manière connue, un champ identificateur qui permet de distinguer un message d'un autre. La valeur de l'identificateur donne la priorité du message sur le réseau. Plus sa valeur est faible, plus sa priorité est 30 élevée. Chaque calculateur émet ses messages par ordre de priorité décroissante. En cas de conflit résultant d'une émission simultanée par plusieurs calculateurs, une phase d'arbitrage donne la main au calculateur qui émet un message avec la priorité la plus élevée, c'est-à-dire 35 avec un identificateur de valeur la plus faible. Le message avec une priorité moins élevée est retardé par rapport à sa demande d'émission de façon à être émis à la suite du message de priorité plus élevée. Chaque message comprend un champ de données utiles qui sert à transmettre des informations. Ce champ est 5 constitué de zéro à huit octets. La figure 1 montre un exemple de telle table associative où tous les messages sont à émettre avec une même période de 25 ms. Chaque ligne de la table 23 est attribuée à un message avec un numéro d'ordre qui, 10 conformément à un usage fréquent en automatisme, débute à zéro. La première colonne de la table 23 comprend les identificateurs des messages codés par exemple en hexadécimal. L'identificateur de valeur OxA sur la 15 première ligne indique par exemple un message de priorité moins élevée que le message auquel est attribuée la deuxième ligne et qui comprend un identificateur de valeur 0x9. La deuxième colonne de la table 23 comprend la 20 longueur du champ de données utiles de chaque message associée à son identificateur. Dans l'exemple de mise en oeuvre décrit, la longueur est exprimée en octets au moyen d'une variable V10. On rappelle qu'un octet correspond à huit bits. On observe par exemple dans la table 23 que 25 les variables V10 associées aux identificateurs 0x4 et 0x0 valent 8. Ces identificateurs désignent des messages comprenant des champs de données utiles de huit octets. La variable V10 associée à l'identificateur 0x3 vaut 2 et la variable V10 associée à l'identificateur 0x2 vaut 1. 30 Ces identificateurs désignent respectivement un message comprenant un champ de données utiles de deux octets et un message comprenant un champ de données utiles de un octet. Chaque case de la troisième colonne de la table 23 35 contient une valeur de la variable V9 qui est associée à l'identificateur de la première colonne sur la même ligne pour indiquer la période à laquelle le message identifié doit être émis. Ici, les dix messages répertoriés doivent être émis avec une période de 25 ms. La figure 2 montre un exemple de table associative où les messages sont à émettre avec des périodes différentes. Comme pour la table 23, chaque ligne de la table 24 est attribuée à un message contenant son identificateur en première colonne, sa longueur en deuxième colonne et sa période en troisième colonne. On observe que les messages identifiés OxA, 0x9 et 0x8 ont une période de 10 ms et que les messages identifiés 0x4 et 0x6 ont une période de 25 ms, indiquées par la variable V10. La figure 3 permet d'expliquer comment un calculateur gère ses ticks, ou plus généralement ses fenêtres temporelles dans le cadre de l'invention. L'axe horizontal représente le temps t. Chaque trait mixte vertical représente le début d'un tick. L'intervalle entre deux traits verticaux représente à la fois la longueur temporelle et la périodicité de renouvellement des ticks. On comprend que si les ticks sont grandement occupés par des émissions de messages, le risque de conflit avec des messages d'un autre calculateur est élevé. Le calculateur cherche à émettre les messages qu'il a à émettre à un moment considéré, en début de tick de façon à pouvoir espérer avoir émis les messages avant la fin du tick en cas d'arbitrage à cause d'émission simultanée de messages d'autres calculateurs. A partir d'un instant to défini par le premier trait vertical, le calculateur émet un message 1. Dans le cas illustré par la figure 3, la période d'émission du message 1 est égale au double de la périodicité des ticks. Le message 1 est réémis à partir du troisième trait vertical puis du cinquième trait vertical et ainsi de suite. Le calculateur émet un message 2 avec un décalage Dl par rapport à t0. Le décalage Dl, exprimé en nombre de ticks, est ici de un tick. Le message 2 est émis à partir du deuxième trait vertical. Dans le cas illustré par la figure 3, la période d'émission du message 2 est égale au double de la périodicité des ticks. Le message 2 est réémis à partir du quatrième trait vertical et ainsi de suite. Le calculateur émet un message 3 avec un décalage D2 par rapport à to. Le décalage D2, exprimé en nombre de ticks, est ici de deux ticks. Le message 3 est émis à partir du troisième trait vertical, à la suite du message 1 qui est plus prioritaire. Dans le cas illustré par la figure 3, la période d'émission du message 3 est égale au double de la périodicité des ticks. Le message 3 est réémis à partir du cinquième trait vertical et ainsi de suite. Si les trois messages avaient été émis dans le même tick, leur temps d'émission aurait favorisé le risque de collision avec des émissions d'autres calculateurs. De plus, une phase d'arbitrage en cas de collision, aurait affecté les trois messages. On remarque sur la figure 3 que l'on peut respecter la période d'émission des message en les émettant dans des ticks différents. L'intérêt est que la faible occupation de chaque tick réduit le risque de collision et que, en cas de collision, la totalité des messages n'est pas affectée. La périodicité des ticks doit être un diviseur entier de chaque période de message de façon à respecter la période de chaque message en nombre de ticks. Par exemple une périodicité de ticks de 5 ms convient lorsque les messages ont des périodes de 10 ms et de 25 ms. Nous avons considéré seulement trois messages sur la figure 3 pour simplifier le propos. La quantité de messages à émettre par un calculateur, est généralement bien supérieure. Il devient rapidement complexe de déterminer comment répartir les émissions de messages dans les ticks, notamment pour éviter les bourrages. Les étapes de procédé qui sont à présent décrites, permettent d'optimiser les décalages pour les messages émis périodiquement par un calculateur. Un tableau d'entiers T3(), nommé par exemple OffsetMsg() dans un programme d'ordinateur, est prévu pour contenir un décalage calculé pour chaque message répertorié. Dans une phase d'initialisation, un point d'activation 10 d'une étape E0, est activé par exemple par un démarrage du procédé. Le point d'entrée 10 est représenté par un empilement de deux blocs. Le bloc supérieur constitue une partie prémisse ou conditionnelle pour exécuter des actions qui sont contenue dans le bloc inférieur. Ici la partie conditionnelle est vide et la partie action est décrite à présent. Un tableau d'entiers T1(), nommé par exemple tabSommeNbBitMsgSurRéseau() dans un programme d'ordinateur, dans lequel chaque case est associée à un tick pour contenir un nombre de bits occupés par les message dans le tick, est initialisé à zéro. De même, un tableau d'entiers T2(), nommé par exemple tabSommeld() dans un programme d'ordinateur, dans lequel chaque case est associée à un tick pour contenir une somme des identificateurs des messages présents dans le tick, est initialisé à zéro. Une variable entière V1, nommée par exemple ValeurDuTick dans un programme d'ordinateur, est paramétrée avec la valeur de la périodicité des ticks qui est prédéterminée en fonction des périodes d'émission des messages. La périodicité des ticks peut être égale au plus grand commun diviseur des périodes des messages mais pas nécessairement. La périodicité des ticks peut être égale à tout commun diviseur des périodes d'émission de messages. Le plus grand commun diviseur a pour avantage de laisser un maximum de silence d'émission à la suite des messages regroupés pour être émis en début de ticks. Un plus petit diviseur a pour avantage de mieux pouvoir espacer l'émission des messages pour les immuniser contre les collisions. A titre illustratif, une valeur de 5 ms pour la variable V1 est bien adaptée à l'exemple de la figure 2. Une variable entière V2, nommée par exemple CptBoucle dans un programme d'ordinateur, pour compter des itérations de traitement par le procédé, et une variable entière V5 nommée par exemple Msg dans un programme d'ordinateur, pour compter le nombre de messages traités par le procédé, sont initialisées à zéro. A l'activation, l'étape EO commence par classer la table 23, 24 par ordre croissant des identificateurs. Ainsi comme on le voit sur la figure 5 qui présente le classement de la table 24, l'identificateur de plus petite valeur 0x4 est sur la première ligne et l'identificateur de plus grande valeur OxA est sur la dernière ligne de la table. Un balayage de la table représenté en figure 5, à partir de la ligne zéro, traite les messages par ordre de priorité décroissante. L'étape EO reclasse ensuite la table 23, 24 par ordre croissant des périodes. Ainsi comme on le voit sur la figure 6 qui présente le reclassement de la table 24, les périodes de plus petite valeur V9 = 10, sont sur les premières lignes et les périodes de plus grande valeur V9 = 25, sont sur les dernières lignes de la table 24. Un balayage de la table représentée en figure 6, à partir de la ligne zéro, traite les messages par ordre de période croissante et pour des valeurs de période identiques, par ordre de priorité décroissante. Une transition 11 active à partir de l'étape E0, une étape E1 décrite plus loin en référence à la figure 7. Dans l'ensemble des figures, chaque transition est représentée par un empilement de deux blocs. Le bloc supérieur constitue une partie prémisse ou conditionnelle pour exécuter des actions qui sont contenue dans le bloc inférieur. La partie conditionnelle de la transition 11 est vide dans la mesure où la transition 11 fait simplement suite aux classements, dans l'étape E0, de la table qui répertorie les messages. La partie action est décrite à présent. Une variable V3, nommée par exemple Pos dans un programme d'ordinateur, pour indiquer une valeur ordinale de tick testée en vue de placer un message, et une variable entière V4, nommée par exemple PosPrec dans un programme d'ordinateur, pour mémoriser une valeur ordinale de tick sélectionnée précédemment en vue de placer le message, sont positionnées à zéro. La variable V5 a été initialisée à zéro conformément au fait qu'à ce stade préliminaire du traitement, encore aucun message n'a été traité. La valeur de la première ligne du tableau T3(V5), pointée par V5 = 0, est positionnée à la valeur du produit des variables V3 et V1 dont la valeur nulle signifie que le premier tick testé est celui d'ordre zéro qui correspond à un décalage nul. En référence à la figure 7, une étape El consiste à sélectionner un tick pour placer un message courant. Lorsque l'étape El est activée pour la première fois à la suite de l'étape EO par la transition 11, le tick sélectionné donne la valeur de la première ligne de tableau T3(V5). Le premier message courant qui est considéré, est donc celui répertorié sur la première ligne du tableau 23. Une transition 12 est conditionnée par la formule propositionnelle suivante : ((P1) v (P2ÀP4)) ÀP5 De manière connue dans les formules propositionnelles, le signe v désigne une conjonction logique et le signe n désigne une disjonction logique. La proposition P1 est définie pour avoir les mêmes valeurs de vérité que : T1 (V3) +T1 (V3+V9) > T1 (V4) +T1 (V4+V9) Dans l'expression de la proposition P1, le membre de gauche représente la quantité totale de bits des messages qui occupent le tick testé et le tick dont la distance au tick testé est égale à une période d'émission du message courant. Le membre de droite représente la quantité totale de bits des messages qui occupent le tick précédemment sélectionné et le tick dont la distance au tick précédemment sélectionné est égale à une période d'émission du message courant. La proposition P1 est valide lorsque le membre de gauche est strictement supérieur au membre de droite. En d'autres termes, la proposition P1 est valide lorsqu'un placement du message dans le tick testé conduit à un nombre de bits supérieur au placement du message dans le tick précédemment sélectionné. La proposition P2 est définie pour avoir les mêmes valeurs de vérité que : T1 (V3) +T1 (V3+V9) = T1 (V4) +T1 (V4+V9) Dans l'expression de la proposition P2, le membre de gauche représente la quantité totale de bits des messages qui occupent le tick testé et le tick dont la distance au tick testé est égale à une période d'émission du message courant de façon identique à la proposition P1. Le membre de droite représente la quantité totale de bits des messages qui occupent le tick précédemment sélectionné et le tick dont la distance au tick précédemment sélectionné est égale à une période d'émission du message courant de façon identique à la proposition P1. La proposition P2 est valide lorsque le membre de gauche est égal au membre de droite. En d'autres termes, la proposition P2 est valide lorsqu'un placement du message courant dans le tick testé conduit à un nombre de bits de même valeur que celui obtenu en plaçant le message courant dans le tick précédemment sélectionné. La proposition P4 est définie pour avoir les mêmes valeurs de vérité que : T2 (V3) +T2 (V3+V9) • T2 (V4) +T2 (V4+V9) Dans l'expression de la proposition P4, le membre de gauche représente la somme des identificateurs des messages qui occupent le tick testé et le tick dont la distance au tick testé est égale à une période d'émission du message courant. Le membre de droite représente la somme des identificateurs des messages qui occupent le tick précédemment sélectionné et le tick dont la distance au tick précédemment sélectionné est égale à une période d'émission du message courant. La proposition P4 est valide lorsque le membre de gauche est inférieur ou égal au membre de droite. En d'autres termes, la proposition P4 est valide lorsqu'un placement du message courant dans le tick testé conduit à une somme des identificateurs des messages inférieure ou égale à la somme des identificateurs des messages qui est obtenue en plaçant le message courant dans le tick précédemment sélectionné. En d'autres termes encore, la proposition P4 est valide lorsqu'un placement du message courant dans le tick testé, diminue la priorité des messages du tick testé par rapport au tick précédemment sélectionné. La proposition P5 est définie pour avoir les mêmes 20 valeurs de vérité que : V2 • (V9/V1) -1 La proposition P5 est valide lorsqu'en ajoutant 1 au compteur de boucle, on obtient une valeur inférieure ou égale au rapport de la période du message courant par 25 la périodicité des ticks. En d'autres termes, la proposition P5 est valide tant que le contenu du compteur de boucle est inférieur ou égal à la quantité de ticks compris dans l'intervalle de temps qui sépare deux émissions successives du message courant, moins une 30 unité. En d'autres termes encore, la proposition P5 est valide tant que les itérations de traitement par le procédé n'ont pas atteint le nombre qui correspond à la quantité de ticks contenus dans une période d'émission du message courant. 35 En résumé, la partie conditionnelle de la transition 12 est valide tant que le nombre d'itérations de traitement est inférieur à la période associée au message courant exprimée en nombre de ticks et lorsque le placement du message courant dans le tick testé conduit à un encombrement supérieur à celui obtenu en plaçant le message courant dans le tick précédemment sélectionné ou à encombrement égal, lorsque le placement du message courant dans le tick testé conduit à une priorité globale plus élevée que celle obtenue en plaçant le message courant dans le tick précédemment sélectionné. Dans la partie action de la transition 12, le compteur de boucle est incrémenté de façon à indiquer une itération suivante du procédé. Si le nombre de ticks dans la période du message courant moins la valeur ordinale V3 de tick qui vient d'être testé est égale à l'unité, la valeur ordinale du tick à tester est ramenée à zéro. Sinon la valeur ordinale V3 de tick testée, est incrémentée de façon à tester le tick qui succède au tick qui vient d'être testé. La transition 12 fait reboucler l'étape El sur elle-même de sorte que les ticks sont testés à la suite les uns des autres tant que l'étape El reboucle sur elle-même. Une transition 13 est conditionnée par la formule propositionnelle suivante : (P2 A -IP4 A P5) Y (P3 AP5) De manière connue dans les formules propositionnelles, le signe désigne une négation logique de la proposition qu'il précède. Les propositions P2, P4 et P5 ont été définies précédemment. La proposition P3 est définie pour avoir les mêmes 30 valeurs de vérité que : T1 (V3) +T1 (V3+V9) La partie conditionnelle de la transition 13 est valide tant que le nombre d'itérations de traitement est inférieur à la période associée au message courant exprimée en nombre de ticks et lorsque le placement du message courant dans le tick testé conduit à un encombrement inférieur à celui obtenu en plaçant le message courant dans le tick précédemment sélectionné ou à encombrement égal, lorsque le placement du message courant dans le tick testé ne conduit pas à une priorité globale plus élevée que celle obtenue en plaçant le message courant dans le tick précédemment sélectionné. Dans la partie action de la transition 13, la variable entière V4 pour mémoriser la valeur ordinale de tick sélectionnée précédemment, est positionnée à la valeur ordinale V3 de tick testée. La valeur de décalage T3(V5) associé au message courant, est positionnée sur la valeur du produit de la valeur ordinale de tick testé par la périodicité du tick, simplement de façon à exprimer le décalage en ms plutôt qu'en nombre de ticks. Alternativement, le décalage peut aussi être exprimé en nombre de ticks. Le compteur de boucle est incrémenté de façon à indiquer une itération suivante du procédé. Si le nombre de ticks dans la période du message courant moins la valeur ordinale V3 de tick qui vient d'être testé est égale à l'unité, la valeur ordinale du tick à tester est ramenée à zéro. Sinon la valeur ordinale V3 de tick testée, est incrémentée de façon à pointer sur le tick suivant pour succéder au tick qui vient d'être testé. La transition 13 active à partir de l'étape El, une étape E2 décrite plus loin en référence à la figure 8. Une transition 14 est conditionnée par la formule propositionnelle suivante : P5 La partie conditionnelle de la transition 14 est valide dès que le contenu du compteur de boucle est supérieur à la quantité de ticks compris dans l'intervalle de temps qui sépare deux émissions successives du message courant, moins une unité. En d'autres termes, la partie conditionnelle de la transition 14 est valide dès que les itérations de traitement par le procédé ont atteint le nombre qui correspond à la quantité de ticks contenus dans une période d'émission du message courant. La partie action de la transition 14 procède à une mise à jour des tableaux Tl() et T2 () . Plus précisément, le nombre de bits du message courant est ajouté à la valeur T1(V4) référencée dans le tableau par la valeur ordinale du tick sélectionné et la valeur de l'identificateur du message courant est ajoutée à la valeur T2(V4) référencée dans le tableau par la valeur ordinale du tick sélectionné. La variable V3 qui indique la valeur ordinale du tick testé est remise à zéro. La variable V2 pour compter les itérations de traitement au sein du procédé, est remise à zéro de façon à pouvoir compter ultérieurement des itérations au sein d'un autre bouclage sur les étapes El et E2. La transition 14 active à partir de l'étape El, une 30 étape E3 décrite plus loin en référence à la figure 8. En référence à la figure 8, on commence par décrire l'étape E2. Une transition 15 est conditionnée par la formule propositionnelle unaire suivante : 35 P5 La partie conditionnelle de la transition 16 est valide tant que les itérations de traitement par le procédé n'ont pas atteint le nombre qui correspond à la quantité de ticks contenus dans une période d'émission du message courant. La partie active de la transition 15 incrémente la variable V3 qui indique la valeur ordinale du tick testé. La transition 15 réactive l'étape El à partir de l'étape E2. L'étape El est alors réactivée avec une valeur ordinale unitaire de tick testé si la variable V3 a été remise à zéro en entrant dans l'étape E2 et avec une valeur ordinale égale à l'ancienne valeur ordinale de tick testé augmentée d'une unité dans le cas contraire. Une transition 16 est identique à la transition 14 pour activer l'étape E3 à partir de l'étape E2. L'étape E3 consiste à trouver l'emplacement où il y 15 a un maximum de ticks vides. Une variable entière V6, nommée par exemple IndexDebutTickVide dans un programme d'ordinateur, est prévue pour mémoriser une position de premier tick à la suite duquel un nombre de ticks vides successifs est 20 maximal. Une variable entière V7, nommée par exemple IndexFinTickVide dans un programme d'ordinateur, est prévue pour mémoriser une position de dernier tick précédé par un nombre de ticks vides successifs qui est 25 maximal. Une variable entière V8, nommée par exemple NbTickVide dans un programme d'ordinateur, est prévue pour mémoriser un nombre de ticks vides successifs compris entre les valeurs de V6 et V7. 30 On explique à présent à titre purement illustratif et non limitatif, un mécanisme possible pour trouver la suite de ticks vides de longueur maximale. A l'activation de l'étape E3, les variables V6, V7 et V8 sont initialisées à zéro. L'homme du métier peut aisément 35 mettre au point d'autres mécanismes sans sortir du cadre de la présente invention. Un premier test consiste à vérifier si le tick indicé par la valeur de la variable V6 est vide. Si tel n'est pas le cas, les variables V6 et V7 sont incrémentées et le premier test est réitéré tant que la variable V6 n'a pas atteint la valeur de la période d'émission qui est associée au message courant. Si tel est le cas, la valeur de la variable V8 est positionnée à une valeur unitaire et la variable V7 est incrémentée de façon à exécuter un deuxième test. Le deuxième test consiste à vérifier si le tick indicé par la valeur de la variable V7 est vide. Si tel est le cas, les valeurs de la variable V8 et de la variable V7 sont incrémentées de façon à ré exécuter le deuxième test. Si tel n'est pas le cas, les valeurs des variables V6 et V8 sont conservées et la variable V7 est incrémentée pour exécuter un troisième test. Le troisième test consiste à vérifier si le tick indicé par la valeur de la variable V7 est vide. Si tel n'est pas le cas, la variable V7 est incrémentée et le troisième test est réitéré. Si tel est le cas, la valeur d'une variable V'8, de même type que la variable V8, est positionnée à une valeur unitaire et la variable V7 est incrémentée de façon à exécuter un quatrième test. Le quatrième test consiste à vérifier si le tick indicé par la valeur de la variable V7 est vide. Si tel est le cas, les valeurs de la variable V'8 et de la variable V7 sont incrémentées de façon à ré 30 exécuter le quatrième test. Si tel n'est pas le cas, les variables V8 et V'8 sont comparées. Si V8 est supérieure à V'8, les valeurs de V6 et V8 sont conservées. Sinon la valeur de V8 est positionnée à la valeur de V'8 et la valeur de V6 est 35 positionnée à V7-V'8. La variable V7 est incrémentée pour ré exécuter le troisième test. Les tests qui viennent d'être décrits ne sont plus exécutés dès que V7 a atteint V9 - 1. V7 est alors positionné à V7 = V6+V8 de sorte que la suite de ticks vides de longueur maximale est obtenue. Une transition 17 a une partie conditionnelle vide et une partie action dans laquelle on se positionne par la variable V3 au milieu de la suite de ticks vides qui vient d'être obtenue : V3 = V7 - V8/2 V8 = V8/2. La transition 17 active à partir de l'étape E3, une étape E4 que l'on décrit maintenant en référence à la figure 9. L'étape E4 est prévue pour vérifier s'il existe encore des messages à traiter au moyen d'une variable booléenne B1, nommée par exemple MessageAtraiter dans un programme d'ordinateur. Un état, par exemple à 1, indique qu'il reste des messages à traiter. Un autre état, par exemple à 0, indique qu'il ne reste plus de messages à traiter, c'est le cas notamment lorsque la fin du tableau de la figure 1 ou 2 est atteinte. La partie conditionnelle d'une transition 18 est validée lorsque la variable booléenne B1 indique qu'il existe encore au moins un message à traiter. La partie action de la transition 18 pointe sur le message suivant en incrémentant la variable V5. A partir de l'étape E4, la transition 18 active une étape E5. Dans l'étape E5, le message courant qui est considéré est le message pointé par V5 dont la période est donnée par la variable V9. L'étape E5 a pour objet de vérifier la présence d'un message dans le tick distant d'une période par rapport au tick indicé par la variable V3. La partie conditionnelle d'une transition 20 est validée lorsque la somme des bits contenus dans le tick indicé par la variable V3 et dans le tick indicé par la somme des variables V3 et V9, est nulle, ou lorsque la variable V3 est égale à la variable V6, en d'autres termes, lorsque le tick testé est le tick de début de la suite de ticks vide de longueur maximale. La partie action de la transition 20 est vide. A partir de l'étape E5, la transition 20 réactive l'étape El. La partie conditionnelle d'une transition 21 est validée lorsque la somme des bits contenus dans le tick indicé par la variable V3 et dans le tick indicé par la somme des variables V3 et V9, n'est pas nulle, et lorsque la variable V3 n'est pas égale à la variable V6, en d'autres termes, lorsque le tick testé n'est pas le tick de début de la suite de ticks vide de longueur maximale. La partie action de la transition 20 positionne la variable V7 qui indique la fin de la liste de ticks vides, à la valeur de la variable V3 qui indique le tick testé. A partir de l'étape E5, la transition 21 active une étape E6 dans laquelle il existe un message dans le tick distant d'une période par rapport au tick testé. Une transition 22 a une partie conditionnelle vide et une partie action dans laquelle on décale le tick testé d'une demi longueur de liste vide vers la gauche par rapport à sa position précédente en faisant V3= V7- V8/2. Dans la partie action, on divise aussi par 2 la longueur de la liste de ticks vides. A partir de l'étape E6, la transition 22 réactive l'étape E5. Une transition 19 est valide lorsqu'il n'existe plus de message à traiter. A partir de la quatrième étape E4, la transition 19 active une septième étape E7 qui marque la fin du procédé. La figure 10 montre l'état de la table 23 lorsque le procédé arrive dans l'étape E7. La colonne de droite contient un décalage nul pour les messages identifiés 0x0 et OxA dont la longueur pour chacun est de huit octets, soit soixante quatre bits. La table associative 25 représentée sur la figure 12, associe les tableaux T1() et T2() à chaque tick de 5 ms dans lequel est placé un message répertorié dans la table 23. La période étant de 25 ms pour chaque message, on note dans le tableau T1(), une valeur de seize octets, soit cent vingt huit bits qui occupent les ticks de valeur ordinale 0 distant de Oms, 5 distant de 25ms et 10 distant de 50ms. La colonne de droite de la table 23 contient un 10 décalage de deux ticks, soit 10 ms pour les messages identifiés 0x2 et 0x6. La figure 11 montre l'état de la table 24 lorsque le procédé arrive dans l'étape E7. La colonne de droite contient un décalage nul pour les messages identifiés 15 0x0, OxA et 0x4 dont la longueur est respectivement de six octets, huit octets et deux octets. La table associative 26 représentée sur la figure 13, associe les tableaux T1() et T2() à chaque tick de 5 ms dans lequel est placé un message répertorié dans la table 24. 20 La période étant de 10 ms pour les messages 0x8, OxA et de 25 ms pour le message 0x4, on note dans le tableau T1() en figure 13, une valeur de seize octets, soit cent vingt huit bits qui occupent les ticks de valeur ordinale 0 distant de Oms et 10 distant de 50ms 25 La colonne de droite de la table 24 contient un décalage de un tick, soit 5 ms pour les messages identifiés 0x9 et 0x6 de longueur respective huit octets et un octet. La période étant de 10 ms pour le message 0x9 et de 25 ms pour le message 0x6, on note dans le 30 tableau T1() de la figure 13, un encombrement de neuf octets du tick de valeur ordinale 1 distant de 5 ms. On retrouve le message 0x9 dans le tick de valeur ordinale 3 distant de 15 ms, dans le tick de valeur ordinale 5 distant de 25 ms, dans le tick de valeur 35 ordinale 7 distant de 35 ms, et dans le tick de valeur ordinale 9 distant de 45 ms, dans lesquels le cumul de sa longueur conduit à un encombrement respectivement de huit, dix, huit et huit octets. On retrouve le message 0x6 dans le tick de valeur ordinale 3 distant de 30 ms, dans lequel le cumul de sa 5 longueur conduit à un encombrement de quatorze octets. Jamais l'encombrement ne dépasse seize octets. REVENDICATIONS1. Procédé pour émettre depuis un calculateur, des messages à chacun desquels est associée une période d'émission (V9), en répartissant les messages dans des fenêtres temporelles à périodicité (V1) prédéterminée de telle sorte que chaque période d'émission est un multiple entier de ladite périodicité, dans lequel les messages sont placés dans des fenêtres qui sont sélectionnées avec des décalages par rapport à une fenêtre initiale de façon à éviter ou à diminuer des collisions avec des messages émis par un autre calculateur ou avec des messages présents sur le réseau. 2. Procédé selon la revendication 1, caractérisé en 15 ce que pour sélectionner chaque fenêtre, le procédé comprend : - une première étape (El) à partir de laquelle pour un message courant sélectionné parmi lesdits messages, on teste des fenêtres temporelles successives en nombre 20 inférieur d'une unité au multiple entier qui exprime la période d'émission associée au message courant, en calculant pour chaque fenêtre testée au moins la quantité de bits qui est contenue dans la fenêtre testée et dans une fenêtre qui succède à la fenêtre testée après une 25 période d'émission lorsque le message courant est placé dans ladite fenêtre testée ; et - une deuxième étape (E2) dans laquelle la fenêtre sélectionnée pour placer le message, est celle pour laquelle au moins la quantité de bits calculée est 30 minimale. 3. Procédé selon la revendication 2, caractérisé en ce que : - dans la première étape (El), on calcule pour chaque fenêtre testée, une priorité moyenne des messages 35 contenus dans la fenêtre testée et dans la fenêtre qui succède à la fenêtre testée après une période d'émissionlorsque le message courant est placé dans ladite fenêtre testée ; et - dans la deuxième étape (E2), parmi deux fenêtres testées pour lesquelles la quantité de bits calculée est minimale, la fenêtre sélectionnée est celle pour laquelle la priorité moyenne est la plus faible. 4. Procédé selon la revendication 3, caractérisé en ce que dans la deuxième étape (E2), parmi deux fenêtres testées pour lesquelles la quantité de bits calculée est minimale et la priorité moyenne est de niveau identique, la fenêtre sélectionnée est celle précédemment testée. 5. Procédé selon l'une des revendications 2 à 4, caractérisé en ce qu'il comprend une étape initiale (EO) exécutée préalablement aux autres étapes et dans laquelle les messages à émettre sont classés par ordre de périodes d'émission croissantes et les messages auxquels sont associés des périodes d'émission identiques, sont classés par ordre de priorités décroissantes. 6. Procédé selon l'une des revendications 2 à 5, caractérisé en ce que le message courant sélectionné pour une première exécution de la première étape (El), est le message auquel la période d'émission associée est la plus faible et parmi les messages de période d'émission la plus faible, le message de priorité la plus élevée. 7. Procédé selon l'une des revendications 2 à 6, caractérisé en ce que pour exécuter la première étape (El) et la deuxième étape (E2), les messages à émettre sont sélectionnés par ordre de périodes d'émission croissantes et pour des périodes d'émission identiques, par ordre de priorités décroissantes. 8. Procédé selon la revendication 7, caractérisé en ce qu'il comprend une troisième étape (E3) qui est exécutée après avoir sélectionné la fenêtre temporelle qui convient pour le message courant, de façon à trouver une position (V6) de fenêtre temporelle qui débute une suite de longueur maximale de fenêtres temporelles vides successives. 9. Procédé selon la revendication 8, caractérisé en ce que, après exécution de la troisième étape (E3), la fenêtre testée est positionnée au milieu de ladite suite et la longueur de ladite suite est réduite de moitié. 10. Procédé selon la revendication 9, caractérisé en ce qu'il comprend : - une quatrième étape (E4) dans laquelle on observe s'il existe encore un message à traiter ; et - une cinquième étape (E5) exécutée s'il existe encore un message à traiter, en prenant le message observé comme nouveau message courant, de façon à ré exécuter la première étape (El) pour le nouveau message courant lorsque la quantité de bits qui est contenue dans la fenêtre testée et dans la fenêtre qui succède à la fenêtre testée après une période d'émission, est nulle ou lorsqu'une valeur ordinale (V3) de la fenêtre testée est égale à la position (V6) de fenêtre temporelle qui débute une suite de longueur maximale de fenêtres temporelles vides successives. 11. Procédé selon la revendication 10, caractérisé en ce qu'il comprend une sixième étape (E6) exécutée après la cinquième étape (E5) lorsque la quantité de bits qui est contenue dans la fenêtre testée et dans la fenêtre qui succède à la fenêtre testée après une période d'émission, n'est pas nulle et lorsque la valeur ordinale (V3) de la fenêtre testée n'est pas égale à la position (V6) de fenêtre temporelle qui débute une suite de longueur maximale de fenêtres temporelles vides successives, de façon à ré exécuter la cinquième étape (E5) après avoir positionné la fenêtre testée au milieu de la suite réduite de longueur maximale de fenêtres temporelles vides successives et avoir réduit à nouveau de moitié ladite suite réduite. 12. Procédé selon l'une des revendications 2 à 11, caractérisé en ce que tant que la première étape (El) ou la deuxième étape (E2) est exécutée, la valeur ordinale (V3) de la fenêtre testée est remise à zéro lorsqueladite valeur ordinale atteint ledit nombre inférieur d'une unité au multiple entier qui exprime la période d'émission associée au message courant. 13. Produit programme d'ordinateur chargeable directement dans la mémoire interne d'un calculateur numérique, comprenant des portions de code logiciel pour l'exécution des étapes de procédé selon l'une quelconque des revendications 1 à 12 lorsque ledit programme est exécuté sur un calculateur. 14. Calculateur agencé pour émettre des messages à chacun desquels est associée une période d'émission (V9), comprenant en mémoire : - une première variable (V1) pour indiquer une périodicité de fenêtres temporelles prédéterminée de telle sorte que chaque période d'émission est exprimable par un multiple entier de ladite périodicité ; - une table associative (23, 24) dans laquelle les messages sont associés chacun à un décalage de fenêtre par rapport à une fenêtre initiale de décalage nul de façon à éviter ou à diminuer des collisions avec des messages émis par un autre calculateur ou avec des messages présents sur le réseau. 15. Calculateur selon la revendication 14, caractérisé en ce que les décalages associés aux messages conduisent à une répartition des messages dans les fenêtres temporelles qui génère une charge minimale d'occupation des fenêtres par les messages. 16. Calculateur selon la revendication 14 ou 15, caractérisé en ce que les messages sont classés dans la table associative (23, 24) par ordre de périodes d'émission croissantes et les messages auxquels est associée une même période d'émission, sont classés par ordre de priorités décroissantes.35