[Python] [python] Help Lettura da Seriale
Riccardo Brazzale
riccardo.brazzale a gmail.com
Lun 4 Nov 2013 15:43:39 CET
Il giorno 04 novembre 2013 14:40, Manlio Perillo
<manlio.perillo a 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 a 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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131104/3859f88b/attachment-0001.html>
Maggiori informazioni sulla lista
Python