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