Quelle: Modbus Chinesisches Netzwerk (modbus.cn) - führende Modbus Kommunikationsprotokoll Technologie-Community in China
Dieser Artikel: Schrittweise Lösung von Modbus-Kommunikationsproblemen: ein vollständiges Test-Handbuch von der physischen Schicht bis zur Anwendung · Autor: Modbus-Technikteam · Veröffentlicht am 2026 - 07 - 01
Modbus RS - 485: Was ist falsch? Dieser Artikel bietet von der physikalischen Ebene bis zur Anwendungsebene eine vollständige progressive Fehlerbehebungsmethode durch die Demonstration von echten Nachrichtenanalysen und Probetools. Schlagwörter: Modbus-Kommunikationsfehlersuche, RS - 485 - Fehlersuche, Modbus-Debugging - Methode, Modbus RTU reagiert nicht, CRC-Verifikation - Fehler.
In der industriellen Automatisierung ist Modbus-Kommunikationsfehler die größte Kopfschmerzen - nicht weil es kompliziert ist, sondern weil die Ausfallpunkte zu verteilt sind. Physikalische Schicht, Datenverbindungsschicht, Anwendungsschicht, jedes Problem in einer Verbindung, das Phänomen kann das gleiche sein:Master-Station sendet eine Anforderung, von der Station nicht zurückgeben。
Dieser Artikel lehrt Ihnen nicht die Grundlagen des Modbus-Protokolls. Ich nehme an, dass Sie bereits Modbus verwenden, dass das Problem "nicht funktioniert" ist und Sie eine Fehlerliste benötigen, die Sie befolgen können. Wir fangen von unten an und schauen auf eine Ebene.
Kernschlüsselwörter: Modbus-Kommunikations - Fehlersuche, RS - 485 - Fehlersuche, Modbus-RTU nicht reagiert, CRC-Verifikation Fehler. Weitere technische Modbus-Artikel finden Sie unter modbus.de.
Wie sieht ein typischer Ausfall aus?
Schauen Sie sich zuerst drei echte Szenarien an, und wenn Sie schon einmal ähnliche Szenarien erlebt haben, ist dieser Artikel für Sie gedacht.
Szenario 1: 16 Modbus-RTUs in einer Abwasserbehandlungsanlage, die an einem RS - 485 - Bus hängen. Jeden Tag um 15 Uhr pünktlich wird die Linie abgeschaltet und nach 10 Minuten automatisch wieder hergestellt. Drei Wochen nachgeprüft, fand ich schließlich heraus, dass der PV-Wechselrichter im Pumpenraum nebenan jeden Tag um drei Uhr nachmittags gestartet wurde, EMI-Interferenzen an die Linie 485 gekoppelt waren und das Signal überfluteten.
Szenario 2: Ein Mitsubishi-Frequenzumrichter über RS - 485 Zugangs-Gateway, die Masterstation sendet den Funktionscode 03 Lesen Frequenz, gelegentlich kann gelesen werden, gelegentlich CRC-Fehler. Die Potrate beträgt 9600. Zwei Tage später stellte ich fest, dass die A / B-Linie umgekehrt war - A von der Hauptstation erhielt B von der Zwangsstation. Warum kann man gelegentlich Daten lesen? Da der RS - 485 - Transceiver eine gewisse Toleranz für den Common-Mode hat, kann er bei guter Signalqualität wirklich durchlaufen, wenn es Störungen gibt, wird der CRC-Fehler gemeldet.
Szenario 3: Auf der Produktionslinie wurde ein neues Temperaturgerät hinzugefügt, die Adresse wurde auf 05 gesetzt, nachdem es aufgehängt wurde, reagierte die 05 nicht, aber die ursprüngliche 07 funktionierte auch nicht. Die neue Ausrüstung wurde ausgeschaltet und der 07 wieder normal. Zum Schluss, das neue Gerät ist standardmäßig mit einem 120 Ω Terminationswiderstand konfiguriert, und der Bus hat insgesamt drei Terminationswiderstände - Impedanz nicht übereinstimmt, und die Signalreflexion verursacht alle Slave-Stationen unterbrochen.
Diese drei Szenarien weisen auf die gleiche Wahrheit hin:Modbus funktioniert nicht, kann nicht erraten, muss eine Schicht ausgeschlossen werden.Hier ist der vollständige Weg zur Untersuchung.
II. Überprüfung: Vier-Schicht - Modell von der physischen bis zur Anwendungsebene
Modbus-Kommunikationsprobleme, von niedrig nach hoch:
┌────────────────────────────────────────────┐
│ 第四层:应用层 │
│ 从站地址、寄存器映射、功能码、字节序 │
│ 现象:从站回异常码,或数据值明显不对 │
├────────────────────────────────────────────┤
│ 第三层:数据链路层 │
│ 波特率、校验位、CRC/LRC 校验 │
│ 现象:CRC 错误、帧不完整、偶发性丢帧 │
├────────────────────────────────────────────┤
│ 第二层:电气层 │
│ A/B 线接法、终端电阻、偏置电阻、接地 │
│ 现象:完全不通、数据全是乱码、间歇性断连 │
├────────────────────────────────────────────┤
│ 第一层:物理连接 │
│ 线缆通断、接头氧化、屏蔽层、布线路径 │
│ 现象:主站发数据,从站完全无反应 │
└────────────────────────────────────────────┘Beseitigung von Hindernissen: Immer von der ersten Ebene zu überprüfen, um sicherzustellen, dass es kein Problem gibt, weiter nach oben zu gehen.Ich weiß nicht, wie viele Leute drei Tage auf der dritten Schicht (Bortrate ändern, Timeout ändern) verschwendet haben, um schließlich herauszufinden, dass die A / B-Kabel der ersten Schicht umgekehrt ist. Wenn Sie sich nur einen Satz merken, merken Sie sich diesen.
3. Stufe 1: Überprüfung der physischen Verbindung
3.1 Multimeterverdrahtung - der grundlegendste erste Schritt
Schalten Sie alle Geräte aus. Multimeter auf Widerstand oder Ein - und Auslösung, Mess:
- A-Leitung von der Masterstation bis zur entferntesten Slave Station (Widerstand sollte < 10 Ω, abhängig von der Länge und dem Durchmesser der Leitung) - B-Leitung gleich - A und B können nicht kurze Schlüsse (Widerstand sollte unendlich oder nahe unendlich sein) - A / B kann nicht kurzschlüsse GND
Wenn das Ein - und Ausbrechen normal ist, dann übertragen, Multimeter auf Gleichstromspannung:

- A gegen GND: im Ruhezustand ca. 2,5 V ~ 3,5 V (abhängig von der Bias-Schaltung) - B gegen GND: im Ruhezustand ca. 1,5 V ~ 2,5 V - A-B Differenzspannung: im Ruhezustand ca. 0,2 V ~ 2 V, A sollte höher sein als B
Wenn die A-B - Differenzspannung nahe 0V liegt oder sogar A niedriger als B, gibt es ein Problem mit Ihrer Bias-Schaltung.Viele billige USB - 485 - Adapter haben keinen eingebauten Bias-Widerstand, und wenn sie an einem langen Bus hängen, wird die A-B - Differenz im Leerlauf in einen unbestimmten Zustand drift, was zu einem Zufalls-Junk - Datenempfang von der UART der Station führt.
3.2 A / B-Kabel, wie es ist - die meisten Menschen in dieser Grube treten
RS - 485 A / B-Kabelung gibt es keine einheitlichen Industriekennzeichnung Standards. Die Definitionen von A und B von verschiedenen Geräteherstellern können sich gegenteiligen. Hier sind die Arten von Markierungen, die Sie möglicherweise treffen und deren Beziehungen:
| Allgemeine Markierungen | Andere Markierungen | Leerlaufspannung | Erläuterung |
|---|---|---|---|
| A / + / D + / TX + / Positive | Non-Inverting | höher als B | In-Phase - End |
| B / - / D - / TX - / Negative | Inverting | niedriger als A | In-Phase - End |
Schnelle Bestimmungsmethode: Im Zustand des Stromausfalls mit Multimeter-Dioden - Dateien.Der rote Meter-Stift verbindet GND, der schwarze Meter-Stift verbindet A - Die meisten RS - 485 - Transceiver-Chips (wie MAX485, SN75176) haben einen Rückschutzdiode für GND, die einen Vorwärtsspannungsabfall von etwa 0,6 V misst. Das gleiche gilt für den B-Fuss. Wenn es nicht gelingt, wechseln Sie die Polarität.
Es gibt eine gewalttätigere Methode: Wenn es nicht funktioniert, tauschen Sie A und B aus. Kein Witz - das ist das am häufigsten verwendete „Hindernisversorgungsmittel" auf dem Gebiet. Die RS - 485 - Anschlüsse für viele Frequenzumrichter sind umgekehrt.

3.3 Endverbindung - wann und wo
Terminationswiderstand 120 Ω, an beiden Enden des Buses angeschlossen. Jeder hat diesen Satz gehört. Im eigentlichen Projekt entscheiden jedoch nur diese Details über den Erfolg: Wann
Wann muss abgeholt werden.Die Buslänge beträgt mehr als 50 m oder die Baudrate beträgt ≥ 19.200. Das Urteilskriterium ist nicht die Länge, sondern die Signalwellenform, die Sie mit einem Oszilloskop betrachten - wenn es deutliche Überschreitungen oder Reflexionen gibt, fügen Sie den Terminationswiderstand hinzu.
Wann kann man nicht abnehmen.Auf dem Prüfstand, ein Meter kurze Kabel, die Baudrate 9600. Zu dieser Zeit kann der Terminationswiderstand aufgrund unzureichender Antriebskapazität zu einem Rückgang der Signalamplitude führen.
Ein Loch, das leicht übersehen werden kann.Viele RS - 485 - Geräte verfügen bereits über integrierte Terminationswiderstände, die über Jumper oder Wählschalter aktiviert werden. Wenn Sie dies nicht wissen, manuell 120 Ω in den Bus hinzufügen, und das Gerät ist auch auf 120 Ω, gleichgestellt mit 60 Ω parallel - Signalamplitude stark sinkt, viel mehr nicht. Das ist die vorherige Szene 3
Probemethode: Alle Geräte sind ausgeschaltet, Multimeter Widerstand Datei Messen Gleichstrom Widerstand zwischen A-B. Normal sollte ein paar kΩ bis Dutzende kΩ sein (Versänge-Widerstand bestimmt). Wenn die Messung 60 Ω oder 120 Ω beträgt, ist mindestens ein Terminationswiderstand aktiv. Ziehen Sie das Gerät einzeln aus und sehen Sie, welches Gerät sich nach dem Entfernen der Impedanz verändert.
3.4 Abschirmung und Erdung - Die meisten Leute machen das falsch
Die RS - 485 - Abschirmung sollteeinseitig geerdet seinund an der Hauptstation oder Gateway-Seite geerdet sein. Wenn beide Enden geerdet sind, wird der Erdpotenzialdifferenz einen Kreislauf auf der Abschirmschicht bilden und stattdessen Störungen in die Signalleitung führen.
Verwenden Sie auch keine freien Kabelpaare für RS - 485. Das Netzwerkkabel ist eine charakteristische Impedanz von 100 Ω, das RS - 485 - Kabel ist eine charakteristische Impedanz von 120 Ω, und eine Mismatch kann zu einer starken Signalreflexion bei einer hohen Geschwindigkeit führen. Kurze Entfernungen (< 10 Meter) passen gut, aber nicht als offizielle Ingenieurlösung. Ein normales RS - 485 - Kabel besteht aus einem Twisted-Paar mit einer Abschirmung mit einer charakteristischen Impedanz von 120 Ω, wie z. B. Belden 3105A oder gleichwertig.
IV, zweite Schicht: Elektrische Schicht überprüfen
Nach der physikalischen Verbindung bestätigt kein Problem, wenn es immer noch nicht oder Fehler, in die elektrische Schicht.
4.1 Schauen Sie sich die Wellenform mit einem Oszilloskop
Oszilloskop-Sonde an der A-Linie gegen GND und B-Linie gegen GND, beobachten:
- Sind die Spannungswerte von A und B im Leerstand stabil?(A sollte mindestens 200 mV höher als B) - Ob A und B bei Datenübertragung ein Standard-Differenzialsignal (A und B spiegeln symmetrisch) - Ob die aufsteigenden und absteigenden Kanten der Wellenform sauber sind (es sollte keine sichtbaren Stufen oder Bogen geben)
Wenn die Wellenformkanten rund sind, kann es sein, dass die Kabelkapazität zu groß ist (zu lange oder zu dünne Kabeldurchmesser) oder dass die Antriebsleistung zu wenig ist. Eine Verringerung der Baudrate kann normalerweise lindern.
4.2 Bias-Widerstand (Fail-Safe Bias)
Der RS - 485 - Standard verlangt, dass die Differenz-Eingangsspannung ≥ 200 mV als Logik 1 und ≤ -200 mV als Logik 0 beurteilt wird. Wenn der Bus jedoch im Leerlauf ist (alle Geräte sind nicht angetrieben), kann die Differenzspannung in einem unbestimmten Bereich von -200 mV bis +200 mV liegen, was dazu führt, dass der Receiver zufällige Daten ausgibt.
Aus diesem Grund ist ein Biaswiderstand erforderlich: An einer bestimmten Stelle im Bus (normalerweise an der Hauptstation oder in der Biasschaltung) werden zwei Widerstände verwendet, um A nach VCC und B nach GND zu ziehen, um im Leerlaufzustand A > B und die Differenz > 200mV zu gewährleisten.
Die üblichen Vorsänge-Widerstandswerte sind 680 Ω oder 560 Ω (jeweils eine nach oben und eine nach unten). Beachten Sie jedoch, dass der Biaswiderstand und der Terminationswiderstand parallel verbunden sind. Wenn Ihr Terminationswiderstand 120 Ω und der Biaswiderstand je 680 Ω beträgt, ist die tatsächliche Leerlaufdifferenzspannung:
V_diff = VCC × R_term / (R_term + R_pullup + R_pulldown)
= 5V × 120 / (120 + 680 + 680) ≈ 0.405V = 405mVDieser Wert > 200mV erfüllt die Anforderungen. Wenn Sie jedoch den Endwiderstand auf 60 Ω (zwei 120 Ω parallel angeschlossen) ersetzen, bleibt die Differenzspannung nur etwa 210 mV, die an einem kritischen Punkt steckt. Daher ist die Anzahl und die Position des Endwiderstandes die Voraussetzung für die Planung des Biaswiderstands.
5. Dritte Ebene: Überprüfung der Datenverbindungsschicht
Elektrische Schicht ist in Ordnung, aber die Kommunikation ist immer noch nicht richtig - Zugang zum Protokoll selbst. Dieses Gerät benötigt ein Handschlagwerkzeug.
5.1 Prüfen Sie, ob die Slave-Station Modbus unterstützt
Hier sehen Sie nicht die Geräteanleitung - die Anleitung unterstützt nicht bedeutet, dass die Firmware wirklich eingeschaltet ist. Verwenden Sie den seriellen Port-Assistenten, um einen einfachsten Anforderungsrahmen zu senden, um von der Station zurückzukehren.
Modbus RTU zum Beispiel, Senden Sie den Funktionscode 03 (Lese-Halt - Register):
从站地址: 01
功能码: 03
起始地址: 00 00(寄存器 40001)
寄存器数: 00 01(读 1 个)
CRC: 84 0A
完整帧: 01 03 00 00 00 01 84 0ASchließen Sie Ihren USB - 485 - Wandler an den RS - 485 - Anschluss der Slave-Station, Setzen Sie die Baudrate / Datenbit / Check-Bit / Stop-Bit, Senden Sie diesen Frame oben. Wenn der Slave zurückkommt:
01 03 02 00 2A 39 9BBeschreibung Die Slave Station unterstützt Modbus und der Wert im Register 40001 lautet 0x002A (42 Dezimal). Wenn keine Antwort vorliegt, prüfen Sie die folgenden Punkte weiter.
5.2 Baud-Rate und Frame-Format
Das Standard-Frame - Format für Modbus RTUs ist normalerweise: 9600 - 8 - N - 1 (9600, 8 Datenbits, keine Überprüfung, 1 Stop-Bit). Viele ältere Geräte verwenden jedoch die 9600 - 8 - E - 1 (gerade Check) oder 19200 - 8 - N - 1. Es gibt auch einige inländische Geräte Standard 4800.
Wenn die Baudrate Ihres USB - 485 - Wandlers richtig eingestellt ist, wird die Station reagieren. Wenn die Porter-Rate falsch ist, wird der Chaos-Code von der Station erhalten. Das Verhalten der Station, nachdem sie den Chaos gesehen hat, hängt von der Firmware-Implementierung ab - einige Geräte werden direkt verworfen, andere Geräte werden versuchen, den Empfangspuffer nach einem Fehler zu analysieren und sich vollständig zu schweigen.
Raten Sie nicht die Porter-Rate.Wenn Sie kein Gerätehandbuch zur Hand haben, verwenden Sie eine dumme Methode: USB-Logikanalysator (Dutzende von Dollar der Art) hängt an der A, B-Leitung, um zu sehen, ob es Daten nach der Stromversorgung von der Station gibt. Einige Slave-Stationen werden nach dem Starten eine Identifikationsinformation senden, die Bitbreite dieser Daten messen kann die Baudrate umgekehrt.
5.3 Der Unterschied zwischen 9600 - 8 - N - 1 und 9600 - 8 - E - 1 ist nicht nur ein Check-Bit. Die Gesamtlänge des Frames ändert sich:
Der Unterschied zwischen 9600 - 8 - N - 1 und 9600 - 8 - E - 1 ist mehr als nur eine Kontrollbit. Die Gesamtlänge des Frames ändert sich:
- 8 - N - 1: 1 Start-Bit + 8 Daten-Bit + 1 Stop-Bit = 10 Bit / Byte - 8 - E - 1: 1 Start-Bit + 8 Daten-Bit + 1 Check-Bit + 1 Stop-Bit = 11 Bit / Byte
Wenn du mit 8 - N - 1 sendest und von der Station mit 8 - E - 1 empfängst, wird die Station deine Stop-Bits als Prüfsitze überprüfen. Und umgekehrt auch. Dies führt zu gelegentlichen Überprüfungsfehlern und nicht zu allen Fehlern - da der Stopp-Bits eine feste Logik 1 ist, gibt es eine 50%ige Wahrscheinlichkeit, dass die Überprüfung "pass" ist.
Aus diesem Grund ist die Kombination der Baudrate, der Check-Bits und der Stopp-Bits aus dem Gerätesanleitung bestätigt und nicht zusammengefasst.16 Slave-Stationen, 7 Baud-Raten x 3 Prüfungen x 2 Stopp-Bits = 42 Kombinationen. Die Verfolgung ist reine Folter für sich.
5.4 Paket-Analyse - Unterscheidung von "Nicht ausgeschickt", "Nicht geantwortet", "Fehler zurückgegeben"
Erfassen Sie die tatsächlichen Daten mit einer seriellen Port-Monitoring - Software (z. B. Device Monitoring Studio, Serial Port Monitor oder einfach nur mit zwei USB - 485 - Adaptern, die hintereinander an den Bus angeschlossen sind).
Prüfen Sie die drei wichtigsten Indikatoren:
Ob die von der Masterstation ausgestellten Frames korrekt sind.Überprüfen Sie mit dem CRC-Rechner, ob der CRC in Ihrem Frames korrekt ist. Ein häufiger Fehler ist, dass die CRC-High - Low-Bytes umgekehrt sind - Modbus RTU legt fest, dass die CRC-Low - Bytes vor und die High-Bytes danach sind. Zum Beispiel ist das CRC von Frame01 03 00 00 00 010x840A, und das Frame sollte84 0Astatt0A 84。
Keine Antwort vom Bahnhof.Wenn der Master-Frame ordnungsgemäß ausgeschickt wird, aber innerhalb einer angemessenen Zeit (z. B. 200 ms) keine Daten zurückgegeben werden, überprüfen Sie, ob die Slave-Adresse übereinstimmt, ob nur ein Gerät im Bus online ist (wenn ein weiteres Adresskonflikt möglich ist) und ob die Slave-Station im "Hören" - Modus ist.
Was von der Station reagiert.Wenn der Ausnahme-Frame von der Station zurückgegeben wird, die höchste Position des Funktionscodes 1 plus der Ausnahmecode (z. B.01 83 02 C0 F1, 83 = 03 + 0x80, Ausnahmecode 02 = illegale Datenadresse), dann ist zumindest die Linkschicht durchgängig, und das Problem liegt in der Anwendungsschicht.
5.5 CRC-Prüffehler genauer beheben
CRC-Prüffehler sind das häufigste Problem in der Link-Schicht und können von höchster zu niedrigerer Frequenz auf folgende Ursachen zurückzuführen sein:
1. A / B-Line - Reverse.Die Differenzpolarität ist umgekehrt, alle Datenbits sind umgekehrt, und CRC ist wahrscheinlich falsch. Aber es gibt eine gemeinsame Modul Toleranz, die manchmal stimmt - das ist Szenario 2. 2.Porter-Rate - Abweichung.Die Abweichung der Taktzeiten beider Geräte verursacht eine Abweichung des Probenpunkts. Wenn die Abweichung der Baudrate mehr als ± 2% beträgt, wird der Empfänger-UART den falschen Bitwert abtasten. Besonders bei hohen Temperaturen kann die Temperaturdrift des RC-Oszillators innerhalb der MCU ± 5% erreichen. 3.Lose Kabel oder schlechte Kontakte.Der Verlust eines Bits verursacht eine Verschiebung aller nachfolgenden Bytes, und CRC muss fehlerhaft sein. 4.elektromagnetische Störungen.Im Augenblick des Frequenzumrichter-Startens und der starke EMI während der Arbeit der Schweißmaschine wird das Niveau auf der Übertragungsleitung direkt ändern, was zu Bitfehlern führt. Wenn der CRC-Fehler nur beim Starten eines bestimmten Geräts auftritt, kann die Störquelle im Grunde gesperrt werden.
IV. Stufe: Überprüfung der Anwendungsebene
die Linkschicht überschritten ist (die Slave-Station antwortet und CRC ist korrekt), aber die Daten sind nicht korrekt oder funktionieren nicht wie erwartet.
6.1 Slave Station Adresse
Das erste Byte des Modbus RTU-Frame ist die Slave Station Adresse. Adressbereich 1 - 277.
Die Adresse 0 ist die Broadcast-Adresse - die Master-Station schreibt Befehle mit 0, alle Slaves führen sie aus, reagieren aber nicht. Wenn Sie einen Lesebefehl mit der Adresse 0 ausführen, wird keine Antwort von der Station erfolgt.
Viele neue Geräte haben die Standardeinstellungsadresse 1 aus dem Werk. Wenn Sie bereits ein Gerät mit der Adresse 1 auf dem Bus haben und ein neues Gerät mit der Fabrik-Standard - Adresse 1 haben, werden beide Geräte gleichzeitig antworten, wenn die Masterstation 1 adressiert - Buskonflikt, die Daten, die die Masterstation empfängt, sind die Überlagerung von zwei Signalen, die als CRC-Fehler oder Chaos auftreten.
Testmethode: Nur eine Station auf dem Bus zu nehmen, eine nach der anderen zu testen.Das ist die dümmste, aber effektivste Methode. Einmal getestet und das nächste hinzufügen.
6.2 Register-Adresse Offset
Modbus-Register - Adresse hat zwei Konzepte, die verwechselt werden, um falsche Daten zu lesen:
- Protokoll-Adresse:16 - stellige Zahlen, die in einem Frame gefüllt sind, beginnend mit 0 Wenn der Funktionscode 03 das Hold-Register liest, entspricht die Protokolladresse 0 dem 1. Hold-Register. -PLC-Adresse:Die im Handbuch angegebene Nummer des Herstellers, die mit 1 oder mit 40001 beginnen kann.
Beispiel: Das Gerätesanleitung schreibt "Frequenz-Einstellungen im Register 40003". Das 40003 kann drei Bedeutungen haben:
| Herstellergewohnheit | Protokolladresse | Der Wert, den Sie in den Frame ausfüllen |
|---|---|---|
| 40003 ist die Protokolladresse | 40003 | 40003 (überschreiten Sie den Bereich von einem einzigen Byte hinaus, was der Hersteller behandelt) |
| 40003 bedeutet, dass der dritte Registerbereich gehalten wird | 2 | 00 02 |
| 40003 bedeutet, dass der dritte Registerbereich gehalten wird (beginnend mit 0) | 3 | 00 03 |
Wenn Sie sich nicht sicher sind, lesen Sie 10 aufeinander folgende Register, beginnend mit der Protokolladresse 0. Prüfen Sie, welche Adresse einen Wert zurückgibt, den Sie kennen (z. B. die Gerätemodellnummer, die Firmware-Versionsnummer oder die aktuelle Frequenz), um die Adressierungsmethode des Herstellers zu ermitteln.
6.3 Funktionen und Funktionscodes
Modbus-Standardfunktionscodes und entsprechende Datenbereiche:
- 01: Lesespule (0xxxx) - 02: Discrete Eingabe lesen (1xxxx) - 03: Read Hold Register (4xxxx) - 04: Read Input Register (3xxxx) - 05: Write Single Coil - 06: Write Single Hold Register - 15: Write Multi-Coil - 16: Schreibe mehr Registrierung
Allerdings hat nicht jede Station alle Funktionen implementiert. Ein einfacher Thermostat kann nur 03 und 06 unterstützen - Sie senden 16 (Schreiben in mehrere Register), die es nicht erkennt, zurück zu Ausnahme-Code 01 (illegaler Funktionscode).
Wenn der Ausnahmecode von der Station zurückgegeben wird, bedeutet der Ausnahmecode folgendes:
| Ausnahmecode | Bedeutung | Häufige Ursachen |
|---|---|---|
| 01 | Illegale Funktion | Der Ausnahmecode von der Station wird nicht unterstützt |
| 02 | Illegale Datenadresse | Registeradresse außerhalb des Bereichs |
| 03 | Ungültiger Datenwert | Geschriebener Wert ist nicht akzeptabel (über den Bereich hinaus usw.) |
| 04 | Slave-Stationsgerät fehlschlägt | Slave-Stations - Selbsttest fehlschlägt |
| 05 | Bestätigung | Befehl empfangen, aber die Verarbeitung braucht Zeit |
| 06 | Slave-Stationsgerät beschäftigt | Verarbeitung des letzten Befehls |
Ein Ausnahmecode empfangen ist gut - das bedeutet, dass die Linkschicht funktioniert, die physische Schicht ist in Ordnung, und Sie können sich auf die Anwendungsschicht konzentrieren.
6.4 Byte-Sequenz (Big-End / Small-End)
Das Modbus-Protokoll schreibt vor, dass Multi-Byte - Daten in Big-End - Reihenfolge übertragen werden (High-Byte - Vorrang). Wie kommt die 32 - Punkte-Zahl? Es gibt keine Definition im Standard. So haben alle Hersteller eine Reihe:
- einige Hersteller verwenden ABCD-Sequenz (das höchste Byte vor) - einige Hersteller verwenden CDAB-Sequenz (zwei Wörter tauschen Positionen, jedes Wort ist immer noch im großen Ende) - einige Hersteller verwenden BADC oder DCBA
Wenn Sie zwei aufeinanderfolgende Hold-Register zu einer 32 - Bit-Fließkomma - Zahl lesen, unterscheiden Sie sich zwischen dem Wert und dem erwarteten Wert um mehrere Größenordnungen, ist die Wahrscheinlichkeit hoch, dass die Byte-Reihenfolge umgekehrt ist. Mit bekannten Werten - z.B. mit einer Frequenz von 50,0 Hz (IEEE 754 bedeutet 0x42480000) - lesen Sie es zurück, schauen Sie sich die hexadezimal-Anordnung an und schieben Sie die Byte-Sequenz des Herstellers um.
7. Die richtige Methode, schrittweise die Station hinzuzufügen
Nun gehen Sie davon aus, dass Sie eine Slave-Station überprüft haben und die Kommunikation funktioniert. Dann müssen wir noch mehr Stationen hinzufügen - das ist der einfachste Teil, um den Schnappen zu entfernen.
Richtiges Vorgehen:
1. Nur eine Slave Station (Slave Station A) bleibt auf dem Bus, bestätigen Sie, dass die Kommunikation A normal ist. 2. Trennen Sie von Station A, nur von Station B, bestätigen Sie, dass die Kommunikation B normal ist. 3. A und B sind gleichzeitig angeschlossen und bestätigen, dass beide Kommunikation in Ordnung ist. 4. Wenn A + B normal ist, trennen Sie alle und nur von Station C, bestätigen Sie, dass C normal ist. 5. A + B + C sind gleichzeitig angeschlossen und bestätigen, dass alle drei normal sind. 6. Analog zu diesem.
Wenn in Schritt 3 ein Problem auftritt, nachdem Sie A + B gleichzeitig angeschlossen haben, überprüfen Sie diese beiden Punkte:
- Adresskonflikt:Sind die Slave-Adressen von A und B identisch? -Terminationswiderstand Akkumulation:A und B sind nicht beide mit einem 120 Ω - Terminationswiderstand intern aktiviert. Siehe Abschnitt 3.3.
Wenn Sie in Schritt 5 A + B + C gleichzeitig anschließen (beide ersten Schritte sind normal), ist die hohe Wahrscheinlichkeit:
- Die Busfahrkapazität ist zu wenig.Jeder RS - 485 - Transceiver der Slave-Station verfügt über eine Eingangsimpedanz im Empfangszustand (Standard ≥ 12 k Ω). Nach dem RS - 485 - Standard können bis zu 32 Einheiten auf einem Bus belasten. Wenn Sie einen Transceiver mit einer 1 / 4 oder 1 / 8 - Ladung verwenden, kann die Anzahl mehr sein. Aber wenn Sie den billigsten MAX485 - Klasse-Chip verwenden, wird die Signaldämpfung von 30 von der Station nach dem Aufhängen offensichtlich. Lösung: Wählen Sie einen Transceiver mit einer 1 / 4 oder 1 / 8 - Last oder fügen Sie einen RS - 485 - Repeater hinzu. -Es gibt ein Problem mit dem Bus.RS - 485 muss eine Daisy-Kette sein und darf nicht in Sternform verzweigt werden. Die Sterntopologie erzeugt eine Signalreflexion, die genau am Zweigpunkt liegt. Wenn die Verkabelung vor Ort bereits in Form von Sternen ist und nicht geändert werden kann, fügen Sie RS - 485 Hub oder Repeater hinzu, um die Zweige zu isolieren.
VIII. Haupt-Station - Polling-Strategie und Overtime-Einstellungen
8.1 Wie berechnet man die Zeitüberschreitung
Die Zeitüberschreitung der Modbus RTU unterteilt sich in zwei Ebenen:
Zeichenträger-Zeitüberschreitung (t1.5):Der maximal zulässige Abstand zwischen zwei aufeinanderfolgenden Bytes, der auf die Übertragung von 1,5 Zeichen festgelegt wird. Es wird verwendet, um zu bestimmen, ob ein Frame beendet ist. Bei 9600 - Baud-Rate beträgt ein Zeichen (11 Bit) etwa 1,15 ms, t1.5 ≈ 1,75 ms.
Inter-Frame Timeout (t3.5):Der Mindestintervall zwischen zwei aufeinanderfolgenden Frames, der auf die Übertragung von 3,5 Zeichen gesetzt ist. Bei 9600 Baud-Rate ist t3,5 ≈ 4ms.
Wenn die Host-Station 30ms nach dem Senden der Anfrage keine Antwort erhalten hat, kann man nicht einfach davon ausgehen, dass die Station kaputt ist. Einige Slaves (insbesondere niedriggeschwindigkeits-MCU - angetriebenen Temperaturgeräte, Stromzähler) benötigen 50 - 100 ms, um eine Anfrage zu verarbeiten. Setzen Sie diesen Wert auf mindestens 200ms als Ausgangspunktwert, bestätigen Sie, dass die Kommunikation normal ist, und verkürzen Sie sie nach der tatsächlichen Reaktionszeit.
8.2 Zuerst lesen und dann schreiben
Bevor Sie versuchen, ein Register zu schreiben, lesen Sie zuerst ein bekanntes Register (z. B. das Gerätemodell, die Firmware-Versionsnummer oder ein Register, für das Sie den aktuellen Wert kennen). Sobald das Lesen normal ist, versuchen Sie es noch einmal zu schreiben.
Schreiben Sie nicht eine 1 in die Schleife.Sie wissen nicht, was diese Spule steuert - vielleicht ein Notstop-Signal. Verwenden Sie den 06 - Funktionscode zu schreiben, um das Register zu halten, und denken Sie zuerst, was Sie schreiben, um das Register zu tun.
Neun, Checklist Quick Checklist
In der industriellen Steuerung vor Ort, können Sie nicht die Voraussetzungen, Schritt für Schritt in dieser Reihenfolge zu gehen. Fotografieren Sie diese Tabelle in Ihrem Handy und überprüfen Sie sie beim Debuggen.
| Seriennummer | Prüfeinträge | Werkzeuge | Durch Standard |
|---|---|---|---|
| 1 | A / B-Leitung Ein - und Auslösung | Multimeter Widerstandsprofile | A-Leitung, B-Leitung |
| 2 | A / B-Leitung ohne Kurzschluss | Multimeter-Widerstandsschiff | A-B - Widerstand > 1k Ω |
| 3 | Leerlaufspannung | Multimeter-DC - Spannungsschiff | A > B, Differenz > 200mV |
| 4 | Terminationswiderstand | Multimeter-Widerstandsschiff (Ausgeschaltete Geräte) | A-B - Widerstand 120 Ω oder > 1 k Ω (je nach aktiviert) |
| 5 | Biß-Widerstand | Multimeter-Widerstandsschiff (Ausgeschaltete Geräte) | A-VCC und B-GND ca. 680 Ω |
| 6 | Baudrate / Check / Stop-Bit | Gerätesanleitung | im Einklang mit dem Handbuch. |
| 7 | Leer-Frame - Test | Serial-Port - Assistant | Slave-Station antwortet auf01 03 00 00 00 01 84 0AAntwort haben. |
| 8 | CRC richtig | CRC-Rechner | Master-Station ausgestellte CRC entspricht der Berechnung |
| 9 | Antwort CRC richtig | CRC-Rechner | CRC der Slave-Station - Antwort entspricht der Berechnung |
| 10 | Slave-Station - Adresse eindeutig | Einzelzugangstest | Keine doppelten Adressen auf dem Bus |
| 11 | Registeradresse korrekt | 10 aufeinanderfolgende | Auslesen von 0 zurückgegeben Daten mit bekannten Werten |
| 12 | Die Reihenfolge ist korrekt | Lesen Sie den bekannten Wert Vergleich | 32 - Bit-Wert - Analyse in Übereinstimmung mit den Hersteller-Spezifikationen |
X, FAQ: High-Frequency - Troubleshooting-Problem
Q1: Die Masterstation sendet Daten, die Zwangsstation kommt gelegentlich zurück und kommt nicht zurück, die Baudrate ist 9600. Warum nicht?
A: Gelegentliche Probleme sind am häufigsten durch eine A / B-Verbindung, eine unsachgemäße Konfiguration des Endwiderstands oder Stromversorgungsstörungen verursacht.Überprüfen Sie zuerst die A / B-Polarität, dann die Position und die Menge des Endwiderstands und schließlich die Wellenform mit dem Oszilloskop.
Q2: Der USB - 485 - Adapter funktioniert normal auf dem Teststand, sobald er vor Ort angekommen ist. Es wurden mehrere Umschalter gewechselt.
A: Zwei Möglichkeiten. Erstens gibt es starke Common-Mode - Interferenzen auf der RS - 485 - Linie vor Ort, und das Common-Mode - Unterdrückungsverhältnis des gewöhnlichen USB - 485 - Wandlers ist nicht ausreichend. Wechseln Sie zu einem industriellen USB - 485 - Adapter mit Isolierung (z. B. UT - 890A oder gleichwertig). Zweitens gibt es einen Potenzialunterschied zwischen der Erdung des USB-Anschlusses des Computers und der Erdung des RS - 485 - Geräts, die durch den Wandler eine Schleife bildet. Isolierungswandler lösen dieses Problem.
Q3: Wenn mehrere Slaves abfragen, ist der erste immer über, die folgenden häufig nicht.
A: Überprüfen Sie das Abfrageintervall der Masterstation. Wenn Sie die nächste Anforderung unmittelbar nach der vorherigen Anforderung senden, während die letzte Antwort auf dem Bus noch nicht abgeschlossen ist, tritt ein Konflikt auf. Stellen Sie sicher, dass der Abstand zwischen den beiden Polls ≥ Anzahl der Slaves × (Anfragezeit + Antwortzeit + t3,5) beträgt. Wenn die durchschnittliche Reaktionszeit jedes Slaves bei 9600 Baud beträgt 15 ms, wird das Abfrageintervall zwischen 10 Slaves mindestens 200 ms festgelegt.
Q4: CRC meldet immer einen Fehler, die A / B-Polarität und die Baud-Rate wurden überprüft.
A: Überprüfen Sie die Signalqualität mit einem Logikanalysator oder einem Oszilloskop. Schauen Sie sich die Steigung der aufsteigenden und absteigenden Kanten an, wenn sie zu flach sind (> 30% Bitbreite), kann es zu groß sein, oder die Antriebskapazität zu wenig ist. Versuchen Sie es, die Baudrate auf 4800 zu reduzieren. Wenn das möglich ist, zeigt die Signalqualität tatsächlich die Ursache des Problems.
F5: Wie kann ich wissen, ob die Station Modbus unterstützt?
A: Führe01 03 00 00 00 01 84 0Ain der Vergangenheit. Wenn nicht, probieren Sie es erneut mit den drei Baud-Raten 9600 / 19200 / 4800 (8 - N - 1 und 8 - E - 1). Wenn alles nicht zurückkommt, überprüfen Sie die folgenden Möglichkeiten: Gerät ist überhaupt nicht eingeschaltet, RS - 485 - Schnittstelle ist nicht aktiviert, Jumper oder Konfiguration erforderlich, Gerät RS - 485 unterstützt nur ASCII-Modus, Gerät benötigt eine spezielle Wake-Sequenz.
Probleme noch mal reden. Das Problem ist, dass Sie 80% davon ausgehen können, und die restlichen 20% müssen Sie selbst versuchen. Aber solange man in dieser Reihenfolge kommt, ohne zurückzukehren, genügt ein Nachmittag, um die meisten Modbus-Kommunikationsprobleme zu lösen.
Antwort veröffentlichen