|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 13824 (0x3600)
Types: TextFile
Names: »alchd«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system
└─⟦72244f0ef⟧
└─⟦this⟧ »alchd«
>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◀