Hallo, ich denke, ich kann mein Pythonprogramm, für Keithley DMM6500 u.ä. Messgeräte, auf die Menschheit loslassen. Ich habe mich bemüht es C++ ähnlich mit Klasse (Modul) aufzubauen, damit es leicht erweiterbar ist bzw. für verwandte Messgeräte mit ähnlichen SCPI Syntax anpassbar bleibt. Das Modul 'KeithleyDMM6500SCPI.py' stellt die SCPI Klasse für Keithley mit den nutzbaren Methoden dar . Die '_FUNCTION_LIST' enthält derzeit Einträge die ich für mich aktuell für wichtig halte um irgendwas messen zu können. Das wird sich je nach Bedarf mit der Zeit erweitern. Die erste Spalte 'name' darin enthält den Namen um an den eigentlich SCPI Syntax zu kommen ohne kryptische Indexnummern verwenden zu müssen. Die 2. Spalte 'command' enthält den eigentlichen SCPI Syntax laut Manual. Die Einträge kann man jederzeit erweitern. Derzeit am Ende des Moduls sind Methoden die diese Einträge in lesbarer Form verwenden bzw. dem eigentlichen Programmaufruf außerhalb der Klasse zur Verfügung stellen. Die Methode '_getMode' übersetzt nur die Funktionsauswahl wie im Display sichtbar was man messen möchte in einen Teil des SCPI Syntax, mit der bei Notwendigkeit der Syntax zur Übertragung ans Messgerät zusammengebaut wird. Im Hauptprogramm 'SCPI Keithley DMM6500.py' beginnt es mit den üblichen Zeilen. Ressourcen anlegen und Verbindung zum Messgerät herstellen. 2 Objekte anlegen in einer Struktur. Jeweils für den SCPI Syntax (obiges Modul) Objekt-Member 'scpi' und einmal für die Verbindung zum Messgeräte Objekt-Member 'line'. Beide sind über die Instanz 'keithley' definiert. Hätte ich mehrere SCPI Messgeräte würden hiermit mehrere Instanzen der Klasse Device angelegt werden. Nach Start erfolgt zu Beginn ein Uhrenvergleich. Ist die Differenz größer 1s wird das Messgerät frisch auf Systemzeit gesetzt. Theoretisch müsste keine Batterie mehr gewechselt werden. Ich hatte festgestellt das die interne RTC schon nach paar Wochen um sehr viele Sekunden falsch geht. Danach wird ein String zusammengebaut der aus dem aktuellen Datum und Uhrzeit besteht um damit einen Dateinamen anzulegen der das Logfile ist. Das heißt mit jedem Start des Programms wird, sofern eingestellt, ein neues Logfile geschrieben mit aktuellen Zeitstempel im Dateinamen. Danach folgen benötige Methoden die mittels SCPI Objekt Methoden funktionieren. Das eigentliche Programm beginnt mit: - Logdatei anlegen if SAVE_DATA: Oder noch paar Systeminfos wenn gewünscht Zeilen darüber. Danach folgen verschiedene Kombinationsbeispiele der Funktionen. - 403 - Buffer im Messgerät löschen, - 404 - Messungfunktion auf normale Widerstandsfunktion vorauswählen, - 405 - Vorauswahl auch ans Messgerät übertragen und damit endgültig einstellen - 407 - da vorher nichts anderes eingestellt wurde, erfolgen mit Sampling 30 Einzelmessungen nacheinander mit einer Pause von 0s. - 408 - die erfolgten Messung werden aus dem Buffer gelesen und ins Logfile geschrieben. Erfolgt danach keine Löschung des Buffers, verbleiben diese im Buffer. Es wird intern ein Index mitgeführt, damit immer nur die noch nicht ausgelesenen Buffereinträge im Logfile landen und es damit keine doppelte Auslesung gibt. Sieht man im Logfile wenn man das auslesen zwischen den Messung macht oder erst am Ende von allen. - 410 - der Average Mode 'Repeat' wird eingestellt mit Filterfaktor 20. 20 interne Messungen werden gemacht, um daraus einen gefilterten Wert auszugeben bzw. in den Buffer zu schreiben. - 411 - es werden 10 Average Messungen gemacht mit je 1s Pause dazwischen - 412 - Average Mode wird deaktiviert - 413 - die bis dahin noch nicht gespeicherten Einträge werden aus dem Buffer ins Logfile geschrieben - 415 - Buffer wird noch nicht gelöscht - 416 bis 418 - es werden wieder 3 normale Einzelmessungen gemacht - 419 - die bis dahin noch nicht gespeicherten Einträge werden aus dem Buffer ins Logfile geschrieben - 422 - Änderung der Messfunktion auf 4 Draht Widerstandsmessung - 423 - Übertragung der neuen Einstellung ans Messgerät - 425 - Average Mode mit Filterfaktor 15 wird aktiviert - 426 bis 428 - erneut 3 Einzelmessungen im Average Mode - 429 - Average Mode wird abgeschalten - 430 - die bis dahin noch nicht gespeicherten Einträge werden aus dem Buffer ins Logfile geschrieben Am Ende sauberen Endzustand herstellen. Vorsorglich Average Mode ausschalten, falls man es vergisst und bei Bedarf Buffer löschen. Datei vorsorglich nochmal schließen falls noch nicht automatisch geschehen. Warten bis alle restlichen Kommandos verarbeitet sind, lokalen kontinuierlichen Messmodus herstellen und Verbindung trennen. Die Formatierungen für das Logfile war eine größere Baustelle, damit Excel den Datenimport machen kann. Etwas Nachhilfe bleibt erhalten. Bspw. erkennt Excel nicht das Datumsformat automatisch. Warum auch immer. Beim Zeitstempel werden die Millisekunden abgeschnitten aber bleiben zum Glück nur unsichtbar erhalten. Die ersten 10 Dummyeinträge dienen dazu damit Excel die generelle Datenformatierung mit allen Spalten erkennt. Die Dummyzeilen sind schnell gelöscht, wer mit Excel die Messwerte weiter verarbeiten möchte. Im Logfile stehen auch weitere Informationen drin. Damit kann man auch nachträglich herauslesen was wie in welcher Reihenfolge gemessen wurde, auch wenn man den Buffer erst am Ende nach allen Messungen ausliest. Ob man die Funktionen changeFunction() und setFunction() zusammenführen sollte, da bin ich mir bis heute unschlüssig. Was man im Excel während und nach dem Import machen? Daten > Daten abrufen > Aus Datei > Aus Text/CSV importieren, '65001:Unicode UTF-8' kontrollieren/auswählen, Trennzeichen Tabstopp auswählen, Daten transformieren auswählen (nicht sofort laden), im sich öffnenden Power Query Editor die Datumsspalte auswählen, Datentyp 'Datum' statt 'Ganze Zahl' auswählen und 'Aktuelle ersetzen' anschließend 'schließen & laden' zu guter Letzt Spalte vom Zeitstempel auswählen und das Zellformat Benutzerdefiniert auf hh:mm:ss,000 ändern, mehr als 3 Nachkommastellen funktioniert nicht, die Messwertspalte je nach Bedarf einheitlich auf 2 oder 3 Kommastellen Dürft ihr gern ausprobieren und Verbesserungen vorschlagen. Danke.
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.