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 |
-
Startkarakter er altid 0xEE.
-
ID-adresse på modtager af telegram. Hvis modtager ID = 0x0,
adresseres alle slaver.
-
ID-adresse på afsender af telegram. Hvis afsender ID = 0x0,
udsendes ingen respons på telegram.
-
Antal databytes i telegram. Maximalt 0x1000.
-
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
-
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.
-
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.
-
CRC genereres på en startværdi 0x0000
med polynomium 0xA001
-
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 |