DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦7d54a875f⟧ TextFile

    Length: 13824 (0x3600)
    Types: TextFile
    Names: »alchd«

Derivation

└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system
    └─⟦72244f0ef⟧ 
        └─⟦this⟧ »alchd« 

TextFile

>fo @üAL.RC.21/1ü@
>a1 INDLEDNING
I det følgende beskrives Asynchronous Line Control Protocol til
>ul
halv duplex
dataoverførsel (ALC/HD).

ALC/HC-protokol er designet til dataoverførsel via et kommunikationsmedie,
der typisk vil være et direkte 
>ul
point-to-point
link.

Kommunikationsmediet antages at kunne køre 
>ul
halv duplex
kommunikation, idet det betragtes som een kanal, hvorpå der enten
kan overføres data den ene vej eller den anden vej, men ikke
begge veje samtidig.

Kanalen forbinder en
>ul
primær station
med en
>ul
sekundær station.
Den
>ul
primære station
kontrollerer kanalen og sender
>ul
kommandoer
til den sekundære station i den anden ende. Den
>ul
sekundære station
må vende transmissionsretningen ved modtagelse af en kommando,
og sende en
>ul
kvittering
til den primære station.

Information kan flyde dels ved hjælp af kommandoer fra primær station
til sekundær station og dels ved hjælp af kvitteringer fra sekundær
station til primær station.

>ne 14
>sp 12
>fg Ubalanceret konfiguration.

>ne10
ALC/HD-protokollen sikrer dels at information kan føres gennem
kommunikationsmediet

 - uden at ændres
 - uden at forsvinde
 - uden at blive dubleret

dels at informationsoverførslen opgives indenfor endelig tid (t),
hvis kommunikationsmediet er fejlbehæftet i hele denne periode.

Ved passende valg af fejlcheckmekanisme, kan sandsynligheden
for at en station
>ul
ikke
opdager en transmissionsfejl, gøres vilkårlig lille.

I denne beskrivelse af ALC/HD-protokollen, antages det derfor,
at der
>ul
ikke
forekommer uopdagede transmissionsfejl.

Telegramformater er specificeret i AL.RC.22.

>a1 KOMMANDOER
Kommandoer er de telegrammer, den primære station kan sende til den
sekundære station i den anden ende af kommunikationsmediet.

Følgende
>ul
operationskoder
anvendes til kommandoer:

 POLL_0 (værdi lig med ASCII 17)
 POLL_1 (værdi lig med ASCII 18)

 DATA_0 (værdi lig med 128)
 DATA_1 (værdi lig med 129)

 ENQ    (værdi lig med ASCII 5)

POLL_0 og POLL_1 benyttes af den primære station til pollning og
afhentning af information fra den sekundære station (0 og 1 kaldes
>ul
sekvensnumre).

DATA_0 og DATA_1 benyttes af den primære station til afsendelse af
information til den sekundære station (0 og 1 kaldes sekvensnumre).
  
ENQ benyttes af den primære station til afhentning af sidst afgivne
kvittering fra den sekundære station i den anden ende.

>a1 KVITTERINGER
Kvitteringer er de telegrammer den sekundære station kan sende til den
primære station i den anden ende af kommunikationsmediet.

Følgende
>ul
operationskoder
anvendes til kvitteringer:

 DATA_0 (værdi lig med 130)
 DATA_1 (værdi lig med 131)

 ACK_0  (værdi lig med ASCII 19)
 ACK_1  (værdi lig med ASCII 20)

 RESET  (værdi lig med ASCII 21)

DATA_0 anvendes dels til accept af et modtaget POLL_0-telegram
eller DATA_0-telegram dels til afsendelse af information fra den
sekundære station til den primære station.

DATA_1 anvendes dels til accept af et modtaget POLL_1-telegram eller
DATA_1-telegram dels til afsendelse af information fra den sekundære
station til den primære station.

ACK_0 anvendes til accept af et modtaget POLL_0-telegram eller
DATA_0-telegram, når den sekundære station ikke har information at
afsende.

ACK_1 anvendes til accept af et modtaget POLL_1-telegram eller
DATA_1-telegram, når den sekundære station ikke har information at
afsende.

RESET benyttes som svar på et ENQ-telegram, når den sidste 
DATA-kvittering eller ACK-kvittering er blevet resat, fx på grund af
timeout eller restart af maskinen.

>a1 MULIGE PROTOKOLSEKVENSER
I det følgende beskrives de mulige protokolsekvenser, dvs. de
>ul
kvitteringer
den sekundære station kan sende på grundlag af en modtaget
>ul
kommando.

>ne 22
>sp 20
>fg Mulige kvitteringer på ENQ-kommando.

>ne 16
>sp 14
>fg Mulige kvitteringer på POLL-kommando.

>ne 16
>sp 14
>fg Mulige kvitteringer på DATA-kommandoer.

>a1 PRIMÆR STATION
I det følgende beskrives, hvordan den primære station fungerer under
opstart, normal dataoverførsel og i fejlsituationer.

Under opstart sender den primære station med POLL-timeout sekunders
mellemrum et POLL-telegram til sekundær station. 

Når den primære station modtager en kvittering  med enten RESET, DATA 
eller ACK 
er forbindelsen oprettet.

>ne 20
>sp 18
>fg Opstart af primær station.

Under normal dataoverførsel fra primær station til sekundær station
sender den primære station et DATA-telegram indeholdende en brugermeddelelse
og et sekvensnummer.

Derefter modtager den en kvittering for at telegrammet blev korrekt
modtaget hos den sekundære station.

Herefter sender den primære station et nyt DATA-telegram med en ny
brugermeddelelse og et nyt sekvensnummer.


>ne 24
>sp 22
>fg Normal dataoverførsel fra primær til sekundær.

Under normal dataoverførsel fra sekundær station til primær station
sender den primære station et POLL-telegram indeholdende et
sekvensnummer.

Når primær station modtager DATA-kvittering sender
den primære station et POLL-telegram med næste sekvensnummer.

Når primær station modtager ACK-kvittering, og den primære
station ikke har data som skal overføres, venter den primære station
POLL-delay sekunder inden den sender en POLL-kommando med næste
sekvensnummer.
(Hvis der kommer brugerdata i mellemtiden, sender primær station en
DATA-kommando med næste sekvensnummer).
   
Under normal dataoverførsel i begge retninger ser 
kommando-kvitterings-flowet ud som på følgende figur.

>ne 16
>sp 14
>fg Normal dataoverførsel fra sekundær til primær.
    
>ne 20
>sp 18
>fg Normal dataoverførsel i begge retninger.

Imidlertid opstår der af og til transmissionsfejl.

Dette betyder, at den primære station går
i timeout.

I dette tilfælde sender den primære station
et ENQ-telegram.
  
Ved modtagelse af en forvansket kvittering, gør den primære 
station intet.

Et forvansket telegram er et telegram, hvor mindst eet af følgende
er opfyldt:

 - operationskoden er ukendt
 - checksummen viser transmissionsfejl
 - telegrammets længde er ukorrekt

Timeoutperioden efter afsendelse af en DATA-kommando sættes til

  (max telegramlængde + kvitteringslængde) bits

divideret med

   transmissionshastighed målt i bps

plus

   processtid i den sekundære station

Ved en maximal telegramlængde på 261 bytes a 12 bits, dvs 3132 bits,
en kvitteringslængde på 4 bytes a 12 bits, dvs 48 bits,
en transmissionshastighed på 100 bps
og en processtid i den sekundære station på 200 millisekunder
fås en timeoutperiode på 32 sekunder.
    
>ne 47
>sp 47
>fg Tilstandsdiagram for primær station
   
I ventepunkterne (mærket *) er modtagelse af nonsens eller UO
ikke angivet, hvis det ikke har betydning for tilstandsovergangen.
    
Stationen reagerer
>ul
ikke
på nonsens.
   
Når UO ikke er angivet, sættes det i kø, når det ankommer.
  
NB ! Primær station afsender kun en kommando til sekundær når den 
>ul
har
en tom UI-buffer klar.
>np
Den reducerede TILSTANDS-HANDLINGS-TABEL for primær station er
angivet på følgende figur.

Under opstart udføres følgende:

 1: sekvensnummer sættes til 1
 2: tilstand sættes til "disconnected"
 3: udfør handling 2 (se nedenfor)

>ne 20
>sp 18
>fg Tilstands-handlingstabel for primær station.

>ul
HANDLINGER

  0: gør intet.

  1: send UO-buffer tilbage med
     resultat "ingen forbindelse".

  2: 2.1 send ENQ-telegram
     2.2 start ENQ-timeoutperiode
     2.3 antal transmissionsforsøg
         sættes til 1.

  3: 3.1 tæl sekvensnummer op (modulo 2)
     3.2 send DATA-kommando med sekvensnummer
     3.3 gem UO-buffer som aktuel UO-buffer
     3.4 start DATA-timeoutperiode
     3.5 antal transmissionsforsøg sættes til 0
     3.6 resultatet i aktuel UO-buffer sættes
         til "afsendelse ok".

  4: sæt UO-buffer i kø til overførsel.

  5: hvis sekvensnummeret i ACK-kvittering
     er lig med sekvensnummeret i den 
     afsendte DATA-kommando, så udfør
     5.1 og 5.2 ellers udføres intet.

     5.1 send aktuel UO-buffer tilbage 
         til bruger

     5.2 hvis UO-buffer kø er tom, så
         start POLL-delay-timeoutperiode
         og gå i tilstand 2 ellers tag
         UO-buffer fra kø, udfør 3 og
         gå i tilstand 3.

     
  6: 6.1 resultatet i aktuel UO-buffer sættes
         til "måske dubleret"

     6.2 retransmitter sidste DATA-kommando

     6.3 tæl antal transmissionsforsøg een op

     6.4 start DATA-timeoutperiode

  7: hvis sekvensnummeret i ACK-kvitteringen
     er lig med sekvensnummeret i den afsendte
     DATA-kommando, så udfør 5.1 og 5.2, ellers
     udfør 6.2, 6.3 og 6.4 og gå i tilstand 3

>ne12
  8: hvis antal transmissionsforsøg er større
     end eller lig med max. antal transmissions-
     forsøg, så udfør 8.1, 8.2 og 2, og gå i
     tilstand 1, ellers udfør 2.1, 2.2 og 6.3
     og gå i tilstand 4.

     8.1 send aktuel UO-buffer tilbage med
         resultatet "afsendelse måske ok"

     8.2 send alle UO-buffere i køen tilbage
         med resultatet "ingen forbindelse"

  9: sæt sekvensnummer til samme værdi som
     i ACK-kvitteringen

>ne3
 10: 10.1 tæl sekvensnummer op (modulo 2)
     10.2 send POLL-kommando med sekvensnummer
     10.3 start POLL-timeoutperiode

 11: 11.1 sæt sekvensnummer lig med sekvensnum-
          mer i DATA-kvitteringen

     11.2 frigiv data til UI-buffer

 12: hvis sekvensnummer i DATA-kvitteringen
     er lig med sekvensnummeret i den afsendte
     DATA-kommando, så udfør 11.2, 5.1 og 5.2
     ellers udfør 6.2, 6.3 og 6.4 og gå i
     tilstand 3.

 13: hvis sekvensnummer i ACK-kvitteringen er
     lig med sekvensnummeret i den afsendte
     POLL-kommando, så udfør 5.2 ellers udføres intet.

 14: enq-tilstand sættes til DATA og 8 udføres

 15: enq-tilstand sættes til POLL og 8 udføres

 16: hvis enq-tilstand er lig med DATA, så udfør 6,
     ellers udfør 5.2

 17: hvis enq-tilstand er lig med DATA, så udfør 7,
     ellers udfør 13

 18: hvis enq-tilstand er lig med DATA, så udfør 12,
     ellers udfør 19

 19: hvis sekvensnummer i DATA-kvitteringen
     er lig med sekvensnummeret i den af-
     sendte POLL-kommando, så udfør 11.2
     og 5.2, ellers udfør intet

>a1 SEKUNDÆR STATION
Under normal dataoverførsel fra den primære station til den
sekundære station kvitterer den sekundære station for en
DATA-kommando med et ACK-telegram.

Ved modtagelse af en forvansket kommando, kvitterer den sekundære
station
>ul
ikke.

Hvis ikke der findes en brugerbuffer til de læste data, kvitterer
den sekundære station
>ul
ikke.

Ved modtagelse af en ENQ-kommando, svarer den sekundære station med
sidste kvittering, dvs. RESET, hvis stationen netop er startet op og
ellers ACK_0, ACK_1, DATA_0 eller DATA_1.

Hvis der sekundære station har data der skal overføres, gøres dette
i en DATA-kvittering med samme sekvensnummer som en modtagen
POLL-kommando eller DATA-kommando.

Den sekundære station kan altså kun afsende data, når den modtager
enten en POLL-kommando eller en DATA-kommando.

Den først efterfølgende POLL-kommando eller DATA-kommando som den
sekundære station modtager, opfattes som en kvittering for de
afsendte data, dvs. den sekundære station frigiver outputbufferen
til brugeren.

Den sekundære station holder styr på en kommando-timeoutperiode,
således at den ved overskridelse af denne regner forbindelsen
for "disconnected".

>ne 47
>sp 47
>fg Tilstandsdiagram for sekundær station.

Den reducerede TILSTANDS-HANDLINGS-TABEL for sekundær station
er angivet på følgende figur.

Under opstart udføres følgende:

 1. tilstand sættes til "disconnected"

>ne 16
>sp 14
>fg Tilstands-handlingsdiagram for sekundær station.

>ul
HANDLINGER

  0: gør intet

  1: send UO-buffer tilbage med
     resultat "ingen forbindelse"

  2: send RESET-kvittering

  3: sæt UO-buffer i kø

  4: send alle UO-buffere i køen
     tilbage med resultat 
     "ingen forbindelse"

  5: send aktuel UO-buffer tilbage
     med resultatet "afsendelse
     måske ok" og udfør 4

  6: 6.0 start kommando-timeout,
         hvis UI-buffer findes,
         udføres 6.1, 6.2 og 6.3,
         ellers udføres intet

     6.1 input kopieres ind i UI-buffer,
         der sendes tilbage til bruger
 
     6.2 hvis UO-buffer kø er tom, så
         send ACK-kvittering med samme
         sekvensnummer som i kommandoen
         og gå i tilstand 2, ellers
         udfør 6.3, 6.4 og gå i tilstand 3

     6.3 tag UO-buffer fra kø og gør den
         til aktuel UO-buffer

     6.4 send DATA-kvittering med samme
         sekvensnummer som i kommando

  7: udfør 6.0 og send sidste kvittering

  8: udfør 6.0, udfør 6.2

  9: 9.1 aktuel UO-buffer sendes tilbage til
         bruger med resultat "afsendelse ok",
         udfør 6

 10: udfør 9.1, udfør 6.2

>a1 VERIFIKATION AF ALC/HD-PROTOKOLLEN

( følger senere )
▶EOF◀