
1. Kommunikationsabkommen
Dieses Laufwerk verwendet MODBUS-RTU (National Standard GB / T19582 - 2008) Kommunikationsprotokoll zur Kommunikation, unterstützt eine Master-Station, um mehrere Slave-Stationen (dh Laufwerke) zu steuern, unterstützt bis zu 255 Slave-Stationen, unterstützt die Kommunikationsübertragung (Slave-Station - Adresse ist 0 als Broadcast-Frame), Master-Station kann ein Chip-Computer, PLC oder PC sein.
1.1 Kommunikationsparameter
Standard-Kommunikationsparameter:
- > Die Baudrate ist auf 9600 bps festgelegt.
- >
- > Überprüfen Sie auf "Keine +1 Stopp-Bits".
- > Die Adresse von der Station ist auf 1 festgelegt. Benutzerdefinierte Kommunikationsparameter:
- > Die Baudrate ist konfigurierbar im Bereich von 9600 - 115200bps.
- >
- > Die Prüfmethoden können als „G偶el + 1 Stoppbit", „Geldig + 1 Stoppbit" und „Kein + 2 Stoppbit" konfiguriert werden.
- > Von der Station kann der Bereich 1 bis 255 festgelegt werden.
Wenn die Daten-Frame - Kommunikation unterbrochen ist mehr als 4 Byte Packing-Zeit als Frame-Empfang - Timeout entschieden. Wenn ein Frame-Timeout auftritt, werden die zuvor empfangenen Daten als ungültig angesehen.
1.2 MODBUS-RTU - Frame-Format
Dieses Treiber unterstützt die MODBUS-Funktionscodes 0x03 (Lese-Halt - Register), 0x06 (Schreiben eines einzelnen Registers) und 0x10 (Schreiben mehrerer Registers).
1.2.1 0x03 Lesen des Haltregisters
Hauptbahnhof übertragen:
| Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| Inhalte | ADR | 0x03 | Startregister Hohe Byte | Startregister Niedrig Byte | Anzahl der Register Hohe Byte | Anzahl der Register Niedrig Byte | CRC niedrige Byte | CRC High Byte |
1st Byte ADR: Adresscode der Slave Station (= 001 ~ 254).
Byte 2 0x03: Lesen Sie den Funktionscode des Registerwerts.
Byte 3 und 4: Die Anfangsadresse des zu lesen Registers.
Byte 5, 6: Anzahl der zu lesen Register.
Byte 7 und 8: CRC16 - Prüfcode von Byte 1 bis 6.
Zurück vom Bahnhof:
| Bytes | 1 | 2 | 3 | 4 、5 | 6 、7 | … | M - 1、M | M + 1 | M + 2 |
| Inhalt | ADR | 0x03 | Gesamtzahl der Bytes | Registerdaten 1 | Datenregister 2 | … | Registerdaten M | CRC Low Byte | CRC High Byte |
1st Byte ADR: Slave Station Adresscode (= 001 ~ 254).
Byte 2 0x03: Rückgabe des Lesen-Funktionscodes.
Byte 3: Die Gesamtzahl der Bytes von 4 bis M (einschließlich 4 und M).
4 bis M-Byte: Registerdaten.
M + 1 und M + 2 Bytes: CRC16 - Prüfcode von Bytes 1 bis M.
Rückschaltung von der Station, wenn ein Fehler von der Station empfangen wird:
| Byte | 1 | 2 | 3 | 4 | 5 |
| Inhalt | ADR | 0x83 | Ausnahmecode | CRC Low Byte | CRC High Byte |
Byte 1 Byte 2 Byte 3
ADR: Adresscode der Slave-Station (= 001 ~ 254).
0x83: Fehler beim Lesen des Registerwertes.
Ausnahmecode: Siehe Tabelle1.1。
Bytes 4 und 5: CRC16 - Prüfcode von Bytes 1 bis 3.
1.2.2 0x06 Schreiben eines einzelnen Registers
vom Master gesendet:
| Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| Inhalt | ADR | 0x06 | Register High Byte Adresse | Register Low Byte Adresse | Daten High Byte | Daten Low Byte | CRC-Code Low Byte | CRC-Code High Byte |
Rückschaltung von der Station, wenn der Empfang von der Station korrekt ist:
| Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| Inhalt | ADR | 0x06 | Register Hohe Byte-Adresse | Register Low Byte-Adresse | Daten Hohe Byte | Daten Low Byte | CRC-Code niedrig | CRC-Code High Byte |
Rückschaltung von der Station, wenn ein Fehler von der Station empfangen wird:
| Byte | 1 | 2 | 3 | 4 | 5 |
| Inhalte | ADR | 0x86 | Ausnahmecode | CRC Low Byte | CRC hohe Byte |
1st Byte 2nd Byte 3rd Byte
ADR: Adresscode der Slave Station (= 001 ~ 254).
0x86: Fehler beim Schreiben von Registerwerten.
Ausnahmecode: Siehe Tabelle1.1。
Bytes 4 und 5: CRC16 - Checkcode von Bytes 1 bis 3.
1.2.3 0x10 Schreiben von mehreren Registerwerten
Senden von Master:
| Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| Inhalt | ADR | 0x10 | Startregister Hohe Byte-Adresse | Startregister Niedrig Byte-Adresse | Registeranzahl Hohe Byte | Registeranzahl Niedrig Byte | Gesamtzahl von Datenbytes |
| Byte | 8,9 | 10,11 | N, N + 1 | N + 2 | N + 3 |
| Inhalt | Registerdaten 1 | Datenregister 2 | Registerdaten M | CRC-Code Low Byte | CRC-Code High Byte |
Rücksendung von der Station, wenn der Empfang von der Station korrekt ist:
| Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| Inhalte | ADR | 0x10 | Register hohe Byte-Adresse | Register Low Byte Adresse | Registeranzahl High Byte | Registeranzahl Low Byte | CRC-Code Low Byte | CRC-Code High Byte |
Bei Erhalt eines Fehlers von der Station Rückschaltung von der Station:
| Byte | 1 | 2 | 3 | 4 | 5 |
| Inhalt | ADR | 0x90 | Ausnahmecode | CRC Low Byte | CRC High Byte |
1st Byte 2nd Byte 3rd Byte
ADR: 0x90: Ausnahmecode:
Slave-Station - Adresscode (= 001 ~ 254).
Fehler beim Schreiben von Registerwerten.
Byte 4 und 5: CRC16 - Prüfcode von Byte 1 bis 3.
1.2.4 Ausnahmefehler
MODBUS Ausnahmecode: wie in Tabelle1.1 所示
Tabelle 1. 1 MODBUS-Ausnahmecode - Tabelle
| Ausnahmecode | Bedeutung |
| 0x01 | Ungültiger Funktionscode |
| 0x02 | Ungültiger Datenadresse |
| 0x03 | Ungültiger Datenwert |
| 0x04 | Ausfall aus der Station |
| 0x05 | Die Anforderung wurde bestätigt, aber die Verarbeitung der Anforderung dauerte länger |
| 0x06 | Das Gerät von der Station ist beschäftigt |
| 0x08 | Speichern von Parity-Fehlern |
| 0x0A | Nicht verfügbares Gateway |
| 0x0B | Das Gateway-Zielgerät hat keine Antwort gegeben |
2. Standard-Register - Definitionen
2.1 Geräteschreibungsinformationsregister
Geräteschreibungsinformationsregister werden in Tabelle2.1 所zeigen.
Tabelle 2. 1 Gerät Beschreibung Informationen Register
| Registeradresse | Beschreibung | Wertebereich | Unterstützt Funktionscode | Anmerkung |
| 0x0000 (0) | Gerätekennummer | 0x03 | Jedes Modell hat eine entsprechende Geräte-Identifikationsnummer | |
| 0x0001 (1) | Geräteversion | 0x03 | Das hohe Byte ist die Hauptversionsnummer, das niedrigste Byte ist die Unterversionsnummer | |
| 0x0002 (2) | Maximaler Strom | 0x03 | Der Wert multipliziert mit 0,01 zum Stromwert, in Einheit A |
| 0x0003 ~ 0x0007 (3) ~ (7) | Reservation | 0x03 |
Echtzeit-Zustandregister wie in der Tabelle2.2 所gezeigt.
Tabelle 2.2 Echtzeit-Statusregister
| Register-Adresse | Beschreibung | Wertebereich | Unterstützt Funktionscode | Anmerkung |
| 0x0008 (8) | Echtzeitstrom | 0 ~ 65535 | 0x03 | Der Wert multipliziert mit 0,01 für den Stromwert, in Einheit A |
| 0x0009 (9) | Echtzeitgeschwindigkeits-Halbwort | -110000 ~ 110000 | 0x03 | Echtzeitgeschwindigkeits-Wert, Einheit RPM |
| 0x000A (10) | Echtzeitgeschwindigkeits-Niedriges Halbwort | |||
| 0x000B (11) | Fehlerzustand | 0 - 13 | 0x03 | 0 Kein Fehler 1: Blockierung Ausfall 2: Phasenreihenfolge nicht gelernt 3: Phasenausfall 4: Phasenleitung Überstrom 5: Busbahnüberstrom 6: Überspannung 7: zu niedrige Spannung, 8: Phasenlernen Ausfall 9: Überlastung 10: 485 Kommunikationsunterbrechung 11: CAN-Kommunikationsunterbrechung 12: Busbahnspannung zu hoch 13: Temperatur zu hoch, 14: Induktionsstartsfehler 15: Phasenstrom-Anomalie |
| 0x000C (12) | interne Potentiometerspannung | 0~3300 | 0x03 | Einheit mV |
| 0x000D (13) | Externe Signalspannung | 0 ~ 10000 | 0x03 | Einheit mV |
| 0x000E (14) | Reservierung | |||
| 0x000F (15) | Reservierung | |||
| 0x00010 (16) | Aktivierungsniveau | 0,1 | 0x03 | 0: Niedriges Level 1: Hoches Level |
| 0x0011 (17) | Bremspegel | 0,1 | 0x03 | 0: Low Level 1: High Level |
| 0x0012 (18) | Richtungspegel | 0,1 | 0x03 | 0: Niedrig 1: Hoch |
| 0x0013 (19) | 0x07,0x09,0x19,0x01,0x11,0x0a,0x1a,0x02,0x12,0x0b,0x1b,0x03,0x0c,0x04,0x14,0x0d,0x1d,0x05,0x15,0x08,0x18,0x00,0x10, | 0x07,0x09,0x01,0 | 0x03 | 0 - 4 Bits von niedrig bis hoch definiert: 1 4 - bit bedeutet induktiv 0 oder induktiv 1,2 3 - bit bedeutet offene Schleife 0 oder geschlossene Schleife 1,3 0 - 2 - bit bedeutet Modus: Phasenreihenfolge Lernen (111), Kommunikationssteuerung (000), internen Potentiometer (001), Analog-Menge (010), PWM (011), Flugmodell PWM (100), Rocker (101) 4 Wert Bedeutung: 0x07: Phasenreihenfolge Lernen, 0x09: induktiv / geschlossene Schleife / internen Potentiometer Steuerung, 0x19: Induktiv / geschlossene Schleife / interne Potentiometersteuerung, 0x01: Induktiv / offene Schleife / interne Potentiometersteuerung, 0x11: Induktiv / offene Schleife / interne Potentiometersteuerung, 0x0a: Induktiv / geschlossene Schleife / analoge Steuerung, 0x1a: Induktiv / geschlossene Schleife / analoge Steuerung, 0x02: Induktiv / offene Schleife / analoge Steuerung, 0x12: Induktiv / offene Schleife / analoge Steuerung, 0x0b: Induktiv / geschlossene Schleife / PWM-Steuerung, 0x1b: Induktiv / geschlossene Schleife / PWM-Steuerung, 0x03: Induktiv / offene Schleife / PWM-Steuerung, 0x13: Induktiv / offene Schleife / PWM-Steuerung, 0x0c: Induktiv / geschlossene Schleife / Flugmodell-PWM - Steuerung, 0x1c: Induktiv / geschlossene Schleife / Flugmodell-PWM - Steuerung, 0x04: Induktiv / offene Schleife / Flugmodell-PWM - Steuerung, 0x14: Induktiv / offene Schleife / Flugmodell-PWM - Steuerung, 0x0d: Induktiv / geschlossene Schleife / Rocker-Steuerung, 0x1d: Induktiv / geschlossene Schleife / Rocker-Steuerung, 0x05: Induktiv / offene Schleife / Rocker-Steuerung, 0x15: Induktiv / offene Schleife / Rockersteuerung, 0x08: Induktiv / geschlossene Schleife / Kommunikationssteuerung, 0x18: Induktiv / geschlossene Schleife / Kommunikationssteuerung, 0x00: Induktiv / offene Schleife / Kommunikationssteuerung, 0x10: Induktiv / offene Schleife / Kommunikationssteuerung, |
| 0x0014 (20) | Auslastung | 0 ~ 1000 | 0x03 | Multiplizieren Sie den Wert mit 0,1% für den PWM-Prozentsatz in ‰ |
| 0x0015 (21) | Eingabe des PWM-Dastsatz | 0 ~ 1000 | 0x03 | Multiplikation mit 0,1% für den Eingangs-PWM - Arbeitsverlauf in ‰ |
| 0x0016 (22) | Spannung | 0 ~ 100 | 0x03 | Stromversorgungsspannung in V |
| 0x0017 (23) | Temperatur | -200 ~ 200 | 0x03 | Platttemperatur in ° C |
| 0x0018 (24) | Reservierung |
2.3 Motorsteuerungsregister
MotorsteuerungsregisterWie Tabelle 2.3 所dargestellt.
Tabelle 2.3 Motorsteuerungsregister
| Registeradresse | Beschreibung | Wertebereich | Unterstützter Funktionscode | Anmerkung |
| 0x0020 (32) | Stopp | 0, 1, 2 | 0x03 0x06 | 0: Normaler Stopp 1: Notbremse 2: Freier Stopp |
| 0x0021 (33) | Einstellung des oberen Halbwortes für den Zielparameter | Schlossene Schleife:- Höchste Drehzahl ~ Höchste Drehzahl Öffnungsschleife: -1000 ~ 1000 | 0x03 0x06 0x10 | Wenn die Geschwindigkeitssteuerung geschlossene Schleife ist, repräsentiert die Geschwindigkeit, wird die Einheit in RPM verwendet; wenn die Geschwindigkeitssteuerung offene Schleife ist, repräsentiert PWM, wird der Wert mit 0,1% multipliziert, um den Prozentsatz PWM zu erhalten. Positive Zahlen stellen eine Vorwärtsdrehung dar, negative Zahlen stellen eine Umkehrung dar, 0 normaler Stopp |
| 0x0022 (34) | Setzen Sie das niedrige Halbwort für den Zielparameter | |||
| 0x0023 (35) | Teststeuerung | 0, 1 | 0x03 0x06 | 0: Test abbrechen, 1: Phasenreihenfolge lernen |
| 0x0024 (36) | Ausgangsteuerung | 0, 1 | 0x03 0x06 | 0: Ausgang niedrig 1: Ausgang hoch |
| 0x0025 ~ 0x27 (37) ~ (39) | Reserviert |
2.4 Motorparameter Konfigurationsregister
Das Motorparameter Konfigurationsregister ist in Tabelle2.4 所dargestellt.
Tabelle 2.4 Motorparameter Konfigurationsregister
| Register-Adresse | Beschreibung | Wertebereich | Unterstützt Funktionscode | Bemerkungen |
| 0x0028 (40) | Nennstrom des Motors | 0 ~ 1500 | 0x03 0x06 0x10 | Zahl multipliziert mit 0,01 für den Stromwert in der Einheit A |
| 0x0029 (41) | Höchstgeschwindigkeit des Motors. | 0~110000 | 0x03 0x06 0x10 | Einheit in RPM |
| 0x002A (42) | Niedriges Halbwort der maximalen Drehzahl des Motors | |||
| 0x002B (43) | Höchstes Halbwort der minimalen Drehzahl des Motors | 0 - 110000 | 0x03 0x06 0x10 | Einheit in RPM, Allgemeine Einstellung unter 200 RPM |
| 0x002C (44) | Mindestdrehzahl des Motors | |||
| 0x002D (45) | Motorpollogarzahl | 0 ~ 65535 | 0x03 0x06 0x10 | Logarithmus der Nord-Süd-Magnetpole des Stators, die Hälfte der Magnetpole ist |
| 0x002E (46) | Motor 1, Zwei-Phasen - Sequenzdaten | High Byte 0 ~ 6 Low Byte 0 ~ 6 | 0x03 0x06 0x10 | Low Byte 1 Phase High Byte 2 Phase |
| 0x002F (47) | Motor 3, 4 Phasen-Sequenzdaten | Hoch-Byte von 0 bis 6 niedrig-Byte von 0 bis 6 | 0x03 0x06 0x10 | 0x03 0x06 0x10 |
| 0x03 0x06 0 6 - Phasen-Sequenzdaten | Elektromotor 4, 6 Phasen-Sequenzdaten | Hohe Byte 0 bis 6 Low Byte 0 bis 6 | 0x03 0x06 0x10 | Low Byte 4 - Phasen Hohe Byte 6 - Phasen |
| 0x0031 (49) | Phase-Sequential - Lernzustand | 0,1 | 0x03 0x06 0x10 | 0x0032 (50) |
| 0x0032 (50) | Größe der unempfindlichen Startlasten | 0~4 | 0x03 0x06 0x10 | 0: Leichte Last 1: mittlere Last 2: schwere Last 3: geringe Trägheit Last 4: Große Trägheitslast |
| 0x0033 (51) | Geschwindigkeitsbeschleunigung Geschwindigkeitsbeschleunigung | 100 ~ Maximalgeschwindigkeit | 0x03 0x06 0x10 | Einheit RPM / S |
| 0x0034 (52) | Geschlossene Geschwindigkeit Verlangsamung Beschleunigung | 100 ~ maximale Geschwindigkeit | 0x03 0x06 0x10 | Einheit RPM / S |
| 0x0035 (53) | Geschwindigkeit Beschleunigung Beschleunigung | 4 ~ 500 | 0x03 0x06 0x10 | Einheiten% / S |
| 0x0036 (54) | Öffnen-Schleife - Geschwindigkeit Verlangsamung Beschleunigung | 4 - 500 | 0x03 0x06 0x10 | Einheiten% / S |
| 0x0037 (55) | Stoppmodus | 0, 1, 2 | 0x03 0x06 0x10 | 0: Normalstop 1: Notbremse 2: Freie Stopp |
| 0x0038 (56) | Automatischer Umschaltmodus | 0, 1, 2 | 0x03 0x06 0x10 | 0: Normaler Wechsel zu 1: Dringlich wechseln! |
| 0x0039 (57) | Stillstand-Phase - Sperrstrom | 0 ~ 1500 | 0x03 0x06 0x10 | 0: Nicht-Stillstand-Phase - Sperr - Sonstige Werte: Multiplizieren Sie den Wert mit 0,01 für den Stromwert in der Einheit A |
| 0x003A ~ 0x3F (58) ~ (63) | Reserviert |
2.5 Systemparameter Konfigurationsregister
Das Konfigurationsregister für Systemparameterwird in Tabelle2.5 所dargestellt.
Tabelle 2.5 Systemparameter Konfigurationsregister
| Register-Adresse | Beschreibung | Wertebereich | Unterstützt Funktionscode | Bemerkungen |
| 0x0040 (64) | Blockierungsausfallzeit | 0 ~ 66635 | 0x03 0x06 0x10 | Einheit in mS |
| 0x0041 (65) | Schutz-Aus - Strom | 0~4200 | 0x03 0x06 0x10 | Zahl mit 0,01 für den Stromwert in Einheit A |
| 0x0042 (66) | interner Potentiometer-Steuerungsschwelle maximal | 0 - 3300 | 0x03 0x06 0x10 | Einheit mV |
| 0x0043 (67) | Mindesteuerungsschwelle für internes Potentiometer | 0 ~ 3300 | 0x03 0x06 0x10 | Einheit mV |
| 0x0044 (68) | Maximale Steuerungsschwelle für externe Eingabe | 0 ~ 10000 | 0x03 0x06 0x10 | Einheiten mV |
| 0x0045 (69) | Minimum-Schwelle für externe Eingabesteuerung | 0 bis 10000 | 0x03 0x06 0x10 | Einheiten mV |
| 0x0046 (70) | Maximaler Schutzspannungsschwellenwert (Überspannungsschutzspannung) | 8 ~ 56 | 0x03 0x06 0x10 | Schutzspannungsbereich, Einheit: V |
| 0x0047 (71) | Mindestschwellenwert für Schutzspannung (Unterspannungsschutzspannung) | 8 ~ 56 | 0x03 0x06 0x10 | |
| 0x0048 (72) | Spannungsschutz Einstellungen | 0,1 | 0x03 0x06 0x10 | 0: Nicht geschützt1: Spannungsschutz |
| 0x0049(73) | Ausgabe-Typ | 0,1,2,3,4,5 | 0x03 0x06 0x10 | 0: Keine Ausgabe (d.h. Ausgabe niedrig) 1: Langer Ausgabe 2: Alarmsignal Ausgabe 3: FG-Feedback - Signal Ausgabe 4: Ausfallsignal 5: Kommunikationssteuerung |
2.6 PID-Parameter - Konfigurationsregister
Closed-Loop - Steuerung PID-Parameter - KonfigurationsregisterWie in Tabelle2.6 所dargestellt.
Tabelle 2.6 Konfigurationsregister für PID-Parameter für geschlossene Schleifsteuerung
| Registeradresse | Beschreibung | Wertebereich | Unterstützter Funktionscode | Anmerkung |
| 0x004A (74) | Geschwindigkeit geschlossene Schleife P-Koeffizient hohes Halbwort | Empfehlung 1 ~ 327680 | 0x03 0x10 | Zahlenwert durch 32768 geteilt als tatsächlicher Wert |
| 0x004B (75) | Geschwindigkeit geschlossene Schleife P-Koeffizient niedriges Halbwort | |||
| 0x004C (76) | Geschwindigkeit geschlossene Schleife I-Koeffizient hohes Halbwort | Empfehlungen 1 ~ 326780 | 0x03 0x10 | Zahlenwert durch 32768 geteilt. |
| 0x004D (77) | Geschwindigkeit geschlossene Schleife I-Koeffizient niedriges Halbwort | |||
| 0x004E (78) | Geschwindigkeit geschlossene Schleife D-Faktor hohes Halbwort | Empfehlung 1 ~ 326780 | 0x03 0x10 | Zahlenwert durch 32768 geteilt. |
| 0x004F (79) | Geschwindigkeit geschlossene Schleife D-Koeffizient niedriges Halbwort |
2.7 Kommunikationsparameter Konfigurationsregister
KommunikationParameter Konfigurationsregister sind in Tabelle2.6所dargestellt.
Tabelle 2.7 Kommunikationsparameter Konfigurationsregister
| Register-Adresse | Beschreibung | Wertebereich | Unterstützter Funktionscode | Anmerkung |
| 0x0050 (80) | 485 Kommunikationsunterbrechung Bremszeit | 0 ~ 66635 | 0x03 0x060x10 | Einheit: S |
| 0x0051 (81) | 485 Kommunikationsgerätadresse | 0 ~ 255 | 0x03 0x060x10 | Modbus-Sklavengerätadresse |
| 0x0052 (82) | 485 Serial-Port - Kommunikations-Baud - Rate | 0~4 | 0x03 0x060x10 | 0: 96001: 19: 2002: 384003: 576004: 115200 Einheiten in bps |
| 0x0053 (83) | 485 Kommunikations-Serial - Port-Prüfungsmethode | 0 - 3 | 0x03 0x060x10 | 0: Kein + Stop-Bit 1: Paar + 1 Stop-Bit 2: Ungewöhnlich + 1 Stop-Bit 3: Kein + 2 Stop-Bit |
| 0x0054 (84) ~ 0x0059 (89) | Reservierung |
3. Berechnung von CRC16
Die CRC-Generierungsfunktion in der C-Sprache wird im- Programm 3.1dargestellt. Alle möglichen CRC-Werte sind in zwei Arrays vorinstalliert, die bei der Berechnung des Nachrichteninhalts einfach indiziert werden können. Ein Array enthält alle Bereiche16 - BitCRC Alles im Bereich 256 Ein weiteres Array enthält Werte für niedrigere Byte. Diese Art und Weise, wie der Index auf CRCs zugreift, bietet eine schnellerere Möglichkeit, als ein neues CRC für jedes neue Zeichen im Nachrichtenpuffer zu berechnen.
Hinweis: Diese Funktion führt intern den Austausch von hohen / niedrigen CRC-Bytes durch. Diese Funktion gibt den bereits ausgetauschten CRC-Wert zurück. Das bedeutet, dass der CRC-Wert, der von dieser Funktion zurückgegeben wird, direkt in die Nachricht zum Senden gelegt werden kann.
Die Funktion verwendet zwei Parameter:
unsigned char * puchMsg; zeigt auf einen Zeiger, der den Puffer für die binäre Datennachricht enthält, die CRC generiert.
unsigned short usDataLen; Anzahl der Bytes im Nachrichtenpuffer.
Hinweis: Die folgenden CRC16 - Generatoren wurden aus dem < MODBUS over Serial Line Specification and Implementation Guide > entnommen.
Veröffentlicht in V1.02.
Prozess 3.1 CRC16Erzeugerfunktionsliste
/ * CRC-Werte für die oberen Bytes * /
static unsigned char auch CRCHi[] = {
0x01, 0x01, 0x 0x41, 0x41, 0x40, 0x80, 0x41, 0x40, 0x40, 0x41, 0x40, 0x40, 0x41, 0x40, 0x80, 0x41, 0x41, 0x40, 0x41, 0x41, 0x40, 0x41, 0x41, 0x 0x01, 0x01, 0x 0x81, 0x81, 0x40, 0x81, 0x40, 0x81, 0x81, 0x40, 0x81, 0x40, 0x81, 0x81, 0x40, 0x81, 0x40, 0x81, 0x81, 0x40, 0x81, 0x81, 0x40, 0x81, 0x81, 0x40, 0x81, 0x81, 0x 0x01, 0x01, 0x 0x80, 0x41, 0x80, 0x41, 0x40, 0x80, 0x41, 0x40, 0x40, 0x81, 0x40, 0x80, 0x41, 0x40, 0x80, 0x41, 0x41, 0x40, 0x41, 0x40, 0x41, 0x41, 0x40, 0x41, 0x41, 0x 0x01, 0x01, 0x 0x81, 0x81, 0x40, 0x81, 0x40, 0x81, 0x81, 0x40, 0x81, 0x40, 0x80, 0x41, 0x40, 0x80, 0x41, 0x41, 0x40, 0x80, 0x41, 0x41, 0x40, 0x40, 0x41, 0x41, 0x40, 0x40, 0x41, 0x41, 0x40, 0x41, 0x41, 0x 0x01, 0x01,
0x40
{}
/ * CRC-Wert für niedrige Bytes * /
statische Char auchCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
0x04, 0x0CC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
0x1D, 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, 0xF7,
0x37, 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, 0xA1, 0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 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, 0xB
0x77, 0xB7, 0xB7, 0x Siehe auch: „Siehe, Siehe, Siehe,
Siehe auch: 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C,
0x5D, 0x9D, 0x5F, 0x9E, 0x5E, 0x5A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x88, 0x48, 0x49, 0x4B, 0x8B, 0x8A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4C, 0x8C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
0x40
};
unsignierte Kurzform CRC16(puchmsg, usDataLen) Die / * - Funktion gibt CRC * /
unsigned char * puchMsg als unsigned short zurück. / * Nachricht für die Berechnung von CRC * /
| unsigned short usDataLen | / * Anzahl der Bytes in der Nachricht * / |
| { | |
| unsignierte... CRCHi = 0xFF; | / * hohe Initialisierung von CRC * / |
unsignierte... CRCLo = 0xFF; / * CRC-Initialisierung mit niedrigen Byten * /
unsigned uIndex; / * CRC-Abfragetabellenindex * /
während (usDataLen - -)
{
/ * Vollständige den gesamten Nachrichtenpuffer * /
uIndex = uchCRCLo ^ * puchMsg++; / * CRC berechnet * /
|
uchCRCHi = auchCRCLo[uIndex];
}
return (uchCRCHi < 8| (d.h. mit dem Schlagwort);
}
Antwort veröffentlichen