請高手幫小弟看一下我寫的元件bug出在哪裡 |
答題得分者是:dllee
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
首先,先把問題點說出來,當小弟從com port 讀入的資料有個 00 時,輸出給變數的字串就會被截掉,經追蹤程式碼,問題出現在一行程式
FInputData:=Copy(szInputBuffer,1,ReadLen); szInputBuffer 內容為( 01 03 04 00 00 04 47 b8 c1 00 00 00...........................),ReadLen為9,經Delphi 的Copy函式Copy到FInputData卻變成 01 03 04,後面的東西全沒了 請大大高手們幫小弟看一下問題點,感恩 程式碼如附件 PS:小弟元件來自某位作者(忘了名字了,拍謝)的"delphi 串列通訊"一書裡所附的元件改變而來 |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
你的 szInputBuffer: array[0..INPUTBUFFERSIZE-1] of Char;
是 Char Array,那為什麼 FInputData: 要用 String; 呢? String 本來就是記錄字串並以 00 視為字串結尾。 如果 FInputData 也是 Char Array,那就自已寫個 For Loop Copy 就可以了。 Copy http://www.delphibasics.co.uk/RTL.asp?Name=Copy 基本上也是 Copy 字串,遇到 00 就視為字串結束,後面的就不 Copy 了。 強力推薦 ShareMe 免費網路硬碟 VMASK VMIO-Server/SECS/GEM dllee's blog dllee's StatPlus
------
http://www.ViewMove.com |
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
以您目前提供的程式,要使用在 Binary (有 00 ) 的應用,
送出資料使用 TComm.OutputByte 要收資料使用 TComm.ReadInputByte 這樣就不會有問題了。 這兩個函式在原書中應該有詳細的說明,或是,如果是您改的,那您就知道要如何使用。 大部分人犯的錯誤就是用字串的介面去處理有 00 的資料,造成資料 Lost 或無法通訊。 建議要使用 RS232/485/422 最好習慣使用 Binary(Binary Array, Char Array) 的介面, 才能通用於各式的系統。 強力推薦 ShareMe 免費網路硬碟 VMASK VMIO-Server/SECS/GEM dllee's blog dllee's StatPlus
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |