From brian at python.org Mon Feb 3 17:08:17 2014 From: brian at python.org (Brian Curtin) Date: Mon, 03 Feb 2014 16:08:17 -0000 Subject: [python-nl] PyCon 2014 - 400 tickets remain! Message-ID: Hi Dutch Python Users Group! PyCon 2014, taking place April 9-17 in Montreal, has just passed 1600 tickets sold, and we're seeing sales ramp up very quickly. Late last week we were announcing the 1500 mark, and with a cap of 2000 tickets, we expect these last four hundred to move quickly. Head to https://us.pycon.org/2014/registration/ to buy yours today! This year's talk schedule is available at https://us.pycon.org/2014/schedule/talks/, along with a keynote series including EFF co-founder John Perry Barlow; IPython creator, Fernando Perez; PSF director, Jessica McKellar; PSF chairman, Van Lindberg; and Python's creator, Guido van Rossum. The tutorial schedule is available at https://us.pycon.org/2014/schedule/tutorials/, and spaces are limited! You'd be hard pressed to find a better value than our tutorials. We've long thought PyCon to be family friendly, and last year's "Young Coder" tutorials were a hugely successful step towards showing it. The tutorials are back again this year, with registration opening shortly for children 12 and over: https://us.pycon.org/2014/events/letslearnpython/. For kids under 12, we're pleased to be offering childcare! See https://us.pycon.org/2014/childcare/ for details. The 5K Charity Fun Run is on its third year, with proceeds benefiting the EFF. It's a fun time and supports a good cause. For the 5K and many other events, check out the Events section on https://us.pycon.org/2014/ If you require an invitation letter in order acquire a travel visa, please email pycon-organizers at python.org! For the latest updates, follow us on Twitter at https://twitter.com/pycon, and on our blog at http://pycon.blogspot.com/ Hope to see you in Montreal! Diana Clarke, Chair diana.joan.clarke at gmail.com Brian Curtin, Publicity Coordinator brian at python.org From nicolaas at l1nda.nl Wed Feb 5 13:52:07 2014 From: nicolaas at l1nda.nl (Nicolaas Heyning | L1NDA.nl) Date: Wed, 5 Feb 2014 13:52:07 +0100 Subject: [python-nl] Job vacancy Message-ID: Dear Pythonistas, It has been a while, but L1NDA has got a new python job in offer. We're are looking for a medior developer for our office in Amsterdam. More info: http://www.l1nda.nl/job_medior_python_dev.php Hope to hear from you! Greetings, Nicolaas -- *L1NDA B.V.* * www.l1nda.nl * * www.facebook.com/L1NDA.NL * Nieuwezijds Voorburgwal 101-III 1012 RG, Amsterdam 020-7526690 KvK: 57861765 -------------- next part -------------- An HTML attachment was scrubbed... URL: From isdan24 at hotmail.com Mon Feb 17 16:54:47 2014 From: isdan24 at hotmail.com (B. Bell) Date: Mon, 17 Feb 2014 16:54:47 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: References: , , , , Message-ID: Goedemiddag allemaal, Zou iemand mij aub kunnen helpen? Ik heb een probleem met een Python code en wilde vragen of iemand me aub zou kunnen helpen. De probleemstelling is: 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 port 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. Nu zijn er 2 lijnen waarlangs data binnenkomen en het lijkt er op dat er een soort "strijd" ontstaat tussen deze 2 stromen. Kan iemand aub bekijken wat er loos kan zijn, en hoe dit opgeslost kan worden? Alvast hardstikke bedankt voor de moeite! Er kan op zich niet veel fout zijn, maar toch zit er iets niet helemaal goed... Met vriendelijke groet, Bernhard. ------------- volgend deel ------------ Een HTML-bijlage is gescrubt... URL: ------------- volgend deel ------------ Een niet-tekst bijlage is gescrubt... Naam: Grafica_m...bmp Type: image/bmp Grootte: 3148854 bytes Omschrijving: niet beschikbaar URL : ------------- volgend deel ------------ Een niet-tekst bijlage is gescrubt... Naam: Grafica_modo_manual_OK.bmp Type: image/bmp Grootte: 2563950 bytes Omschrijving: niet beschikbaar URL : ------------- volgend deel ------------ Een niet-tekst bijlage is gescrubt... Naam: GUI5.zip Type: application/zip Grootte: 11520 bytes Omschrijving: niet beschikbaar URL : From Chris.Wesseling at cwi.nl Tue Feb 18 20:32:01 2014 From: Chris.Wesseling at cwi.nl (Chris Wesseling) Date: Tue, 18 Feb 2014 20:32:01 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: References: Message-ID: <20140218193201.GD18372@cwi.nl> On 2014-02-17T16:54:47+0100, B. Bell wrote: > De probleemstelling is: > > 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 port 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). Heb je je logica al eens geprobeerd zonder GUI? Je serial I/O is niet asynchroon en kan je Qt eventloop blokkeren, waardoor het lijkt alsof je programma vastloopt, maar in werkelijkheid alleen je GUI niet reageerd op je gebruikers input, omdat je programma druk bezig is met je hardware apparaat. -- Chris Wesseling Centrum Wiskunde & Informatica (CWI) https://www.cwi.nl/people/ccw -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 819 bytes Desc: not available URL: From isdan24 at hotmail.com Fri Feb 21 09:13:58 2014 From: isdan24 at hotmail.com (B. Bell) Date: Fri, 21 Feb 2014 09:13:58 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: <20140218193201.GD18372@cwi.nl> References: , , , , , , <20140218193201.GD18372@cwi.nl> Message-ID: Goedemorgen Chris, Bedankt voor het reageren op mijn bericht. Om eerlijk te zijn ben ik redelijk nieuw met Python programmering, sterker nog, het is de eerste keer dat ik het echt gebruik. Het is bijna onmogelijk om hulp te krijgen en ik probeer echt van alles, je reactie is al een lichtpunt! Hieronder staat de complete code, is het misschien mogelijk voor je om binnen de code aan te geven welke wijzigingen ik waar moet aanbrengen of wat ik evt kan weglaten? Ik ben al meer dan een maand bezig hiermee en kom er echt niet uit. Ik zal je er eeuwig dankbaar voor zijn! import sysfrom PyQt4 import QtGui, QtCoreimport signal #to close the windows with ctrl+Cimport serial import matplotlibwidgetimport filtreimport timeimport math class MainWindows(QtGui.QMainWindow): # Global variables continu = True def __init__(self): super(MainWindows, self).__init__() self.initGUI() ## init all the GUI windows # def initGUI(self): ### ##define filtre self.filtre = filtre.filtreIIR2(0.29289322, 0.58578644, 0.29289322, 0, 0.17157288) ## ## define the GUI zoneCentrale = QtGui.QWidget() windowsIcon = QtGui.QIcon("esiLogo.PNG") self.setWindowIcon(windowsIcon) self.greenPalette = QtGui.QPalette() self.greenPalette.setColor(QtGui.QPalette.Button, QtGui.QColor(0, 255, 0, 127)) self.redPalette = QtGui.QPalette() self.redPalette.setColor(QtGui.QPalette.Button, QtGui.QColor(255, 0, 0, 127)) ## ##Boxs to port series connect gridbox_com_connection = QtGui.QGridLayout() name_com_connection = QtGui.QLabel("Ultrasonic board connection:") name_numero_com = QtGui.QLabel("Serial COM Port connection") name_baud_rate = QtGui.QLabel("Baud Rate") self.box_numero_com = QtGui.QComboBox() self.box_baude_rate = QtGui.QComboBox() liste_baud_rate = ["110", "150", "300", "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200", "230400", "460800", "921600"] for baude_rate in liste_baud_rate: self.box_baude_rate.addItem(baude_rate) liste_port_com = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "28"] for port_com in liste_port_com: self.box_numero_com.addItem(port_com) self.liste_com = [self.box_numero_com, self.box_baude_rate] self.btn_connect = QtGui.QPushButton("Connect") gridbox_com_connection.addWidget(name_com_connection, 0, 0, 1, 2) gridbox_com_connection.addWidget(name_numero_com, 1,0) gridbox_com_connection.addWidget(self.box_numero_com, 1, 1) gridbox_com_connection.addWidget(name_baud_rate, 2, 0) gridbox_com_connection.addWidget(self.box_baude_rate, 2, 1) gridbox_com_connection.addWidget(self.btn_connect, 3, 1) self.com_serie = serial.Serial() self.connect(self.btn_connect, QtCore.SIGNAL("clicked()"), self.comConnect) ## ##Boxs to send pulses gridbox_send_pulsos = QtGui.QGridLayout() name_pulsos = QtGui.QLabel("Ultrasonic Burst Emission:") name_frequencia = QtGui.QLabel("Frequency (in Hz)") name_num_pulsos = QtGui.QLabel("Number of pulses") #name_duty_cycle = QtGui.QLabel("Duty_cycle") self.box_frequencia = QtGui.QDoubleSpinBox() self.box_num_pulsos = QtGui.QDoubleSpinBox() #self.box_duty_cycle = QtGui.QDoubleSpinBox() self.liste_pulsos = [self.box_frequencia, self.box_num_pulsos] #, self.box_duty_cycle] for spinBox in self.liste_pulsos: spinBox.setSingleStep(1) spinBox.setRange(0,500000) spinBox.setDecimals(0) self.btn_send_pulsos = QtGui.QPushButton("Send Ultrasonic Burst Configuration") gridbox_send_pulsos.addWidget(name_pulsos, 0, 0, 1, 2) gridbox_send_pulsos.addWidget(name_frequencia, 1, 0) gridbox_send_pulsos.addWidget(self.box_frequencia, 1, 1) gridbox_send_pulsos.addWidget(name_num_pulsos, 2, 0) gridbox_send_pulsos.addWidget(self.box_num_pulsos, 2, 1) #gridbox_send_pulsos.addWidget(name_duty_cycle, 3, 0) #gridbox_send_pulsos.addWidget(self.box_duty_cycle, 3, 1) gridbox_send_pulsos.addWidget(self.btn_send_pulsos, 4, 1) self.connect(self.btn_send_pulsos, QtCore.SIGNAL("clicked()"), self.sendPulsos) ## ##Box to send acquisition parameter gridbox_send_acquisition = QtGui.QGridLayout() name_acquisition = QtGui.QLabel("Acquisition Parameter Configuration :") name_number_point = QtGui.QLabel("Number of Points at 2,4MHz Sampling freq.") name_time_before_acquisition = QtGui.QLabel("Delay Time Before Acquisition (in ms)") self.box_number_point = QtGui.QDoubleSpinBox() self.box_time_before_acquisition = QtGui.QDoubleSpinBox() self.liste_acquisition = [self.box_number_point, self.box_time_before_acquisition] for spinBox in self.liste_acquisition: spinBox.setSingleStep(1) spinBox.setRange(0,8000) spinBox.setDecimals(0) self.btn_send_acquisition = QtGui.QPushButton("Send Acquisition Parameter Configuration") gridbox_send_acquisition.addWidget(name_acquisition, 0, 0, 1, 2) gridbox_send_acquisition.addWidget(name_number_point, 1, 0) gridbox_send_acquisition.addWidget(self.box_number_point, 1, 1) gridbox_send_acquisition.addWidget(name_time_before_acquisition, 2, 0) gridbox_send_acquisition.addWidget(self.box_time_before_acquisition, 2, 1) gridbox_send_acquisition.addWidget(self.btn_send_acquisition, 3, 1) self.connect(self.btn_send_acquisition, QtCore.SIGNAL("clicked()"), self.sendAcquisitionParameter) ## ##Box to send filter parameter gridbox_send_filter = QtGui.QGridLayout() name_filter = QtGui.QLabel("Filter Parameters :") name_b00 = QtGui.QLabel("b00") name_b01 = QtGui.QLabel("b01") name_b02 = QtGui.QLabel("b02") self.box_b00 = QtGui.QDoubleSpinBox() self.box_b01 = QtGui.QDoubleSpinBox() self.box_b02 = QtGui.QDoubleSpinBox() self.liste_filter = [self.box_b00, self.box_b01, self.box_b02] for spinBox in self.liste_filter: spinBox.setSingleStep(0.0001) spinBox.setRange(0,500) spinBox.setDecimals(4) # Este bot?n ahora tiene sentido?? No, habr?a que hacer el c?lculo con las varibles b00, b01 y b02. El filtrado se hace en el PC y no en el uC. self.btn_send_filter = QtGui.QPushButton("Send Filter Parameters") gridbox_send_filter.addWidget(name_filter, 0, 0, 1, 2) gridbox_send_filter.addWidget(name_b00, 1, 0) gridbox_send_filter.addWidget(self.box_b00, 1, 1) gridbox_send_filter.addWidget(name_b01, 2, 0) gridbox_send_filter.addWidget(self.box_b01, 2, 1) gridbox_send_filter.addWidget(name_b02, 3, 0) gridbox_send_filter.addWidget(self.box_b02, 3, 1) gridbox_send_filter.addWidget(self.btn_send_filter, 4, 1) self.connect(self.btn_send_filter, QtCore.SIGNAL("clicked()"), self.sendFilterParameter) ## ##button to start a test name_start_test = QtGui.QLabel("Ultrasonic Measurements :") self.manual_mode = QtGui.QRadioButton("Manual") self.automatic_mode = QtGui.QRadioButton("Automatic") self.box_burst_time = QtGui.QDoubleSpinBox() self.box_burst_time.setSingleStep(3) self.box_burst_time.setRange(1,60) self.box_burst_time.setDecimals(0) gridbox_start_acquisition = QtGui.QGridLayout() self.btn_start_acquisition = QtGui.QPushButton("Start Ultrasonic Measurement") self.btn_stop_acquisition = QtGui.QPushButton("Stop Ultrasonic Measurement") gridbox_start_acquisition.addWidget(name_start_test, 0, 0) gridbox_start_acquisition.addWidget(self.manual_mode, 1, 0) gridbox_start_acquisition.addWidget(self.automatic_mode, 2, 0) gridbox_start_acquisition.addWidget(self.box_burst_time, 3, 1) gridbox_start_acquisition.addWidget(self.btn_start_acquisition, 4, 0, 1, 2) gridbox_start_acquisition.addWidget(self.btn_stop_acquisition, 5, 0, 1, 2) self.connect(self.btn_start_acquisition, QtCore.SIGNAL("clicked()"), self.startAcquisition) self.connect(self.btn_stop_acquisition, QtCore.SIGNAL("clicked()"), self.stopAcquisition) ## ##init graph gridbox_graph = QtGui.QGridLayout() name_graph = QtGui.QLabel("Result :") self.figRaw = matplotlibwidget.MatplotlibWidget(parent=self, title="Raw data", xlabel="Time", ylabel="Voltage") self.figFilter = matplotlibwidget.MatplotlibWidget(parent=self, title="Filtered data", xlabel="Time",ylabel="Voltage") gridbox_graph.addWidget(self.figRaw, 1, 0) gridbox_graph.addWidget(self.figFilter, 1, 1) gridbox_graph.addWidget(name_graph, 0, 0, 1, 2) self.catch = False self.figRaw.mpl_connect('scroll_event', self.OnScrollEvt) self.figFilter.mpl_connect('scroll_event', self.OnScrollEvt) self.figRaw.mpl_connect('button_press_event', self.OnPress) self.figRaw.mpl_connect('button_release_event', self.OnRelease) self.figRaw.mpl_connect('motion_notify_event', self.OnMotion) self.figFilter.mpl_connect('button_press_event', self.OnPress) self.figFilter.mpl_connect('button_release_event', self.OnRelease) self.figFilter.mpl_connect('motion_notify_event', self.OnMotion) ## ##initialise the color of each button self.btn_connect.setPalette(self.greenPalette) self.btn_connect.setAutoFillBackground(True) self.btn_connect.setFlat(True) self.btn_send_pulsos.setPalette(self.redPalette) self.btn_send_pulsos.setAutoFillBackground(True) self.btn_send_pulsos.setFlat(True) self.btn_send_filter.setPalette(self.redPalette) self.btn_send_filter.setAutoFillBackground(True) self.btn_send_filter.setFlat(True) self.btn_send_acquisition.setPalette(self.redPalette) self.btn_send_acquisition.setAutoFillBackground(True) self.btn_send_acquisition.setFlat(True) self.btn_send_pulsos.setEnabled(False) self.btn_send_filter.setEnabled(False) self.btn_send_acquisition.setEnabled(False) self.btn_start_acquisition.setEnabled(False) self.btn_stop_acquisition.setEnabled(False) ## ##save file name_save = QtGui.QLabel("Save Measurement :") gridbox_save_file = QtGui.QGridLayout() self.btn_save_file = QtGui.QPushButton("Save") self.btn_browse = QtGui.QPushButton("Browse") self.connect(self.btn_save_file, QtCore.SIGNAL("clicked()"), self.saveFile) self.connect(self.btn_browse, QtCore.SIGNAL("clicked()"), self.Browse) self.path = QtGui.QLineEdit() gridbox_save_file.addWidget(name_save, 0, 0, 1, 2) gridbox_save_file.addWidget(self.path, 1, 0, 1, 2) gridbox_save_file.addWidget(self.btn_browse, 2, 0) gridbox_save_file.addWidget(self.btn_save_file, 2, 1) ## ##Window self.setGeometry(100, 100, 1000, 600) self.setWindowTitle('Ultrasonic Prototipe System') self.setCentralWidget(zoneCentrale) self.vline = QtGui.QFrame() self.vline.setFrameShape(QtGui.QFrame.VLine) self.vline.setFrameShadow(QtGui.QFrame.Sunken) self.hline = QtGui.QFrame() self.hline.setFrameShape(QtGui.QFrame.HLine) self.hline.setFrameShadow(QtGui.QFrame.Sunken) self.hline2 = QtGui.QFrame() self.hline2.setFrameShape(QtGui.QFrame.HLine) self.hline2.setFrameShadow(QtGui.QFrame.Sunken) self.hline4 = QtGui.QFrame() self.hline4.setFrameShape(QtGui.QFrame.HLine) self.hline4.setFrameShadow(QtGui.QFrame.Sunken) self.hline5 = QtGui.QFrame() self.hline5.setFrameShape(QtGui.QFrame.HLine) self.hline5.setFrameShadow(QtGui.QFrame.Sunken) gridLayout = QtGui.QGridLayout() gridLayout2 = QtGui.QGridLayout() gridLayout.addLayout(gridbox_com_connection, 0, 2, 3, 1) gridLayout.addWidget(self.vline, 0, 1, 5, 1) gridLayout.addLayout(gridbox_send_pulsos, 0, 0) gridLayout.addWidget(self.hline, 1, 0) gridLayout.addLayout(gridbox_send_acquisition, 2, 0) gridLayout.addWidget(self.hline2, 3, 0) gridLayout.addLayout(gridbox_send_filter, 4, 0) gridLayout.addWidget(self.hline4, 3, 2) gridLayout.addLayout(gridbox_start_acquisition, 4, 2) gridLayout2.addLayout(gridbox_graph, 0, 0) gridLayout2.addLayout(gridbox_save_file, 2, 0) gridLayout2.addWidget(self.hline5, 1, 0) wid1 = QtGui.QWidget() wid2 = QtGui.QWidget() wid1.setLayout(gridLayout) wid2.setLayout(gridLayout2) self.fenetre = QtGui.QTabWidget(zoneCentrale) self.fenetre.setGeometry(0, 0, 1000, 600) self.fenetre.addTab(wid1, "Configuration") self.fenetre.addTab(wid2, "Graph Analysis") self.show() ## Connect the application to the port serial given by the user # def comConnect(self): portConnection, success = self.box_numero_com.currentText().toInt() baudeRate, success2 = self.box_baude_rate.currentText().toInt() if success != True and success2 != True: QtGui.QMessageBox.warning(self, "Warning", "fail to convert the number from the box", QtGui.QMessageBox.Ok) else: if self.com_serie.isOpen() == True: #if there is alredy a connection, we close it self.com_serie.close() self.com_serie.baudrate = baudeRate self.com_serie.port = portConnection - 1 self.com_serie.timeout = 2 #we put two seconde of timeout try: self.com_serie.open() print "Success to open connection" ## we put all the button in green to show that you can use it self.btn_connect.setPalette(self.greenPalette) self.btn_connect.setAutoFillBackground(True) self.btn_connect.setFlat(True) self.btn_send_pulsos.setPalette(self.greenPalette) self.btn_send_pulsos.setAutoFillBackground(True) self.btn_send_pulsos.setFlat(True) self.btn_send_filter.setPalette(self.greenPalette) self.btn_send_filter.setAutoFillBackground(True) self.btn_send_filter.setFlat(True) self.btn_send_acquisition.setPalette(self.greenPalette) self.btn_send_acquisition.setAutoFillBackground(True) self.btn_send_acquisition.setFlat(True) self.btn_send_pulsos.setEnabled(True) self.btn_send_filter.setEnabled(True) self.btn_send_acquisition.setEnabled(True) self.btn_start_acquisition.setEnabled(True) except: QtGui.QMessageBox.warning(self, "Warning", "fail to open the connection", QtGui.QMessageBox.Ok) self.btn_send_pulsos.setPalette(self.redPalette) self.btn_send_pulsos.setAutoFillBackground(True) self.btn_send_pulsos.setFlat(True) self.btn_send_filter.setPalette(self.redPalette) self.btn_send_filter.setAutoFillBackground(True) self.btn_send_filter.setFlat(True) self.btn_send_acquisition.setPalette(self.redPalette) self.btn_send_acquisition.setAutoFillBackground(True) self.btn_send_acquisition.setFlat(True) self.btn_send_pulsos.setEnabled(False) self.btn_send_filter.setEnabled(False) self.btn_send_acquisition.setEnabled(False) self.btn_start_acquisition.setEnabled(False) ## Send all the parameter for the pulses. nbPulse, frequency, duty_cycle # def sendPulsos(self): if self.com_serie.isOpen() == True: self.btn_send_pulsos.setPalette(self.redPalette) self.btn_send_pulsos.setAutoFillBackground(True) self.btn_send_pulsos.setFlat(True) message = str() listCharacter = ["a"] #to avoid that the list is empty message = "#pulse_freq" + str(int(self.box_frequencia.value())) + "%" 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 listCharacter = ["a"]#to avoid that the list is empty message = "#pulse_num" + str(int(self.box_num_pulsos.value())) + "%" 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 # listCharacter = ["a"]#to avoid that the list is empty # message = "#pulse_duty_cycle" + str(int(self.box_duty_cycle.value())) + "%" # 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 self.btn_send_pulsos.setPalette(self.greenPalette) self.btn_send_pulsos.setAutoFillBackground(True) self.btn_send_pulsos.setFlat(True) else: QtGui.QMessageBox.warning(self, "Warning", "The port serial have not been open", QtGui.QMessageBox.Ok) ## Send all the parameter for the Acquisition, nbPoint and the time before making acquisition # def sendAcquisitionParameter(self): if self.com_serie.isOpen() == True: self.btn_send_acquisition.setPalette(self.redPalette) self.btn_send_acquisition.setAutoFillBackground(True) self.btn_send_acquisition.setFlat(True) message = str() listCharacter = ["a"] #to avoid that the list is empty message = "#adq_n_points" + str(int(self.box_number_point.value())) + "%" 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 listCharacter = ["a"] #to avoid that the list is empty message = "#adq_delay_time" + str(int(self.box_time_before_acquisition.value())) + "%" 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 self.btn_send_acquisition.setPalette(self.greenPalette) self.btn_send_acquisition.setAutoFillBackground(True) self.btn_send_acquisition.setFlat(True) else: QtGui.QMessageBox.warning(self, "Warning", "The port serial have not been open", QtGui.QMessageBox.Ok) ## Send all the parameter for the filter # def sendFilterParameter(self): if self.com_serie.isOpen() == True: self.btn_send_filter.setPalette(self.redPalette) self.btn_send_filter.setAutoFillBackground(True) self.btn_send_filter.setFlat(True) self.btn_send_filter.setPalette(self.greenPalette) self.btn_send_filter.setAutoFillBackground(True) self.btn_send_filter.setFlat(True) else: QtGui.QMessageBox.warning(self, "Warning", "The port serial have not been open", QtGui.QMessageBox.Ok) ## save the data in the file given by the Line Edit widget # def saveFile(self): filename = self.path.text() file = QtCore.QFile(filename) file.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text) ################ ### how do we store them ################# for data in self.data: file.write(str(data)) file.write('\n') file.write("filtered data\n") for data in self.datafilter: file.write(str(data)) file.write('\n') file.close() ## Allow the user to give a path where to store the data. This path is then display in the line edit widget # def Browse(self): filename = QtGui.QFileDialog.getSaveFileName(self, "Save file", "", ".txt") self.path.setText(filename) ## 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 def OnScrollEvt(self, event): xmin, xmax = event.canvas.axes.get_xlim() xmoy = (xmax + xmin)/2.0 event.canvas.axes.set_xlim(xmoy - (xmoy - xmin)*math.pow(1.1, event.step), (xmax - xmoy)*math.pow(1.1, event.step) + xmoy) event.canvas.draw() def OnPress(self, event): self.catch = True self.x0 = event.x self.y0 = event.y def OnMotion(self, event): if self.catch == True: ymin, ymax = event.canvas.axes.get_ylim() xmin, xmax = event.canvas.axes.get_xlim() dx = (event.x - float(self.x0))*(xmax-xmin)/100.0 dy = (event.y - float(self.y0))*(ymax-ymin)/100.0 self.x0 = event.x self.y0 = event.y event.canvas.axes.set_ylim(ymin - dy, ymax - dy) event.canvas.axes.set_xlim(xmin - dx, xmax - dx) event.canvas.draw() def OnRelease(self, event): self.catch = False def getMessageCom(self): 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("#")+1:message.find("%")] # print "mensaje: " + message #debug return message if __name__ == '__main__': app = QtGui.QApplication(sys.argv) signal.signal(signal.SIGINT, signal.SIG_DFL) mainWindows = MainWindows() sys.exit(app.exec_()) Date: Tue, 18 Feb 2014 20:32:01 +0100 From: Chris.Wesseling at cwi.nl To: python-nl at python.org Subject: Re: [python-nl] Kan iemand mij helpen met Python? On 2014-02-17T16:54:47+0100, B. Bell wrote: > De probleemstelling is: > > 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 port 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). Heb je je logica al eens geprobeerd zonder GUI? Je serial I/O is niet asynchroon en kan je Qt eventloop blokkeren, waardoor het lijkt alsof je programma vastloopt, maar in werkelijkheid alleen je GUI niet reageerd op je gebruikers input, omdat je programma druk bezig is met je hardware apparaat. -- Chris Wesseling Centrum Wiskunde & Informatica (CWI) https://www.cwi.nl/people/ccw _______________________________________________ Python-nl mailing list Python-nl at python.org https://mail.python.org/mailman/listinfo/python-nl ------------- volgend deel ------------ Een HTML-bijlage is gescrubt... URL: From vm at klankschap.nl Fri Feb 21 11:35:46 2014 From: vm at klankschap.nl (Floris van Manen) Date: Fri, 21 Feb 2014 11:35:46 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: References: , , , , , , <20140218193201.GD18372@cwi.nl> Message-ID: On 21 Feb 2014, at 09:13, B. Bell wrote: > Om eerlijk te zijn ben ik redelijk nieuw met Python programmering, sterker nog, het is de eerste keer dat ik het echt gebruik. Er gaat niets boven python ;-) > > Het is bijna onmogelijk om hulp te krijgen en ik probeer echt van alles, je reactie is al een lichtpunt! Goed kijken, dan zie je het vanzelf ;-) > > Hieronder staat de complete code, is het misschien mogelijk voor je om binnen de code aan te geven welke wijzigingen ik waar moet aanbrengen of wat ik > > evt kan weglaten? Ik ben al meer dan een maand bezig hiermee en kom er echt niet uit. Ik zal je er eeuwig dankbaar voor zijn! Zo op het eerste oog gaat de bulk van de code over de GUI van het programma. Kun je in een paar woorden uitleggen wat de werking van het apparaat is? Wat werkt er nog wel, wat werkt er niet (meer)? .Floris From a.t.hofkamp at tue.nl Fri Feb 21 11:57:58 2014 From: a.t.hofkamp at tue.nl (A.T.Hofkamp) Date: Fri, 21 Feb 2014 11:57:58 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: References: <20140218193201.GD18372@cwi.nl> Message-ID: <201402211157.58279.a.t.hofkamp@tue.nl> On Friday 21 February 2014 09:13:58 B. Bell wrote: > Goedemorgen Chris, > > > Bedankt voor het reageren op mijn bericht. > > > Om eerlijk te zijn ben ik redelijk nieuw met Python programmering, sterker > nog, het is de eerste keer dat ik het echt gebruik. > > Het is bijna onmogelijk om hulp te krijgen en ik probeer echt van alles, je > reactie is al een lichtpunt! De reden dat niemand reageert is omdat je de verkeerde vraag stelt. Je vraag komt op mij over als "hier is een dump van wat ik weet, los mijn probleem op voor mij". Net als jij hebben wij ook geen flauw benul wat een willekeurig programma doet zonder eerst een dag of wat te bestuderen hoe en wat de code bevat. Het is dus niet zo dat wij met een blik op de code kunnen aanwijzen waar het probleem zit. (Als dat zo zou zijn, dan zouden we bugs in onze eigen code triviaal kunnen opsporen.) Met andere woorden, om je te helpen moet ik een onbekend programma met onbekende functionaliteit een aantal dagen bestuderen. Ik kan het niet testen zonder apparaat, en uit je beschrijving klinkt het alsof het een subtiel probleem kan zijn, wat best wel eens weken zou kunnen kosten. Dat alles doe ik dan om een mij onbekend persoon te helpen die onbekende belangen heeft bij de oplossing. Sorry, maar ik heb nog andere dingen te doen in die dagen. Tot zover de uitleg waarom er geen reacties komen op je verzoek. De volgende vraag is dan "hoe verder". Mijns inziens moet je stoppen met het oplossen van je probleem. Lees de vorige zin nog een keer! Zie het probleem als een excuus om te leren hoe je programma werkt. Als je begrip hebt over hoe je programma werkt, ontstaat ook begrip over de oorzaak van je probleem, en op dat moment kun je ook overzien op welke manier je het probleem op moet lossen. Met andere woorden, richt je niet op het einddoel, maar op de route er naar toe. Welk stuk van de route heb je als eerste nodig? Oftewel welke delen van het programma begrijp je en welke delen niet. Waar is informatie over die delen? Lees dat, experimenteer ermee, tot je vertrouwd bent met die materie. Pak dan het volgende stukje van de route. Wat onderdelen van de route die je kunt onderscheiden - Python taal (de basis taal, en klasses op zijn minst) - Hardware / seriele IO - Event-based programmeren (dat is hoe GUIs werken) - PyQt - Asynchroon communiceren. Deze delen kun je over het algemeen bestuderen los van je probleem. Door het los te doen krijg je meer vrijheid in experimenteren. Als je de ondelen een beetje kent, kun je nog eens naar je probleem kijken. Tenslotte, de vraagstelling op fora of discussie lijsten zoals hier. De beste vorm is om in een heel klein voorbeeldje duidelijk te maken wat je probleem is (bij voorkeur ook door anderen te draaien), en op welk punt *precies* je vast zit. (Het verschil tussen 'hij doet het niet', en 'de compiler geeft fout "bladiebladiebla op regel 21", wat bedoelt hij daar mee?') Over het algemeen krijg je dan geen rechtsreekse oplossing, maar hints als "kijk hier eens naar", of "zou het dat kunnen zijn?". Jouw probleem is echt jouw probleem, en hulp betekent dat we proberen je een sprongetje links of rechts te laten maken in de hoop dat je de weg zelf terug vindt. Albert From isdan24 at hotmail.com Fri Feb 21 12:24:47 2014 From: isdan24 at hotmail.com (B. Bell) Date: Fri, 21 Feb 2014 12:24:47 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: References: , , , , , , , , , , , , <20140218193201.GD18372@cwi.nl> , Message-ID: Hallo Floris, Ook jij bedankt voor je reactie! De probleemstelling is: > > 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 port 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). Het apparaatje heb ik ontwikkeld om trillingen in metaalplaten te meten. Ik hoop dat je me kunt helpen en in de code aanwijzingen kunt geven over wat ik moet veranderen. Ik kom er zelf simpelweg niet uit, ik heb wat reacties gelezen maar ik heb het echt geprobeerd en mijn best gedaan! > From: vm at klankschap.nl > Date: Fri, 21 Feb 2014 11:35:46 +0100 > To: python-nl at python.org > Subject: Re: [python-nl] Kan iemand mij helpen met Python? > > > On 21 Feb 2014, at 09:13, B. Bell wrote: > > > Om eerlijk te zijn ben ik redelijk nieuw met Python programmering, sterker nog, het is de eerste keer dat ik het echt gebruik. > > Er gaat niets boven python ;-) > > > > > > Het is bijna onmogelijk om hulp te krijgen en ik probeer echt van alles, je reactie is al een lichtpunt! > > Goed kijken, dan zie je het vanzelf ;-) > > > > > > Hieronder staat de complete code, is het misschien mogelijk voor je om binnen de code aan te geven welke wijzigingen ik waar moet aanbrengen of wat ik > > > > evt kan weglaten? Ik ben al meer dan een maand bezig hiermee en kom er echt niet uit. Ik zal je er eeuwig dankbaar voor zijn! > > Zo op het eerste oog gaat de bulk van de code over de GUI van het programma. > Kun je in een paar woorden uitleggen wat de werking van het apparaat is? > Wat werkt er nog wel, wat werkt er niet (meer)? > > .Floris > > > _______________________________________________ > Python-nl mailing list > Python-nl at python.org > https://mail.python.org/mailman/listinfo/python-nl ------------- volgend deel ------------ Een HTML-bijlage is gescrubt... URL: ------------- volgend deel ------------ Een niet-tekst bijlage is gescrubt... Naam: Automatic mode_ program stuck.pdf Type: application/pdf Grootte: 103276 bytes Omschrijving: niet beschikbaar URL : ------------- volgend deel ------------ Een niet-tekst bijlage is gescrubt... Naam: Manual mode_ OK.pdf Type: application/pdf Grootte: 60135 bytes Omschrijving: niet beschikbaar URL : From motoom at xs4all.nl Fri Feb 21 15:05:48 2014 From: motoom at xs4all.nl (Michiel Overtoom) Date: Fri, 21 Feb 2014 15:05:48 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: References: , , , , , , , , , , , , <20140218193201.GD18372@cwi.nl> , Message-ID: <5FAB702E-D8CA-4902-A5CA-938A244E350D@xs4all.nl> Hoi, > Het apparaatje heb ik ontwikkeld om trillingen in metaalplaten te meten. Dat is interessant. Waarom wil je die trillingen meten? > Ik kom er zelf simpelweg niet uit, ik heb wat reacties gelezen maar ik heb het echt geprobeerd en mijn best gedaan! Als je er zelf niet uitkomt: heb je overwogen om iemand in te huren die ervaring heeft met het maken van GUIs die met hardware interfacen? Volgens mij deugt de architectuur van je programma niet. Ik heb ooit een programma geschreven voor rioolinspectie dat ook allerlei seri?le apparaten moest uitlezen en besturen. Die communicatie moest ik in aparte threads onderbrengen om niet te interfereren met de hoofdthread (waar de GUI in loopt). Met een communicatiemechanisme werd vervolgens asynchroon de data geconsumeerd of uitgestuurd. Groets, -- The decline of interest in sciences is directly paralleled by the average person abandoning responsibilities in order to seek "rights", and disdaining real knowledge and study in preference to entertainment, pleasure and ignorance. From vm at klankschap.nl Fri Feb 21 15:30:41 2014 From: vm at klankschap.nl (Floris van Manen) Date: Fri, 21 Feb 2014 15:30:41 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: <5FAB702E-D8CA-4902-A5CA-938A244E350D@xs4all.nl> References: , , , , , , , , , , , , <20140218193201.GD18372@cwi.nl> , <5FAB702E-D8CA-4902-A5CA-938A244E350D@xs4all.nl> Message-ID: <2754D743-93D4-4E97-8CE8-B1EF0EA89111@klankschap.nl> On 21 Feb 2014, at 15:05, Michiel Overtoom wrote: > Die communicatie moest ik in aparte threads onderbrengen om niet te interfereren met de hoofdthread (waar de GUI in loopt). > Met een communicatiemechanisme werd vervolgens asynchroon de data geconsumeerd of uitgestuurd. zoveel is zeker. de huidige code is een rommeltje. .F From isdan24 at hotmail.com Sat Feb 22 00:21:19 2014 From: isdan24 at hotmail.com (B. Bell) Date: Sat, 22 Feb 2014 00:21:19 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: <2754D743-93D4-4E97-8CE8-B1EF0EA89111@klankschap.nl> References: , ,,, ,,, ,,, ,,, ,,, ,,<20140218193201.GD18372@cwi.nl> , , , , <5FAB702E-D8CA-4902-A5CA-938A244E350D@xs4all.nl>, <2754D743-93D4-4E97-8CE8-B1EF0EA89111@klankschap.nl> Message-ID: Goedenavond Floris, Dat is inderdaad waar, we hebben de code ook al aangepast. Er zijn nu 2 threads, 1 voor de communicatie en een voor de uitbeelding (plots). Nu doet het programma het "goed" zelfs in de automatische modus maar er komt een moment dat het programma toch vastloopt. We denken dat het komt omdat er een variabele is die de 2 threads delen en ondanks dat er locks op gezet zijn, blijft het vastlopen. De organisatorische structuur hebben we niet gewijzigd want we weten niet waar we moeten beginnen. We hebben teamviewer ge?nstalleerd en we kunnen wanneer het je uitkomt een sessie afspreken. Als bijlage sturen we de nieuwe code mee en een foto. > From: vm at klankschap.nl > Date: Fri, 21 Feb 2014 15:30:41 +0100 > To: python-nl at python.org > Subject: Re: [python-nl] Kan iemand mij helpen met Python? > > > On 21 Feb 2014, at 15:05, Michiel Overtoom wrote: > > > Die communicatie moest ik in aparte threads onderbrengen om niet te interfereren met de hoofdthread (waar de GUI in loopt). > > Met een communicatiemechanisme werd vervolgens asynchroon de data geconsumeerd of uitgestuurd. > > zoveel is zeker. > de huidige code is een rommeltje. > > .F > _______________________________________________ > Python-nl mailing list > Python-nl at python.org > https://mail.python.org/mailman/listinfo/python-nl ------------- volgend deel ------------ Een HTML-bijlage is gescrubt... URL: From isdan24 at hotmail.com Sat Feb 22 10:56:00 2014 From: isdan24 at hotmail.com (isdan24) Date: Sat, 22 Feb 2014 10:56:00 +0100 Subject: [python-nl] Rnv: Kan iemand mij helpen met Python? Message-ID: Enviado de Samsung Mobile -------- Mensaje original -------- Asunto:Re: [python-nl] Kan iemand mij helpen met Python? De:"B. Bell" Para:Dutch Python developers and users CC: Goedenavond Floris, Dat is inderdaad waar, we hebben de code ook al aangepast. Er zijn nu 2 threads, 1 voor de communicatie en een voor de uitbeelding (plots). Nu doet het programma het "goed" zelfs in de automatische modus maar er komt een moment dat het programma toch vastloopt. We denken dat het komt omdat er een variabele is die de 2 threads delen en ondanks dat er locks op gezet zijn, blijft het vastlopen. De organisatorische structuur hebben we niet gewijzigd want we weten niet waar we moeten beginnen. We hebben teamviewer ge?nstalleerd en we kunnen wanneer het je uitkomt een sessie afspreken. Als bijlage sturen we de nieuwe code mee en een foto. > From: vm at klankschap.nl > Date: Fri, 21 Feb 2014 15:30:41 +0100 > To: python-nl at python.org > Subject: Re: [python-nl] Kan iemand mij helpen met Python? > > > On 21 Feb 2014, at 15:05, Michiel Overtoom wrote: > > > Die communicatie moest ik in aparte threads onderbrengen om niet te interfereren met de hoofdthread (waar de GUI in loopt). > > Met een communicatiemechanisme werd vervolgens asynchroon de data geconsumeerd of uitgestuurd. > > zoveel is zeker. > de huidige code is een rommeltje. > > .F > _______________________________________________ > Python-nl mailing list > Python-nl at python.org > https://mail.python.org/mailman/listinfo/python-nl ------------- volgend deel ------------ Een HTML-bijlage is gescrubt... URL: ------------- volgend deel ------------ _______________________________________________ Python-nl mailing list Python-nl at python.org https://mail.python.org/mailman/listinfo/python-nl From stappers at stappers.nl Sat Feb 22 12:01:56 2014 From: stappers at stappers.nl (Geert Stappers) Date: Sat, 22 Feb 2014 12:01:56 +0100 Subject: [python-nl] Kan iemand mij helpen met Python? In-Reply-To: References: <20140218193201.GD18372@cwi.nl> <5FAB702E-D8CA-4902-A5CA-938A244E350D@xs4all.nl> <2754D743-93D4-4E97-8CE8-B1EF0EA89111@klankschap.nl> Message-ID: <20140222110156.GQ1878@gpm.stappers.nl> Op 2014-02-22 om 00:21 schreef B. Bell: > From: vm at klankschap.nl > Date: Fri, 21 Feb 2014 15:30:41 +0100 > > On 21 Feb 2014, at 15:05, Michiel Overtoom wrote: > > > > > Die communicatie moest ik in aparte threads onderbrengen om > > > niet te interfereren met de hoofdthread (waar de GUI in loopt). > > > Met een communicatiemechanisme werd vervolgens asynchroon de data > > > geconsumeerd of uitgestuurd. > > > > zoveel is zeker. > > de huidige code is een rommeltje. > > > > .F > > Goedenavond Floris, > > Dat is inderdaad waar, we hebben de code ook al aangepast. Er zijn nu > 2 threads, 1 voor de communicatie en een voor de uitbeelding (plots). > Nu doet het programma het "goed" zelfs in de automatische modus maar > er komt een moment dat het programma toch vastloopt. > > We denken dat het komt omdat er een variabele is die de 2 threads > delen en ondanks dat er locks op gezet zijn, blijft het vastlopen. > > De organisatorische structuur hebben we niet gewijzigd want we weten > niet waar we moeten beginnen. We hebben teamviewer ge?nstalleerd en > we kunnen wanneer het je uitkomt een sessie afspreken. Als bijlage > sturen we de nieuwe code mee en een foto. Die python code zat er niet bij. Verder nog: * Antwoord onder de vraag, zodat lezen in de discussie volgorde mogelijk is. * De mailinglist zet helaas "reply to list" Groeten Geert Stappers -- Leven en laten leven