hag Posted July 19, 2020 Share Posted July 19, 2020 Hallo! 1) In einem meiner Script-Module habe ich im Dialog-Manager die Modul und Kanal Eigenschaften ein wenig erweitert. Wenn ich jetzt bei laufender Messung den Dialog öffne und den Dialog mit OK verlassen, kommt es sporadisch zu Memory Error 🙁 Der Effekt lässt sich durch Änderung eines oder mehrere Parameter verstärken. Es macht auch kein Unterschied ob das Script-Modul in DASYLab 2016 oder 2020 ausgeführt wird. Ist es möglich das es darin liege das Python 32bit auf einem 64bit System ausgeführt wird oder ist der Speicher pro Script-Modul begrenzt? 2) Habe mal aufgeschnappt das es möglich ist das Script-Modul untereinander Daten austauschen können, das wäre ein guter Weg Aufgaben auf mehrere Script-Modul zu verteilen. Freue mich über anregende Ideen 🙂 Quote Link to comment Share on other sites More sharing options...
HolWo Posted July 21, 2020 Share Posted July 21, 2020 Hallo! Zu 1: Können Sie das betreffende Schaltbild und das Skript bitte zur Verfügung stellen? Zu 2: Im Anhang finden Sie dazu ein Beispiel-Schaltbild/Skript. Bei Fragen dazu, bitte fragen. DASYLab Storage Beispiel.zip Quote Link to comment Share on other sites More sharing options...
hag Posted July 21, 2020 Author Share Posted July 21, 2020 Ein herzlichen Dankeschön Zu 2 das schau ich mir mal an. Zu 1 ist unterwegs... Quote Link to comment Share on other sites More sharing options...
HolWo Posted July 22, 2020 Share Posted July 22, 2020 Hallo! Ich konnte leider keine Fehlermeldung auslösen, wenn ich bei laufendem Schaltbild die änderbaren Einstellungen manipuliert habe. Alles, was sich ändern lässt, habe ich in den drei Kanälen umgeschaltet (Checkboxen) oder um 1 inkrementiert bzw. dekrementiert. Dann mit Ok bestätigt. Aber auch nach dem 11. Änderungsmarathon war kein MemoryError ausgelöst worden. Im Skript ist in der ProcessData aber alles in eine Ausnahmebehandlung eingeschlossen (try-catch), sodass man nicht feststellen kann, wo genau diese Exception ausgelöst wird. Lassen Sie diese entweder weg, um dann, wenn es zur Ausnahme kommt, ablesen zu können, in welcher Zeile der Fehler aufgetreten ist oder verwenden Sie Pythons 'traceback' Modul/Bibliothek. import traceback try: x = 1/0 except ZeroDivisionError: print(traceback.format_exc()) --------------------------------------------------------------- Traceback (most recent call last): File "C:\Users\holgerwo\Desktop\test.py", line 4, in <module> x=1/0 ZeroDivisionError: integer division or modulo by zero Außerdem ist die "eingebettete Funktion" bitfield ungünstig platziert, da bei jedem Aufruf der ProcessData, noch vor der Prüfung, ob überhaupt Blöcke an den Eingängen sind, ein Funktionsobjekt erstellt werden muss. Da die ProcessData hunderte/tausende Male pro Sekunde aufgerufen wird, kommt möglicherweise die GarbageCollection von Python nicht nach und irgendwann ist nicht mehr genug Speicher da. Die "nested functions" in DlgOk hingegen (varInRange, etc.), werden nur bei Bedarf/einmalig genutzt, sodass es hier problemlos ist. Probieren Sie daher bitte, 'bitfield' außerhalb der pscript-Klasse zu implementieren und übergeben Sie notwendige Werte als Parameter, z.B. bitfield(self.pvar). Quote Link to comment Share on other sites More sharing options...
hag Posted July 22, 2020 Author Share Posted July 22, 2020 Hallo! Erst mal ganz herzlichen Dank für das schnelle Feedback, hoffe sie sind bei diesen Temperaturen und dem Marathon nicht ins Schwitzen gekommen. 😉 Bei mir lief das Skript heute auch ohne zu murren, vielleicht habe ich ja den Fehler vor dem Versenden ausgeputzt. 😂 Hab noch ein paar unnötige if-Abfragen entfernt, die bitfield-Funktion ausgelagert und das try-catch entfernt, sieht schon viel hübscher aus. 😁 Da ich aber den Status der bis zu 16 Schalter im laufenden Prozess benötige, frage ich diese nun alle 60 Sekunden in der ProcessValue ab. In das Beispiel-Schaltbild/Skript habe ich mal reingeschaut, sieht echt interessant aus, da lässt sich bestimmt was damit anstellen. Noch mal herzlichen Dank Quote Link to comment Share on other sites More sharing options...
hag Posted July 30, 2020 Author Share Posted July 30, 2020 Hallöchen, das mit der Storage klappt echt super. Durch die Aufteilung der Aufgaben spare mir viele globale Variablen und Strings. Jetzt bin ich auf ein anderes Hindernis im Dialogmanager gestoßen. Gibt es eine Möglichkeit die "EnableProperty" für jeden einzelnen Kanal zu setzen? Es ändern sich immer alle Kanäle wenn ich im Kanal meine Bedingungseinstellung ändere. Sommerliche Grüße Quote Link to comment Share on other sites More sharing options...
HolWo Posted August 3, 2020 Share Posted August 3, 2020 Hallo! Leider funktioniert dies nicht per Kanal, sondern nur pro Property, welche es jeweils einmal gibt, aber mit bis zu 16 zugewiesenen Werten (einer Wert pro Kanal). Quote Link to comment Share on other sites More sharing options...
hag Posted August 9, 2020 Author Share Posted August 9, 2020 Hallo, hab das jetzt so geregelt das die Propery Modulweise eingestellt wird. Damit komme ich gut zurecht Hab da noch eine Frage zu: Methode: DialogManager.GetPage() Liefert in den Modulfunktionen DlgInit und DlgEvent den Index der ausgewählten Dialogseite zurück. GetPage() Rückgabewert Liefert den Index der geöffneten Dialogseite zurück.0: Modulseite, 1: Kanalseite In Dlglnit liefert GetPage() nach SelectModulePage() eine 0 und nach SelectChannelPage() eine 1, jedoch im DlgEvent immer eine 1, egal welche Dialogseite ausgewählt ist. Würde die Methode gern in DlgEvent einsetzen um zu verhindern das nach einer Änderung in der Kanalseite immer auf die Modulseite gesprungen wird, dort lasse ich Eventgesteuert Propertys aktivieren oder deaktivieren. Hab schon versucht SelectPage() wegzulassen, dann bekomme ich aber Fehler Nachtrag: Hab noch ein weinig experimentiert und siehe da Mein Fehler war das ich den Aufruf dlg.opt.EnableProperty() anstatt dlg.EnableProperty() verwendet habe, jetzt brauche ich auch SelectPage() nicht mehr. Hab den Aufruf in irgendeinem Beispiel-Skript aufgeschappt... Bis zum nächten mal Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.