Forum: Mikrocontroller und Digitale Elektronik Abschlusswiderstand Modbus Einfluss


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Christian B. (becker84)


Lesenswert?

Hallo,
ich habe im Zählerschrank 4x Eastron SDM. (3x 72v2 und 1x 630v2)
Die Busleitung ist etwa 1m lang. Die Geschwindigkeit beträgt 19200 Baud.

Ich frage alle 2s alle vier Zähler ab, und wirklich viele Register, fast 
alle.
Leider bekomme ich bei einem "Queue Delay" von 5 oder 10ms gelegentliche 
Fehler.
Bei 20ms oder höher nicht mehr. Bei 20ms schaffe ich es aber nicht mehr 
alles in 2s abzufragen.

Aktuell verwende ich keine 120 Ohm Widerstände.
Im RS485 Master kann ich den per Jumper dazuschalten. (DSD TECH SH-U11F)
Am letzten Zähler muss ich einen rein tüddeln, der kommt aber erst 
nächste Woche.
Als Leitung verwende ich eine (geschirmte) Telefonleitung, 
Wellenwiderstand: unbekannt.

Könnte ihr mir sagen/berechnen, ob ich bei so einem kleinen Bus (1, 
vielleicht 1,2m) tatsächlich Reflexionen ohne Widerstände bekomme, die 
zu Störungen führen könnten, bei einem Queue Delay von <10ms ?

Hatte mal gelesen, dass das erst bei >5 oder 10m Buslänge zum tragen 
kommt.

Habe nun einen 2. USB RS485 Adapter für den SDM630v2 bestellt, so dass 
die 3x SDM72v2 unter sich bleiben können, würde mich aber dennoch 
interessieren, ob der Abschlusswiderstand vielleicht das Problem löst 
oder ob ich es erst gar nicht probieren brauche, da physikalisch Unsinn.

MfG

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Bei 1m Busleitung reicht es, nur 1 Abschlusswiderstand rein zu tun, die 
Reflektionslänge von 19200bd wäre über 1000m.

Mir ist aber nicht ganz klar, welche Auswirkungen der queue delay hat. 
Wartezeit auf eine Antwort ? Da muss man halt damit rechnen, dass einige 
Angefragte manchmal je nach anderweitiger Belastung etwas länger 
brauchen.

von Achim M. (minifloat)


Lesenswert?

Hallo,

Hast du eine Masseleitung mit verbunden? Nicht dass dir die Transceiver 
aus dem erlaubten Common-Mode-Offset raus laufen und dadurch beim 
Empfang Störungen auftreten.

Bei 19200baud sollte bei 1m Buslänge eine Terminierung irgendwo auf dem 
Bus noch ausreichen. Die Terminierung zieht übrigens den Bus auf 
Ruhepegel, sonst treten Geisterübertragungen auf.

Außerdem lohnt es sich, die Busauslastung nachzurechnen. Wie viele 
Register liest du da? Wie viele Bytes huschen dafür über den Bus? 
19200baud kann höchstens 1600byte pro Sekunde übertragen. Da MODBUS ein 
Frage-Antwort-Protokoll ist und die Geräte auch Latenzzeit zur 
Verarbeitung von Kommandos haben, sollte man deutlich darunter bleiben.

mfg mf

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Christian B. schrieb:
> Könnte ihr mir sagen/berechnen, ob ich bei so einem kleinen Bus (1,
> vielleicht 1,2m) tatsächlich Reflexionen ohne Widerstände bekomme, die
> zu Störungen führen könnten, bei einem Queue Delay von <10ms ?

Warum guckst du dir das nicht mit einem Oszi an?
Nur die Realität kann dir Auskunft geben, was tatsächlich auf deinem Bus 
los ist. Bei der Gelegenheit kannst du dann auch gleich gucken, was es 
mit dem Queue Delay auf sich hat, d.h. wie sich das auf die 
Datenübertragung auswirkt.

von Christian B. (becker84)


Angehängte Dateien:

Lesenswert?

Es müssten 115 Register á 16bit sein (oder 230x 8bit).
Sollten demnach 230 Byte sein.

Die Abfrage seht ihr im Anhang (Node-Red).
Aktuell bin ich bei 15ms Queue Delay und 3s Abfrage ohne Fehler.

Masseleitung ist überall verbunden.

Ozilloskop besitze ich leider nicht.

von DerEinzigeBernd (Gast)


Lesenswert?

Christian B. schrieb:
> Ich frage alle 2s alle vier Zähler ab, und wirklich viele Register, fast
> alle.

Wieviele denn? Bei 8e2 und 19200 Baud sind 1600 Bytes pro Sekunde 
maximal übertragbar.

Jedes Anfragetelegramm à la READ_HOLDING_REGISTERS ist acht Bytes lang, 
die Antwort darauf ist fünf Bytes + je zwei Byte pro Registerwert groß.
(siehe #1 S.15 und #2 S.13)

Dazu kommen laut Spezifikation zwischen den Telegrammen noch 
einzuhaltende Pausen von mindestens 3.5 Zeichenzeiten (ebenfalls #2 
S.13).

Da Du zwei Zähler pro Sekunde abfragst, sind also von den verfügbaren 
1600 Bytes 16 Bytes für die Anfragen, 7 Bytes für die Telegrammpausen 
und 10 Bytes für die Antworttelegramme verbraucht, bleiben 1567 Bytes, 
also etwa 783 Registerwerte für zwei Zähler übrig. Und das nur, wenn 
alles äußerst knackig arbeitet, d.h. wenn die Zähler ihre Antwort 
wirklich sofort liefern.

Und was für Fehler sind das? Zerstörte Telegramme, oder aber 
Fehlermeldungen seitens der Zähler? Die können nämlich auch "Exception 
Responses" liefern, wenn sie beispielsweise zu schnell abgefragt werden 
...

(Siehe S. 48ff in #1)

Details zu Modbus RTU:
#1 https://modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf
#2 https://www.modbus.org/docs/Modbus_over_serial_line_V1_02.pdf

von DerEinzigeBernd (Gast)


Lesenswert?

Nachtrag:
Ich sehe, daß ich zu lange zum Antworten gebraucht habe, die Menge 
scheint geklärt zu sein.
Betrachte aber meine Fragen zum "Fehler".

von Christian B. (becker84)


Angehängte Dateien:

Lesenswert?

danke für die ausführliche Antwort.
"Da Du zwei Zähler pro Sekunde abfragst, sind also.. "
Das stimmt so nicht, alle Zähler werden in einem Rutsch abgefragt.
Ganz oben ist der Taktgeber, der alle 2s die Abfrage auslöst.
Es werden jeweils zusammenhängende Register der Reihe nach abgefragt.
Ich denke dazwischen ist dann die "Queue Delay", also Sendepause von 
15ms.

Fehler siehe Anhang.

Die Links werde ich mir noch in Ruhe durchlesen und versuchen alles zu 
verstehen..

von DerEinzigeBernd (Gast)


Lesenswert?

Du benutzt offenbar irgendeine Library oder Fertigsoftware, die wenig 
über das verrät, was sie macht.

Mit einem Oszilloskop könntest Du Dir die RS485-Pegel des Busses 
ansehen, mit einem einfachen Logikanalysator wie den "Saleae"-Klones 
könntest Du Dir das Zeitverhalten und die tatsächlich übertragenen 
Daten auf dem Bus ansehen.

Dann könntest Du auch sehen, wie sich das, was Deine Software "queue 
delay" nennt, auf die Wartezeiten zwischen dem Empfang einer Anwort und 
dem Absenden der nächsten Anfrage auswirkt. Ebenfalls könntest Du sehen, 
wie lange Deine Zähler nach der Anfrage brauchen, bis sie mit dem 
Antworten beginnen.

Mir sind schon Modbus-Geräte begegnet, die sehr neurotisch darauf 
reagierten, wenn man sie auch nur etwas zu schnell abfragte, das waren 
irgendwelche Gateways zu irgendwelchen S7-SPSen. Da musste man etliche 
hundert Millisekunden Wartezeit einlegen, sonst antworteten sie mit 
(sachlich falschen) Exceptions (Adressfehler statt "Device Busy").

Dabei ist Modbus wirklich strunzprimitiv.

von TempusAnus (Gast)


Lesenswert?

Was hat dein Versuch mit/ohne Widerstand gebracht?

von Christian B. (becker84)


Lesenswert?

Widerstand kommt erst Mittwoch.
Ich kann nur den vom Adapter (Master) aktivieren per Jumper, habe ich 
noch nicht getan.
Ergibt das Sinn? Oder nur am Ende?

Oben schrieb ja einer was von 1000m, was für mich heißt Widerstand= 
unnötig.

Fertigsoftware: NodeRed mit Modbus contrib.

ich werde wie Achim (oben) rät, am Master den 120Ohm Widerstand 
aktivieren und probieren.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.