Herunterladen Inhalt Inhalt Diese Seite drucken

Daten; Error-Check - Gossen Metrawatt R2700 Schnittstellenbeschreibung

Bus-schnittstellen
Vorschau ausblenden Andere Handbücher für R2700:
Inhaltsverzeichnis

2.1.4 Daten

Details über das Datenfeld im Telegramm Kapitel 2.1.6 auf Seite 6 und Kapitel 2.2 auf Seite 8.
Die Daten beim Modbus sind grundsätzlich 16-Bit Worte.
Die Übertragung geschieht mit dem High-Byte zuerst.
Die Darstellung von Zahlenwerten erfolgt im 2-er-Komplement.
Größen, die  7 Bit Format haben, werden auf 15 Bit vorzeichenerweitert.
Bitfelder im 8-Bit Format werden mit einem High-Byte = 0 ergänzt.

2.1.5 Error-Check

Die korrekte Übertragung des Telegramms wird durch die Prüfung des CRC-16 Cyclical Redundancy Checks sichergestellt. Die
beiden Zeichen des CRC-16 werden aus allen Zeichen des Telegramms (Slave-Adresse bis letztes Daten-Byte) wie folgt erzeugt:
1 Vorbesetzen eines 16-Bit-Registers (CRC-16-Register) mit FFFFh.
2 Exclusive-Oder-Verknüpfung des Low-Bytes des CRC-16-Registers mit dem Zeichen des Telegramms.
Ergebnis im CRC-16-Register.
3 Rechts-Shift des CRC-16-Registers um ein Bit.
Eine 0 wird nachgeschoben, das rausgeschobene niederwertigste Bit (LSB) wird aufgehoben.
4 Wenn LSB = 0 ist, weiter mit Schritt 5.
Wenn LSB = 1 ist, Exclusive-Oder-Verknüpfung des CRC-16-Registers mit A001h.
5 Die Schritte 3 und 4 wiederholen, bis insgesamt 8 Rechts-Shifts erfolgten.
Danach ist ein Zeichen des Telegramms abgearbeitet.
6 Schritt 2 bis 5 für jedes weitere Zeichen des Telegramms durchführen.
7 Wenn alle Zeichen des Telegramms abgearbeitet sind, wird der Inhalt des CRC-16-Registers mit dem Low-Byte voran ans
Telegramm angehängt.
Eine Programmierung in der Sprache C würde z. B. folgenden Code ergeben:
/* ------------------------------------------------------------------
crc_16()
Input parameters:
Return value:
------------------------------------------------------------------ */
unsigned int crc_16 (unsigned char *buffer, unsigned int length) {
unsigned int i, j, lsb, tmp, crc = 0xFFFF;
for ( i = 0; i < length; i++ ) {
tmp = (unsigned char) *buffer++;
crc ^= tmp;
for ( j = 0; j < 8; j++ ) {
lsb = crc & 0x0001;
crc >>= 1;
if ( lsb != 0 ) crc ^= 0xA001;
}
}
return (crc);
}
GMC-I Messtechnik GmbH
calculate the crc_16 error check field
buffer:
string to calculate CRC
length:
bytes number of the string
CRC value.
5
Inhaltsverzeichnis
loading

Diese Anleitung auch für:

R2500

Inhaltsverzeichnis