Auteur Topic: Eindeloze loop in Python code.  (gelezen 3744 keer)

Offline Mickeymouse

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 5
Eindeloze loop in Python code.
« Gepost op: 10 februari 2014, 13:03:06 »
Goedemiddag,


Zou iemand die verstand van Python heeft mij aub kunnen helpen?
Ik heb een programma ontwikkeld die het in de handmatige modus wel doet mar in de automatische krijg ik steeds een foutmelding :-(

Er zit ergens blijkbaar een eindeloze loop, zelf heb ik weinig ervaring met Python, het zou mooi zijn als iemand hier naar zou kunnen kijken om te zien waar de eindeloze loop zit.

Hieronder de code, alvast bedankt!

 ## start the aquisition
    #
   
    def startAcquisition(self):
       
        if self.com_serie.isOpen() == True:
       
            message = str()
            message_data = str()
             
            ##
            ## we send here the configuration to the system
            if self.automatic_mode.isChecked() == True:

           
                timeToWait = self.box_burst_time.value()
                self.btn_stop_acquisition.setEnabled(True)    #Activamos el botÛn de stop de adquisiciÛn en modo auto
                               
                print "pulse_burst_period"
                listCharacter = ["a"] #to avoid that the list is empty
                message = "#pulse_burst_period" + str(int(timeToWait)) + "%"

                self.com_serie.write(message)
                while(listCharacter[len(listCharacter)-1] != '%'):
                    listCharacter.append(self.com_serie.read())
                message = "".join(listCharacter)

                message = message[message.find("#"):message.find("%") + 1]
                print "recu " + message
               
               
                print "auto"
                listCharacter = ["a"] #to avoid that the list is empty
                message = "#mode_auto%"
                self.com_serie.write(message)

                while(listCharacter[len(listCharacter)-1] != '%'):
                    listCharacter.append(self.com_serie.read())
                message = "".join(listCharacter)

                message = message[message.find("#"):message.find("%") + 1]
                print "recu " + message
                   
            else:

                print "manu"
                #timeToWait = 1 #0
                listCharacter = ["a"] #to avoid that the list is empty
                message = "#mode_manual%"

                self.com_serie.write(message)
                while(listCharacter[len(listCharacter)-1] != '%'):
                    listCharacter.append(self.com_serie.read())
                message = "".join(listCharacter)

                message = message[message.find("#"):message.find("%") + 1]
                print "recu " + message
               
            ## now we get the data

            message = "#start%"
            self.com_serie.write(message)
            time.sleep(1)
            listCharacter = ["a"] #to avoid that the list is empty

            while(listCharacter[len(listCharacter)-1] != '%'):
                listCharacter.append(self.com_serie.read())
            message = "".join(listCharacter)
            message = message[message.find("#"):message.find("%") + 1]
            print "recu " + message
                               
            #############################

            ## Get the data
            #############################
            self.get_data()
               
            #############################
            ## Plot them

            ############################# 
            print "Ploting..."
            self.update_plot()
                               
 
    def automatic_get_data(self):

        print "auto get data!"
        self.get_data()       
        self.update_plot()
   
    def get_data(self):
        self.dataStr = []
        self.data = []

        self.datafilter = []
               
        message_data = self.getMessageCom()
                   
        print "Estos son los datos  " + message_data  #debug

        message_data = message_data [:len(message_data)-1]   
        self.dataStr = message_data.split(";")
               
        for data in self.dataStr:
            data = int(data)

            data = (data * 3300.0) / 4095.0
            print data   #debug
            self.data.append(data)
            self.datafilter.append(self.filtre.newInputFilter(data))


   
               
    def update_plot(self):
       
        self.fenetre.setCurrentIndex(1)   #Cambia de pestaÒa y muestra gr·fica
       
       

        if self.automatic_mode.isChecked() == False:
            print "Manual mode"
            self.figRaw.axes.clear()
            self.figRaw.axes.plot(self.data)
            self.figRaw.axes.set_title("Raw data")
            self.figRaw.axes.set_xlabel("Time")
            self.figRaw.axes.set_ylabel("Voltage")
            self.figRaw.draw()

       
            self.figFilter.axes.clear()
            self.figFilter.axes.plot(self.datafilter)
            self.figFilter.axes.set_title("Filtered data")
            self.figFilter.axes.set_xlabel("Time")

            self.figFilter.axes.set_ylabel("Voltage")
            self.figFilter.draw()
        else:
            print "Automatic mode"
            self.figRaw.axes.plot(self.data)

            self.figRaw.draw()
           
            self.figFilter.axes.plot(self.datafilter)
            self.figFilter.draw()
           
            self.automatic_get_data()  # imprimir de forma contÌnua



       
        #hl.set_xdata(numpy.append(hl.get_xdata(), new_data))
        #hl.set_ydata(numpy.append(hl.get_ydata(), new_data))
        #plt.draw()
   

    def stopAcquisition(self):
        message = "#stop%"
        self.com_serie.write(message)
        time.sleep(1)
        listCharacter = ["a"] #to avoid that the list is empty

        while(listCharacter[len(listCharacter)-1] != '%'):
            listCharacter.append(self.com_serie.read())
        message = "".join(listCharacter)
        message = message[message.find("#"):message.find("%") + 1]

        print "recu " + message


Offline Birdy

  • Global Moderator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 1381
  • -Ontvangen: 7978
  • Berichten: 43.980
  • Alleen een PB sturen als hier om gevraag wordt.
    • Truebase
Re: Eindeloze loop in Python code.
« Reactie #1 Gepost op: 10 februari 2014, 13:07:38 »
Misschien is het handig om die foutmelding te geven ?
(Geeft alleen maar een tip, zit zelf niet in Python code).  ;)


CS406      DSM 2.0-0731    DS508      DSM 4.0-2265      DS411+II  DSM 6.2.4-25556-7   DS115J    DSM 7.1.1-42962-5   DS918+    DSM 6.2.4-25556-7
DS107+     DSM 3.1-1639    DS411slim  DSM 6.2.4-25556   DS213J    DSM 6.2.4-25556-7   DS1515+   DSM 6.2.4-25556-7   DS220+    DSM 7.2.2-72806-1
DS107+     DSM 3.1-1639    DS111      DSM 5.2-5967-9    DS413J    DSM 6.2.3-25426-2   DS716+II  DSM 7.2.2-72806     RT2600ac  SRM 1.2.5-8227-11
BeeDrive   1TB             BeeServer  BSM 1.1-65374                                                                 MR2200ac  SRM 1.2.5-8227-11

Offline Mickeymouse

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 5
Re: Eindeloze loop in Python code.
« Reactie #2 Gepost op: 10 februari 2014, 14:09:33 »
Hallo Birdy!


Bedankt dat je me wilt helpen.
Als bijlage kun je zien wat er op het beeldscherm verschijnt.
Sorry dat het zo houterig gaat maar ik heb er zelf weinig verstand van :-(



Offline Birdy

  • Global Moderator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 1381
  • -Ontvangen: 7978
  • Berichten: 43.980
  • Alleen een PB sturen als hier om gevraag wordt.
    • Truebase
Re: Eindeloze loop in Python code.
« Reactie #3 Gepost op: 10 februari 2014, 14:37:49 »
Ik zie geen foutmelding of het moet aan mij liggen.


CS406      DSM 2.0-0731    DS508      DSM 4.0-2265      DS411+II  DSM 6.2.4-25556-7   DS115J    DSM 7.1.1-42962-5   DS918+    DSM 6.2.4-25556-7
DS107+     DSM 3.1-1639    DS411slim  DSM 6.2.4-25556   DS213J    DSM 6.2.4-25556-7   DS1515+   DSM 6.2.4-25556-7   DS220+    DSM 7.2.2-72806-1
DS107+     DSM 3.1-1639    DS111      DSM 5.2-5967-9    DS413J    DSM 6.2.3-25426-2   DS716+II  DSM 7.2.2-72806     RT2600ac  SRM 1.2.5-8227-11
BeeDrive   1TB             BeeServer  BSM 1.1-65374                                                                 MR2200ac  SRM 1.2.5-8227-11

Offline Mickeymouse

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 5
Re: Eindeloze loop in Python code.
« Reactie #4 Gepost op: 10 februari 2014, 14:58:41 »
Hoi Birdy,


Het probleem is dat de computer vastloopt als de automatische modus ingezet wordt.

Het scherm dat er als bijlage bijzit verschijnt dan. Ik zal nu het beeldscherm meesturen dat bij

de handmatige modus verschijnt. Misschien dat dat verduidelijkend is. Ik zal echter nog kijken of er een echte

foutmelding is. Ik ben er bijna zaker van dat het om een oneindige loop gaat, maar deze kan ik zelf niet vinden.

Offline Mickeymouse

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 5
Re: Eindeloze loop in Python code.
« Reactie #5 Gepost op: 10 februari 2014, 16:06:09 »
Het enige wat gebeurt is dat de computer vastloopt met het scherm wat ik als eerste meegestuurd heb....
Dit in de automatische modus.

Offline Mickeymouse

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 5
Re: Eindeloze loop in Python code.
« Reactie #6 Gepost op: 10 februari 2014, 16:46:57 »
Hallo  :)

Oké ik heb wat meer tijd en zal het verhaal iets gedetailleerder uitleggen ;-)

Een hardware apparaat geprogrameerd door mij volgt de instructies op van het computerprogramma dat gemaakt is met Python. Het wordt aan de computer verbonden en creëert een virtuele COM haven via USB.
De communicatie, configuratie en knoppen doen het goed, het probleem doet zich alleen voor  als ik de data wil uitbeelden die het hardware apparaatje zendt als ik deze in de "Automatic" modus zet en het apparaat elke seconde de data zendt en het computerprogramma vastloopt.
Echter, als ik het in de handmatige modus zet, dan doet deze het wèl goed. De data worden uitgebeeld (random data). De handmatige modus maakt alleen lezingen als men op de knop "Start Ultrasonic Measurement" klikt. Als bijlagen zitten er 2 schermafbeeldingen bij, in de handmatige modus
(OK) en de automatische (PC vastgelopen).

Alles zit in de bijlage zip GUI5.zip. Het programma en een txt.. bestand. die "valores de test" heet, er zitten wat random data bij zodat een test uitgevoerd kan worden.

Ik hoop dat het zo veel duidelijker is, en wat het probleem is. Het zou mooi zijn als jullie mij verder kunnen helpen. Ik hoop dat het voor Birdy zo ook helderder is.
Eerder heb ik al gezegd dat er zeer waarschijnlijk een oneindige loop in de Python codes zit, maar ik weet niet waar en ben er ook niet 100% zeker van dat dit het probleem is.

Willen jullie mij aub helpen!!!!!   Bedankt!!!!!!

Offline Birdy

  • Global Moderator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 1381
  • -Ontvangen: 7978
  • Berichten: 43.980
  • Alleen een PB sturen als hier om gevraag wordt.
    • Truebase
Re: Eindeloze loop in Python code.
« Reactie #7 Gepost op: 10 februari 2014, 17:05:11 »
Zoals gezegd, ik probeerde alleen maar het probleem zichtbaar te krijgen (zeg maar vooronderzoek) m.b.t. de foutmelding ("in de automatische krijg ik steeds een foutmelding") en printscreens.
Maar dit schijnt niet te gaan lukken:

- geen foutmelding.
- 5 x dezelfde printscreens (pdf).

Je zult nu moet wachten op iemand die je Python-script kan beoordelen.


Maar, om eerlijk te zijn, kun je misschien beter naar deze site gaan:
http://www.python.org/
en je vraag op een van de Python fora zetten, die ook te vinden zijn op http://www.python.org/

Want, uiteindelijk, heeft deze topic niets te maken met een NAS en/of Synology DSM 4.2.
Maar goed....dat is mijn mening en tip  ;)


CS406      DSM 2.0-0731    DS508      DSM 4.0-2265      DS411+II  DSM 6.2.4-25556-7   DS115J    DSM 7.1.1-42962-5   DS918+    DSM 6.2.4-25556-7
DS107+     DSM 3.1-1639    DS411slim  DSM 6.2.4-25556   DS213J    DSM 6.2.4-25556-7   DS1515+   DSM 6.2.4-25556-7   DS220+    DSM 7.2.2-72806-1
DS107+     DSM 3.1-1639    DS111      DSM 5.2-5967-9    DS413J    DSM 6.2.3-25426-2   DS716+II  DSM 7.2.2-72806     RT2600ac  SRM 1.2.5-8227-11
BeeDrive   1TB             BeeServer  BSM 1.1-65374                                                                 MR2200ac  SRM 1.2.5-8227-11