Hi,
ich habe einen Modbus-Slave RTU mit ESP32 programmiert, es sendet sofort
eine Antwort an Master. Master is ein Python program. Mein Problem ist,
dass eine Read Anfrage über 1 Sekunde dauert.
Ist es normal bei der Schnittstelle? Ich habe mit 9600 und 115200
getestet. Beide dauert knapp über eine Sekunde.
1 Sekunde ist eher nicht normal. Allerdings ist Modbus nun auch nicht
superschnell. Es gibt keine Zykluszeiten die irgendwie garantiert
werden. Daher eher ungeeignet, wenn es auf Geschwindigkeit ankommt.
> Daher eher ungeeignet, wenn es auf Geschwindigkeit ankommt.
Kann man so allgemein nicht sagen. Technisch kann man vom Bus
selbst erwarten das er unmittelbar nach einer Anfrage eine
Antwort schickt.
Es mag aber natuerlich sein das ein Sensor selbst relativ
lange braucht um eine Antwort zu generieren.
Sowas sollte aber dann auch im Handbuch stehen.
Olaf
aus dem Wikipedia (https://de.wikipedia.org/wiki/Modbus#Modbus/RTU):
"Tritt zwischen zwei Zeichen eine Sendeunterbrechung auf, die länger als
1,5 Zeichen ist, so ist das Telegramm als unvollständig zu bewerten und
sollte vom Empfänger verworfen werden."
Wer braucht von den beiden eine Sekunde (oder länger)?
Ich programmiere Slaves immer so, daß sie ständig im Hintergrund
Messungen durchführen und im RAM ablegen. Sendet dann der Master eine
Anfrage, dann kann der Slave unmittelbar antworten und das Ergebnis aus
dem RAM senden.
Die Meßrate wählt man entsprechend den Erfordernissen. Z.B. einen
DS18B20 frage ich alle 5s ab, damit er nicht durch Eigenerwärmung die
Messung verfälscht.
STK500-Besitzer schrieb:> Wie lange der braucht, ist doch egal.
Wie lange der zum Auswerten der Antwort braucht, ist doch egal.
Die Anfragen an Slave (egal, ob read oder write), sollten immer
"Strings" sein, die am Stück gesendet werden können.
Peter D. schrieb:> Ich programmiere Slaves immer so, daß sie ständig im Hintergrund> Messungen durchführen und im RAM ablegen. Sendet dann der Master eine> Anfrage, dann kann der Slave unmittelbar antworten und das Ergebnis aus> dem RAM senden.
Nicht nur du.
> 1,5 Zeichen ist, so ist das Telegramm als unvollständig zu bewerten und> sollte vom Empfänger verworfen werden."
Innerhalb eines Telegramms, aber das ist was anderes als zwischen zwei
Telegrammen!
> Ich programmiere Slaves immer so, daß sie ständig im Hintergrund> Messungen durchführen und im RAM ablegen. Sendet dann der Master eine> Anfrage, dann kann der Slave unmittelbar antworten und das Ergebnis aus> dem RAM senden.
Das kann Wuenschenwert sein, aber auch totale Kacke. Nimm als Beispiel
mal einen Sensor der vom Messprinzip her langsam ist und den der
Anwender erstmal irgendwo reinsteckt um dann eine Messung auszuloesen.
Dann willst du nicht das Ergebnis der Luftmessung von kurz vorher
bekommen.
Es haengt halt sehr von der Anwendung ab.
Olaf
Anselm schrieb:> btw.: Den Slave zu programmieren, ist gar nicht so einfach, denn Modbus> via RS485 hat spezielle Timinganforderungen.
Höchstens die Zeit zwischen Empfang einer Anfrage und der Antwort
darauf.
Olaf schrieb:> Innerhalb eines Telegramms, aber das ist was anderes als zwischen zwei> Telegrammen!
Ich hatte irgendwas mit "Zeichenlänge" und "Timeout" im Kopf.
Genaueres gibt's im Wikipedia-Artikel.
> denn Modbus via RS485 hat spezielle Timinganforderungen.
Man hofft halt das moderne Microcontroller schnell genug sind das
man das selbst in so was schnarchigem wie Phyton hinbekommt. :)
Und man muss auch zugeben das mein uebliches Stromsparargument,
gerade bei Sensoren oft EXTREM wichtig, bei Modbus schon allein
durch den Busabschluss ausgehebelt wird. Da sollte dann auch ein
Controller drin sein der mit 50MHz laeuft.
Olaf
Vor 12 Jahren machte ich ein Sensorprojekt in der Firma mit Modbus. Da
mußten zum Testen und Kalibrierung ca. 100 16-bit Register zyklisch
geschrieben und gelesen werden. UC war ein STM32F103, der mit 36MHz
lief. BR war 19K2. Unter diesen Bedingungen waren über USB/RS-485 ein
paar komplette Transaktionen/s mit einem W7 PC bequem möglich. Zum
Testen Verwendete ich ein in-House LabVIEW Programm und für rohes Testen
während der Entwicklung MdBus. Das sollte einen typischen Anhaltspunkt
geben.