Synology-Forum.nl
Overige software => Overige software => Topic gestart door: Mickeymouse 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
-
Misschien is het handig om die foutmelding te geven ?
(Geeft alleen maar een tip, zit zelf niet in Python code). ;)
-
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 :-(
-
Ik zie geen foutmelding of het moet aan mij liggen.
-
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.
-
Het enige wat gebeurt is dat de computer vastloopt met het scherm wat ik als eerste meegestuurd heb....
Dit in de automatische modus.
-
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!!!!!!
-
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 ;)