MAF 8031AH-2 12P - Wie macht der die Prüfziffer

Gast #1505533
Ich weiß nicht, ob die Frage hier richtig ist, aber ich habe ein Gerät 
mit einem alten Mikrocontroller, MAF 8031AH-2 12P. Das teil steuert ein 
weiteres Gerät mit dem selben µC.

Die Befehle, die gesendet werden, sind ja am Ende mit einer Prüfziffer 
versehen. Ich weiß nicht, ob die Controller das automatisch machen oder 
per Software so reinprogrammiert ist. Ich denke, da kennen sich hier 
genug aus.

Hier ein paar Beispiele von Datensendungen:

74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
74 01 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 73
74 01 20 4E 45 47 4C 4F 46 20 45 54 54 49 42 20 0D = Prüfziffer: 60
74 11 20 20 20 20 20 20 20 20 4C 4C 41 46 4E 55 0D = Prüfziffer: 0B
74 01 20 20 20 20 20 20 20 3E 3D 3D 3D 3D 3D 3D 0D = Prüfziffer: 19

Ich müsste wissen, wie das berechnet wird. Wenn es ein Standard ist, 
sollte es doch recht einfach sein. Folgendes konnte ich schon 
herausfinden:
1 mehr an der 2. Position erhöht die Prüfzahl um 1, an der 3. und 4. 
Position erniedrigt sich die Prüfzahl.

Bevor ich dort weiter kompliziert herumforsche, wollte ich hier mal die 
Experten fragen. Danke!
Gast
Der 8031 ist ein 8051 mit externem ROM. Neben der CPU muß also ein 
Programmspeicher sein. Den mal auslesen und disassemblieren könnte Dich 
der Lösung des Problems näher bringen.
Persönliche Seite
Mit einem Disassembler, der den MCS-51-Befehlssatz versteht. Den 
verwendet der 8031 nämlich.

> Die Befehle, die gesendet werden, sind ja am Ende mit
> einer Prüfziffer versehen.
> Ich weiß nicht, ob die Controller das automatisch machen

tun sie nicht

> oder per Software so reinprogrammiert ist.

So wird es sein. Den Algorithmus hast Du nicht anhand der von Dir 
geposteten Beispiele herausfinden können?

Wenn nein, dann wirst Du wohl die Software analysieren müssen, was aber 
mehr als nur einen Disassembler erfordert, nämlich Deinerseits 
Verständnis dessen, was die verwendeten Maschinenbefehle bedeuten und 
bewirken.
Gast
Hmmmmm ... so ein Mist ;-)
Leider kenne ich mich damit nicht sonderlich aus, habs schon probiert, 
aber das ist wie wenn jemand ein Haus bauen soll und nicht weiß, das es 
Steine zum Mauern gibt.
Gast
Ich bin schon weitergekommen.

Vor der Prüfziffer sind ja immer 17 Werte, ich habe jeden Wert 
nacheinander +1 addiert und geschaut, wie sich die Prüfziffer weiterhin 
verändert.

Stelle  Bedeutung          Prüfziffer-Veränderung
1  74 (t Befehlanfang)   Wert +1 = PZ +1
2  Anzeige-Ort          Wert +1 = PZ +1
3  Wort 1, Zeichen 1  Wert +1 = PZ –3
4  Wort 1, Zeichen 2  Wert +1 = PZ +3
5  Wort 1, Zeichen 3  Wert +1 = PZ –3
6  Wort 1, Zeichen 4  Wert +1 = PZ +3
7  Wort 1, Zeichen 5  Wert +1 = PZ –3
8  Wort 1, Zeichen 6  Wert +1 = PZ +3
9  Wort 1, Zeichen 7  Wert +1 = PZ –3
10  Wort 2, Zeichen 1  Wert +1 = PZ +3
11  Wort 2, Zeichen 2  Wert +1 = PZ –3
12  Wort 2, Zeichen 3  Wert +1 = PZ +3
13  Wort 2, Zeichen 4  Wert +1 = PZ –3
14  Wort 2, Zeichen 5  Wert +1 = PZ +3
15  Wort 2, Zeichen 6  Wert +1 = PZ –3
16  Wort 2, Zeichen 7  Wert +1 = PZ +3
17  0D (Befehlende)          Wert +1 = PZ –3
18      Prüfziffer

Wert +1 bedeutet immer, das ich mit einer Eins addiert habe.

Aber wie stelle ich dafür jetzt eine Formel auf?
Könnte ne CRC sein, schau mal auf die Maxim seite, die haben da einige 
beschrieben für den 1-Wire Bus.

Falls ne CRC nicht gleich paßt, die kann auch invertiert, gespiegelt, 
mit 0x00(00) oder 0xFF(FF) startend sein.


Peter
Gast
Leute,
ich habe eine Antwort vom Entwickler des Gerätes erhalten und hatte 
vorab angefragt, wie die Prüfziffer berechnet wird. Folgende Antwort:

Sofern ich mich richtig erinnere sind die Inhalte der Einzelbytes über 
EXOR verknüpft worden. Im Anschluss wurde geprüft ob EVEN oder ODD 
Parity vorlag. Bei ODD Parity wurde das Byte invertiert und auf EVEN 
Parity ergänzt.

Hilft uns das schon weiter?
Mir sagt das ganze relativ wenig, aber es hört sich simpel an. Bitte um 
Hilfe.
Gast
Hi,

die oberen Beispiele geben immer das korekte Ergebniss wenn alle Bytes 
XOR verknüpft werden und mit 7F gestartet wird.

In Purebasic sieht das so aus:
1
Restore Daten1
2

3
For y = 1 To 5
4
  CS.b = $7F
5
  For z = 1 To 17
6
    Read.b Wert.b
7
    CS = CS ! Wert
8
  Next z
9
  Debug Hex(CS)
10
Next y
11

12
End
13

14
DataSection
15
  Daten1:
16
  Data.b $74, $00, $49, $45, $5A, $49, $4C, $4F, $50, $20, $20, $50, $4F, $54, $53, $20, $0D
17
  Daten2:
18
  Data.b $74, $01, $49, $45, $5A, $49, $4C, $4F, $50, $20, $20, $50, $4F, $54, $53, $20, $0D
19
  Daten3:
20
  Data.b $74, $01, $20, $4E, $45, $47, $4C, $4F, $46, $20, $45, $54, $54, $49, $42, $20, $0D
21
  Daten4:
22
  Data.b $74, $11, $20, $20, $20, $20, $20, $20, $20, $20, $4C, $4C, $41, $46, $4E, $55, $0D
23
  Daten5:
24
  Data.b $74, $01, $20, $20, $20, $20, $20, $20, $20, $3E, $3D, $3D, $3D, $3D, $3D, $3D, $0D
25
EndDataSection
Gruß Rene
Gast
Danke soweit,
haben Sie das ganze mal so getestet, ob mit diesem Code die richtige 
Prüfziffer herauskommt?

Ich würde eine Prozedur für Visual Basic 6 benötigen. Aber ggf. berede 
ich das im entsprechenden Forum.
Gast
Habs grad selbst getestet unter PureBasic (Testversion schnell 
runtergeladen) und es funktioniert ja tatsächlich. Ich bedanke mich 
herzlich, aber einen Code für VB6.0 hast du nicht zufällig?
Gast
Wow, ich bin ja besser als ich dachte. Habs schon fertig in VB.
1
püfziffer = 127
2
prüfziffer = prüfziffer - 116 Xor 17 Xor 65 Xor 75 Xor 80 Xor 73 Xor 90 Xor 84 Xor 79 Xor 32 Xor 78 Xor 65 Xor 70 Xor 69 Xor 83 Xor 83 Xor 13
3
Label1.Caption = prüfziffer

DANKE an RENE

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.