11 - in - 1 Umwelt - und Luftqualitätssensoren Modbus-Kommunikationsprotokoll

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

11 - in - 1 Umwelt - und Luftqualitätssensoren Modbus-Kommunikationsprotokoll
11 - in - 1 Umwelt - und Luftqualitätssensoren Modbus-KommunikationsprotokollAbbildung

Produktfunktion Beschreibung:

X-SSG - A1101 - RS485 10 - in - 1 Umwelt - und Luftqualitätssensor verwendet einen Hochgeschwindigkeitsprozessor, integriert CO2, Formaldehyd, TVOC, Laserstaub PM2,5, PM10, PM1.0 Partikel, Temperatur, Feuchtigkeit, Luftdruck, Beleuchtung und Geräusch-Erkennung in einem, durch RS485 - Bus-Kommunikation - Modus Umweltqualitätsdaten-Erkennung und Berichterstattung. Die Installation von Decke mit Rotationsschnuppen ist einfach zu bedienen.

Technische Indikatoren für Produkte

2.1 Detektionsparameter und Auflösung
SensordatenMessungsauflösungMessbereichMessgenauigkeit
Kohlendioxid eCO21ppm400 - 60.000ppm± 30ppm
TVOC1ug / m30 - 60.000ug / m3± 50ug / m3
Formaldehyd CH2O1 μ g / m30 ~ 1.000 μ g / m3± 25%
PM2.51 μ g / m30 ~ 1.000 μ g / m3± 10%
PM101ug / m30 ~ 1000ug / m3± 10%
PM1.01ug / m30 ~ 1000ug / m3± 10%
Temperatur0,01 ° C-40 ~ 85 ° C± 0,2 ° C
Luftfeuchtigkeit0.01%0 ~ 100%± 1% RH
Luftdruck1 Pa30.000 bis 110.000 Pa± 12 Pa
Beleuchtungsstärke1 Lux0 bis 60.000 Lux± 5%
Rauschen1 dB30 ~ 90dB± 3dB

HINWEIS: Der CH2O-Wert des Moduls entspricht dem TVOC-Wert, bitte beachten Sie es beim Kauf und Gebrauch.

2.2 Betriebsspannung: DC5V ± 0.2V @ 150mA

2,3 工作环境:工作温度- 10 ~ 60℃,工作湿度: 5 ~ 95%RH(无凝结)

2.4 Kommunikationsmodus: Modbus-RTU485

2.5 Vorwärmzeit: Weniger als 3 Minuten

Der Halbleiter-VOC - Sensor ist theoretisch stabiler, je länger der Einschalt ist

2.6 Lebensdauer: 3 Jahre (in der Luft)

III. Produktspezifikationen

3.1 Abmessungsdiagramm

11 - in - 1 Umwelt - und Luftqualitätssensoren Modbus-KommunikationsprotokollAbbildung1

I, Standard 4 - Draht-Schnittstellen II, 2 - Kabel + USB-Schnittstelle

Wie in der obigen Abbildung gezeigt, bietet dieses Produkt "Standard 4 - Draht-Schnittstelle" und "2 - Draht + USB-Stromversorgung" zwei Arten von physikalischen Schnittstellen, bitte Root nach tatsächlichen Bedürfnissen beim Kauf anzugeben.

Dieses Produkt verwendet standardmäßig 5V Gleichstromversorgung, wenn Sie eine spezielle Spannung (6 - 36V) benötigen, können Sie uns kontaktieren.

3.2 Verbindung Definition

1) Typ der Schnittstelle "Standard 4 - Leiter":

SeriennummerNameHinweis
RS485_AGelbRS485_A
RS485_BGrünRS485_B
DC +RotStandard 5V Gleichstromversorgung, spezielle Spannung angepasst
GNDSchwarzErdleitung

2) „2 Leitungen + USB-Anschluss" Schnittstelle Typ:

SeriennummerNameBeschreibung
ARot (A)RS485_A
BSchwarz (B)RS485_B
UMicro USB5V Gleichstromversorgung

Hinweis: Die Farben in der obigen Tabelle sind allgemeine Anweisungen, wenn spezifische Verkabelung, bitte die Etiketten auf dem Produkt vorrangig.

IV. RS485 Kommunikationsprotokoll

4.1 Kommunikationsparameter

ModBus-RTU485 Parameter:9600/8/N/1

Werkstücksstandard-Adresse:0x01

Rückgabezeit: Weniger als 100ms

4.2 Kommunikationsabkommen

1) Befehl Adresse lesen

Richtung: Benutzeranwendung - > Sensor-Modul; Antwort erforderlich: Ja

Anforderungsnachrichtenformat:

Byte-NummerDatenBeschreibung
00xFEBroadcast-Adresse
10x11Meldung von Slave-Adresse Funktionscode
20x00Fix
30x00Fix
40x00Fixed
50x01Fixed
67CRC_LCRC_HCRC-Check

Antwortnachrichtenformat:

Byte-NummerDatenBeschreibung
00x01Slave-Adresse
10x11Meldung von Slave-Adresse Funktionscode
20x02Anzahl der Bytes
3versionFirmware-Version
4addressAktuelle Adresse
56CRC_LCRC_HCRC-Check

Beispiel: Senden Sie Befehl:FE11 00 00 00 01 28 06

Rückgabe: 01 11 02 12 01 70 5C

Beschreibung: In den zurückgegebenen Daten zeigt 0x12 die Versionsnummer V1.2, und 0x01 zeigt die Gerätsadresse 01 an.

2) Anweisung der Adresse ändern. Die Fabrik-Adresse ist 0x01, Adressbereich kann geändert werden:1~247

Richtung: Benutzeranwendung - > Sensor-Modul; Antwort erforderlich: Ja

Anforderungsnachricht Format:

BytesnummerDatenBeschreibung
0addressAktuelle Adresse
10x06Funktionscode
20x00Fixed
30x00Fix
40x00Reserviert
5neue AdresseNeue Adresse
67CRC_L
CRC_H
CRC-Prüfungen

Antwortnachrichtenformat:

BytenummerDatenBeschreibung
0addressAdresse vor der Änderung
10x06Funktionscode
20x00Fixed
30x00Fix
40x00Reserviert
5neue AdresseGeänderte Adresse
67CRC_L
CRC _ H
CRC-Prüfungen

Beispiel: Die aktuelle Adresse ist: 0x01, die Standardadresse ist: 0x02

Senden Sie einen Befehl:01 06 00 00 00 02 08 0B

Rückgabe von Daten: 01 06 00 00 02 08 0B

Die aktuelle Adresse wird von: 0x02, umgekehrt: 0x01

Senden Sie Befehle: 02 06 00 00 00 01 48 39

Daten zurückgeben: 02 06 00 00 01 48 39

3) Befehl Daten lesen

Richtung: Benutzeranwendung - > Sensormodul; Antwort erforderlich: Ja

Anforderungsnachrichtformat:

BytesnummerDatenBeschreibung
0addressAktuelle Adresse
10x03Funktionscode
2
3
0x00
MM
Registerstart-Adresse
4
5
0x00
NN
Anzahl der Sensoren, die gelesen werden müssen
6
7
CRC_L
CRC_H
CRC-Verifikation

Antwortnachrichtenformat:

Byte-NummerDatenBeschreibung
0addressAktuelle Adresse
10x03Funktionscode
2NN*2Datenlänge
3xx xx......Sensordaten (4 Byte, 2 Register; 2 Byte für jede andere Sensordaten, 1 Register)
3 + NN*2
4 + NN*2
CRC_L
CRC_H
CRC-Check

Hinweis: Die zurückgegebenen Sensordaten können sich je nach Registeradresse und Datenlänge ändern.

Die Registeradresse (0x00MM) und die entsprechenden Sensordaten werden wie folgt beschrieben, wobei der Atmosphärdruck 4 Byte (2 Registers) beträgt und jeder Rest von Sensordaten 2 Byte (1 Register).

Register-AdresseSensordatenAnzahl der besetzten Registers
0x000000ECO21
0x0001TVOC1
0x0002CH2O1
0x0003PM2.51
0x0004Feuchtigkeit1
0x0005Temperatur1
0x0006PM101
0x0007PM1.01
0x0008Lichtstärke (Lux)1
0x0009MCU-Temperatur1
0x000AGeräusch (dB)1
0x000BLuftdruck (Pa)2

Beschreibung:

1 Die Anzahl der Sensoren 00NN beträgt mindestens 0001 und maximal 00 0B. Wenn der MM-Wert 00 ist, kann der NN-Wert maximal 0B sein, kann der Wert aller Sensoren gelesen werden, wenn NN 01 ist, kann nur eCO2 - Daten allein gelesen werden, wenn NN 02 ist, kann eCO2 - und TVOC-Zahlen gelesen werden

und so weiter.

2 Die vordere Adresse des Registers kann die Daten des hinteren Sensors lesen, wenn die Datenlänge vergrößert wird, aber die Rückseite des Registers kann die Daten des Sensors vor dieser Adresse nicht lesen.

3 Ein Register enthält 2 Byte von Daten, der Luftdruck macht 4 Byte aus, sowohl 2 Register, so dass beim Lesen des Luftdrucks zwei aufeinanderfolgende Register liest werden, die anderen Sensordaten machen 2 Byte aus, sowohl 1 Register.

Die Details sind wie folgt:

00MM00NNLesbare Daten
00000001zeigt an, dass CO2 - Daten von der Startadresse 0000 gelesen werden.
00000002bedeutet, dass CO2 von der Startadresse 0000 gelesen wird, TVOC-Daten
............
0000000Dbedeutet, dass CO2, TVOC, CH2O, PM2.5, Feuchtigkeit
Grad, Temperatur, PM10, PM1.0, Beleuchtung, MCU-Temperatur, Rauschdaten von der Startadresse 0000 gelesen werden, Atmosphärischer Druck
Daten
00010001zeigen das Lesen von TVOC-Daten von der Startadresse 0001
00010002zeigen das Lesen von TVOC, CH2O-Daten von der Startadresse 0001
............
00010007zeigen das Lesen von TVOC, CH2O, PM2,5, Feuchtigkeit, Temperatur von der Startadresse 0001
Grad, PM10, PM1.0 Daten
0001000Czeigt, TVOC, CH2O, PM2.5, Feuchtigkeit, Temperatur
Grad, PM10, PM1.0, Beleuchtung, MCU-Temperatur, Rauschdaten von der Startadresse 0001 zu nehmen, Atmosphärische Druckdaten
00020001für das Lesen von CH2O von Startadresse 0002
00020002für das Lesen von CH2O von Startadresse 0002, PM2.5 - Daten
............
000B0001für das Lesen von Atmosphärische Druckdaten von Startadresse 000B (2 Register)

Beispiel: Die Adresse des Moduls lautet 0x01,

vom Benutzer gesendet:01 03 00 00 00 09 85 CC Sie können 9 Sensordaten auslesen.

Benutzer senden:01 03 00 00 00 0B 04 0D 11 Sensordaten (einschließlich der MCU-Temperatur) können abgelesen werden.

Benutzer senden:01 03 00 00 00 0D84 0f 12 Sensordaten können ausgelesen werden (der Luftdruck beträgt 2 Register);

Der Benutzer sendet:0 02 B5 C9 Das bedeutet, dass nur die Luftdruckdaten gelesen werden (2 Register).

4) Lesen eines Frame-Daten

5) Das Rückgabe-Datenformat lautet wie folgt:

BytenummerDatenBeschreibung
00x01Nachrichtenkopf
10x03Funktionscode
20x1ADatenlänge
3
4
CO2 - H
CO2_L
CO2 - Daten
5
6
TVOC_H
TVOC_L
TVOC - Daten
7
8
CH2O_H
CH2O_L
CH2O-Daten
9
10
PM2.5_H
PM2.5 L
PM2.5 - Daten
11
12
Humi_H
Humi_L
Feuchtigkeitsdaten
13
14
Temp _ H
Temp_L
Temperaturdaten
15
16
PM10_H
PM10_L
PM10 - Daten
17
18
PM01_H
PM01_L
PM1.0 Daten
19
20
Lux _ H
Lux_L
Beleuchtungsdaten (Lux)
21
22
MCU_TEMP_H
MCU_TEMP_L
MCU-Temperaturdaten
23
24
dB_H
dB_L
Geräusch (dB) Daten
25
26
27
28
Pa _ byte [3]
Pa _ byte [2]
Pa _ byte [1]
Pa _ byte [0]
Atmosphärische Druckdaten (Pa)
29
30
CRC16_L
CRC16_H
CRC16 - Prüfungen

6)Konfiguration der Systemparameter

7) Sie können die Systemparameter durch Lesen oder Schreiben der Registeradresse in der folgenden Tabelle erhalten oder ändern.

8) Hinweis: Diese Funktion ist erweiterte Funktion, bitte vorsichtig verwenden, um zu vermeiden, dass Systemparameterfehler verursachen, die Sensorfunktion oder Datengenauigkeit beeinträchtigen.

RegisteradresseLänge (Bytes)Systemparameter
0x01004Sensorkonfiguration Bitmaps (Sensor Map)
0x01102Byte 1 (vor): Ob es sich um einen externen Temperatur-Feuchtigkeit - Sensor handelt
Byte 2: Benutzerkalibrieren Sie die Bitmap für Sensordaten, siehe „Bitmap für Sensormodule"
0x01112Byte 1 (vor): Sensornummer für spezielle Serienanschlussbildschirme benutzerdefinierter Indikatoren
Byte 2: Lichtdurchlässigkeit (0 - 100), 0 bedeutet keine Abdeckung, 100 bedeutet keine Verluste
0x01182CO2 - Kalibrierwert, int16
0x01192TVOC - Kalibrierwert, int16
0x011A2CH2O - Kalibrierwert, int16
0x011B2PM2.5 - Kalibrierwert, int16
0x011C2Feuchtigkeitskalibrierwert (100x), int16
0x011D2Temperaturkalibrierwert (100x), int16
0x011E2PM10 - Kalibrierwert, int16
0x011F.2PM1.0 Kalibrierung, int16
0x01202Lichtscheinungskalibrierung (Lux), int16
0x01212MCU-Temperaturkalibrierung, int16
0x01222Rauschen (dB) Kalibrierung, int16
0x01232Atmosphärische Druckkalibrierwerte, int16

Hinweis:

1. Alle Benutzerkalibrierwerte sind symbolisierte Ganzzahlen, negative Zahlen bedeuten eine negative Verschiebung, sowohl die Verschiebung zu subtrahieren;

2. Temperatur / Luftfeuchtigkeit Benutzerkalibrierwerte werden 100 - mal durch Grad Celsius vergrößert, z. B.: 250 bedeutet, dass 2,5 Grad Celsius hinzugefügt werden müssen; -110 bedeutet, dass 1,1 Grad Celsius abzugefügt werden müssen.

Beispiel: Die Adresse des Moduls ist 0x01,

vom Benutzer:01 03 01 10 00 01 84 33, Auslesen der externen Temperatur-Feuchtigkeit - Sensor-Markierung und Sensordaten Benutzer Kalibrierung Bitmap; Benutzer senden:01 01 01 01 10 00 02 04 0D    Öffnen Sie den Benutzer-Kalibrierschalter für Temperatur und Feuchtigkeit;

Benutzer senden:01 03 01 D 00 01 15 F0die Kalibrierwerte der Temperatur;

Benutzerübertragung:01 06 01 1D00FA 98 73, Einstellung der Temperatur Benutzerkalibrierung Wert 250, sowohl +2,5 Grad; Benutzer senden:01 06 01D 80 6E F8 1C Einstellung der Temperatur Benutzer Kalibrierwert - 110, sowohl -1,1 Grad.

4.3 Computer lesen RS485 - Daten

Über den „485 - seriellen" Adapter kann das Sensormodul an den Computer angeschlossen werden, um die Kommunikation zu erfassen und Daten zu überprüfen. Die Computerseite kann die Daten direkt mit ModBus-Testwerkzeugen (z. B. ShortBus Modbus Scanner) lesen; Sie können auch Standard-Serielle wie "Serial Port Assistant" verwenden, um Daten zu erhalten, indem Sie eine Abfrage nachricht senden.

V. Verschiedene Berechnungsmethoden für Sensordaten

. Kohlendioxid (ppm) = CO2_H * 256 + CO2_L

. TVOC (ug / m3) = TVOC_H * 256 + TVOC_L

CH2O (ug / m 3) = CH2O_H * 256 + CH2O_L

. PM2, 5 (ug / m3) = PM2.5_H * 256 + PM2.5_L

. PM10 (ug / m3) = PM10_H * 256 + PM10_L

PM1,0 (ug / m3) = PM01_H * 256 + PM01_L

. Beleuchtung (Lux) = Lux_H * 256 + Lux_L

Geräusch (dB) = dB_H * 256 + dB_L

. Temperatur und Feuchtigkeit von der Schnittstelle (100 - mal der tatsächlichen Daten):

. Positive Temperatur (°C) = (Temperatur_H * 256 + Temperatur_L) / 100, z. B.: T = (0x09d0) / 10 = 2512 / 100 = 25,12 °C

. 负温度 (℃)

方法 1:直接转为有符号的 int 类型即可,例如: T = 0xfc83/10 = -893/100 = -8.93℃

Methode 2: Wenn es größer ist als 0x7fff (32767)

ist es eine negative Zahl T = (0xfc83 - 65536) / 10 = (64643 - 65536) / 10 = -893 / 100 = -8,93 ° C

Luftfeuchtigkeit (% RH) = (Humidity_H * 256 + Humidity_L) / 100

. Luftdruck (Pa) = Pa_byte [3] * 224 + Pa_byte [2] * 216 + Pa_byte [1] * 28 + Pa_byte [0]

. Die Luftdruck-Einheit ist Pa, theoretisch, je 9 Meter Höhe erhöht, der Atmosphärendruck um 100 Pa sinkt. Während der Standard-Atmosphärendruck auf dem Meeresspiegel 101.325 Pa beträgt, können Sie die ungefähre Höhe (Altitude) basierend auf dem Luftdruck (Pa) mit der folgenden Formel berechnen:

Die Atmosphärendruck-Einheit ist Pa, theoretisch, je 9 Meter höherer Höhe, der Atmosphärendruck um 100 Pa sinkt. Während der Standard-Atmosphärendruck auf dem Meeresspiegel 101.325 Pa beträgt, können Sie die ungefähre Höhe (Altitude) basierend auf dem Luftdruck (Pa) mit der folgenden Formel berechnen:

1, Vereinfachte Höhe-Formel = (101325 - Pa) / 100 * 9

Es gibt viele Faktoren, die den Luftdruck beeinflussen (z. B. Temperaturen) neben der Höhe, und die folgende Formel ist relativ präziser, insbesondere in hohen Höhe:

2, Kalibrierte Höhe-Formel = 44330 *(1 - (Pa/101325) 0,1903)

Beispiel: Wenn der gemessene Luftdruck 99,882 Pa beträgt, werden die beiden Formeln die Höhe berechnet:

Vereinfachte Höhe = (101325 - 99882) / 100 * 9 = 129.8 m

Kalibrierte Version Höhe = 44330 * (1 - (99882 / 101325) 0,1903) = 120,84 m

VI. Hinweis

Erster Einschalt benötigt mehr als 3 Minuten Vorwärmen

Die Installationsposition des Sensors sollte 15 ~ 20 cm höher als der Boden sein, sonst kann es Staub auf dem Boden geben, Schmutz und andere große Staubpartikel und sogar Flock-Verunreinigung führen zu Ventilator-Windung, wird empfohlen, die Ausrüstung zu verwenden, um eine angemessene Vorfiltration zu behandeln.

. Dieses Produkt ist ein Präzisionsgerät, öffnen Sie bitte nicht das Gehäuse, normaler Betrieb ist nicht erforderlich, um die innere Situation des Geräts zu verstehen. Wenn das Gerät beschädigt ist, muss es von Fachleuten repariert und repariert werden, vor der Reparatur und Reparatur bitte bestätigen Sie, dass die externe Stromversorgung abgeschaltet ist.

. Die Sensordaten gewährleisten die Konsistenz zwischen den einzelnen Herstellern und werden nicht mit Testgeräten oder Daten von Drittanbietern als Vergleichsstandard verwendet. Wenn der Benutzer erwarten, dass das endgültige Messergebnis mit einem Testgerät von Drittanbietern übereinstimmt, kann der Benutzer die Kalibrierung der Daten anpassen, basierend auf den tatsächlichen Erfassungsergebnissen.

. Dieser Sensor ist für gewöhnliche Innenräume geeignet, wie Benutzergeräte in der folgenden tatsächlichen Umgebung verwendet werden, kann der Sensor aufgrund von übermäßigen Staub, Öl und Wassereintritt zu einer Rücknahme der Datenkonsistenz führen. Zum Beispiel: Staubkonzentration im ganzen Jahr größer als 300 μ g / Kubikmeter Zeit mehr als 50%, oder größer als 500 μ g / Kubikmeter Zeit mehr als 20%; Ölrauch Umgebung; hohe Wassernebel Umgebung; Außenbereich usw.

VII. Sensormodul Karte

位Sensormodul
0x01Beleuchtungsstärke
0x02Temperatur Luftdruck
0x04Staub
0x08Luftqualität
0x10Lärm

VIII. CRC-Check - Berechnungsmethode

CRC Code und Beispiele können Sie hier lesen: https://github.com/sunoshiba1975 / CRCTool

Funktionsfunktionen: CRC-Prüffunktion, CRC-Generierung

Beschreibung des Arguments: pushMsg: Eine Reihe von Arrays, die überprüft werden müssen

usDataLen: Die Länge der erforderlichen Daten

Zurückgabe: CRC ist unsigned int16 Typ, wobei die hohen Bytes vor dem hohen und die niedrigen Bytes nach dem hohen Bytes liegen.

/*CRC verify high position*/ 
const unsigned char auchCRCHi[] = { 
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 }; 
/* CRC verify low position*/ 
const unsigned char auchCRCLo[] = { 
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 
0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 
0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 
0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 
0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 
0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 }; 
/*CRC check*/ 
uint16_t CRC16_Check(const uint8_t *pushMsg, uint8_t usDataLen)
{
 uint8_t uchCRCHi = 0xff;//high CRC init
 uint8_t uchCRCLo = 0xff;//low CRC init
 uint8_t uIndex; //CRC index in loop
while(usDataLen--) {
uIndex = uchCRCLo^ *pushMsg++;//cal CRC 
uchCRCLo = uchCRCHi^ auchCRCHi[uIndex]; 
uchCRCHi = auchCRCLo[uIndex]; 
} 
return((uint16_t)uchCRCHi << 8 | uchCRCLo); 
}
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.