`
javatoyou
  • 浏览: 1021747 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

spcomm

 
阅读更多
delphi 是新一代可视化开发工具,它具有功能强大、简便易用和代码执行速度快等特点,是全球公认的快速应用开发工具技术的先驱者,它越来越在构架企业信息系统方面 发挥着重要作用。由于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[i],1) then

begin

commflg:=false;

break;

end;

sleep(2); {发送时字节间的延时}

viewstring:=viewstring+inttohex(sbuf[i],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[i],2)+" ";

viewstring:="接受"+viewstring;

memo1.lines.add(viewstring);

memo1.lines.add("");

end;

  如果memo1上显示发送F0 01 FF FF 0F 和 接受F0 01 FF FF F0

这表示串口已正确的发送出数据并正确的接受到数据,串口通讯成功。
分享到:
评论

相关推荐

    Delphi EX,Delphi11,SPComm,串口编程,安装教程

    1.本控件改善了老SPComm在Delphi新版本上安装报错的问题。 2.控件详细的安装说明见如下连接: ...

    SPCOMM 虚拟串口 示例程序 XE5和D7

    编译示例程序无需安装SPCOMM控件; (3)为类TCOMM增加了一个Connected属性,方便检测串口的状态; (4)下载的文件中包含了SPComm.pas修正前的版本;">(1)对下载的SPCOMM.PAS修正了SetCommName方法的实现:修正后...

    SPCOMM使用方法

    利用 Delphi实现串口通信的常用的方法有 3种:一是利用控件,如 MSCOMM控件和 SPCOMM控件;二是使用 API函数;三是调用其他串口通信程序。其中利用 API编写串口通信程序较为复杂,需要掌握大量的通信知识。相比较而...

    SPComm串口控件 DelphiXE10.1可用

    SPComm串口控件,源代码,Delphi XE10.1完全可用,串口收发数据已经测试。 SPComm串口控件,源代码,Delphi XE10.1完全可用,串口收发数据已经测试。

    Delphi+SPComm 实现串口通信

    用SPComm 串行通信控件在Delphi 中开发串口 通信程序, 具有灵活、方便、高效的特点。作者在武汉 安全环保研究所的实践项目中, 利用Spcomm 控件实 现了PC 和单片机Model 8785A 的通信, 通过PC 可以 简单快捷控制...

    演示SPCOMM收发数据的例子

    演示SPCOMM收发数据的例子,可供参考com串口开发!

    DelphiXE10 SPcomm串口接收demo

    Delphi XE10 SPCOMM控件串口接收处理的demo,接收显示为16进制命令帧。 Delphi XE10 SPCOMM控件串口接收处理的demo,接收显示为16进制命令帧。

    SpComm HEX发送 中文GBK转换HEX_spcomm_delphi_串口_pascal_

    SpComm HEX发送 中文GBK转换HEX

    delphi7 串口通信类 spcomm控件及其使用

    delphi7 串口通信类 spcomm控件及其使用(附代码及文档)

    SPCOMM控件for Delphi

    SPCOMM的主要属性,方法和事件 1.属性 CommName:填写COM1,COM2…等串口的名字,在打开串口前,必须填写好此值。 BaudRate:设定波特率9600,4800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随...

    spcomm for delphi2009

    this spcomm.rar is for delphi2009, it's very usefull.

    SPCOMM控件for Delphi7

    SPCOMM的主要属性,方法和事件 1.属性 CommName:填写COM1,COM2…等串口的名字,在打开串口前,必须填写好此值。 BaudRate:设定波特率9600,4800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随...

    Delphi中Spcomm及使用属性及用法详解

    压缩包内有SPCOMM和其使用说明 包含有具体设置介绍 适合刚学串口操作的同学学习

    SPComm(3.1+Demo).rar

    SPComm(3.1+Demo).rar

    SPCOMM for MFC Version 2.5c1 串口类

    从Delphi移植过来的支持...SPCOMM相信各位在网上能找到Delphi的例子。 本类在基础上加入 1.IsOpen,串口是否打开函数 2.支持COM10以上的串口 目前由于时间的问题,我只在VS2012上试验成功,其它版本么有作测试 使用见 ...

    SPCOMM2.5修正版

    SPCOMM2.5修正版SPCOMM2.5修正版

    delphi SPCOMM 发送16进制的方法

    网上找了很多SPCOMM 发送16进制的方法,都不太理想,而且发送不成功, 因本人用在实际开发环境中需要测试16进制数据,于是自己写函数,实现这个功能,亲测比较稳定!

    spcomm 3.0 串口通信控件

    Dialogs, StdCtrls, SPComm, TeEngine, Series, ExtCtrls, TeeProcs, Chart; type TForm1 = class(TForm) Comm1: TComm; ComboBox1: TComboBox; ComboBox2: TComboBox; ComboBox3: TComboBox; ComboBox4: ...

    SPCOMM v2.5 修正版

    SPCOMM 修正版 <br>1、支持中文的出错信息 2、支持部分的虚拟串口软件(如Virtual Null Modem) (Line 390) 3、支持COM10以上的串口 (Line 350) <br>作者:谢利洪 Email: xiliho221@163.com<br>日期...

    spcomm 3.0.rar

    delphi spcomm3.0控件代码

Global site tag (gtag.js) - Google Analytics