Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Berechnung CRC16

0 views
Skip to first unread message

Robert Jakob

unread,
Apr 28, 2009, 6:12:10 AM4/28/09
to
Hallo,

f�r das Senden und Empfangen von Daten �ber die
serielle Schnittstelle ist es erforderlich pro
Sende- oder Empfang der Daten
eine CRC16 Pr�fsumme zu berechnen.

Nun hat mir ein schlauer Mann eine Version in C++
geliefert, mit der ich aber wenig anfangen kann, da
ich das Ganze in Access mit VBA machen m�chte.

Hier folgt nun der Code, in C++ der alternativ in VBA
ausgef�hrt werden soll.

Anfang des Code in C++


// ----------

// CRC f�r 1Byte berechnen und zur�ckgeben

// ----------

unsigned int calcCRC(unsigned byte, unsigned int srcCRC) {

unsigned int newCRC;

newCRC = srcCRC;

newCRC = newCRC ^ (unsigned int)byte; // XOR

for(unsigned byte i = 8; i > 0; i--) {

if ((newCRC) & 0x0001) {

newCRC = ((newCRC) >> 1) ^ 0xA001;

} else {

(newCRC) >>= 1;

}

}

return newCRC;

}

// ----------

// Hauptprogramm

// ----------

void main() {

unsigned int myCRC;

unsigned byte b1, b2;

// CRC �ber 2 Bytes berechnen

myCRC = 0xFFFF;

myCRC = calcCRC(b1, myCRC);

myCRC = calcCRC(b2, myCRC);

Ende des Code in C++


Den Code kann ich ja so nicht �bertragen, was ich
brauche w�re eine sinngem��e Prozedur in VBA.

Hat da jemand eine Idee ?

Mit einer externen DLL habe ich schon Versuche
angestellt, komme aber damit nicht klar, weil st�ndig
die Fehlermeldung kommt, da� die Prozedur die
Datei nicht finden kann, obwohl der Pfad angegeben ist.

Es gibt eine Menge CRC - Codes im Internet, jedoch
liefert jeder Code ein anderes Ergebnis.

Der C++ Code oben berechnet "CRC-16 (Modbus)"
Ein Beispiel:
00 01 30 00 -> mu� E4 45 als Ergebnis bringen!

Hierzu auch ein Link zum online Berechnen:
http://www.lammertbies.nl/comm/info/crc-calculation.html?crc=00+01+30+00&method=hex


Wer kann mir da eine Hilfestellung geben ?

MfG
Robert

0 new messages