Il giorno 04 novembre 2013 14:40, Manlio Perillo <manlio.peri...@gmail.com>ha scritto:
> On 04/11/2013 14:13, Riccardo Brazzale wrote: > >> [...] >> >> Hai ragione, >> vediamo di ricapitolare: >> c'e' una macchina dotata di un pulsante, un display e una porta seriale. >> L'operatore deve fare delle misurazioni (in questo caso deve >> determinare, attraverso lo strumento di cui è dotata questa macchina >> le caratteristiche di un foglio di carta: porosità e spessore).Quando ha >> posizionato il foglio, schiaccia questo pulsante e la macchina >> mostra sul display i risultati. >> Contemporaneamente mette gli stessi risultati a disposizione sulla >> seriale. >> Ora, non essendoci niente collegato alla seriale, l'operatore trascrive >> i dati su un foglio e poi provvede a caricarli su un foglio xls. >> >> > Ok. > > > Io ho proposto di mettere un PC con un programma python che via seriale >> legge i dati a disposizione sulla seriale e compila in automatico il >> foglio xls. >> Ed è qui la gabola: >> visto che io non posso far altro che andare continuamente a interrogare >> la seriale per vedere se ci sono dati, >> a questo punto con programma python dentro a un infinito ciclo di >> lettura, e che sta mostrando sullo schermo del pc i dati letti, >> dovrei poter premere questo ipotetico 'q' sulla tastiera del pc in modo >> da interrompere il loop e scrivere i dati che ho raccolto dalle n >> letture sul foglio xls. >> > > Ok. > Quindi l'operatore può voler ottenere il foglio xls in qualsiasi momento e > più volte nel corso di una giornata. > > La soluzione allora è abbastanza semplice. > > Devi usare select, passando come files sia il descrittore associato alla > porta seriale, sia quello associato al terminale interattivo. > > Quando uno dei due è pronto, leggi e gestisci i dati. > Se è pronto stdin, leggi e se la stringa è "q\n", generi il file xls. > Se è pronto /dev/ttySn, leggi a accumuli i dati in un buffer. > > Se non sai come usare select, chiedi pure. > > > > Ciao Manlio > > _______________________________________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > Allego il sorgente: #!/usr/bin/python # -*- coding: utf-8 -*- import curses import time import serial import xlwt import sys stdscr = curses.initscr() curses.noecho() stdscr.addstr(1, 5, 'Ricezione Dati Filtrona') stdscr.addstr(3, 5, 'Dati Ricevuti:', curses.A_REVERSE | curses.A_BOLD) stdscr.refresh() # Definizione comunicazione con porta seriale conn = serial.Serial("/dev/ttyUSB0", 9600, 8, "N", 1, timeout=1) # Definizione file temporaneo fou = open("/home/Scrivania/Dati.txt", "w") while 1: dati = conn.read(64) stdscr.addstr(3, 20, dati) stdscr.refresh() fou.write(dati + "\n") stdscr.addstr(8, 5, 'PREMI Q PER USCIRE', curses.A_REVERSE) stdscr.refresh() tasto_premuto = stdscr.getch() <== qui si blocca e attende e non va all'else if tasto_premuto == ord('q') or tasto_premuto == ord('Q'): # Chiudo il file temporaneo fou.close() xlsout=xlwt.Workbook(encoding='latin-1') foglio1=xlsout.add_sheet('Foglio1') fin = open("/home/Scrivania/Dati.txt", "r") lines = fin.readlines() fin.close() riga = 0 for line in lines: riga += 1 foglio1.write(riga, 0, line.strip()) xlsout.save('/home/Scrivania/dati.xls') #chiudo curses.echo() curses.nocbreak() curses.curs_set(1) curses.endwin() sys.exit(0) else: a = 0 stdscr.addstr(8, 5, ' ') stdscr.refresh() continue -- Riccardo Brazzale Linux User #299418 Linux Machine #184578
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python