📄 delphi串口通讯的监听 - 网易学院·教程.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0052)http://tech.163.com/05/0907/10/1T1QHTJF00091589.html -->
<HTML
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>Delphi串口通讯的监听 - 网易学院·教程</TITLE>
<META content=Delphi,串口通讯 name=keywords>
<META content=Delphi,串口通讯,Delphi串口通讯的监听 name=description>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="Delphi串口通讯的监听 - 网易学院·教程.files/school.css" type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2900.3395" name=GENERATOR></HEAD>
<BODY>
<STYLE type=text/css>BODY {
TEXT-ALIGN: center
}
TD {
FONT-SIZE: 12px
}
SELECT {
FONT-SIZE: 12px
}
INPUT {
FONT-SIZE: 12px
}
.p1 {
FONT-SIZE: 12px
}
A.nav:link {
COLOR: #000000; LINE-HEIGHT: 150%; TEXT-DECORATION: none
}
A.nav:visited {
COLOR: #000000; LINE-HEIGHT: 150%; TEXT-DECORATION: none
}
A.nav:hover {
COLOR: #ff0000; LINE-HEIGHT: 150%; TEXT-DECORATION: none
}
.line {
COLOR: #afafaf
}
</STYLE>
<TABLE cellSpacing=0 cellPadding=2 width=750 border=0>
<FORM name=loginvip action=http://reg.163.com/CheckUser.jsp method=post>
<TBODY>
<TR align=middle>
<TD style="BORDER-BOTTOM: black 1px solid"><A
href="http://reg.163.com/">通行证</A>:用户名 <INPUT class=log size=10
name=username> 密码 <INPUT class=log type=password size=10 name=password> <INPUT class=sinput type=submit value=登录 name=login> </TD>
<TD style="BORDER-BOTTOM: black 1px solid"><A
href="http://mail.163.com/"><A class=163s
href="http://www.163.com/">首页</A> - <A class=163s
href="http://news.163.com/">新闻</A> - <A class=163s
href="http://www.126.com/">免费邮箱</A> - <A class=163s
href="http://sms.163.com/">短信</A> - <A class=163s
href="http://popo.163.com/">POPO</A> - <A class=163s
href="http://photo.163.com/">相册</A> - <A class=163s
href="http://so.163.com/">搜索</A> - <A class=163s
href="http://love.163.com/">交友</A> - <A class=163s
href="http://adfarm.mediaplex.com/ad/ck/4080-25846-9511-15?cn=netease;textlink;hp">拍卖</A></TD></TR></FORM></TBODY></TABLE>
<TABLE style="MARGIN-BOTTOM: 3px" cellSpacing=0 cellPadding=2 width=750
align=center border=0>
<TBODY>
<TR>
<TD align=middle width="16%" height=50><A href="http://www.163.com/"><IMG
alt=NetEase src="Delphi串口通讯的监听 - 网易学院·教程.files/special.htm"
border=0></A><BR></TD>
<TD class=line vAlign=bottom align=middle width="83%"><A class=nav
href="http://news.163.com/">新闻</A> | <A class=nav
href="http://sports.163.com/">体育</A> | <A class=nav
href="http://finance.163.com/">财经</A> | <A class=nav
href="http://ent.163.com/">娱乐</A> | <A class=nav
href="http://biz.163.com/">商业 </A>| <A class=nav
href="http://tech.163.com/"><FONT color=red><B>科技</B></FONT></A> | <A
class=nav href="http://auto.163.com/">汽车</A> | <A class=nav
href="http://digi.163.com/">数码</A> | <A class=nav
href="http://lady.163.com/">女人</A> | <A class=nav
href="http://travel.163.com/">旅游</A> | <A class=nav
href="http://education.163.com/">教育</A> | <A class=nav
href="http://culture.163.com/">文化</A> | <A class=nav
href="http://gz.163.com/">广州</A> | <A class=nav
href="http://news.163.com/war/">军事</A> | <A class=nav
href="http://bulo.163.com/">部落</A><BR><A class=nav
href="http://talk.163.com/">评论</A> | <A class=nav
style="MARGIN-LEFT: 2px; LETTER-SPACING: 2px"
href="http://sports.163.com/nba/">NBA</A> | <A class=nav
href="http://ent.163.com/people/">明星</A> | <A class=nav
href="http://stock.163.com/">证券</A> | <A class=nav
href="http://fund.163.com/">基金</A> | <A class=nav
href="http://tech.163.com/discover/">探索</A> | <A class=nav
href="http://soufun.163.com/">房产</A> | <A class=nav
href="http://mobile.163.com/">手机</A> | <A class=nav
href="http://health.163.com/sex/">两性</A> | <A class=nav
href="http://health.163.com/">健康</A> | <A class=nav
href="http://px.163.com/">培训</A> | <A class=nav
href="http://ent.163.com/ent/level1/movie.html">电影</A> | <A class=nav
href="http://game.163.com/">游戏 </A>| <A class=nav
href="http://adfarm.mediaplex.com/ad/ck/4080-25838-9511-9?cn=netease;2word;hp">拍卖</A>
| <A class=nav href="http://bbs.163.com/">论坛</A></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=750 align=center border=0>
<TBODY>
<TR>
<TD><IFRAME border=0 marginWidth=0 marginHeight=0
src="Delphi串口通讯的监听 - 网易学院·教程.files/site=netease&affiliate=tech&cat=article&type=column&location=1.htm"
frameBorder=no width=750 scrolling=no height=70></IFRAME></TD></TR>
<TR>
<TD height=3></TD></TR></TBODY></TABLE>
<TABLE id=nav cellSpacing=0 cellPadding=0 width=750 border=0>
<TBODY>
<TR>
<TD style="WIDTH: 131px" rowSpan=2><A href="http://tech.163.com/school/"
target=_self><IMG alt=网易学院·教程
src="Delphi串口通讯的监听 - 网易学院·教程.files/LogoB.gif"></A></TD>
<TD class=nav1>·<A
href="http://tech.163.com/special/t/000915AD/tools.html"
target=_self>工具软件</A>·<A
href="http://tech.163.com/special/o/000915A6/officetool.html"
target=_self>办公软件</A>·<A
href="http://tech.163.com/special/O/000915A0/OS.html"
target=_self>操作系统</A>·<A
href="http://tech.163.com/special/p/0009158A/photos.html"
target=_self>图形图像</A>·<A
href="http://tech.163.com/special/w/0009158K/website.html"
target=_self>网站建设</A>·<A
href="http://tech.163.com/special/d/0009159F/developer.html"
target=_self>编程开发</A>·<A
href="http://tech.163.com/special/m/0009158R/multimedia.html"
target=_self>多媒体</A>·<A
href="http://tech.163.com/special/n/000917GE/net.html"
target=_self>网络</A>·<A
href="http://tech.163.com/special/d/000917GF/du.html"
target=_self>病毒</A></TD></TR>
<TR>
<TD class=nav2>·<A href="http://tech.163.com/school"
target=_self>学院首页</A>·<A style="COLOR: #fc0"
href="http://tech.163.com/special/S/000915SN/S_Special.html"
target=_self>精选专题</A>·<A
href="http://tech.163.com/special/A/00091593/Arts1.html"
target=_self>艺术设计</A>·<A
href="http://tech.163.com/special/E/00091ESS/Ebook.html"
target=_self>电子杂志</A>·<A
href="http://tech.163.com/special/S/000915AH/S_InterView.html"
target=_self>教授视点</A>·<A
href="http://tech.163.com/special/A/000915AH/AllPro1.html"
target=_self>教授名录</A>·<A
href="http://tech.163.com/special/s/000915AS/softnews.html"
target=_self>软件新闻</A>·<A
href="http://tech.163.com/special/s/000917D5/schoolbbs.html">论坛</A></TD></TR></TBODY></TABLE>
<DIV id=MyPosition>你现在的位置是: <A href="http://www.163.com/">网易</A> > <A
href="http://tech.163.com/">网易科技</A> > <A
href="http://tech.163.com/school">网易学院·教程</A> </DIV>
<DIV id=TextTitle>
<H1>Delphi串口通讯的监听</H1>http://tech.163.com/school · 2005-09-07 10:20:56 · 来源:
Delphi园地</DIV>
<DIV id=TextContent>
<P></P>串口程序我后来研究了好久,写了下面的代码,后台生成一个线程监听串口,不影响前台工作。效果很好,一直用于GPS仪器的数据接收。
<BR><BR><CODE><B>unit frmComm; <BR>interface <BR>uses <BR>Windows, Messages,
SysUtils, Classes, Graphics, Controls, Forms, Dialogs, <BR>StdCtrls,
ComCtrls,GeoUtils,GeoGPS; <BR>const MAXBLOCK = 160; <BR>type <BR>TComm = record
<BR>idComDev : THandle; <BR>fConnected : Boolean; <BR>end; <BR>TCommForm =
class(TForm) <BR>ComboBox1: TComboBox; <BR>Button1: TButton; <BR>StatusBar1:
TStatusBar; <BR>Button2: TButton; <BR>ComboBox2: TComboBox; <BR>procedure
Button1Click(Sender: TObject); <BR>procedure Button2Click(Sender: TObject);
<BR>procedure FormClose(Sender: TObject; var Action: TCloseAction); <BR>private
<BR>{ Private declarations } <BR>public <BR>{ Public declarations } <BR>end;
<BR>TCommThread = Class(TThread) <BR>protected <BR>procedure Execute;override;
<BR>public <BR>constructor Create; <BR>end; <BR>var <BR>CommForm: TCommForm;
<BR>CommHandle : THandle; <BR>Connected : Boolean; <BR>CommThread : TCommThread;
<BR>implementation <BR>{$R *.DFM} <BR>uses <BR>frmMain,frmMdiMapView;
<BR>procedure TCommThread.Execute; <BR>var <BR>dwErrorFlags,dwLength : DWORD;
<BR>ComStat : PComStat; <BR>fReadStat : Boolean; <BR>InChar : Char; <BR>AbIn :
String; <BR>XX,YY : double; file://经度、纬度 <BR>VID : string; file://车号 <BR>begin
<BR>while Connected do begin <BR>GetMem(ComStat,SizeOf(TComStat));
<BR>ClearCommError(CommHandle, dwErrorFlags, ComStat); <BR>if (dwErrorFlags
>0) then begin <BR>PurgeComm(CommHandle,(PURGE_RXABORT and PURGE_RXCLEAR));
<BR>// return 0; <BR>end; <BR>dwLength := ComStat.cbInQue; <BR>if
(dwLength>0) then begin <BR>fReadStat := ReadFile(CommHandle, InChar,
1,dwLength, nil); <BR>if (fReadStat) then begin <BR>if (InChar <>Chr(13))
and (Length(abIn) < MAXBLOCK+5 ) then AbIn := AbIn + InChar <BR>else begin
<BR>... <BR>{接收完毕,} <BR>end;//if (fReadStat>0){ <BR>end; file://if
(dwLength>0){ <BR>FreeMem(ComStat); <BR>end;{while} <BR>end; <BR>constructor
TCommThread.Create; <BR>begin <BR>FreeOnTerminate := TRUE; <BR>inherited
Create(FALSE); file://Createsuspended = false <BR>end; <BR>// <BR>procedure
TCommForm.Button1Click(Sender: TObject); <BR>var <BR>CommTimeOut :
TCOMMTIMEOUTS; <BR>DCB : TDCB; <BR>fRetVal : Boolean; <BR>begin
<BR>StatusBar1.SimpleText := '连接中...'; <BR>CommHandle :=
CreateFile(PChar(ComboBox1.Text),GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL
<BR>, 0); <BR>if CommHandle = INVALID_HANDLE_VALUE then begin
<BR>StatusBar1.SimpleText := '连接失败'; <BR>Exit; <BR>end;
<BR>StatusBar1.SimpleText := '已同端口 '+ ComboBox1.Text + ' 连接!';
<BR>CommTimeOut.ReadIntervalTimeout := MAXDWORD;
<BR>CommTimeOut.ReadTotalTimeoutMultiplier := 0;
<BR>CommTimeOut.ReadTotalTimeoutConstant := 0; <BR>SetCommTimeouts(CommHandle,
CommTimeOut); <BR>GetCommState(CommHandle,DCB); <BR>DCB.BaudRate := 9600;
<BR>DCB.ByteSize := 8; <BR>DCB.Parity := NOPARITY; <BR>DCB.StopBits :=
ONESTOPBIT; <BR>fRetVal := SetCommState(CommHandle, DCB); <BR>if (fRetVal) then
begin <BR>Connected := TRUE; <BR>try <BR>CommThread := TCommThread.Create;
<BR>except <BR>Connected := FALSE; <BR>CloseHandle(CommHandle); <BR>fRetVal :=
FALSE; <BR>StatusBar1.SimpleText := '线程建立失败'; <BR>Exit; <BR>end; <BR>end
<BR>else begin <BR>Connected := FALSE; <BR>CloseHandle(CommHandle); <BR>end;
<BR>end; <BR>procedure TCommForm.Button2Click(Sender: TObject); <BR>begin
<BR>Connected := FALSE; <BR>CloseHandle(CommHandle); <BR>{终止线程}
<BR>CommThread.Terminate; <BR>StatusBar1.SimpleText := '关闭端口'+ComboBox1.Text;
<BR>end; <BR>procedure TCommForm.FormClose(Sender: TObject; var Action:
TCloseAction); <BR>begin <BR>Connected := FALSE; <BR>CloseHandle(CommHandle);
<BR>StatusBar1.SimpleText := '关闭端口'+ComboBox1.Text; <BR>end; <BR>end.
</CODE><BR></B>
<P><IMG alt=邹妙君 src="Delphi串口通讯的监听 - 网易学院·教程.files/Editor.gif" align=absMiddle>
<A class=goback href="http://tech.163.com/">[返回首页]</A></P></DIV>
<P class=prenext></P>
<DIV></DIV>
<DIV id=OtherNews><STRONG>相关文章:</STRONG>
<UL>
<LI>·<A class=info1
href="http://tech.163.com/05/0831/11/1SFSSIV100091589.html">为Delphi程序添加自动滚动的工具栏</A>(2005-08-31
11:15:22)
<LI>·<A class=info1
href="http://tech.163.com/05/0825/18/1S186R3V00091589.html">Delphi编程使程序不在系统任务条上出现</A>(2005-08-25
18:44:36)
<LI>·<A class=info1
href="http://tech.163.com/05/0825/18/1S1829J500091589.html">Delphi编程创建和删除文件夹</A>(2005-08-25
18:42:07)
<LI>·<A class=info1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -