AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

checksum eines RS232-strings erstellen

Ein Thema von GPR-Man · begonnen am 14. Dez 2010 · letzter Beitrag vom 15. Dez 2010
Antwort Antwort
LargoD

Registriert seit: 8. Jun 2007
42 Beiträge
 
#1

AW: checksum eines RS232-strings erstellen

  Alt 14. Dez 2010, 14:13
Du musst einen String senden, der Checksum 0 hat. Dazu musst Du die zu sendenden Zeichen aufaddieren, das höherwertige byte ignorieren ind dann das niederwertige byte komplementieren und anhängen, dann hat Dein String insgesamt die Checksum 0.

Gruß
Erich
  Mit Zitat antworten Zitat
GPR-Man

Registriert seit: 28. Okt 2008
Ort: Zürich
14 Beiträge
 
RAD-Studio 2009 Pro
 
#2

AW: checksum eines RS232-strings erstellen

  Alt 14. Dez 2010, 14:23
Entschuldigt, aber wie sieht das als Code aus, wenn ich die Summe (12F) habe?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: checksum eines RS232-strings erstellen

  Alt 14. Dez 2010, 14:28
Delphi-Quellcode:
sum := 0;
if i := 1 to length(s) then
  inc(sum, ord(s[i]));

checkchar := char((not sum) and $FF);
s := s + checkchar;
Andreas
  Mit Zitat antworten Zitat
GPR-Man

Registriert seit: 28. Okt 2008
Ort: Zürich
14 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: checksum eines RS232-strings erstellen

  Alt 14. Dez 2010, 15:00
Danke, der Code ergibt jedoch für FFD0020005 2E an Stelle von 2A und für FF1000 F0 an Stelle von F1.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

AW: checksum eines RS232-strings erstellen

  Alt 14. Dez 2010, 15:57
Delphi-Quellcode:
sum := 0;
for i := 1 to length(s) do inc(sum, ord(s[i]));
checkchar := char(-sum and $FF);
  Mit Zitat antworten Zitat
GPR-Man

Registriert seit: 28. Okt 2008
Ort: Zürich
14 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: checksum eines RS232-strings erstellen

  Alt 15. Dez 2010, 06:55
Der Code sieht nun so aus:
Delphi-Quellcode:
  function CalculateChecksum(s: string): Longint;
  var
    i, sum: integer;
    checkchar : Char;
  begin
    sum := 0;
    for i := 0 to length(s)-1 do
      inc(sum, ord(s[i]));
    checkchar := char((- sum) and $FF);

    Result := Ord(checkchar);
  end;
und liefert bei 3 bytes den korrekten Wert, also FF1000 -> F1 oder FF3000 -> D1. Sobald der String jedoch länger wird, stimmt es nicht mehr:
- FF64020006 ergibt 9B, sollte 95 sein
- FF900200FF ergibt 6F, sollte 70 sein
- FFD20400000005 ergibt 2B, sollte 26 sein
Was muss man noch ändern?
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#7

AW: checksum eines RS232-strings erstellen

  Alt 15. Dez 2010, 08:20
Die von mir angegebene Funktion liefert die korrekten Werte. Wenn Du sie verschlimmbesserst, indem Du i von 0 aus startest, darfst Du Dich nicht wundern, wenn sie falsche Ergebnisse liefert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz