in reply to Timing issue while accessing serial port

First, let's make sure that we have a common understanding of how long it takes to send or recieve a character at 9600 baud - that is in very rough terms about 1 ms per byte (character). Details include: number of "start" bits and the number of "stop" bits.

I don't know how many bytes the response contains or how the receiver decides that it has not received a "timely reponse" - I mean if the "reponse" takes say 8 characters just to send, then how is that judged against the allowed "20 character" (20 ms) response time? You may have a lot less than 20ms to start your response.

I can't test your code, but some parts do seem rather weird... what is this usleep() stuff in a blocking loop about? Why?

I think that this $PortObj method may be being misused?

$gotit = $PortObj->lookfor(100); #blocking read
I saw a recent question about this.
It appeared to me at the time, that this serial port module could be configured to report sucess after a particular stream of input characters were seen - that would appear to me to be inconsistent with this idea of "lookfor(100)", one hundred what?

What other stuff is running on this Windows machine?
Numbers like 116 ms are a looonnnng time, can you explain more how you calculated that? A process running under Normal priority in a blocking loop that essentially goes to the OS, should under usual circumstances be able to easily process your requirements.

Replies are listed 'Best First'.
Re^2: Timing issue while accessing serial port
by vrn (Initiate) on Feb 02, 2011 at 06:21 UTC
    Thank you for your response. Let me clarify some of your doubts regarding my script. First of all I am working on Windows XP machine.Other things are as follows 1. My command contains around 65 characters and response also contains same number of character and baud rate is 36400 bps. 2. I am using usleep() after write function to give enough time for the data to get completely written. (Without sleep i was not able to get the complete command in one go.) 3. As per my understanding the lookfor(100) is blocking read that is the script will wait for 100 bytes of data to be available before it starts looking for the pattern. If i have misunderstood the lookfor(100) method then please let me know. 4. There is no other application or program running when the script is running on Windows machine.