Sensor RS485 MODBUS RTU an Mikrocontroller

Gast #2410754
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!
Moderator Persönliche Seite #2410829
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.
#2410850
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.

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