Modbus Details

Gast #1982541
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 :(.
#1982984
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren