point d’entree provisoire des SI de dispatchings.

Mis en avant

Cet article est provisoire, il est néanmoins important car il permet d’accéder de façon rationnelle aux articles concernant les dispatchings. il est la structure d’aiguillage vers des articles terminés (accès libre) ou en cours d’élaboration (accès avec mot de passe) concernant les dispatchings de transport d’Edf puis de RTE. Continuer la lecture

Ce qui a plus ou moins bien marché dans le projet SRC

Ce qui a bien marché :

  •    L’organisation à RTE avec un projet national et un projet par région chargé de piloter le peuplement de la base de données, l’aménagement des locaux, la formation des dispatcheurs et la migration.
 
  •    La gestion des relations avec le fournisseur qui a été poussée à un haut niveau de formalisation et de mémorisation, condition sine qua non pour ne pas être asphyxié par le volume d’informations. Les échanges de toute nature (fiche d’anomalie, fiche de demande d’évolution, fiches questions/réponses, fournitures documentaires, PV, etc.) ont été gérés en configuration. Un gestionnaire de faits technique (1) , partagé avec le fournisseur, même été mis en place. Il ne sera pas de trop pour gérer les 7500 anomalies découvertes de 2003 à 2009. De plus, pendant les phases difficiles, les relations courantes entre les chefs de projet respectifs ont été complétées par des relations entre leurs managements respectifs et entre les directions de RTE et THALES.
  •     La gestion des données d’une façon générale :
  1. Le système de configuration, malgré un retard à la livraison, a donné satisfaction par la suite,
  2. Le volume de travail représenté par le peuplement initial de la base de données a été maîtrisé : la majeure partie des données alphanumériques du SIRC a pu être importée et le travail de constitution de l’imagerie a été réduit grâce à la génération automatique des images de poste et de cellule.
  • le formalisme du cahier des charges s’est révélé extrêmement efficace. La numérotation initiale de 10 en 10 a permis de gérer sans problème les adjonctions. La couverture des recettes en a été améliorée (lien tests-exigences). D’une façon générale la gestion des modifications en a été facilitée, ce qui a permis de tenir à jour le cahier des charges tout au long du projet et de le conserver en tant que référence contractuelle. On peut toutefois s’interroger sur le niveau de détail du dit cahier des charges, il a été un plus pour obtenir les fonctionnalités souhaitées, mais il a été consommateur en ressources RTE pour sa création et son suivi.
  • Les moyens d’essai fournis par RTE :
 
  1. L’utilisation du Simulateur d’entrainement des dispatcheurs (SIDERAL) en tant que simulateur de réseau électrique a permis de valider efficacement la fonction télécommande si bien qu’il n’y aura pas de mauvaises surprises sur site.
  2. La mise au point de la connexion à ARTERE, identifiée au départ comme un point délicat a été conduite sans difficulté grâce aux émulateurs fournis (EMC, EMA)(2) et à l’utilisation du réseau d’essai ARTERE pour les tests d’interfonctionnement.
  • La formation des dispatcheurs avec là encore l’utilisation du simulateur d’entrainement des dispatchers(SIDERAL) pour simuler le comportement du réseau électrique.

Ce qui a moins bien marché :

  • La réalisation du SCADA proprement dit. Le nombre très élevé d’anomalies laisse à penser que le fournisseur a préféré  présenter en recette des versions insuffisamment validées, plutôt que de risquer des pénalités pour retards. De plus le contrat ne prévoyait pas de tests d’endurance en usine (ils ont été ultérieurement ajoutés par voie d’avenant). Autant THALES parviendra à corriger rapidement les anomalies fonctionnelles, autant les anomalies liées à la conception du système seront particulièrement difficiles à corriger. Bien souvent, il sera nécessaire de mettre en place une instrumentation spécifique pour relever des traces et avancer dans l’analyse. Les problèmes les plus marquants ont été les suivants :
 
  1. Les performances,
  2. La robustesse,
  3. Des cas de désynchronisation du maître et de l’esclave,
  4. Des fuites mémoires (3),
  5. Des retards à l’affichage d’alarmes, des figeages d’écran,
  6. Des pertes de données opérateur lors de la mise en service d’une nouvelle base de données.

A l’exception des aspects performance et robustesse, tous ces problèmes ont été rencontrés sur le site pilote, ce qui montre que l’environnement de tests et la composition des plates-formes de tests n’étaient pas suffisamment représentatifs d’un site.

  • L’intégration des fonctions avancées dans les matériels de fournisseur. Là aussi, la découverte de nombreuses anomalies liées à la conception du système perturberont le déroulement de cette étape :
  1. Récurrence irrégulière ou arrêt intempestif de la chaîne cyclique,
  2. Mauvaise remontée dans le SRC des alarmes élaborées par la chaîne cyclique,
  3. Etc.
  • Le travail de paramétrage dans la base SRC et dans les bases propres aux calculs de réseau aura d’une façon générale été sous-estimé. Il sera amplifié par un changement des règles de nommage des ouvrages dans le SRC.

 

(1) Logiciel de suivi de problèmes permettant de suivre l’avancement de la résolution de ces problèmes. C’est CLEARQUEST qui a été utilisé sur le SRC.

Retour

 

(2) EMC : émulateur Casoar, EMA Emulateur ARTERE.

Retour

 

[3] Les process censés rendre la mémoire après utilisation ne le font pas, ce qui provoque au bout d’un certain temps de fonctionnement un épuisement de la mémoire disponible et une dégradation des performances par l’abus de swap.

Retour

La rédaction du cahier des charges du SRC

Voici ce qui avait été mis en place afin de garantir une production de qualité :

Au niveau de la forme :

  • Un modèle Word uniforme est imposé pour la rédaction,
  • Le principe adopté au SNC de distinguer le commentaire de la spécification est repris et  poussé encore plus loin en décomposant chaque spécification en exigences élémentaires  comportant le moins d’ambigüité possible et numérotées dans le but de faciliter les échanges avec le fournisseur, les recettes et la gestion des modifications.
   SP/6/E 340 Pour tous les ouvrages (lignes et transformateurs), le SRC doit réaliser, de façon systématique, un calcul d’intensité à chaque extrémité disposant au moins d’une mesure de puissance active.

Figure 16 : exemple d’exigence du cahier des charges

     Dans l’exemple présenté ci-dessus :

  •  SP identifie le composant (ici le  « Système principal »),
  •  6 est le numéro du chapitre,
  • E réfère à une exigence de base (il pouvait y avoir des exigences en option repérées par la lettre O),
  • 340 est le numéro de l’exigence dans le chapitre. Les exigences étaient numérotées de 10 en 10, afin de permettre des adjonctions.

Au niveau de l’organisation :

  • Pour chaque domaine, les documents de référence en entrée sont définis ainsi qu’un double circuit de validation (interne au projet puis externe),
  Au niveau du contenu :
  • Les thèmes comme la configuration des données et l’administration des systèmes, sont traités avec la même profondeur que les traitements temps réel et spécifiés en fonction de l’état de l’art du moment,
  • Les exigences de dimensionnement, de performance et de disponibilité et les conditions dans lesquelles les tests seront menés sont finement spécifiées, l’objectif étant de s’assurer que le SRC gardera un fonctionnement nominal en toute circonstance y compris en cas d’incident réseau généralisé (1),
  • Les fournitures de toute nature (matériel, documentation, prestations) sont identifiées et quantifiées aussi bien pour le fournisseur que pour EDF,
  • Les exigences de management et de qualité sont élaborées d’après la norme ISO 9001 et le guide de conduite de projet du DCC. Un plan de déroulement décrit les phases du projet et les conditions de passage d’une phase à l’autre.
  • Des exigences de sécurité informatiques apparaissent visant à protéger le système contre les intrusions et à contrôler les intervenants.

La composition du cahier des charge envoyé au Soumissionnaires sera la suivante, composition qui sera d’ailleurs et on ne peut que s’en féliciter  reprise dans des projets ultérieurs :

  • CCTP exigences techniques
  • CCTP consistance et limites de fourniture
  • CCTP Dimensionnement, performances et sûreté des Systèmes
  • CCTP Configuration des données
  • CCTP Management, Qualité et Sécurité
  • CCTP Fonctionnement en mode actif/passif
  • CCTP Raccordement du SRC à Artère
  • CCTP Echanges avec l’extérieur
  • CCTP Fonctions d’administration
  • CCTP Contraintes
  • CCTP API fonctions avancées
  • CCTP Garantie
  • CCTP MCO
  • CCTP Réversibilité (en cas de reprise de la maintenance par un autre fournisseur)

_______________________________________________________________________

 
(1) Des déclenchements de ligne en cascade se traduisent par une avalanche de changements d’état de signalisations et par de grandes variations de mesure, ce qui sollicite fortement le SCADA. (recalcul de topologie, génération d’alarmes, rafraîchissement des images, etc.)

La migration vers Téléconduite 2000

 

Le Programme Téléconduite 2000 doit faire face à un double challenge :

  • Faire cohabiter l’ancien et le nouveau réseau de téléconduite,
  • Assurer la migration des EA vers le nouveau réseau de téléconduite tout en assurant la continuité du service.

Or, revers de la médaille de la richesse du produit ARTERE, le raccordement d’un EA à ARTERE est une opération assez lourde et le LCA(1) n’est disponible que sur des systèmes d’exploitation de type UNIX récents. La décision sera donc prise de ne pas raccorder directement à ARTERE les équipements du palier SDART, à une exception près : les CACQ qui serviront de passerelle dans les dispatchings entre l’ancien et le nouveau monde(2).

Le Programme Téléconduite 2000 comportait 4 étapes.

L’étape 1 (1996-1998) était essentiellement consacrée à la mise en place de l’infrastructure ARTERE : réseau X25, Stations Réseau, Centre d’Administration du Réseau et développement d’une version du CACQ connectée à ARTERE : le CACQN. Le déploiement des premiers EA connectés à ARTERE commençait : les PEXI (3).
L’étape 2 (1998-2000) voyait le début du déploiement des équipements de terrain au niveau de la production thermique et hydraulique.
L’étape 3 (1999-2003) se caractérisait par le remplacement du SCADA du Dispatching National, le SYSDIC, et par la fin des déploiements des PEXI et des équipements pour la production Hydraulique.
L’étape 4 (2003-2005) était dominée par le renouvellement des SCADA des Dispatchings Régionaux, les SIRC : cela fera l’objet du projet SRC.

 

Ce planning d’ensemble va connaître des glissements, dus pour certains à des difficultés techniques, pour d’autres à des changements d’organisation. Le changement majeur résulte de la création de RTE(4) en 2000 et de la séparation des activités de transport et de production qui en découlent. Le développement des équipements de production quitte le domaine technique du Programme Téléconduite 2000 et les interfaces entre la téléconduite et les centrales seront désormais gérées de façon contractuelle entre RTE et les Producteurs.
Au niveau des SCADA, le Dispatching national et les Dispatchings régionaux avaient des besoins dont une partie était commune. Les difficultés du projet CRC ont amené la direction du Pôle SEPR(5) à une certaine prudence et à ne pas lancer simultanément leur rénovation. Le SNC a été choisi, car d’une part il présentait, a priori, une complexité moindre que celle des régionaux ( Un site unique, pas de télécommande, pas de gestion élaborée d’alarmes réseaux…) et d’autre part le SYSDIC n’avait pas suivi de cure de rajeunissement à l’instar du SIRC.

Figure 1 : architecture cible de la téléconduite à l’horizon 2008 : correspond grosso modo à l’étape 4 du programme Téléconduite 2000 (source : Schéma Directeur National de la Téléconduite de 2004)

_________________________________________________________________________

 

(1) Logiciel de connexion à ARTERE …….
(2) D’autres passerelles seront développées par la suite : la PEE passerelle d’échanges avec l’extérieur pour échanger avec les autres GRT, P2TR passerelle d’échange avec les producteurs, la PER, passerelle d’échange régionale.
(3) Pupitre d’Exploitation Informatisé : en fait un petit SCADA qui remplace les calculateurs de PCG, les EDT. Il permet la conduite des PA depuis le PCG.
retour

(4) Réseau de Transport Electricité : Gestionnaire du Réseau de Transport d’Electricité au sens des directives européennes sur la régulation du marché de l’électricité.
(5) Système Electrique et production Régionale : un des pôles constituant la Direction EDF Production Transport.
retour

 

Les principes directeurs du projet SRC

Les principes directeurs du projet SRC

Le projet SRC a bénéficié, au cours de ses différentes phases, de la présence de personnes ayant joué des rôles clé dans les projets précédents (90-40, SIRC, CRC). Au-delà de la capitalisation au niveau de l’entreprise – qui reste toujours très faible et parcellaire, voire ignorée (les temps ont changé, les prédécesseurs étaient moins performants,…) – le vécu des personnes est un atout pour la construction d’une référence de travail.

L’examen des différentes phases du projet a donc permis de dégager des principes dans les domaines suivants :

Les essais et les recettes

Les projets précédents avaient permis d’identifier que c’était un point faible récurrent, conduisant à des déconvenues lors des installations sur site. Il est donc décidé :

  • Qu’une recette en plate-forme EDF sera intercalée entre la réception usine et la livraison sur site pilote,
  • Que la télécommande devra pouvoir être testée off-line. La solution retenue est de simuler la réaction du réseau de téléconduite avec le simulateur d’entraînement des dispatcheurs, ce qui impose de développer une connexion entre ce simulateur et le SRC.

Les déploiements :

C’est une phase du projet particulièrement compliquée à gérer puisqu’elle mobilise à la fois l’équipe de projet nationale et les ressources humaines régionales. Il est décidé :

 
  • Un déploiement qui soit dans une logique de difficultés croissantes. Commencer par un petit site avec peu de particularités favorise une première étape de fonctionnement et permet d’engranger du retour d’expérience pour des sites plus importants en taille. Par ailleurs, les évolutions des bases de données (modifications de la structure, récupération du passé) nécessaires pour l’optimisation du système sont une épreuve d’autant moins contraignante que la base est moins volumineuse. Il a donc été choisi de commencer par Lille, puis d’enchaîner avec un site ayant une grosse base de données (ce sera Paris).
  • D’anticiper le peuplement de la base de données de chaque site, ce qui revient à livrer sur site le système de configuration 16 mois avant la migration (1)!
  • De lisser les charges humaines de déploiement en imposant au fournisseur des contraintes dans l’établissement du planning de déploiement (ex : pas de formation ou de migration en juillet-août).
  • La migration : pour le besoin des recettes sur site, il apparaît nécessaire de pouvoir faire fonctionner en parallèle l’ancien et le nouveau système. Il est donc décidé de faire développer pour chacun d’eux un mode dit passif dans lequel le système est connecté au réseau de téléconduite, fonctionne normalement mais ne peut rien émettre (et en particulier des télécommandes).

 La formation :

il est décidé :

  • que la formation des dispatcheurs aura lieu in situ, donc juste avant le début des opérations de migration, ce qui évitera des piqures de rappel en cas de décalage de la migration,
  •  que l’équipe nationale de projet formera, par site, des formateurs régionaux qui seront chargés de démultiplier leur formation,
  •  que la formation des agents tenant à jour la base de données et assurant l’administration des systèmes sera confiée au fournisseur (il en sera de même en phase de maintenance)

La maintenance des matériels :

le partage des responsabilités entre EDF et le fournisseur sont déjà définis à ce niveau, ce qui permet de dimensionner les lots de maintenance sur site.

Ces principes serviront de base pour la rédaction des exigences du cahier des charges relatives au plan de déroulement, aux fournitures (matérielles, logicielles et services) et à certains aspects techniques (réalisation d’un mode de fonctionnement passif du SRC par exemple).

 

_________________________________________________________________________

(1) On appelle migration l’ensemble des opérations à mener pour faire basculer la conduite de l’ancien vers le nouveau Système

retour

Le passage du SIRC de mini 6 à DPS6 ou le paradoxe de la puissance et du temps de réponse.

Le contexte

La version mini 6 des SIRC s’avéra rapidement trop limitée en matière de puissance CPU (Même la charge de base était bien trop élevée) et en capacité mémoire vive. L’annonce de l’arrivée sur le marché du DPS6 qui permettait de desserrer une partie des contraintes mémoire et qui offrait une puissance de calcul deux fois supérieure, tout en assurant une compatibilité logicielle préservant les investissements logiciels a été vue comme providentielle.

Continuer la lecture

Le pupitre du C 90-40 et la façon de s’en servir…

Le pupitre du C 90-40  se présentait de la façon suivante :

Le démarrage du calculateur

 Le pupitre permettait la mise sous tension du calculateur par le bouton Marche

 

 Puis, il offrait le choix du périphérique d’amorçage (Bande, ruban, disque ou cartes) à l’aide de deux clés à deux positions et à retour à zéro automatique. Et c’était parti…

La mise au point de programmes

Lors de la mise au point on insérait dans le programme des instructions « HLT » qui figeaient le calculateur lorsqu’elles étaient exécutées. Cela était signalé au pupitre par l’allumage de la lampe éponyme

 
 Un coup d’œil au P counter (qui donnait l’emplacement mémoire en cours – 14 bits de droite –  et l’état de l’extension mémoire – deux bits de gauche – ). permettait de savoir moyennant un rapide calcul en octal la halte sur laquelle on était  
Le 90-40 étant sur iddle, on pouvait visualiser et modifier les registres et la mémoire à l’aide de la zone registres. La molette située à droite de la zone permettait la sélection du registre :
A et B accumulateur principal et extension
X index
C instruction en cours de décodage
Le contenu du registre était indiqué par des lampes vertes allumées (1) ou éteintes (0).
On pouvait modifier le contenu du registre affiché à l’aide des petits boutons bleus situés en dessous des lampes de visualisation. Le 25 ème bouton situé complètement à gauche permettait de remettre le registre à zéro.
Pour visualiser la mémoire, cela était un peu plus compliqué.
On positionnait la molette sur le registre C. On entrait l’instruction branchement inconditionnel (BRU de code 01) vers l’adresse souhaitée. Dans l’exemple ci-dessous nous avons pris l’adresse octale 022567  ce qui donne, comme il n’y a ni indexation, ni indirection, pour  la valeur du registre C:  00122567.

A l’aide de la clé « run-iddle-step » on faisait alors un pas (step). On pouvait alors vérifier dans le P counter que l’adresse désirée était bien atteinte et voir dans C le contenu de la mémoire désirée.
Le contenu de la mémoire 022567 est 00000007.

Pour modifier le contenu de la mémoire cela était encore un peu plus compliqué.
Toujours à l’aide de la molette, on affiche la registre A et on l’initialise à la valeur souhaitée pour la mémoire, puis on passe sur le registre C dans lequel on rentre l’instruction store A (STA code octal 35 ) qui permet de ranger le contenu du registre A à l’adresse indiquée dans le champ adresse. Puis on fait un pas (STEP) avec la clé « run – iddle – step ». le calculateur exécute alors l’instruction contenue dans le registre C et range à l’adresse mémoire souhaitée le contenu qui avait été rentré dans le registre A.

Et pour faire un patch mémoire…

Vous avez tous les ingrédients, il ne reste que la méthode.
Tout d’abord, dans le programme que l’on souhaite patcher,  il faut:
• Choisir à quel endroit du programme se fera le débranchement vers le patch.
• Noter l’instruction complète (opcode, adresse, index, indirection, extension mémoire…) qui figure à l’endroit où l’on va se débrancher.
• Trouver la première adresse mémoire disponible en fin de programme et la noter.
• Préparer sur papier, sauf à être très doué et chanceux, les codes de la séquence d’instructions à ajouter. Ne pas oublier que la première instruction doit être celle qui occupait la place où l’on mettra le débranchement et que la dernière doit être un retour vers le programme initial à l’endroit le plus judicieux. Il faut connaître l’adresse de départ du patch (notée soigneusement dans un point précédent) pour pouvoir éventuellement calculer les adresses de sauts dans le patch ou de mémoire auxiliaire de travail.
• Entrer la séquence précédente en mémoire selon le mode d’emploi vu plus haut, ce qui nécessite un certain temps et une certaine dextérité.
• Ecraser l’instruction à l’adresse choisie pour le point de débranchement par un branchement inconditionnel au début du patch (BRU  code 01)
• Tester le programme modifié.
• Si le patch a fonctionné, perforer le nouveau ruban (exécutable du programme) et, bien entendu, mettre à jour le paquet de cartes correspondant (source du programme).

En rédigeant cet article et, en feuilletant de la documentation de l’époque, j’ai été surpris de constater que je me souvenais encore des codes des instructions les plus utilisées, par contre je ne me souviens plus par cœur des tables d’addition en octal, l’âge, peut-être?

 

Pour ceux que le début de cet article n’a pas encore rebuté, ou pour les nostalgiques du 90-40, nous poursuivrons avec la suite de l’examen du pupitre.

La zone Canal

A l’aide de la molette à 8 positions située à gauche, on sélectionnait le périphérique souhaité dont on avait l’adresse sur les lampes de droite et un indicateur d’erreur.

l’overflow

L’indicateur indiquait l’occurrence d’un dépassement de capacité lors d’une opération arithmétique.

Les interruptions

L’indicateur indiquait si les interruptions étaient désactivées et la clé associée permettait d’inverser la situation.

La parité mémoire

L’indicateur indiquait la détection d’une erreur de parité en mémoire. La clé située en dessous permettait de lancer la poursuite du programme (non sans risque puisqu’une instruction ou une donnée utilisée avait été corrompue.).

Vous êtes arrivés à la fin, bravo ! Vous êtes probablement devenus, à cette occasion, un vrai pro du 90-40 mais, c’est bien dommage, il n’en existe plus….

Quelques anecdotes sur le développement du logiciel sur 90-40

Les cartes perforées.

Qui n’a pas connu, dans les années 70, les affres d’un paquet renversé lors des manipulations. Cartes qu’il fallait alors re-trier à l’aide du dernier listing disponible.

Ceci est une carte perforée. Chaque colonne porteuse de plusieurs perforations, est porteuse d’un code de caractère. Souvent les cartes comportaient en première ligne, en haut de la carte, l’impression du caractère correspondant à la colonne. Ce n’est pas le cas ici, remettre la carte au bon endroit passe de la gageure à l’exploit!

Cependant, pour gagner du temps et économiser du papier, il arrivait pour des modifications supposées simples de ne pas éditer de listing à chaque passage.

La remise en ordre du paquet devenait alors plus problématique…

De plus le risque de mauvaise manipulation n’était pas si rare que cela, car la capacité du bac du lecteur de cartes était plus faible que la taille des paquets des programmes. Le désir d’aller vite de l’analyste et le côté facétieux des paquets de cartes, toujours prompts à se répandre sur le support où on les avait délicatement posés ou l’intervention supposée de Trolls , pouvait mener à de fastidieux exercices de tri.

Paris 1974 : Exercice de frappe sur perfo-vérif. Au deuxième plan on voit le calculateur C2 (scientifique) avec son pupitre ses dérouleurs de bandes et le lecteur perfo de ruban papier. On remarquera, en partie caché derrière la poignée de la porte, le lecteur de cartes initial. Les Trolls ne sont pas visibles.

Pour éviter ce type de travail trop fastidieux, chacun avait sa (ou ses) méthode(s).

  • Numéroter les cartes, en prenant soin de ménager des trous dans la numérotation, pour les adjonctions futures (exemple numéroter de 10 en10 au départ), ce qui ralentissait la saisie puisque les numéros étaient attribués et tapés « à la main » et qui s’oubliait au fur et à mesure que l’on s’éloignait du dernier incident.
  • Barrer, sur la tranche, le paquet de cartes d’un trait de feutre oblique, ce qui permettait en cas d’accident de faire un premier classement grossier limitant les recherches pour interclassement à un nombre de cartes plus réduit.
  • Passer les cartes par petits paquets en les entourant d’un élastique…

Au-delà des maladresses de manipulations des cartes, le lecteur de cartes jouait aussi son rôle de trouble-fête. Alors que les derniers lecteurs étaient relativement fiables grâce à des systèmes de soufflerie pour décoller les cartes les unes des autres en entrée et un système d’aspiration pour les présenter au système de lecture, les premiers lecteurs étaient entièrement mécaniques. Une lame, de l’épaisseur d’une carte, dotée d’un mouvement alternatif poussait, dans un fracas important et des vibrations impressionnantes, la carte dans une fente calibrée pour laisser passer une carte mais pas deux. Un spécialiste réglait régulièrement cette épaisseur. Mais, les cartes perforées, sensibles à l’humidité ou à une certaine détérioration après plusieurs passages pouvaient dépasser l’épaisseur requise… Il s’en suivait un bourrage nécessitant de retaper les cartes détériorées et de reprendre à zéro le processus de lecture, après appel de la maintenance, heureusement sur place, pour recaler la hauteur de la fente.

A l’inverse la lecture simultanée de deux cartes « minces » donnait des résultats plus divers (erreur du lecteur, ligne de programme correspondant à la superposition de trous des deux cartes totalement aléatoire, non significative et générant une erreur à la compilation ou à l’assemblage…).

Une autre facétie de ce lecteur, plus subtile, m’avait fait perdre un temps non négligeable. Le chariot de réception des cartes en sortie du lecteur a eu un point dur, ce qui fait qu’au lieu de descendre régulièrement à l’arrivée de chaque carte supplémentaire il était resté légèrement bloqué un temps limité qui avait suffi à ce que les cartes se mélangent après le passage dans le lecteur. Le phénomène ayant eu lieu après lecture des cartes, le programme produit a fonctionné correctement. Suite à une demande du dispatching lors de la présentation du logiciel, je dus faire une modification mineure de changement de la logique de l’affichage d’un symbole. La modification effectuée rapidement, j’ai relancé la chaîne de production de l’exécutable et ai constaté avec surprise que le programme ne fonctionnait plus correctement. J’ai donc effectué une relecture fouillée du code nouveau et n’ai rien trouvé d’anormal. Je suis donc passé à la mise en place de traces autour de la modification sans aucun résultat. Ne comprenant plus pourquoi cela ne fonctionnait plus j’ai repris le processus habituel de débogage de l’ensemble du code et me suis donc aperçu de la présence de cartes permutées. Avec l’aide de la maintenance locale le problème a enfin pu être identifié et réparé. Mais, en sachant, que le processus de production d’un programme prenait environ une heure à chaque passage, il est aisé de comprendre comment un simple point dur a pu faire perdre plus d’une journée pour une modification simpliste.

Le ruban perforé.

A la fin de chaque assemblage ou compilation on sortait un ruban perforé représentant le module objet correspondant à la source traitée. Puis on rentrait dans le lecteur les différents modules objets et la table des symboles dont on souhaitait faire l’édition de lien et on produisait un exécutable dont on perforait l’image.

L’image n’est pas d’un dispatching, mais elle conforte le fait que nous n’étions pas les seuls à avoir des problèmes à gérer le ruban papier!

Malgré l’expérience, deux perturbations majeures pouvait affecter le développeur.

  • La mauvaise (ou l’absence d’) estimation de la longueur restante de ruban. En général, et en application des lois de Murphy,  c’est quelques secondes avant la fin de la perforation souhaitée que le ruban s’avérait trop court, obligeant à reprendre le processus depuis le début….
  • Le déchirement. Une fois le ruban entièrement perforé, celui-ci gisait sur le sol. Il fallait le récupérer, le placer sur un enrouleur, afin de pouvoir le ranger soigneusement ou de pouvoir le réutiliser dans la suite du processus. Lors de la phase d’enroulement, il arrivait que le ruban se tournant sur lui-même fasse un nœud et se déchire en arrivant sur l’enrouleur. Plus fréquent encore était le pied du développeur posé malencontreusement sur le ruban qui se vengeait en cassant. Deux écoles pour y remédier : recommencer la production du ruban abimé ou se lancer dans un recollage du ruban et la reconstitution des perforations abimées par la déchirure à l’aide d’un appareil  rustique ad hoc.

Le développement du logiciel sur C 90-40

Le développement initial

Nous n’avons pas retrouvé suffisamment d’informations sur les développements initiaux pour compléter les informations de l’article principal, aussi nous focaliserons nous sur les développements complémentaires qui ont émaillé toute la longue vie des C 90-40.

Il est à noter qu’en dehors du développement de modèles de calcul de réseau effectué par la Direction des Etudes et Recherches, les autres développements ont été effectués par les équipes régionales avec très ponctuellement un soutien externe de CII.

Les développements ultérieurs

Le besoin

Les besoins étaient issus des exploitants du système électrique ou de la partie informatique. Dans les deux cas le besoin pouvait présenter un caractère local, mutuel ou national. Dans tous les cas, une information mutuelle et réciproque était mise en place et permettait le partage des bonnes pratiques et des bonnes idées.

L’analyse

Une fois le besoin globalement exprimé, venait une phase d’analyse qui au-delà de la simple analyse du logiciel concerné, comportait un volet important sur l’impact sur les ressources mémoire vive (place, cartographie mémoire), ressources disque (place, cartographie disque), sur les ressources CPU. Compte tenu de l’optimisation poussée des ressources, l’ajout d’un simple marqueur tenant sur un bit, pouvait amener à des chamboulements des implantations, voire à une reprise globale de la cartographie disque ou mémoire, ce qui était toujours une opération très risquée, car elle impactait tous les sources des programmes, mais aussi éventuellement les performances en jouant sur les temps d’accès au disque.

Pour les programmes au cœur du système comme le scheduler, l’optimisation allait jusqu’à comparer le nombre global de temps de cycles machine de séquences réalisant le même objectif, mais avec des codages différents.

Le codage

Quasiment toutes les tâches tournant en temps réel étaient écrites en assembleur. Les autres, de moindre récurrence, étaient écrites en Fortran II temps réel, qui permettait d’inclure des séquences d’instructions assembleur. Il nous souvient que les temps globaux (analyse, codage, tests, intégration) pour la production d’un programme en assembleur étaient de l’ordre de 15% supérieurs à ceux de la production en Fortran. Par contre la maintenance évolutive ultérieure était beaucoup plus laborieuse en assembleur qu’en Fortran.

La production

Saisie
Après écriture sur papier du code, la saisie, que ce soit en assembleur ou en Fortran, se traduisait par la perforation sur cartes, à raison d’une ligne de code par carte, sur un perforateur de cartes disposant d’un clavier de type machine à écrire, et sans aucun écran.. La perforation se faisant en direct, toute faute de frappe signifiait une nouvelle frappe complète de la carte, ce qui amenait à être méticuleux dans la préparation et la frappe.

A chaque programme ou sous programme correspondait un paquet de cartes qui était la référence de base pour les modifications ultérieures et qu’il fallait donc conserver dans son intégrité. (Quelques anecdotes sur le développement du logiciel )

Assemblage ou compilation
Une fois la saisie terminée, les cartes étaient placées dans le lecteur perforateur et une commande depuis la console système (une télétype de type KSR, petite merveille de mécanique et de tringlerie puis de type ASR) lançait la lecture des cartes puis l’assemblage ou la compilation. Il en sortait un ruban binaire dont l’adresse d’implantation pouvait être fixe ou translatable. Si le programme comportait des sous-programmes, l’opération devait être répétée à l’identique pour chacun d’eux.

Pour un logiciel écrit en FORTRAN, le mode opératoire était légèrement différent de celui utilisé pour l’assembleur. Comme le compilateur FORTRAN ne tenait pas en mémoire, le dérouleur de bande était utilisé comme mémoire auxiliaire et la compilation s’effectuait en plusieurs passes.

Comme dans les temps actuels, assembleur et compilateur détectaient les erreurs de syntaxe, mais de façon beaucoup moins performante.

Edition de liens
Une autre commande lançait l’édition de liens ; il fallait alors lire les différents rubans obtenus dans l’étape précédente ainsi que la table des symboles qui permettait de faire le lien entre les références externes du programme (routines système, adresses physiques des données résidentes en mémoire, adresses des fichiers, etc). L’édition de lien se terminait par la production de l’exécutable sur un ruban perforé à partir d’un lecteur perforateur de ruban. Une fois la perforation terminée, le rouleau obtenu qui pouvait atteindre une taille importante, devait être remonté sur le lecteur perforateur. Une dernière commande lançait la lecture du ruban perforé et l’installation de l’exécutable sur disque. La lecture du ruban perforé s’accompagnait d’un contrôle de parité. Il suffisait alors d’une seule erreur de perforation pour que l’opération échoue. Dans ce cas, le ruban partait à la poubelle et il fallait recommencer.

La mise au point
La mise au point était laborieuse en l’absence d’outils de débogage et de plateforme de tests.
La procédure consistait à d’abord à lancer le programme dans un environnement figé sur le calculateur scientifique, puis une fois les limites de cette méthode atteinte, de passer, après avoir obtenu l’accord du dispatching, sur la machine fonctionnant en temps réel tout en gardant celle utilisée en secours avec la version ancienne, au cas où…
En cas de problème, dans les deux cas cités ci-dessus, le mode opératoire consistait tout d’abord à ajouter des traces (impression papier ou écriture dans un espace mémoire dédié à cet effet). L’ajout de traces pouvant modifier le fonctionnement du programme (décaler un écrasement en mémoire par exemple et le rendre non détectable), la deuxième méthode consistait à insérer dans le programme des instructions « HLT » (halte). Le calculateur s’arrêtait. On pouvait alors, en actionnant une clé, faire fonctionner le calculateur en pas à pas et consulter au pupitre les registres de calcul matérialisés par 24 lampes (parmi les registres on pouvait visualiser selon la position d’une molette, le registre C contenant l’instruction en cours de décodage, les registres A (accumulateur principal), B (extension de l’accumulateur), X (registre d’index), P (compteur qui indiquait l’emplacement mémoire de l’instruction en cours)).

A l’aide de l’accessibilité à ces registres on pouvait visualiser des zones mémoire, faire des patches en mémoire (en savoir plus). Cette méthode amenait les ingénieurs qui maîtrisaient cette technique à connaître par cœur les codes (en octal ) des instructions les plus courantes et à savoir effectuer avec une certaine dextérité les opérations courantes en base huit pour recalculer les emplacements mémoire visés.

Pendant tout ce temps les dispatcheurs devaient se contenter du synoptique, des enregistreurs et du téléphone….

Maigre consolation, les dumps mémoire étaient de taille raisonnable et relativement facile à décrypter en l’absence de structures systèmes complexes.

architecture du palier C 90-40

L’architecture initiale du système basée sur les CAE C 90 xx  était une architecture doublée.
Toutefois les deux calculateurs, lorsqu’ils existaient – il n’y eu qu’un seul calculateur à Brive jusqu’à la disparition du site et Marseille a fonctionné très longtemps avec un seul calculateur – étaient différents.
S’ils possédaient un certain nombre de périphériques communs (partagés ou identiques) tels que disques rapides, console système, lecteur et perforateur de rubans, accès télécom, système de visualisation, imprimante ligne, centrale de sons d’alarme, le C1 prioritairement réservé au temps réel ne comportait pas de dérouleurs de bandes, pas de lecteur de cartes, pas de table traçante…
Le C2 dit « calculateur scientifique », en dehors des périodes où il servait de secours automatique au C1, était utilisé pour le développement et la mise au point de programmes, pour des travaux statistiques, pour la facturation des clients nationaux (raccordés en haute et très haute tension)…

Insérer schéma config

En fonctionnement temps réel complet à deux calculateurs, le calculateur secours reprenait la main en cas de détection de panne du principal (absence de réarmement d’un watchdog). Lors de cette reprise, un certain nombre d’actions opérateurs pouvaient avoir été perdues, le processus de synchronisation entre les deux calculateurs n’étant globalement effectué que toutes les demi-heures.
Pour des raisons économiques et ou d’opportunité matérielle, il arrivait que les deux calculateurs soient encore plus différents. A Lille, il y avait un 90-10 et un 90-40, ce qui, malgré une certaine compatibilité des machines, amenait à des versions logicielles aménagées. A Paris, le C1 disposait de 32 Kmots de mémoire vive et le C2 uniquement de 24 Kmots. Un certain nombre de données se trouvaient donc à une certaine adresse en mémoire basse (C2) et à une adresse translatée de 16 Kmots – en mémoire haute – (C1). Selon que l’on exécutait le programme sur le C1 ou le C2, un test permettait d’armer ou non l’extension, ce qui permettait de disposer du même code sur les deux machines et d’un espace supplémentaire en mémoire basse (la seule ou l’on pouvait mettre les instructions) pour exécuter des tâches gourmandes en ressources et jugées moins indispensables à l’exploitation du réseau électrique d’alors (calcul de répartition par exemple) sur le C1.

Compte tenu de la durée de vie du système, des détails de l’architecture ont évolué, mais ses principes sont restés les mêmes.

Les évolutions les plus marquantes ont porté sur  :

  •  Le système de visualisation. Les premiers écrans étaient des écrans alphanumériques monochromes permettant d’afficher des listes ou des pseudo-représentations de postes électriques à l’aide de quelques caractères disponibles (*, – etc).

images écrn llille

Paris a disposé assez tôt d’écrans graphiques monochromes à balayage cavalier permettant notamment l’affichage de schémas de postes. Puis l’apparition de consoles semi graphiques couleurs a révolutionné le look du système moyennant de nombreux développements, dans un univers contraint en place et en puissance, pour ajouter les données nécessaires aux nouveaux tracés et aux informations de couleurs.

  • Les communications. Les calculateurs étaient raccordés initialement aux ERC, l’arrivée des CACQ s’est traduite par de nombreuses modifications au niveau des protocoles de communication, mais aussi sur la logique même de traitement. Les ERC émettaient toutes les informations en mode cyclique 10 secondes, le CACQ qui les a remplacés n’envoyait les télésignalisations que sur changements d’états. De plus lors des redémarrages, il fallait désormais effectuer une vérification globale de toutes les signalisations (contrôle général). Les calculateurs temps réel ont également eu à communiquer informatiquement avec le monde des prévisionnistes et des statisticiens, alors que les premières communications se faisaient par listing papier ou par telex (*). D’autant qu’il nous en souvienne ces modifications importantes dans un système vieillissant et contraint furent globalement une réussite sans que cela ne surprenne grand monde….
    (*) Pour envoyer de façon journalière et « automatique » le programme de marche aux centrales thermiques, on générait une bande telex depuis le calculateur scientifique du dispatching, puis ce ruban était envoyé via un telex classique. Comme il n’y avait pas de perforateur de ruban telex sur nos 90 40, on se servait du perforateur de ruban du 90 40. Mais les codes telex étaient à cinq trous et ceux du calculateur à huit trous. Une ingénieuse pièce métallique placé sur le perforateur permettait de caler le ruban telex d’un côté du perforateur et un travail de conversion de code avait permis de d’éditer les codes ordinateur correspondants aux codes telex souhaités.
  • Le remplacement des machines à écrire qui assuraient les logs d’exploitation. Les machines de type ASR furent remplacées par des machines à boule. Bien que ceci apparaisse comme une évolution de bien peu d’importance, elle a donné pas mal de fil à retordre aux développeurs de l’époque. Le pilotage de ces machines était, en effet, effectué directement au niveau du calculateur central. Il a donc fallu pour effectuer les modifications se replonger dans du vrai temps réel avec gestion des interruptions, et des temps d’attente de la frappe des caractères. Le retour chariot ou le changement de couleur du ruban encreur n’ayant pas le même temps de réponse que la frappe d’un simple caractère…