[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