
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 | |||
| Sensordaten | Messungsauflösung | Messbereich | Messgenauigkeit |
| Kohlendioxid eCO2 | 1ppm | 400 - 60.000ppm | ± 30ppm |
| TVOC | 1ug / m3 | 0 - 60.000ug / m3 | ± 50ug / m3 |
| Formaldehyd CH2O | 1 μ g / m3 | 0 ~ 1.000 μ g / m3 | ± 25% |
| PM2.5 | 1 μ g / m3 | 0 ~ 1.000 μ g / m3 | ± 10% |
| PM10 | 1ug / m3 | 0 ~ 1000ug / m3 | ± 10% |
| PM1.0 | 1ug / m3 | 0 ~ 1000ug / m3 | ± 10% |
| Temperatur | 0,01 ° C | -40 ~ 85 ° C | ± 0,2 ° C |
| Luftfeuchtigkeit | 0.01% | 0 ~ 100% | ± 1% RH |
| Luftdruck | 1 Pa | 30.000 bis 110.000 Pa | ± 12 Pa |
| Beleuchtungsstärke | 1 Lux | 0 bis 60.000 Lux | ± 5% |
| Rauschen | 1 dB | 30 ~ 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

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":
| Seriennummer | Name | Hinweis |
| RS485_A | Gelb | RS485_A |
| RS485_B | Grün | RS485_B |
| DC + | Rot | Standard 5V Gleichstromversorgung, spezielle Spannung angepasst |
| GND | Schwarz | Erdleitung |
2) „2 Leitungen + USB-Anschluss" Schnittstelle Typ:
| Seriennummer | Name | Beschreibung |
| A | Rot (A) | RS485_A |
| B | Schwarz (B) | RS485_B |
| U | Micro USB | 5V 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-Nummer | Daten | Beschreibung |
| 0 | 0xFE | Broadcast-Adresse |
| 1 | 0x11 | Meldung von Slave-Adresse Funktionscode |
| 2 | 0x00 | Fix |
| 3 | 0x00 | Fix |
| 4 | 0x00 | Fixed |
| 5 | 0x01 | Fixed |
| 67 | CRC_LCRC_H | CRC-Check |
Antwortnachrichtenformat:
| Byte-Nummer | Daten | Beschreibung |
| 0 | 0x01 | Slave-Adresse |
| 1 | 0x11 | Meldung von Slave-Adresse Funktionscode |
| 2 | 0x02 | Anzahl der Bytes |
| 3 | version | Firmware-Version |
| 4 | address | Aktuelle Adresse |
| 56 | CRC_LCRC_H | CRC-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:
| Bytesnummer | Daten | Beschreibung |
| 0 | address | Aktuelle Adresse |
| 1 | 0x06 | Funktionscode |
| 2 | 0x00 | Fixed |
| 3 | 0x00 | Fix |
| 4 | 0x00 | Reserviert |
| 5 | neue Adresse | Neue Adresse |
| 67 | CRC_L CRC_H | CRC-Prüfungen |
Antwortnachrichtenformat:
| Bytenummer | Daten | Beschreibung |
| 0 | address | Adresse vor der Änderung |
| 1 | 0x06 | Funktionscode |
| 2 | 0x00 | Fixed |
| 3 | 0x00 | Fix |
| 4 | 0x00 | Reserviert |
| 5 | neue Adresse | Geänderte Adresse |
| 67 | CRC_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:
| Bytesnummer | Daten | Beschreibung |
| 0 | address | Aktuelle Adresse |
| 1 | 0x03 | Funktionscode |
| 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-Nummer | Daten | Beschreibung |
| 0 | address | Aktuelle Adresse |
| 1 | 0x03 | Funktionscode |
| 2 | NN*2 | Datenlänge |
| 3 | xx 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-Adresse | Sensordaten | Anzahl der besetzten Registers |
| 0x000000 | ECO2 | 1 |
| 0x0001 | TVOC | 1 |
| 0x0002 | CH2O | 1 |
| 0x0003 | PM2.5 | 1 |
| 0x0004 | Feuchtigkeit | 1 |
| 0x0005 | Temperatur | 1 |
| 0x0006 | PM10 | 1 |
| 0x0007 | PM1.0 | 1 |
| 0x0008 | Lichtstärke (Lux) | 1 |
| 0x0009 | MCU-Temperatur | 1 |
| 0x000A | Geräusch (dB) | 1 |
| 0x000B | Luftdruck (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:
| 00MM00NN | Lesbare Daten |
| 00000001 | zeigt an, dass CO2 - Daten von der Startadresse 0000 gelesen werden. |
| 00000002 | bedeutet, dass CO2 von der Startadresse 0000 gelesen wird, TVOC-Daten |
| ...... | ...... |
| 0000000D | bedeutet, 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 |
| 00010001 | zeigen das Lesen von TVOC-Daten von der Startadresse 0001 |
| 00010002 | zeigen das Lesen von TVOC, CH2O-Daten von der Startadresse 0001 |
| ...... | ...... |
| 00010007 | zeigen das Lesen von TVOC, CH2O, PM2,5, Feuchtigkeit, Temperatur von der Startadresse 0001 Grad, PM10, PM1.0 Daten |
| 0001000C | zeigt, TVOC, CH2O, PM2.5, Feuchtigkeit, Temperatur Grad, PM10, PM1.0, Beleuchtung, MCU-Temperatur, Rauschdaten von der Startadresse 0001 zu nehmen, Atmosphärische Druckdaten |
| 00020001 | für das Lesen von CH2O von Startadresse 0002 |
| 00020002 | für das Lesen von CH2O von Startadresse 0002, PM2.5 - Daten |
| ...... | ...... |
| 000B0001 | fü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:
| Bytenummer | Daten | Beschreibung |
| 0 | 0x01 | Nachrichtenkopf |
| 1 | 0x03 | Funktionscode |
| 2 | 0x1A | Datenlä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.
| Registeradresse | Länge (Bytes) | Systemparameter |
| 0x0100 | 4 | Sensorkonfiguration Bitmaps (Sensor Map) |
| 0x0110 | 2 | Byte 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" |
| 0x0111 | 2 | Byte 1 (vor): Sensornummer für spezielle Serienanschlussbildschirme benutzerdefinierter Indikatoren Byte 2: Lichtdurchlässigkeit (0 - 100), 0 bedeutet keine Abdeckung, 100 bedeutet keine Verluste |
| 0x0118 | 2 | CO2 - Kalibrierwert, int16 |
| 0x0119 | 2 | TVOC - Kalibrierwert, int16 |
| 0x011A | 2 | CH2O - Kalibrierwert, int16 |
| 0x011B | 2 | PM2.5 - Kalibrierwert, int16 |
| 0x011C | 2 | Feuchtigkeitskalibrierwert (100x), int16 |
| 0x011D | 2 | Temperaturkalibrierwert (100x), int16 |
| 0x011E | 2 | PM10 - Kalibrierwert, int16 |
| 0x011F. | 2 | PM1.0 Kalibrierung, int16 |
| 0x0120 | 2 | Lichtscheinungskalibrierung (Lux), int16 |
| 0x0121 | 2 | MCU-Temperaturkalibrierung, int16 |
| 0x0122 | 2 | Rauschen (dB) Kalibrierung, int16 |
| 0x0123 | 2 | Atmosphä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 |
| 0x01 | Beleuchtungsstärke |
| 0x02 | Temperatur Luftdruck |
| 0x04 | Staub |
| 0x08 | Luftqualität |
| 0x10 | Lä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);
}
Antwort veröffentlichen