https//www.racom.eu/cz/support/protocols_docum/bc280_inca.html
1. Úvod Protokol INCA byl vytvořen společností Nederland Haarlem company. Protokol se používá pro komunikaci mezi signalizačním zařízením parkovišť a ústředím. Protokol může pracovat ve třech režimech (1.point to point, 2.broadcast, 3.multicast) avšak v MORSE systému je podporován jen režim point to point. 2. Formát dat Všechny rámce protokolu INCA v režimu point to point jsou charakterizovány touto strukturou: | sync/8 | hdrlen/8 | msglen/16 | datachk/16 | msgid/8 | srcaddr/16 | E3 0D 00 15 85 F8 00 81 05 | msgtyp/8 | destaddr/16 | hdrchk/8 | data/size | tail/8 | 01 81 06 84 02 00 00 6A 00 82 02 2D 0D Význam položek: sync začátek rámce (STX), vždy je E3h hdrlen délka hlavičky (při režimu point to point je vždy 0Dh) msglen celková délka zprávy (mimo zakončení tail) datachk kontrolní součet (CRC-16 přes data zprávy) msgid identifikace zprávy srcaddr adresa odesílatele (source) msgtyp typ cílové adresy: point to point mode vždy 01 or 02 broadcast mode 03 (není podporováno v MORSE) multicast mode 04 (není podporováno v MORSE) destaddr cílová adresa (destination) hdrchk kontrolní součet hlavičky (exlusive-or přes sync, hdrlen, msglen, datachk, msgid,srcaddr, msgtyp a destaddr) data vysílaná data, velikost v bytech = msglen – 0Dh tail konec rámce (ETX), vždy 0Dh 3.Implementace protokolu v systému MORSE - přístupový modul protokolu INCA 3.1.Vnější zařízení –> Morse Communication Unit (MCU) MCU kontroluje každý příchozí rámec v těchto krocích: 1. Délka rámce musí být větší nebo rovna 14 byte (minimální velikost paketu, obsahuje jen header a tail, nikoliv data) 2. STX (sync) je E3h 3. Délka hlavičky (hdrlen) je 0Dh (13 byte) 4. Skutečná délka paketu musí být rovna nebo větší než délka zprávy (msglen) uvedená v hlavičce + 1 (tail) 5. Kontrolní součet hlavičky (hdrchk) je O.K. 6. CRC (datachk) je O.K. 7. Tail je na správné pozici a je 0Dh. Jestliže souhlasí všechny uvedené kontroly, je rámec dopraven do systému MORSE. Adresy source a destination jsou obsaženy v hlavičce paketu MORSE a uvnitř systému MORSE se používá pro kontrolu dat 32- bitový CRC, proto se v paketu MORSE přenáší pouze msgid (identifikace hlášeni), msgtyp (typ hlášení) a data. Příklad: Vnější zařízení -> MCU(MR25) E3 0D 00 15 85 F8 00 81 05 01 81 06 84 02 00 00 6A 00 82 02 2D 0D Data paketu MORSE: 00 01 02 00 00 6A 00 82 02 2D Fragmentační algoritmus: Přístupový modul protokolu INCA používá následující algoritmus pro kompletaci/fragmentaci rámců: Jestliže MCU najde byte STX v přijatém rámci, pokusí se najít konec rámce podle informace o délce uvedené v hlavičce nebo podle ETX. 1. Je-li skutečná délka rámce větší, než očekávaná délka, je rámec rozdělen na dva a tyto jsou zpracovány odděleně. 2. Jestliže je skutečná délka rámce menší než očekávaná, pak MCU očekává další část rámce. MCU spojuje přicházející rámce, až délka výsledného rámce dosáhne nebo překročí očekávanou délku. Příklady fragmentace: 1. Vnější zařízení -> MCU FF FF FF E3 0D 00 15 85 F8 00 81 05 01 81 06 84 02 00 00 6A 00 82 02 2D 0D FF FF Data paketu Morse: 00 01 02 00 00 6A 00 82 02 2D 2. Vnější zařízení -> MCU FF FF FF FF E3 0D 00 15 85 F8 00 81 05 01 81 06 84 02 00 00 6A 00 82 02 2D 0D FF FF EE EE E3 0D 00 15 6D F9 01 81 05 02 81 06 6F 02 00 00 6A 00 02 02 2D 0D FF FF FF Data paketu Morse: 00 01 02 00 00 6A 00 82 02 2D (1st packet) 01 02 02 00 00 6A 00 02 02 2D (2nd packet) 3. Vnější zařízení -> MCU FF FF FF FF E3 0D 00 15 85 F8 00 81 05 01 81 06 84 02 00 00 6A 00 82 02 2D 0D FF FF FF FF EE EE E3 0D 00 15 6D F9 01 81 05 02 81 06 6F 02 00 00 6A (1st frame) 00 02 02 2D 0D FF FF FF (2nd frame) Data paketu Morse: 00 01 02 00 00 6A 00 82 02 2D (1st packet) 01 02 02 00 00 6A 00 02 02 2D (2nd packet) 3.2. MCU -> Vnější zařízení Přístupový modul protokolu INCA doplní přijatá data paketu Morse o části header a tail podle výše uvedených pravidel. Kompletní rámec je pak odeslán do vnějšího zařízení. 3.3. Řízení toku dat V linkové vrstvě protokolu INCA není použit softwarový handshake. Pokud jsou všechny buffery MCU zaplněny, pak není možno dát zprávu do připojeného zařízeni. Proto je ztracen každý paket, který za této situace přijde. Aby se tomu předešlo, je možno použít hardwarový handshake (RTS/CTS). Pravděpodobnost, že vnější zařízení přeplní síť, je však za normálních okolností zanedbatelná. 3.4. Příklad komunikace INCA centála----> MCU 05 E3 0D 00 15 85 F8 00 81 05 01 81 06 84 02 00 00 6A 00 82 02 2D 0D Data paketu Morse MCU 05 ----> MCU 06 00 01 02 00 00 6A 00 82 02 2D MCU 06 ---->INCA vnější zařízení E3 0D 00 15 85 F8 00 81 05 01 81 06 84 02 00 00 6A 00 82 02 2D 0D INCA vnější zařízení ----> MCU 06 E3 0D 00 17 8E C2 00 81 06 02 81 05 B4 02 00 00 6A 00 C2 03 2D FD E8 0D Data paketu Morse MCU 06 ----> MCU 05 00 02 02 00 00 6A 00 C2 03 2D FD E8 MCU 05 ----> INCA centrála E3 0D 00 17 8E C2 00 81 06 02 81 05 B4 02 00 00 6A 00 C2 03 2D FD E8 0D 4. Nastavení parametrů protokolu v MCU (t) timeout Doba čekání na další fragment rámce. Nepřijde-li další fragment během této doby, je předchozí část zahozena. Je-li timeout nastaven na 0, je vypnut fragmentační algoritmus a každý rámec je považován za kompletní. Pokud je nekompletní, je zahozen. 5. Chybová hlášení Je-li v SCC nastaveno debu(G)ging level = 1, pak se mohou objevit tato chybová hlášení: Hlášení jsou odesílána na adresu service destination (viz menu Unit), defaultně 2nd SCC. "Ch_in problem: PACKET TOO SHORT:%hu – Délka rámce musí být větší nebo rovna 14 byte (minimální velikost rámce, pouze header a tail, žádná data). "Ch_in problem: NO SYNC BYTE %02Xh – V rámci chybí STX (E3h). "Ch_in problem: HDRLEN !%hu(%02Xh):%hu(%02Xh)" – Header lenght vyplněná v hlavičce je odlišná od 0Dh. "Ch_in problem: MSGLEN: %hu(%Xh), INC. PACKET LEN: %hu(%Xh)", - Skutečná délka rámce je menší, než délka vyplněná v hlavičce rámce. "Ch_in problem: INC. HCHK: %02Xh, CALC. HCHK:%02Xh" – Vypočítaný kontrolní součet (header checksum) nesouhlasí s header checksum v hlavičce rámce "Ch_in problem: INC. DCHK: %Xh, CALC. DCHK:%Xh" – Vypočítaný kontrolní součet dat (datachk) nesouhlasí s datachk v hlavičce rámce. "Ch_in problem: TAIL !%02Xh:%02Xh" – Tail je odlišný od 0Dh. "m_user_in: INC. PACKET TOO SHORT:%hu" – Paket přicházející z kanálu Morse je kratší, než 2 byte (msgid, msgtyp). "Waits %hums for next part of packet" – Informace, že systém Morse čeká ..ms na další fragment rámce. "No packet joining" – Informace, že systém Morse nečeká na další fragmenty rámce (timeout=0). "Join packet problem: Timeout for next fragment expired" – Informace, že timeout pro další fragment byl vyčerpán. Všechny dosud došlé fragmenty jsou zahozeny. 6. Historie Tento popis je platný od verze 4.40 z data 03/2000.