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.
1 | static void Main(string[] args)
|
2 | {
|
3 | Console.WriteLine("Klimschrank String eingeben:");
|
4 | //string input = Console.ReadLine();
|
5 | //const string input = "1T018.5F65POT015.7#11T010.0F90R1000000000000000";
|
6 | const string input = "1?";
|
7 | Console.WriteLine(input);
|
8 | Console.WriteLine("Modulo 256 Checksum:");
|
9 | // Invoke GetBytes method.
|
10 | // ... You can store this array as a field!
|
11 | byte[] array = System.Text.Encoding.ASCII.GetBytes(input); //Die Asciizeichen sind jetzt als Dezimalwert drin Tabelle ASCII => Dezimalzahl
|
12 | int summe = 0x02; // Start für STR
|
13 | // Loop through contents of the array.
|
14 | foreach (byte element in array)
|
15 | {
|
16 | summe += element;
|
17 | Console.WriteLine(element);
|
18 | }
|
19 | Console.WriteLine(summe);
|
20 | int checksum = summe % 256;
|
21 | Console.WriteLine(checksum);
|
22 | Console.WriteLine("{0:X02}", checksum);
|
23 | }
|
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