engsol wrote:
Has anyone done a script that will rspond to the serial com port(s)
receive buffer interrupt, as opposed to polling and timeouts? Win2000 is the main interest right now.
Thanks
Norm B
Hello,
I came across this problem as when I first used PySerial, I came from a java background which has the ability to register listeners to a serial comm instance and receive interrupts (although some implementations use polling behind the scenes anyway). I don't think that pyserial has this kind of thing so I used the following :
def __checkSerial(self):
self.__objLock.acquire()
try:
try:
intNoChars = self.__objSerialPort.inWaiting()
if (intNoChars > 0):
strReceivedString = self.__objSerialPort.read(intNoChars)
#or you could fire an event
self.newMessage(strReceivedString)
except:
#put any clean up code in here.
raise finally:
self.__objLock.release()
You can then wrap this in a thread which runs the method every x milliseconds (the code to ensure that I have all the information is elsewhere in a superclass which deals with this use case across communication implementations). However you will have to be aware that you will need to lock around groups of calls to ensure you are receiving the correct information (as above). Therefore, although threading in Python is 'easy' you would still have to think about this issue, it is unavoidable in communications I'm afraid. Even if you could receive interrupts then you will likely be receiving the interrupt on a different thread of execution than the main anyways so you'll still have threading problems and need to lock around calls. This is the problem which I usually express as '/RS232C is not really a standard, more of a rumour/'.
Interestingly, if we take the 'python in threading is easy' discussion (partially due to the GIL), then for this use case we could also say that threading in VB6 is even easier than python - I'll leave you to guess why!!!
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