Jump to content
Sign in to follow this  
hag

Memory Error nach Dialog-Manager

Recommended Posts

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 🙂

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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).

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.:huh:

Sommerliche GrĂŒĂŸe

Share this post


Link to post
Share on other sites

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).

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...