<div dir="ltr"><br><div class="im" style="font-family:arial,sans-serif;font-size:13px"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

Ho questo problema:<br>Devo realizzare un programma che legge dati da una vecchissima seriale.<br></blockquote><br></div><span style="font-family:arial,sans-serif;font-size:13px">>Per seriale intendi il vecchio RS-232 ?</span><div>

<font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Si 232 che scrive direttamente sulla seriale di una stampante ad aghi che vogliono eliminare.<br></font><div><div class="im" style="font-family:arial,sans-serif;font-size:13px">

<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Poi devo formattare quello che arriva e metterlo su un foglio xls.<br>

<br>Mi sfugge però una cosa: siccome non posso sapere quando finiscono i<br>dati in arrivo sulla seriale ( un operatore spinge un tasto che provoca<br>la trasmissione di una stringa, ma non c'e' un pulsante 'ho finito')<br>

</blockquote><br></div><span style="font-family:arial,sans-serif;font-size:13px">>Che programma usa, ed in quale sistema operativo?</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div>

<div>E' un macchinario che mette i dati su una seriale, è del 1987, non credo sia dotato di sistema operativo, visualizza i dati su un display</div><div>(l'operatore se li copia a mano su un foglio di carta) e li mette a disposizione su due seriali che in teoria possono pilotare direttamente</div>

<div>un terminale ( forse vt100) o una stampante con porta seriale.</div><div><br><span style="font-family:arial,sans-serif;font-size:13px">>Come funziona questo programma?</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div>Non c'e' un programma.<br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">>Mi sembra strano che non si sia modo di dire che l'I/O è terminato.</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><font face="arial, sans-serif">L'utente schiaccia un pulsate per fare una lettura che viene visualizzata sul display (centinaia durante la giornata) poi alla sera spegne la macchina con l'interruttore, non c'e' una</font></div>

<div><font face="arial, sans-serif">procedura di spegnimento.<br></font><div class="im" style="font-family:arial,sans-serif;font-size:13px"><br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

come posso interrompere in ciclo di lettura in maniera 'elegante'?<br>Posso intercettare la pressione di un dato tasto dalla tastiera senza<br>utilizzare raw_input che bloccherebbe l'esecuzione?<br><br></blockquote>

<br></div><span style="font-family:arial,sans-serif;font-size:13px">>Dovresti usare qualcosa di specifico per dialogare con la seriale, come pyserial, oppure se il programma deve girare solo su sistemi UNIX, direttamente termios.</span></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Sto gia facendo con pyserial ma il problema è proprio come interrompere il flusso, ho provato anche curses ma senza risultati:</font></div>

<div><font face="arial, sans-serif">L'attesa della pressione di un tasto sulla tastiera del pc 'blocca' l'esecuzione del programma in ascolto sulla seriale.<br></font><div class="im" style="font-family:arial,sans-serif;font-size:13px">

<br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">In sostanza dovrei:<br><br>Apro la seriale e mi metto in ascolto con un ciclo infinito.<br>

Se arrivano dati li scrivo su un file temporaneo.<br>Se l'utente preme il tasto 'Q' (quit):<br></blockquote><br></div><span style="font-family:arial,sans-serif;font-size:13px">>L'utente non può premere Ctrl-D, per dire che la scrittura è terminata?</span></div>

<div><br></div><div>Non esiste.</div><div><br><span style="font-family:arial,sans-serif;font-size:13px">>In questo modo, non devi preoccuparti di tutti questi dettagli, perchè il programma manderà il carattere speciale EOF al terminale.</span><br style="font-family:arial,sans-serif;font-size:13px">

<br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">>In questo caso ti basta un semplice read, che bloccherà fino a quando non viene ricevuto EOF</span><br style="font-family:arial,sans-serif;font-size:13px">

<br style="font-family:arial,sans-serif;font-size:13px"><br></div></div><div>Grazie.</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">Il giorno 04 novembre 2013 11:22, computer service <span dir="ltr"><<a href="mailto:cservice@simail.it" target="_blank">cservice@simail.it</a>></span> ha scritto:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
usare i timeout che so dopo 5 secondi di silenzio sulla seriale considerare chiusa la<br>
trasmissione, fare le elaborazioni del caso. quindi riaprire la comunicazione.<br>
e via così.<br>
Saluti<br>
Gilberto<br>
<div class="HOEnZb"><div class="h5">On 4 Nov 2013 at 10:20, Riccardo Brazzale wrote:<br>
<br>
> Ciao,<br>
><br>
> Ho questo problema:<br>
> Devo realizzare un programma che legge dati da una vecchissima seriale.<br>
> Poi devo formattare quello che arriva e metterlo su un foglio xls.<br>
><br>
> Mi sfugge però una cosa: siccome non posso sapere quando finiscono i dati<br>
> in arrivo sulla seriale ( un operatore spinge un tasto che provoca la<br>
> trasmissione di una stringa, ma non c'e' un pulsante 'ho finito') come<br>
> posso interrompere in ciclo di lettura in maniera 'elegante'?<br>
> Posso intercettare la pressione di un dato tasto dalla tastiera senza<br>
> utilizzare raw_input che bloccherebbe l'esecuzione?<br>
><br>
> In sostanza dovrei:<br>
><br>
> Apro la seriale e mi metto in ascolto con un ciclo infinito.<br>
> Se arrivano dati li scrivo su un file temporaneo.<br>
> Se l'utente preme il tasto 'Q' (quit):<br>
>   Chiudo la seriale<br>
>   Leggo il file temporaneo, lo formatto e lo metto su xls.<br>
>   Cancello il file temporaneo.<br>
><br>
> Chiudo il programma.<br>
><br>
> Qualche idea?<br>
><br>
> Grazie!<br>
><br>
> --<br>
> Riccardo Brazzale<br>
> Linux User #299418 Linux Machine #184578<br>
><br>
<br>
<br>
<br>
<br>
<br>
</div></div><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Riccardo Brazzale<br>Linux User #299418 Linux Machine #184578<br>
</div>