delphi编写串口通信有什么诀窍吗或是有这方面的书吗?我在这方面一无所知,还希望各位能多多指教
我给你写了三个过程,记得给我加分 
  FUNCTION  OpenComm(  number  :integer  ):THandle  ; 
  var  dcb  :  TDCB  ; 
          comm  :  pchar  ; 
  begin 
            comm  :=  pchar('com'  +  inttostr(number)  ); 
            result  :=  CreateFile(  comm, 
                                                        GENERIC_READ  or  GENERIC_WRITE, 
                                                        0,  {not  shared} 
                                                        nil,  {no  security  ??} 
                                                        OPEN_EXISTING, 
                                                        FILE_ATTRIBUTE_NORMAL  or  FILE_FLAG_OVERLAPPED, 
                                                        0  {template}  ); 
            GetCommState(result,DCB)  ; 
                WITH  DCB  DO 
            BEGIN 
                  Baudrate  :=  9600  ; 
                  Bytesize  :=  8  ; 
                  Parity  :=  0  ; 
                  StopBits  :=  0  ; 
            END  ; 
            SetcommState(result,DCB)  ; 
  end; 
  //传送数据到串口,handleOpenComm()返回的handle. 
  procedure  SendToComm(  handle  :THandle;  date  :  pchar  )  ; 
  begin 
            FileWrite(  handle,date^,length(date))  ; 
  end; 
  //关闭COM 
  procedure  CloseComm(  handle:THandle  )  ; 
  begin 
          CloseHandle(  handle  )  ; 
  end; 
其实串口通讯用SPCOMM控件是比较好的,这个控件带源码,可以看看别人怎么写控件,可以学到好多关于通讯的知识,另外使用非常方便。 
我进来学习delphi6  的串口通信编程,不知道是用spcomm好,还是mscomm好?
我一直在用spcomm,很好用的,放心用它吧
  至于用法,给你引篇文章:  Delphi中串口通信的实现    河南省计算中心  张海航   
    Delphi是一种具有功能强大、简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选择  Delphi作为开发工具编制各种应用程序。但是,美中不足之处是  Delphi没有自带的串口通信控件,在它
的帮助文档里也没有提及串口通信,这就给编制通信程序的开发人员带来许多不便。   
    目前,利用  Delphi实现串口通信的常用的方法有  3种:一是利用控件,如  MSCOMM控件和  SPCOMM控件;二是使用  API函数;三是调用其他串口通信程序。其中利用  API编写串口通信程序较为复杂,需要掌握大量的通信知识。相比较而言,利用  SPCOMM控件则相对较简单,并且该控件具有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作,而且还支持多线程。下面本文结合实例详细介绍  SPCOMM控件的使用。   
    SPCOMM的安装   
    1.选择下拉菜单  Component中的  Install  Component选项,弹出如图  1所示的窗口。   
      Unit  file  name处填写  SPCOMM控件所在的路径,其他各项可用默认值,点击  OK按钮。   
    2.安装后,在  System控件面板中将出现一个红控件  COM。现在就可以像  Delphi自带控件一样使用  COM控件了。   
    SPCOMM的属性、方法和事件   
    1.属性   
    ●CommName:表示  COM1  COM2等串口的名字;   
    ●BaudRate:根据实际需要设定的波特率,在串口打开后也可更改此值,实际波特率随之更改;   
    ●ParityCheck:表示是否需要奇偶校验;   
    ●ByteSize:根据实际情况设定的字节长度;   
    ●Parity:奇偶校验位;   
    ●StopBits:停止位;   
    ●SendDataEmpty:这是一个布尔型属性,为  true时表示发送缓存为空,或者发送队列里没有信息;为  false时表示发送缓存不为空,或者发送队列里有信息。   
    2.方法   
    ●Startcomm方法用于打开串口,当打开失败时通常会报错。错误主要有  7种:串口已经打开;打开串口错误;文件句柄不是通信句柄;不能够安装通信缓存;不能产生事件;不能产生读进程;不能产生写进程;   
    ●StopComm方法用于关闭串口,没有返回值;   
    ●WriteCommData(pDataToWrite:  PChar;dwSizeofDataToWrite:Word  )方法是个带有布尔型返回值的函数,用于将一个字符串发送到写进程,发送成功返回  true,发送失败返回  f
alse。执行此函数将立即得到返回值,发送操作随后执行。该函数有两个参数,其中  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)后  8051能收到一帧(  F0,01,FF,FF,01,F0),表示数据通信握手成功,两者之间就可以按照协议相互传输数据。   
    创建一个新的工程  COMM.DPR,把窗体的  NAME属性定为  FCOMM,把窗体的标题定义为测试通信,添加控件     
    1.设定  COMM1属性:   
    ●波特率:  4800   
    ●奇偶校验位:无;   
    ●字节长度:  8   
    ●停止位:  1   
    ●串口:  COM1   
    Memo1中将显示发送和接收的数据。将新的窗体存储为  Comm.pas   
    2.编写源代码   
    //变量说明   
    var   
    fcomm:  TFCOMM;   
    viewstring:string;   
    i:integer;   
    rbuf,sbuf:array[16]  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  fcommm1.writecommdata(@sbuf[i],1)  then   
        begin   
    commflg:=false;   
    break;   
    end;   
    //发送时字节间的延时   
    sleep(2);   
    viewstring:=viewstring  inttohex(sbuf[i],2)‘’  ;  end;   
    viewstring:=‘发送  viewstring;   
    1.lines.add(viewstring);   
    1.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(  f0);  //帧尾   
    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  01  F0和接收到  F0  01  FF  FF  01  F0,这表示
串口已正确地发送出数据并正确地接收到数据,则串口通信成功。   
 
Delphi  实现串口通讯,常用的几种方法为:使用控件如MSCOMMSPCOMM,使用API函数或者在Delphi  中调用其它串口通讯程序。利用API编写串口通信程序较为复杂,需要掌握大量通信知识,其优点是可实现的功能更强大,应用面更广泛,更适合于编写较为复杂的低层次通信程序。相比较而言,利用SPComm控件则相对较简单,该控件具有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作。 
        使用控件这一方法容易掌握,而SPCOMM支持多线程,所以SPCOMM控件的应用更加广泛。结合实例详细介绍SPCOMM的使用。 
      一.SPCOMM控件的安装 
      1.选择下拉菜单Component的第二项Install  Component       
        弹出窗口,Unit  file  name  处填写控件SPCOMM控件所在路径,其它可用默认值,点击OK按纽。     
  2.安装成功后,system控件面板中将出现一个红控件COMM。现在使用COMM控件可以象Delphi自带控件一样使用。         
  二.SPCOMM的主要属性,方法和事件 
      1.属性 
      CommName:填写COM1,COM2…等串口的名字,在打开串口前,必须填写好此值。   
      BaudRate:设定波特率96004800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随之更改。 
      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)   
    当接受数据时出现错误将触发该事件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。