線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2543
推到 Plurk!
推到 Facebook!

用C++ Builder 5.0 寫 RS-232 程式的問題

尚未結案
uglykid
一般會員


發表:1
回覆:1
積分:0
註冊:2013-04-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-04-28 06:39:17 IP:1.171.xxx.xxx 訂閱
各位前輩,

大家好, 最近在學用BCB讀RS232 NMEA Sentence, 我使用了Timer的方式, 每秒去讀一次ComPort進來的資料,
但遇到了一個顯示上的問題...使用超級終端機得到(以下為某一秒內得到的資料)
$GPRMC,221354,A,2501.6114,N,12130.3019,E,000.7,189.9,270413,004.0,W*60
$GPGGA,221354,2501.6114,N,12130.3019,E,2,07,1.4,29.3,M,19.0,M,,*7E
$GPGSA,A,3,02,,05,09,15,26,29,,193,,,,1.7,1.4,0.9*06
$GPGSV,4,1,13,02,46,127,35,04,10,132,16,05,46,034,19,09,42,111,36*7D
$GPGSV,4,2,13,15,59,244,30,26,74,020,17,29,38,280,20,42,54,141,29*77
$GPGSV,4,3,13,193,77,073,28,08,17,055,00,10,09,075,00,21,03,317,00*48
$GPGSV,4,4,13,24,11,186,00*42
但用我的程式則會發生斷行的問題...在不該換行的地方換行...
或者應該說是後半部的資料, 變成在下一秒顯示了
$GPRMC,221354,A,2501.6114,N,12130.3019,E,000.7,189.9,270413,004.0,W*60
$GPGGA,221354,2501.6114,N,12130.3019,E,2,07,1.4,29.3,M,19.0,M,,*7E
$GPGSA,A,3,02,,05,09,15,26,29,,193,,,,1.7,1.4,0.9*06
$GPGSV,4,1,13,02,46,127,35,04,10,132,16,05,46,034,19,09,42,111,36*7D
$GPGSV,4
,2,13,15,59,244,30,26,74,020,17,29,38,280,20,42,54,141,29*77
$GPGSV,4,3,13,193,77,073,28,08,17,055,00,10,09,075,00,21,03,317,00*48
$GPGSV,4,4,13,24,11,186,00*42
想請教各位前輩, 這樣的問題該如何解決?
是否不該使用 timer 的方式?
以下為程式的內容, 還望各位先進指導...大感恩

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char inbuff[1024] = "";
DWORD nBytesRead, dwEvent, dwError;
COMSTAT cs;
ClearCommError(hComm, &dwError, &cs);
if(cs.cbInQue > sizeof(inbuff))
{
PurgeComm(hComm, PURGE_RXCLEAR);
return;
}
ReadFile(hComm, inbuff, cs.cbInQue, &nBytesRead, NULL);
inbuff[cs.cbInQue]='\0';
mRecive->Text = inbuff;
mRecive->SelStart=SendMessage(mRecive->Handle,EM_LINEINDEX,mRecive->Lines->Count-1,0);
mRecive->SelLength=0;
}
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-04-29 00:57:20 IP:114.42.xxx.xxx 訂閱
rs232原則上不能使用timer,請開thread來處理,以上問題就會如預期!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
uglykid
一般會員


發表:1
回覆:1
積分:0
註冊:2013-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-04-29 18:45:42 IP:122.248.xxx.xxx 訂閱

===================引 用 aftcast 文 章===================
rs232原則上不能使用timer,請開thread來處理,以上問題就會如預期!

Overlapped不為NULL, 這樣有何作用呢?
!ReadFile(hCommDevice, Buffer, INBUFSIZE, &BytesRead, &oOverlap)
抱歉, 因為以前都是用 Turbo C 在寫, 隔了十多年才發現, 自己太落伍了

系統時間:2024-04-25 22:15:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!