Delphi 中串口通讯的实现-Delphi-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝27
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:130回复:0

Delphi 中串口通讯的实现

楼主#
更多 发布于:2016-06-11 14:07

Delphi 中串口通讯的完成,Delphi教程,Delphi事例,Delphi实例
elphi 是新一代可视化开发工具,它
存在
功能
强大、简洁易用和代码履行速度快等特征,是
全球公认的
便利
运用开发工具技能的先驱者,它越来越在构架公司信息系统方面
发挥着首要效果 。由于Delphi 这些卓著特征,许多程序员
取舍Delphi作为开发工具编制各种
运用程序
。但是,令人惋惜的是Delphi没有自带串口通讯的控件,在它的帮忙文档里也没有提及串口通讯,这就给编制通讯程序的开发人员带来许多费事,影响了开发进度,下面就这一技能进行
讨论 。
用Delphi 完成串口通讯,常用的几种
进程为:
运用控件如MSCOMM和SPCOMM,
运用API函数或许在Delphi 中调用其它串口通讯程序 。运用API编写串口通讯程序较为杂乱,需要
操纵许多通讯
知识,其
利益是可完成的
功能更
强大,
运用面更
广泛,更
合适于编写较为杂乱的低
档次通讯程序 。相
比较而言,运用SPComm控件则
绝对较
便利,该控件
存在
丰盛的与串口通讯严密
有关的特点及事情,提供了对串口的各种操作 。
运用控件这一
进程便利
操纵,而SPCOMM
支持多线程,所以SPCOMM控件的
运用愈加
广泛 。
联合实例
翔实介绍SPCOMM的
运用 。
手机能成救命草 小编教您五招自救方法镜头选购必懂 5大品牌镜头参数解读
Windows 7无线密码找回方法查找引擎优化成功必先处理的三个大忌
一.SPCOMM控件的装置
1.
取舍下拉菜单Component的第二项Install Component 。




网站简略有用的SEO优化窍门拍摄菜鸟如何防止5个简单犯的过错
14个绝妙拍摄关键 全方位揭秘拍鸟窍门轻松把握5个小窍门 把美人拍的更显瘦
图1
弹出图1所示的窗口,在Unit file name 处填写控件SPCOMM控件地点途径,其它可用默许值,点击OK按纽 。
2.装置
顺畅后,system控件面板中将显现一个赤色控件COMM 。如今
运用COMM控件
能够象Delphi自带控件相同
运用. 。
二.SPCOMM的首要特点,
进程和事情
1.特点
CommName:填写COM1,COM2…等串口的姓名,在
翻开串口前,有必要填写好此值 。
BaudRate:设定波特率9600,4800等,根据实践需要来定,在串口
翻开后也可更改波特率,实践波特率随之更改 。
ParityCheck:奇偶校验 。
ByteSize:字节长度_5,_6,_7,_8等,根据实践情况设定 。
Parity:奇偶校验位
pBits:
逗留位
SendDataEmpty:这是一个布尔特点,为true时
暗示发送缓存为空,或许发送行列里没有信息;为False时
暗示
暗示发送缓存不为空,或许发送行列里有信息 。
2.
进程
Startcomm进程用于
翻开串口,当
翻开失利时通常会报错,
谬误首要有7种:
⑴串口现已
翻开 ;

翻开串口
谬误 ;
⑶文件句柄不是通讯句柄;
⑷不
能够装置通讯缓存;
⑸不能产
惹事情 ;
⑹不能发生读
进程;
⑺不能发生写
进程;
StopComm进程用于封闭串口,没有回来值 。
函数WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word ): boolean
用于发送一个字符串到写线程,发送
顺畅回来true,发送失利回来false, 履行此函数将立刻得到回来值,发送操作随后履行 。函数有两个参数,其间
pdatatowrite是要发送的字符串,dwsizeofdatatowrite 是发送的长度 。
3.事情
OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength:
Word) of object
当输入缓存有数据时将触发该事情,在这里
能够对从串口收到的数据进行
处理 。Buffer中是收到的数据,bufferlength是收到的数据长度 。
OnReceiveError : procedure(Sender: TObject; EventMask : DWORD)

接受数据时显现
谬误将触发该事情 。
三.SPCOMM的
运用
下面,咱们
联合一个串口通讯的例子来
注明SPCOMM的
运用 。
为了完成PC与单片机8051中心的通讯,首先要调通它们中心的握手信号,
假设它们中心的通讯
协议是,PC到8051一帧数据6个字节,8051到PC一帧数据也为6个字节,当PC宣布(F0,01,FF,FF,01,F0)后能收到这么一帧(F0,01,FF,FF,01,F0),
暗示数据通讯握手
顺畅,两者中心就
能够按照
协议
互相传输数据 。在PC方要发送及
接受数据需要以下进程:
1.
创造一个新的工程COMM.DPR,把窗体的NAME特点改为FCOMM,把窗体的
标题改为测验通讯,添加控件 。
对COMM1(黑色矩形围住的控件)进行特点规划,设波特率4800,校验位无,字节长度_8,
逗留位_1,串口
取舍COM1 。Memo1中将显现发送和
接受的数据 。
取舍File/Save As将新的窗体存储为Comm.pas 。
2.编写源代码
变量
注明
var
FCOMM: TFCOMM;
Viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;
翻开串口
procedure TFCOMM.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;
封闭串口
procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;
发送数据
自定义的发送进程
procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:="";
commflg:=true;
for i:=1 to 6 do
begin
if not fcomm.comm1.writecommdata(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf,2)+" ";
end;
viewstring:="发送"+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add("");
if not commflg then messagedlg("发送失利!",mterror,[mbyes],0);
end;
procedure TFCOMM.Btn_sendClick(Sender: TObject);{发送按钮的点击事情}
begin
sbuf[1]:=byte($f0); {帧头}
sbuf[2]:=byte($01); {指令号}
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($0f); {帧尾}
senddata;{调用发送函数}
end;
接收进程
procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
begin
viewstring:="";
move(buffer^,pchar(@rbuf^),bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(rbuf,2)+" ";
viewstring:="
接受"+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add("");
end;
假设memo1上显现发送F0 01 FF FF 0F 和
接受F0 01 FF FF F0

暗示串口已准确的发送出数据并准确的
接遭到数据,串口通讯
顺畅 。
elphi 是新一代可视化开发工具,它
存在
功能
强大、简洁易用和代码履行速度快等特征,是
全球公认的
便利
运用开发工具技能的先驱者,它越来越在构架公司信息系统方面
发挥着首要效果 。由于Delphi 这些卓著特征,许多程序员
取舍Delphi作为开发工具编制各种
运用程序
。但是,令人惋惜的是Delphi没有自带串口通讯的控件,在它的帮忙文档里也没有提及串口通讯,这就给编制通讯程序的开发人员带来许多费事,影响了开发进度,下面就这一技能进行
讨论 。
用Delphi 完成串口通讯,常用的几种
进程为:
运用控件如MSCOMM和SPCOMM,
运用API函数或许在Delphi 中调用其它串口通讯程序 。运用API编写串口通讯程序较为杂乱,需要
操纵许多通讯
知识,其
利益是可完成的
功能更
强大,
运用面更
广泛,更
合适于编写较为杂乱的低
档次通讯程序 。相
比较而言,运用SPComm控件则
绝对较
便利,该控件
存在
丰盛的与串口通讯严密
有关的特点及事情,提供了对串口的各种操作 。
运用控件这一
进程便利
操纵,而SPCOMM
支持多线程,所以SPCOMM控件的
运用愈加
广泛 。
联合实例
翔实介绍SPCOMM的
运用 。
一.SPCOMM控件的装置
1.
取舍下拉菜单Component的第二项Install Component 。




图1
弹出图1所示的窗口,在Unit file name 处填写控件SPCOMM控件地点途径,其它可用默许值,点击OK按纽 。
2.装置
顺畅后,system控件面板中将显现一个赤色控件COMM 。如今
运用COMM控件
能够象Delphi自带控件相同
运用. 。
二.SPCOMM的首要特点,
进程和事情
1.特点
CommName:填写COM1,COM2…等串口的姓名,在
翻开串口前,有必要填写好此值 。
BaudRate:设定波特率9600,4800等,根据实践需要来定,在串口
翻开后也可更改波特率,实践波特率随之更改 。
ParityCheck:奇偶校验 。
ByteSize:字节长度_5,_6,_7,_8等,根据实践情况设定 。
Parity:奇偶校验位
pBits:
逗留位
SendDataEmpty:这是一个布尔特点,为true时
暗示发送缓存为空,或许发送行列里没有信息;为False时
暗示
暗示发送缓存不为空,或许发送行列里有信息 。
2.
进程
Startcomm进程用于
翻开串口,当
翻开失利时通常会报错,
谬误首要有7种:
⑴串口现已
翻开 ;

翻开串口
谬误 ;
⑶文件句柄不是通讯句柄;
⑷不
能够装置通讯缓存;
⑸不能产
惹事情 ;
⑹不能发生读
进程;
⑺不能发生写
进程;
StopComm进程用于封闭串口,没有回来值 。
函数WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word ): boolean
用于发送一个字符串到写线程,发送
顺畅回来true,发送失利回来false, 履行此函数将立刻得到回来值,发送操作随后履行 。函数有两个参数,其间
pdatatowrite是要发送的字符串,dwsizeofdatatowrite 是发送的长度 。
3.事情
OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength:
Word) of object
当输入缓存有数据时将触发该事情,在这里
能够对从串口收到的数据进行
处理 。Buffer中是收到的数据,bufferlength是收到的数据长度 。
OnReceiveError : procedure(Sender: TObject; EventMask : DWORD)

接受数据时显现
谬误将触发该事情 。
三.SPCOMM的
运用
下面,咱们
联合一个串口通讯的例子来
注明SPCOMM的
运用 。
为了完成PC与单片机8051中心的通讯,首先要调通它们中心的握手信号,
假设它们中心的通讯
协议是,PC到8051一帧数据6个字节,8051到PC一帧数据也为6个字节,当PC宣布(F0,01,FF,FF,01,F0)后能收到这么一帧(F0,01,FF,FF,01,F0),
暗示数据通讯握手
顺畅,两者中心就
能够按照
协议
互相传输数据 。在PC方要发送及
接受数据需要以下进程:
1.
创造一个新的工程COMM.DPR,把窗体的NAME特点改为FCOMM,把窗体的
标题改为测验通讯,添加控件 。
对COMM1(黑色矩形围住的控件)进行特点规划,设波特率4800,校验位无,字节长度_8,
逗留位_1,串口
取舍COM1 。Memo1中将显现发送和
接受的数据 。
取舍File/Save As将新的窗体存储为Comm.pas 。
2.编写源代码
变量
注明
var
FCOMM: TFCOMM;
Viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;
翻开串口
procedure TFCOMM.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;
封闭串口
procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;
发送数据
自定义的发送进程
procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:="";
commflg:=true;
for i:=1 to 6 do
begin
if not fcomm.comm1.writecommdata(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf,2)+" ";
end;
viewstring:="发送"+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add("");
if not commflg then messagedlg("发送失利!",mterror,[mbyes],0);
end;
procedure TFCOMM.Btn_sendClick(Sender: TObject);{发送按钮的点击事情}
begin
sbuf[1]:=byte($f0); {帧头}
sbuf[2]:=byte($01); {指令号}
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($0f); {帧尾}
senddata;{调用发送函数}
end;
接收进程
procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
begin
viewstring:="";
move(buffer^,pchar(@rbuf^),bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(rbuf,2)+" ";
viewstring:="
接受"+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add("");
end;
假设memo1上显现发送F0 01 FF FF 0F 和
接受F0 01 FF FF F0

暗示串口已准确的发送出数据并准确的
接遭到数据,串口通讯
顺畅 。








[font=Tahoma  ][font=Tahoma  ][font=Tahoma  ]

优质IT资源分享社区为你提供此文。
本站有大量优质Delphi教程视频,资料等资源,包含Delphi基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。
Delphi教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客