Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

Data logging

geschrieben von alchemist94 
Data logging
08. December 2016 11:13
Hallo liebe Community,

ich bin auf der Suche nach einer eleganten Lösung einzelne Sensorwerte auszulesen und über einen gewissen Zeitraum oder gesamten Druck in bestimmten Intervallen mit zu schreiben. Um Beispielsweise Temperaturgraphen zu erstellen oder andere Daten auszuwerten.

Pronterface zeigt ja automatisch Temperaturgraphen an. Leider habe ich bis jetzt keine Möglichkeit gefunden die Rohdaten auszulesen oder optimalerweise als log-Datei in Tabellenform abspeichern zu lassen.

Eine Möglichkeit wäre sicher mit Macros direkt in Pronterface zu arbeiten, in gewissen Intervallen M105 zu senden und anschließen die Daten auszulesen.
Allerdings habe ich noch nie mit Macros in Pronterface gearbeitet :/ und weiß nicht wie ich hier ansetzen müsste (Schleifenstruktur?!)

Habt ihr Ideen bzw. Erfahrungen wie man so etwas bewerkstelligen könnte?
Re: Data logging
11. December 2016 09:23
Einfacher wäre es, die Firmware anzupassen, so dass diese für jeden Druck eine Report-Datei erstellt und auf der SD-Card speichert, in der diese Werte erfasst werden...
Re: Data logging
11. December 2016 15:25
@hansilein
Danke für die schnelle Antwort.
Wie müssten denn die Änderungen in der Firmware aussehen? Gibt es eine implementiert Funktion um Report-Dateien zu erstellen?!

Ich frage mich auch wie die Performance des Mainboards aussieht wenn nebenbei ständig auf die sd Karte geschrieben wird?!
Wahrscheinlich kein Problem. Ich kann da den Aufwand für einen Speicherprozess schlecht abschätzen

1-mal bearbeitet. Zuletzt am 11.12.16 15:26.
Re: Data logging
11. December 2016 15:48
Du solltest Dir versch. Data-Logging Funktionen aus der Arduino-Ecke mal anschauen, da wirst Du ziemlich schnell fündig werden... Davon kannst Du Dich dann inspirieren lassen.

Die Performance wird nicht sonderlich darunter leiden, ist schließlich nicht besonders viel, was Du speichern möchtest.

Der Speicher wird auch völlig ausreichen. Du musst ja nicht ständig die Datei im Speicher halten, sondern immer nur um eine Zeile erweitern.


Genaueres kann ich Dir auf die Schnelle, aber jetzt auch nicht sagen... Du solltest Dir einfach verschiedene Implementierungen der Arduino-Community anschauen.

Ich bin zur Zeit krankheitsbedingt nicht gerade super konzentriert, ansonsten würde ich mich daran beteiligen... Weil ich die Idee nicht schlecht finde.
Zum Basteln reicht es gerade so aus grinning smiley aber ich glaube nicht, dass ich in meinem jetzigen Zustand den saubersten und schönsten Code schreiben könnte...
Re: Data logging
11. December 2016 16:31
spontane Idee:

mit M28 bietet Marlin ja schon die Möglichkeit Befehle mitzuschreiben und auf der SD Karte zu speichern.
Wäre es denkbar die Funktion um Sensorwerte zu erweitern?
Wo finde ich die Funktion im Quellcode?

PS: Ich bin kein Informatik Crack. Über ein paar Java Basics ist es nie hinaus gegangen. Könnte also eine ziemliche Herausforderung werden smiling smiley
Re: Data logging
11. December 2016 20:13
Betrachte es als Übung... Denn irgendeine Form von Einstieg wirst Du machen müssen.
So schwierig ist das nicht, glaube mir smiling smiley

Wenn du dann angefangen hast, vor einem konkreten Problem stehst, kannst Du das hier posten und es werden sich zu Hauf Leute finden, die Dir helfen werden... Einschließlich meiner Person cool smiley


Ob Du diese Funktion dahingehend umschreiben kannst, kann ich Dir auf Anhieb nicht sagen. Das hängt in erster Linie von Dir ab.
Du kannst diesen Befehl aber als Einstiegspunkt verwenden, um erstmal rein zu kommen:

Marlin_main.cpp, Zeile 4710
 inline void gcode_M28() { card.openFile(current_command_args, false); }

"card" ist ein Objekt vom Typ "CardReader"... Definiert in der gleichnamigen Datei "cardreader.cpp".
Schau Dir die Funktion an.

Du könntest einen eigenen M-Code definieren und diesen dann nach dem gleichen Schema aufbauen wie "M28" mit dem Unterschied,
dass Du die Sensorwerte in eine Datei schreibst und nicht die Befehle....
Wenn Du z.B. nicht genau weisst, wie Du an die Sensorwerte rankommst, suchst Du einfach nach anderen Stellen im Code an denen genau auf diese Werte zugegriffen wird.
Du wirst erstmal ne ganze Menge lesen müssen, um Dich zu orientieren, dann wird es wahrscheinlich einfach und schnell von der Hand gehen.


Das wäre z.B eine Möglichkeit... Aber da Du das völlig neu implementierst, kannst Du das bauen wie Du Lust drauf hast.
Das Wichtigste ist, einfach anzufangen. Da kommst Du schneller rein als Du denkst... An Hilfe und Unterstützung wird es Dir nicht mangeln, glaub mir. Dieses Forum ist voll von netten Leuten!
Hilfe und Unterstützung wirst Du finden, aber niemanden, der Dir diese Arbeit abnimmt...

BTW: Ich bin arbeite auch fast nur mit Java, trotzdem komme ich mit vielen anderen Programmierspachen klar. Software-Entwicklung ist etwas, das man lernen kann oder nicht, das hängt nicht von der Sprache ab...

Besorg Dir eine IDE (z.B. Eclipse for C/C++ Developers) und leg einfach los...
Das ist nicht wenig, aber machbar
Re: Data logging
14. December 2016 13:06
Moin,
könnte M928 dir evtl. weiterhelfen?
Ich weiß nicht was da alles geschrieben wird, aber vielleicht hilft es dir ja.

So richtig ausführlich ist es ja nicht beschrieben sad smiley

1-mal bearbeitet. Zuletzt am 14.12.16 13:07.


Gruß
Siggi


Geeetech I3 Pro B 8mm Acryl - Mega 2560 - Ramps 1.4 - TMC2100 - MK42 - E3DV6-Clone 0,4 - SSR 522-1dd60-40 (A-Senco) - Marlin RC8Bugfix 26.12.2016 - Repetier Host - Windows 7 64 Bit
Vulcanus mit Linearschienen
Anycubic i3 Mega
Re: Data logging
10. January 2017 12:04
So,
ich hatte endlich Zeit mich mit der Firmware auseinander zusetzen. Und bin dabei natürlich auf eine Frage / Problem gestoßen:

Mein Ansatz ist der, eine globale Variable (boolean) aktiviert das mitschreiben der Daten.
Diese wird durch einen eigenen gCode auf true gesetz. Gleichzeitig wir die eine Datei erstellt in die geloggt werden soll.

Im Interrupt (in temperatures.cpp) wir über eine if Abfrage je nach wert der Variablen Werte in die Datei auf der SD Karte geschrieben.

Was bisher Funktioniert ist über den gCode den Boolean zu setzen und eine Datei mit wählbarem Namen zu erstellen.
Nur weiß ich nicht bzw. verstehe nicht wie ich anschließend auf die Datei zugreife.
Also was card.openFile(strchr_pointer+5, false, true) genau erstellt.
Wenn ich das richtig verstehe hat card eine Objekt vom Typ SdFile namens file. Ist das automatisch die gerade erstellte?
file ist aber private also kann ich nicht auf deren Funktionen zugreifen?! quasi card.file.write("Text")

Hier meine bisheriger Code:

case 815:
{
starpos = (strchr(strchr_pointer + 5,'*'));
if(starpos != NULL){
char* npos = strchr(cmdbuffer[bufindr], 'N');
strchr_pointer = strchr(npos,' ') + 1;
*(starpos-1) = '\0';
}
proj_log = true;
card.openFile(strchr_pointer+5, false, true);
//card.file.write("test");
SERIAL_ECHO_START;
SERIAL_ECHOLNPGM("Projekt: Logging aktiviert");
}
break;

und im Interrupt:

if(proj_log == true){
//hier solls später hin
}

2-mal bearbeitet. Zuletzt am 10.01.17 12:06.
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen