發送多個串埠指令,如何僅會取回第一次的數據? |
尚未結案
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
各位先進好!
我在使用一個RS232元件時發現一個問題,在第一次從串埠 BUFFER取出數據後,以後再取數據時,一發出取數據指令,還沒加引數,程式就自動取出結果,且都是第一次的內容。 我監測串埠時發現,在我第一次以後再發出取數據指令時,串埠實際上沒有取回任何結果。 因此,一開始我想是在我程式的內部存有第一次取回的內容,沒清除,所以老是取會相同的內容,但反反覆復的檢查後,發現不是這個原因 後來我想是不是在串埠 BUFFER有內容沒清除,因此在每次發出取數據指令前,先關閉串埠端口,然後再打開。但依然存在這個問題。 最後我想是不是這個RS232元件的原因,但是我現在不知道如何確定是不是這個RS232元件引起這個問
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝hagar 前輩得回應!
我用的元件是由文魁資訊股份有限公司出版,范逸之先生、陳立元先生所著《Delphi 與 RS─232串列通訊控制》一書隨書附帶的串埠元件。 讀取Buffer的資料:
‧‧‧
FcommError:Dword;
szInputBuffer:array[0‧‧InputBuffersize-1] of char;
FInputData:string;
‧‧‧‧
property InputLen:DWORD read FInputLen write FInputLen;
‧‧‧‧ Procedure TComm‧ReadProcess;
var
nBytesRead: DWORD;
dwCommError: DWORD;
CS: TCOMSTAT;
i,ReadLen: DWORD;
begin
//使用ClearCommError得知有多少的數據在BUFFER中
//並得知錯誤種類
ClearCommError(hComm,dwCommError,@CS); //取得狀態
FCommError:=dwCommError; //錯誤數值
if cs‧cbInQue <>0 then //若BUFFER 有數據,則讀取
begin
if InputLen=0 then //指定讀取的數據數
ReadLen:=cs‧cbInQue
else
ReadLen:=InputLen;
if cs‧cbInQue > sizeof(szInputBuffer) then
PurgeComm(hComm, PURGE_RXCLEAR) // 清除COM 數據
else
begin
//讀取數據
if ReadFile(hComm, szInputBuffer,ReadLen,nBytesRead,nil) then // 接收COM 的數據
begin
//取出數據
FInputData:=Copy(szInputBuffer,1,ReadLen);
//設置byte array 長度
SetLength(FInputByteData,ReadLen);
//將數據搬到 array 中
for i:=0 to ReadLen-1 do
FInputByteData[i]:=ord(szInputBuffer[i]);
end; //ReadFile Loop
end;//else Loop
end; //cs‧binQue Loop
end;
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |