vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Habe Routine für CRC16 Tabelle 
Autor: Wöllmi
Datum: 27.04.03 22:39

Hi,

nach langem Grübeln und basteln habe ich eine VB Variante mit Berechnung
einer Tabelle gefunden und an meine Beduerfnisse angepaßt.

Testen konnte ich dies leider nur mit meinen eigenen MODBUS Kommandos.
D.h. es kommt genau das Richtige raus, und ich habe eine einzigste Schleife für die
Anzahl der einzubeziehenden Zeichen! Die CRC wird ja vom Anfang bis zum Ende
einer Zeichenfolge berechnet.
Z.B. Für der MODBUS Befehl "020105CD6BB20E1B" wird somit eine CRC16
von "FF04" berechnet. D.h. 8 Berechnungen. (020105CD = &h02 &h01 &h05 &hCD ...)

Für CRC16 -CITT benötige ich nur einen String bzw. ein Byte-Array, von dem die CRC16
gebildet werden muß und die korrekte CRC zum Vergleich bekannt ist.

Wie die Tabelle berechnet werden muß, hoffe ich zu wissen!
Wenn noch Interesse besteht, dann teile mir bitte eine Zeichenfolge mit der korrekten
CRC16 mit.
Stimmt meine Routine, veröffentliche ich hier den kompletten Code.

Bei gegebenem POLY von &h1021 und Initial von &h0000 habe ich eine
Tabelle mit der reflection berechnet. POLY &h8404 und Initial &hFFFF.
  ' Die Tabelle ist dann so belegt: (Auszug!)
'Für: CRC16-CITT POLY &h8408 Initial &hFFFF
    fcstab(0) = &H0&
    fcstab(1) = &H1189&
    fcstab(2) = &H2312&
    fcstab(3) = &H329B&
    fcstab(4) = &H4624&
    fcstab(5) = &H57AD&
    fcstab(6) = &H6536&
    fcstab(7) = &H74BF&
........
'Die Routine zur Berechnung der Tabelle sieht so aus
'Achtung: für CRC16-CITT POLY &h8408 übergeben
'Als Standard ohne POLY Angabe arbeite ich für MODBUS CRC mit &hA001.
Global usCRC(0 To 255)  As Long
Public Sub CRCInit16( _
    Optional ByVal Poly As Long = &HA001 _
  )
  'Deklarationen:
  Dim CRC As Long
  Dim i As Integer
  Dim j As Integer
 
  '&hA001 ist the reflection von &h8005 !!!  für Modbus
  '&h8408 ist die reflection von &h1021 !!!  für CITT/X25
  For i = 0 To 255
     CRC = i
     For j = 0 To 7
        If CRC And &H1 Then
        'CRC = (CRC >>> 1) ^ Poly
        CRC = ((CRC And &HFFFE) \ &H2 And &H7FFF) Xor Poly
      Else
        'CRC = (CRC >>> 1)
        CRC = CRC \ &H2 And &H7FFF
      End If
    Next j
    usCRC(i) = CRC
  Next i
 
End Sub
Für MODBUS (CRC16 Standard POLY &h8005 reflect = &hA001 und INIT &hFFFF)
klappt bei mir alles perfekt.
Z.B. Für der MODBUS Befehl "020105CD6BB20E1B" wird somit eine CRC16
von "FF04" berechnet.

Die weitere Routine zur Abarbeitung der kompletten Zeichenfolge,
des Byte-Arrays ist natürlich an diese Tabelle angepaßt!

Melde dich bitte einfach nochmal!

Tschaui
Woellmi

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
CRC16 mit VB6 (Letzte rettung)875LonelySuicide66623.04.03 20:23
Re: CRC16 mit VB6 (Letzte rettung)4.414unbekannt23.04.03 20:40
Re: CRC16 mit VB6 (Letzte rettung)535LonelySuicide66624.04.03 20:26
Re: CRC16 mit VB6 (Letzte rettung)4.545Wöllmi23.04.03 21:53
Hier der Code4.617Wöllmi23.04.03 21:56
Re: Hier der Code Teil 24.495Wöllmi23.04.03 21:57
Re: Hier der Code531LonelySuicide66624.04.03 19:47
Re: Hier der Code4.720unbekannt24.04.03 22:03
Re: Hier der Code509LonelySuicide66625.04.03 06:00
Re: Hier der Code4.440unbekannt25.04.03 17:22
Oh Mann natürlich umgekehrt 4.322unbekannt25.04.03 17:30
Re: Oh Mann natürlich umgekehrt 518LonelySuicide66625.04.03 20:15
Re: Oh Mann natürlich umgekehrt 4.303unbekannt25.04.03 20:28
Re: Oh Mann natürlich umgekehrt 514LonelySuicide66626.04.03 12:29
Re: CRC16 mit VB6 (Letzte rettung)514Analyzer26.04.03 12:59
Noch näher an der Beschreibung:517Analyzer26.04.03 13:49
Re: Noch näher an der Beschreibung:511LonelySuicide66626.04.03 15:27
Re: Noch näher an der Beschreibung:501Analyzer26.04.03 17:12
Re: Noch näher an der Beschreibung:494LonelySuicide66626.04.03 20:56
Anregung: CRC16 mit Tabelle5.473Wöllmi26.04.03 23:00
Habe Routine für CRC16 Tabelle5.300Wöllmi27.04.03 22:39
Re: Habe Routine für CRC16 Tabelle502LonelySuicide66628.04.03 10:47
Re: Habe Routine für CRC16 Tabelle4.990Wöllmi28.04.03 22:58
&h270C muß rauskommen4.417Wöllmi28.04.03 23:00
Re: CRC16 mit VB6 (Letzte rettung)4.629Swiss Ueli30.04.03 18:26
Re: CRC16 mit VB6 (Letzte rettung) - Teil 24.525Swiss Ueli30.04.03 18:30

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel