Forum: PC Hard- und Software Modbus Tcp/Ip Protokoll vs Socket Tcp/Ip Protokoll


von Oemer S. (oemer1907)


Lesenswert?

Hallo Leute ;)

Ich musste feststellen dass man beim Modbus-Protokoll die MBAP-Header 
nicht ändern kann. Oder gibts hierzu ein Zaubertrick?

Modbus Verbindungsaufbau:
modbus_t *ctx = modbus_new_tcp(IP, Port);
modbus_connect(ctx);

Bsp Modbus Request: 00 01 00 00 00 06 FF 03 00 10 00 08
00 01 => Transaction ID (MBAP-Header)
00 00 => Protocol ID (MBAP-Header)
00 06 => Anzahl nachfolgende Bytes im Frame
FF    => Device-ID ... 0xFF ist TCP/IP standard
03    => Functionscode
00 10 => Startadresse
00 07 => Länge(ausgehend von der Startadresse zum Lesen bzw. Schreiben)


Bsp. mein Ziel Request: 40 02 AA BB 00 06 FF 03 00 10 00 08


Socket Verbindungsaufbau(C#):
int socketctx = socket(AF_INET, SOCK_STREAM, 0);
connect(socketctx,(struct sockaddr *)&server, sizeof(server));

MEINE FRAGE:
Kann ich mein Ziel Request über Socket so abschicken,dass der 
Server(Microcontroller) den Befehl identisch bearbeitet als sei es ein 
Modbus Request ?
Anders ausgedrückt, kann Socket den gewünschten Frame darstellen ?

Mit freundlichen Grüßen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Oemer S. schrieb:
> dass man beim Modbus-Protokoll die MBAP-Header nicht ändern kann.

Nein, aber wozu auch?

Was ist Dein Ziel?

von Oemer S. (oemer1907)


Lesenswert?

> Was ist Dein Ziel?


Ich möchte den µC fernsteuern. Dafür muss ich den richtig ansprechen.
#mein Ziel Request: 40 02 AA BB 00 06 FF 03 00 10 00 08

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du kannst natürlich dem µC über TCP beliebige Daten schicken. Das hat 
dann nur nichts mehr mit Modbus zu tun.

von Ömer S (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Du kannst natürlich dem µC über TCP beliebige Daten schicken. Das
> hat
> dann nur nichts mehr mit Modbus zu tun.

Hallo Rufus, koennten Sie bitte deutlicher sein.
Mit welchem Protokoll ist es moeglich den Header klar zu definieren - 
und wie?

Vielen Dank für die Hilfe :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ömer S schrieb:
> Mit welchem Protokoll ist es moeglich den Header klar zu definieren

Ich weiß nicht, was Du damit sagen willst.

von Mark B. (markbrandis)


Lesenswert?

Oemer S. schrieb:
>> Was ist Dein Ziel?
>
>
> Ich möchte den µC fernsteuern.

Modbus ist erstmal einfach nur ein Protokoll, mit dem man Daten zwischen 
verschiedenen Geräten austauschen kann.

Was der Mikrocontroller in Deinem Fall mit den empfagenen Daten 
anstellt, hat mit Modbus direkt nichts zu tun. Die Schnittstelle könnte 
auch CAN oder Ethernet oder sonstwas sein.

Auf dem Mikroncontroller muss es dann entsprechenden Code geben, der die 
über Modbus empfangenen Kommandos umsetzt.

von Ömer S (Gast)


Lesenswert?

> Was der Mikrocontroller in Deinem Fall mit den empfagenen Daten
> anstellt, hat mit Modbus direkt nichts zu tun. Die Schnittstelle könnte
> auch CAN oder Ethernet oder sonstwas sein.

hat nur Ethernet als Schnittstelle.


> Auf dem Mikroncontroller muss es dann entsprechenden Code geben, der die
> über Modbus empfangenen Kommandos umsetzt.

µC reagiert nur auf Paket, wenn dieser im MBAP-Header(ADU) einen 
bestimmten Wert/Zertifikat besitzt.
Bsp.:
Transaction ID (MBAP-Header) = 0x40 0x02
Protocol ID (MBAP-Header)    = 0x20 0xAB

ansonsten wird der Paket verworfen.
Wie kann Ich so ein Paket nachbilden?

von Mark B. (markbrandis)


Lesenswert?

Ömer S schrieb:
> µC reagiert nur auf Paket, wenn dieser im MBAP-Header(ADU) einen
> bestimmten Wert/Zertifikat besitzt.
> Bsp.:
> Transaction ID (MBAP-Header) = 0x40 0x02
> Protocol ID (MBAP-Header)    = 0x20 0xAB
>
> ansonsten wird der Paket verworfen.
> Wie kann Ich so ein Paket nachbilden?

Verstehe ich das richtig, dass die Software auf dem Mikrocontroller fest 
vorgegeben ist und von Dir nicht geändert werden kann?

Dann baust Du eben auf dem anderen Gerät von Hand ein solches Telegramm 
zusammen, wie Du es brauchst, und schickst es ab.

Wenn der Mikrocontroller allerdings bestimmte Werte im Header erwartet, 
die im Modbus-Protokoll so nicht definiert sind, dann ist es eben 
irgendein anderes Protokoll und nicht Modbus. So wie Rufus es schon 
gesagt hat. Vielleicht ist es an Modbus angelehnt, das mag sein.

: Bearbeitet durch User
von Ömer S (Gast)


Lesenswert?

> Verstehe ich das richtig, dass die Software auf dem Mikrocontroller fest
> vorgegeben ist und von Dir nicht geändert werden kann?

Ja.

> Dann baust Du eben auf dem anderen Gerät von Hand ein solches Telegramm
> zusammen, wie Du es brauchst, und schickst es ab.

Genau das versuche Ich umzusetzen. Ich weiss nur nicht wie.

> Wenn der Mikrocontroller allerdings bestimmte Werte im Header erwartet,
> die im Modbus-Protokoll so nicht definiert sind, dann ist es eben
> irgendein anderes Protokoll und nicht Modbus. So wie Rufus es schon
> gesagt hat. Vielleicht ist es an Modbus angelehnt, das mag sein.

Ja, ihr habt Recht. Müsste "erweiterte/modifizierte" Modbus-Protokoll 
sein.

Habe leider kein Weg gefunden, solch ein Telegramm zu basteln.
Haben Sie ein paar Tipps für mich, wie Ich das umsetzen kann.


Ich danke Ihnen und Herr Rufus sehr =)

mit freundlichen Grüßen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ömer S schrieb:
> Haben Sie ein paar Tipps für mich, wie Ich das umsetzen kann.

Frag' den Hersteller nach besserem Support bzw. nach besserer 
Dokumentation.

Du stocherst in undokumentiertem Nebel.

von Ömer S (Gast)


Lesenswert?

> Frag' den Hersteller nach besserem Support bzw. nach besserer
> Dokumentation.

Der Hersteller aus China antwortet nicht :( , kein Chance.

> Du stocherst in undokumentiertem Nebel.

Wieso? Das ganze ist möglich, Ich kanns auch testen.
Ich weiss was zu tun ist...Ich kanns nur(noch) nicht.



Anscheinend kennt sich hier keiner aus, wie man es umsetzen kann. Ist ja 
auch nicht schlimm..


Dankeschön Rufus, hast wirklich versucht zu Helfen :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ömer S schrieb:
> Wieso?

Na, Du hast offensichtlich keine Dokumentation, sondern nur eine sehr 
vage und unvollständige Beschreibung (wenn ich an Dein 
"Firmwareupdate"-Ding denke, das Du im anderen Thread angesprochen 
hattest).

Was sind denn das überhaupt für Geräte, mit denen Du da versuchst, 
Kontakt aufzunehmen? Gibt es von denen denn überhaupt keine 
Dokumentation, keine Webseite, kein gar nichts?

von Ömer S (Gast)


Lesenswert?

> Was sind denn das überhaupt für Geräte, mit denen Du da versuchst,
> Kontakt aufzunehmen?

"Solax" - Wechselrichter (X-3)

> Gibt es von denen denn überhaupt keine
> Dokumentation, keine Webseite, kein gar nichts?

"Solaxpower" .. ist die Webseite.

Für die Firmware-Update gibts halt nur diese eine PDF_Datei.
Habe schon zig-male geschrieben, es kommt halt kein antwort.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bei der Quellenlage halte ich es für mutig, an das Ding irgendwelche 
Netzwerkpakete zu senden.

Ohne eine genaue Dokumentation würde ich auch mit normalem 
Modbus-Protokoll nur sehr vorsichtig damit hantieren, d.h. nur Register 
auslesen, niemals aber schreiben (denn es ist schließlich unbekannt, 
welche Auswirkung die haben).


Vor allem:
Was willst Du jetzt eigentlich erreichen? Willst Du das Firmwareupdate 
per Netzwerk einspielen (statt per USB), oder willst Du irgendwas 
anderes an dem Ding steuern?

Du wirst ohne technische Unterstützung des Herstellers oder genauer 
Analyse eines etwaigen Werkzeuges, das genau das macht, was Du selbst 
machen willst, nicht weiterkommen.

von Ömer S (Gast)


Lesenswert?

> Ohne eine genaue Dokumentation würde ich auch mit normalem
> Modbus-Protokoll nur sehr vorsichtig damit hantieren, d.h. nur Register
> auslesen, niemals aber schreiben (denn es ist schließlich unbekannt,
> welche Auswirkung die haben).

Ich habe eine ausführliche Modbus-Dokumentation. Register auslesen und 
bzw. schreiben ist kein Problem. Hier steht jedoch nichts über 
Firmwareupdate.

> Vor allem:
> Was willst Du jetzt eigentlich erreichen? Willst Du das Firmwareupdate
> per Netzwerk einspielen (statt per USB),

ja, genau. Anstatt USB über Netzwerk.
(Mit USB kann ich den Update problemlos abspielen.)

> Du wirst ohne technische Unterstützung des Herstellers oder genauer
> Analyse eines etwaigen Werkzeuges, das genau das macht, was Du selbst
> machen willst, nicht weiterkommen.

Habe die Firmwareupdate als Intel-Hex-Datei vorliegen.
Das sollte doch reichen ?

Ich meine, wenn das ganze über USB funktioniert..MUSS es ja auch über 
Netzwerk funktionieren. So müsste ich nicht pendeln und jedes Gerät 
einzel updaten.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ömer S schrieb:
> Ich habe eine ausführliche Modbus-Dokumentation.

Woher? Auf der Webseite wird Modbus mit keinem Wort erwähnt.

> Das sollte doch reichen ?

Nein. Das reicht offensichtlich nicht.

> Ich meine, wenn das ganze über USB funktioniert..MUSS es ja auch über
> Netzwerk funktionieren

Nein. Da "muss" gar nichts funktionieren.

Zwar scheint der Hersteller so etwas vorgesehen zu haben (wie man Deinem 
sehr unvollständigen Dokument entnehmen kann), aber er hat es so 
grottenmiserabel und unvollständig beschrieben, daß damit nichts 
anzufangen ist.

Auch wenn man Modbus/TCP kennt (was ich mir einbilde, zu tun).

von Ömer S (Gast)


Lesenswert?

>> Ich meine, wenn das ganze über USB funktioniert..MUSS es ja auch über
>> Netzwerk funktionieren
>
> Nein. Da "muss" gar nichts funktionieren.


Natürlich! Ob man mit dem Zug nach Bayern fährt oder mit Auto hat 
natürlich unterschiede. Jedoch ist es offentsichtlich, dass es mit dem 
Auto auch klappen sollte, wenns mit Zug schonmal geklappt hat.


> Auch wenn man Modbus/TCP kennt (was ich mir einbilde, zu tun).

Wie du es schon vorausgesagt hast... Das ganze hat wirklich nix mehr mit 
Modbus zu tun.

Ich habe den Support-Dienst nochmal eine E-mail geschickt. Vielleicht 
gibts ja endlich eine Erklärung, was ich mir irgendwie nicht mehr 
vorstellen kann(dass die antworten).


freundliche Grüße und vielen dank Rufus :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ömer S schrieb:
> Natürlich!

Wirklich nicht. Das eine (USB) hat mit dem anderen (Netzwerk) exakt gar 
nichts zu tun, und die verwendeten Protokolle (USB: Lesen einer Datei 
von einem Massenspeicher, Netzwerk: Undefiniert, möglicherweise 
umgefrickelter Modbus) haben auch nichts miteinander zu tun.

Ömer S schrieb:
> Ich habe den Support-Dienst nochmal eine E-mail geschickt.

Ich drück' Dir die Daumen.


BTW: Meine Frage nach Deiner Modbus-Dokumentation hast Du noch nicht 
beantwortet. Wo hast Du die her?

von Ömer S (Gast)


Lesenswert?

< Meine Frage nach Deiner Modbus-Dokumentation hast Du noch nicht
< beantwortet. Wo hast Du die her?

Habe die Dokumentation nur auf Papier. Wurde "wahrscheinlich" 
mitgeliefert, habe selbst auf der Homepage nix gefunden.
Wenn du interesse hast, kann ich paar Bilder machen und dir über E-mail 
senden.

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.