mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Modbus Details


Autor: NochAnfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen schönen guten Abend!

Ich beschäftige mich gerade mit dem Thema Modbus und hab da einpaar 
Verständnisschwierigkeiten. Deshalb würd ich gern Fragen ob ihr mir 
etwas helfen könntet :D. Also

-Wo liegt der genaue Unterschied zwischen Coils und Holding Registern 
bzw. für welchen genauen Zweck brauche das eine und / oder das andere?

-Weiterhin würde ich später gerne ein kleinen Programm schreiben das 
über Modbus mit einer anderen Geräten kommuniziert. Bin aber noch nicht 
ganz klar wie diese Register in C aussehen müssten.

Wäre das sowas wie in char[] und jedes Element ist dann 16 Bit große. 
Oder sollte ich mir eher eine eigene kleine struct deklarieren wo ich 
dann die Datentypen reinschreiben und mittels einer Listenstruktur 
verwalte :/

Also etwa sowas :

#ifndef
#define char BYTE
#endif

struct holdingReg{

   BYTE fu_code;
   BYTE addi_high;
   BYTE addi_low;

   struct holdingReg *next;

};

struct holdingReg *first;
...


-Benutzen Coils und Holding Register den selben Adressraum?

-In der "Modbus Application Protocol Specification V1.1b" ist für 'Read 
Hodling Registers' die Anzahl der Register mit 126 angeben. Verstehe ich 
das richtig des es 126 Stück insgesamt von diesen Registern gibt bzw. 
kann es Hersteller spezifisch auch weniger geben?

Hoffe ihr könnt mir ein bischen weiterhelfen :(.

Autor: Ulrich K. (elektromechanikus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo NochAnfänger,

Coils sind die Ausgänge einer SPS

Holding Register sind 16 Bit Register in der SPS die von Modbus aus 
geschrieben und gelesen werden können (im Gegensatz zu Input Registern 
die von Modbus nur gelesen werden können). In Holding Registern werden 
z.B. Rechenoperationen ausgeführt, Zeiten und Zähler verwaltet und ...

Die Anzahl von Holding Registern ist nicht auf 126 begrenzt. Es können 
über Modbus mit einem Lesebefehl aber nur 126 gelesen werden da der 
Modbus Frame eine maximale Länge von 256 Byte besitzt.
Ein Gerät kann sowohl mehr als auch weniger Register besitzen.

Im Lesebefehl wird die Startadresse und die Länge des zu lesenden 
Registerblocks angegeben.
Gibst du als Länge eine größere Zahl an als Register vorhanden sind 
erhälst du einen Exception Error als Rückmeldung.

Achtung, Modbus adressiert das erste Register als Register 0!

Über den physikalischen Aufbau des Gerätespeichers macht die Modbus 
Spezifikation keine Vorgaben. Denkbar wäre also ein Bitzugriff über 
Write Single Coil auf ein 16 Bit Holding Register.
Üblich (in einer SPS zumindest) sind aber getrennte Speicherbereiche.

Das alles steht aber auch sehr ausführlich in der von dir zitierten 
"Modbus Application Protocol Specification V1.1b" !

Für deine C-Frage google mal nach Free Modbus.

Gruß
Ulrich

Autor: NochAnfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Ulrich

danke dir für deine Erklärung :D. Ist schon verwirrend wenn man grad am 
Anfang steht. Da kann eine anständig Erklärung schon einiges Licht 
bringen.

mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.