Bob Greschke wrote: >"Peter Hansen" <[EMAIL PROTECTED]> wrote in message > > > >>Actually, I'm curious why you don't do the same. I'd call it very unusual >>(in my experience) to have a program open and close a serial port >>repeatedly. Among other things, this means that the DSR/DTR lines are >>toggling high and low repeatedly, and that alone could cause undesirable >>behaviour in certain devices. >> >> > >I guess I could. It's just that not releasing the port/not KNOWING that the >port has been closed at predictible times is our chief complaint about the >C++ program. As an aside, when I left work I left a version of the >while-loop program running, opening the port, writing to the equipment, >getting a response, and closing the port. It was up to about 180 sucessful >cycles (in a row -- it will stop if it fails). I think it's a hardware >problem. :) > > > > Hmm, keep the port open. One bad thing that can happen is that if you don;t keep the port open then another program running on the box and nip in and claim ownership of the port. I agree with Peter, I never relinquish the port in code unless I have a reason to (ie shutdown or chnaging the COM port I'm using). I doubt that it is a hardware problem on your device as the RS232 tandard (I prefer to call it a rumour) doesn't have any kind of RRP. Even if you are running RTS/CTS or XON/XOFF then you again shouldn't have a problem becuase once the data is sent.received then the lines should be back to normal. If you wish to test this and am not happy with writing C code to test it then maybe you could try it with something that doens;t use C code such as Java (with the javax.comm or rxtx extensions)?
>>In none of my own serial-based programs (perhaps a few dozen such to date) >>have I ever opened and closed a port other than at startup and shutdown >>(just as your C++ program does). Unless you've got a good reason to do >>otherwise, if this solves your problem it's certainly the most direct >>approach to do so. >> >> > >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. > > PySerial doesn;t have any kind of event firing to notify you when data is available. The way I get round this is to have a loop polling (in a seperate thread) to see if any data is available (it's a method on the interface), then read all the data in and fire this off to my listeners/observers with the read data. That way your buffers will not fill up. I would also do that on your other port as well to give you a common way of receiving data. I did this and then started downloading random stuff of wiki and sending the data from one serial port to another in huge chunks with no problems. >I'd write a C extension to do the serial stuff, but I don't know a thing >about Windows programming. > >Thanks! > > > > I wouldn't bother as well - PySerial works fine for me, as I mentioned the only thing I don;t like is no evetn firing when data is availabel but you can code around taht if you wish to. Cheers, Neil -- Neil Benn Senior Automation Engineer Cenix BioScience BioInnovations Zentrum Tatzberg 47 D-01307 Dresden Germany Tel : +49 (0)351 4173 154 e-mail : [EMAIL PROTECTED] Cenix Website : http://www.cenix-bioscience.com -- http://mail.python.org/mailman/listinfo/python-list