För att vi ska förstå vilka problem som föreligger vid
kommunikation mellan datorer så ska vi börja så enkelt som
möjligt, vi börjar med kommunikation mellan två datorer via
serieporten, s.k. asynkron kommunikation. PC-datorer idag är oftast
utrustade med två serieportar, ofta kallade COM1 och COM2 och/eller
serial eller V24/RS232. Dessa portar används för kommunikation mellan
datorer via en nollmodemskabel, eller för kommunikation med diverse
kringutrustning t.ex. skrivare eller ett modem. För att en dator skall
kunna kommunicera med en annan dator eller kringutrusting krävs regler.
Vaddå för regler? Varför måste det finnas regler för
kommunikationen? Tänk dig ett samtal mellan två personer. Om
samtalet följer de oskrivna "regler" som finns vid kommunikation
mellan människor, dvs. att man lyssnar när den andra talar och talar
när det är ens tur, så flyter det på ganska bra och
samtalet kan genomföras på ett vettigt sätt. Men om båda
pratar samtidigt och i mun på varandra så skapar det kaos, och
troligen så får ingen ut någon större nytta av det. Om
datorerna inte skulle ha fasta regler som gäller när dom skall
"prata" och när dom skall "lyssna", så skulle
kommunikation inte kunna genomföras, kommunikationen skulle inte leda
nån vart och den skulle avbrytas. Dessutom skall man ha i åtanke
att datorer är dumma, de kan inte fatta egna beslut, de kan inte se
nyanser eller läsa av känslor, egenskaper som människan är
bestyckad med och kan använda vid kommunikation med andra människor.
För att kommunikation mellan datorer ska kunna ske så krävs
alltså mycket strikta regler. Dessa regler specifieras i vad man kallar
ett kommunikationsprot okoll.
Asynkron kommunikation är en kommunikationsform där det inte finns
något som håller takten, vilket betyder att man måste ha
samma inställningar för serieporten hos både sändare och
mottagare när dessa skall kommunicera. Överföringen sker tecken
för tecken, inte i block. Vid dataöverföring via nollmodemskabel
används två pinnar på varje dators serieport, TxD och RxD.
På TxD, Transmitt Data, skickas data och på RxD, Receive Data, tas
data emot. Nollmodemskableln skiftar kabeln så att TxD pekar på RxD
och vice versa.
De spänningar som används är +10V och -10V. En logisk etta
motsvaras av -10V och en logisk nolla motsvaras av +10V. Men hur vet exempelvis
den ena datorn när den andra datorn vill börja kommunicera? Jo, man
använder en s.k. startbit. I vila så är TxD ledaren -10V, eller
en logisk etta, och då vet RxD på den andra datorn att det är
vila. När sedan kommunikation skall påbörjas så skickas
en logisk nolla, +10V, ut på TxD under en viss tid. Detta är den
s.k. startbiten och efter den börjar man sända data, växelvis
ettor och nollor under en viss tid. Om man ska skicka flera tecken så
kommer det en eller flera stoppbitar som en avgränsare mellan tecknen,
vilket innebär att TxD sätts hög, dvs. -10V under en tidsperiod.
Om man vill kan man även använda en mycket enkel form av feldetektion
med den s.k. paritetsbiten. Den hamnar då mellan datan och stoppbitarna.
Paritetskontrollen räknar hur många ettor det är i varje
tecken, och beroende på om det är jämn eller udda paritet
så blir paritetsbi ten antingen hög eller låg. Bittiden, tiden
som varje tecken sänds avgörs av överföringshastigheten.
Överföringshastigheten mäts i BAUD eller BPS(Bits Per Second)
och kan vara exempelvis 2400 , 4800, 9600, 14400, 19200, 38400, 56000 eller
115200 BPS. En överföringshastighet på 115200 BPS ger bittiden
1/115200»8,7mS. Överföringshastigheten väljer man i det
kommunikationsprogram man använder. Där bestämmer man
också om man vill ha paritetskontroll, och om man vill ha udda eller
jämn paritet, samt hur många databitar man vill ha. Antalet
databitar är 7 eller 8, men för att kunna se internationella tecken
så behöver man ha 8 bitar. Dessa 7 eller 8 bitar har att göra
med vilken ASCII teckentabell man använder. ASCII står för
American Standard Code for Information Interchange, och är ett
standard-iseringsorgan när det gäller t.ex. teckentabeller. ASCII
tabellen gör att datorn kan tolka vilka tecken du skriver in på ditt
tangentbord, översätta dom till ett binärt tal som sedan kan
överföras till den andra datorn som sen gör samma process fast
åt andra hållet, dvs. tar det binära talet och
översätter det till ett tecken som kan visas på skärmen.
Teckentabellen bör vara den samma i båda datorerna. Man måste
göra samma inställningar i båda datorerna, dvs. samma
överföringshastighet, paritetskontroll av/på, udda/jämn
samt antalet bitar 7/8 och hur många stopbitar man vill ha.
Okej, för att det här ska bli lite tydligare kan vi ta ett
exempel. Vi säger att vi skall upprätta en kommunikation och det vi
skall överföra är lite vanlig text, vi tar mitt namn Andreas.
Hur gör vi? Hur kommer de signalerna som skickas att se ut? Ja, det beror
ju på. Om vi bara skall skicka text mellan två PC-datorer utan att
bry oss om hur det går till, så är det ju enkelt. Vi ser till
att båda datorerna har serieportar, men det torde ju inte vara
något problem då det ju i princip är standard på
PC-datorer av idag. Sen så skaffar vi eller bygger en lämplig kabel,
en s.k. nollmodemskabel, i dess allra enklaste form så behövde man
ju bara ser till att TxD pekar på RxD. Så en sån kan man ju
bygga rätt lätt själv. Sen så kan man ju behöva
någon bra kommunikationsprogramvara, men sån följer med
både DOS och senare versioner av Windows, så det räcker gott
med dom. Då har vi allt vi behöver, hårdvara,
överförings-medium och programvara. Så nu behöver vi bara
se till att konfigurera båda datorerna på samma sätt. Vi kan
t.ex. välja överföringshastighet 115200 BPS, ingen paritet, 8
databitar och en stoppbit. Sen är det bara att börja
"prata" eller rättare sagt, skriva med varandra, skriver du
något på din dator så kommer det snart också att
stå på den andra datorns skärm. Men man kan göra mer
än att bara skicka meddelanden mellan datorerna, man kan också
överföra filer om man vill, men det kräver lite annan och
bättre programvara. Men vi är ju lite mera intresserade av hur
själva överföringen av datan går till eller hur? Hur ser
signalerna ut som vandrar ut från min serieport, ut på kabeln och
in i den andra datorns serieport när jag skriver Andreas på mitt
tangentbord? Först så måste vi bestämma vilka parametrar
vi skall ha , men vi tar väl samma som i föregående exempel,
alltså 115200 BPS, ingen paritet, 8 databitar och en stoppbit. Ja,
då återstår bara att fundera ut hur överföringen
på seriekabeln ser ut i verkligheten. När sändning inte
äger rum, så har TxD negativ potential, dvs. -10V, som ju var en
logisk etta. Kommunikation inleds med att TxD sätts till +10V, eller
logisk nolla, under en bittid. Sen så kommer det första tecknet, i
vårt fall ett versalt A, att omvandlas till ett binärt tal enligt
den teckentabell vi har. Vi skulle ju använda 8 bitars tabell och
naturligtvis svensk sådan( på nästa sida finns det en
sådan). Ett versalt A motsvaras av ASCII koden 65, eller 10000010
binärt. Så då skickas de t och sist kommer vår stopbit.
Vi har alltså startbit -tecken - stopbit. Men en sak som man måste
komma ihåg är att den lägsta biten kommer först (LSB=Least
Significant Bit, minst värda bit)i själva tecknet, dvs. det
binära talets lägsta tecken kommer först. Så 10000010 blir
01000001 på serieportens utgång. Binärt skulle alltså
hela denna session se ut så här 1(stopbit)01000001(tecknet A versalt
i binärform) 0(startbit) eller på ett oscilloskop:
Det var vad som behövdes för att skicka ett tecken mellan två
datorer. Kontrollera gärna själv med ett oscilloskop att
stämmer. Ska vi ta och skicka resten också? Vi har ett A, vilket
betyder att vi bara har ndreas kvar. Ett gement n är enligt ASCII-tabellen
är 110 decimalt, vilket ger 01110110 binärt, och med LSB först
blir det 01101110. Sändningen blir som vanligt stopbit-tecken-startbit,
alltså 1011011100. Sen var det d, som har det decimala värdet 100,
eller 00100110, eller 01100100 med LSB först.. Sändningen blir
1011001000. Då var det r som har 114 decimalt som ASCII-värde,
01001110 binärt, och med LSB först 01110010. Sändningen blir
1011100100. Nu är det e som står på tur. e har
ASCII-värdet 101 decimalt eller 10100110 binärt, eller med LSB
först 01100101 binärt. Sändningen blir 1011001010. Nu tar vi a,
gement, som har ASCII-värdet 97, 10000110 binärt och 01100001 med LSB
först. Sändningen blir alltså 1011000010. Och sist har vi s,
som har ASCII-värdet 115 decimalt, 11001110 binärt och 01110011 med
LSB först. Sändningen blir 1011100110. Hela bitströmmen för
Andreas blir alltså: 1011100110; 1011000010; 1011001010; 1011100100;
1011001000; 011011100;1010000010 s a e r d n A Lite krångligt är det
ju, men det är ganska logiskt ändå, förutom att en 1:a
är -10V och en 0:a +10V. Är det här ett bra
kommunikationssätt? Det beror ju på vad man har för krav. Den
asynkrona kommunikationen har en begränsad överföringshastighet,
men om man inte har behov av det så är det en alldeles utmärkt
kommunikationsform. En sak som kan göras bättre är
fel-detekteringen, paritetskontrollen är långt ifrån bra,
då det räcker med att två bitar får fel nivå
så fungerar inte paritetskontrollen längre. Men, det finns
bättre metoder, t.ex. checksumme-beräkning tillsammans olika
varianter av protokoll, samt s.k. hårdvaruhandskakning och
mjukvaruhandskakning. Kort sagt kan man säga att man kollar block av
tecken istället för varje tecken, det går lite snabbare
då. Protokollen definierar hur stora datablocken skall vara och sedan
kontrollerar man dom med checksummeberäkning. Vid checksummeberäkning
så summeras alla teckens ASCII värden, t.ex. skulle
"Andreas" bli 65 110 100 114 101 97 115 som blir 702 decimalt. Sen
kan man dividera med att visst tal, t.ex. 256. 702d/256d=190d i rest, BE
hexadecimalt. Datablocket ser då ut så här: Starttecken, t.ex.
SOH(ASCII värde 01d), blocknummer, det inverterade blocknumret,
datablocket(ex. 128 bytes) och kontrollsumman hexadecimalt, i det här
fallet alltså Beh. Hårdvaruhandskakning eller CTS/RTS använder
en extra signalledning för att indikera när mottagaren kan ta emot
data och när den inte kan det, för tvåvägskommunikation
krävs två ledningar. Mjukvaruhandskakning eller XON/XOFF:
Sändaren skickar olika tecken beroende på om kan ta emot data eller
inte. XON betyder att den kan ta emot data, XOFF betyder att den inte kan det.
Även fast det här är en väldigt enkel form av
datorkommunikation, så ser vi att det snabbt blir krångligare och
krångligare ju säkrare och snabbare överföring man vill
ha. Men nu kanske det trots allt är så att kommunikation mellan
endast två datorer inte är så intressant, utan för att
kunna arbeta effektivare, dela på filer och resurser så krävs
det något mera, nämligen nätverk där flera datorer kan
kopplas samman. Hur fungerar kommunikationen där?

Copyright Andreas Höglund
© 1999.