pySerial Windows write problem
Peter Hansen
peter at engcorp.com
Fri Jul 29 08:08:56 EDT 2005
Bob Greschke wrote:
> "Peter Hansen" <peter at engcorp.com> wrote in message >
>>I'd call it very unusual
>>(in my experience) to have a program open and close a serial port
>>repeatedly.
>
> One of the serial ports (there are actually two) is used to read some NMEA
> sentences from a GPS. It is only rarely read. If it is also opened when
> the program starts and kept open would you just dump the buffer and then
> read to get the most current info? What happens when the buffer fills up?
> The "main" port is just commands sent, responses received kind of traffic.
Generally, yes, you just dump data received up to the point you are
about to send a new request (if this is a request/response type of
thing). PySerial has a .flush() method of some kind I believe, or you
can just loop as long as inWaiting() isn't False.
If you aren't using hardware or software handshaking, then the buffer
filling up is a non-issue for you or the sender. If you're using
handshaking, then you do have to keep the buffer from filling. Pretty
much all my interesting code runs the PySerial stuff in a separate
thread, reading whenever data is available, and (this is a
simplification) posting it to a Queue which the main thread can read
from as required. In that scenario, you could just have a flag that
causes the receive thread to stop posting stuff to the Queue where you
currently have close the port to prevent data being seen.
I don't recall: is NMEA 0183 asynchronous? Messages can be sent by the
GPS even when you didn't ask for one explicitly? If so, then it's
possible there are problems even with your current approach: what if you
open the port halfway through a packet, and receive only the last few
bytes? If it's synchronous (data sent only in response to your
requests), then none of this is an issue since there will be no traffic
unless you ask for it, so the serial port will be idle between uses.
-Peter
More information about the Python-list
mailing list