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!
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.
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.
> 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
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!
> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.