Serialport und Encoding; Problem beim Konvertieren ASCII in Prüfziffer

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Hi Group,

um Daten an ein serielles Gerät zu senden, muss ich am Ende zwei
Prüfziffern dranhängen.
Dazu muss man die Summe aller Ascii-Werte nehmen und durch 256
dividieren.
Der Rest ergibt die 2te Checksumme.
Beide Checksum werden an das Satzende angehängt.
Meine Umsetzung sieht so aus:

------
For i As Integer = 0 To sLine.Length - 1
sReadByte = sLine.Substring(i, 1)
iChecksum += Asc(sReadByte)
sWriteLine &= sReadByte
Next
iCheck1 = iChecksum \ 256
iCheck2 = iChecksum Mod 256
If iCheck1 = 13 Then iCheck1 = 14 'Ausnahmebehandlung für chr13
If iCheck2 = 13 Then iCheck2 = 14 'Ausnahmebehandlung für chr13
sWriteLine &= Chr(iCheck1) & Chr(iCheck2)
-------
Der String wird dann an das serielle Gerät gesendet:
serialPort1.Write(sWriteLine & vbCr)
-------

Das klappt auch soweit, nur nicht immer :-((
Wenn aber sLine z.B. den Wert 'test' hat, wird die Checksum vom
seriellen Gerät abgewiesen.
Mit einem Portmonitor ist mir aufgefallen, dass die Anwendung des
Herstellers in diesem Fall einen andere Checksum ermittelt:
Korrekt wäre (HEX): 74 65 73 74 01 C0 0D
Ich sende:74 65 73 74 01 3F 0D

Meine Vermutung:
Wahrscheinlich taucht das Problem ab dem erweiterten Zeichensatz (ab
128) auf.
Muss ich hier mit eine Encoding Parameter bei SerialPort arbeiten?
Das habe ich ohne Erfolg versucht: serial.Encoding =
System.Text.Encoding.GetEncoding("Windows-1252")

Hat mir jemand einen Tipp?

gruß Jo




.



Relevant Pages

  • hexadecimal calculating: turning on the high bit
    ... I have hardly any experience with hexadecimal calculating and 'and' ... cHex: string; ... iChecksum: integer; ... I find that the only example that doesnt compute right the checksum ...
    (alt.comp.lang.borland-delphi)
  • Re: hexadecimal calculating: turning on the high bit
    ... checksum byte and an end byte ... function VetmessageChecksum(vetmessage: string): string; ... iChecksum: integer; ... any more two character bits left. ...
    (alt.comp.lang.borland-delphi)
  • Re: hexadecimal calculating: turning on the high bit
    ... function VetmessageChecksum(vetmessage: string): string; ... cHex: string; ... iChecksum: integer; ... I'd also calculate the checksum along the way, instead of doing it as a separate loop. ...
    (alt.comp.lang.borland-delphi)