mikrocontroller.net

Forum: PC-Programmierung Checksumme Modulo 256 bilden in C# Klimaschrank


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche mit einem Klimaschrank über RS232 zu kommunizieren.
An sich wollte ich das "gerade" per Terminal von Hand eingeben, aber 
dann sagt die Anleitung, dass ich eine Prüfsumme an jeden String 
anhängen soll.

Ich habe daraufhin Visual Studio runtergeladen und versucht diese 
Prüfsumme aus einem String mit C# zu ermitteln. Leider ohne Erfolg. Ich 
verstehe die Prüfsummenbildung nicht. Auf Seite 100 bis 106, siehe PDF 
im Anhang ist es an sich erklärt, aber verstehen tue ich den Quellcode 
vom Turbopascal nicht.

Ich habe es probiert die Summe der einzelnen ASCII Zeichen zu bilden und 
dann anschließend mit dem Modulo Operator den Rest der Modulo 256 
Operation als Checksumme zu nehmen.

        static void Main(string[] args)
        {
            Console.WriteLine("Klimschrank String eingeben:");
            //string input = Console.ReadLine();
            //const string input = "1T018.5F65POT015.7#11T010.0F90R1000000000000000";
            const string input = "1?";
            Console.WriteLine(input);
            Console.WriteLine("Modulo 256 Checksum:");
            // Invoke GetBytes method.
            // ... You can store this array as a field!
            byte[] array = System.Text.Encoding.ASCII.GetBytes(input); //Die Asciizeichen sind jetzt als Dezimalwert drin Tabelle ASCII => Dezimalzahl
            int summe = 0x02; // Start für STR
            // Loop through contents of the array.
            foreach (byte element in array)
            {
               summe += element;
                Console.WriteLine(element);
            }
            Console.WriteLine(summe);
            int checksum = summe % 256;
            Console.WriteLine(checksum);
           Console.WriteLine("{0:X02}", checksum);
        }

Für den String STR 1? erhalt ich als Prüfsumme 0x72. Soll lt. Anleitung 
0x8E.

Für den String STR 1T018.5F65POT015.7#11T010.0F90R1000000000000000 
erhalte ich 0xEC. Soll lt. Anleitung 0x14.

Kann mir hier wer weiterhelfen?

Ich möchte an sich nur ein paar Parameter an den Klimaschrank sende :/

Gruß
Michael

von leo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Für den String STR 1? erhalt ich als Prüfsumme 0x72. Soll lt. Anleitung
> 0x8E.

Passt ja (fast). Du hast Komplement im .PDF nicht gelesen 
(0x72+0x8E=0x100).

leo

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:

>             int checksum = summe % 256;

Ersetzen durch:

byte checksum = Convert.ToByte((~summe + 1) & 0xff);

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> verstehe die Prüfsummenbildung nicht. Auf Seite 100 bis 106, siehe PDF
> im Anhang ist es an sich erklärt, aber verstehen tue ich den Quellcode
> vom Turbopascal nicht.

https://www.heise.de/download/product/free-pascal-2271

Oliver

von WIRO (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,
ich habe das Programm abgetippt und mit dcc kompiliert (s. Anlage).
Zuerst wird der String abgefragt, dann wird die Prüfsumme angezeigt.

Gruß
WIRO

von Michael (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank euch allen für die tolle und schnelle Hilfe.
Nun funktioniert es.

Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.