Forum: Mikrocontroller und Digitale Elektronik Sensor RS485 MODBUS RTU an Mikrocontroller


von Jens (Gast)


Lesenswert?

Hallo zusammen,

in meinem derzeitigen Projekt geht es darum einen Drucksensor über einen 
Datenlogger auszulesen und die Werte dann auf SD Karte zu speicher 
(Intervall 1s - 1h). Der Datenlogger ist soweit fertig jetzt geht es um 
den Sensor. Aufgrund der gewünschten Genauigkeit von ca. 0,1% möchte ich 
auf eine eigene AD-Wandlung verzichten und daher einen Drucksensor 
kaufen der mir die Werte digital ausgibt. Dazu habe ich jedoch kaum 
etwas im Netz gefunden lediglich mit RS 485 MODBUS RTU. Da ich hierzu 
selbst keinerlei Erfahrungswerte habe würde mich interessieren ob es 
einen einfachen Weg gibt dies so zu konvertieren das ich es mit meinem 
MSP430 verarbeiten kann? Bzw. gibt es keinen einfacheren Weg als 
freeMODBUS? Falls dies zu Aufwendig wird was haltet Ihr von einer AD 
Wandlung? Meint Ihr das lässt sich in diesem Genauigkeitsbereicht 
überhaupt realisieren?

Bin für jede Hilfe und Kritik sehr Dankbar!

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Wenn richtig verstanden, ist der MSP430 der "Master" am Modbus und es 
gibt nur einen "Slave". Da die Abfragerate recht langsam ist und auch 
nur ein Sensor am Bus, ist das Timing auf Masterseite recht harmlos. 
Einfach dafür sorgen, dass alles Bytes eines Anfrage-Pakets ohne längere 
Pause aufeinander folgend gesendet werden (bei zu langen Pausen sollen 
die Slaves verwerfen), nach dem Senden der RS485-Transceiver (MAX485 
o.ä.) sofort auf Empfang gestellt und die empfangenen Zeichen in einem 
UART-Receive-Puffer auflaufen (geht auch direkt mit Zustandsautomat, ist 
dann aber meistens unentspannter in Sachen Timing). Vor dem nächsten 
Anfragepaket ausreichend lange warten.

Wie die Anfragepakete und Antwortpakete aufgebaut sind, ist in den 
Dokumenten von modbus.org beschrieben. Dort finden sich auch die genauen 
Zeitangaben für max. Abstand zwischen Zeichen und min. Abstand zwischen 
Anfragen. Im einem der Dokumente ist auch der Code für die erforderliche 
Berechnung der CRC-Werte (geht allerdings auch platzsparender ohne 
Tabellen, habe hier dafür die crc16-Funktion aus der avr_libc genutzt). 
Welche Register mit welcher Modbus-Funktion anzusprechen sind, um einen 
Messwert auszulesen (und evtl. vorher eine Messung anzustoßen), steht in 
der Sensor-Dokumentation (war zumindest bei den von mir bisher genutzten 
so). Evtl. muss man beim Hersteller das "Programmer's Manual" oder 
ähnlich herunterladen oder anfordern.

von Weingut P. (weinbauer)


Lesenswert?

Der Modbus hat mit der Auflösung direkt nix zu tun ... das ist nur die 
Art der Datenübertragung.
Ein interner ADC ist natürlich einfacher zu verarbeiten als ein 
Modbuspaket, für das man mindestens 4 Funktionen braucht, einmal die 
Paketerzeugung,
die Senderoutine, die Empfangsroutine, die Dekodierungs- 
/Verarbeitungsroutine. Dann kommt noch die Fehlerbehandlung dazu, sprich 
Paket nochmal holen wenn CRC nicht stimmt, framing Errors abfangen etc..

Wenn man die Modbusgeschichte am Laufen hat ists ne feine Sache, da man 
den Sensor dann per RS485 eben etliche Meter vom Controller entfernt 
irgendwo hinpappen kann und die Daten per Bus austauscht, während die 
analoge Übertragung da schon ihre Grenzen hat.

von Olaf (Gast)


Lesenswert?

> Da ich hierzu selbst keinerlei Erfahrungswerte habe würde mich
> interessieren ob es einen einfachen Weg gibt dies so zu konvertieren
> das ich es mit meinem MSP430 verarbeiten kann?

Modbus ist einfach! Ich hab mal fuer eine sehr aehnliche Aufgabe, also 
auslesen von 2-3 Messwerten aus einem Sensor etwa einen Tag gebraucht.

Olaf

von Jens (Gast)


Lesenswert?

Das hört sich doch gut an! Kannst du mir berichten wie du rangegangen 
bist? Hast du einen Beispielcode oder dergleichen?

Vielen Dank für die Antworten!

von Olaf (Gast)


Lesenswert?

> Kannst du mir berichten wie du rangegangen bist?

Ich hab die Doku gelesen die zum Sensor gehoert und danach programmiert.

> Hast du einen Beispielcode oder dergleichen?

Nein.

Olaf

von Manfred (Gast)


Lesenswert?

Fertige Lösungen gibt es bei www.bdsimex.de (Logger)
und www.bdsensors.de (Tauchsonde) MODBUS-RTU.

Je nach ausgewähltem Gerät, fällt die Temperatur noch als Abfallprodukt 
ab.

Gruß Manfred

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.