|
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◀