|
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: 10752 (0x2a00) Types: TextFile Names: »alcfd«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »alcfd«
>fo @üAL.RC.20/1ü@ >a1 INDLEDNING I det følgende beskrives Asynchronous Line Control Protocol til >ul fuld duplex dataoverførsel (ALC/FD). ALC/FC-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 fuld duplex kommunikation, idet det betragtes som værende 2 simplex kanaler, hvor hver kanal forbinder en >ul primær station med en >ul sekundær station. Den primære station kontrollerer kanalen og sender >ul kommandoer som den sekundære station i den anden ende sender >ul kvittering for. Hver ende af link'et består altså af 2 stationer, en primær station og en sekundær station, med 2 uafhængige kanaler. >ne 14 >sp 12 >fg Balanceret konfiguration. Information kan kun flyde ved hjælp af kommandoer fra primær station til sekundær station. >ne10 ALC/FD-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. Det er et grundlæggende træk i ALC/FD-protokollen at et >ul skift i sekvensnummeret (DATA_0 til DATA_1 eller omvendt; ACK_0 til ACK_1 eller omvendt) indikerer >ul fremskridt, mens >ul fejltilstande resulterer i uændret sekvensnummer. Ved et passende valg af fejlcheck mekanisme kan sandsynligheden for at en station >ul ikke opdager en transmissionsfejl gøres vilkårlig lille. I denne beskrivelse af ALC/FD-protokollen antages det derfor, at der >ul ikke forekommer uopdagede transmissionsfejl. >a1 KOMMANDOER Kommandoer er de telegrammer en primær station kan sende til en sekundær station i den anden ende af kommunikationsmediet (dvs. kommandoer flyder i >ul primærretning). Følgende >ul operationskoder anvendes til kommandoer: DATA_0 (værdi lig med 128) DATA_1 (værdi lig med 129) ENQ (værdi lig med ASCII 5) DATA_0 og DATA_1 benyttes af den primære station til afsendelse af information (0 og 1 kaldes >ul 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 en sekundær station kan sende til en primær station i den anden ende af kommunikationsmediet (dvs. kvitteringer flyder i >ul sekundærretning). Følgende >ul operationskoder anvendes til kvitteringer: ACK_0 (værdi lig med ASCII 19) ACK_1 (værdi lig med ASCII 20) RESET (værdi lig med ASCII 21) ACK_0 benyttes som accept af et modtaget DATA_0 telegram. ACK_1 benyttes som accept af et modtaget DATA_1 telegram. (0 og 1 kaldes >ul sekvensnumre). RESET benyttes som svar på et ENQ-telegram, når den sidste ACK-kvittering er blevet resat, fx på grund af en 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 20 >sp 18 >fg Mulige kvitteringer på ENQ-kommando. >ne 16 >sp 14 >fg Mulige kvitteringer på DATA-kommando. >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 jævne mellemrum en ENQ-kommando til den sekundære station i den anden ende. >ne 24 >sp 22 >fg Opstart af kommunikation. Når den primære station modtager enten en RESET-kvittering eller en ACK-kvittering er forbindelsen etableret. Under normal dataoverførsel sender den primære station et DATA-telegram indeholdende en brugermeddelelse og et sekvensnummer. Derefter modtager den en kvittering, der indikerer, at telegrammet blev korrekt modtaget hos den sekundære station, hvorefter den sender et nyt DATA-telegram med en ny brugermeddelelse og et nyt sekvensnummer. >ne 18 >sp 16 >fg Normal dataoverførsel. Imidlertid opstår der af og til transmissionsfejl. Dette betyder, at den primære station enten modtager et forvansket telegram eller den går i timeout på modtagelse af kvittering. Ved modtagelse af en forvansket kvittering, gør den primære station >ul intet. En forvansket kvittering er en kvittering, hvor mindst eet af følgende er opfyldt: - operationskoden er ukendt - checksummen viser transmissionsfejl - telegrammets længde er ukorrekt Ved timeout på modtagelse af kvittering sender den primære station en ENQ-kommando. Hvis den primære station derefter modtager en ACK-kvittering, retransmitterer den DATA-telegrammet, hvis sekvensnummeret i ACK-kvitteringen er forskellig fra sekvensnummeret i DATA-telegrammet, ellers frigives brugerbufferen. Ved timeout sender den primære station en ny ENQ-kommando. >ne 20 >sp 18 >fg Timeout på modtagelse af kvittering. Timeoutperioden efter afsendelse af DATA-kommando sættes til 2 * (max. telegramlængde + kvitteringslængde) bits divideret med transmissionshastighed målt i bps plus procestid i den anden ende >ne6 Ved en maksimal 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å 1200 bps og en procestid i den anden ende på 700 millisekunder fås en timeoutperiode på 6 sekunder. >ne10 Timeoutperioden efter afsendelse af ENQ-kommando sættes til (max. telegramlængde + ENQ telegramlængde+ 2 * kvitteringslængde) bits divideret med transmissionshastighed målt i bps plus procestid i den anden ende >ne4 Ved ENQ-telegramlængde på 4 bytes a 12 bits, dvs. 48 bits og samme størrelser som ovenfor fås en timeoutperiode på 3 sekunder plus 430 millisekunder. >ne 47 >sp47 >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. Hvor UO ikke er angivet, sættes det i kø, når det ankommer. Sekvensen 3-4-5-6-7-8-9-10 afspejler normal dataoverførsel af 2 databuffere. >np Den reducerede TILSTANDS-HANDLING-TABEL for primær station er angivet på følgende figur. I indgangene er brugt følgende notation : handling/næste tilstand. Under opstart udføres følgende : 1: sekvensnummer sættes til 1 2: tilstand sættes til "disconnected" 3: handling 2 udføres (se nedenfor under handlinger) 4: antal transmissionsforsøg sættes til 0 >ne 16 >sp 14 >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 tælles een op 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 resultat i aktuel UO-buffer sættes til "afsendelse ok" 4: sæt UO-buffer i kø til overførsel 5: hvis sekvensnummeret i ACK-kvitteringen 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å stop DATA- timeoutperiode og gå i tilstand 2, ellers tag UO-buffer fra kø, udfør 3 og gå i tilstand 3. 6: 6.1 resultat 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. 8: hvis antal transmissionsforsøg er større end eller lig med max antal transmissionsforsøg, så udfør 8.1 , 8.2, 3.5 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 resultat "måske dubleret" 8.2 send alle UO-buffere i køen tilbage med resultat "ingen forbindelse" 9: sæt sekvensnummer til samme værdi som angivet i ACK-kvitteringen. >a1 SEKUNDÆR STATION Under normal dataoverførsel kvitterer den sekundære station for en DATA-kommando med et ACK-telegram med samme sekvensnummer (se fig. 3). Ved modtagelse af en forvansket kommando kvitterer den sekundære station ikke. Hvis ikke der findes en brugerbuffer til de læste data, kvitterer den sekundære station ikke. Ved modtagelse af en ENQ-kommando, svarer den sekundære station med sidste kvittering, dvs. RESET, hvis stationen netop er startet op (se fig. 2), ACK_0 hvis sidst modtagne DATA-kommando var DATA_0 og ACK_1 hvis sidst modtagne DATA-kommando var DATA_1. >ne 40 >sp 38 >fg Tilstandsdiagram for sekundær station. 0: start sekundær station 1: vent på input 2: hent tom bruger inputbuffer 3: gå videre 4: hent tom bruger inputbuffer 5: gå videre 6: hent sidste kvittering Den reducerede TILSTANDS-HANDLING-TABEL for sekundær station er angivet på følgende figur. Under opstart udføres følgende : 1. tilstand sættes til "idle" 2. sidste kvittering sættes til RESET >ne 14 >sp 12 >fg Tilstands-handlingstabel for sekundær station. >ul HANDLINGER: 1: send sidste kvittering 2: hvis bruger inputbuffer findes udføres 2.1, 2.2 og 2.3, ellers udføres intet. 2.1 input kopieres ind i bruger inputbuffer, der sendes tilbage til bruger 2.2 ACK-kvittering med samme sekvensnummer som i DATA- kommandoen afsendes 2.3 sidste kvittering sættes til operationskode for afsendt ACK-kvittering >a1 VERIFIKATION AF ALC/FD-PROTOKOLLEN. I det følgende verificeres hvorledes ALC/FD-protokollen virker, idet >ul det totale kommunikationssystem bestående af et kommunikationsmedie, en primær station i den ene ende af dette og en sekundær station i den anden ende af dette betragtes. ( Følger senere) ▶EOF◀