Siedle Vario Bus Checksummenberechnung "Codeschloss" COM611

OP #2431228
Lesenswert?

Hallo zusammen,

ich habe eine Siedle Codetastatur COM611 am dazugehörigen Controller 
EC602 im Einsatz. An sich eine schöne runde(aber teure) Sache. Da mir 
diese Kiste aber zu beschränkt ist für das viele Geld, habe ich mich ans 
Analysieren des Protokolls gemacht.

Es handelt sich um eine Halbduplex RS485 Multimaster Schnittstelle mit 
9600Bit/s 8n1, also ziemlich gewöhnlich.
Das Protokoll seitens der Codetastatur scheint auch relativ trivial zu 
sein, einzig die Checksumme gibt sich mir widerspenstig. Es scheint eine 
relativ simple Checksumme zu sein, evtl. eine XOR mit Startwert, jedoch 
laufe ich gerade ein wenig gegen die Wand was die Berechnung angeht.
Evtl. hat jemand von euch eine Idee dazu.

Hier mal ein paar Beispiele, das vorletzte Byte beinhaltet wohl die 
Checksumme, der eingegebene Code wird "lesbar" übermittelt, 
Funktion/Code also Bestätigung mit "F" Taste und adressiertes Klingeln 
"Klingel" Taste unterscheiden sich auch nur im dritten Byte.

Code/Funktion
-------------
Code Eingabe "0000 + F" an COM 611
0x02 0xFF 0x15 0x01 0x00 0x00 0xFF 0xFF 0x00 0xED 0x03

Code Eingabe "00000000 + F" an COM 611
0x02 0xFF 0x15 0x01 0x00 0x00 0x00 0x00 0x00 0xEB 0x03

Code Eingabe "1234 + F" an COM 611
0x02 0xFF 0x15 0x01 0x12 0x34 0xFF 0xFF 0x00 0xA7 0x03

Code Eingabe "12345678 + F" an COM 611
0x02 0xFF 0x15 0x01 0x12 0x34 0x56 0x78 0x00 0xD7 0x03

Code Eingabe "0000 + Klingel" an COM 611
0x02 0xFF 0x16 0x01 0x00 0x00 0xFF 0xFF 0x00 0xEC 0x03

Code Eingabe "00000000 + Klingel" an COM 611
0x02 0xFF 0x16 0x01 0x00 0x00 0x00 0x00 0x00 0xEA 0x03


Rückmeldung bei korrektem Code vom EC602
0x02 0x01 0x13 0x40 0x01 0x00 0x1E 0x8D 0x03 0x06
(letztes BYte evtl. ACK von COM611)


Adressiertes Klingeln
---------------------
Code Eingabe "1234 + Klingel" an COM 611
0x02 0xFF 0x16 0x01 0x12 0x34 0xFF 0xFF 0x00 0xA6 0x03

Code Eingabe "12345678 + Klingel" an COM 611
0x02 0xFF 0x16 0x01 0x12 0x34 0x56 0x78 0x00 0xD6 0x03


Türöffner Taste außen
---------------------
Türöffner Taste an COM611
0x02 0xFF 0x17 0x01 0x01 0xE8 0x03

Wie ihr seht scheint die Checksumme eher trivial zu sein, evtl. bin ich 
einfach zu blöd. ;-)


Grüße,
Jan
OP #2431484
Lesenswert?

Ich komme bislang nur so weit, dass wenn ich rechne:

> Code Eingabe "00000000 + F" an COM 611
> 0x02 0xFF 0x15 0x01 0x00 0x00 0x00 0x00 0x00 0xEB 0x03
       0xFF 0x15 0x01 jeweils XOR(00 ist ja ohne Effekt) => EB

allerdings bekomme ich das nicht hiermit in Einklang

> Code Eingabe "0000 + F" an COM 611
> 0x02 0xFF 0x15 0x01 0x00 0x00 0xFF 0xFF 0x00 0xED 0x03

Einziger unterschied sind zweimal 0xFF, was ja genau null Effekt hätte, 
hier aber hat.
#2432949
Lesenswert?

Jan schrieb:
> Code Eingabe "0000 + F" an COM 611
> 0x02 0xFF 0x15 0x01 0x00 0x00 0xFF 0xFF 0x00 0xED 0x03
1
      0xFF+0x15+0x01      +    0xFF+0xFF = 0x313
2

3
      0x313 & 0xFF = 0x13
4
      Zweierkomplement(0x13) = 0xED
Wäre das eine Möglichkeit? Beim zweiten und dritten String funktionierts 
auch.

mfg mf
#2433136
Lesenswert?

Es gibt eine ganz billige Rechnung dafür:
Alles was zwischen dem Startmarker 0x02 und dem Endmarker 0x03 kommt in 
eine 8bit-unsigned-Variable aufsummieren. Überlauf ist gewollt! Dann 
diese 8bit-unsigned-Variable auf Null überprüfen é voila...
Kommt nicht 0 raus, wird wohl ein Fehler aufgetreten sein.
mfg mf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren