BK kommunikations protokollen

Generel Master/Slave kommunikationsprotokol for overførsel af binære data i halv duplex:

Felt: Indhold: Format: Værdi:
1 Start karakter byte 0xEE
2 Modtager ID byte 0x0 - 0xFF
3 Afsender ID byte 0x0 - 0xFF
4 Antal databytes word 0x0 - 0x1000
5 Kommando byte 0x0 - 0xFF
6 Datapakke ID word 0x0 - 0xFFFF
7 databyte 1 byte 0x0 - 0xFF
  databyte 2
 
8 CRC word 0x0 - 0xFFFF
9 Slut karakter byte 0x77
  1. Startkarakter er altid 0xEE.
  2. ID-adresse på modtager af telegram. Hvis modtager ID = 0x0, adresseres alle slaver.
  3. ID-adresse på afsender af telegram. Hvis afsender ID = 0x0, udsendes ingen respons på telegram.
  4. Antal databytes i telegram. Maximalt 0x1000.
  5. Kommando:  Dataforespørgsel fra master: 0x01. Ved efterfølgende respons fra slave: 0xC1, hvis respons deles op i flere telegrammer og 0x81 i sidste (og/eller eneste) telegram. Master kvitterer for telegrammer ved kommando 0x03 (ACK) eller anmoder om retransmission ved kommando 0x05 (NAK). Sidste telegram i dataoverførsel kræver ikke kvittering
  6. Datapakke ID refererer til bloknummer for den aktuelle forespørgsel / overførsel. Indhold af blok forventes at være kendt af såvel modtager som afsender. Udvidelse af en blok foretages altid i forlængelse af tidligere definition. Sender og modtager skal således være forberedt på afvigelser i blokstørrelse og skal kunne behandle det kendte antal bytes fra en given blok på tværs af forskellige programversioner.
  7. Datafelt indeholder selve dataoverførselen i form af 0 til 0x1000 bytes ( antal bytes i aktuelt telegram er angivet i felt nr. 4 og bestemmes udelukkende af afsender ) Multibyte data overføres ved bytes af stigende betydning.
  8. CRC genereres på en startværdi 0x0000 med polynomium 0xA001
  9. Slutkarakter er altid 0x77.

Eksempel:  Dataforespørgsel fra master: 0xFF til slave: 0x01 på pakke: 0x55 - indeholdende 100 bytes

Start Modtager ID Afsender ID Antal bytes Kommando Pakke ID CRC Slut
EE 01 FF 0000 01 55 CRC 77

Respons fra slave: 0x01 til master: 0xFF med pakke 0x55 - indeholdende 70 bytes, som eksempelvis er max. antal bytes

Start Modt. Afs. Antal Komm. Pakke 1.byte 2.byte 70.byte CRC Slut
EE FF 01 0046 C1 55 ?? ?? ?? ?? CRC 77

Kvittering fra master: 0xFF til slave: 0x01 på del af pakke 0x55.

Start Modtager ID Afsender ID Antal bytes Kommando Pakke ID CRC Slut
EE 01 FF 0000 03(ACK) 55 CRC 77

Eller ønske om retransmission fra master: 0xFF til slave: 0x01 på del af pakke 0x55.

Start Modtager ID Afsender ID Antal bytes Kommando Pakke ID CRC Slut
EE 01 FF 0000 05(NAK) 55 CRC 77

Respons fra slave: 0x01 til master: 0xFF med resten af pakke 0x55 - indeholdende 30 bytes.

Start Modt. Afs. Antal Komm. Pakke 1.byte 2.byte 30.byte CRC Slut
EE FF 01 001E 81 55 ?? ?? ?? ?? CRC 77

Dataoverførsel fra master:

0xC2, hvis overførsel deles op i flere telegrammer og 0x82 i sidste (og/eller eneste) telegram. Slave kvitterer for telegrammer ved kommando 0x03 (ACK) eller anmoder om retransmission ved kommando 0x05 (NAK). Sidste telegram i dataoverførsel kræver ikke kvittering.

Eksempel:  Dataoverførsel fra master: 0xFF til slave: 0x01 af pakke: 0xAA - indeholdende i alt 100 bytes Maximum antal bytes per telegram er her eksempelvis = 80

Start Modt. Afs. Antal Komm. Pakke 1.byte 2.byte 80.byte CRC Slut
EE 01 FF 50 C2 AA ?? ?? ?? ?? CRC 77

Kvittering fra slave: 0x01 til master 0xFF på del af pakke 0xAA.

Start Modtager ID Afsender ID Antal bytes Kommando Pakke ID CRC Slut
EE 01 FF 0000 03(ACK) AA CRC 77

Eller ønske om retransmission fra slave: 0x01 til master: 0xFF på del af pakke 0xAA.

Start Modtager ID Afsender ID Antal bytes Kommando Pakke ID CRC Slut
EE 01 FF 0000 05(NAK) 55 CRC 77

Dataoverførsel fra master: 0xFF til slave: 0x01 med resten af pakke 0xAA - indeholdende 20 bytes.

Start Modt. Afs. Antal Komm. Pakke 1.byte 2.byte 20.byte CRC Slut
EE 01 FF 14 82 AA ?? ?? ?? ?? CRC 77

Bak