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

RS232資料遺失 ????

尚未結案
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-27 11:12:13 IP:202.145.xxx.xxx 未訂閱
我有兩隻程式分別為"接收程式"與"分析程式" 接收程式是以RS232接收資料後存於"特定目錄"的文字檔 分析程式則是固定時間後去"特定目錄"將文字檔讀出分析後將資料存置資料庫 兩隻程式均在同一部電腦24小時執行    兩隻程式均是用Timer去做輪詢的動作 接收程式的Interval為100 (0.1秒) 分析程式的Interval為10000 (10秒)    我的問題是.... 接收程式有經常性的資料遺失...... 接收的程式架構大致是如下
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   char inbuff[1024];
   DWORD nBytesRead, dwEvent, dwError;
   COMSTAT cs;       ...       // 讀取Com port資料
   ReadFile(hComm, inbuff, cs.cbInQue, &nBytesRead, NULL); 
   inbuff[cs.cbInQue]= '\0';
   
   m_zComGet  = inbuff; //m_zComGet為AnsiString       // 將資料顯示於Memo1 上
   Form1->mReceive->Text = m_zComGet;
   
   ...       //將m_zComGet存至檔案
 
   ...    }
m_zComGet收到的資料會有遺失的情形產生... 但我將每次接收到的inbuff分別再顯示出...發現資料均有接收到 但是卻沒有加到m_zComGet中????? 這是奇怪的地方< > <>難道是受到分析程式的影響而造成的嗎??< > 這樣的情況我在公司的環境下測試均正常, 但在客戶端確有如此現象...???? ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會 發表人 -
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-28 21:04:13 IP:211.76.xxx.xxx 未訂閱
很簡單就可以測試是否是因為分析程式所造成的影響, 不要執行它不就得了,再看看所存的文字檔是否正確就好啦。 我個人猜想是兩個程式同時操作同一個檔案所造成的結果吧... 也許兩個程式在存取檔案時,都要確認檔案是否正在被另一個程式所使用, 您可以使開檔時使用一些模式旗標,以下取自 BCB5 Online Help:
fmOpenRead        Open for read access only.
fmOpenWrite        Open for write access only.
fmOpenReadWrite        Open for read and write access.
fmShareCompat        Compatible with the way FCBs are opened.
fmShareExclusive        Read and write access is denied.
fmShareDenyWrite        Write access is denied.
fmShareDenyRead        Read access is denied.
fmShareDenyNone        Allows full access for others.
例如加上 fmShareExclusive 的旗標,如此,先開檔的程式就先占用, 後開檔的程式會發生開檔不成功的狀況,但是,可以在開檔不成功時, 得知目前正由另一個程式在占用中,那就等一下再試試或下一次 Timer 來再做。 當然,以上只是假設您的接收程式是受到分析程式的影響而異常,如果不是, 那以上就都是廢話囉... 看看就好 <>沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-01 09:28:54 IP:211.78.xxx.xxx 未訂閱
感謝dllee大大的回覆 小弟近期內在到客戶端測試..... 到時在給各位回覆....< > 祝我好運< > ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-08 11:55:44 IP:139.223.xxx.xxx 未訂閱
有發現了.....    接收資料長度: [208] 接收到的資料字串(String):
[                             ]
接收到的資料(HEX): 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 0A 53 53 4D 52 2F 30 30 31 2F 30 30 31 2F 20 20 20 20 20 20 20 30 34 2F 30 33 2F 30 38 2E 20 20 20 20 20 31 30 2E 34 36 2E 33 30 2E 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 接收到的資料中有接收到00造成以後的字串無法顯示 正確的資料應該是20 這個問題是如何造成的呢?????????????????????? (可見應該與我之前判斷原因應該無關) 現在我打算把00轉成20試試看...... ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-17 10:24:36 IP:220.130.xxx.xxx 未訂閱
這個問題似乎在接收到的資料當時就有問題了.... 可能原因是在輸出端的硬體部分或接收端的硬體部分 在我把接收到的資料之中的00轉成20後,情況似乎已有所改善(還在監控中..) (目前 > ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-01 22:42:37 IP:218.167.xxx.xxx 未訂閱
經過一段時間的測試...發現到來源端送出的資料中會不定時出現00的字元,造成組成字串時成為結束字元,而00後的資料即被省去,導致顯示出的資料有遺失的現象。 目前的解決方式乃是在每次接收字串後,判斷當中是否有00的字元,並將之改為20(空白字元),如此一來即可解決我所遭遇的問題。 ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
系統時間:2024-05-05 6:09:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!