我正在嘗試使用SerialPort類來處理串行端口。C#串行端口通信
該應用程序要求我們先收到一個命令,然後在20ms內給出答覆;問題在於,我們讀取的命令與實際命令之間存在延遲(最長15ms),並且我們沒有時間將回復發送回去。
我們需要讀取的命令的長度固定爲20個字節,我們每次從輸入緩衝區輪詢一個字節。
serialPort.Read(input, 0, 1).
我不知道這個過程有什麼問題。
我正在嘗試使用SerialPort類來處理串行端口。C#串行端口通信
該應用程序要求我們先收到一個命令,然後在20ms內給出答覆;問題在於,我們讀取的命令與實際命令之間存在延遲(最長15ms),並且我們沒有時間將回復發送回去。
我們需要讀取的命令的長度固定爲20個字節,我們每次從輸入緩衝區輪詢一個字節。
serialPort.Read(input, 0, 1).
我不知道這個過程有什麼問題。
爲什麼每次讀一個字節?如果你期待的20個字節,你可以寫:
byte[] buffer = new byte[20];
int bytesRead;
int totalBytesRead = 0;
while ((bytesRead = serialPort.Read(buffer, totalBytesRead, buffer.Length - totalBytesRead)) != 0
&& totalBytesRead < buffer.Length)
{
totalBytesRead += bytesRead;
}
在這一點上,你把所有20個字節或已到達流的末尾。
你是什麼意思?「我們閱讀的命令和實際的命令之間存在延遲(最多15毫秒)」?
我將使用範圍來檢查線上的數據,當我收到命令時,我將發送一封信與實際命令進行比較,從範圍,我測量延遲高達15ms,我想知道這是什 – lin 2011-06-10 16:03:45
你說當你告訴發送者發送一個字節,並且接收者實際讀取它時,會有多達15毫秒的時間?有很多事情可能會導致這種情況。發送者可能會暫時緩衝,接收者可能會緩衝。接收者可能無法立即*對角色作出反應。有什麼方法可以確定您的計算機何時接收到該角色? 15毫秒是相當可疑的,因爲這是你將從.NET程序中獲得的最佳分辨率。 – 2011-06-10 17:58:53