全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:8053
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

如何頡取從RS232 POST 輸入數據資料

答題得分者是:pedro
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-31 13:45:12 IP:61.224.xxx.xxx 未訂閱
請問高手門! 我想抓取從RS232 Post 輸入數據資料,D5 有元件可用嗎? 請高手門幫幫忙! 何明昌
------
何明昌
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-31 14:12:33 IP:61.218.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/FORUM.asp?FORUM_ID=523
------
︿︿
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-31 16:51:32 IP:61.224.xxx.xxx 未訂閱
hi ! cmf: 謝謝你的回應!但我還是不知道使用那一個元件!可能我較笨,可否煩你說明指引!並做個範例,再次謝謝你! 何明昌
------
何明昌
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-31 17:15:49 IP:61.218.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=14014 版權種類:免費軟體(Freeware) 內附 範例
------
︿︿
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-31 17:22:40 IP:61.155.xxx.xxx 未訂閱
可以使用moxa公司的pcom, 或ms免费的mscomm32控件,有中文帮助的; 例如:[vb] 下面这个简单的例子演示了用调制解调器进行基本的串行通讯: Private Sub Form_Load () ' 保存输入子串的缓冲区 Dim Instring As String ' 使用 COM1。 MSComm1.CommPort = 1 ' 9600 波特,无奇偶校验,8 位数据,一个停止位。 MSComm1.Settings = "9600,N,8,1" ' 当输入占用时, ' 告诉控件读入整个缓冲区。 MSComm1.InputLen = 0 ' 打开端口。 MSComm1.PortOpen = True ' 将 attention 命令送到调制解调器。 MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保 ' 调制解调器以"OK"响应。 ' 等待数据返回到串行端口。 Do DoEvents Buffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$, "OK" & vbCRLF) ' 从串行端口读 "OK" 响应。 ' 关闭串行端口。 MSComm1.PortOpen = False End Sub 注意 MSComm 控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。关于事件驱动方法的例子请参阅 OnComm 事件的帮助。 到网上search一下,有很多的
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-04 09:51:26 IP:61.224.xxx.xxx 未訂閱
hi ! cmf: 你所謂的免費軟體(Freeware)及內附範例,要安裝那個元件,可不可能麻煩告訴我,因我是要將8051單晶片,輸入的資料存取為文字檔,而且限制頡取100筆就好! 要如何做?謝謝! 何明昌
------
何明昌
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-04 10:49:48 IP:61.218.xxx.xxx 未訂閱
sos_admin 所介紹的 mscomm32控件 也不錯用        var  i:integer; s:string;    // 設定為 com1 MSComm1.CommPort := 1;    //包率: 9600 ,無奇偶校验,8 位数据,一个停止位元。 MSComm1.Settings := '9600,N,8,1';    MSComm1.InputLen := 0; ' 打开端口。 MSComm1.PortOpen := True;    i:=0; s:=''; while i<100 do begin if MSComm1.InputLen >0 then begin s: = s MSComm1.Input; i:=i MSComm1.InputLen ; end; end; MSComm1.PortOpen := False;
------
︿︿
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-04 11:26:57 IP:61.224.xxx.xxx 未訂閱
hi!cmf: sos_admin 所介紹的 mscomm32控件 在D5可能用嗎! 在網站找到mscomm32.ocx是這個嗎? 何明昌
------
何明昌
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-04 12:16:12 IP:61.155.xxx.xxx 未訂閱
当然可以用,这可是vb自带的标准串口通信控件 首先需要 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=11010727&CC=246253">
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-04 12:22:04 IP:61.218.xxx.xxx 未訂閱
sos_admin 所介紹的 mscomm32控件 在D5可能用嗎! ANS: D5 可以用阿 在網站找到mscomm32.ocx是這個嗎? ANS : 是的 安裝及用法 請參考這篇 http://delphi.ktop.com.tw/topic.php?topic_id=29506 http://delphi.ktop.com.tw/topic.php?topic_id=31263
------
︿︿
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-08-04 14:08:00 IP:61.224.xxx.xxx 未訂閱
Hi! cmf : 請問在本(K.Top)站可否找到mscomm32.ocx元件?因我沒有VB 何明昌
------
何明昌
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-08-04 14:42:05 IP:61.218.xxx.xxx 未訂閱
VB用的COMM元件,是MS系统自带的MSCOMM32.OCX。 在DELPHI中,你将这个控件导入就可以了 组件-》导入ACTIVEX控件...-》添加
------
︿︿
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-08-04 15:16:35 IP:61.224.xxx.xxx 未訂閱
hi! sos_admin : 謝謝你的幫助!依你的圖示做,但找不到Microsoft Comm Control 6.0(Version1.1),而且也找不到MSCOMM32.OCX檔,是否要安裝VB才可以? 何明昌
------
何明昌
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-08-04 16:03:21 IP:61.155.xxx.xxx 未訂閱
mcho 兄: 你的mscomm32.ocx控件没有注册: 如:c:\windows\system\mscomm32.ocx c:\>regsvr32 c:\windows\system\mscomm32.ocx 或者点击上图的[ADD]按钮添加,然后步骤同上~!
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-08-04 18:59:44 IP:61.224.xxx.xxx 未訂閱
hi!sos_admin: 我改用D6, mscomm32.ocx控件安裝了,但是不能用,無法拉到Form 上 出現"License information for TMSComm not found ,You connot use this control in disign mode." 請問何故? 何明昌
------
何明昌
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-08-04 19:35:37 IP:61.155.xxx.xxx 未訂閱
d6以上好像是存在这个,问题好像是少了一个什么相关的文件似的! 这儿有一个串行口通信很好的资源战点 > 發表人 -
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-08-05 09:03:53 IP:210.61.xxx.xxx 未訂閱
您可以使用Comport Library元件組 http://www2.arnes.si/~sopecrni/ 在安裝好之後 放上TComPort元件, 設定屬性 Port編號、BaudRate鮑率, Parity, StopBits 這幾個需和您的8051配置的要一樣 8051接一顆提升準位的ic(代號我忘了) 提升準位ic的TXD接到RS232的RXD 提升準位ic的RXD接到RS232的TXD 然後使用Open方法打開 此時有個事件是很重要的 OnRxChar就是8051有送字元進來的事件 若要送出資料可藉由操作WriteStr方法來達到目的 具體的實作, 參考examples裡的comexample 以上希望對您有幫助
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-08-05 11:03:38 IP:61.224.xxx.xxx 未訂閱
hi! padro:您好! 謝謝您回應!您說可以使用Comport Library元件組,但是我到下位置下載都無法安裝出TComPort元件!(有原始碼) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=14014 http://delphi.ktop.com.tw/FORUM.asp?FORUM_ID=523 是否安裝方法不正確或是少了東西!可否幫我查查看? 何明昌
------
何明昌
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-08-05 14:46:07 IP:210.61.xxx.xxx 未訂閱
下載完之壓縮檔裡有Help.zip,Examples.zip,Source.zip 解開壓縮檔Source.zip之後 source資料夾裡會有CPortLib5.dpk及DsgnCPort5.dpk 載入CPortLib5.dpk在Project Manager按Compile 然後copy這個CPortLib5.bpl到Delphi的Bin 再載入DsgnCPort5在Project Manager按Install 把CPort的source資料夾位址填入到Environment Options 的Library Path裡 CPort元件組是在Component Palette的CPortLib那一頁上 TComport,TComDataPacket,TComComboBox....
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-08-05 22:47:26 IP:61.231.xxx.xxx 未訂閱
請到如下網址http://vcl.vclxx.org/DELPHI/D32FREE/ASYNC32.ZIP下載 ASYNC32.ZIP 這個元件可以直接裝到delphi 上 ;--------------------------------------------------------------------- ASYNC32.ZIP : 可在 Windows 95/98/ME/NT/2000 以多執行緒 ( Multi-Thread ) 控制 RS232 序列埠通訊的非視覺化元件 ( 1.82 版,無原始程式碼 Delphi 3.0/4.0/5.0 版適用 ),作者: Varian Software Services NL。 ;--------------------------------------------------------------------- http://vcl.vclxx.org/DELPHI/DEFAULT.HTM有許多元件可供下載,而且有中文說明
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-08-05 23:43:58 IP:61.231.xxx.xxx 未訂閱
補充說明ASYNC32安裝方法 1.下載ASYNC32.ZIP 2.解壓縮產生ASYNC32.EXE 3.執行ASYNC32.EXE選擇所要安裝位置 4.產生LIB3 LIB4 LIB5 EXAMPLES HELP等目錄 5.DELPHI 5 安裝Vacomm5 DELPHI 4 安裝Vacomm4 6.啟動DELPHI 5 後 FILE/OPEN 選到剛剛ASYNC32/LIB5安裝的目錄選Vacomm5.dpk 開啟後會彈出一個抬頭為"package-vacomm5.dpk"的小視窗 7.按下install 會彈出對話框,回答"確定" 8.安裝完畢在零件版面會增加一個"varian Async32"的選擇標籤,此時只要再執行下一步驟,就大功告成 9.選tools/environment會出現一個environment options的對話框,選擇library 的路徑
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-08-06 10:24:40 IP:61.224.xxx.xxx 未訂閱
多謝高手門的回應!我以安裝Comport Library元件組,但是還是有問題! 因8051所傳進來的信號是ASCII碼,當我用OnRxChar如下: VAR str:sttring; begin ComPort.ReadStr(Str, Count); Memo.Text := Memo.Text Str; end; 所顯示出是亂碼,我轉到文字檔,用Lister以16進位觀看,ASCII 是 00時都忽略了 如輸入信號是:14 16 07 00 00 00 14 16 而頡取信號是:14 16 07 14 16 所有00時都忽略了,我想當ASCII 是 00 時是NULL值,轉到STR時都忽略了,請求知道解決方法的高手指導! 何明昌
------
何明昌
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#23 引用回覆 回覆 發表時間:2003-08-06 11:50:43 IP:210.61.xxx.xxx 未訂閱
何先生您好, 您所讀進來的str 需要經過轉換才能放置在memo顯示出來
var
  s:string;
  s1:string;
  i:Integer;
begin
  Comport1.ReadStr(s,count);
  s1:='';
  for i:=1 to count do
    s1:=s1 ' ' IntToHex(Ord(s[i]),2);
  Memo1.Lines.Add(s1);
end;
另外NULL值的問題, 可藉由更改DiscardNull屬性值為False 來決定是否忽略null值(Ascii為0)
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#24 引用回覆 回覆 發表時間:2003-08-06 15:27:08 IP:61.226.xxx.xxx 未訂閱
曾先生:您好! 經您指點,資料可讀出來了!謝謝您!但是一但Comport.Open後執行Comport.Close時就當機,請問您知原因嗎? 何明昌
------
何明昌
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#25 引用回覆 回覆 發表時間:2003-08-06 15:48:09 IP:210.61.xxx.xxx 未訂閱
何先生 我用comport library有三年時間, 並沒有發現open再close會當機, 是不是方便把您的程式碼貼上, 或傳到ktop 我來幫您看看 或是您先從最懷疑的程式碼段, 自己小心的 除錯. pedro
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#26 引用回覆 回覆 發表時間:2003-08-08 09:53:53 IP:61.155.xxx.xxx 未訂閱
mcho 兄:    如果您真的想使用RS232 Post 輸入數據資料,我建议你使用tMSCOMM。这样省的您的很多麻烦的。    上次说帮您找一下相关文件的,但是具体是那个文件我记不得了;如果您想试验一下这个控件,您可以这样做: 1、安装VB6.0 2、如同我上面的所说的安装方法,在DELPHI(5、6、7)中安装就可以用了 你一定会问我发布怎么办,要安装 >
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#27 引用回覆 回覆 發表時間:2003-08-08 10:41:37 IP:210.66.xxx.xxx 未訂閱
sos_admin兄!我也和mcho兄有同樣的問題,出現"License information for TMSComm not found ,You connot use this control in disign mode." 雖然安裝了Visual Studio的任一項產品就可以使用了,可是我還是不想用這種方法,可不可以麻煩你幫忙找一下解答?謝謝! Ian
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#28 引用回覆 回覆 發表時間:2003-08-08 10:57:40 IP:61.155.xxx.xxx 未訂閱
应l630521兄要求,我又上网search一番,总于找到了解决方法; 但是,我没有试验过,因为我的机器上本来就有vb/vb.net 的 <> 原文著作:王金涛 出处:>
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#29 引用回覆 回覆 發表時間:2003-08-08 13:42:52 IP:210.66.xxx.xxx 未訂閱
sos_admin兄!真是太感謝您的幫忙了,解決了我的問題,可是這一題是mcho兄提的,我個人無法給您分數!只能口頭上謝謝您的幫忙了! mcho兄,相信sos_admin兄的回答也對你有所幫助吧? Ian
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#30 引用回覆 回覆 發表時間:2003-08-08 14:00:50 IP:61.224.xxx.xxx 未訂閱
曾先生:您好! 貼上程式碼,麻煩您看看,當8051不斷送資料時,只要一按Button_Open鍵就當機,我只有變通辦法,改按SpeedButton1存文字檔後關閉程式,才不至當機,總之當8051正在送資料時,不能執行ComPort.Close就是。 var Form1: TForm1; j,k:integer; implementation {$R *.DFM} procedure TForm1.Button_OpenClick(Sender: TObject); begin if ComPort.Connected then ComPort.Close else ComPort.Open; Memo.Lines.Clear; j:=0;k:=0; end; procedure TForm1.ComPortOpen(Sender: TObject); begin Button_Open.Caption := 'DisConnect'; end; procedure TForm1.ComPortClose(Sender: TObject); begin if Button_Open <> nil then Button_Open.Caption := 'Connect'; end; procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer); var s:string; s1,s2:string; i:Integer; begin Comport.ReadStr(s,count); s1:=''; for i:=1 to count do begin s1:=s1 ' ' IntToHex(Ord(s[i]),2); { 14 4F 00 00 00 07 16 12} if length(s1) >= 12 then //14 4F 00 00 (12BYTE 換行) begin Memo.Lines.Add(s1); inc(j); s1:=''; Label7.Caption :=inttostr(Memo.Lines.Count); application.ProcessMessages; end; end; if (Memo.Lines.Count =1500) or(SpeedButton1.Down) then begin Button1Click(nil); //close; end; end; procedure TForm1.Button1Click(Sender: TObject); var F: TextFile; i,j,n : integer; cFileName:string; begin Screen.Cursor := crDefault; SaveDialog1.filter:= 'Text Files|*.txt|All Files|*.*'; SaveDialog1.DefaultExt := 'txt'; //SaveDialog1.InitialDir := EditDir.Text ; SaveDialog1.FileName := 'Temp1.txt'; if SaveDialog1.Execute then begin n:=Memo.Lines.Count; cFileName:= SaveDialog1.FileName; AssignFile(F,cFileName); Rewrite(F); for i:=0 to n do Writeln(F,Memo.Lines[i]); Flush(F); CloseFile(F); end; close; end; 何明昌
------
何明昌
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#31 引用回覆 回覆 發表時間:2003-08-08 15:04:48 IP:61.155.xxx.xxx 未訂閱
mcho 兄: 我想您不论用什么类型的控件操作rs232均是一样的,我比较喜欢用 mscomm32,因为它是ms的,且是vb程式设计软件自带的,并且免费哦 还有一个就是
[<<] [1] [2] [>>]
系統時間:2024-03-29 15:53:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!