Forum: Mikrocontroller und Digitale Elektronik Firmwareupdate via Modbus TCP


von Oemer S. (oemer1907)


Lesenswert?

Hallo Leute,
habe nur wenig Erfahrung was Microcontroller und DSP angeht.


Der Hersteller gibt vor, dass man die Firmware über TCP updaten kann und 
schickt die neue Update-Code in Hex-Files.
Abschnitt von der Hex-Datei:
:020000040800F2
:1000000090AC00203D65020845650208476502087E
:10001000496502084B6502084D65020800000000B2
.......
:0400000508060131B7
:
Nun möchte Ich die Firmware über TCP/IP Protokoll installieren/updaten.
(Microcontroller ist von der ARM-Familie).

Als Beispiel geben Sie vor:
Inquire present firmware: 0x40 00 AA 55 00 0B 00 00 00 00 00 00
1.Byte 0x40 repräsentiert die Transaktion vor dem Upgrade.
2.Byte dient zum Auswahl der Update Ebene, 00 -> Aku, 01-> Lüfter...
0xAA 0x55 ist als Datenaktualisierungsanforderung für Clientcomputer 
definiert.
0x00 0x0B steht für die Länge (in diesem Fall 12).
Restliche Bytes sollen die unterschiedlichen Daten gemäß den 
verschiedenen Protokollen zurück geben, z. B. den Inhalt des 
Modbus-Protokolls oder die Aktualisierungssteuerung Befehl. (Hier 
verstehe ich nur Bahnhof.)


Kann mir jemand helfen oder sagen wo ich auf die Suche gehen soll?

Mit freundlichen Grüßen,
Oemer Sonne

von Matthias D. (marvin42)


Lesenswert?

Modbus TCP wird eigentlich für die Übertragung von IO-Daten bei 
Automatisierungsgeräten verwendet (zB SPS) - damit einen Firmware-Update 
zu machen ist eine ulkige Idee.

Ich rate also, dass du ein Gerät X hast, in dem ist ein µController 
drin, und den möchtest du per Modbus-TCP mit einem FW-Update versorgen. 
Ich vermute weiter, dass du aktuell keinen passenden FW-Loader hast, 
also eine Software, die als Modbus-TCP Client fungiert (das Endgerät ist 
'Server'), dh du musst dir nun was selbst programmieren, richtig ? 
Insofern gehört die Frage eigentlich nicht hierher.

Wenn du programmieren kannst (C,C++,Java oder was auch immer) und weisst 
wie man eine TCP Connection betreibt ist das kein Hexenwerk: man nehme 
TCP Port 502, dann bastelt man eine passende Nachricht und weg damit.

Modbus liest/schreibt seine Daten nicht in Bytes, sondern in "Coils" - 
weil es früher halt viele Relais gab. Schau einfach mal hier: 
http://www.simplymodbus.ca/FC05.htm

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Matthias D. schrieb:
> Modbus liest/schreibt seine Daten nicht in Bytes, sondern in "Coils"

... oder in Registern. "Coils" sind für einzelne Bits gedacht, Register 
für (analoge) 16-Bit-Werte.

von Oemer S. (oemer1907)


Lesenswert?

Matthias D. schrieb:

> Ich rate also, dass du ein Gerät X hast, in dem ist ein µController
> drin, und den möchtest du per Modbus-TCP mit einem FW-Update versorgen.

Ja,richtig. X-Geräte mit ARM µC in DE und EU verteilt.

> Ich vermute weiter, dass du aktuell keinen passenden FW-Loader hast,
> also eine Software, die als Modbus-TCP Client fungiert (das Endgerät ist
> 'Server'), dh du musst dir nun was selbst programmieren, richtig ?

FW-Loader habe Ich, ist so ein Windows Tool.
Hat für mich den Nachteil, dass Ich immer vor Ort den Laptop mit dem 
Endgerät verbinden muss.
Ja, hast richtig vorausgesehen...Ich möchte das mit C# Program ersetzen.

> Wenn du programmieren kannst (C,C++,Java oder was auch immer) und weisst
> wie man eine TCP Connection betreibt ist das kein Hexenwerk: man nehme
> TCP Port 502, dann bastelt man eine passende Nachricht und weg damit.


Hört sich leider so einfach an ;).Doch mein Gehirn sagt nur "hääää?". 
Also funktioniert die FW-Update ganz normal mit "modbus_write..." 
Funktion?
Wie lese Ich vom Hex-File aus... welche Register welche Werte bekommen ?
Eine Zeile ausm Hex Datei:
:2080500085A9560100A16F05761F01BF1A0300409A00767EBF8F761F0261960C400CEFF 
91A
Ich kenne TCP/IP, trotzdem kann man hier nix entschlüsseln :(

Coils, Register , Words .... sind ja nur Längeangaben für die 
Daten!oder?


Die Gedanke, dass man mit TCP\IP (C# Code) FW-Update ausführen kann ist 
im praktischen möglich. Dass hast du mir jetzt bestätigt. Richtig?


Ich komme voran :)


Danke Matthias & Rufus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Oemer S. schrieb:
> Eine Zeile ausm Hex Datei:
> :2080500085A9560100A16F05761F01BF1A0300409A00767EBF8F761F0261960C400CEFF 91A
> Ich kenne TCP/IP, trotzdem kann man hier nix entschlüsseln :(

Das hat auch nichts mit TCP/IP zu tun, sondern ist das Intel-Hex-Format 
für binäre Daten.


https://de.wikipedia.org/wiki/Intel_HEX

> Coils, Register , Words .... sind ja nur Längeangaben für die
> Daten!oder?

Das sind Dinge, die im eigentlichen Modbus-Protokoll verwendet werden. 
Das Modbus-Protokoll aber sieht keinen Mechanismus für den Transfer 
beliebiger Binärdaten vor, d.h. ein Bezug zwischen Deiner Hex-Datei und 
Modbus ist ohne weitere Informationen nicht herstellbar.

Gibt es die Dokumentation, aus der Du in Deinem Eröffnungsposting 
zitiert hast, auch in vollständig?

Woher kommt die Information, daß das ganze was mit Modbus zu tun haben 
soll?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Rufus Τ. F. schrieb:
> Das Modbus-Protokoll aber sieht keinen Mechanismus für den Transfer
> beliebiger Binärdaten vor

Modbus File Records ;)
Das kann man dafür sehr kreativ missbrauchen.
Aber ja ohne Doku der Geräte wirds hier nicht weitergehen.

von Oemer S. (oemer1907)


Angehängte Dateien:

Lesenswert?

Rufus Τ. F. schrieb:

> Gibt es die Dokumentation, aus der Du in Deinem Eröffnungsposting
> zitiert hast, auch in vollständig?
>
> Woher kommt die Information, daß das ganze was mit Modbus zu tun haben
> soll?

Habe die Dokumentation als PDF Datei hinzugefügt.


Ich brauche die erste ernstgemeinte Bestätigung... bevor Ich mich rechts 
und links durchschlage...
"Die Gedanke, dass man mit TCP\IP (C# Code) FW-Update ausführen kann ist
im praktischen möglich. Richtig?"

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

O weh.

Das ist ja ... dürftig. Abgesehen davon, daß das ausgesprochen 
lückenhaft ist, scheint es auch von jemandem geschrieben zu sein, der 
des Englischen kaum mächtig ist, was das ganze nicht verständlicher 
macht.

Dies ominöse Kabel-Verbindung für das "FW-Tool" ist keine 
Netzwerkverbindung, nehme ich an?

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.