MARS-A je plně duplexní protokol s 32 bitovou adresou, s detekcí chyb (založenou na 16 bitovém kontrolním součtu nebo 16 bitovém CRC) a s korekcí chyb. MARS-A se dá označit jako protokol nejvíce přátelský k uživateli ze síťových protokolů systému MORSE. Při jednoduchém uživatelském interface umožňuje přístup ke všem službám datové sítě MORSE.
Tímto protokolem je nahrazen zastaralý protokol MARS-U (MARS rev.2), který byl vybaven 16 bitovou adresou). Delší adresa je potřebná zejména pro mobilní aplikace v síti MORSE. Nový protokol obsahuje také jiné typy rámců.
Příklad datového rámce ve formátu MARS-A:
|FT/2|FN/2|R/1|S/11| PT/8|H/1|L/1|R/3|N/3 | A/32 | DATA |F/8|BCW/16| | C008 | 89 | 05 |690F 1244| AAAA | | 98EC |
FT/2 | frame type, typ rámce |
FN/2 | frame number, číslo rámce |
R/1 | repeat |
S/11 | size, délka dat linkové vrstvy, S= délka dat + 6 [byte] |
PT/8 | packet type |
H/1 | H2N bit |
L/1 | lokální mód |
R/3 | rezerva |
N/3 | síťové číslo |
A/32 | adresa destination nebo source podle parametru H/1 |
DATA | uživatelská data, délka dat je S – 6 [byte] |
F/8 | doplněk na sudý počet bytů celého rámce |
BCW/16 | kontrolní součet |
Podrobný popis formátu je uveden dále.
Fyzická vrstva je určena možnostmi hardware v systému MORSE. V principu může MARS-A pracovat s libovolnou konfigurací kanálu. Standardně se předpokládá asynchronní komunikace mezi DTE-DCE na duplexním interface V.24 jen s použitím signálů RXD, TXD a zem (3 drátová komunikace). Pro komunikaci vyššími rychlostmi a na větší vzdálenosti je možno použít interface RS422. Synchronní komunikace je možná pouze přes interface V.24.
Linková vrstva protokolu může pracovat s libovolným fyzickým interface, který umožňuje plně duplexní asynchronní komunikaci s 8 bitovými daty. Pro přenos dat je plně transparentní, nelze tedy použít Xon/Xoff pro řízení toku dat. Také není třeba používat hardwarový handshake, protože řízení toku dat zajišťuje sám protokol. Pro svoji jednoduchost je tato linková vrstva vhodná pro spoje se zanedbatelnou četností chyb. Rámec má vždy sudý počet byte. Je sestaven z 16 bitového návěští, bloku dat (vždy sudý počet byte) a 16 bitového kontrolního slova (BCW).
Linková vrstva může obsahovat 3 typy rámců:
Datový rámec
Řídicí rámec
Servisní rámec
Standardní komunikace sestává z datových a řídicích rámců:
Příklad: | |
Datový rámec: | C009 0900 690F 8105 AB11 223A A828 |
Kontrolní rámec: | 8106 |
Odpověď: | |
Datový rámec: | E009 0900 690F 8106 CD33 442F 881C |
Kontrolní rámec: | A106 |
Datový rámec (podle předchozího příkladu):
| L/16 | LLD/size | F/8 | BCW/16 | C009 0900 690F 8105 AB11 22 3A A828
L/16 | Label – návěští. |
LLD/size | Link layer data – data linkové vrstvy. |
F/8 | Stuffing – doplněk – 1 byte s libovolnou hodnotou použitý k dosažení sudé velikosti rámce. Tento doplňkový byte je zahrnut do BCW. |
BCW/16 | Block Control Word – kontrolní součet počítaný defaultně jako podélná parita přes 16 bitová slova v celém rámci (pomocí XOR). Lze také zvolit mód CRC-16, odpovídá RFC 1662 (stejně jako protokol PPP). CRC verzi je nutno zvolit v konfiguraci protokolu. |
Návěští – 16 bits (1 Word) je uspořádáno takto:
| FT/2 | FN/2 | R/1 | S/11 | 11 00 0 000 0000 1001 ( = 0xC009 )
FT/2 | Frame Type – typ rámce
|
FN/2 | Frame Number – číslo rámce – při opakovaných rámcích se neinkrementuje |
R/1 | Repeat – opakovací bit
|
S/11 | Size – délka dat linkové vrstvy (LLD), délka datového pole v bytech, nepočítá se návěští, doplněk ani BCW |
Řídicí rámec:
| FT/2 | FN/2 | CC/4 | CT/8 | 10 00 0001 0000 0110 ( = 0x8106 )
FT/2 | Frame Type – typ rámce
|
FN/2 | Frame Number – číslo rámce – shodné s FN potvrzovaného rámce |
CC/4 | třída řídicího rámce – normálně 0x1 |
CT/8 | typ řídicího rámce
|
Služba zjištění času: čtení GMT z DCE
Formát dotazu:
| L/16 |0001/16| BCW/16 |
Formát odpovědi:
| L/16 |0081/16|gmtsec/32|tfix/1|R/5|msec/10| BCW/16 |
Služba zjištění času: čtení GMT a místního času z DCE
Formát dotazu:
| L/16 |0002/16| BCW/16 |
Formát odpovědi:
| L/16 | 0082/16 | gmtsec/32 | tfix/1 | ts/1 | R/4 | msec/10 | | sec/8 | min/8 | hour/8 | day/8 | month/8 | year/8 | BCW/16 |
Časová informace je platná, když je vysílán první bit prvního byte rámce.
Přesnost čtení času je lepší, než 1 milisekunda.
Při opakování rámce je časová informace aktualizovaná před vysíláním, takže opakovaný rámec se liší od předchozího.
Služba nastavení času: synchronizace vnitřních hodin v DCE
Formát příkazu k nastavení času:
| L/16 | 0003/16 | gmtsec/32 | R/6 | msec/10 | BCW/16 |
Časová informace je platná v okamžiku, kdy je přijat první bit prvního byte rámce.
Přesnost časové synchronizace je lepší než 1 milisekunda.
Formát potvrzení o vykonání synchronizace:
| L/16 | 0083/16 | BCW/16 |
Význam položek:
L/16 | label – návěští |
Čas GMT:
gmtsec/32 | běžný čas v sekundách, |
msec/10 | probíhající milisekunda v běžné sekundě, max. 999ms tedy 0x3E7 |
tfix/1 | kvalita zachycení času v CU
|
ts/1 | letní čas (1 – zapnut) |
R/4, R/5, R/6 | rezervováno, musí být nula |
Místní čas (včetně časového pásma a letního času):
sec/8 | sekundy |
min/8 | minuty |
hour/8 | hodiny (0–23) |
mday/8 | den v měsíci (1–31) |
month/8 | měsíc (0–11) |
year/8 | rok (letopočet mínus 1900) |
Síťová vrstva obsahuje síťovou hlavičku a data, tedy podle předchozího příkladu:
| SÍŤOVÁ HLAVIČKA | DATA | 0900 690F 8105 AB11 22
Síťová hlavička (včetně příkladu):
| PT/8 | H/1 | L/1 | R/3 | N/3 | A/32 | 0000 1001 0 0 000 000 0x690F 8105 ( =0x0900 690F 8105 )
Data síťové vrstvy:
| DATA | AB11 22
PT/8 | typ paketu, viz další kapitola |
H/1 | H2N bit |
L/1 | local |
R/3 | rezervováno, musí být nula |
N/3 | síťové číslo (přenáší se po síti) |
A/32 | adresa |
Číslování paketů N/3 není povinné. Přenáší se pouze nejnižší 3 bity pořadového čísla. Číslo je dodáno na cílovou adresu a může sloužit ke kontrole pořadí dodaných paketů (síť MORSE nezaručuje přesné dodržení pořadí).
Adresa je buď adresou source (Host přijímá paket) nebo adresou destination (Host vysílá paket). Paket přichází do CU přes CNI (Channel to Node Interface), které může převádět uživatelský adresový prostor na adresový prostor MORSE, např. pomocí masky.
Max. dovolená délka dat v síťové vrstvě MORSE je 1626 byte. Delší pakety nejsou v systému definovány. Optimální velikost paketu pro systém MORSE je 200 – 400byte.
Složení Typu paketu:
|U/1|B/1|R/1|subt/5|
U/1 | security bit linkové vrstvy |
B/1 | broadcast (multicast) bit |
R/1 | rezerva |
subt/5 | subtyp |
Subtypy paketů je možno rozdělit do 5 skupin:
Uživatelské pakety
Žádosti o služby
Servisní zprávy
Systémové zprávy
Speciální pakety
Popíšeme zde nejdůležitější subtypy paketů MORSE:
09h – USER DATA | uživatelská data – Základní typ paketu pro přenos dat od zdroje (source) do cíle(destination). |
0Ah – PROT DATA | protokol – Tento typ dat je určen pro řízení toku dat v uživatelském protokolu. Zpracování obou uvedených typů paketů v síti MORSE je ekvivalentní. Pakety jsou odesílány na adresu destination podle cesty a priorit nastavených na zúčastněných adresách. V případě ztráty paketu je chybové hlášení doručeno k původnímu odesílateli. Paket, který nese toto chybové hlášení, se však také může ztratit, tentokrát již bez další zprávy. |
10h – SERVICE REQUEST | servisní požadavek – požadavek o službu MORSE |
12h – SERVICE REPORT | servisní zpráva – zpráva služby MORSE |
0Ch – PACK ERROR REPORT | paket s chybovou zprávou – zpráva o chybách v sítí MORSE. První word je Error Number (číslo chyby), zbývající část zprávy obsahuje podrobnější informace o chybě v síti. Generování těchto zpráv je možno zapnout nebo vypnout pro celou síť. Dále jsou uvedena některá čísla chyb:
|
Složení paketu použitého v následujícím příkladu:
F008 0980 690F 8902 AAAA B32F
Podrobněji rozepsáno (viz kapitola Formát dat):
F 0 0 8 0 9 8 0 690F 8902 AAAA B32F byte 11 11 0 000 0000 1000 0000 1001 1 0000 000 bit __ __ _ _____________ _________ _ ____ ___ _________ ____ ____ FT FN R velikost PT H L,rez N adresa data BCW význam (8 bytů) |<-- -->|
Zde je H = 1, proto adresa je považována za destination.
V tomto příkladu paket ve formátu MARS-A vstupuje portem SCC2 do
CU 690F8901, projde sítí MORSE a pak je vyslán z CU 690F8902 do portu
SCC3. Monitorované body jsou označeny značkou *
* * * rxsim -> SCC0 -> 690F8901 -> 690F8902 -> SCC1 -> tx MARS-A source destination MARS-A protocol address address protocol
>> 12:29:37.101 rxsim 12 | S02 F008 8980 690F 8902 AAAA 332F 12:29:37.102 tx 2 | S02 B106 CNI mon |toa frm |dst src | size|TT N 12:29:37.102| |690F8902 690F8901|S02I OUT 2||89 0usr 0 AAAA 12:29:37.135 tx 12 | S03 D008 8900 690F 8901 AAAA 13AC 12:29:38.143 tx 12 | S03 D808 8900 690F 8901 AAAA 1BAC
Monitoring obsahuje 5 částí:
Přijímaný paket, H=1, adresa je destination.
Potvrzení ACK na SCC2.
Paket vyslaný z SCC2 do nódu 690F8901, obsahuje pouze data.
Paket vyslaný z portu SCC3, H=0, adresa je source.
SCC3 nedostal ACK, proto je paket portem SCC3 vyslán opakovaně.
V následujícím příkladu odešleme do rádiového modemu dotaz na
softwarovou verzi a dostaneme odpověď. Typ paketu je 10h
nebo 12h
, dotaz na softwarovou verzi systému je formulován
jako 3 byte E0277600
(nebo E027
následovaný
binárně kódovanou SW verzí v odpovědi). Adresa rádiového modemu
690F0501
zde figuruje jako
destination i source. Protokol je konfigurovaný v módu s kontrolním
součtem.
// vysílání & příjem 16:51:55.87|tx S0 14 D00A 1080 690F 0501 E027 7600 3AA3 16:51:55.87|rx S0 2 9106 16:51:55.88|rx S0 36 E020 1200 690F 0501 E027 0000 0045 01B2 0000 0000 0041 01B2 0000 0000 0042 01B2 0000 7FFD 16:51:55.90|tx S0 2 A106 // vysílání & příjem s ACK za rámcem 16:52:11.42|tx S0 14 E00A 1081 690F 0501 E027 7600 0AA2 16:52:11.42|rx S0 36 F020 1201 690F 0501 E027 0000 0045 01B2 0000 0000 0041 01B2 0000 0000 0042 01B2 0000 6FFC 16:52:11.43|rx S0 2 A106 16:52:11.45|tx S0 2 B106 // vysílání & příjem 16:52:12.44|tx S0 14 F00A 1082 690F 0501 E027 7600 1AA1 16:52:12.45|rx S0 2 B106 16:52:12.45|rx S0 36 C020 1202 690F 0501 E027 0000 0045 01B2 0000 0000 0041 01B2 0000 0000 0042 01B2 0000 5FFF 16:52:12.48|tx S0 2 8106 // vysílání & příjem s opakováním 16:52:20.89|tx S0 14 C00A 1083 690F 0501 E027 7600 2AA0 16:52:21.99|tx S0 14 C80A 1083 690F 0501 E027 7600 22A0 16:52:23.09|tx S0 14 C80A 1083 690F 0501 E027 7600 22A0 16:52:23.09|rx S0 2 8106 16:52:23.11|rx S0 36 D020 1203 690F 0501 E027 0000 0045 01B2 0000 0000 0041 01B2 0000 0000 0042 01B2 0000 4FFE 16:52:23.14|tx S0 2 9106 // vysílání bez odpovědi 16:52:33.04|tx S0 14 D00A 1084 690F 0501 E027 7600 3AA7 16:52:34.13|tx S0 14 D80A 1084 690F 0501 E027 7600 32A7 16:52:35.22|tx S0 14 D80A 1084 690F 0501 E027 7600 32A7 16:52:36.32|tx S0 14 D80A 1084 690F 0501 E027 7600 32A7 //(bude generováno chybové hlášení...)
Nastavení a přečtení času (pomocí linkové vrstvy protokolu).
PLC posílá synchronizační povel, který nastavuje čas v CU, GMT:17.8.2007, 08:29:35.873 monitorováno na SCC2 synchronizovaného CU, vnitřní čas v CU se přijetím povelu změnil z 08:35:24 na 08:29:26 >> 08:35:24.870 rx;i 12 | S02 0008 0003 46C5 4E56 03E7 0B7F 08:29:26.992 tx 6 | S02 0002 0083 0081 08:29:26.992 tx 2 | S02 8106 08:29:27.002 rx;i 2 | S02 8106 PLC připojené přes MARS-A se dotazuje na čas, CU odpovídá delším formátem, GMT:17.8.2007, 08:29:35.873 monitorováno na SCC2 dotazované CU: >> 08:29:35.873 rx;i 6 | S02 0002 0002 0000 08:29:35.874 tx 18 | S02 100E 0082 46C5 4E5F 436A 231D 0811 076B 771B 08:29:35.874 tx 2 | S02 8106 08:29:35.890 rx;i 2 | S02 9106 PLC připojené přes MARS-A se dotazuje na čas, CU odpovídá, GMT:17.8.2007, 08:32:21.232 monitorováno na SCC2 dotazované CU: >> 08:32:21.232 rx;i 6 | S02 0002 0001 0003 08:32:21.232 tx 12 | S02 2008 0081 46C5 4F05 40E8 69A1 08:32:21.232 tx 2 | S02 8106 08:32:21.245 rx;i 2 | S02 A106
Fragment programu v jazyce C, který převádí binární GMT na ASCII:
void main() { time_t t=0x388BAD40; struct tm *gmt; gmt = gmtime(&t); console.printf("GMT is: %s", asctime(gmt)); }
Spojení je určeno pro občasné použití, např. pro změny konfigurace ve vzdálené komunikační jednotce (CU):
CU -- TM ---telefonní síť--- TM -- CU
HW uspořádání a routing jsou podobné, jako při spojení asynchronní linkou, viz příklad v příručce Jak na Morse. Propojení telefonního modemu a SCC je doporučeno plnou linkou RS232. Při použití 3 drátového propojení propojíme navíc piny DTR a DSR na tel. modemu. V telefonním modemu je nutno nastavit parametr AT&K0 (vypnutí řízení toku dat), ATQ0, ATV1. Funkce autoanswer může být zapnuta, je však prováděna i z CU. Vzhledem k různým vlastnostem telefonních modemů je nutno konfiguraci předem vyzkoušet.
Rychlost 19200 bit/sec je vhodná pro pevné linky (lze použít až 57600), pro GSM použijeme max. 9600. Rychlost se v každém případě musí shodovat s rychlostí telefonního modemu.
Pomocí SPe 0t
nastavíme parametry protokolu MARS-A
shodně na obou CU:
MARS-A parameters: (a):1000ms (r):5 (c)rc:OFF (G)SM:1 no traffic t(i)meout:0sec (t)el.: Opposite retranslation address:00000000 (l)oc:OFF loc (s)ource:00000000 (R)emote dial-up :OFF DO ORDER SPECIAL CABLE! DO SET IDLES TO 30! (q)uit >>
(G)SM:1 | ve volajícím CU aktivuje funkci telefonního spojení, ve volaném CU zapne AA (autoanswer) |
t(i)meout:30 | vypne telefonní spojení při pauze delší než 30 sec |
Může být nastaveno buď na 0 (funkce je vypnuta) nebo na čas alespoň 30sec, protože po navázání spojení jsou vysílány udržovací pakety každých 20sec a tak se za normálních podmínek zabrání ukončení spojení.
NAVÁZÁNÍ SPOJENÍ:
Vložíme telefonní číslo (t)el.:
do
parametru protokolu MARS-A ve stejném tvaru, jako při telefonním
volání:
25 linka ve firemní síti
566618578 veřejná linka
0566618578 volání z firemní sítě „přes nulu“
Neukládejte tento parametr povelem (w)rite
, pouze
proveďte inicializaci:
(q)uit Enter (I)nit Enter
Telefonní modem naváže spojení, což se projeví takto:
LED označená OH (Off Hook) se rozsvítí, modem začal pracovat.
Modem volí číslo (slyšitelné).
Pokud byl počátek navazování spojení úspěšný, nastane vyjednávání parametrů spojení, což se projeví jako různé tóny po dobu několika sekund. Po úspěšném vyjednání se rozsvítí LED CD (Carrie Detect).
Od této chvíle je možno komunikovat mezi oběma rádiovými modemy po telefonní lince, tedy například zkusit povel ! a měnit konfiguraci v protější CU.
Po automatickém vyslání holding paketu se adresa protější CU
objeví v parametrech MARS-A jako „Opposite retranslation
address“. Pokud potřebujeme ukončit spojení, provedeme Init s
prázdnou položkou (t)el.:
v parametrech MARS-A.
Zkontrolujeme ukončení spojení, které se projeví jako zhasnutí LED
CD a OH. V případě problémů můžeme ukončit spojení vypnutím a zapnutím
telefonního modemu. Z Main menu zvolíme SPe0t a zkontrolujeme, je-li
parametr
prázdný. V jiném případě by telefonní modem navazoval spojení při
příštím startu CU.(t)el
.:
Tento vzdálený přístup přes telefonní modem nahrazuje připojení servisní šňůrou. Konfigurace:
PC -- TM ---telefonní síť--- TM -spec.cable- CU
PC | PC s OS Linux a s programem
|
TM | telefonní modem |
spec.cable | křížený kabel RS232, ve kterém je propojen pin CD s pinem DTR na opačném konci kabelu |
CU | CU řady MR400, fw 746 nebo vyšší, konfigurace defaultní
s výjimkou parametru |
Vzdálená CU je připojena sériovým portem přes „Special dial-up
cable“ k telefonnímu modemu. CU může být v defaultní
konfiguraci, použitý SCC má nastaven protokol MARS-A se zapnutým
parametrem (R)emote dial-up :ON
. Je vhodné nastavit
parametr idle na vyšší hodnotu, například SPe
2i RX (i)dle:100
.
V programu rr_setrdial
nastavíme parametry
obsahující telefonní číslo a číslo portu. Po spuštění program naváže
spojení s cílovým TM a pak spustí rr_setr
.
Po připojení TM-spec.cable-CU začne CU vysílat každých 30 sec ASCII povel autoanswer ATS0=1. TM si nastaví rychlost podle CU. Až PC přes rr_setrdial vytočí vzdálený TM, pak ten přijme volání, nastaví CD=1 a tím se na CU objeví DTR=1. Teprve při DTR=1 může CU posílat data přes TM do vzdálené aplikace rr_setr.
Nyní můžeme v cílové CU pracovat se Setrem podobně, jako při připojení servisní šňůrou. Nejsme připojeni přes SCC0, jako v případě servisní šňůry ale přes SCC použitý pro „special dial-up cable“. Zapojení kabelu:
SCC 25-pin male (radiomodem) (dial-up modem) 1 - CD --- 20 - DTR 2 - RxD --- 2 - TxD 3 - TxD --- 3 - RxD 4 - DTR --- 8 - CD 5 - GND --- 7 - GND 6 - 6 - DSR 7 - RTS --- 5 - CTS 8 - CTS --- 4 - RTS 9 - 9 - NC - NOT CONNECTED
MARS-A parameters: (a):1000ms (r):5 (c)rc:OFF (G)SM:0 no traffic t(i)meout:0sec (t)el.: Opposite retranslation address:00000000 (l)oc:OFF loc (s)ource:00000000 (R)emote dial-up :OFF DO ORDER SPECIAL CABLE! DO SET IDLES TO 30! (q)uit >>
Linková vrstva protokolu se konfiguruje pomocí parametrů:
(a) | ACK timeout v milisekundách |
(r) | Počet opakování (nepočítá se první pokus) |
(c) | OFF = zabezpečení podélnou paritou, defaultně nastaveno ON = zabezpečení CRC |
(G) | spojení přes telefonní modem, viz kapitola 3.5 – „Spojení přes telefonní nebo GSM modem“ |
(i) | automatické ukončení telefonního spojení |
(t) | volané telefonní číslo |
– | Opposite retranslation address:00000000 |
(l) | OFF = normální stav ON = lokální retranslační mód pro servisní účely, komunikace se vzdálenou nenakonfigurovanou CU přes protokoly MARS-A, viz příručka Jak na MORSE, kapitola Lokální mód |
(R) | OFF = normální stav ON = (R)emote dial-up servisní přístup do vzdáleného CU přes tel. síť, viz kapitola 3.6 – „Přístup (R)emote dial-up“ |
Základní parametry jsou dva:
(a) – ACK timeout – čas po vyslání datového rámce, po který vysílající stanice čeká na potvrzovací (ACK) rámec. Pokud nepřijde ACK, je rámec opakován.
(r) – počet opakování – je-li počet opakování vyčerpán a vyprší ACK timeout, je síťová vrstva informována, že paket je ztracen.
Stavový diagram na vysílací straně protokolu linkové vrstvy má jen dva stavy:
Stav „klid“ a stav „čekání“,ve kterém je očekáván ACK rámec. Ihned po obdržení požadavku na vyslání datového rámce přejde stav „klid“ do stavu „čekání“ aby přijal ACK. Po přijetí ACK nebo až uplyne timeout po posledním opakování se linková vrstva protokolu vrátí do stavu „klid“. Protokol ve stavu „čekání“ odmítá všechny požadavky na vyslání rámce.
Přijímající strana reaguje ihned po obdržení správného datového rámce vysláním rámce ACK. Při správném rámci je ACK vyslán ihned po jeho skončení, proto musí být ACK timeout nastaven delší než čas potřebný pro vyslání nejdelšího rámce. Chybný rámec je zrušen.
Mezi dvěma znaky rámce nesmí být mezera delší, než je nastaveno v parametru idle. Rozdělený rámec je vyhodnocen jako chyba i kdyby k tomu došlo vlivem hardwarového handshake.
revision 0 (MARS M) 3/1999 | dvě 2 bytové adresy, datový rámec typu 00, nečíslované ACK, velikost uvedena v síťové hlavičce |
revision 1 (MARS U) 4/1999 | jedna 2 bytová adresa, datový rámec typu 01, nečíslované ACK |
revision 2 (MARS U) 4/1999 | jedna 2 bytová adresa, datový rámec typu 01, číslované ACK |
revision 3 (MARS A) 12/1999 | jedna 4 bytová adresa, datový rámec typu 11, číslované ACK, doplněno REJ, NAK, doplněno pole DTE/DCE, synchronizace času v linkové vrstvě |
revision 4 (MARS A) 9/2001 | doplněn broadcast a security bit do typu paketu |