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
Oemer S. schrieb: > dass man beim Modbus-Protokoll die MBAP-Header nicht ändern kann. Nein, aber wozu auch? Was ist Dein Ziel?
> 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
Du kannst natürlich dem µC über TCP beliebige Daten schicken. Das hat dann nur nichts mehr mit Modbus zu tun.
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 :)
Ömer S schrieb: > Mit welchem Protokoll ist es moeglich den Header klar zu definieren Ich weiß nicht, was Du damit sagen willst.
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.
> 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?
Ö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
> 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.
Ö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.
> 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 :)
Ö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?
> 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.
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.
> 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.
Ö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).
>> 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 :)
Ö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?
< 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.