全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2134
推到 Plurk!
推到 Facebook!

com1接收數據的問題

尚未結案
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-28 23:48:02 IP:202.104.xxx.xxx 未訂閱
我想用scanner掃描條形碼,以前是用scanner接鍵盤口,現在需要接com1,用delphi6編一程序接收數據到edit並處理,使用mscomm控件。哪位先進能給一簡單的實例讓我參照一下,拜謝!
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-29 00:15:47 IP:218.166.xxx.xxx 未訂閱
一些mscomm的例子 http://cn.tech.yahoo.com/021021/31/1abf3.html http://www.yesky.com/20010109/153180.shtml http://delphi.ktop.com.tw/topic.php?topic_id=25495 http://delphi.ktop.com.tw/topic.php?topic_id=17855
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-29 22:06:25 IP:202.104.xxx.xxx 未訂閱
在ONCOMM事件中,怎樣讀取數據到光標所在的EDIT中,希望哪位先進能詳細解答,我第一次接觸這個控件,DELPHI也不是很熟,煩請耐心解答,在此拜謝!!
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-29 23:14:32 IP:218.166.xxx.xxx 未訂閱
就是把RS232接到的字元畫在畫面上 如此而以 我給的LINK上面就有 一些例子,直接參考就可以 請多花一點時間看
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-30 01:33:53 IP:202.104.xxx.xxx 未訂閱
請問奇偶校驗位有什麽作用?我的條形碼是'UNDO',但是BUFFER得到是'UND?',與ParityReplace屬性有什麽關係嗎?
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-30 02:03:51 IP:218.166.xxx.xxx 未訂閱
奇同位和偶同位 是用來檢查是否有傳錯的,一種資料驗證機制 你說傳進來的資料不對 請先check 一下你兩方rs232的設定是否相同 例如是否有同步位元檢錯,串列傳輸速率是否一樣等等 如果都設定正確,還是有問題 你可以先用現有的軟體去收看看 是不是正常的,如果正常,再來追code
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-30 02:21:09 IP:202.104.xxx.xxx 未訂閱
我用的就是斑竹給的第一個link, procedure TCOMMForm.FormShow(Sender: TObject); begin mscomm1.CommPort:=1; mscomm1.settings:='9600,n,8,1'; mscomm1.inputlen:=30; mscomm1.inbuffercount:=0; mscomm1.portopen:=true; ss:=''; i:=0; j:=0; assignfile(savef,'save1'); rewrite(savef); assignfile(readf,'read1'); //reset(readf); end; procedure TCOMMForm.MSComm1Comm(Sender: TObject); var filenrc :char; buffer :variant; s1:string; c :char; begin case mscomm1.commEvent of comEvSend: begin while not(eof(readf)) do begin read(readf,filenrc); mscomm1.output:=filenrc; j:=j 1; lblDisplay.caption:=inttostr(j); if mscomm1.outbuffercount>=2 then break; end; end; comEvReceive: begin buffer:=mscomm1.Input;//此處得到的數據與條形碼不一致 edit2.Text:=BUFFER; s1:=buffer; c:=s1[1]; ss:=ss c; i:=i 1; lblDisplay.caption:=c inttostr(i); write(savef,c); if (c=chr(10))or(c=chr(13)) then begin lblDisplay.caption:='cr' inttostr(i); memDisplay.lines.add(ss); ss:=''; end; end; end; end;
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-30 03:19:33 IP:202.104.xxx.xxx 未訂閱
可以接受數據了,但怎麽把數據放到光標所在的edit中呢?有什麽函數可以得到光標所在的edit,該用edit的什麽事件處理數據,望賜教!
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-30 06:06:09 IP:218.166.xxx.xxx 未訂閱
(1)把資料放到edit 例如資料存在字串A 把Edit->Text = A; (2)如何找到動作中的Edit,並把資料設給他 一樣假設資料存在A ((TEdit*)Form1->ActiveControl)->Text = A;
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-30 07:32:59 IP:202.104.xxx.xxx 未訂閱
((TEdit*)Form1->ActiveControl)->Text = A 麻煩寫成代碼形式.FORM NAME屬性為COMMFORM 多謝斑竹多次為我解答問題,
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-30 08:27:11 IP:218.166.xxx.xxx 未訂閱
應該是這樣沒錯 TEdit(Form1,ActiveControl),Text := A
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-31 01:46:50 IP:202.104.xxx.xxx 未訂閱
運行這個程式電腦有什麽需要設置的嗎?例如COM口
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-31 02:13:02 IP:202.104.xxx.xxx 未訂閱
運行時提示錯誤信息,'PORT ALREADY OPEN' 我在FORMSHOW事件中已經寫入 IF NOT MSCOMM.PORTOPEN THEN MSCOMM.PORTOPEN:=TRUE; 在FORMCLOSE事件中寫入 MSCOMM.PORTOPEN:=FALSE; 爲什麽會提示這個信息,我在自己的電腦上可以運行,在別的電腦上出現這個信息.請問怎麽解決?
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-05-31 02:37:38 IP:202.104.xxx.xxx 未訂閱
要運行此程式電腦上必須安裝MSCOMM控件嗎?
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-05-31 05:02:51 IP:218.166.xxx.xxx 未訂閱
不用加裝沒問題 但別忘了做成exe要注意的事項 就是build with runtime packages & RTL 有一些相關Link 可以參考 http://delphi.ktop.com.tw/topic.php?topic_id=23065 http://delphi.ktop.com.tw/topic.php?topic_id=22630 http://delphi.ktop.com.tw/topic.php?topic_id=21675
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-05-31 05:27:48 IP:202.104.xxx.xxx 未訂閱
爲什麽我讀取得數據不完整 例如條形碼為 1-823-119-1 EDIT.TEXT上得到的為119等不完整的信息,我單步調試BUFFER得到的數據是完整的. 在ONCOMM事件中我隻寫入了如下代碼: buffer:=mscomm1.Input; i:=pos(#13,buffer); //SCANNER 自動加上回車字符 public_str:=copy(buffer,1,i-1); TEdit(COMMForm.ActiveControl).Text := public_str; 這樣是否會發生隻讀一半的情況,如何改善才能讀完整?
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-05-31 05:36:17 IP:218.166.xxx.xxx 未訂閱
你說看buffer讀進來是正常的 只要確定資料有進來了 有問題,就是你字串處的方式的問題 請你單步去追一下,字串加入時 發生了什麼事,也就是,是不是有傳資料進去 但加入動作時,發生問題 先找出來問題點
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-05-31 06:03:03 IP:202.104.xxx.xxx 未訂閱
我單步執行最到得到的數據是對的,但是直接執行又只有一半數據,是否與edit的onchange事件有關係,等一下貼出詳細代碼
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-05-31 07:01:04 IP:202.104.xxx.xxx 未訂閱
procedure TCOMMForm.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin with query1 do begin close; sql.Clear; sql.Add('select * from sfis1.c_emp_desc_t where emp_no=''' edit1.Text ''''); open; end; edit1.Text:=query1.fieldbyname('emp_name').AsString; end ; end; procedure TCOMMForm.Edit1Change(Sender: TObject); begin editchangecheck(edit1); if go_keypress=1 then edit1keypress(sender,key) else exit; end; procedure Tcommform.EditChangeCheck(edit:tedit); begin i:=0; //i :integer key:=#10; //key :char IF copy(buffer,1,1)<>' ' THEN begin for i:=1 to length(buffer) do begin if copy(buffer,i,1)=#13 then begin key:=#13; buffer:=''; end; end; if key=#13 then go_keypress:=1 //go_keypress:integer else begin go_keypress:=0 ; exit; end; end; end;
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-05-31 07:48:23 IP:218.166.xxx.xxx 未訂閱
麻煩你把程式上傳到問題區比較快,我直接看好了
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-05-31 19:56:43 IP:202.104.xxx.xxx 未訂閱
取一半數據的問題解決了,因爲傳進來的被分爲了兩段,後者覆蓋了前者,因爲scanner自帶回車符,把回車符前面的加在一起就接收完整了。 接受進來的數據在edit處理後會不會自動清除掉,還是保存在緩衝區内,會不會造成記憶體資源不夠?
系統時間:2024-03-28 20:08:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!