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

讀取電子秤的RS232C Data時為何長度不符

缺席
leonruxi
一般會員


發表:9
回覆:5
積分:2
註冊:2004-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-11 11:00:42 IP:218.4.xxx.xxx 未訂閱
標準資料格式: ST,GS, 0.0010 ,kg(CR)(LF)........(P)(C)(S)(CR)(LF) 需要得到的資料: ST,GS, 0.0010 ,kg 實際得到的資料: ST,GS, 0.00 %(亂碼) 或 0.0010 ,kg GS,... 檢查過Baudrate:9600 ,Parity: none, comport: com1, stopbits: 1 stopbit 使用component為廠商自己開發的commport 讀取資料的程式procedure如下: function TComPort.ReadString(var Str: String; Count: Integer): Integer; var Overlapped: TOverlapped; BytesRead: Integer; begin SetLength(Str, Count); FillChar(Overlapped, SizeOf(Overlapped), 0); Overlapped.hEvent := CreateEvent(nil, True, True, nil); ReadFile(ComHandle, Str[1], Count, DWord(BytesRead), @Overlapped); WaitForSingleObject(Overlapped.hEvent, INFINITE); if not GetOverlappedResult(ComHandle, Overlapped, DWord(BytesRead), False) then raise EWriteError('Unable to write to port: ' LastErr); CloseHandle(Overlapped.hEvent); SetLength(Str, BytesRead); Result := BytesRead; end; 請各位大大幫助,感激......
GeminiLin
一般會員


發表:12
回覆:24
積分:12
註冊:2002-12-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-07 09:02:11 IP:211.20.xxx.xxx 未訂閱
很難回答您的問題,因為沒有很明確的東西可以測,建議先以WINDOWS內建的超級終端機,設定好各式的設定值,如9600,N,8,1,還有硬體流量控制等數值,是否與廠商給的數值相同。 在來直接在超級終端機下指令讀取,看看是否數值傳回正常,先排除廠商因素,再來就是自己的部份,RS-232線材所經過的地方是否有干擾源,建議買好一點防干擾的RS232線材。 如果在超級終端機下指令是正常的話,自己的程式還是異常,建議使用SPCOMM元件看看,站內都有可以搜尋到使用方法目前我在工業控制及實驗設備使用皆正常,可以試試!!
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-07 11:13:09 IP:202.181.xxx.xxx 未訂閱
您好    建議您可以在每次接收間  加個Delay看看
dhliu
一般會員


發表:18
回覆:24
積分:8
註冊:2003-03-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-07 02:17:10 IP:203.67.xxx.xxx 未訂閱
您好 我是用 BCB 6.0 的, Delphi 的程式我讀起來蠻吃力的... 之前曾經做過個讀取電子秤的程式, 我用的方法很笨, 我只用了個 timer 去掃 RS232 的資料, 電子秤上一般應該可以設定送出的資料時間, 我用 timer 去掃有個缺點, 常常會讀到不是資料的資料, 這些讀不到的資料我就當垃圾不處理了... 這算是題外話了... 讀取電子秤的部分應該是完全不需要用到廠商的 component, 只要 CreateFile, ReadFile 就可以勝任了, 除非您還有其他的功能. 另外 odyaho 兄提到的 delay 問題也是有可能的, 不知您有否設定 ReadTimeout 的時間?
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-25 15:25:21 IP:211.22.xxx.xxx 未訂閱
用用看這個元件吧 http://sourceforge.net/projects/comport/ 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-25 19:27:44 IP:61.59.xxx.xxx 未訂閱
http://sourceforge.net/projects/tpapro/ 去下載 4.06 下來裝了。 也下載它的 doc 讀一下。這個很容易在它的前幾頁文件找到解決方法。 如果這樣還不行。 那我會想你的線是不是接太長了。 會建議你去買兩個 RS232轉 485 的東西。 然後 D <--> D D-<-->D- 這樣接起來試看看。 如果是線的問題這樣就可以解決了。
ATEIN
高階會員


發表:105
回覆:320
積分:125
註冊:2002-07-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-29 14:51:48 IP:203.204.xxx.xxx 未訂閱
您要檢查 設備上的硬體設定及元件上的參數設計 如Baudrate:9600 ,Parity: none, comport: com1, stopbits: 1 stopbit 要與硬體設備一致才行 因為通常是這個問題 總結注意如下6項: 1.字串的變數型態的宣告 2.初始化參數 3.硬體設定 4.元件上的參數設定 5.線路的長度及品質 6.干擾(EMI) 必要時在線路上加電感完成EMC(電磁相容) DHM
------
ATEIN
pokemf
一般會員


發表:5
回覆:12
積分:3
註冊:2002-05-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-22 09:19:13 IP:210.192.xxx.xxx 未訂閱
有無可能與 croquet 大大所遇到的問題一樣 http://delphi.ktop.com.tw/topic.php?topic_id=64031
yang1032
一般會員


發表:1
回覆:1
積分:0
註冊:2007-06-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-12-29 17:38:22 IP:218.170.xxx.xxx 訂閱
標準資料格式: ST,GS, 0.0010 ,kg(CR)(LF)........(P)(C)(S)(CR)(LF)
需要得到的資料: ST,GS, 0.0010 ,kg
實際得到的資料: ST,GS, 0.00 %(亂碼) 或 0.0010 ,kg GS,...

我曾經用 foxpro 使用MsComm 元件 寫過三家公司軟體:
問題出在讀取磅秤資料無法每次都很正確,
故必須讀取較長的資料經過比對,如不正確請重新讀取再比對,直到正確為止,
放心經驗中比對不會超過二次,電腦很快客戶不會感覺
chenyk
高階會員


發表:14
回覆:95
積分:171
註冊:2002-07-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-07-03 16:21:32 IP:202.39.xxx.xxx 訂閱
雖然離發問時間有點久了..
這種狀況有可能是 rs-232的 buffer 滿了,導致輸出的字串被分成兩次輸出
由於字串中間被插入換行字符,所以有亂碼的現象產生
你可以用 串口調適助手 之類的工具觀察,應該就會比較清楚
如果你遇到的問題如上所言,解決的方式是
自己在程式中建一個暫存器,保留上一次收到的字串,
當遇到程式設備預定的回應結束碼(ex: 0x02...etc)時,在把
字串組合起來一起處理。
系統時間:2024-04-26 7:07:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!