Etude et Programmation d'un Autocommutateur Pédagogique

Commutation électronique. Réseaux de télécommunications. Commutation temporelle. Commutateur téléphoniques. Algorithme d'établissement d'un appel. Programmes du logiciel







'Etude et Programmation d\'un Autocommutateur Pdagogique'

Dakar-SENEGAL

Mémoire de fin de formation pour l'obtention du diplôme de :

Ingénieur des Travaux des Télécommunications

Option : Technique

Spécialité : Commutation

Thème :

ETUDE ET PROGRAMMATION D'UN AUTOCOMMUTATEUR TEMPOREL PEDAGOGIQUE : ETD500

Présenté et soutenu par : Sous la direction de :

APOUDJAK Moustapha Mr. BARRY Mamadou Alpha

LAWSON-BANKU A. Latévi Formateur /Consultant à l'ESMT

Promotion : 2007 - 2009

DEDICACES

A nos familles,

Vous qui nous avez toujours soutenus, encouragés et prodigués des

conseils tout au long de nos études,

Vous qui vouliez le meilleur pour nous,

Vous qui, dans nos moments de faiblesses, de doutes et d'angoisse nous

avez toujours consolé,

Voici la preuve que vos efforts ont porté leur fruit.

A nos professeurs

Nous vous dédions ce travail qui vous montrera surement que vos efforts n'ont pas

été vains et que vos conseils et enseignements nous ont bien été utiles.

Merci à vous.

REMERCIEMENTS

Ce travail que nous avons l'honneur de présenter est le fruit de la collaboration de

plusieurs personnes que nous tenons à remercier.

Tout d'abord, nous tenons à remercier DIEU pour avoir été à nos

côtés tout au long de notre vie, du cycle IGTT et du stage ; et pour la grâce qu'il

nous accorde.

Nous adressons nos vifs remerciements à M. Alpha Mamadou BARRY pour avoir bien

voulu superviser notre travail et pour sa disponibilité inconditionnelle.

Nos remerciements vont aussi à l'administration de l'ESMT et à nos professeurs

qui se sont dévoués à leur tâche et pour leur soutient inconditionnel.

Nous remercions nos familles pour leur soutient moral, affectif et financier, pour

leurs prières ainsi que pour tous les sacrifices auxquels ils ont bien voulu consentir

pour notre épanouissement; c'est grâce à vous si nous sommes ici.

Merci.

Enfin nous remercions tous ceux qui de près ou de loin ont contribué à l'achèvement de ce travail.

GLOSSAIRE

BF : Basse Fréquence

CBS : Compteur Binaire Synchrone

CCF : Circuit de Conférence

CEPT : Commission Européenne des Postes et Télécommunications

COFIDEC : Codeur -Filtre-Décodeur

Dé : Abonné Demandé

DR : Abonné Demandeur

EB : Élément Binaire

FS : Frame Synchronisation

GT : Générateur de Tonalités

HE : Horloge Emission

HR : Horloge Réception

IUP : Institut Universitaire Professionnalisé

LME : Liaison Multiplexe d'Entrée

LMS : Liaison Multiplexe de Sortie

LRE : Liaison Réseau d'Entrée

LRS : Liaison Réseau de Sortie

LSB : Least Significant Bit (Bit du Poids le plus faible)

MCM : Mémoire de Commande

ME : Mic distant Emission

MIC : Modulation par Impulsion et Codage

MR : Mic distant Réception

MSB : Most Significant Bit (Bite du Poids le plus fort)

MTC : Mémoire Tampon de Conversation

PAM : Pulse Amplitude Modulation

RCX : Réseau de Connexion

RF : Récepteur de Fréquences

SLIC : Subscriber Line Interface Circuit

UR : Unité de Raccordement

URA : Unité de Raccordement Abonné

URM : Unité de Raccordement Multiplexe

SOMMAIRE

Introduction générale…………………………………………………………1

1ère Partie : Etude théorique…………………………………………………...3

Chapitre 1 : Présentation du cadre d'étude…………………………………………………4

Chapitre2 : Généralité sur la commutation temporelle……………………………………9

Chapitre 3 : Etude de l'autocommutateur pédagogique ETD 500……………………….36

2ème PARTIE :  Programmes du logiciel…………………………………….49

Chapitre 1 : Les bibliothèques et Les programmes  compilables……………………….51

Chapitre 2 : Exécution du logiciel………………………………………………………..55 

Conclusion Générale……………………………………………………….…66

INTRODUCTION GENERALE

La commutation est née pratiquement en même temps que le téléphone. Après une courte période pendant laquelle l'établissement de la communication s'opérait de façon manuelle par l'intermédiaire d'opératrices, les premiers systèmes de traitement automatiques sont apparus. Ils ne couvraient cependant pas tous les types d'appels et pendant longtemps ils ont voisiné avec des exploitations manuelles (traitement du trafic interurbain et international), ou ont été combinés avec celles-ci pour créer le service semi-automatique.

La recherche en commutation électronique a commencé dans les années 60. En effet il a fallu attendre les années 50 pour que le trafic interurbain se développe et les années 60 pour le service international automatique. Ce passage à l'automatisation intégrale suppose en effet la normalisation des échanges entre commutateur d'un même réseau puis entre les réseaux des différents pays.

Les télécommunications ont profité de l'évolution exponentielle de la recherche électronique. En effet la numérisation va permettre l'avènement des commutateurs temporels.

Le laboratoire de commutation de l'ESMT dans le souci de renforcer l'enseignement pratique lié à la commutation temporelle s'est procuré l'ETD500 : un autocommutateur temporel pédagogique.

Afin de pouvoir bien exploiter la maquette ETD500, il nous a été demandé de concevoir et corriger des programmes qui permettraient l'établissement d'un appel local (fonction de l'unité de commande), cela nous amène à prendre comme thème de mémoire « ETUDE ET PROGRAMMATION D'UN AUTOCOMMUTATEUR TEMPOREL Pédagogique : ETD500».

Pour mener à bien, le travail a été scindé en deux grandes parties :

  • La première partie (I) portera sur l'étude théorique qui subdivisée en trois (3) chapitres

  • Chapitre 1 : Présentation du cadre d'étude et la problématique

  • Chapitre 2 : Généralité sur la commutation temporelle. Ce chapitre abordera les bases de la commutation téléphonique, l'architecture et les phases d'établissement d'une communication.

  • Chapitre 3 : Etude de l'autocommutateur pédagogique ETD500. Ce chapitre concerne la présentation matérielle de l'ETD500, des registres des mémoires, et de son fonctionnement.

  • La deuxième partie (II) sur les programmes du logiciel qui est détaillée sur deux (2) chapitres

  • Chapitre 1 : Les bibliothèques et programmes compilables. Il détaille les bibliothèques et programmes complétés et amendés pour être compilés.

  • Chapitre 2 : Traite principalement de l'exécution du programme COMLOCAL et des cas pratiques.

Au terme de l'étude une conclusion générale, dans laquelle nous allons faire la synthèse de ce qui nous a été demandé, du travail effectué, des problèmes rencontrés, les solutions apportées ainsi qu'une perspective pour orienter les probables futures recherches sur l'ETD500.

1ère Partie :

Etude théorique

CHAPITRE 1 :

Présentation du cadre d'étude

  • PRESENTATION DE l'ESMT

  • 1.1.1 - Historique

    L'ESMT (Ecole Supérieure Multinationale de Télécommunications), centre d'excellence pour l'Afrique francophone pour la formation en télécommunications et en téléinformatique, forment des techniciens, des ingénieurs ainsi que des mastères.

    C'est un centre d'excellence de l'UEMOA (Union Economique et Monétaire Ouest-

    Africaine) et l'un des sept centres d'excellence de l'UIT (Union Internationale des

    Télécommunications). Comme centre d'excellence, elle se doit de former pour l'Afrique, des cadres et du personnel compétents dans ce vaste domaine en évolution constante : NTIC. En effet, l'ESMT fut créé en 1981 et compte de nos jours 7 pays membres d'Afrique de l'Ouest :

    Bénin, Burkina Faso, Mali, Mauritanie, Niger, Guinée Conakry et le Sénégal.

    Pour ce faire et pour mieux répondre aux besoins de nos états, elle se veut un pôle de convergence en matière de formation, d'enseignement, de recherche et d'expertise régionale dans le domaine des technologies de l'information et de la communication.

    1.1.2 - Organisation et fonctionnement

    1.1.2.1 - Organisation 

    Comme toute structure organisée, l'ESMT comprend :

    • Un conseil des Ministres,

    • Un conseil d'administration

    • Une direction Générale,

    • Un conseil scientifique et pédagogique

    • Un audit contrôle de gestion

    • Un département marketing

    • Une Direction de l'Enseignement de la Formation et de la Recherche (DEFR)

    • Une Direction Administrative et Financière (DAF)

    La DEFR et la DAF contiennent des départements comme explicité dans l'organigramme ci-après :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    1.1.2.2 - Fonctionnement 

    Le fonctionnement de l'école est assuré par:

    • Un Conseil d'Administration, où sont représentés tous les pays membres, qui arrête les grandes orientations de l'école et définit le budget de chaque année d'exercice. Sa présidence est assurée à tour de rôle par un Ministre de tutelle des télécommunications d'un pays membre. Les autres membres du Conseil d'Administration sont les Directeurs Généraux des organismes de télécommunication (offices et sociétés nationales ou opérateurs historiques).

    • Un Directeur Général, ressortissant d'un pays membre de l'ESMT, qui assure la gestion et le fonctionnement de l'établissement, ainsi que la mise en œuvre de la coopération internationale.

    • Un Directeur de l'Enseignement de la Formation et de la Recherche, ressortissant d'un pays membre de l'ESMT, qui est chargé de la coordination des enseignements, de la documentation et du régime d'étude des élèves.

    • Un Conseil Scientifique et Pédagogique, organe consultatif, qui regroupe le Directeur, le Directeur de la Formation et de la Recherche, le personnel enseignant, deux représentants des utilisateurs et deux représentants des élèves. Son rôle est d'étudier les aspects pédagogiques, en particulier les évolutions de programmes et leur adaptation aux besoins du marché, les propositions de nouvelles formations, etc.

    Il effectue entre autre les tâches suivantes :

    • Etudes techniques

    • Mise en place et suivi de projets informatiques

    • Mise en place d'actions qualité

    • Mise en place de démarches et d'outils de management et de communication

    • Expertises de gestion et de développement des ressources humaines

    • Expertises en gestion et en organisation

    • Appui à la définition et à la mise en œuvre d'actions commerciales

    • Diagnostics et plans de formation

    • Changement de plan de numérotation

    1.2 - PROBLEMATIQUE

    Les domaines d'applications des réseaux de télécommunications s'accroissent de jour en jour et les commutateurs temporels sont les nœuds incontournables de cette gigantesque toile. Organes intelligents du réseau, les commutateurs établissent à la demande d'un abonné, la connexion, la supervision et la rupture des communications. Afin d'illustrer aux étudiants les principes de la commutation temporelle et les techniques de signalisation associées, l'expérimentation est indispensable. De petites configurations de commutateurs commerciaux (commutateurs privés PABX) destinés au trafic téléphonique des entreprises peuvent être utilisées pour une approche externe des fonctions réalisées et de la configuration des services désirés. Il serait intéressant de pouvoir entrer au cœur de ces machines qui implantent de nombreuses techniques de communications qui sont à la base de la formation de tout ingénieur et technicien supérieur des secteurs des télécommunications et réseaux.

    Avec des autocommutateurs pédagogiques de type ETD500, qui sont munis des systèmes reprogrammables, il est possible de rentrer au cœur de ces machines pour configurer et visualiser les processus d'établissement des appels. Ceci est possible qu'à partir des programmes informatiques écrits et adaptés aux ETD500.

    1.3 - CONTEXTE DE L'ETUDE

    L'intérêt de ce mémoire est essentiellement à but pédagogique. L'ETD500 qui est équipé d'un système reconfigurable va permettre aux différents cycles DTS et INGENIEUR de pouvoir réaliser les différents TPs (simulation, visualisation des processus de l'établissement d'un appel) liés à la commutation temporelle.

    Chapitre2 :

    Généralité sur la commutation temporelle

    2.1 - DEFINITION  [4]

    La commutation téléphonique est l'ensemble des techniques que l'on met en œuvre afin de choisir, d'établir, de maintenir et, à la fin, de libérer les circuits entre les couples d'usagers abonnés au réseau.

    La transmission téléphonique assure l'échange ou le transport des informations utiles (signaux de conversation ou données) sur les circuits ainsi établis. Les nœuds qui permettent d'établir les connexions entre les usagers en fonction de leur demande sont les centres de commutation, communément appelés autocommutateurs, car leur exploitation est maintenant toujours automatique.

    Les autocommutateurs permettent d'interconnecter, deux à deux, les voies de transmission qui aboutissent en grand nombre à leurs accès, qu'il s'agisse de lignes d'abonnés ou de circuits (jonctions) reliant les autocommutateurs entre eux. Pour le besoin de l'établissement des trajets, soit entre l'abonné et son autocommutateur de rattachement, soit entre autocommutateurs, le réseau téléphonique utilise des échanges d'informations de commande que l'on appelle la signalisation.

    2.2 - FONCTIONNEMENT DE BASE D'UN COMMUTATEUR TELEPHONIQUE

    2.2.1 - Structure d'un commutateur téléphonique

    Le schéma simplifié d'un autocommutateur, quelle que soit la technologie employée, peut se représenter par un synoptique de trois grands blocs regroupant toutes les fonctions téléphoniques, mais aussi les moyens de gestion et les outils de maintenance.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig 1-1: schéma simplifié d'un autocommutateur [4]

    2.2.2 - Le bloc de raccordement

    Il joue d'une façon générale, le rôle d'interface avec le réseau téléphonique, en adaptant les différentes tensions mises en jeu sur les lignes et les circuits, ainsi que le langage utilisé sur ces supports, qui peut s'exprimer sous forme de codes de signalisation variés. On y trouvera plus particulièrement les fonctions suivantes :

     

    URA

    • Alimentation microphonique des postes d'abonnés (48v)

    • Production du courant d'appel (80 V - 25 Hz)

    • Conversion analogique / numérique et vice versa

    • Concentration du trafic

    URM

    • Synchronisation des débits binaires

    • Transformation HDB3 en binaire et vice versa

    • Assure l'interface entre les MIC externes et l'autocommutateur

    • Extraction, injection et prétraitement de la signalisation voie par voie de l'IT16

    2.2.3 - Le réseau de connexion et blocs auxiliaires

    Commuter signifie relier temporairement une entrée à une ou plusieurs sorties.

    C'est le véritable cœur de la chaîne commutée, permettant les différents types de connexions :

    • Etablissement de communications bidirectionnelles

    • Diffusion des tonalités, des fréquences de code, et des annonces parlées

    •   Connexions simples avec les auxiliaires de signalisation (récepteurs multi fréquences)

    • Connexions spéciales : conversation à trois, liaisons de données, etc ...)

     

    Il existe deux grandes familles de réseau de connexion :

    • Dans les systèmes électromécaniques, le signal arrivant sous forme analogique de façon continue, il était nécessaire d'établir une connexion métallique entre entrées et sorties pendant toute la durée de la communication : c'est la commutation spatiale. Un tel réseau est dit réseau de connexion spatial.

    • Lorsque le signal arrive sous forme d'échantillons analogiques ou numériques, il n'est plus nécessaire d'établir la continuité métallique pendant toute la durée de la communication, mais seulement d'assurer le transfert des éléments binaires représentant la valeur des échantillons de parole prélevés. Il s'agit de la commutation temporelle, et ce réseau est dit réseau de connexion temporel.

    Bloc des Auxiliaires :

    Ce bloc donne les différentes tonalités de fonctionnement de l'autocommutateur (Invitation à numéroter, tonalité d'occupation, retour d'appel, etc. . .), on peut citer entre autres :

     RF : Récepteur de la numérotation clavier des abonnés (Q23)

    Récepteur signalisation entre centraux (R2)

     GT : Générateur de tonalité (tonalité d'invitation à numéroter, tonalité d'occupation, tonalité d'acheminement. …)

     CCF : Circuit de conférence

    2.2.4 - Le bloc de commande

    Il s'agit de la partie « intelligente » du système où se prennent les décisions en temps réel d'après des programmes enregistrés ou câblés, où l'on trouve en particulier :

    • Les fonctions téléphoniques (établissement des appels, relâchement d'appels, taxation, supervision, observation de trafic).

    • Les programmes d'exploitation du système : gestion des paramètres d'acheminement et de taxation, gestion des équipements d'abonnés, traitement des résultats d'observation.

    • Le logiciel de maintenance : outils de localisation de défauts, supervision des alarmes, collationnement des fautes logicielles

    2.3 - LES PHASES D'ETABLISSEMENT D'UNE COMMUNICATION LOCALE

    2.3.1 - Présélection

    2.3.1.1 - Exploration des équipements et détection du changement d'état

    Les équipements d'abonnés sont répartis sur des « cartes d'abonnés » assurant les fonctions « BORSHT » : 

    • B = Battery (alimentation)

    • O= Overload (protection contre les surtensions)

    • R = Ringing (émission de la sonnerie)

    • S = Supervision (surveillance de l'état de boucle)

    • H = Hybrid (transformation 2 fils/4 fils)

    • T = Test (renvoi au dispositif d'essai)

    Ces cartes sont regroupées par ensemble, dont la modularité dépend des systèmes. Chaque ensemble étant sous le contrôle d'une logique appelée processeur de péritéléphonie. Ce dernier est chargé d'interpréter tout événement survenant sur un équipement, et de prendre la décision appropriée.

    L'exploration des équipements est assurée par un compteur qui valide tour à tour la lecture de l'état de boucle de chaque ligne. En cas de modification, le nouvel état est mémorisé pendant un délai permettant sa confirmation.

    A l'issue de ce délai, la logique de contrôle procède à une prise de ressources vers le bloc de commande. Ce dernier regroupe les processeurs chargés du traitement d'appel ; leur nombre diffère suivant le type de système de commande (commande centralisée ou répartie). Cette prise de ressources se manifeste généralement par l'envoi d'un message sur une liaison, car les processeurs du bloc de commande sont logés dans un ensemble matériel distinct.

    2.3.1.2 - Recherche des discriminations du demandeur

    Le processeur de traitement d'appel effectue une recherche en mémoire (tables associées à ce processeur ou fichiers gérés par un processeur dédié). Cette recherche est destinée à déterminer la nature de l'équipement en appel ainsi que la présence éventuelle de discrimination

    2.3.1.3 - Initiation de l'observation de trafic

    La prise en compte d'un nouvel appel par le processeur de traitement d'appel provoque également le démarrage d'une observation de trafic, dont le résultat servira à connaître le temps d'établissement des communications, la répartition des flux de trafic, etc ...)

    2.3.1.4 - Test et connexion d'un récepteur de fréquence

    Suite à la recherche de discrimination, s'il apparaît que le demandeur est équipé d'un poste à clavier, le processeur de traitement d'appel procède à la recherche d'un récepteur de fréquence libre, puis à sa connexion à l'équipement en appel, via le réseau de connexion. Ce récepteur est un filtre numérique qui, à l'aide d'un algorithme présélectionné, est capable de reconnaître, sur une série d'échantillons, les fréquences de code émises par le clavier du poste de l'abonné.

    2.3.1.5 - Envoi de la tonalité au demandeur

    Une fois les équipements nécessaires connectés, le processeur commande l'émission de la tonalité d'invitation à numéroter. Celle-ci est généralement distribuée par le réseau de connexion qui la reçoit lui-même sous forme d'échantillons en provenance d'un générateur de totalité. Ce denier est en fait une mémoire contenant une série ordonnée d'échantillons permettant de reconstituer la tonalité.

    2.3.2 - Signalisation du demandeur

    2.3.2.1 - Réception de la numérotation

    Les chiffres émis par le demandeur traversent le réseau de connexion et sont interprétés par le récepteur de fréquence, lequel assure le filtrage numérique. Les échantillons sont stockés sur plusieurs trames (une quinzaine sont nécessaires), et le résultat est envoyé au processeur de traitement d'appel directement sous la forme du chiffre composé par l'abonné.

     

    Si le demandeur est équipé d'un poste décimal, les chiffres arrivent sous forme de rupture de boucle, et sont interprétés directement par le processeur de traitement d'appel.

    2.3.2.2 - Arrêt de l'émission de la tonalité

    Dès la réception du premier chiffre, le processeur doit commander la déconnexion de l'équipement du générateur de tonalité. Ceci est fait suite à un ordre envoyé par le processeur au réseau de connexion.

    2.3.3 - Sélection 

    Lorsque le processeur aura reçu suffisamment de chiffres de l'abonné, leur analyse permettra de déterminer par quel chemin la connexion pourra être assurée jusqu'au demandé, et sur quelle base devra être effectuée la taxation de la communication.

     

    Toutefois, afin de réduire le temps de sélection, on commence en général la traduction de la numérotation après la réception du second chiffre, quitte à faire plusieurs tentatives si le nombre de chiffres s'avère insuffisant.

    2.3.3.1 - Pré analyse

    Après la réception des deux premiers chiffres, le processeur effectue une première traduction destinée à faciliter la suite du traitement : il est presque toujours possible à ce stade de déterminer le nombre total de chiffres à recevoir, et dans certains cas de connaître les conditions d'acheminement de l'appel. Dans tous les cas, cette première analyse fournit le nombre de chiffres qu'il faudra attendre pour une traduction complète de l'indicatif.

    2.3.3.2 - Analyse

    Une fois le nombre de chiffres requis parvenus au processeur, celui-ci consulte une nouvelle fois les tables de traduction pour obtenir tous les paramètres associés à l'indicatif reçu. Les informations recueillies seront :

    • L'acheminement à utiliser, c'est-à-dire l'itinéraire à emprunter pour atteindre le demandé, (en cas de communication départ figureront aussi les éléments permettant de faire suivre le numéro vers l'autocommutateur destinataire).

    • Le palier de taxe à appliquer, indiquant le nombre d'unités de taxation à attribuer au demandeur, ainsi que leur périodicité, éventuellement.

    • Le numéro de l'équipement demandé, s'il s'agit d'une communication locale.

    2.3.3.3 - Fin de numérotation du demandeur

    Le demandeur ayant composé son dernier chiffre, il faut déconnecter le récepteur de fréquence utilisé en code clavier (message de déconnexion expédié par le processeur de traitement d'appel au réseau de connexion).

    2.3.4 - Mise en relation

    L'établissement de la communication passe maintenant par une phase d'attente pendant laquelle le demandeur perçoit le retour d'appel, alors que, dans l'autocommutateur destinataire, l'équipement du demandé reçoit le courant de sonnerie.

    2.3.4.1 - Retransmission

    Lorsque le demandé décroche, son processeur de péritéléphonie détecte le changement d'état. La différence se situe toutefois dans la table d'état des équipements qui contient l'information : « l'équipement n'aura alors qu'à signaler le décrochage au bloc de commande, par l'envoi d'un message.

     

    2.3.4.2 - Double connexion (Dr Dé)

    Jusqu'à ce stade, la connexion n'avait pas été effectuée dans le réseau de connexion, compte tenu de la différence de nature des signaux émis vers les deux équipements. A la réception du décrochage du demandé, le processeur de traitement d'appel prend les mesures ci-après :

    • Arrêt de l'émission de la sonnerie cadencée vers le demandé

    • Arrêt de l'émission du retour d'appel vers le demandeur

    • Envoi d'un message à destination du réseau de connexion pour assurer la connexion bidirectionnelle entre le demandeur et le demandé.

    2.3.4.3 - Démarrage de la taxation

    Le processeur de traitement d'appel ayant terminé sa tâche de mise en relation, il lui faut initialiser le processus de taxation sur la base des informations obtenues lors de la traduction. Ainsi, si la taxation est fixe, le compte de l'abonné sera incrémenté du nombre d'unités fourni dans le palier de taxe ; si au contraire, la taxation est périodique, le programme de taxation commencera à comptabiliser les unités correspondant à chaque période, afin de les ajouter au compte de l'abonné à la fin de la communication.

    2.3.4.4 - Libération des ressources

    Bien que la taxation et l'observation de trafic exigent le maintien de certaines ressources pendant la durée de la conversation, il est indispensable de libérer celles qui ont été utilisées pour le stockage des informations pendant la phase d'établissement (zones de traitement).

    2.4 - PRINCIPE DE LA CONNEXION TEMPORELLE

    2.4.1 - La trame MIC

    La trame MIC (Modulation par Impulsions et Codage) a été développée pour la commutation temporelle de voies téléphoniques numérisées. Elle a été normalisée par la Commission Européenne des Postes et Télécommunications (CEPT).

    Elle permet de multiplexer, sur une même paire, 30 voies téléphoniques numérisées.

    Par la suite, les 30 voies numériques de la trame MIC ont été utilisées pour transmettre toutes sortes de données numériques (FAX, données en X25, vidéo...)

    La trame MIC permet la transmission de 30 voies numériques, la signalisation pour les 30 voies et la synchronisation de l'ensemble des informations

     

    La modulation par Impulsion et Codage (MIC) a pour but de convertir le signal téléphonique analogique en un signal numérique. Le signal analogique est échantillonné toutes les 125 microsecondes.

    30 voies téléphoniques sont ainsi véhiculées sur un même support.

    La modulation par impulsion et codage fait correspondre à un signal analogique un signal numérique.

    La mise sous forme numérique d'un signal analogique se fait en trois opérations essentielles.

    • L'échantillonnage

    • La Quantification

    • Le codage

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig 1-2 : Une trame (avec les 32 IT)

    2.4.1.1 - Echantillonnage

    L'échantillonnage est, après le filtrage, une opération effectuée sur le signal à transmettre en vue de réaliser la conversion "analogique / numérique".

    Il consiste à substituer, au signal d'origine, une suite de valeurs instantanées prélevées sur le signal et régulièrement espacées dans le temps.

    A des instants précis, régulièrement espacés, on prélève un échantillon du signal, qui sera représentatif de l'amplitude de celui-ci.

    A la réception, pour retrouver le signal original, on filtre les échantillons par un filtre "passe-bas" à 4000 Hz.

    Le théorème de Shannon montre qu'on ne peut pas reconstituer correctement le signal origine si la fréquence d'échantillonnage n'est pas supérieure à 2 fois la fréquence supérieure du signal à transmettre. Pour la trame MIC la fréquence d'échantillonnage Fe est de 8000 Hz.
    Fe > 2 Fmax

    2.4.1.2 - Quantification

    L'échantillonnage d'un signal BF (Base Fréquence) consiste en une modulation d'un peigne d'impulsions par le signal BF. Le résultat est une modulation d'amplitude de l'impulsion par le signal encore appelée PAM (Pulse Amplitude Modulation). Nous pouvons transmettre ces impulsions modulées en amplitude mais elles seraient très sensibles aux bruits et distorsions.
    Pour reconstituer le signal à la réception, il n'est pas indispensable de transmettre directement ces impulsions. Il suffit de transmettre une information caractérisant l'amplitude de chacune d'entre elles. Pour cette raison, nous quantifions le signal en faisant correspondre à chaque amplitude d'échantillon, l'amplitude la plus voisine d'une suite discrète et finie d'amplitudes "étalons" appelées "niveaux". C'est la valeur de ces niveaux qui, à l'émission, après codage, sera transmise en ligne. Chaque niveau de l'échelle de quantification est caractérisé par un numéro binaire.

    2.4.1.3 - Compression et Codage [5]

    L'opération de compression numérique est une opération exclusivement logique qui consiste à confondre certaines plages obtenues par une quantification linéaire. Cela diminue le nombre de plages et permet de réduire d'éléments binaires de chaque mot à huit.

    On effectue le codage après la compression en définissant la constitution du mot binaire.
    Un mot binaire de 8 bits, correspondant à une plage du signal, est constitué ainsi
    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-3 : Constitution d'un mot binaire

    Le bit S est le bit de signe (« 1 » pour tension positive) Les bits A, B, C représente le numéro de segment de droite.

    Les bits W, X, Y, Z indiquent la plage parmi les 16 plages possibles sur le segment de droite sélectionné.

    Le mot 1 1 0 0 1 0 1 0 représente une impulsion positive de la plage 10 du segment 4.

    RESUME DE TRAITEMENT D'UNE VOIE

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig 1-4 : illustration du traitement d'une voie temporelle

    2.4.2 - Le réseau de connexion à un MIC

    2.4.2.1 - Présentation

    Au niveau du bloc de connexion la liaison entre l'UR et le RCX a la même structure qu'une liaison MIC et est appelée Liaison Réseau (LR).

    • Considérons la conversation entre le demandeur et le demandé représentée sur la figure ci-dessous :

    RXC

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig 1-5 : Réseau de connexion et Unité de Raccordement [4]

    Lorsqu'un abonné demandeur décroche l'UR lui affecte une voie (IT) parmi les 30 dont elle dispose ; supposons que ce soit l'IT4.

    Après avoir testé la ligne du demandé l'UR lui affecte aussi un IT. L'IT 4 étant pris par le demandeur, l'UR en recherche un autre disponible par exemple l'IT 12.

    Lorsque le demandeur parle sa parole emprunte le chemin représenté sur la figure de la page qui suit.

    • L'échantillon arrive dans le RCX en t4 et en sort en t12, comme indiqué sur le schéma suivant :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig 1-6: Réseau de connexion (Avec I T4 affecté au DR et IT12 au DE)

    • Lorsque le demandé parle, sa parole emprunte le chemin indiqué sur la figure ci-dessous. L'échantillon de parole du demandé arrive dans le RCX au t12 et en sort vers le demandé au t4 de la trame suivante.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig 1-7: Réseau de connexion (Chemin emprunté par la voix)

    2.4.2.2 - Réalisation du transfert dans le sens Dr

    Pour réaliser ces transferts le RCX dispose de deux mémoires vives :

    • une mémoire tampon de conversation (MTC)

    • une mémoire de commande (MCM)

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-8 : Réalisation transfert DRDE 1 [4]

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-9 : Réalisation transfert DRDE 2 [4]

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

     Fig1-10 : Réalisation transfert DRDE 3 [4]

    Dans un intervalle de temps de 3,9 µs (un ITi), le dispositif d'adressage de la MTC reçoit 2 adresses :

    • Une adresse d'écriture pour mémoriser un éventuel entrant : exemple, au t12, il faut adresser le mot 12 de MTC pour mémoriser un échantillon entrant, IT12, c'est le cas quand le demandé parle.

    • Une adresse de lecture pour transférer cet échantillon sur l'IT sortant (toujours dans l'exemple choisi, au T12 le dispositif d'adressage de la MTC reçoit aussi l'adresse 4).

    Chaque intervalle de temps de 3,9 µs est donc découpé en deux parties : une partie pour travailler en écriture et une partie pour travailler en lecture.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-11 : intervalle de temps d'une voix

    L'écriture en mémoire de commande se fait lors de l'établissement de la connexion sous le contrôle du bloc de commande comme indiqué sur le schéma suivant :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-12 : Ecriture en MCM [5]

    2.4.2.3 - Réalisation du transfert dans le sens Dé Dr

    On affecte l'IT 5 à l'abonné demandeur, l'IT 24 à l'abonné demandé et on réalise la connexion entre eux. Les 2 schémas qui suivent expliquent comment la connexion se fait.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-13 : Réalisation transfert DEDR 1 [4]

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-14: Réalisation transfert DEDR 2 [4]

    2.5 - ALGORITHME D'ETABLISSEMENT D'UN APPEL 

    Fonction rech_vt()

    Entier rech_vt()

    Debut

    entier i-1

    Pour i=4 à 30 faire

    Si (tab_vt[i]=libre) alors

    Retourner(i)

    Retourner (-1)

    Fin

    Fonction rech_ rnc()

    Entier rech_rnc ()

    Début

    entier i-1

    Pour i=0 à 2 faire

    Si (tab_rnc[i]=dispo) alors

    Retourner(i)

    Retourner (-1)

    Fin

    Fonction affect_vt (VT_choisie : entier)

    Début

    Tab_vt [VT_choisie]affectee

    Fin

    Fonction affect_rnc (RNC_choisi : entier)

    Début

    Tab_rnc [RNC_choisi]occupe

    Fin

    Fonction presel (equip : entier)

    Début

    //test si une VT Libre et affectation (marquage)

    entier VT_DR rech_vt ()

    Si (VT_DR<>-1) alors

    Début

    affect_vt (VT_DR)

    affecte_codec (equip,VT_DR)

    contextes[equip].no_Vt_affectee VT_DR

    Fin

    Sinon retourner rien

    //test si LES DISCRIS sont bonnes:

    Si ((contextes[equip].discri_poste=spe_arrivee)ou(contextes[equip].discri_poste=hors_service))

    Début

    connexion (VT_OCCUP, VT_DR)

    tab_rcx[VT_DR]VT_OCCUP

    Contextes[equip].etat_postefaux_app_deur

    Retourner rien

    Fin

    //test si RNC dispo et affectation:

    entier RNC rech_rnc()

    Si(RNC<>-1)

    Début

    contextes[equip].no_RNC_affecte RNC

    affect_rnc(RNC)

    Fin

    Sinon

    Début

    connexion(VT_OCCUP,VT_DR)

    tab_rcx[VT_DR]VT_OCCUP

    Contextes[equip].etat_postefaux_app_deur

    Retourner rien

    Fin

    //connexion au RNC affecte et envoi d'IN:

    connexion(VT_DR,RNC+1)

    connexion(VT_INVIT,VT_DR)

    tab_rcx[RNC+1]VT_DR

    tab_rcx[VT_DR]VT_INVIT

    //lancement tempo de 20 secondes:

    contextes[equip].time_out(SEC+20)%3600

    contextes [equip].etat_postenum_chif1

    Fin

    Fonction recept_chif1( equipt:entier)

    Début

    //test tempo de 20 secondes:

    clock_t tempocontextes[equipt].time_out

    entier rnccontextes[equipt].no_RNC_affecte

    Si (SEC>=tempo) alors

    Début

    //liberation RNC et cxion a l'occup

    contextes[equipt].no_RNC_affecteNON_AFFECTE

    tab_rnc[rnc]dispo

    connexion(VT_OCCUP,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_OCCUP

    connexion(contextes[equipt].no_VT_affectee,VT_SILEN)

    tab_rcx[rnc+1]VT_SILEN

    contextes[equipt].time_out0

    contextes[equip].etat_postefaux_app_deur

    fin

    Si (etat_joncteur(equipt)=faux) //raccrochage

    debut

    contextes[equipt].no_RNC_affecteNON_AFFECTE

    tab_rnc[rnc]dispo

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee)

    contextes[equipt].no_VT_affecteeNON_AFFECTE

    tab_vt[contextes[equipt].no_VT_affectee]libre

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN

    contextes[equipt].time_out0

    contextes[equip].etat_posterepos

    Fin

    Si(contextes[equipt].no_compose.nb_chif=1) alors

    Début

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN

    contextes[equip].etat_postenum_chif2

    Fin

    Fin

    Fonction recept_chif2 ( equipt:entier)

    Début

    //test tempo de 20 secondes(idem recept_chif1)

    clock_t tempocontextes[equipt].time_out

    int rnccontextes[equipt].no_RNC_affecte

    Si (SEC>=tempo)

    Début

    contextes[equipt].no_RNC_affecteNON_AFFECTE

    tab_rnc[rnc]dispo

    connexion(VT_OCCUP,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_OCCUP

    connexion(contextes[equipt].no_VT_affectee,VT_SILEN)

    tab_rcx[rnc+1]VT_SILEN

    contextes[equipt].time_out0

    contextes[equip].etat_postefaux_app_deur

    Fin

    Si (etat_joncteur(equipt)=faux) alors //raccrochage

    Début

    contextes[equipt].no_RNC_affecteNON_AFFECTE

    tab_rnc[rnc]dispo

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee)

    contextes[equipt].no_VT_affecteeNON_AFFECT

    tab_vt[contextes[equipt].no_VT_affectee]libre

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN

    contextes[equipt].time_out0

    contextes[equip].etat_posterepos

    Fin

    Si (contextes[equipt].no_compose.nb_chif=4) alors

    Début

    contextes[equipt].no_RNC_affecteNON_AFFECTE

    tab_rnc[rnc]dispo

    connexion(contextes[equipt].no_VT_affectee,VT_SILEN)

    tab_rcx[rnc+1]VT_SILEN

    contextes[equipt].time_out0

    contextes[equip].etat_posteselect_de

    contextes[equipt].no_compose.nb_chif0

    Fin

    Fin

    Fonction faux_appel1( equipt :entier)

    Début

    //traitement du faux appel du demandeur:

    Si (etat_joncteur(equipt)=faux) //racrochage

    Début

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN

    tab_vt[contextes[equipt].no_VT_affectee]libre

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee)

    contextes[equipt].no_VT_affecteeNON_AFFECTE

    contextes[equip].etat_posterepos

    contextes[equipt].time_out0

    Fin

    Fin

    Fonction faux_appel2(equipt :entier)

    Début

    //traitement du faux appel du demandé:

    Si (etat_joncteur(equipt)=faux)alors //racrochage

    Début

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN

    tab_vt[contextes[equipt].no_VT_affecteelibre

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee)

    contextes[equipt].no_VT_affecteeNON_AFFECTE

    contextes[equip].etat_posterepos

    contextes[equipt].time_out ←0

    Fin

    Fin

    Fonction renvoi_occ_deur (equipt :entier)

    Début

    connexion(VT_OCCUP,contextes[equ].no_VT_affectee)

    tab_rcx[contextes[equ].no_VT_affectee]VT_OCCUP

    contextes[equ].etat_postefaux_app_deur

    Fin

    Fonction Rech_ vt_ de

    entier rech_vt_de()

    Début

    Entier i-1

    pour i=4 à 30 faire

    Si (tab_vt[i]=libre) alors

    Retourner(i)

    retourner(-1)

    Fin

    Fonction sélect_de ( equipt :entier)

    Début

    //analyse du numero reçu(4 hciffres dans le tableau tab_chif[equipt]du DEUR

    entier mcontextes[equipt].no_compose.tab_chif[0]

    entier ccontextes[equipt].no_compose.tab_chif[1]

    entier dcontextes[equipt].no_compose.tab_chif[2]

    entier ucontextes[equipt].no_compose.tab_chif[3]

    entier norecu1000*m+100*c+10*d+u

    //recherche du n°d'equipement correspondant:

    Entier equ_de=-1

    Pour i=0 à 4 faire

    Début

    Si (norecu=contextes[i].no_de_telephone)alors

    debut

    equ_dei

    Fin

    Fin

    Si(equ_de=-1) alors

    renvoi_occ_deur(equipt)

    sinon

    Début

    //on a trouve le numero d'equipementdu DE(mis dans equ_de)

    si (contextes[equ_de].etat_poste<>repos) alors

    renvoi_occ_deur(equipt)

    Sinon

    Début Si((contextes[equ_de].discri_poste=spe_depart)ou(contextes[equ_de].discri_poste=hors_service)) alors

    renvoi_occ_deur(equipt)

    sinon

    debut

    entier VT_DErech_vt_de()

    si(VT_DE=-1) alors

    renvoi_occ_deur(equipt)

    sinon

    Début

    tab_vt[VT_DE]affectee contextes[equ_de].etat_posteson_de

    contextes[equipt_de].etat_postera_deur

    affecte_codec(equipt,VT_DE)

    contextes[equ_de].no_VT_affecteeVT_DE

    contextes[equ_de].no_VT_du_distantcontextes[equ_de].no_VT_affectee

    contextes[equ_de].no_VT_du_distantVT_DE

    connexion(VT_RETAP, contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_RETAP

    contextes[equipt].time_out(SEC+120)%3600 //2mn max de sonnerie

    contextes[equ_de].time_out0

    Fin

    Fin

    Fin

    Fin

    Fin

    Fonction sonnerie (equipt : entier)

    Début

    Si(contextes[equipt].time_out=1) alors

    Début

    mettre_en_sonnerie(equipt)

    Fin

    si(contextes[equipt].time_out=20) alors

    Début

    arret_sonnerie(equipt)

    Fin

    Si(contextes[equipt].time_out>=60) alors

    Début

    contextes[equipt].time_out0

    Fin

    Fonction ret_appel( equipt :entier)

    Début

    //a)raccrochage du DEUR en cours de sonnerie

    Si(etat_joncteur(equipt)=faux)alors //raccrochage DEUR

    Début

    entier VT_DEcontextes[equipt].no_VT_du_distant

    entier equipt_de-1

    Pour(entier i0,i<NB_EQUIPEMENT)

    Début

    Si (contextes[i].no_VT_affectee=VT_DE)

    equipt_dei

    Fin

    Si (equipt_de<>-1)alors

    Début

    arret_sonnerie(equipt_de)

    tab_vt[contextes[equipt_de].no_VT_affectee]libre

    desaffecte_voie_de_codec(contextes[equipt_de].no_VT_affectee)

    contextes[equipt_de].no_VT_affecteeNON_AFFECTE

    contextes[equipt_de].no_VT_du_distantNON AFFECTE

    contextes[equipt_de].time_out0

    contextes[equipt_de].etat_posterepos

    Fin

    sinon

    mess_test"Pas trouvé le DE en sonnerie!!"

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN

    tab_vt[contextes[equipt].no_VT_affectee]libre

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee)

    contextes[equipt].no_VT_affecteeNON_AFFECTE

    contextes[equipt].no_compose.nb_chif0

    pour entier j=0 à 4faire

    contextes[equipt].no_compose.tab_chif[j]0

    contextes[equip].etat_posterepos

    contextes[equipt].time_out0

    //b)fin tempo de 2 minutes

    Si (SEC>=contextes[equipt].time_out)alos

    Début

    entier VT_DEcontextes[equipt].no_VT_du_distant

    entier equipt_de-1

    Pour entier i=0 à i<NB_EQUIPEMENT faire

    Début

    Si (contextes[i].no_VT_affectee=VT_DE)

    equipt_dei

    Fin

    Si(equipt_de<>-1)alors

    Début

    arret_sonnerie(equipt_de)

    tab_vt[contextes[equipt_de].no_VT_affectee]libre

    desaffecte_voie_de_codec(contextes[equipt_de].no_VT_affectee)

    contextes[equipt_de].no_VT_affecteeNON_AFFECTE

    contextes[equipt_de].no_VT_du_distantNON AFFECTE

    contextes[equipt_de].time_out0

    contextes[equipt_de].etat_posterepos

    Fin

    Sinon

    mess_test="Pas trouvé le DE en sonnerie!!"

    connexion(VT_OCCUP,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_OCCUP

    contextes[equipt].time_out0

    contextes[equipt].etat_postefaux_app_deur

    Fin

    //c)tester si decrochage du demendé en sonnerie

    entier VT_DEcontextes[equipt].no_VT_du_distant

    entier equipt_de-1

    pour i=0 à i<NB_EQUIPEMENT faire

    Début

    Si (contextes[i].no_VT_affectee=VT_DE) alors

    equipt_dei

    Fin

    Si (equipt_de=-1) alors

    Début

    connexion(VT_OCCUP,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_OCCUP

    contextes[equipt].time_out0

    contextes[equipt].etat_postefaux_app_deur

    mess_test"Pas trouvé le DE en sonnerie!!"

    Fin

    Sinon

    Début

    Si (etat_joncteur(equipt_de)=vrai)

    Début

    arret sonnerie(equipt_de)

    contextes[equipt_de].time_out0

    affecte_codec(equipt_de,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN connexion(contextes[equipt].no_VT_affectee,contextes[equipt].no_VT_du_distant) connexion(contextes[equipt].no_VT_du_distant,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]contextes[equipt].no_VT_du_distant

    tab_rcx[contextes[equipt].no_VT_du_distant]contextes[equipt].no_VT_affectee

    contextes[equipt].etat_posteconv_deur

    contextes[equipt].etat_posteconv_de

    contextes[equipt].time_out0

    tab_tax[equipt]+ //une unite de taxe a la mise en communication

    Fin

    Fin

    Fonction racc_deur( equipt :entier)

    Début

    Si (etat_joncteur(equipt)=faux)

    Début

    entier VT_DEcontextes[equipt].no_VT_du_distant

    entier equipt_de-1

    pour entier i=0 à i<NB_EQUIPEMENT faire

    Début

    Si (contextes[i].no_VT_affectee=VT_DE)

    equipt_dei

    Fin

    Si (equipt_de<>-1)

    Début

    connexion(VT_OCCUP,contextes[equipt_de].no_VT_affectee)

    tab_rcx[contextes[equipt_de].no_VT_affectee]VT_OCCUP

    contextes[equipt_de].no_VT_du_distantNON_AFFECTE

    contextes[equipt_de].time_out0

    contextes[equipt_de].etat_postefaux_app_deur

    Fin

    Sinon

    mess_test"Pas trouvé le correspondant DE!!"

    //puis liberer tout du coté DEUR

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN

    tab_vt[contextes[equipt].no_VT_affectee]libre

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee

    contextes[equipt].no_VT_affecteeNON_AFFECTE

    contextes[equipt].no_VT_du_distantNON AFFECTE

    contextes[equipt].time_out0

    contextes[equip].etat_posterepos

    Fin

    Fin

    Fonction racc_de( equipt : entier)

    Début

    Si (etat_joncteur(equipt)=faux)alors

    Début

    //trouver le DEUR et renvoyer celui-ce en occupation

    entier VT_DEURcontextes[equipt].no_VT_du_distant

    entier equipt_deur-1

    pour entier i=0 à i<NB_EQUIPEMENT faire

    Début

    Si (contextes[i].no_VT_affectee=VT_DEUR)

    equipt_deuri

    Fin

    si(equipt_deur<>-1)

    debut

    //renvoi en occupation de DEUR

    connexion(VT_OCCUP,contextes[equipt_deur].no_VT_affectee)

    tab_rcx[contextes[equipt_deur].no_VT_affectee]VT_OCCUP

    contextes[equipt_deur].no_VT_du_distant=NON_AFFECTE

    contextes[equipt_deur].time_out0

    contextes[equipt_deur].etat_postefaux_app_deur

    Fin

    Sinon

    mess_test"Pas trouvé le correspondant DEUR!!"

    // liberer tout du cote DE

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee)

    tab_rcx[contextes[equipt].no_VT_affectee]VT_SILEN

    tab_vt[contextes[equipt].no_VT_affectee]libre

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee)

    contextes[equipt].no_VT_affecteeNON_AFFECTE

    contextes[equipt].no_VT_du_distantNON AFFECTE

    contextes[equipt].time_out0

    contextes[equip].etat_posterepos

    Fin

    Fin

    Programme principale

    Début

    pour entier eq=0 à eq<NB_EQUIPEMENT faire

    Début

    etat←contextes[eq].etat_poste

    selon que (etat)

    Début

    Cas repos:

    Si (etat_joncteur(eq)=vrai)

    contextes[eq].etat_poste←preselection

    Cas preselection:

    presel(eq)

    Cas num_chif1:

    recept_chif1(eq)

    Cas num_chif2:

    recept_chif2(eq)

    Cas faux_app_deur:

    faux_appel1(eq)

    Cas select_de:

    selection(eq)

    Cas ra_deur:

    ret_appel(eq)

    Cas son_de:

    sonnerie(eq)

    Cas conv_deur:

    racc_deur(eq)

    Cas conv_de:

    racc_de(eq)

    Cas faux_app_de:

    faux_appel2(eq)

    Fin

    Fin

    Chapitre 3 :

    ETUDE de

    L'AUTOCOMMUTATEUR pédagogique TEMPOREL ETD 500

    3.1- PRESENTATION

    L'autocommutateur temporel ETD500 est un matériel pédagogique destiné à l'initiation à la commutation téléphonique temporelle.

    L'ETD500 utilise la transmission de la parole par modulation par impulsions codées

    (MIC). Le signal analogique de la parole est échantillonnée à des intervalles de temps réguliers. La valeur analogique est codée en numérique sous forme d'un mot 8 bits, qui est ensuite transmis en série sur une ligne. A la réception, le mot binaire est reconstitué, converti en analogique et un filtre passe bande permet de restituer le signal d'origine.

    La bande passante téléphonique est comprise entre 300 et 3400 Hz.

    Le théorème de Shannon impose un échantillonnage au moins supérieur au double de la fréquence la plus élevée, soit 6800 Hz.

    En général, la fréquence d'échantillonnage choisie est de 8 KHz, soit une période de

    125 µs. Donc Il faut 15,5 µs pour un vit, soit une fréquence de 64,5 KHz.

    La rapidité des circuits intégré permet de travaillé à des fréquences plis élevées,

    Permettant un taux de transmission plus grand, et une durée de transmission plus basse. Ce qui permet d'utiliser des temps morts entre les mots, pour transmettre d'autres suites d'impulsions correspondant à d'autres communications. Cela permet de réaliser le multiplexage de plusieurs accès sur le même bus grâce au procédé de répartition dans le temps.

    Les caractéristiques de l'ETD500 :

    • RCX à 32 voies temporelles

    • 4 équipements comprenant :

    • 1 SLIC (Subscriber Line Interface Circuit),

    • 1 générateur de sonnerie,

    • 1 générateur de tonalité,

    • 1 décodeur DTMF,

    • 2 Codecs réalisé avec des COFIDEC,

    • 3 adaptateurs BNC 2 mm,

    • 1 alimentation uniquement générant les différentes tensions,

    • Un microsystème gérant le fonctionnement de l'autocom,

    • Une liaison intercom permettant de faire un réseau en anneau de plusieurs autocom.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-15 : ETD500 (RCX et UR) [1]

    3.2- DESCRIPTION MATERIELLE DE LA MAQUETTE

    3.2.1 - Alimentation Electrique

    Le bloc alimentation gère l'alimentation de l'etd500 à partir d'une alimentation 12 V

    AC ou DC.

    L'interrupteur permet de mettre sous tension l'ETD500.

    La présence tension est repérée par une led.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'
    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-16 : Alimentation ETD500 [1]

    3 .2.2 - Liaison avec un ordinateur PC

    La liaison avec l'ordinateur P.C. s'effectue par l'intermédiaire d'une liaison série de type RS232.

    On relie le cordon série entre la prise série et un port série du P.C.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-17 : Prise RS232 [1]

    3.3 - BASE DE TEMPS

    A partir d'une horloge de 8.192 MHz, la base de temps génère tous les signaux d'horloge nécessaires au fonctionnement de l'autocommutateur.

    La base de temps est réalisée par un EPLD.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-18 : Base de temps [1]

    A partir de l'horloge hw à 2.048 MHz, on en déduit les horloges suivantes :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-19 : Chronogrammes des horloges [1]

    Pour écrire et lire dans la MTC, il faut les signaux h1 et h2, dont le chronogramme est le suivant :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-20 : Les horloges

    Chaque intervalle de temps, est décomposé en 8 intervalles de temps W1 à W8.

    Le chronogramme suivant le montre sur l'it0 :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-21: Horloge HW [1]

    3.4 - LE RESEAU DE CONNEXION : RCX

    Le réseau de connexion permet de connecter l'une des 32 voies temporelles d'une ligne réseau entrante (LRE) avec une quelconque voie temporelle d'une ligne du réseau sortante (LRS).

    Le réseau de connexion est composé de 2 mémoires :

    • Une mémoire de signal notée MTC,

    • Une mémoire d'adresse notée MCM.

    La mémoire MTC a autant de case mémoire qu'il y a d'intervalle de temps. La mémoire

    MCM est de 32 octets.

    La mémoire MCM doit contenir autant de case mémoire qu'il y a d'intervalle de temps.

    La mémoire MCM est 32 x 5 bits.

    Le schéma fonctionnel du RCX est le suivant :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-22 : RCX ETD500 [1]

    Les signaux T [1..5] émis par la base de temps, définissent les adresses 0 à 31 des voies

    Temporelles

    L'adressage de la MTC s'effectue en 2 temps dépendant du signal w1 :

    1 : l'adresse est égal à T [1..5],

    0 : l'adresse est délivré par la mémoire de commande MCM

    L'adresse de la MCM s'effectue en 2 temps dépendant du signal ADR :

    1 : l'adresse de la MCM est égal au registre Adresse MCM,

    0 : l'adresse est égal à T [1..5].

    Le RCX est interfacé avec le microsystème à travers 4 registres :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    3.5 - LE MICRO-SYSTEME

    Le microsystème gère le fonctionnement de l'autocommutateur, configure l'ETD500

    Le microsystème de l'ETD500 est réalisé par la carte EID210, qui est une carte à base

    de 68332 de chez Motorola.

    L'adresse de base sur le buspc104 de l'autocom est 0xB30000.

    3.5.1 - Gestion du RCX

    La gestion du RCX se fait par l'intermédiaire du bus PC104.

    Le microsystème écrit dans chaque case de la MCM, le numéro du MIC.

    3.5.1.1 - Adresse MCM

    L'adresse du registre est 0xB30082

    Le registre est accessible en écriture

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    3.5.1.2 - Donnée MCM

    L'adresse de base est 0xB30083

    Le registre est accessible en lecture et écriture :

    En lecture, il correspond à lecture MCM,

    En écriture, il correspond à info MCM.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    3.5.1.3 - Registre de contrôle

    L'adresse de base est 0xB30080

    Le registre est accessible en écriture uniquement

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Avec

    ECRITURE : commande d'écriture de la MCM à l'adresse MCM la valeur info MCM

    LECTURE : commande de lecture de la MCM à l'adresse MCM

    3.5.1.4 - Registre de statut

    L'adresse de base est 0xB30080

    Le registre est accessible en lecture uniquement

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    ECRITURE : commande d'écriture de la MCM à l'adresse MCM la valeur info MCM

    LECTURE : commande de lecture de la MCM à l'adresse MCM.

    ECR : état de l'écriture dans la MCM

    0 : écriture non effectuée,

    1 : écriture effectuée.

    LECT : état de la lecture dans la MCM

    0 : lecture non effectuée,

    1 : lecture effectuée.

    3.5.1.5 - Le canal sémaphore

    Le canal sémaphore est associé à la voie temporelle 16

    L'adresse du registre d'écriture sur le MIC sortant sur la voie 16 est 0xB30085 (accessible en écriture).

    L'adresse du registre de lecture sur le MIC entrant sur la voie 16 est 0xB30086 (accessible en lecture).

    Les registres du canal sémaphore sont sur 8 bits.

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    3.5.2 - Gestion des équipements

    Sur l'ETD500, il y a 2 types d'équipements :

    • Les COFIDECs,

    • Les SLICS.

    Les cofidecs sont gérés par le bus pc104.

    Les slics sont gérés par une liaison série SPI en mode daisy chaîne

    3.5.2.1 - Les cofidecs

    Registre d'affectations de voie temporelle

    Ces registres sont accessibles en écriture

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    3.5.2.2 - Les slics

    Pour commander les leds de visualisation de l'état des slics

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Avec

    Ei : état du combiné

    0 : led allumée.

    1 : led éteinte.

    Si : état de la sonnerie

    Avec i le numéro de l'équipement

    3.5.3 - Gestion de la liaison intercom

    La liaison intercom est gérée à travers le bus PC104. L'adresse de base est 0xB30048, le registre est accessible en écriture uniquement.

    INTER

    HDB3

    X

    X

    X

    X

    X

    X

    Avec :

    INTER : 0 : intercom non validé,

    1 : intercom validé

    HDB3 : 0 : transmission N-RAIL

    1 : transmission en mode HDB3.

    Remarque : En mode intercom, l'attribution des voies temporelles est la suivante :

    • IT 0 : voie temporelle système

    • IT 1 à IT 15 : communication locale

    • IT 16 : canal sémaphore

    • IT 17 à IT 31 : communication distante

    3.6 - LES CODECS

    Les codecs sont réalisés avec des COFIDEC MC14LC5480 de chez Motorola

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-23 : Codec ETD500

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Frame synchronisation est une horloge de 8KHz qui synchronise le cofidec. Le mode utilisé dans l'ETD500 est le mode short frame Sync.

    Le schéma fonctionnel du cofidec est le suivant :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-24 : Cofidec

    3.7 - LES EQUIPEMENTS

    Les équipements sur l'ETD500 sont réalisés par des composants Proslic de SILICON

    LABORATORIES.

    Il intègre :

    • Un SLIC : (réalise la fonction « BORSHT »)

    • Batterie : fourniture du courant continu sur la ligne, pour faire fonctionner le téléphone,

    • Overload protection : protection des surtensions pouvant venir de la ligne,

    • Ringing : envoi du courant de sonnerie,

    • Supervision : détection des décrochages et raccrochages,

    • Hybrid : passage 2 fils-4 fils avec séparation su sens aller et retour de la parole,

    • Transmission : adaptation d'impédance, amplification, suppression du bruit, atténuation d'écho.

    • Un décodeur (DTMF) : effectue la reconnaissance de la numérotation à fréquences vocales

    • Un CODEC,

    • Un générateur de sonnerie,

    • Un générateur de tonalité.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-25 : Equipement (URA)

    Avec

    • LRE : Mic entrant

    • LRS : Mic sortant

    • FS : Frame synchronisation

    • Etat combiné : combiné raccroché ou décroché

    • Sonnerie : état sonnerie

    3.8 - GENERATEUR DE SONNERIE

    Le générateur de tonalité 2 ne peut pas être utilisé lorsque le générateur de sonnerie est activé.

    3.9 - LIAISON INTERCOM

    L'ETD500 dispose en option d'une interface liaison intercom.'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig1-26 : Liaison inter commutateur [1]

    Avec :

    • HE : horloge émission

    • ME : Mic distant émission

    • HR : horloge réception

    • MR : Mic distant réception.

    • SYN : Signal de synchronisation trame paire trame impaire

    3.10 - FONCTIONS LOGICIELS

    Les registres de la carte ETD500 accessible par le bus PC104 sont déclarer dans le

    Fichier « ETD500.h »

    Ainsi on a :

    Le fichier de la bibliothèque de gestion du rcx qui est dans le fichier « rcx.c »

    Le module qui gère la liaison Spi est dans le fichier « spi.c ».

    Le module permettant la gestion des proslic SI3210 et les registres du si3210 sont déclaré dans le fichier « proslic.h »

    Le module de gestion des abonnes qui se trouve dans le fichier <<abonne.c>>

    2ème PARTIE :

    Programmes du logiciel

    INTRODUCTION

    En informatique un logiciel (Un logiciel ou une application est un ensemble de programmes, qui permet à un ordinateur ou à un système informatique...) ou une application est un ensemble (En théorie des ensembles, un ensemble, désigne intuitivement une collection d'objets (que l'on appelle éléments...) de programmes, qui permet à un ordinateur ou à un système informatique (L'informatique désigne l'automatisation du traitement de l'information par un système, concret (machine) ou abstrait....) d'assurer une tâche ou une fonction bien déterminée. Notre logiciel est un didacticiel c'est-à-dire un logiciel d'enseignement qui permet de prendre en main l'ETD500 mais aussi de jouer la fonction de l'unité de commande de ce dernier.

    Il va permettre le pilotage du central pédagogique en mode manuel, automatique ou même de réaliser des travaux pratiques d'informatique industrielle appliquée à la commutation temporelle.

    Fonctionnement en mode manuel, il permet :

    • Affectation d'une adresse mémoire MTC au MIC sortant,

    • Affectation d'un Intervalle Temporel MIC à la liaison inter commutateur,

    • Attribution d'un Intervalle Temporel MIC à un COFIDEC (entrée analogique directe),

    • Attribution d'un Intervalle Temporel MIC à un SLIC d'abonné,

    Fonctionnement en mode automatique, il permet :

    • Affectation d'un numéro d'abonné à un équipement d'un préfixe « MC » à un autocommutateur,

    • Affectation d'un palier de taxe à un abonné (forfaitaire, fonction de la durée, N° gratuit, distant),

    • Consultation du compteur de taxation,

    • Modification des caractéristiques d'une ligne d'abonné,

    • Réservation d'un Intervalle Temporel MIC (Blocage manuel),

    • Suppression d'un abonné,

    • Transfert d'un compte abonné d'un numéro d'équipement à un autre équipement (du même central).

    Informatique industrielle :

    Le logiciel est structuré sous forme de modules, il est possible de réécrire chaque module au titre de travaux pédagogiques, de réaliser des travaux pratiques de création de nouveaux services.

    Le langage de programmation que nous avons utilisé est le C++ qui est d'ailleurs recommandé par le constructeur de l'équipement

    Chapitre 1 :

    Les bibliothèques et les Programmes compilables

  • - LES BIBLIOTHEQUES

  • Une bibliothèque est un ensemble de fonction et/ou de procédures, ayant de préférence un point commun. Les fichiers contenant les bibliothèques en C++ ont l'extension « .h »

    1.1.1 - Bibliothèque T2000.h

    La bibliothèque « T2000.h » définit les caractéristiques principales du commutateur.

    En d'autres terme, cette bibliothèque de définit les caractéristiques générales de l'autocommutateur, la plupart des variables y sont déclarées.

    Cette bibliothèque contient aussi quelques fonctions et des types prédéfinis

    Exemple de quelques variables déclarées et fonctions ou types prédéfinis :

    #define NB_MIC  xxx pour déclarer le nombre de mic de l'autocom

    # define NB_CHIF_NUM xxx nombre de chiffres du numéro composé

    #define RING xxx temps en sec de sonnerie

    Tnum : est un type prédéfini qui compte le nombre de chiffre reçu et permet leur stockage

    Discris : caractéristique abonnement usager

    Pour voir le programme complet « T2000.h » référez vous à l'annexe N°1

    1.1.2 - Bibliothèque Interf.h

    INTERF.h définit les adresses d'entrées-sorties du PC (UC) vers l'autocommutateur ETD500, ainsi que la liste des fonctions matérielles pour piloter le commutateur.

    Pour voir le programme « INTERF.h » aller à l'annexe N° 2

    1.1.3 - Bibliothèque Modules.h

    Elle Contient les constantes et fonctions nécessaire au programme « modules.cpp ».Définit les vecteurs d'interruption horloge.

    Pour voir le programme « MODULES.H » aller à l'annexe N°3

    1.1.4 - Bibliothèque Abonne.h

    La bibliothèque Abonne.h Contient des fonctions qui permettent l'enregistrement des abonnés et leur gestion.

    Pour voir le programme « ABONNE.H »

    Aller à l'annexe N° 4

    1.1.5 - Bibliothèque sujet.h

    Dans cette dernière se retrouvent les fonctions et constantes utiliser dans les modules « SUJETx.CPP » (sujet 4 à 9).Ces fonctions et constantes sont ajoutées au fur et à mesure qu'on écrit les programmes « SUJETx.CPP »

    Annexe N°5 pour voir la bibliothèque SUJET.H

    1.2 - LES PROGRAMMES COMPILABLES

    1.2.1 - Les sous-programmes

    1.2.1.1 - Interf.CPP

    Ce programme permet de prendre en main le matériel autrement dit il gère les interfaces.

    Il permet le contrôle du PPI, l'activation et la désactivation des codecs,

    Permet la mise en sonnerie d'un équipement …

    Annexe N° 6 pour voir le programme « interf.CPP »

    1.2.1.2 - Modules.CPP

    Il contient la définition de fonctions appelées par le programme principal et les programmes d'interruptions.

    Annexe N°7 pour voir le programme « Modules.CPP »

    1.2.1.3 - SujetX.CPP

    Les programmes « SUJETx.CPP » (sujet 4 à 9) sont des modules qui permettre le traitement de l'établissement d'un appel local donc ils ont interdépendants des uns des autres.

    • Sujet4.CPP

    Il sert à faire le test de la ligne d'abonné et permet la détection du décrochage (vérification de l'état de boucle).Il permet aussi la présélection c'est-à-dire l'affectation des voix temporelles

    Voir Annexe N°8

    • Sujet5.CPP

    Ce programme permet de faire un test raccrochage du Demandeur, la désactivation de la temporisation et la réception des chiffres composés par ce dernier s'il n'a pas raccroché.

    Voir Annexe N°9

    • Sujet6.CPP

    Il correspond aux traitements à l'état « faux appel » du demandeur et du demandé.

    • Etat faux appel Demandeur : Si on détecte le raccroche du côté demandeur, on efface la connexion à la tonalité d'occupation dans le réseau de connexion et on met à jour la mémoire image RCX. On met ensuite en « Stand-by » le Cofidec du demandeur et on met à jour la table d'occupation des voies. On passe à l'état repos (état de boucle =0).On réinitialise son texte d'équipement.

    • Etat faux appel Demandé : Si on détecte le raccroche du côté demandé ; on effectue les mêmes actions que le cas de l'état « faux appel Demandeur ».

    Voir Annexe N°10

    • Sujet7.CPP

    Il décrit la fonction sélection équipement appelée par le programme principal. Pour cela il utilise la bibliothèque « interf.h » .Si on se confère aux fonctions de l'unité de commande, ce programme joue le rôle de la fonction traduction. A un Numéro de Désignation il associe un Numéro d'équipement.

    Voir Annexe N°11

    • Sujet8.CPP

    Le sujet8.CPP utilisé par le programme principal, joue le rôle de la fonction sonnerie (équipement) et retour d'appel (équipement).

    Voir Annexe N°12

    • Sujet9.CPP

    Il traite la conversation entre le demandeur et le demandé dans les 2 sens et assure aussi la fonction taxation.

    Voir Annexe N°13

    1.2.2 - Le programme principal : COMLOCAL.CPP

    Le but ce programme est l'établissement d'une communication locale. Pour cela le logiciel va scruter en boucle les mots d'états des contextes d'équipements, et en fonction de chaque mot d'état il va effectuer une série de tests et/ou d'action en utilisant les modules (programmes) décrits plus haut. L'obtention du fichier COMLOCALE.exe intervient après avoir fait le lien entre les différents sous programmes et le programme principal nommé « COMLOCALE.CPP.

    Logiquement on obtient ce graphique

    Comlocale.exe

    Comlocale.cpp

    Modules.cpp

    Interf.cpp

    Sujet4.cpp

    Sujet5.cpp

    Sujet6.cpp

    Sujet7.cpp

    Sujet8.cpp

    Sujet9.cpp

    Voir Annexe N°14

    Chapitre 2 :

    Exécution du logiciel :

    Avant toute chose il faut :

    • Alimenter la maquette

    • Brancher les postes

    • Relier la maquette au PC grâce au port « COM »

    • lancer le logiciel, en double-cliquant sur l'icône du fichier exécutable (le logiciel ne pourra pas s'exécuter tant que l'ETD500 n'est pas détecté).

    2.1 - DEMARRAGE DU LOGICIEL

    Si la maquette est détectée on à l'image suivante qui illustre que le mode par défaut est « Manuel » que nous pouvons changer en mode automatique.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-1 : ETD500 non initialisé

    Comme on peut le constater les postes sont en état « initialisation », seuls les IT0 et IT16 sont occupés par le système, les autres sont libres.

    2.2 - CHOIX DU PORT « COM »

    Il convient de configurer l'autocommutateur si on veut établir la communication.

    Par défaut le port « COM » utilisé est « COM1 » mais si votre PC contient plusieurs port COM il est nécessaire de préciser sur quel port, l'ETD500 est branché comme l'indique l'image ci-dessous

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-2 : Choix port COM

    2.3- CREATION DES ABONNES

    Après le choix du port utilisé, nous allons créer les abonnés. Pour cela on va dans « Edition » puis « Annuaire »

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-3 : Création d'abonnés

    2.3.1- Annuaire

    On aura l'image suivante en cliquant sur « Annuaire »

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-4 : Annuaire (vide)

    2.3.1.1 Editer les abonnés

    La liste d'abonnés est vide, on clique ensuite sur « Ajouter » pour configurer le premier abonné, on aura l'illustration suivante :

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-5 : Edition nom Abonné

    Sur l'image on voit déjà les options qu'on peut configurer, à savoir le Nom de l'abonné, le N° d'équipement (adresse physique), le N° de désignation (N° d'abonné), catégories de ligne (discrimination) et type de taxation.

    On saisit le « Nom » de l'abonné, ici « Mousto » tout temps en prenant la précaution de lui affecter un N° physique ici « 0 » (Slic 0)

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-6 : Affectation d'un numéro d'équipement

    2.3.1.2 Choix du plan de numérotation, caractéristique de la ligne et type de taxation

    Il est important d'opter un plan de numérotation avant d'affecter les numéros de désignation.

    L'abonné « Mousto » aura pour numéro «0010 », choisir les caractéristique de l'abonné ainsi que le type de taxation correspondant.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-7 : Affectation numéro d'Abonné

    On valide pour prendre créer notre abonné.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-8 : Annuaire avec un abonné

    On effectue la même procédure pour créer les autres abonnés

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-9 : Annuaire (Avec les 4 abonnés)

    On valide l'annuaire pour le prendre en compte. On peut sauvegarder notre annuaire ainsi créer et le télécharger à chaque fois qu'on aura besoin.

    Après validation de l'annuaire il faudrait initialiser le central, et cela peut se faire de façon « manuelle» ou de façon « automatique ».

    2.4 - INITIALISATION DU PROGRAMME

    La figure suivante montre l'initialisation en cours du central

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-10 : Initialisation du central

     

    2.5 - DEMARRAGE COMPLET DE L'AUTOCOMMUTATEUR

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-11 : Démarrage ETD500 (Abonnés sont en état raccrochés)

    L'image ci-dessus indique que l'autocommutateur est prêt à fonctionner. En effet on peut constater que les postes sont passés au vert ce que confirme l'UR en indiquant « Raccrocher » comme état des postes. Le réseau de connexion quand à lui indique que tous les IT sont libres sauf les IT0 et IT16 bloqués par le système, respectivement pour la synchronisation et la signalisation.

    2.6 - DETECTION DU DECROCHAGE ET AFFECTATION DES IT

    Que se passe t-il visiblement quand un abonné décroche son combiné ?

    Selon ses caractéristiques, le réseau de connexion lui affecte par défaut le premier « IT » disponible.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-12 : Affectation d'un IT à un Abonné

    L'abonné affecté au SLIC 2 a décroché, l'IT 1 qui est le premier sur la liste des IT libre l'a été affecté. Son état passé de l'état « Raccrocher (25)» à l'état « dialtone (2) » tonalité d'invitation à numéroter.

    3.7 - SONNERIE

    Si un abonné quelconque appelle un autre que doit-on observer ?

    Par exemple sur l'image suivante l'abonné affecté au « SLIC1 » sollicite celui du « SLIC0 », L'IT1 et l'IT2 sont respectivement occupés par le demandeur et le demandé. Le demandeur sur l'image est en « ETAT 13 » c'est-à-dire en « retour d'appel » alors que le combiné du demandé sonne « ETAT 32 ».

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-13 : Un abonné en état sonnerie

    3.8 - CONVERSATION

    Si l'abonné affecté au « SLIC0 » décroche son combiné, le demandeur et le demandé changent d'état et passent tous à l'état « décroché  (26) » qui correspond à la conversation. Les ITs sont maintenus jusqu'à la libération de la liaison.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Fig2-14 : Conversation

    CONCLUSION GENERALE

    Dans le cadre du travail qui nous a été confié consistant à étudier et à programmer l'autocommutateur pédagogique temporel : ETD500, nous avons été amenés dans un premier temps à faire une étude théorique qui traite des concepts généraux de la commutation temporelle en général et de la description matérielle de l'autocommutateur pédagogique ETD500

    Dans un deuxième temps il a fallu réaliser une communication locale avec l'ETD500, s'est essentiellement basée sur l'élaboration des programmes nous permettant d'établir une communication locale avec la maquette ETD 500 dans un langage de programmation spécifique le C++.

    En effet durant notre travail de recherche nous avons eu a complété et à écrire les codes sources des étapes et le programme principal permettant l'établissement d'une communication locale ainsi que les bibliothèques permettant de faire fonctionner ces programmes a partir des directives qui nous ont été donné dans le document pédagogique de l'autocommutateur ETD 500. A noter aussi l'élaboration d'un algorithme permettant de décrire les étapes d'établissement (présélection, réception des chiffres, analyse, etc.) d'une communication locale selon la maquette.

    Les résultats que nous avons obtenus à la fin de nos travaux de recherches ne sont pas négligeables. En effet toutes les bibliothèques sont sans erreur et ainsi que certains modules.

    Dans l'accomplissement de nos travaux c'est-à-dire l'établissement de la communication locale à travers la maquette ETD 500 nous nous sommes confrontés à pas mal de problèmes. Les problèmes sont plus de l'ordre logistique, les outils de programmation qu'on utilisait, pour la plupart ne prenaient pas en compte certaines bibliothèques. D'autres problèmes sont liés du fait que l'école n'a pas les documents des dernières mises à jour de l'équipement.

    Résultat d'une réflexion et d'une expérience pédagogique de plusieurs années, le commutateur ETD500 est utilisé en enseignement. Il favorise l'assimilation des connaissances acquises lors des cours magistraux d'introduction aux télécommunications. L'architecture matérielle du commutateur peut évoluer grâce au circuit logique reconfigurable qui héberge les fonctions essentielles. Les autocommutateurs ETD 500 sont équipés d'interfaces réseau standards ETSI/UIT-T (notamment G703, I431 et G732), il est donc possible de raccorder jusqu'à 99 autocommutateurs sur une structure anneau. Cette structure permet d'étudier les connexions inter autocommutateurs or nous, nos travaux de recherche se sont focalisés sur « l'établissement d'une communication locale », donc à l'avenir ceux qui travailleront sur cet équipement (notamment les populations d'ingénieur technique, téléinformatique et conception) pourraient développer des programmes permettant les appels distants c'est-à-dire inter autocommutateur, ils pourront aussi développer des programmes réalisant les certaines fonctions que nous n'avons pas abordé telles que : la conférence à trois, mise en attente, etc.

    Pour pouvoir atteindre ces objectifs et orientations cités précédemment nous pouvons suggérer a l'ESMT de :

    • S'acquérir les mises à jour de la documentation des programmes de la maquette, car ceci a été l'un de nos problèmes principaux rencontrés et de tous les outils nécessaires permettant une bonne exploitation de la maquette pédagogique.

    • Renforcer l'enseignement de la programmation au cycle IGTT technique.

    Au terme de nos travaux de recherche essentiellement basés sur la commutation temporelle, vu les outils que nous avons utilisés pour réaliser notre travail, nous concluons en affirmant avec certitude que de nos jours « les télécommunications et l'informatique sont inséparables.»

    Bibliographie

    [1] ETD 500 010 : Guide technique

    [2] ETD 500 030 : Manuel de référence « Principes de la commutation numérique »

    [3] ETD 500 040 : Manuel de travaux pratiques

    [4] COURS ESMT : BASES de la COMMUTATION TEMPORELLE (BCT), année 2007

    [5] COURS ESMT : BASE de TRANSMISSION NUMERIQUE (BTNU)

    [6] Claude Delannoy (2004), « Programmer langage en C++ », N°9138, 5ieme édition

    Webographie :

    [7] http://www.didalab-didactique.fr/2008/achat/produit_details.php?id=572

    [information sur ETD500] Consulté en Juillet 2009

    [8] www.patrimoine-de-france.org/mots-neo-0-2721.html [Commutation]Consulté en Juillet 2009

    [9] http://www.aconit.org/histoire/colloques/chi04 [historique des autocoms] Consulté en

    Juillet 2009

    [10] http://fr.wikipedia.org/wiki/Compression_de_donn%C3%A9es [compression]

    http://fr.wikipedia.org/wiki/Num%C3%A9risation [Numérisation]

    http://fr.wikipedia.org/wiki/Commutateur_t%C3%A9l%C3%A9phonique

    [commutateur] consulté en Juillet 2009

    ANNEXES :

    ANNEXE 1 : Programme en C++ de la bibliothèque « T2000.H »

    //fichier:"t2000.h"

    #ifndef t2000

    #define t2000

    #include <iostream.h>

    #include <time.h>

    //------------------------------------

    // caractéristiques générales

    //------------------------------------

    #define NB_MIC 1

    #define VT_SILEN 0 //Mic ‚mission

    #define VT_INVIT 1

    #define VT_RETAP 2

    #define OCCUP 3

    #define SUP_VT 31 //num‚ro vt

    #define NB_RNC 3

    //diverses

    #define NON_AFFECTE -1

    #define TOUS_RNC_OCCUPES -1

    #define COM_LOCAL -1

    #define NB_CHIF_NUM 4

    /*Nb de chiffres du num‚ro*/

    #define RING 1

    /*temps en secondes de sonnerie*/

    #define NO_RING 2

    /*temps en sec arrêt sonnerie */

    #define TIME_OUT 20

    /*temps en secondes de times out*/

    #define TIMEOUT_DISTANT 2

    /* temps en secondes de time out distant*/

    //constantes hard

    #define ADBASE 0*700

    #define NB_VOIE 32

    #define NB_EQUIPEMENT 4

    #define DEBUT_VT_LOCALE 4

    #define FIN_VT_LOCALE 15

    #define DEBUT_VT_EXTERNE 17

    #define FIN_VT_EXTERNE 31

    //codes des fonctions

    #define ATTENTE 0<<5

    //D‚calage gauche de 5 bits

    #define LECTEUR_JONCTEUR 1<<5

    #define SONNERIE_ON 3<<5

    #define SONNERIE_OFF 2<<5

    #define AFFECTE_CODEC 4<<5

    #define ECRIRE_MCM 5<<5

    #define LECTURE_RNC 7<<5

    //types pr‚d‚finis

    struct Tnum {

    int nb_chif; //Nb de chiffres re‡us

    int tab_chif[4]; //stockage chiffres re‡us

    };

    enum ej {

    raccroche,

    decroche

    };

    enum es {

    sonnerie_off,

    sonnerie_on

    };

    enum etat_vt {

    libre,

    affectee,

    reservee_system

    };

    enum etat_rnc {

    locale,

    externe

    };

    enum discris { //caract‚ristique abonnement usager

    spe_depart,

    spe_arrivee,

    mixte,

    hors_service

    };

    enum etats_no_compose {

    no_premier_chiffre,

    no_non_fini,

    no_distant,

    no_inexistant,

    no_local_existant

    };

    enum etats_poste {

    repos,

    preselection,

    num_chif1,

    num_chif2,

    faux_app_deur,

    select_de,

    ra_deur,

    son_de,

    conv_deur,

    conv_de,

    faux_app_de

    };

    struct Ttab_interne {

    enum ej etat_joncteur;

    enum es etat_sonnerie;

    int no_vt_affectee;

    };

    struct Ttab_synthese {

    etats_poste etat_poste;

    discris discri_poste;

    int appel_distant; /* utilise par les communication distantes*/

    int no_de_telephone;

    Tnum no_compose;

    int no_VT_affectee;

    int no_RNC_affectee;

    int no_VT_du_distant; // nø de VT du correspondant s'il existe

    clock_t time_out;

    };

    #endif //t2000

    ANNEXE2 : Programme en C++ de la bibliothèque « INTERF.H »

    //fichier : interf.h

    #ifndef interf

    #define interf

    #include "t2000.h"

    /*adresse des ‚l‚ments des registres du PPI. */

    #define PORTA 0*00

    #define PORTB 0*01

    #define PORTC 0*02

    #define RC_PPI 0*03

    /* Modes du PPI pour le registre RC_PPI*/

    const unsigned char PPI_MODE_PORTA_ENTREE=0*10;

    const unsigned char PPI_MODE_PORTB_ENTREE=0*02;

    const unsigned char PPI_MODE_PORTCSUP_ENTREE=0*08;

    const unsigned char PPI_MODE_PORTCINF_ENTREE=0*01;

    const unsigned char PPI_MODE_PORTC_ENTREE=PPI_MODE_PORTCSUP_ENTREE|PPI_MODE_PORTCINF_ENTREE;

    /*Active le mode en RC_PPI*/

    const unsigned char PPI_MODE_ACTIVATION_MODE=0*80;

    const unsigned char PPI_MODE_ECRIRE_PORTS_AB=PPI_MODE_PORTC_ENTREE|PPI_MODE_ACTIVATION_MODE;

    /*Signification des bits du port C*/

    /*Bit … 1 quand l'affectation de VT valid‚e*/

    const unsigned char PORTC_BIT_AFFECTE_VT_DONE=0*02;

    /* Bit d‚crivant l'‚tat joncteur (0=raccroche) */

    const unsigned char PORTC_BIT_EJ =0*04;

    /* Bit … 1 quand un chiffre est pr‚sent dans le RNC interroge */

    const unsigned char PORTC_BIT_PRESENCE_DIGIT=0*08;

    /*Le chiffre frapp‚ est present sur C7~C4*/

    const unsigned char PORTC_MASK_DIGIT =0*0F0;

    /*signification des bits du port B*/

    void init_interface();

    void mettre_en_sonnerie(int no_equipement);

    void arret_sonnerie(int no_equipement);

    bool etat_joncteur(int no_equipement);

    void affecte_codec(int no_equipement, int voie);

    void desaffecte_voie_de_codec(int voie);

    void connexion(int voie_e, int voie_s);

    int lecture_RNC(int no_rnc);

    void control_ppi(unsigned char r_c);

    void ppi_write(int a, int b, int c);

    int ppi_read(int port_number);

    void attente_fonction(int no_equipement);

    void fct_strobe(int a, int b, int c);

    #endif

    ANNEXE3 : Programme en C++ de la bibliothèque « Modules.H »

    //fichier "modules.h

    //Contient les constantes et fonctions n‚cessaires … "modules.cpp".

    #ifndef_MODULES

    #define_MODULES

    #include <dos.h>

    #include "t2000.h"

    #define INTR 0X08

    /*vecteur d'interruption horloge, 18,6 fois par seconde*/

    #define INTR5 8+5

    /*vecteur d'interruption 5 pour la reception des chiffres MF*/

    void install_new_timer();

    void restor_old_timer();

    void install_new_irq5();

    void restor_old_irq5();

    void interrupt(new_irq5)(...);

    void interrupt(new_timer)(...);

    void init_tables();

    void affiche_etats();

    #endif

    ANNEXE4 : Programme en C++ de la « bibliothèque ABONNE.H »

    #ifndef __abonne_h

    #define __abonne_h

    typedef struct{

    char Nom[20];

    char numero[10];

    BYTE n_equipement;

    void (*action)();

    } Abonne;

    int GestionAbonne(int n_equip);

    void DeconnectPCM(int adr);

    void connectRcx(int n_chip,int mode);

    #endif

    ANNEXE 5 : Programme en C++ de la bibliothèque « SUJET.H »

    // fichier "sujet.h"

    //contient les constantes et fonctions n‚cessaires au sujets 4 … 9 (‚tablissement d'une communication locale)

    #ifndef_SUJETS

    #define_SUJETS

    #include "t2000.h"

    //--

    #endif

    ANNEXE 6 : INTERF.CPP

    #include<stdio.h>

    #include"interf.h"

    #include<dos.h>

    void init_interface(){

    int i;

    control_ppi(PPI_MODE_ECRIRE_PORTS_AB);

    ppi_write(0, 0, 0);

    for(i=0; i<NB_EQUIPEMENT; i++){

    arret_sonnerie(i);

    }

    for(i=0; i<NB_VOIE; i++){

    //D‚sactivation des Codecs:

    desaffecte_voie_de_codec(i);

    //RAZ de la m‚moire MCM du RCX:

    connexion(VT_SILEN, i);

    }

    }

    //ppi_rcc:registre de configuration du PPI

    void control_ppi(unsigned char ppi_rc)

    {

    outportb (ADBASE+RC_PPI,(unsigned char) ppi_rc);

    }

    //lecture ou ‚criture sur le PPI en fonction de registre de contrôle

    void ppi_write(int a, int b, int c)

    {

    outportb (ADBASE+PORTA, (unsigned char)a);

    outportb (ADBASE+PORTB, (unsigned char)b);

    outportb (ADBASE+PORTC, (unsigned char)c);

    }

    int ppi_read(int port_number)

    {

    int coucou;

    coucou=inportb(ADBASE+port_number);

    //cout<<"Coucou=portC="<<coucou<<"\n";

    return(coucou);

    }

    //------------------------------------------

    void attente_fonction(int numero_equipement)

    {

    //var locale

    int a;

    a=0;

    a|=(numero_equipement & 0*03);

    ppi_write(a, 0, 0); //info utile sur A

    }

    ANNEXE 7 : Modules.cpp

    //Fichier "modules.cpp"

    //Contient la d‚finition de fonctions appel‚es par le programme principal

    //et les programmes d'interruptions.

    #include<stdio.h>

    #include<iostream.h>

    #include<conio.h>

    #include<dos.h>*#include"interf.h"

    #include"modules.h" */

    /* Variables d‚finies ailleurs(dans le programmes principal); ce sont en

    quelque sorte les variables globales du logiciel:*/

    extern char*mess_test;

    extern int COUNT_TICK, SEC, NB_AUTOC, tab_vt[], tab_rcx[], tab_rnc[];

    extern Ttab_synthese contextes[NB_EQUIPEMENT]; //tableau des ‚tats des ‚quipements

    extern int tab_tax[NB_EQUIPEMENT]; //table de taxation

    void interrupt(*old_timer)(...);//c'est une variable et non une fonction:

    //donc … ne pas mettre dans fichier "*.h"

    void interrupt(*old_irq5)(...);

    //**********************************************************************

    void install_new_timer()

    {

    //save the old interrupt vector

    old_timer=_dos_getvect(INTR); // sauvegardede l'ancien handler

    //installation du nouveau handler d'interruption

    disable();

    setvect(INTR, new_timer);

    /* d‚masquage de l'interruption au niveau du 8259:

    ceci consiste … forcer … 0 le 1er bit … partir de la droite de

    l'octet d'adresse 0*21, ceci d‚masque l'IRQ0;

    on lit donc d'abord l'octet en 0*21, puis on fait le AND avec

    l'octet 1111 1110 (soit le compl‚ment de 0000 0001 soit ~0*01)*/

    int c=importb(0*21);

    c&= ~0*01;

    outportb(0*21,c); //d‚masquage de l'IRQ0(horloge tick 18,6 par second)

    enable();

    }

    //******************************************************************

    //******************************************************************

    void install_new_irq5()

    {

    /*save the old interrupt vector*/

    old_irq5=_dos_getvect(INT5); // sauvegardede l'ancien handler

    /*installation du nouveau handler d'interruption */

    disable();

    setvect(INTR, new_irq5);

    /* d‚masquage de l'interruption au niveau du 8259:

    ceci consiste … forcer … 0 le 6Šme bit … partir de la droite de

    l'octet d'adresse 0*21, ceci d‚masque l'IRQ5;

    on lit donc d'abord l'octet en 0*21, puis on fait le AND avec

    l'octet 1101 1111 (soit le compl‚ment de 0010 0000 soit ~0*20) */

    int c=importb(0*21);

    c&= ~0*20;

    outportb(0*21,c); //d‚masquage de l'IRQ5(mise … 0 du bit de masquage IRQ5)

    enable();

    }

    //******************************************************************

    void restor_old_timer()

    {

    disable();

    _dos_sevect(INTR, old_timer);

    enable();

    }

    //******************************************************************

    //******************************************************************

    void restor_old_IRQ5()

    {

    disable();

    _dos_sevect(INTR5, old_IRQ5);

    enable();

    }

    //******************************************************************

    void interrupt(new_timer)(...)// handler d'interrupt. qui compte le temps

    {

    /*comptage du temps

    L'horloge temps r‚el provoque 18,6 interuptions par seconde

    d‚sactivation interruptions pendant l'‚xecution du programme */

    disable();

    COUNT_TICK++;

    //cr‚ation d'un compteur de secondes.

    if(COUNT_TICK>=18) {

    SEC=SEC++%3600;//modulo 3600 (1heure)

    COUNT_TICK=0; }

    //-- des choses … installer ici suivant les TP..

    //acquitement de l'interruption et r‚activation des interruptions

    outportb (0*20, 0*20);

    enable();

    }

    //****************************************************************

    void init_tables() {

    // initialisation des contextes d'‚quipements:

    for( int i=0; i<NB_EAQUIPEMET; i++)

    {

    contextes[i].etat_poste=repos;

    contextes[i].discri_poste=mixte;

    contextes[i].appel_distant=NON_AFFECTE;

    contextes[i].no_de_telephone=NB_AUTOC+i;

    contextes[i].no_compose.nb_chif=0;

    for(int j=0; j<4; j++)contextes[i].no_compose.tab_chif[i]=0;

    contextes[i].no_VT_affectee=NON_AFFECTE;

    contextes[i].no_RNC_affecte=NON_AFFECTE;

    contextes[i].no_VT_du_distant=NON_AFFECTE;

    contextes[i].time_out=0;

    }

    //initialisation de la table d'occupation des voies temporelles:

    for(int i=0; i<SUP_VT; i++)tab_vt[i]=libre;

    tab_vt[0]=reservee_systeme;

    tab_vt[1]=reservee_systeme;

    tab_vt[2]=reservee_systeme;

    tab_vt[3]=reservee_systeme;

    tab_vt[16]=reservee_systeme;

    //initialisation de la m‚moire image du r‚seau de connexion

    for(int i=0; i<31; i++) tab_rcx[i]=0;

    //initialisation de la table d'occupation des RNC:

    for (int i=0; i<2; i++)tab_rnc[i]=dispo;

    //initialisation de la table de taxation:

    for (int i=0; i<NB_EQUIPEMENT; i++)tab_tax[i]=0;

    }

    void affiche_etats(){

    //affichage ‚tats ‚quipement

    char*msg_etat_poste[11]= {

    "repos ","preselection",

    "num_chif1 ","num_chif2 ",

    "faux_app_dr ","select_de ",

    "ra_deur ","son_de ",

    "conv_deur ","conv_de ",

    "faux_app_de ",

    };

    gotoxy(1,3);

    cout<<"equipt nø0 equipt nø1 equipt nø2 equipt nø3 \n";

    gotoxy(2,4);

    for(int i=0; i<NB_EQUIPEMENT; i++) cout<<"nø"<<contextes[i].no_de_telephone<<" ";

    gotoxy(1,6);

    cout<<"Etats des postes:";

    gotoxy(3,7);

    //clreol();

    cout<<msg_etat_poste[(int) contextes[0].etat_poste];

    cout<<msg_etat_poste[(int) contextes[1].etat_poste];

    cout<<msg_etat_poste[(int) contextes[2].etat_poste];

    cout<<msg_etat_poste[(int) contextes[3].etat_poste];

    gotoxy(1,9);

    cout<<"RNC nø:\n ";

    cout<< contextes[0].no_RNC_affecte<<" ";

    cout<< contextes[1].no_RNC_affecte<<" ";

    cout<< contextes[2].no_RNC_affecte<<" ";

    cout<< contextes[3].no_RNC_affecte<<" ";

    gotoxy(1,12);

    cout<<"affichage des chiffres re‡us: \n";

    for(int i=0; i<4; i++)cout<<contextes[0].no_compose.tab_chif[i];

    cout<<" ";

    for(int i=0; i<4; i++)cout<<contextes[1].no_compose.tab_chif[i];

    cout<<" ";

    for(int i=0; i<4; i++)cout<<contextes[2].no_compose.tab_chif[i];

    cout<<" ";

    for(int i=0; i<4; i++)cout<<contextes[3].no_compose.tab_chif[i];

    gotoxy(1,15);

    cout<<"M‚moire image du RCX: \n";

    for(int i=0; i<16; i++)cout<<tab_rcx[i]<<" ";

    cout<<"\n";

    for(int i=16; i<32; i++)cout<<tab_rcx[i]<<" ";

    gotoxy(1,19);

    cout<<"M‚moire d'occupation des voies temporelles: \n";

    for(int i=0;i<16; i++)cout<<tab_vt[i]<<" ";

    cout<<"\n";

    for(int i=16;i<32; i++)cout<<tab_vt[i]<<" ";

    gotoxy(1,23);

    cout<<"M‚moire de taxation: ";

    for(int i=0;i<NB_EQUIPEMENT;i++)cout<<tab_tax[i]<<" ";

    cout<<"\n MESSAGE DE TEST: ";

    cout<<mess_test;

    }//affiche_etats

    ANNEXE 8 : SUJET4.CPP

    //PROGRAMME SUJET4

    #include <conio.h>

    #include <stdio.h>

    #include "interf.h"

    #include "sujets.h"

    extern Ttab_synthese contextes[NB_EQUIPEMENT];

    extern etat_vt tab_vt[32]; //table d'occup des VT

    extern etat_rnc tab_rnc[3]; //table d'occup des 3 RNC

    extern int SEC; //compteur des secondes

    extern tab_rcx[32];

    int rech_vt()

    {

    int i=-1;

    for (i=4;i<=30;i++)

    if(tab_vt[i]==libre)return(i); //on sort avec le n° de VT

    return(i); //on sort avec -1

    }

    int rech_rnc()

    {

    int i=-1;

    for(i=0;i<=2;i++)

    if(tab_rnc[i]==dispo)

    return(i); //on sort avec le n° de RNC

    return(-1);

    void affect_vt(int VT_choisie)

    {//marquage VT occupe

    tab_vt[VT_choisie]=affectee;

    }

    void affect_rnc(int RNC_choisi)

    {//marquage RNC occupe

    tab_rnc[RNC_choisi]=occupe;

    }

    void presel(int equip)

    {

    //test si une VT Libre et affectation(marquage):

    //sinon on reste en état préselection (attente).

    int VT_DR = rech_vt();

    if(VT_DR!=-1)

    {

    affect_vt(VT_DR); //marquage dans tab_vt

    affecte_codec(equip,VT_DR); //activation cofidec

    contextes[equip].no_Vt_affectee = VT_DR;

    }

    else return; //on sort:le poste reste a l'etat "preselection"

    //test si LES DISCRIS sont bonnes:

    if((contextes[equip].discri_poste==spe_arrivee)||(contextes[equip].discri_poste==hors_service))

    {

    //renvoien occupation avec marquagefaux_app_deur

    connexion(VT_OCCUP,VT_DR);

    //mise a jour memoire imageRCX.

    tab_rcx[VT_DR]=VT_OCCUP;

    contextes[equip].etat_poste=faux_app_deur;

    return; //on sort de la fonction

    }

    //test si un RNC dispo et affectation:

    int RNC = rech_rnc();

    if(RNC!=-1)

    {

    contextes[equip].no_RNC_affecte = RNC;

    affect_rnc(RNC); //marquage rnc occupe

    }

    else

    {//pas de RNC:

    //renvoi en occupation avec marquagefaux_app_deur

    connexion(VT_OCCUP,VT_DR);

    //mise en memoire image RCX.

    tab_rcx[VT_DR]=VT_OCCUP;

    contextes[equip].etat_poste=faux_app_deur;

    return; //on sort de la fonction

    }

    //connexion au RNC affecte et envoi d'IN:

    connexion(VT_DR,RNC+1);

    connexion(VT_INVIT,VT_DR);

    //mise en memoire image RCX:

    tab_rcx[RNC+1]=VT_DR;

    tab_rcx[VT_DR]=VT_INVIT;

    //lancement tempo de 20 secondes:

    contextes[equip].time_out=(SEC+20)%3600;

    //marquage du nouvel etat:

    contextes[equip].etat_poste=num_chif1;

    } //presel

    ANNEXE 9 : SUJET5.CPP

    //Programme sujet 5

    #include<conio.h>

    #include<stdio.h>

    #include"interf.h"

    #include"sujets.h"

    extern Ttab_synthese contextes[NB_EQUIPEMENT]; //tableau des etats des equipements

    extern etat_vt tab_vt[32]; //table d'occup des VT

    extern etat_rnc tab_rnc[3]; //table d'occup des 3 RNC

    extern int SEC; //compteur des secondes

    extern tab_rcx[32]; //memoire image du rcx

    void recept_chif1(int equipt)

    {

    //test tempo de 20 secondes:

    clock_t tempo=contextes[equipt].time_out;

    int rnc=contextes[equipt].no_RNC_affecte;

    if(SEC>=tempo)

    {

    //liberation RNC et cxion a l'occup

    contextes[equipt].no_RNC_affecte=NON_AFFECTE;

    tab_rnc[rnc]=dispo;

    connexion(VT_OCCUP,contextes[equipt].no_VT_affectee);

    //mise a jour memoire image du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_OCCUP;

    connexion(contextes[equipt].no_VT_affectee,VT_SILEN);

    //mise a jour memoire image du rcx:

    tab_rcx[rnc+1]=VT_SILEN;

    //desactivation temporisation:

    contextes[equipt].time_out=0;

    //marquage nouvel etat:

    contextes[equip].etat_poste=faux_app_deur;

    }//tempo

    if(etat_joncteur(equipt)==false) //raccrochage

    {

    //liberation RNC

    contextes[equipt].no_RNC_affecte=NON_AFFECTE;

    tab_rnc[rnc]=dispo;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee);

    //effacement de vt dans le contexte

    contextes[equipt].no_VT_affectee=NON_AFFECTE;

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt].no_VT_affectee]=libre;

    //raz memoire MCM du rcx:

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee);

    //mise a jour memoire image du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //desactivation temporisation

    contextes[equipt].time_out=0;

    //marquage nouvel etat:

    contextes[equip].etat_poste=repos;

    } //etat_joncteur

    //test si l'on a recu un chiffre dans le pg d'interrupt new_int5:

    if(contextes[equipt].no_compose.nb_chif==1)

    { //il est dans tab_chif[1];

    //couper la tonalité:

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee);

    //mise a jour memoire du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //marquage du nouvel etat:

    contextes[equip].etat_poste=num_chif2;

    } //chif reçu

    } //recept_chif1

    void recept_chif2(int equipt)

    {

    //test tempo de 20 secondes(idem recept_chif1):

    clock_t tempo=contextes[equipt].time_out;

    int rnc=contextes[equipt].no_RNC_affecte;

    if(SEC>=tempo)

    {

    //liberation RNC et cxion a l'occup

    contextes[equipt].no_RNC_affecte=NON_AFFECTE;

    tab_rnc[rnc]=dispo;

    connexion(VT_OCCUP,contextes[equipt].no_VT_affectee);

    //mise a jour memoire image du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_OCCUP;

    connexion(contextes[equipt].no_VT_affectee,VT_SILEN);

    //mise a jour memoire image du rcx:

    tab_rcx[rnc+1]=VT_SILEN;

    //desactivation temporisation:

    contextes[equipt].time_out=0;

    //marquage nouvel etat:

    contextes[equip].etat_poste=faux_app_deur;

    }//tempo

    //test raccrochage DEUR(idem à recept_chif1):

    if(etat_joncteur(equipt)==false) //raccrochage

    {

    //liberation RNC

    contextes[equipt].no_RNC_affecte=NON_AFFECTE;

    tab_rnc[rnc]=dispo;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee);

    //effacement de vt dans le contexte

    contextes[equipt].no_VT_affectee=NON_AFFECTE;

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt].no_VT_affectee]=libre;

    //raz memoire MCM du rcx:

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee);

    //mise a jour memoire image du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //desactivation temporisation

    contextes[equipt].time_out=0;

    //marquage nouvel etat:

    contextes[equip].etat_poste=repos;

    }

    //test si l'on a recu un chiffre dans le pg d'interrupt new_int5:

    if(contextes[equipt].no_compose.nb_chif==4)

    { //numerotation terminée

    //liberation RNC

    contextes[equipt].no_RNC_affecte=NON_AFFECTUE;

    tab_rnc[rnc]=dispo;

    //mise a jour memoire du rcx:

    connexion(contextes[equipt].no_VT_affectee,VT_SILEN);

    //mise a jour memoire image du rcx

    tab_rcx[rnc+1]=VT_SILEN;

    //desactivation temporisation:

    contextes[equipt].time_out=0;

    //marquage du nouvel etat select_de:

    contextes[equip].etat_poste=select_de;

    contextes[equipt].no_compose.nb_chif=0; //raz cpt chif

    }

    } //recept_chif2

    ANNEXE 10 : SUJET6.CPP

    //Programme sujet 6

    #include<conio.h>

    #include<stdio.h>

    #include"interf.h"

    extern Ttab_synthese contextes[NB_EQUIPEMENT]; //tableau des etats des equipements

    extern etat_vt tab_vt[32]; //table d'occup des VT

    extern etat_rnc tab_rnc[3]; //table d'occup des 3 RNC

    extern int SEC; //compteur des secondes

    extern tab_rcx[32]; //memoire image du rcx

    void faux_appel1(int equipt)

    {

    //traitement du faux appel du demandeur:

    if(etat_joncteur(equipt)==false)//racrochage

    {

    //raz memoire mcn du rcx:

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee);

    //mise a jour memoire du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt].no_VT_affectee]=libre;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee);

    //effacement de vt dans le contexte

    contextes[equipt].no_VT_affectee=NON_AFFECTE;

    //par securite raz de la zone reception chiffres

    //sinon il peut y avoir des surprises au decrochage suivant!

    contextes[equipt].no_compose.nb_chif=0;

    for(int j=0;j<4;j++)contextes[equipt].no_compose.tab_chif[j]=0;

    //marquage nouvel etat

    contextes[equip].etat_poste=repos;

    //desactivation temporisation

    contextes[equipt].time_out=0;

    }

    }//faux appel1

    void faux_appel2(int equipt)

    {

    //traitement du faux appel du demandé:

    //a voir:pour l'instant memes actions sans doute que pour le demandeur

    if(etat_joncteur(equipt)==false)//racrochage

    {

    //raz memoire mcn du rcx:

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee);

    //mise a jour memoire du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt].no_VT_affectee]=libre;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee);

    //effacement de vt dans le contexte

    contextes[equipt].no_VT_affectee=NON_AFFECTE;

    //par securite raz de la zone reception chiffres

    //sinon il peut y avoir des surprises au decrochage suivant!

    contextes[equipt].no_compose.nb_chif=0;

    for(int j=0;j<4;j++)contextes[equipt].no_compose.tab_chif[j]=0;

    //marquage nouvel etat

    contextes[equip].etat_poste=repos;

    //desactivation temporisation

    contextes[equipt].time_out=0;

    }

    }//faux appel2

    ANNEXE 11 : SUJET7.CPP

    // Programme sujet 7

    #include "interf.h"

    extern Ttab_synthese contextes[NB_EQUIPEMENT]; //tableau des etats des equipements

    extern etat_vt tab_vt[32]; //table d'occup des VT

    extern etat_rnc tab_rnc[3]; //table d'occup des 3 RNC

    extern int SEC; //compteur des secondes

    extern tab_rcx[32]; //memoire image du rcx

    extern char *mess_test; //pour affichage

    void renvoi_occ_deur(int equipt)

    {

    connexion(VT_OCCUP,contextes[equ].no_VT_affectee);

    //mise a jour memoire image du rcx

    tab_rcx[contextes[equ].no_VT_affectee]=VT_OCCUP;

    //marquage nouvel etat

    contextes[equ].etat_poste=faux_app_deur;

    }//renvoi_occ_deur

    int rech_vt_de()

    {

    int i=-1;

    for(i=4;i<=30;i++)

    if(tab_vt[i]==libre)return(i);//on sort avec le n°de VT

    return(i); //on sort avec-1

    }

    void selection(int equipt)

    {

    //analyse du numero reçu(4 hciffres dans le tableau tab_chif[equipt]du DEUR:

    //contextes[equipt].no_compose.tab_chif[i]

    //contextes[equipt].no_compose.nb_chif doit contenir 4(nbre de chiffre reçu)

    //transformer les 4 chiffres en un entier:

    int m=contextes[equipt].no_compose.tab_chif[0]; //chiffre millier

    int c=contextes[equipt].no_compose.tab_chif[1]; //chiffre centaine

    int d=contextes[equipt].no_compose.tab_chif[2]; //chiffre dizaine

    int u=contextes[equipt].no_compose.tab_chif[3]; //chiffre unite

    int norecu=1000*m+100*c+10*d+u;

    //mess_test="traduction faite dans la selection";

    //recherche du n°d'equipement correspondant:

    int equ_de=-1;

    for(i=0;i<4;i++)

    {

    if(norecu==contextes[i].no_de_telephone)

    {

    equ_de=i;

    break;

    }

    }//for

    if(equ_de==-1)renvoi_occ_deur(equipt);

    else

    { //on a trouve le numero d'equipementdu DE(mis dans equ_de)

    if (contextes[equ_de].etat_poste!=repos)renvoi_occ_deur(equipt);

    else

    { if((contextes[equ_de].discri_poste==spe_depart)||(contextes[equ_de].discri_poste==hors_service))

    renvoi_occ_deur(equipt);

    else

    {

    //le DE est au reposet ok en discirs:lui chercher une VT:

    int VT_DE=rech_vt_de();

    if(VT_DE==-1)renvoi_occ_deur(equipt);

    else

    {

    tab_vt[VT_DE]=affectee;//marquer la vt occupee dans tab_vt

    contextes[equ_de].etat_poste=son_de; //marquer le DE pris contextes[equipt_de].etat_poste=ra_deur; //marquer le deur en retour d'appel

    affecte_codec(equipt,VT_DE); //activer le cofidec du DE

    //remplissage des contextes DEUR et DE (recopiage info sur les VT):

    contextes[equ_de].no_VT_affectee=VT_DE;

    contextes[equ_de].no_VT_du_distant=contextes[equ_de].no_VT_affectee;

    contextes[equ_de].no_VT_du_distant=VT_DE;

    //envoi de la sonnerie sur la ligne du DE:

    mettre_en_sonnerie(equ_de);

    //envoi tonalite de retour d'appel vers le DEUR,

    //et mise a jour image RCX:

    connexion(VT_RETAP, contextes[equipt].no_VT_affectee);

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_RETAP;

    //initialisation des tempos pour le DEUR et le DE

    contextes[equipt].time_out=(SEC+120)%3600; //2mn max de sonnerie

    contextes[equ_de].time_out=0; //initialisation compteur

    //voir le comptage precis du temps pour l'etat"son_de"dans la fonction

    //new timer()(module modules.cpp):le "time_out" du DE est incremente de 18 coups/seconde

    } //VT_DE

    } //test discri

    }//test repos

    } //else equ_de

    } //selection

    ANNEXE 12 : Sujet8.CPP

    // Programme sujet 8

    //traitement al'etat "ra_deur" pour le DEUR et "son_de" pour le DE

    //a faire

    #include "interf.h"

    extern Ttab_synthese contextes[NB_EQUIPEMENT]; //tableau des etats des equipements

    extern etat_vt tab_vt[32]; //table d'occup des VT

    extern etat_rnc tab_rnc[3]; //table d'occup des 3 RNC

    extern int SEC; //compteur des secondes

    extern tab_rcx[32]; //memoire image du rcx

    extern char *mess_test; //pour affichage

    extern int tab_tax[NB_EQUIPEMENT]; //table de taxation

    void sonnerie(int equipt)

    {

    //cadencement de la sonnerie

    //ds le programme d'interruption new timer (voir modules.cpp)est

    //installée l'incrementation du time_out du DE(16,8 fois par seconde) pour

    //les equipementsse trouvant dans l'etat "son_de"

    if(contextes[equipt].time_out==1)

    {

    mettre_en_sonnerie(equipt);

    }

    if(contextes[equipt].time_out==20)

    {

    arret_sonnerie(equipt);

    }

    if(contextes[equipt].time_out>=60)

    {

    contextes[equipt].time_out=0;

    } //sonnerie

    void ret_appel(int equipt)

    {

    /*3 evenements peuvent se presenter:

    raccrachage DEUR en cours de sonnerie

    fin de tempo 2 minutes

    décrochage du demande en sonnerie*/

    //a)raccrochage du DEUR en cours de sonnerie

    if(etat_joncteur(equipt)==false) //raccrochage DEUR

    {

    //mess_test=raccrochage DEUR en sonnerie

    //arreter la sonnerie du demande et remise au repos de DE

    //trouver le DE(par son numero de VT)

    int VT_DE=contextes[equipt].no_VT_du_distant;

    int equipt_de=-1;

    for(int i=0;i<NB_EQUIPEMENT;i++)

    {

    if(contextes[i].no_VT_affectee==VT_DE)

    equipt_de=i;

    } //i

    if(equipt_de!=-1)

    { //remise au repos du DE

    arret_sonnerie(equipt_de);

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt_de].no_VT_affectee]=libre;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt_de].no_VT_affectee);

    //effacement de vt dans le contexte

    contextes[equipt_de].no_VT_affectee=NON_AFFECTE;

    contextes[equipt_de].no_VT_du_distant=NON AFFECTE;

    //desactivation temporisation

    contextes[equipt_de].time_out=0;

    contextes[equipt_de].etat_poste=repos;

    } //equip_de

    else mess_test="Pas trouvé le DE en sonnerie!!";

    //remise au repos du DEUR:

    //raz memoire MCM du RCX:

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee);

    //mise a jour memoire du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt].no_VT_affectee]=libre;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee);

    //effacement de vt dans le contexte

    contextes[equipt].no_VT_affectee=NON_AFFECTE;

    //par securite raz de la zone reception chiffres

    contextes[equipt].no_compose.nb_chif=0;

    for(int j=0;j<4;j++)contextes[equipt].no_compose.tab_chif[j]=0;

    //marquage nouvel etat

    contextes[equip].etat_poste=repos;

    //desactivation temporisation

    contextes[equipt].time_out=0;

    } //raccrochage DEUR

    //b)fin tempo de 2 minutes

    if(SEC>=contextes[equipt].time_out)

    {

    //debordement 2 secondes

    //liberer le DE et renvoyer DEUR en occupation

    //trouver le DE(par son numero de VT)

    int VT_DE=contextes[equipt].no_VT_du_distant;

    int equipt_de=-1;

    for(int i=0;i<NB_EQUIPEMENT;i++)

    {

    if(contextes[i].no_VT_affectee==VT_DE)

    equipt_de=i;

    } //i

    if(equipt_de!=-1)

    { //remise au repos du DE

    arret_sonnerie(equipt_de);

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt_de].no_VT_affectee]=libre;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt_de].no_VT_affectee);

    //effacement de vt dans le contexte

    contextes[equipt_de].no_VT_affectee=NON_AFFECTE;

    contextes[equipt_de].no_VT_du_distant=NON AFFECTE;

    //desactivation temporisation

    contextes[equipt_de].time_out=0;

    contextes[equipt_de].etat_poste=repos;

    } //equip_de

    else mess_test="Pas trouvé le DE en sonnerie!!";

    //renvoyer le DEUR au repos

    connexion(VT_OCCUP,contextes[equipt].no_VT_affectee);

    //mise a jour memoire du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_OCCUP;

    //desactivation temporisation

    contextes[equipt].time_out=0;

    //marquage nouvel etat

    contextes[equipt].etat_poste=faux_app_deur;

    }//SEC(2 minutes ecoulees)

    //c)tester si decrochage du demendé en sonnerie

    //trouver le DE(par son numero de VT)

    int VT_DE=contextes[equipt].no_VT_du_distant;

    int equipt_de=-1;

    for(int i=0;i<NB_EQUIPEMENT;i++)

    {

    if(contextes[i].no_VT_affectee==VT_DE)

    equipt_de=i;

    } //i

    if(equipt_de==-1)

    { //renvoyer le DEUR en occupation

    connexion(VT_OCCUP,contextes[equipt].no_VT_affectee);

    //mise a jour memoire image du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_OCCUP;

    //desactivation temporisation

    contextes[equipt].time_out=0;

    //marquage nouvel etat

    contextes[equipt].etat_poste=faux_app_deur;

    mess_test="Pas trouvé le DE en sonnerie!!";

    } //if equip_de

    else

    {

    if(etat_joncteur(equipt_de)==true)

    { //decrochage DE

    arret sonnerie(equipt_de);

    contextes[equipt_de].time_out=0;

    //activer le cofidec dans le VT choisie:

    affecte_codec(equipt_de,contextes[equipt].no_VT_affectee);

    //mise a jour memoire image du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //faire la double connexion des VT du DEUR et VT du DE

    connexion(contextes[equipt].no_VT_affectee,contextes[equipt].no_VT_du_distant) connexion(contextes[equipt].no_VT_du_distant,contextes[equipt].no_VT_affectee);

    //mettre a jour la memoire image du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=contextes[equipt].no_VT_du_distant;

    tab_rcx[contextes[equipt].no_VT_du_distant]=contextes[equipt].no_VT_affectee;

    //mettre l'etat du DEUR à conv_deur et l'etat du DE à conv_de:

    contextes[equipt].etat_poste=conv_deur;

    contextes[equipt].etat_poste=conv_de;

    contextes[equipt].time_out=0;

    tab_tax[equipt]++; //une unite de tase a la mise en communication

    }//if etat joncteur

    }//else

    }//ret_appel

    ANNEXE 13 : SUJET9.CPP

    //Programme sujet9

    #include"interf.h"

    extern Ttab_synthese contextes[NB_EQUIPEMENT]; //tableau des etats des equipements

    extern etat_vt tab_vt[32]; //table d'occup des VT

    extern etat_rnc tab_rnc[3]; //table d'occup des 3 RNC

    extern int SEC; //compteur des secondes

    extern tab_rcx[32]; //memoire image du rcx

    extern char *mess_test; //pour affichage

    voidt_racc_deur(int equipt)

    {

    if(etat_joncteur(equipt)==false)

    { //racrochage DEUR

    //trouver le DE et renvoyer celui-ce en occupation

    int VT_DE=contextes[equipt].no_VT_du_distant;

    int equipt_de=-1;

    for(int i=0;i<NB_EQUIPEMENT;i++)

    {

    if(contextes[i].no_VT_affectee==VT_DE)

    equipt_de=i;

    } //i

    if(equipt_de!=-1)

    { //renvoi en occupation de DE

    connexion(VT_OCCUP,contextes[equipt_de].no_VT_affectee);

    //mise a jour memoire image du rcx:

    tab_rcx[contextes[equipt_de].no_VT_affectee]=VT_OCCUP;

    //effacements dans contexte du DE

    contextes[equipt_de].no_VT_du_distant=NON_AFFECTE;

    contextes[equipt_de].time_out=0;

    //marquage nouvel etat

    contextes[equipt_de].etat_poste=faux_app_deur;

    }

    else mess_test="Pas trouvé le correspondant DE!!";

    //puis liberer tout cote DEUR

    //raz memoire MCM du RCX:

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee);

    //mise a jour memoire du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt].no_VT_affectee]=libre;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee);

    //effacements dans le contexte

    contextes[equipt].no_VT_affectee=NON_AFFECTE;

    contextes[equipt].no_VT_du_distant=NON AFFECTE;

    contextes[equipt].time_out=0;

    //par securite raz de la zone reception chiffres

    contextes[equipt].no_compose.nb_chif=0;

    for(int j=0;j<4;j++)contextes[equipt].no_compose.tab_chif[j]=0;

    //marquage nouvel etat

    contextes[equip].etat_poste=repos;

    }//if etat_joncteur

    } //t_racc_deur

    void t_racc_de(int equipt)

    {

    if(etat_joncteur(equipt)==false)

    { //racrochage DE

    //trouver le DEUR et renvoyer celui-ce en occupation

    int VT_DEUR=contextes[equipt].no_VT_du_distant;

    int equipt_deur=-1;

    for(int i=0;i<NB_EQUIPEMENT;i++)

    {

    if(contextes[i].no_VT_affectee==VT_DEUR)

    equipt_deur=i;

    } //i

    if(equipt_deur!=-1)

    { //renvoi en occupation de DEUR

    connexion(VT_OCCUP,contextes[equipt_deur].no_VT_affectee);

    //mise a jour memoire image du rcx:

    tab_rcx[contextes[equipt_deur].no_VT_affectee]=VT_OCCUP;

    //effacements dans contexte du DE

    contextes[equipt_deur].no_VT_du_distant=NON_AFFECTE;

    contextes[equipt_deur].time_out=0;

    //marquage nouvel etat

    contextes[equipt_deur].etat_poste=faux_app_deur;

    }

    else mess_test="Pas trouvé le correspondant DEUR!!";

    //puis liberer tout cote DE

    //raz memoire MCM du RCX:

    connexion(VT_SILEN,contextes[equipt].no_VT_affectee);

    //mise a jour memoire du rcx:

    tab_rcx[contextes[equipt].no_VT_affectee]=VT_SILEN;

    //effacement dans le table d'occupation des voies temporelles:

    tab_vt[contextes[equipt].no_VT_affectee]=libre;

    //mise en stand by de son cofidec

    desaffecte_voie_de_codec(contextes[equipt].no_VT_affectee);

    //effacements dans le contexte

    contextes[equipt].no_VT_affectee=NON_AFFECTE;

    contextes[equipt].no_VT_du_distant=NON AFFECTE;

    contextes[equipt].time_out=0;

    //par securite raz de la zone reception chiffres

    contextes[equipt].no_compose.nb_chif=0;

    for(int j=0;j<4;j++)contextes[equipt].no_compose.tab_chif[j]=0;

    //marquage nouvel etat

    contextes[equip].etat_poste=repos;

    }//if etat_joncteur

    } //t_racc_de

    ANNEXE 14: COMLOCALE.CPP

    #include<stdio.h>

    #include<iostream.h>

    #include<conio.h>

    #include<dos.h>

    #include"interf.h"

    #include"modules.h"

    #include"sujets.h"

    /************************************

    Programme principal "comlocale.cpp

    ************************************/

    //d‚finition de variables globales:

    int COUNT_TICK, SEC;

    Ttab_synthese contextes[NB_EQUIPEMENT]; //tableau des ‚tats d'‚quipements

    int NB_AUTOC=251; //numero du premier ‚quipement

    etat_vt[32]; //table d'occupation des voies temporelles

    int tab_rcx[32]; //m‚moire image du r‚seau de connexion

    etat_rnc[3]; //table d'occupation des 3 RNC

    int tab_tax[NB_EQUIPEMENT]; //table de taxation

    char*mess_test; pour affichage lors de mise au point des TP

    //fin de d‚finition des variables globales.

    main()

    {

    cout<<"\n D‚but`n";

    init_interface();

    COUNT_SEC=0;

    SEC=0;

    install_new_timer(); //sauvegarde vecteur d'IRQO,

    //et installation du nouveau gestionnaire d'interruption new_irq5().

    init_tables();

    etats_poste etat;

    while (!kbhit()) {// le programme s'arrêtera dès qu'on frappe une touche clavier

    /* scrutation des ‚tats possibles: repos, preselection, num_chif1,num_chif2,

    faux_app_deur, select_de, ra_deur, son_de, conv_deur, conv_de, faux_app_de

    */

    for (int eq=0; eq<NB_EQUIPEMENT; eq++) {

    etat=contextes[eq].etat_poste;

    switch (etat)

    {

    case repos:

    if(etat_joncteur(eq)==true) //test décrochage ligne

    contextes[eq].etat_poste=preselection;

    break;

    case preselection:

    presel(eq)

    break;

    case num_chif1:

    recept_chif1(eq);

    break;

    case num_chif2:

    recept_chif2(eq);

    break;

    case faux_app_deur:

    faux_appel1(eq);

    break;

    case select_de:

    selection(eq);

    break;

    case ra_deur:

    ret_appel(eq);

    break;

    case son_de:

    sonnerie(eq);

    break;

    case conv_deur:

    t_racc_deur(eq);

    break;

    case conv_de:

    t_racc_de(eq);

    break;

    case faux_app_de:

    faux_appel2(eq);

    break;

    default:

    cout<<"Erreur: ‚tat non pr‚vu\n";

    }// switch

    }// for eq

    }//kbit()

    //On quitte le programme:

    /* Restauration de l'ancien gestionnaire old_timer*/

    restor_old_timer();

    /* Restauration de l'ancien gestionnaire d'IRQ5 */

    restor_old_irq5();

    cout<<"\n\n Fin du programme.\n";

    }//main

    TABLE DES MATIERES

    Dédicaces…………………………………………………………………………………….....iRemerciements………………………………………………………………………………...ii

    Glossaire………………………………………………………………………………………iii

    Sommaire……………………………………………………………………………………...iv

    Introduction générale……………………………………………………………………….…1

    1ère Partie : Etude théorique………………………………………………….....3

    Chapitre 1 : Présentation du cadre d'étude…………………………………………………..4

    1.1 - Présentation de l'ESMT…………………………………………………………………5

    1.1.1 - Historique………………………………………………………………………………………..5

    1.1.2 - Organisation et fonctionnement………………………………………………………………5

    1.1.2.1 - Organisation …………………………………………………………………………………..5

    1.1.2.2 - Fonctionnement ……………………………………………………………………………….6

    1.2 - Problématique…………………………………………………………………………...7

    1.3 - Contexte de l'étude…………………………………………………………………….....8

    Chapitre2 : Généralité sur la commutation temporelle………………………………………9

    2.1 - Définition………………………………………………………………………………10 

    2.2 - Fonctionnement de base d'un commutateur téléphonique……………………...............10

    2.2.1 - Structure d'un commutateur téléphonique………………………………………………….10

    2.2.2 - Le bloc de raccordement……………………………………………………………………...11

    2.2.3 - Le réseau de connexion et blocs auxiliaires………………………………………………..11

    2.2.4 - Le bloc de commande………………………………………………………………………….12

    2.3 - Les phases d'établissement d'une communication locale……………………………..12

    2.3.1 - Présélection…………………………………………………………………………………….12

    2.3.1.1 - Exploration des équipements et détection du changement d'état……………………..12

    2.3.1.2 - Recherche des discriminations du demandeur…………………………………………..13

    2.3.1.3 - Initiation de l'observation de trafic…………………………………………………….....13

    2.3.1.4 - Test et connexion d'un récepteur de fréquence………………………………………….13

    2.3.1.5 - Envoi de la tonalité au demandeur………………………………………………………..13

    2.3.2 - Signalisation du demandeur………………………………………………………………….14

    2.3.2.1 - Réception de la numérotation………………………………………………………………14

    2.3.2.2 - Arrêt de l'émission de la tonalité………………………………………………………….14

    2.3.3 - Sélection………………………………………………………………………………………...14

    2.3.3.1 - Pré analyse……………………………………………………………………………….......14

    2.3.3.2 - Analyse…………………………………………………………………………………….....14

    2.3.3.3 - Fin de numérotation du demandeur……………………………………………………….15

    2.3.4 - Mise en relation………………………………………………………………………………..15

    2.3.4.1 - Retransmission………………………………………………………………………………15

    2.3.4.2 - Double connexion (Dr Dé)…………………………………………………………...15

    2.3.4.3 - Démarrage de la taxation…………………………………………………………………..15

    2.3.4.4 - Libération des ressources…………………………………………………………………..16

    2.4 - Principe de la connexion temporelle…………………………………………………...16

    2.4.1 - La trame MIC…………………………………………………………………………………..16

    2.4.1.1 - Echantillonnage……………………………………………………………………………..17

    2.4.1.2 - Quantification………………………………………………………………………………..17

    2.4.1.3 - Compression et Codage…………………………………………………………………….17

    2.4.2 - Le réseau de connexion à un MIC…………………………………………………………...18

    2.4.2.1 - Présentation………………………………………………………………………………….18

    2.4.2.2 - Réalisation du transfert dans le sens Dr Dé………………………………………….19

    2.4.2.3 - Réalisation du transfert dans le sens Dé Dr………………………………………….22

    2.5 - Algorithme de l'établissement d'un appel…………………………………………………….24

    Chapitre 3 : Etude de l'autocommutateur pédagogique ETD 500………………………….36

    3.1 - présentation…………………………………………………………………………….37

    3.2 - description matérielle de la maquette…………………………………………………..38

    3.2.1 - Alimentation électrique………………………………………………………………………..38

    3.2.2 - Liaison avec un ordinateur PC………………………………………………………………39

    3.3 - Base de temps…………………………………………………………………………...39

    3.4 - Le réseau de connexion : RCX…………………………………………………………41

    3.5 - Le micro-système………………………………………………………………………..43

    3.5.1 - Gestion du RCX………………………………………………………………………………...43

    3.5.1.1 - Adresse MCM………………………………………………………………………………...43

    3.5.1.2 - Donnée MCM………………………………………………………………………………...43

    3.5.1.3 - Registre de contrôle…………………………………………………………………………43

    3.5.1.4 - Registre de statut…………………………………………………………………………….44

    3.5.1.5 - Le canal sémaphore…………………………………………………………………………44

    3.5.2 - Gestion des équipements………………………………………………………………………44

    3.5.2.1 - Les cofidecs…………………………………………………………………………………..45

    3.5.2.2 - Les slics……………………………………………………………………………………….45

    3.5.3 - Gestion de la liaison intercom………………………………………………………………..45

    3.6 - Les codecs……………………………………………………………………………….46

    3.7 - Les équipements………………………………………………………………………...47

    3.8 - Générateur de sonnerie………………………………………………………………...48

    3.9 - Liaison intercom………………………………………………………………………..48

    3.10 - Fonctions logiciels…………………………………………………………………….48

    2ème PARTIE :  Programmes du logiciel……………………………………...49

    Introduction……………………………………………………………………50

    Chapitre 1 : Les bibliothèques et les programmes compilables……………………………..51

    1.1 - Les bibliothèques………………………………………………………………………..52

    1.1.1 - Bibliothèque T2000.h………………………………………………………………………….52

    1.1.2 - Bibliothèque Interf.h…………………………………………………………………………..52

    1.1.3 - Bibliothèque Modules.h……………………………………………………………………….52

    1.1.4 - Bibliothèque Abonne.h………………………………………………………………………...52

    1.1.5 - Bibliothèque sujet.h……………………………………………………………………………53

    1.2 - Les programmes  compilables:……………………………………………………….53

    1.2.1 - Les sous programmes …………………………………………………………………………53

    1.2.1.1 - Interf.CPP…………………………………………………………………………………….53

    1.2.1.2 - Modules.CPP…………………………………………………………………………………53

    1.2.1.3 - SujetX.CPP……………………………………………………………………………………53

    1.2.2 - Le programme principal : COMLOCAL.CPP……………………………………………..54

    Chapitre 2 : Exécution du logiciel :…………………………………………………………55

    2.1 - Démarrage du logiciel…………………………………………………………………56

    2.2 - Choix du port COM…………………………………………………………………….56

    2.3 - Création des abonnes…………………………………………………………………...57

    2.3.1 - Annuaire………………………………………………………………………………………..58

    2.3.1.1 - Editer les abonnes…………………………………………………………………………...58

    2.3.1.2 - Choix du plan de numérotation, caractéristique de la ligne et type de taxation…….59

    2.4 - Initialisation du programme……………………………………………………………61

    2.5 - Démarrage complet de l'autocommutateur……………………………………………62

    2.6 - Détection du décrochage et affectation des IT………………………………………...63

    2.7 - Sonnerie………………………………………………………………………………...64

    2.8 - Conversation……………………………………………………………………………65

    Conclusion Générale…………………………………………………………………………66

    Bibliographie…………………………………………………………………………………68

    Web graphie…………………………………………………………………………………..68

    Annexes………………………………………………………………………………………...I

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Mémoire de fin de formation pour l'obtention du diplôme d'Ingénieur des Travaux des Télécommunications

    APOUDJAK Moustapha

    LAWSON-BANKU A. Latévi

    Thème : ETUDE ET PROGRAMMATION D'UN AUTOCOMMUTATEUR TEMPOREL PEDAGOGIQUE : ETD500

    Directeur de mémoire : Mr. BARRY Mamadou Alpha

    Nous présentons une plateforme de commutateur temporel pédagogique : ETD500 spécialement conçue comme support à l'enseignement des télécommunications. Articulé autour d'un circuit logique reprogrammable, ce dispositif, utilisé par plusieurs grandes écoles et de l'IUP (Institut Universitaire Professionnalisé) Télécommunications et Réseaux, est source d'enseignements variés tant matériels que logiciels.

    L'intérêt accru par l'ESMT, dans le souci de renforcer les enseignements magistraux par les travaux pratiques, pour les systèmes reprogrammables, nous a amené au cours de notre stage au laboratoire de commutation à étudier, à programmer le « commutateur temporel pédagogique : ETD500 » et à réaliser quelques travaux pratiques. L'équipement était jusqu'à lors inutilisé malgré son importance pour l'enseignement et aussi du fait qu'il a coûté très cher, donc peu d'étudiants connaissent son existence.

    'Etude et Programmation d\'un Autocommutateur Pdagogique'

    Etude et Programmation d'un Autocommutateur Pédagogique

    Présenté et soutenu par Moustapha APOUDJAK et Latévi A. LAWSON-BANKU 126

    COMPRESSION



    © 2009-2014 StarAfrica

    Scroll to top