Forum: Mikrocontroller und Digitale Elektronik Modbus RTU Protokolländerung


von Matthias (ahamatta)


Lesenswert?

Hat einer Lust Modbus RTU2 in seiner Software zu implementieren?

Das würde dann statt der 3,5 Zeichen Zeit Nachrichtenabgrenzung ein 
Längenfeld im Messageheader übertragen?

: Bearbeitet durch User
von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Das würde dann statt der 3,5 Zeichen Zeit Nachrichtenabgrenzung ein
> Längenfeld im Messageheader übertragen?

Die Datenlänge ist doch schon teil des RTU-Protokolls.

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> Das würde dann statt der 3,5 Zeichen Zeit Nachrichtenabgrenzung ein
>> Längenfeld im Messageheader übertragen?
>
> Die Datenlänge ist doch schon teil des RTU-Protokolls.

Steht wo??

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Steht wo??

In der Spec?!
Ich weiß ja nicht, was du als Länge vorsieht, aber sowohl Register- als 
auch Coil-Zugriffe enthalten die Angabe der Nutzlast-Bytes.

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> Steht wo??
>
> In der Spec?!
> Ich weiß ja nicht, was du als Länge vorsieht, aber sowohl Register- als
> auch Coil-Zugriffe enthalten die Angabe der Nutzlast-Bytes.

Ah okay, also nicht direkt im Protokoll, sondern in der Umsetzung.

Ich hatte schon tagelang überlegt, wie ich das hinbekomme...

"Im RTU-Modus wird der Sendebeginn durch eine Sendepause von mindestens 
der 3,5-fachen Zeichenlänge markiert. Ein Zeichen hat eine Länge von 11 
Bit. Die Länge der Sendepause hängt somit von der 
Übertragungsgeschwindigkeit ab. Dies muss bei niedrigen Datenraten exakt 
eingehalten werden." - https://de.m.wikipedia.org/wiki/Modbus

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Ein Zeichen hat eine Länge von 11 Bit
1 Startbit, 8 Datenbits und 2 Stoppbits...

von Harald K. (kirnbichler)


Lesenswert?

Matthias schrieb:
> Modbus RTU2

Und was soll das sein? Hast Du das irgendwo aufgeschnappt?

Matthias schrieb:
> Im RTU-Modus wird der Sendebeginn durch eine Sendepause von mindestens
> der 3,5-fachen Zeichenlänge markiert.

Betonung liegt auf mindestens. Man kann ohne irgendein Problem auch 
sehr viel mehr Zeit zwischen zwei Telegrammen verstreichen lassen.

von Chris K. (kathe)


Lesenswert?

Hier gibts die docu:
https://modbus.org/specs.php

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> Ein Zeichen hat eine Länge von 11 Bit
> 1 Startbit, 8 Datenbits und 2 Stoppbits...

Ja, aber wenn ich jetzt die konkrete Implementation nicht kenne, schaffe 
ich keine Nachrichtenabgrenzung.

Aber, wenn das kein Problem ist 🤓

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Ja, aber wenn ich jetzt die konkrete Implementation nicht kenne, schaffe
> ich keine Nachrichtenabgrenzung.
>
> Aber, wenn das kein Problem ist 🤓

Du sprichts in Rätseln.
Entweder kannst du die Daten schon während des Empfangs parsen (und so 
die Länge bestimmen), oder du brauchst das Timeout.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Matthias schrieb:
> Rahul D. schrieb:
>> Matthias schrieb:
>>> Ein Zeichen hat eine Länge von 11 Bit
>> 1 Startbit, 8 Datenbits und 2 Stoppbits...
>
> Ja, aber wenn ich jetzt die konkrete Implementation nicht kenne, schaffe
> ich keine Nachrichtenabgrenzung.

Natürlich muss man die Specs aus Sicht eines Empfängers anders 
betrachten als aus Sicht eines Senders. Der Sender hat halt dafür zu 
sorgen, dass einerseits die 3,5 Zeichen Pause zwischen Nachrichten als 
Minimum garantiert sind, andererseits aber innerhalb einer Nachricht 
niemals eine Pause auftritt, die die Dauer dieser 3,5 Zeichen erreicht 
oder gar überschreitet.

Der Empfänger hingegen hat einfach nur alles >=3,5 Zeichen als 
Abgrenzung zwischen Nachrichten zu betrachten.

Aber dies hat doch nichts mit dem Thema deines Threads zu tun. Die 
Definition der Nachrichtenlänge im Header ist davon vollkommen 
unabhängig.

Du begreifst einfach nicht die Grundlagen des Protokolldesigns. Diese 
Sache mit der Pause als Nachrichtenabgrenzung dient nämlich genau dazu, 
dem Empfänger zu ermöglichen, auch dann korrekt (zumindest mit 
Minimalschaden) zu reagieren, wenn er z.B. die Langenangabe nicht 
korrekt empfangen hat. Trifft er z.B. auf eine PAUSE, bevor er die aus 
der Längenangabe entnommene Anzahl Bytes empfangen hat, weiß er, dass 
das Paket wohl ungültig sein muss und kann es verwerfen. Genauso 
umgekehrt: hat er eine lt. Längenangabe komplette Nachricht empfangen, 
bekommt aber innerhalb der nächsten 3,5 Zeichen keine PAUSE, dann kann 
er ebenfalls das Paket als ungültig verwerfen.

Sowas nennt man Protokoll-Redundanz und hilft enorm dabei, die 
Kommunikation auch unter widrigen Bedingungen bezüglich der 
Signalqualität am Leben zu erhalten.

von Matthias (ahamatta)


Lesenswert?

Es gibt aber per Definition keine Längenangabe in Modbus RTU.

Der Arduino hat, wenn man nicht nur die Zeit messen will, eine Auflösung 
von 40 Microsekunden.

Damit kann ich keine 3,5 Zeichenpause messen, Punkt aus.

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Der Arduino hat, wenn man nicht nur die Zeit messen will, eine Auflösung
> von 40 Microsekunden.
>
> Damit kann ich keine 3,5 Zeichenpause messen, Punkt aus.

Dafür nimmt man ja auch einen Timer (Triggern auf jedes empfange Byte; 
Überlauf ==> Frameende)
Oder eine Lib:
https://docs.arduino.cc/learn/communication/modbus/

(kenne ich nicht, da ich Modbus nicht auf dem Arduino nutze).

von Matthias (ahamatta)


Lesenswert?

Das ist das Modbus RTU Protokoll.

Dann kommen die Hersteller und sagen, wenn an meinem Eingang x Bytes 
ankommen, werden y Bytes zurückgeschickt.

Das ist die Implementierung, welche umsetzbar ist.

Daher der Vorschlag, z. B. wie bei PostgreSQL, eine Nachrichtenlänge 
mitzuschicken.

Dann braucht man keinen kompletten TCP-Stack für eine sichere 
Kommunikation.

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Dann kommen die Hersteller und sagen, wenn an meinem Eingang x Bytes
> ankommen, werden y Bytes zurückgeschickt.

Häh?
Bei Modbus liefert der Sklave immer nur die Anzahl an Bytes zurück, die 
der Master anfragt oder eine Quittierung auf einen Schreibbefehl.

Das Ding ist standardisiert. Wenn einer das was anderes mit macht, ist 
das kein Modbus mehr.

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> Der Arduino hat, wenn man nicht nur die Zeit messen will, eine Auflösung
>> von 40 Microsekunden.
>>
>> Damit kann ich keine 3,5 Zeichenpause messen, Punkt aus.
>
> Dafür nimmt man ja auch einen Timer (Triggern auf jedes empfange Byte;
> Überlauf ==> Frameende)
> Oder eine Lib:
> https://docs.arduino.cc/learn/communication/modbus/
>
> (kenne ich nicht, da ich Modbus nicht auf dem Arduino nutze).

Wie triggern? Ich dachte man hat einen Interrupt und addiert dann 
einfach die bekannte Zeit zwischen den Interrupt auf?

Oder gibt es bei den AVR sowas wie RDTSC?

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> Dann kommen die Hersteller und sagen, wenn an meinem Eingang x Bytes
>> ankommen, werden y Bytes zurückgeschickt.
>
> Häh?
> Bei Modbus liefert der Sklave immer nur die Anzahl an Bytes zurück, die
> der Master anfragt oder eine Quittierung auf einen Schreibbefehl.
>
> Das Ding ist standardisiert. Wenn einer das was anderes mit macht, ist
> das kein Modbus mehr.

Stimmt doch überhaupt nicht 🧐

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Matthias schrieb:
> Es gibt aber per Definition keine Längenangabe in Modbus RTU.

Doch, natürlich. Bei allen üblichen Kommandos gibt es die.

> Der Arduino hat, wenn man nicht nur die Zeit messen will, eine Auflösung
> von 40 Microsekunden.

Das kann ich nicht glauben. Und falls doch, wäre Arduino wohl die 
falsche Basis.

> Damit kann ich keine 3,5 Zeichenpause messen, Punkt aus.

DU kannst das vielleicht nicht. Schonmal was von Non-Blocking-IO und 
Interrupts gehört? Das geht auch auf Arduino-Basis. Führt aber natürlich 
dazu, dass der Komfort des standardmäßigen dümmlichen Polling verloren 
geht. Du musst es dann halt so umsetzen, wie es auch alle anderen auch 
machen, die nicht auf diese völlig nutzlose Arduino-Gülle aufsetzen.

von Flip B. (frickelfreak)


Lesenswert?

Matthias schrieb:
> Stimmt doch überhaupt nicht 🧐

https://modbus.org/specs.php

von Matthias (ahamatta)


Lesenswert?


von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Wie triggern? Ich dachte man hat einen Interrupt und addiert dann
> einfach die bekannte Zeit zwischen den Interrupt auf?
Für jedes komplett empfagene Byte liefert ein AVR (der vermutlich auf 
deinem Arduinoboard verbaut ist) einen RXC-Interrupt.
In dessen ISR kann man kurz mal einen Timer zurücksetzen, der auslöst, 
sobald die 3,5 Zeichen lang nicht empfangen wurde.
Zum Thema "Ich dachte.." fallen mir zwei Sprüch ein, die nicht ganz nett 
sind...

Matthias schrieb:
> Stimmt doch überhaupt nicht 🧐

Beweis' das Gegenteil.

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> Wie triggern? Ich dachte man hat einen Interrupt und addiert dann
>> einfach die bekannte Zeit zwischen den Interrupt auf?
> Für jedes komplett empfagene Byte liefert ein AVR (der vermutlich auf
> deinem Arduinoboard verbaut ist) einen RXC-Interrupt.
> In dessen ISR kann man kurz mal einen Timer zurücksetzen, der auslöst,
> sobald die 3,5 Zeichen lang nicht empfangen wurde.
> Zum Thema "Ich dachte.." fallen mir zwei Sprüch ein, die nicht ganz nett
> sind...
>
> Matthias schrieb:
>> Stimmt doch überhaupt nicht 🧐
>
> Beweis' das Gegenteil.

Was für einen Timer? Das Teil hat keine Uhr...

Also zumindest keine mit der Genauigkeit 👎

: Bearbeitet durch User
von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Was für einen Timer? Das Teil hat keine Uhr...

Freitag ist seit 2 Tagen vorbei...
Hast du dir mal den Link angeugckt, den nich gepostet habe?
Offensichtlich ja nicht.

Arduino ist ganz nett für den (Wieder-) Einstieg, aber sobald es etwas 
ab vom Künstler-Maistream geht, MUSS man sich auch mal das Datenblatt 
des verbeuten Controllers antum (und vielleicht auch nicht nur den 
Wikipedia-Artikel lesen).

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> Was für einen Timer? Das Teil hat keine Uhr...
>
> Freitag ist seit 2 Tagen vorbei...
> Hast du dir mal den Link angeugckt, den nich gepostet habe?
> Offensichtlich ja nicht.
>
> Arduino ist ganz nett für den (Wieder-) Einstieg, aber sobald es etwas
> ab vom Künstler-Maistream geht, MUSS man sich auch mal das Datenblatt
> des verbeuten Controllers antum (und vielleicht auch nicht nur den
> Wikipedia-Artikel lesen).

Der AVR2560 eignet sich doch mit seinen 4 UART perfekt, das kann ein Pi 
auch nicht besser...

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Matthias schrieb:

> Was für einen Timer? Das Teil hat keine Uhr...

Praktisch jeder µC hat Timer. Und ganz sicher alle, für die es die 
Arduino-Umgebung gibt.

Willst du trollen oder was soll dieser Quatsch?

> Also zumindest keine mit der Genauigkeit 👎

Unsinn. Welche von Arduino unterstützte Hardware soll das denn sein?

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Der AVR2560 eignet sich doch mit seinen 4 UART perfekt, das kann ein Pi
> auch nicht besser...

Und? Was soll dieser Satz aussagen?
Mir ist sowohl der ATmega2560 (Das Ding, das auf dem gleichnamigen 
Arduino-Board verbaut ist) als auch Raspberry Pis bekannt.

von Flip B. (frickelfreak)


Lesenswert?

Ich fasse mal die Specs für dich zusammen.

Die Datenlänge ist im Modbus-Header im Function-Bereich des headers als 
Byte/Register Count dokumentiert. Die Header-Länge ist definiert, daher 
auch die Nachrichtenlänge. Dass kein explizites Length byte am anfang 
des headers steht tut dieser funktion keinen abbruch.

Die Auswertung der Pause klappt mit jedem Mikrocontroller, der 
wenigstens einen Timer besitzt. Ich vermute, deiner kann das auch. 
Vielleicht ist der nicht passend von deiner Programmierumgebung 
voreingestellt, dann ist es deine aufgabe dies zu tun. Nur weil der 
native Systick nur x us auflösung hat, bedeutet das nicht, dass es 
keinen freien Timer gibt, der feiner auslöst.

Zudem empfehle ich, einen (Protokoll-)Standart erst dann "verbessern" zu 
wollen, wenn man ihn verstanden hat, es performanceschwierigkeiten gibt 
UND kein besserer Protokollstandart existiert.

Dein Problem scheint auch auf erkennung des Nachrichtenendes zu beruhen. 
Ich kann dir garantieren, ein anfängliches Lenght-byte würde da 
keineswegs helfen, da sich damit jeder Empfänger nach kleinsten 
übertragungsfehlern festfahren würde.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Matthias schrieb:
> Der Arduino hat, wenn man nicht nur die Zeit messen will, eine Auflösung
> von 40 Microsekunden.
>
> Damit kann ich keine 3,5 Zeichenpause messen, Punkt aus.

Mit welcher Baudrate meinst Du hier arbeiten zu müssen?

von Matthias (ahamatta)


Lesenswert?

Ob S. schrieb:
> Matthias schrieb:
>
>> Was für einen Timer? Das Teil hat keine Uhr...
>
> Praktisch jeder µC hat Timer. Und ganz sicher alle, für die es die
> Arduino-Umgebung gibt.
>
> Willst du trollen oder was soll dieser Quatsch?
>
>> Also zumindest keine mit der Genauigkeit 👎
>
> Unsinn. Welche von Arduino unterstützte Hardware soll das denn sein?

"Think a little about your problem.
A 16 MHz Arduino executes its fastest instructions in 62.5 ns."

Das sind irgendwo so um 16 noop Instruktionen pro Mikrosekunde.

D.h. wenn ich jetzt eine Mikrosekundenauflösung brauche, kann ich sonst 
nichts mehr machen, weil ein 64 Bit adder + Interrupt mindestens 16 
Instruktionen braucht.

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> "Think a little about your problem.
> A 16 MHz Arduino executes its fastest instructions in 62.5 ns."
>
> Das sind irgendwo so um 16 noop Instruktionen pro Mikrosekunde.
>
> D.h. wenn ich jetzt eine Mikrosekundenauflösung brauche, kann ich sonst
> nichts mehr machen, weil ein 64 Bit adder + Interrupt mindestens 16
> Instruktionen braucht.

Komisch, dass Modbus aus den 1970er oder so stammt.
Damals hat man das schon hinbekommen, obwohl Mikrocontroller mit 1 oder 
2 MHz liefen.

Arduino passt nun mal nur bedingt für zeitkritische Anwendungen.

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> "Think a little about your problem.
>> A 16 MHz Arduino executes its fastest instructions in 62.5 ns."
>>
>> Das sind irgendwo so um 16 noop Instruktionen pro Mikrosekunde.
>>
>> D.h. wenn ich jetzt eine Mikrosekundenauflösung brauche, kann ich sonst
>> nichts mehr machen, weil ein 64 Bit adder + Interrupt mindestens 16
>> Instruktionen braucht.
>
> Komisch, dass Modbus aus den 1970er oder so stammt.
> Damals hat man das schon hinbekommen, obwohl Mikrocontroller mit 1 oder
> 2 MHz liefen.
>
> Arduino passt nun mal nur bedingt für zeitkritische Anwendungen.

Mein Modem in den späten 1990'er hatte halt 38.400 bit/s und damit war 
man schon weit vorne.

Musst halt mit der Bitrate sehr weit runter 🤗

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Mein Modem in den späten 1990'er hatte halt 38.400 bit/s und damit war
> man schon weit vorne.
>
> Musst halt mit der Bitrate sehr weit runter 🤗

Und ich dachte, mein ADHS sei schlimm.
Was hat das eine mit dem anderne zu tun?
Wie gesagt: der Trollfreitag war vor zwei Tagen.

von Matthias (ahamatta)


Lesenswert?

Das ist die Übertragungsgeschwindigkeit von 1970...

https://de.m.wikipedia.org/wiki/Teletype_Modell_33

"Die Schreibleistung eines durchschnittlich schnellen 
10-Finger-Schreibers liegt zwischen 200 und 400 Anschlägen je Minute. 
Bei nationalen Wettbewerben erreichen Spitzenschreiber Geschwindigkeiten 
von bis zu 750 Anschlägen pro Minute, bei internationalen auch bis zu 
900 Anschläge (vgl. Tastschreiben)."

Und ich kann dir sagen, dass die Geräte langsamer übertragen haben als 
man schreiben konnte 😋

von Frank K. (fchk)


Lesenswert?

So, mal aus der Praxis: Die meisten Implementation checken die 3.5 chars 
zwischen zwei Bytes innerhalb eines Paketes nicht. Das kannst Du also 
auch weglessen - damit befindest Du Dich in guter Gesellschaft.

Das Protokoll selber darfst Du natürlich nicht ändern - kein Stück. Aber 
das ist auch gar nicht notwendig. Bei vielen Befehlen weißt Du schon 
nach dem zweiten Byte (1. Byte: Slave-Adresse, 2. Byte: Funktionscode), 
wie viele Bytes noch kommen. Bei Multi-Value Funktionen weißt Du 
spätestens 4 Bytes später die Länge des kompletten Paketes. Das ist also 
kein prinzipielles Problem - andere Leute schaffen das auch.

fchk

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Matthias schrieb:

> "Think a little about your problem.
> A 16 MHz Arduino executes its fastest instructions in 62.5 ns."
>
> Das sind irgendwo so um 16 noop Instruktionen pro Mikrosekunde.
>
> D.h. wenn ich jetzt eine Mikrosekundenauflösung brauche, kann ich sonst
> nichts mehr machen, weil ein 64 Bit adder + Interrupt mindestens 16
> Instruktionen braucht.

Das ist korrekt. Jeder vernünftige Mensch würde daraus den Schluss 
ziehen, dass es kompletter Schwachsinn wäre, diese Sache mit so etwas 
wie einem interruptgetrieben Systick zu behandeln. Dein Problem ist halt 
nur, dass genau das halt der normale Arduino-Weg ist und du nix anderes 
kennst...

Musst du einfach mal dazu lernen. Du bist ein typisches Beispiel für 
jemanden, der heftig in die Arduino-Falle getappt ist.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Ob S. schrieb:
> Matthias schrieb:
>> Es gibt aber per Definition keine Längenangabe in Modbus RTU.
>
> Doch, natürlich. Bei allen üblichen Kommandos gibt es die.

Jein. Die meisten Requests enthalten kein Längenfeld, welches explizit 
die Gesamtlänge des Pakets oder der Nutzdaten angibt. Bei einigen 
Requests muss man sich die Länge selbst z.B. anhand der Anzahl an Coils 
oder Registern ausrechnen, bei anderen gibt es das Feld "Quantity to 
Write", welches man auf die Headerlänger draufschlagen muss.

Nur in den Responses gibt es immer das Feld "Byte Count", welches die 
Gesamtlänge der Nutzdaten angibt. Diese Asymmetrie ist unschön, aber nun 
mal gegeben.

Richtig problematisch kann es werden, wenn einige Slave auch Pakete, die 
nicht an sie selbst adressiert sind, auf Korrektheit prüfen und dabei 
die Pause zwischen Request des Masters und Response eines anderen Slaves 
nicht erkennen. Und bei der nächsten Abfrage solch eines überpeniblen 
Slaves gibt es dann eine nur eine Fehlermeldung. So etwas hat uns mal 
eine mehrtägige Suche nach Kommunikationsproblemen mit einem bestimmten 
Gerätetyp beschert. Irgendwann fand ich dann heraus, dass man bei diesen 
Geräten erst einmal ein Konfigurationsregister beschreiben muss, in dem 
die Behandlung des o.a. Fehlers explizit unterbunden wird. 
Glücklicherweise lässt sich dieses Register nichtflüchtig speichern, so 
dass es nicht mehr zu diesem Fehlerbild kommen kann, während gerade 
diese Konfiguration stattfindet. Denn auch genau dieser Gerätetyp 
antwortet selbst auch so schnell auf Requests, dass die 3,5 Zeichen bzw. 
1,75 ms nicht eingehalten werden.

Nichtdestotrotz labert aber der TE natürlich mal wieder den allseits 
bekannten völligen Unsinn über Protokollstacks. Das kennen wir ja schon 
aus anderen Threads.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Harald K. schrieb:
> Mit welcher Baudrate meinst Du hier arbeiten zu müssen?

Der TE hat doch schon hier in seiner endlosen Weisheit verkündet, dass 
Modbus immer mit 19.200 Bit/s betrieben werde:

Beitrag "Re: Grundsatzfrage zum Bustransfer"

von Matthias (ahamatta)


Lesenswert?

Man könnte schon den Prescaler eines Timer auf 1 stellen, damit müsste 
ich auf 16 us pro Erhöhung kommen?

Hat das schon mal einer probiert? Nicht, dass das dann unnötig die 
Nachrichten zerhackt, wenn man eh weiß was ankommen muss??

von Matthias (ahamatta)


Lesenswert?

So, jetzt habt ihr erst mal wieder Ruhe, ich gehe ins Bett und schaufele 
morgen weiter. Nächstes WE vllt. wieder 😇

: Bearbeitet durch User
von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> So, jetzt habt ihr erst mal wieder Ruhe, ich gehe ins Bett und
> schaufele
> morgen weiter. Nächstes WE vllt. wieder 😇

Und lass den Cannabiskonsum, wenn du hier Fragen beantwortet haben 
willst.

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> So, jetzt habt ihr erst mal wieder Ruhe, ich gehe ins Bett und
>> schaufele
>> morgen weiter. Nächstes WE vllt. wieder 😇
>
> Und lass den Cannabiskonsum, wenn du hier Fragen beantwortet haben
> willst.

?? Was soll denn die Unterstellung?

von Peter D. (peda)


Lesenswert?

Matthias schrieb:
> Der Arduino hat, wenn man nicht nur die Zeit messen will, eine Auflösung
> von 40 Microsekunden.

Arduino ist ein Framework, was auf dem Mikrocontroller AVR aufsetzt. Es 
belegt einige Ressourcen (z.B. Timer 0), alle anderen sind weiterhin 
frei verfügbar. Arduino ist quelloffen, d.h. Du kannst jederzeit eigene 
Erweiterungen hinzufügen.

Matthias schrieb:
> Damit kann ich keine 3,5 Zeichenpause messen, Punkt aus.

Das ist eine Minimalangabe, mehr ist natürlich erlaubt.
Der Sender kann z.B. minimal 4 Bytezeiten warten, der Empfänger kann 
alles größer 3 Bytezeiten als Sync betrachten.
Genauer mußt Du nicht messen (und macht auch keiner).

Und wie schon gesagt wurde, es gibt Timer und Interrupts. Du mußt die 
Zeiten also nicht in Software verwarten.
Du kannst z.B. ein Compareregister eines Timers auf 3,5 Bytezeiten laden 
und wenn der nächste Empfangsinterrupt kommt, schaust Du einfach nach, 
ob das Compareflag gesetzt ist oder nicht.

Du darfst sämtliche Ressourcen des Mikrocontrollers benutzen. Nur mußt 
Du dazu auch ins Datenblatt in die entsprechenden Abschnitte schauen. 
Ein guter Programmierer macht das auch.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Peter D. schrieb:
> Ein guter Programmierer macht das auch.

Du hast den mit Salz verkrusteten Finger in die Wunde gesteckt ...

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Es gibt sogar einen Haufen Microcontroller, zum Beispiel etliche aus der 
Baureihe STM32, deren integrierte U(S)ARTS einen speziellen Modbus-Modus 
haben und eigenständig die Empfangspause bestimmen und das ganze 
signalisieren können. Hierbei wird aber natürlich nicht genau gemessen, 
ob es wirklich 3,5000 oder vielleicht doch nur 3,493 Zeichenäquivalente 
waren, sondern alles ab 2 Zeichenäquivalenten als gültig anerkannt.

Allerdings nutzen viele Modbus-Protokollstacks dieses Feature nicht aus, 
sondern verwenden eben die schon erwähnten Hardwaretimer, die so gar 
nichts mit einer Systemuhr zu tun haben.

von Matthias (ahamatta)


Lesenswert?

Andreas S. schrieb:

> Allerdings nutzen viele Modbus-Protokollstacks dieses Feature nicht aus,
> sondern verwenden eben die schon erwähnten Hardwaretimer, die so gar
> nichts mit einer Systemuhr zu tun haben.

Das ist kein Protokollstack. Modbus RTU lässt sich nicht mit der 
Zeichenpause auf ein Teletype setzen.

Selbst, wenn ich da den Timeout im Teletype habe, was mache ich dann mit 
den Daten im Speicher?

Das lässt sich auch nicht sinnvoll mit select() abarbeiten?

Da muss man in der Theorie nach jedem Timeout den Speicherbereich 
wechseln und das Nachrichtenbasiert an das Programm durchreichen.

Zeichenbasiert ist da imho nichts zu machen...

von Harald K. (kirnbichler)


Lesenswert?

Matthias schrieb:
> Das ist kein Protokollstack. Modbus RTU lässt sich nicht mit der
> Zeichenpause auf ein Teletype setzen.

Bezahlt Dich irgendwer für den Quark, den Du da schreibst?

von Matthias (ahamatta)


Lesenswert?

Harald K. schrieb:
> Matthias schrieb:
>> Das ist kein Protokollstack. Modbus RTU lässt sich nicht mit der
>> Zeichenpause auf ein Teletype setzen.
>
> Bezahlt Dich irgendwer für den Quark, den Du da schreibst?

Versuch es doch selbst mal...

Und idealerweise zeigst du uns dann auch den Lösungsweg, damit das nicht 
nur Bla Bla ist 😤

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Matthias schrieb:
> Versuch es doch selbst mal...

Was soll ich versuchen? Besseren Quark zu schreiben als Du?

von Matthias (ahamatta)


Lesenswert?

Zeig doch mal ein paar Zeilen Pseudocode, Modbus RTU mit Zeichenpause 
und select(). 💩

von Harald K. (kirnbichler)


Lesenswert?

Matthias schrieb:
> Zeig doch mal ein paar Zeilen Pseudocode, Modbus RTU mit Zeichenpause
> und select().

Wieso select()? Was soll der Schwachsinn?

von Matthias (ahamatta)


Lesenswert?

Irgendwo muss ich ja alles zusammenbringen...

https://youtu.be/uMP2J4IFBl4

von Michael B. (laberkopp)


Lesenswert?

Matthias schrieb:
> Hat einer Lust Modbus RTU2 in seiner Software zu implementieren?

Nö.

Matthias schrieb:
> Es gibt aber per Definition keine Längenangabe in Modbus RTU.
> Der Arduino hat, wenn man nicht nur die Zeit messen will, eine Auflösung
> von 40 Microsekunden.
> Damit kann ich keine 3,5 Zeichenpause messen, Punkt aus.

Ja Kacke, dann kannst du halt nicht programmieren.

Andere kriegen Modbus RTU umgesetzt.

Warum also nur wegen deiner Programmierdefizite einen zweiten Standard 
erfinden ?

von Matthias (ahamatta)


Lesenswert?

Michael B. schrieb:
> Matthias schrieb:
>> Hat einer Lust Modbus RTU2 in seiner Software zu implementieren?
>
> Nö.
>
> Matthias schrieb:
>> Es gibt aber per Definition keine Längenangabe in Modbus RTU.
>> Der Arduino hat, wenn man nicht nur die Zeit messen will, eine Auflösung
>> von 40 Microsekunden.
>> Damit kann ich keine 3,5 Zeichenpause messen, Punkt aus.
>
> Ja Kacke, dann kannst du halt nicht programmieren.
>
> Andere kriegen Modbus RTU umgesetzt.
>
> Warum also nur wegen deiner Programmierdefizite einen zweiten Standard
> erfinden ?

Der Huawei kann Modbus TCP und der Growatt mit modifizierter Firmware 
(https://github.com/mwalle/shinelanx-modbus).

Modbus TCP behebt scheinbar das Problem, aber man braucht halt den 
kompletten TCP-Stack.

von Matthias (ahamatta)


Angehängte Dateien:

Lesenswert?

So sieht übrigens ein Protokollstapel aus.

von Klaus (feelfree)


Lesenswert?

Matthias schrieb:
> So sieht übrigens

jeder

> Protokollstapel aus

der auf TCP/IP bzw UDP/IP aufsetzt.

Hat nix mit modbus zu tun.

: Bearbeitet durch User
Beitrag #7686606 wurde vom Autor gelöscht.
von Rahul D. (rahul)


Lesenswert?

Klaus schrieb:
> Hat nix mit modbus zu tun.

Naja, "nix" ist nicht ganz richtig: Modbus geht auch über TCP/IP...
Aber nicht per UART, sondern Ethernet.

Matthias schrieb:
> Modbus TCP behebt scheinbar das Problem, aber man braucht halt den
> kompletten TCP-Stack.

Wieso können eigentlich alle anderen, die sich mit Modbus-RTU 
auseinandersetzen müssen, dieses "Problem" beheben?

Wenn dir das zu kompliziert ist, such dir einfach was einfacheres (z.B. 
Blümchen pflücken).
Es liegt nicht am Modbus, sondern daran, dass du stur an irgendwas 
festhälst, was nicht einfach so mit dem Modbus umgehen kann ("Arduino in 
Reinform").

Ich hatte dir einen Link zu einer Modbus-Library für Arduino 
eingestellt.
Da du bis jetzt nicht darauf eingegangen bist, hast du dich mit der 
Bibliothek offensichtlich nicht beschäftigt.

von Frank K. (fchk)


Lesenswert?

Matthias schrieb:
> So sieht übrigens ein Protokollstapel aus.

Ja. Und Modbus wurde im Jahre 1976 erfunden, und damals haben sich die 
Entwickler bei Modicon einfach nicht um das OSi-Schichtenmodell 
gekümmert. Das mag zwar unschön sein, ist aber für alle anderen außer 
Dir kein wirkliches Problem.

fchk

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> So sieht übrigens ein Protokollstapel aus.

Modbus ist halt Layer 2...

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Matthias schrieb:
>> So sieht übrigens ein Protokollstapel aus.
>
> Modbus ist halt Layer 2...

Nein, mit dem Zeitlimit Layer 1.

von Matthias (ahamatta)


Lesenswert?

Rahul D. schrieb:
> Klaus schrieb:
>> Hat nix mit modbus zu tun.
>
> Naja, "nix" ist nicht ganz richtig: Modbus geht auch über TCP/IP...
> Aber nicht per UART, sondern Ethernet.
>

Modbus TCP geht über UART und Ethernet. Keine Ahnung, was ihr da auf 
euren Mikrocontroller seit Jahrzehnten hinschlampt.

"Protokollaufbau

Transaktionsnummer  Protokollkennzeichen  Zahl der noch folgenden Bytes 
Adresse  Funktion  Daten
2 Byte  2 Byte (immer 0x0000)  2 Byte (n + 2)  1 Byte  1 Byte  n Byte
Dadurch, dass hier keine CRC-Prüfsummenbytes zu berechnen sind, ist die 
Implementierung eines Treibers für die TCP-Schnittstelle einfacher als 
für die serielle Schnittstelle, sofern man auf eine vorhandene 
TCP-Implementierung aufsetzen kann." - 
https://de.m.wikipedia.org/wiki/Modbus#Modbus/TCP

: Bearbeitet durch User
von Matthias (ahamatta)



Lesenswert?

Zum Vergleich der TCP-Header und Modbus TCP-Payload.

Beitrag #7686793 wurde von einem Moderator gelöscht.
von J. S. (jojos)


Lesenswert?

Modbus RTU ist eine Quälerei für die CPU durch die Zeichenorientierte 
Übertragung, nicht zu vergessen auch die Steuerung von Rx/Tx des 
Treibers bei Halbduplex. Bei TCP ist es effizienter weil sich die HW um 
das Bitgefriemel kümmert, Daten werden als Block geschickt/empfangen 
ohne die CPU für jedes Byte zu unterbrechen. Natürlich einen Controller 
mit ETH Interface vorausgesetzt, aber da gibt es heutzutage reichlichst.
Für gemütliche Übertragung mit wenigen zig kB/s reicht Modbus RTU sicher 
oft genug auch, für schnelle Statusabfragen ist die serielle Varianten 
weniger gut.

von Klaus (feelfree)


Lesenswert?

Matthias schrieb:
> Zum Vergleich der TCP-Header und Modbus TCP-Payload.

Dass Du keine Ahnung hast wissen wir inzwischen alle, aber warum 
bekommst du deinen Schreibdurchfall nicht in Griff?

von Robert M. (r_mu)


Lesenswert?

J. S. schrieb:
> Modbus RTU ist eine Quälerei für die CPU durch die Zeichenorientierte
> Übertragung, nicht zu vergessen auch die Steuerung von Rx/Tx des
> Treibers bei Halbduplex. Bei TCP ist es effizienter weil sich die HW um
> das Bitgefriemel kümmert, Daten werden als Block geschickt/empfangen
> ohne die CPU für jedes Byte zu unterbrechen. Natürlich einen Controller
> mit ETH Interface vorausgesetzt, aber da gibt es heutzutage reichlichst.
> Für gemütliche Übertragung mit wenigen zig kB/s reicht Modbus RTU sicher
> oft genug auch, für schnelle Statusabfragen ist die serielle Varianten
> weniger gut.

Das kann man so allgemein nicht sagen, kommt auf die Hardware drauf an. 
Die typischen STM32 UARTs z.B. können automatisch das 
RS485-driver-enable signal generieren, da die CPU bei Anfang/Ende des 
Telegrams aber so oder so etwas zu tun hat ist es auch kein großer 
Zusatzaufwand einen GPIO pin zu togglen.

Weiters können besagte UARTS DMA Transfers und können nach Ablauf einer 
einstellbaren Frist in der nichts empfangen wird einen Interrupt 
generieren, damit spart man sich das manuelle mit-tracken der Timeouts. 
Eine einfache Implementierung die erst nach Ablauf der Timeouts ein 
komplettes Telegram verdaut und alles per DMA transferiert kommt mit 
zwei Interrupts pro Request/Response aus. Baudraten bis 2,5mps und 10k 
Pakete pro Sekunde sind damit kein Problem auf einem kleinen STM32F0.

von Flip B. (frickelfreak)


Lesenswert?

J. S. schrieb:
> Bei TCP ist es effizienter weil sich die HW um
> das Bitgefriemel kümmert

Ah ja, die TCP hardware im Arduino / AVR, wer kennt sie nicht.

Wie schon häufiger geschrieben, hat der µC entweder USART mit nativer 
Modbus unterstützung, oder nicht. Und wenn der Computer eine dedizierte 
Netzwerkkarte hat, dann vielleicht auch TCP in "hardware". Falls nein, 
passiert das eben in einem Software-stack, aber für einen modernen 
Programmierer ist das alles "Schwarze Magie" die man unmöglich selbst 
programmieren kann.

Programmieren können ist halt mehr, als "ich will... " in das 
ChatGPT-Prompt einzugeben

: Bearbeitet durch User
von Matthias (ahamatta)


Lesenswert?

Dumm daher reden und sich trotzdem teuer verkaufen ist auch eine Kunst.

von J. S. (jojos)


Lesenswert?

Der AVR hat auch kein DMA. Und es gibt genügend Arduinos mit STM32 oder 
anderen 32 Bittern, auch mit Ethernet. Allerdings ist die Modbus RTU 
Implementierung selbst auf der Portenta Machine Control bescheiden.

von Matthias (ahamatta)


Lesenswert?

Kinder, das führt zu nichts. Wenn es offensichtlich zu schwer ist, das 
fehlerfrei zu implementieren, sollte man es lieber gleich bleiben 
lassen.

Für so einen Blödsinn ist mir meine Zeit zu schade!

von Michael B. (laberkopp)


Lesenswert?

Matthias schrieb:
> Kinder, das führt zu nichts. Wenn es offensichtlich zu schwer ist,
> das fehlerfrei zu implementieren

Für dich.

> sollte man es lieber gleich bleiben
> lassen.

Also lass es.

> Für so einen Blödsinn ist mir meine Zeit zu schade!

Genau, der Blödsinn ein inkompatibles Protokoll neu zu erfinden bloss 
weil man zu blöd ist, das programmieren zu können, was andere seit 48 
Jahren erfolgreich schaffen.

Eine timeout braucht man sowieso und immer, um Kommunikationsfehler 
erkennen zu können ohne die ganze Kiste zu blockieren.

: Bearbeitet durch User
von Matthias (ahamatta)



Lesenswert?

Easy going...

von Robert M. (r_mu)


Lesenswert?

Matthias schrieb:
> Kinder, das führt zu nichts. Wenn es offensichtlich zu schwer ist, das
> fehlerfrei zu implementieren, sollte man es lieber gleich bleiben
> lassen.
>
> Für so einen Blödsinn ist mir meine Zeit zu schade!

Die wirklichen Fehler (eher Versäumnisse) am modbus-Protokoll sind nicht 
ein fehlendes Längenfeld in der RTU Variante (welches so explizit auch 
nicht benötigt wird) sondern Dinge wie big endian byte order (da könnte 
man noch streiten, aber heute populäre Architekturen sind alle little 
endian), vor allem aber fehlende Fliesskommazahlen und andere 
Ganzzahlentypen als vorzeichenbehaftet 16bit. Sicher gibts da immer 
Workarounds, in der freien Wildbahn scheint aber jede mögliche 
Kombination vorzukommen wie man z.B 32 Bit floats in 2 16 Bit Register 
packt, schön ist das nicht.

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Modbus TCP geht über UART und Ethernet. Keine Ahnung, was ihr da auf
> euren Mikrocontroller seit Jahrzehnten hinschlampt.

Wir machen das noch nicht sooo lange (keine 10 Jahre), dafür 
funktioniert es aber ziemlich gut.

Robert M. schrieb:
> Das kann man so allgemein nicht sagen, kommt auf die Hardware drauf an.
> Die typischen STM32 UARTs z.B. können automatisch das
> RS485-driver-enable signal generieren, da die CPU bei Anfang/Ende des
> Telegrams aber so oder so etwas zu tun hat ist es auch kein großer
> Zusatzaufwand einen GPIO pin zu togglen.
Teilweise sind die sogar schon richtig Modbus-RTU-kompatibel, indem man 
die Timeoutlänge angeben kann.

Naja, ich habe es hinbekommen. Damit ist für diese "Diskussion" beendet.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Robert M. schrieb:
> Die wirklichen Fehler (eher Versäumnisse) am modbus-Protokoll sind nicht
> ein fehlendes Längenfeld in der RTU Variante (welches so explizit auch
> nicht benötigt wird) sondern Dinge wie big endian byte order (da könnte
> man noch streiten, aber heute populäre Architekturen sind alle little
> endian),

Bei der Gelegenheit könnten wir dann auch gleich die Endianess in den 
Headern von TCP/IP glattziehen.

> vor allem aber fehlende Fliesskommazahlen und andere
> Ganzzahlentypen als vorzeichenbehaftet 16bit. Sicher gibts da immer
> Workarounds, in der freien Wildbahn scheint aber jede mögliche
> Kombination vorzukommen wie man z.B 32 Bit floats in 2 16 Bit Register
> packt, schön ist das nicht.

Wahrscheinlich ist es mittlerweile viel zu spät, um dort noch 
korrigierend eingreifen zu können, da es Unmenge an Bestandsgeräten 
gibt, die auf den o.a. Workarounds basieren. Das wäre vermutlich ähnlich 
erfolgversprechend wie die Vereinheitlichung der Aderfarben in 
Elektroinstallation, Schaltschrankbau un Elektronik.

von Matthias (ahamatta)


Lesenswert?

Ein neuer Wechselrichter ist kein Bestandsgerät. Da muss der Hersteller 
die alte Scheiße nicht zwingend einsetzen.

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Ein neuer Wechselrichter ist kein Bestandsgerät. Da muss der
> Hersteller
> die alte Scheiße nicht zwingend einsetzen.

Aber vielleicht will der eine oder andere das Ding an einem vorhanden 
Gerät als Ersatz betreiben.
Alle anderen sind natürlich daran schuld, dass du das nicht hinbekommst.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Matthias schrieb:
> Ein neuer Wechselrichter ist kein Bestandsgerät. Da muss der Hersteller
> die alte Scheiße nicht zwingend einsetzen.

Hast Du das dem Hersteller schon erzählt? Und was sagt er dazu?

von Michael B. (laberkopp)


Lesenswert?

Rahul D. schrieb:
> Aber vielleicht will der eine oder andere das Ding an einem vorhanden
> Gerät als Ersatz betreiben.

Wird schwierig bei dem nicht-vorhanden Kommando- und 
Registerbelegungsstandard.

von Rahul D. (rahul)


Lesenswert?

Michael B. schrieb:
> Rahul D. schrieb:
>> Aber vielleicht will der eine oder andere das Ding an einem vorhanden
>> Gerät als Ersatz betreiben.
>
> Wird schwierig bei dem nicht-vorhanden Kommando- und
> Registerbelegungsstandard.

Wer sagt, dass der Käufer des Ersatzteils das nicht weiß?
Manche Hersteller liefern Geräte mit derselben oder einer erweiterten 
Registerbelegung aus.
Die werden u.U. auch nicht immer alles (Teststände, andere Prüfmittel 
etc.) für eine Neuentwicklung über den Haufen werfen.

"Aufwärtskompatibilität" nennt man sowas meines Wissen nach.

Wenn man einem Modbus-Gerät einen nicht unterstützten Funktionscode oder 
eine nicht verfügbare Adresse liefert, sollte es im Regelfall eine 
Exception zurückliefern; Oder es passiert gar nichts.

Die Registerbelegung kann natürlich geheim sein, wenn man seine Geräte 
nur innerhalb der eigenen System zulassen will.

von Matthias (ahamatta)


Lesenswert?

Ganz ehrlich, mir ist es wurscht.

Ich mache nach der Solaranlagensteuerung mit höchster Wahrscheinlichkeit 
eh nichts mehr mit Modbus.

Meine Programmierkarriere ist am ausklingen und ich mache höchstens noch 
das fertig, was ich angefangen habe.

Und dann arbeiten, wenn sich damit Geld verdienen lässt, andere an der 
Software weiter, oder eben nicht.

So einfach ist das...

Beitrag #7687773 wurde von einem Moderator gelöscht.
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Matthias schrieb:
> Meine Programmierkarriere ist am ausklingen

Das ist ein sehr guter Entschluss.

von Klaus (feelfree)


Lesenswert?

Matthias schrieb:
> nd ich mache höchstens noch
> das fertig, was ich angefangen habe.

Dann wird's hier ja in 5,6 Jahren endlich ruhiger.

von Matthias (ahamatta)


Lesenswert?

Andreas S. schrieb:
> Matthias schrieb:
>> Meine Programmierkarriere ist am ausklingen
>
> Das ist ein sehr guter Entschluss.

Danke, der Entschluss ist schon etwas älter. Ich habe dann umgeschult zu 
Immobilien 😂

von Harald K. (kirnbichler)


Lesenswert?

Matthias schrieb:
> Meine Programmierkarriere ist am ausklingen

So würde ich das auch einschätzen. Du hast eindeutig andere 
Primärqualifikationen.

von Matthias (ahamatta)


Lesenswert?

Harald K. schrieb:
> Matthias schrieb:
>> Meine Programmierkarriere ist am ausklingen
>
> So würde ich das auch einschätzen. Du hast eindeutig andere
> Primärqualifikationen.

Nee, ich bin einfach schon zu alt und habe keine große Lust mehr mich 12 
Stunden am Tag vor den Bildschirm zu kleben, oder behelfsweise 
zwischenzeitlich Haltungsfehlstellungen auf dem Laufband zu 
therapieren...

https://youtu.be/jYUZAF3ePFE

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Matthias schrieb:
> ich bin einfach schon zu alt und habe keine große Lust mehr mich 12
> Stunden am Tag vor den Bildschirm zu kleben

Aber für's Forum reicht's doch auch...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Matthias schrieb:
> habe keine große Lust mehr mich 12 Stunden am Tag vor den Bildschirm zu
> kleben
Warum tust du es dann trotzdem und postest am laufenden Meter unnütze 
YT-Filmchen?

Ein Hinweis: wenn du so weitermachst musst du dir einen neuen Usernamen 
ausdenken.

von Matthias (ahamatta)


Lesenswert?

Lothar M. schrieb:
> Matthias schrieb:
>> habe keine große Lust mehr mich 12 Stunden am Tag vor den Bildschirm zu
>> kleben
> Warum tust du es dann trotzdem und postest am laufenden Meter unnütze
> YT-Filmchen?
>
> Ein Hinweis: wenn du so weitermachst musst du dir einen neuen Usernamen
> ausdenken.

Nö, müssen nicht.

Übrigens ist ja eh alles geklärt, oder nicht? Das Modbus-Protokoll 
bleibt wie es ist, ich programmiere nur noch für mich zum Spaß und du 
moderierst bis zum Lebensende hier weiter...

von Rahul D. (rahul)


Lesenswert?

Matthias schrieb:
> Übrigens ist ja eh alles geklärt, oder nicht?

Du hast hier doch eine Frage gestellt. Dann solltest du auch in der Lage 
sein, sie als beantwortet zu bewerten.

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Soo nun lockern wir uns mal wieder auf.

Mit deutscher Grammatik:

Wie heisst die Zeitform in diesem Satz?
>> Der Bus kam heute pünktlich. <<

-Buskamperfekt

von Harald K. (kirnbichler)


Lesenswert?

●DesIntegrator ●. schrieb:
> -Buskamperfekt

Schön.

von Rahul D. (rahul)


Lesenswert?

●DesIntegrator ●. schrieb:
> -Buskamperfekt

LOL

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.