Berechnung CRC16

28/04/2009 - 12:46 von Robert Jakob | Report spam
Hallo,

aus Unkenntnis habe ich den gleichen Text
bereits vor wenigen Minuten in der Newsgroup:
microsoft.public.access.developers.toolkitode
gepostet.
Da dort keine deutsche Anfragen zu lesen sind,
poste ich nochmals hier.

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...n.html?crc+01+30+00&method=hex


Wer kann mir da eine Hilfestellung geben ?

MfG
Robert
 

Lesen sie die antworten

#1 Mark Doerbandt
28/04/2009 - 12:53 | Warnen spam
Hallo, Robert,

Robert Jakob:

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.



Google hilft!

http://www.devx.com/vb2themax/Tip/19241

Gruss - Mark

Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beitràge senden.

Ähnliche fragen