2016-05-18 4 views
0

Ich erhalte Daten von seriell Port in einem Byte-Arrayberechnen CRC 8 der empfangenen Daten auf dem seriell Port C#

Wie kann ich die Prüfsumme der Daten berechnet wird nicht die sync enthalten (54) und die Prüfsumme (F2) Byte und möchte mit dem letzten Prüfsummenbyte übereinstimmen.

Aktualisiert:

int bytes = comport.BytesToRead; 

      byte indexCRC; 
      int sumCRC = 0; 
      byte checksumCRC = 0; 
      byte checksum; 

      byte[] RXBuffer = new byte[bytes]; 


      comport.Read(RXBuffer, 0, bytes); 

      checksum = RXBuffer.Last(); 

      byte[] RXBufferCRC = new byte[bytes]; 

      for (indexCRC = 1; indexCRC < RXBufferCRC.Length; indexCRC++) 
      { 
       sumCRC = sumCRC + RXBufferCRC[indexCRC]; 
      } 

      checksumCRC = (byte)(sumCRC); 
+1

Könnten Sie vielleicht geben dabei einige Beispiel dafür, was Sie versucht haben, ? Vielleicht können wir Ihnen sagen, warum es dann nicht funktioniert. –

+0

Hallo @StrahBehry Ich versuche so etwas. Bitte überprüfen Sie die Frage –

+0

Sieht aus wie eine einfache Summe von Bytes 1..N-2. 80 + 71 + 01 == F2. Schwer zu erraten, was 35 tun könnte. Verwenden Sie ein Telefon, um mit einem Geräteprogrammierer zu sprechen, der die tatsächliche Antwort kennt. –

Antwort

1

den Index von 1 Starten Sie aber vorher löschen Sie den letzten Index des Arrays und speichern Sie das Array in einem anderen Array etwas wie das uns

int Secbytes = comport.BytesToRead; 
byte[] SecRXBuffer = new byte[Secbytes]; 

Array.Copy(SecRXBuffer, VanguardConstants.RECEIVEINDEX, RXBuffer, 0, Secbytes); 

byte[] tmp = new byte[bytes - 1]; 

Array.Copy(RXBuffer, tmp, Secbytes - 1); 

for (i = 1; i < tmp.Length; i++) 
{ 
    Sum = (byte)(Sum + tmp[i]); 
} 

Checksum = ((byte)Sum);