Hallo zusammen, ich habe ein paar einfache Scripte welche Messgeräte kalibrieren. Dabei habe ich eine Klasse erstellt, die die Messdaten einheitlich erfasst und mit einem einheitlichem Format in eine Datei schreibt. Übrig bleiben dennoch endlos viele Zeilen für die einzelnen Kalibrierpunkte, zu denen jeweils das Messgerät wie auch der Kalibrator konfiguriert werden müssen. Dies lässt sich meines Erachtens nach nicht mehr sinnvoll viel weiter zusammenfassen. Ein solcher Kalibrierpunkt sieht dann z.B. so aus: ############## ## 100mV DC ############## hp3458A.write("DCV") hp3458A.write("NPLC 100") hp3458A.write("RANGE 0.1") f5730A.write("OUT 0.1V, 0Hz") f5730A.write("OPER") cal_value = float(f5730A.query("ADJOUT?").split(",")[0]) cal_unc = float(f5730A.query("UNCERT?").split(",")[0]) time.sleep(settling_time) cal.meas("100mV", cal_value, cal_unc) f5730A.write("STBY") cal.meas() fügt dem Messprotokoll den Kalibrierpunkt hinzu. Dem Konstruktor der Klasse wird eine Funktion übergeben, wie Daten aus dem Messgerät zu lesen sind. Der Rest ist leider sehr gerätespezifisch und vor allem auch Kalibrierpunkt abhängig. Um die Datei ein wenig kleiner zu halten und die Übersicht zu erhöhen würde ich gerne an der Stelle, an der die lange List mit Anweisungen steht andere Dateien direkt in das Script importieren, die dann zB in Messfunktionen aufgeteilt sind. Z.B. so: .. Code um alles zu initialisieren usw.. import("HP3458A_F5730A_DCV.py") import("HP3458A_F5730A_DCI.py") import("HP3458A_F5730A_ACV.py") import("HP3458A_F5730A_ACI.py") import("HP3458A_F5730A_OHM.py") Das normale Pythonn import fügt ja aber die Funktionen usw in einem neuen Namensraum ein. Ich möchte an dieser Stelle im Prinzip 1:1 die Zeilen aus den anderen Dateien in meine Datei reinkopiert haben. So, dass auch alle Objekte weiter nutzbar sind usw. Zudem könnte man dann auch sehr leicht einen ganzen Block auskommentieren, wenn man Beispielsweise nur eine dieser Messfunktionen kalibrieren möchte. Ich hoffe ich konnte irgendwie ausdrücken worum es mir geht. Hat jemand eine Idee, wie man so etwas machen sollte? Ggf. gibt es aber ohnehin einen viel schöneren Weg. Vielen Dank und viele Grüße Philipp
Philipp C. schrieb: > Ein solcher Kalibrierpunkt sieht dann z.B. so aus: > > ############## > ## 100mV DC > ############## > hp3458A.write("DCV") > hp3458A.write("NPLC 100") > hp3458A.write("RANGE 0.1") > > f5730A.write("OUT 0.1V, 0Hz") > f5730A.write("OPER") > cal_value = float(f5730A.query("ADJOUT?").split(",")[0]) > cal_unc = float(f5730A.query("UNCERT?").split(",")[0]) > time.sleep(settling_time) > cal.meas("100mV", cal_value, cal_unc) > f5730A.write("STBY") Das Ganze sieht aber noch ziemlich lowlevel und wenig OOP mäßig aus. Die Ganzen writes hätte ich in irgendwelchen Klassen mit Sanity Check vermutet zum Beispiel beim hp3458A Objekt warum gibt es hier keine hp3458A.setmode(DC, 100mV) oder ähnliches, vielleicht kannst Du wenigsten die Einstellungen in eine Config schreiben und dann sowas machen
1 | with open('hp3458A_dc_100mV.cfg') as hpin: |
2 | for line in hpin: |
3 | hp3458A.write(line) |
das f5730A Objekt sieht auch noch so aus als hätte es Verbesserung Potential, die letzte Zeile mit den "STBY" könnte auf einen Context Manager hinweisen. Oder aber wieder auf eine Komplexe Klasse welche die Messung macht und das Cal Objekt dabei Konsumiert. Insgesamt ist es aber schwierig aus denn paar Zeilen Optimierung raus zu lesen, vielleicht wären ein paar weiter Konfigurationen schon zu sehen um sich ein paar elegante Klassen zu überlegen. Philipp C. schrieb: > Um die Datei ein wenig kleiner zu halten und die Übersicht zu erhöhen > würde ich gerne an der Stelle, an der die lange List mit Anweisungen > steht andere Dateien direkt in das Script importieren, die dann zB in > Messfunktionen aufgeteilt sind. Z.B. so: Dazu solltest du wahrscheinlich dein Code in ein oder mehre Pythonmodule verwandeln. dann geht das mit ein simplen
1 | import hp3458A |
Sebastian schrieb: > import * from Das gibt bei mir einen Syntaxfehler. Ich habe es dann mit from filename import * probiert, aber auch das brachte nicht den gewünschten Erfolg. Zum Test habe ich folgendes gemacht: main.py: a = 25 import * from import_file print(a) und import_file.py: print(a) a=37 Wenn ich nun die main.py ausführe wünsche ich mir folgende Ausgabe: 25 37 imonbln schrieb: > Das Ganze sieht aber noch ziemlich lowlevel und wenig OOP mäßig aus. Die > Ganzen writes hätte ich in irgendwelchen Klassen mit Sanity Check > vermutet zum Beispiel beim hp3458A Objekt warum gibt es hier keine > hp3458A.setmode(DC, 100mV) oder ähnliches, vielleicht kannst Du > wenigsten die Einstellungen in eine Config schreiben Der Teil ist auch direkt die Ansprache der Geräte. Hier wollte ich eigentlich keine weiteren Klassen bauen, weil ich da fast alles 1:1 reinschreiben müsste. Bei vielen Messbereichen gibt es Spezialitäten. Wenn schon eine Klasse, dann wäre es zB nett direkt ein "Multimeter" zu abstrahieren, aber da sind die Unterschiede einfach recht groß. Bei dem einfachen Beispiel mit DCV ließe sich das sicher noch gut machen, aber spätestens bei der Widerstandsmessung konfiguriert man je nach Messbereich doch einiges um. Und eine Config pro Kalibrierpunkt finde ich auch noch viel. Dazu braucht es dann ja auch noch die Config für den Kalibrator und ggf. unterschiedliche Wartezeiten bis man mit der Messerei anfängt. Die Klasse (cal) macht aktuell rein gar nichts mit der Hardware und kümmert sich nur um eine einheitliche Ablage der Daten. Und wenn ich für jede Spezialfunktion einen Methode einer Klasse aufrufen muss, dann wird es auch nicht übersichtlicher und imho sogar schlechter lesbar für die Leute, die zwar die Geräte kennen, aber meine Klassen nicht. Ein stumpfes inkludieren von Dateien fände ich hier immer noch schön. Vielen Dank für Eure Beiträge!
:
Bearbeitet durch User
Ich habe noch etwas weiter gegoogled und auf den ersten Blick sieht dies hier nach dem aus, was ich haben möchte: main.py: a = 25 exec(open("import_file.py").read()) print("ich bin main", a) import_file.py: print("ich bin importiert", a) a=37 liefert: ich bin importiert 25 ich bin main 37
Include bei Python funktioniert nicht wie bei C durch ein einfaches Einfügen des Codes. In Python müsstest du es so machen. Im Import File legst du eine Funktion mit deinen Kommandos an. Am Anfang der Main importierst du dein Import File und die Funktion rufst du dann an der gewünschten Stelle auf.
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.