[Python] [python] Help Lettura da Seriale

Riccardo Brazzale riccardo.brazzale a gmail.com
Mar 5 Nov 2013 11:17:37 CET


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

>
> 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


Ho cercato di sistemarlo un po', ne è uscito questo e pare funzionare ma
devo testarlo in loco per cantare vittoria:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import curses
import time
import serial
import xlwt
import sys
import select

def aprischermo():

    stdscr = curses.initscr()
    curses.noecho()
    titolo = 'Ricezione Dati'
    pos = int (40 - (len(titolo))/2)
    stdscr.addstr(1, pos, titolo, curses.A_REVERSE | curses.A_BOLD)
    stdscr.addstr(7, 5, "Lettura -- Pressione -- Flusso - Permeabilita'",
curses.A_BOLD)
    stdscr.addstr(15, 5, 'Premi   per uscire')
    stdscr.addstr(15, 11, 'Q', curses.A_REVERSE | curses.A_BOLD)
    stdscr.addstr(5, 5, 'Dati Ricevuti:', curses.A_BOLD)
    stdscr.refresh()
    return stdscr

def connessione(stdscr):

    try:
        #conn = serial.Serial("/dev/ttyUSB0", 9600, 7, "N", 1, timeout=1)
 # <-- Senza connessione esce...
        conn = serial.Serial("/dev/ttyS0", 19200, timeout=1)
# <-- per provare...

    except:

        stdscr.addstr(3, 20, 'Porta Seriale Non Disponibile')
        stdscr.refresh()
        time.sleep(3)
        chiudi()

    return conn

def ciclo(conn):

    # Definizione file temporaneo

    fou = open("/home/Dati.txt", "w")

    a = 0

    while 1:

        # rfd = input ready
        # wft = output reeady
        # efd = exception ready

        rfd, wft, efd = select.select([sys.stdin, conn], [], [], 0)

        # Controllo la disponibilità di dati sulla seriale

        if conn in rfd:

            dati = conn.read(256)

            # Elimino quello che non mi serve.

            dati = dati.replace('*', '')
            dati = dati.replace('SAMPLE --- PRESSURE --- FLOW ---
PERMEABILITY', '')
            dati = dati.replace('2 SQUARE CM CLAMP', '')
            dati = dati.replace('PPM100 V2.1 FIAL', '')
            dati = dati.strip()

            # Stringa vuota: continuo

            if dati == '':
                continue

            # Visualizzo quanto ricevuto dalla seriale

            stdscr.addstr(9, 5, dati)
            stdscr.refresh()

            # Scrivo i dati sul file temporaneo

            fou.write(dati + "\n")

        # Controllo la pressione del tasto 'Q' sulla tastiera.

        if sys.stdin in rfd:
            cmd = sys.stdin.read(1)

            # Se premuto scrivo il file ed esco.

            if cmd.strip().lower() == "q":

                # Chiudo il file temporaneo

                fou.close()

                xlsout=xlwt.Workbook(encoding='latin-1')
                foglio1=xlsout.add_sheet('Foglio1')

                foglio1.write(0,0, 'Lettura')
                foglio1.write(0,1, 'Pressione')
                foglio1.write(0,2, 'Flusso')
                foglio1.write(0,3, "Permeabilita'")

                riga = 2

                fin = open("/home/Dati.txt", "r")
                lines = fin.readlines()
                fin.close()

                for line in lines:

                    riga += 1

                    sample = line[0:5].strip()
                    pressure = line[5:18].strip()
                    flow = line[18:27].strip()
                    permeability = line[27:].strip()

                    foglio1.write(riga, 1, sample)
                    foglio1.write(riga, 2, pressure)
                    foglio1.write(riga, 3, flow)
                    foglio1.write(riga, 4, permeability)

                xlsout.save('/home/dati.xls')

                chiudi()

def chiudi():

    curses.echo()
    curses.nocbreak()
    curses.curs_set(1)
    curses.endwin()
    sys.exit(0)

stdscr = aprischermo()
conn = connessione(stdscr)
ciclo(conn)


Ma la domanda è:

Se lo porto su windows cosa devo cambiare?

Grazie!

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


Maggiori informazioni sulla lista Python