[Python] [python] Help Lettura da Seriale

Riccardo Brazzale riccardo.brazzale a gmail.com
Lun 4 Nov 2013 16:24:38 CET


Il giorno 04 novembre 2013 16:11, Manlio Perillo
<manlio.perillo a gmail.com>ha scritto:

> On 04/11/2013 15:43, 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.
>> [...]
>> Allego il sorgente:
>>
>>
> Ti consiglio di organizzare il codice usando delle funzioni; altrimenti
> così non è molto leggibile.
>
>  #!/usr/bin/python
>> # -*- coding: utf-8 -*-
>> [...]
>>
>> while 1:
>>
>>      dati = conn.read(64)
>>      stdscr.addstr(3, 20, dati)
>>      stdscr.refresh()
>>      fou.write(dati + "\n")
>>
>>
> Come è il formato dei dati?
>
>
>       stdscr.addstr(8, 5, 'PREMI Q PER USCIRE', curses.A_REVERSE)
>>
>
> Ok, allora premendo Q deve uscire e non semplicemente generare il file xls.
>
> Curiosità: che succede se spegni l'apparecchio mentre questo programma è
> in esecuzione?  Si blocca indefinitamente su conn.read(64) ?
>
>
>
>       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()
>>
>>
> Il codice seguente è un ottimo candidato ad essere spostato in una
> funzione, a cui passi il nome del file con i dati.
>
> > [...]
>
>
>>              #chiudo
>>              curses.echo()
>>              curses.nocbreak()
>>              curses.curs_set(1)
>>              curses.endwin()
>>              sys.exit(0)
>>
>
> basta anche un semplice break.
> Anzi è meglio, così puoi spostare il codice di inizializzazione e
> terminazione delle curses fuori dal ciclo while (meglio se in funzioni
> separate).
>
>
>>          else:
>>              a = 0
>>
>
> La variabile `a` a cosa serve?
>
>
>               stdscr.addstr(8, 5, '                          ')
>>              stdscr.refresh()
>>              continue
>>
>>
> Comunque il codice lo puoi riscrivere in questo modo, tralasciando la
> gestione degli errori:
>
> import sys
> import select
>
>
> # ... open serial port, init curses
> while 1:
>    rfd, wfd, efd = select.select([stdin, conn], [], [], 0)
>    if conn in rfd:
>         dati = conn.read(64)
>         # ... aggiorna schermo e file dati
>    if stdin in rfd:
>         cmd = stdin.read()
>         if cmd.strip().lower() == "q":
>             # ... salva il file excel
>             break
> # close serial port, close curser
>
>
>
> Ciao  Manlio
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>

Gentilissimo.
Faccio delle prove.

Grazie!


-- 
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131104/656991c0/attachment.html>


Maggiori informazioni sulla lista Python