Mit første rigtige program: Stabilitet i stærkstrømsnet i Algol-58

Fra DDHFwiki
(Omdirigeret fra Sw Netstabilitet)
Spring til navigation Spring til søgning

af Christian Gram

Den første bog om programmering, jeg fik stukket ud i starten af 1958, var ”Kodning för BESK”. Den beskrev meget kortfattet maskinsproget for den første svenske datamaskine BESK, og for en helt uforberedt læser mange hundrede kilometer fra Stockholm var det tung læsning. I operationslisten var f.eks. alle ordrer noteret hexadecimalt (dvs. i 16-talsystemet). Det blev ikke lettere af, at den allerførste sætning i bogen var ”I denne bog betyder ÷ plus”! Et halvt år senere fik jeg ”Lærebog i kodning for DASK”, som var meget mere forståelig, og samtidig fik jeg lejlighed til at prøve DASK i virkeligheden, og det hjalp unægtelig meget.

En af NESA’s direktører, Thorkild Franck, så tidligt mulighederne for at få udført tekniske beregninger på datamaskine, og sammen med ingeniør Nordendorff bad han Regnecentralen om at lave stabilitetsberegninger. Stabiliteten i et stærkstrømsnet kan analyseres ved at kikke på ”sving-kurver”, som findes ved at løse et antal sammenhørende 2.ordens differentialligninger.

Jeg kastede mig ud i at finde en simpel numerisk differensmetode til at løse sådan et system af differentialligninger. Faget numerisk analyse i forbindelse med beregninger på datamaskine var i sin vorden, og begreberne stabilitet/instabilitet af selve beregningsmetoden – ikke at forveksle med stabiliteten i stærkstrømsnettet – stod ikke alt for klart for mig. Derfor brugte jeg den enkleste ”forward difference” metode (hvor man approksimerer differentialkvotienter med simple differenskvotienter). Til gengæld er man nødt til at løse ligningerne skridtvis med meget små tids-skridt, og det koster meget regnetid, men det koster også regnenøjagtighed i det lange løb.

Programmeringen – eller kodningen, som det hed dengang - foregik på særlige programark, hvor jeg skrev ordre efter ordre i DASK’s maskinsprog (”assembler”). Operationslisten omfattede 32 ordrer, hver med adskillige varianter. I forhold til BESK’s maskinsprog, som brugte hexadecimale adresser, føltes det som en stor behagelighed, at vi i DASK kunne bruge decimale adresser.

Programmeringssproget Algol var under udvikling i en international gruppe, men der var ingen oversætter (compiler) for Algol eller noget andet højere programmeringssprog. Kodningen foregik derfor i maskinsprog, men jeg brugte Algol-lignende kommentarer i mit program til at forklare virkningen af maskinordrerne. Da jeg mente, at programmet var færdigt, overførte jeg maskinprogrammet (uden kommentarer) til hulstrimmel på en telex-lignende skrivemaskine, en såkaldt Flexowriter. Og så bestilte jeg regnetid på DASK. Det foregik ved at give en såkaldt køreseddel med ønske om 15 min., ½ time eller måske mere, til kørselsleder Hans Jakob Aastrup, som fordelte DASK’s tid mellem de mange ihærdige brugere. Der var kamp om DASK-tid om dagen, så mange af mine prøvekørsler foregik sent om aftenen.

Selve programkørslen foregik således:

1. Jeg satte hulstrimlen med mit program i DASK’s strimmellæser.

2. Jeg indstillede forskellige knapper og kontakter på kontrolbordet sådan, at DASK var klar til et nyt program. Bl.a. skulle man manuelt indsætte startadressen på den operativsystem-rutine, som kunne indlæse mit program. Ved at bruge START-nøglen fik jeg derefter DASK til at indlæse og lagre mit program i arbejdslageret.

3. Så blev hulstrimlen med inddata sat i strimmellæseren og endnu nogle knapper blev stillet manuelt, bl.a. en omskifter, der valgte hvordan programmets resultater blev udskrevet. Mulighederne var S for skrivemaskine, P for hulstrimmel-perforator og S+P for begge.

4. Endnu et tryk på START-nøglen startede mit program, og hvis jeg havde programmeret rigtigt, skulle programmet nu indlæse mine data, løse differentialligningerne og udskrive et par tabeller med resultaterne, altså de ønskede svingkurver for el-nettet.

De første mange gange gik det selvfølgelig galt, og jeg tilbragte en del sene aften- og nattetimer med at finde fejl i mit program, lave nye program-hulstrimler og foretage nye prøvekørsler. Men efter et ret stort – og lykkelig glemt - antal forsøg lykkedes det til sidst at producere nogle tabeller, som ingeniør Nordendorff glad drog hjem til NESA med. Selve beregningerne tog højst et par minutter, men tabeludskriften på den elektriske skrivemaskine tog henimod 10 minutter. Vi lavede en hel del beregninger med forskellige beregningsparametre, og vi forsøgte at lave skøn over de numeriske fejl i beregningerne. Men hvor nøjagtige – eller unøjagtige - resultaterne egentlig var, fandt vi aldrig ud af, men Sjælland og København oplevede da ikke store strømafbrydelser de følgende år, så tabellerne var vel ikke helt ved siden af. Få år efter fik jeg fat på Germund Dahlqvist’s doktorafhandling, som netop handlede om numerisk stabilitet ved løsning af differentialligninger, og den kunne have givet svar på nogle af vore uløste problemer.

Til højre ses lidt af programmet dokumenteret i Algol58. Venstre kolonne er Algol58-programmet, og højre kolonne er kommentarer til programmet.

I det forlængst hedengangne magasin "Ingeniøren" skrev ingeniør Nordendorff en artikel[1] om stabilitetsproblemet, og i en følge-artikel[2] beskrev jeg den numeriske algoritme og viste hovedtrækkene som et Algol-58 program. Algol var selvfølgelig ukendt for de fleste, og derfor tilføjede jeg almindelig tekst, der forklarede de mærkelige Algol-symboler. (Algol-58 var forløberen for Algol, som blev vidt udbredt og som er dokumenteret i den berømte Algol60-rapport.)

Ref:

  1. C.O. Nordendorff: Stabilitetsanalyse af primære højspændingsnet. Ingeniøren 67, nr.23 (1958), pp. 701-709
  2. Chr. Gram: Some Notes on Digital Calculation of Power System Swing Curves and their Accuracy. Ingeniøren vol. 3, sept. 1959, pp.82-89.